Resources
-Here are some links to help you get started:
- - - - -Next Steps
-What do you want to do next with your app?
- - - -ng generate component xyz-
ng add @angular/material-
ng add _____-
ng test-
ng build --prod-
diff --git a/.ngx-unused-css.json b/.ngx-unused-css.json index ce7d97a..076fb65 100644 --- a/.ngx-unused-css.json +++ b/.ngx-unused-css.json @@ -6,5 +6,6 @@ "file": "app.component.scss", "selectors": [".unused-to-ignore"] } - ] + ], + "globalStyles": "examples/simpleAngularApp/src/styles.scss" } diff --git a/README.md b/README.md index 2c5e8f4..6c405a4 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,13 @@ _Optionally, override config path with CLI param: `ngx-unused-css --config=other Path to a project, for Angular it is usually `src/app` +### globalStyles + +- Type: `String` +- Default: `null` + +Path to global styles, usally it is `src/styles.scss` + ### importer Custom importer handler, more details here: https://github.com/sass/node-sass#importer--v200---experimental diff --git a/dist/src/main.js b/dist/src/main.js index e52c9fe..0882d09 100644 --- a/dist/src/main.js +++ b/dist/src/main.js @@ -8,9 +8,23 @@ var getUnusedClasses_1 = tslib_1.__importDefault(require("./main/getUnusedClasse var Main = /** @class */ (function () { function Main() { var _this = this; - new getUnusedClasses_1.default().getUnusedClasses(index_1.conf.path).then(function (res) { - if (res.length > 0) { - _this.log(res); + var unusedClasses = new getUnusedClasses_1.default(); + unusedClasses.getUnusedClasses(index_1.conf.path).then(function (res) { + if (index_1.conf.globalStyles) { + unusedClasses.getGlobalUnusedClasses(index_1.conf.globalStyles).then(function (r) { + if (r.length > 0) { + // @ts-ignore + res.push([r, "***** GLOBAL UNUSED CSS *****"]); + } + if (res.length > 0) { + _this.log(res); + } + }); + } + else { + if (res.length > 0) { + _this.log(res); + } } }); } diff --git a/dist/src/main.js.map b/dist/src/main.js.map index 8a6ddff..580a003 100644 --- a/dist/src/main.js.map +++ b/dist/src/main.js.map @@ -1 +1 @@ -{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":";;;AAAA,oCAAkC;AAClC,wDAA0B;AAC1B,+BAA8B;AAC9B,qFAAoD;AAEpD;IACE;QAAA,iBAMC;QALC,IAAI,0BAAa,EAAE,CAAC,gBAAgB,CAAC,YAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAA,GAAG;YACtD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClB,KAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aACf;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,kBAAG,GAAX,UAAY,OAAmB;QAC7B,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,uDAAuD,CAAC,CACzE,CAAC;QAEF,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,OAAO,CAAC,OAAO,CAAC,UAAA,CAAC;YACf,IAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,IAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAE/C,MAAM,IAAI,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;YACrC,MAAM,IAAI,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;YAEzC,IAAM,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEnC,MAAM,IAAI,aAAK,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,MAAM,CAAC,CAAC;IAC1D,CAAC;IACH,WAAC;AAAD,CAAC,AA9BD,IA8BC;AAED,kBAAe,IAAI,CAAC"} \ No newline at end of file +{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":";;;AAAA,oCAAkC;AAClC,wDAA0B;AAC1B,+BAA8B;AAC9B,qFAAoD;AAEpD;IACE;QAAA,iBAoBC;QAnBC,IAAM,aAAa,GAAG,IAAI,0BAAa,EAAE,CAAC;QAE1C,aAAa,CAAC,gBAAgB,CAAC,YAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAA,GAAG;YAChD,IAAI,YAAI,CAAC,YAAY,EAAE;gBACrB,aAAa,CAAC,sBAAsB,CAAC,YAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC;oBAC5D,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;wBAChB,aAAa;wBACb,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAAC,CAAC;qBAChD;oBACD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;wBAClB,KAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;qBACf;gBACH,CAAC,CAAC,CAAC;aACJ;iBAAM;gBACL,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;oBAClB,KAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBACf;aACF;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,kBAAG,GAAX,UAAY,OAA2B;QACrC,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,uDAAuD,CAAC,CACzE,CAAC;QAEF,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,OAAO,CAAC,OAAO,CAAC,UAAA,CAAC;YACf,IAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,IAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAE/C,MAAM,IAAI,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;YACrC,MAAM,IAAI,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;YAEzC,IAAM,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEnC,MAAM,IAAI,aAAK,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,MAAM,CAAC,CAAC;IAC1D,CAAC;IACH,WAAC;AAAD,CAAC,AA5CD,IA4CC;AAED,kBAAe,IAAI,CAAC"} \ No newline at end of file diff --git a/dist/src/main/getUnusedClasses.js b/dist/src/main/getUnusedClasses.js index d96ed95..df18d21 100644 --- a/dist/src/main/getUnusedClasses.js +++ b/dist/src/main/getUnusedClasses.js @@ -6,8 +6,9 @@ var findUnusedCss_1 = tslib_1.__importDefault(require("./findUnusedCss")); var fs = require("fs"); var UnusedClasses = /** @class */ (function () { function UnusedClasses() { + this.allHtmlContent = ""; } - UnusedClasses.prototype.unusedClassMapper = function (cssPath, html, htmlFile) { + UnusedClasses.prototype.unusedClassMapper = function (cssPath, htmlContent, htmlPath) { return tslib_1.__awaiter(this, void 0, void 0, function () { var classes, error_1, error_2; return tslib_1.__generator(this, function (_a) { @@ -18,17 +19,17 @@ var UnusedClasses = /** @class */ (function () { _a.label = 1; case 1: _a.trys.push([1, 3, , 4]); - return [4 /*yield*/, new findUnusedCss_1.default().findUnusedCss(html, cssPath)]; + return [4 /*yield*/, new findUnusedCss_1.default().findUnusedCss(htmlContent, cssPath)]; case 2: classes = _a.sent(); - return [2 /*return*/, [classes, htmlFile]]; + return [2 /*return*/, [classes, htmlPath]]; case 3: error_1 = _a.sent(); return [3 /*break*/, 4]; case 4: return [3 /*break*/, 6]; case 5: error_2 = _a.sent(); - console.log("Styling file for component " + htmlFile + " not found, skipping..."); + console.log("Styling file for component " + htmlPath + " not found, skipping..."); return [3 /*break*/, 6]; case 6: return [2 /*return*/]; } @@ -38,10 +39,11 @@ var UnusedClasses = /** @class */ (function () { UnusedClasses.prototype.mapClasses = function (list) { var _this = this; var promiseArray = list.map(function (element) { - var htmlFile = element; - var html = fs.readFileSync(htmlFile, "utf8"); - var cssPath = htmlFile.replace(".html", ".scss"); // same path as html but css means it is component - return _this.unusedClassMapper(cssPath, html, htmlFile); + var htmlPath = element; + var htmlContent = fs.readFileSync(htmlPath, "utf8"); + var cssPath = htmlPath.replace(".html", ".scss"); // same path as html but css means it is component + _this.allHtmlContent += htmlContent; + return _this.unusedClassMapper(cssPath, htmlContent, htmlPath); }); return Promise.all(promiseArray); }; @@ -51,6 +53,10 @@ var UnusedClasses = /** @class */ (function () { return r.filter(function (c) { return c[0].length > 0; }); }); }; + UnusedClasses.prototype.getGlobalUnusedClasses = function (globalStyles) { + var classes = new findUnusedCss_1.default().findUnusedCss(this.allHtmlContent, globalStyles); + return classes; + }; return UnusedClasses; }()); exports.default = UnusedClasses; diff --git a/dist/src/main/getUnusedClasses.js.map b/dist/src/main/getUnusedClasses.js.map index 2c439ea..5052458 100644 --- a/dist/src/main/getUnusedClasses.js.map +++ b/dist/src/main/getUnusedClasses.js.map @@ -1 +1 @@ -{"version":3,"file":"getUnusedClasses.js","sourceRoot":"","sources":["../../../src/main/getUnusedClasses.ts"],"names":[],"mappings":";;;AAAA,2EAA6C;AAC7C,0EAA4C;AAC5C,IAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzB;IAAA;IAgCA,CAAC;IA/BO,yCAAiB,GAAvB,UAAwB,OAAe,EAAE,IAAY,EAAE,QAAgB;;;;;;;wBAEnE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;;;;wBAEP,qBAAM,IAAI,uBAAa,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,EAAA;;wBAAhE,OAAO,GAAG,SAAsD;wBACtE,sBAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAC;;;;;;;wBAG7B,OAAO,CAAC,GAAG,CACT,6BAA6B,GAAG,QAAQ,GAAG,yBAAyB,CACrE,CAAC;;;;;;KAEL;IAED,kCAAU,GAAV,UAAW,IAAS;QAApB,iBASC;QARC,IAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,UAAA,OAAO;YACnC,IAAM,QAAQ,GAAG,OAAO,CAAC;YACzB,IAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC/C,IAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,kDAAkD;YAEtG,OAAO,KAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IAED,wCAAgB,GAAhB,UAAiB,WAAmB;QAClC,IAAM,IAAI,GAAG,IAAI,kBAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC;YACjC,OAAA,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAf,CAAe,CAAC;QAA9B,CAA8B,CACR,CAAC;IAC3B,CAAC;IACH,oBAAC;AAAD,CAAC,AAhCD,IAgCC"} \ No newline at end of file +{"version":3,"file":"getUnusedClasses.js","sourceRoot":"","sources":["../../../src/main/getUnusedClasses.ts"],"names":[],"mappings":";;;AAAA,2EAA6C;AAC7C,0EAA4C;AAC5C,IAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzB;IAAA;QACU,mBAAc,GAAG,EAAE,CAAC;IAkD9B,CAAC;IAhDO,yCAAiB,GAAvB,UACE,OAAe,EACf,WAAmB,EACnB,QAAgB;;;;;;;wBAGd,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;;;;wBAEP,qBAAM,IAAI,uBAAa,EAAE,CAAC,aAAa,CACrD,WAAW,EACX,OAAO,CACR,EAAA;;wBAHK,OAAO,GAAG,SAGf;wBACD,sBAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAC;;;;;;;wBAG7B,OAAO,CAAC,GAAG,CACT,6BAA6B,GAAG,QAAQ,GAAG,yBAAyB,CACrE,CAAC;;;;;;KAEL;IAED,kCAAU,GAAV,UAAW,IAAS;QAApB,iBAWC;QAVC,IAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,UAAA,OAAO;YACnC,IAAM,QAAQ,GAAG,OAAO,CAAC;YACzB,IAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACtD,IAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,kDAAkD;YAEtG,KAAI,CAAC,cAAc,IAAI,WAAW,CAAC;YAEnC,OAAO,KAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACnC,CAAC;IAED,wCAAgB,GAAhB,UAAiB,WAAmB;QAClC,IAAM,IAAI,GAAG,IAAI,kBAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAA,CAAC;YACjC,OAAO,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAf,CAAe,CAAC,CAAC;QACxC,CAAC,CAAgC,CAAC;IACpC,CAAC;IAED,8CAAsB,GAAtB,UAAuB,YAAoB;QACzC,IAAM,OAAO,GAAG,IAAI,uBAAa,EAAE,CAAC,aAAa,CAC/C,IAAI,CAAC,cAAc,EACnB,YAAY,CACb,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IACH,oBAAC;AAAD,CAAC,AAnDD,IAmDC"} \ No newline at end of file diff --git a/examples/simpleAngularApp/.ngx-unused-css.json b/examples/simpleAngularApp/.ngx-unused-css.json index d17a3b5..425c51b 100644 --- a/examples/simpleAngularApp/.ngx-unused-css.json +++ b/examples/simpleAngularApp/.ngx-unused-css.json @@ -1,6 +1,8 @@ { "path": "src/app", + "globalStyles": "src/styles.scss", "ignore": [ + ".mat-", "ng-star", { "file": "app.component.scss", diff --git a/examples/simpleAngularApp/src/app/app.component.html b/examples/simpleAngularApp/src/app/app.component.html index 42defb0..ce6e266 100644 --- a/examples/simpleAngularApp/src/app/app.component.html +++ b/examples/simpleAngularApp/src/app/app.component.html @@ -1,536 +1,5 @@ - - - - - - - - - - - - -
-Here are some links to help you get started:
- - - - -What do you want to do next with your app?
- - - -ng generate component xyz-
ng add @angular/material-
ng add _____-
ng test-
ng build --prod-
test-component works!
diff --git a/examples/simpleAngularApp/src/app/test-component/test-component.component.scss b/examples/simpleAngularApp/src/app/test-component/test-component.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/examples/simpleAngularApp/src/app/test-component/test-component.component.spec.ts b/examples/simpleAngularApp/src/app/test-component/test-component.component.spec.ts new file mode 100644 index 0000000..0e42004 --- /dev/null +++ b/examples/simpleAngularApp/src/app/test-component/test-component.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TestComponentComponent } from './test-component.component'; + +describe('TestComponentComponent', () => { + let component: TestComponentComponent; + let fixture: ComponentFixture