@servicetitan/startup 22.1.0 → 22.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,6 +5,7 @@ export * from './lint';
5
5
  export * from './prepare-package';
6
6
  export * from './start';
7
7
  export * from './tests';
8
+ export * from './styles-check';
8
9
  export interface Command {
9
10
  execute(): Promise<void>;
10
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AAExB,MAAM,WAAW,OAAO;IACpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAE/B,MAAM,WAAW,OAAO;IACpB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B"}
@@ -21,4 +21,5 @@ __exportStar(require("./lint"), exports);
21
21
  __exportStar(require("./prepare-package"), exports);
22
22
  __exportStar(require("./start"), exports);
23
23
  __exportStar(require("./tests"), exports);
24
+ __exportStar(require("./styles-check"), exports);
24
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,mDAAiC;AACjC,yCAAuB;AACvB,yCAAuB;AACvB,oDAAkC;AAClC,0CAAwB;AACxB,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,mDAAiC;AACjC,yCAAuB;AACvB,yCAAuB;AACvB,oDAAkC;AAClC,0CAAwB;AACxB,0CAAwB;AACxB,iDAA+B"}
@@ -2,6 +2,8 @@ import { Command } from '.';
2
2
  interface Args {
3
3
  _: string[];
4
4
  fix?: boolean;
5
+ scope?: string | string[];
6
+ ignore?: string | string[];
5
7
  }
6
8
  export declare class Lint implements Command {
7
9
  private args;
@@ -10,6 +12,7 @@ export declare class Lint implements Command {
10
12
  execute(): Promise<void>;
11
13
  private eslint;
12
14
  private stylelint;
15
+ private checkStyles;
13
16
  }
14
17
  export {};
15
18
  //# sourceMappingURL=lint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/lint.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC;AAE5B,UAAU,IAAI;IAEV,CAAC,EAAE,MAAM,EAAE,CAAC;IACZ,GAAG,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,IAAK,YAAW,OAAO;IAGpB,OAAO,CAAC,IAAI;IAFxB,KAAK,EAAE,MAAM,EAAE,CAAC;gBAEI,IAAI,EAAE,IAAI;IAIxB,OAAO;YAMC,MAAM;YA6CN,SAAS;CAwC1B"}
1
+ {"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/lint.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC;AAI5B,UAAU,IAAI;IAEV,CAAC,EAAE,MAAM,EAAE,CAAC;IACZ,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC9B;AAED,qBAAa,IAAK,YAAW,OAAO;IAGpB,OAAO,CAAC,IAAI;IAFxB,KAAK,EAAE,MAAM,EAAE,CAAC;gBAEI,IAAI,EAAE,IAAI;IAIxB,OAAO;YAOC,MAAM;YA6CN,SAAS;YA0CT,WAAW;CAW5B"}
@@ -37,6 +37,7 @@ const path_1 = __importDefault(require("path"));
37
37
  const eslint_1 = require("eslint");
38
38
  const stylelint_1 = __importDefault(require("stylelint"));
39
39
  const utils_1 = require("../../utils");
40
+ const exec = require('@lerna/exec');
40
41
  class Lint {
41
42
  constructor(args) {
42
43
  Object.defineProperty(this, "args", {
@@ -55,6 +56,7 @@ class Lint {
55
56
  }
56
57
  execute() {
57
58
  return __awaiter(this, void 0, void 0, function* () {
59
+ yield this.checkStyles();
58
60
  yield this.eslint();
59
61
  yield this.stylelint();
60
62
  });
@@ -121,6 +123,17 @@ class Lint {
121
123
  }
122
124
  });
123
125
  }
126
+ checkStyles() {
127
+ return __awaiter(this, void 0, void 0, function* () {
128
+ utils_1.log.info('Running the style check...');
129
+ const packages = (0, utils_1.getPackages)({ scope: this.args.scope, ignore: this.args.ignore });
130
+ yield exec({
131
+ cmd: 'startup styles-check',
132
+ scope: packages.map(({ name }) => name),
133
+ stream: true,
134
+ });
135
+ });
136
+ }
124
137
  }
125
138
  __decorate([
126
139
  utils_1.logErrors,
@@ -134,6 +147,12 @@ __decorate([
134
147
  __metadata("design:paramtypes", []),
135
148
  __metadata("design:returntype", Promise)
136
149
  ], Lint.prototype, "stylelint", null);
150
+ __decorate([
151
+ utils_1.logErrors,
152
+ __metadata("design:type", Function),
153
+ __metadata("design:paramtypes", []),
154
+ __metadata("design:returntype", Promise)
155
+ ], Lint.prototype, "checkStyles", null);
137
156
  exports.Lint = Lint;
138
157
  function pathUniJoin(...chunks) {
139
158
  return path_1.default.join(...chunks).replace(/\\/g, '/');
@@ -1 +1 @@
1
- {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../../src/cli/commands/lint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../../src/cli/commands/lint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { Command } from './index';
2
+ export declare class StylesCheck implements Command {
3
+ execute(): Promise<void>;
4
+ }
5
+ //# sourceMappingURL=styles-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles-check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/styles-check.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAyGlC,qBAAa,WAAY,YAAW,OAAO;IAEjC,OAAO;CAsBhB"}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.StylesCheck = void 0;
16
+ const fs_1 = __importDefault(require("fs"));
17
+ const path_1 = __importDefault(require("path"));
18
+ const process_1 = __importDefault(require("process"));
19
+ const utils_1 = require("../../utils");
20
+ const styleCheckError = [
21
+ '!!!!!!!!!!!!! STYLE CHECK ERROR !!!!!!!!!!!!!',
22
+ 'Style check failed with following errors:',
23
+ ];
24
+ const designSystem = 'design-system.css';
25
+ var PackageType;
26
+ (function (PackageType) {
27
+ PackageType["App"] = "app";
28
+ PackageType["WebComponent"] = "web_component";
29
+ })(PackageType || (PackageType = {}));
30
+ function readDir(startPath, filter) {
31
+ let out = [];
32
+ if (!fs_1.default.existsSync(startPath)) {
33
+ return out;
34
+ }
35
+ const files = fs_1.default.readdirSync(startPath);
36
+ for (const file of files) {
37
+ const filename = path_1.default.join(startPath, file);
38
+ const stat = fs_1.default.lstatSync(filename);
39
+ if (stat.isDirectory()) {
40
+ out = [...out, ...readDir(filename, filter)];
41
+ }
42
+ else if (filter.some(f => filename.endsWith(f))) {
43
+ out.push(filename);
44
+ }
45
+ }
46
+ return out;
47
+ }
48
+ const findStyleFiles = (basePath, sourceFolder) => {
49
+ const sourcePath = path_1.default.join(basePath, sourceFolder);
50
+ const files = readDir(sourcePath, ['.css', '.less']);
51
+ return files.map(f => ({
52
+ path: f,
53
+ relativePath: f.replace(sourcePath, '').substring(1),
54
+ }));
55
+ };
56
+ const checkStyleFiles = (files, packageType) => {
57
+ const errors = [];
58
+ const patterns = [
59
+ "@import '~@servicetitan/tokens/core/tokens.css';",
60
+ "@import '~@servicetitan/anvil-fonts/dist/css/anvil-fonts.css';",
61
+ "@import '~@servicetitan/design-system/dist/system.min.css';",
62
+ ];
63
+ for (const file of files) {
64
+ if ([PackageType.App, PackageType.WebComponent].includes(packageType) &&
65
+ file.relativePath === designSystem) {
66
+ continue;
67
+ }
68
+ const content = fs_1.default.readFileSync(file.path);
69
+ for (const pattern of patterns) {
70
+ if (content.includes(pattern)) {
71
+ errors.push(`file ${file.relativePath} contains link to "${pattern}"`);
72
+ }
73
+ }
74
+ }
75
+ return errors.length ? errors : undefined;
76
+ };
77
+ const checkErrors = (errors) => {
78
+ if (!errors) {
79
+ utils_1.log.info('style check: OK');
80
+ }
81
+ else {
82
+ utils_1.log.error([...styleCheckError, ...errors].join('\n'));
83
+ throw new Error('style check error, please check logs above');
84
+ }
85
+ };
86
+ function checkStylesLib(_files) {
87
+ /* ToDo: add checks for libraries */
88
+ }
89
+ function checkStylesApp(files) {
90
+ if (!files.some(f => f.relativePath === designSystem)) {
91
+ utils_1.log.warning("application doesn't have design-system.css. Please check https://docs.st.dev/docs/frontend/micro-frontends#host-configuration");
92
+ }
93
+ checkErrors(checkStyleFiles(files, PackageType.App));
94
+ }
95
+ function checkStylesWebComponent(files) {
96
+ checkErrors(checkStyleFiles(files, PackageType.WebComponent));
97
+ }
98
+ class StylesCheck {
99
+ // eslint-disable-next-line @typescript-eslint/require-await
100
+ execute() {
101
+ return __awaiter(this, void 0, void 0, function* () {
102
+ if ((0, utils_1.isLegacy)()) {
103
+ return;
104
+ }
105
+ if ((0, utils_1.isStyleCheckDisabled)()) {
106
+ utils_1.log.info('style check is disabled');
107
+ return;
108
+ }
109
+ const projectFolders = (0, utils_1.getFolders)();
110
+ const files = findStyleFiles(process_1.default.cwd(), projectFolders.source);
111
+ if (!(0, utils_1.isBundle)()) {
112
+ checkStylesLib(files);
113
+ }
114
+ else if ((0, utils_1.isWebComponent)()) {
115
+ checkStylesWebComponent(files);
116
+ }
117
+ else {
118
+ checkStylesApp(files);
119
+ }
120
+ });
121
+ }
122
+ }
123
+ exports.StylesCheck = StylesCheck;
124
+ //# sourceMappingURL=styles-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles-check.js","sourceRoot":"","sources":["../../../src/cli/commands/styles-check.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,sDAA8B;AAC9B,uCAOqB;AAQrB,MAAM,eAAe,GAAG;IACpB,+CAA+C;IAC/C,2CAA2C;CAC9C,CAAC;AACF,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEzC,IAAK,WAGJ;AAHD,WAAK,WAAW;IACZ,0BAAW,CAAA;IACX,6CAA8B,CAAA;AAClC,CAAC,EAHI,WAAW,KAAX,WAAW,QAGf;AAED,SAAS,OAAO,CAAC,SAAiB,EAAE,MAAgB;IAChD,IAAI,GAAG,GAAa,EAAE,CAAC;IAEvB,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAC3B,OAAO,GAAG,CAAC;KACd;IAED,MAAM,KAAK,GAAG,YAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACtB,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,YAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEpC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YACpB,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;SAChD;aAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;YAC/C,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACtB;KACJ;IAED,OAAO,GAAG,CAAC;AACf,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,YAAoB,EAAc,EAAE;IAC1E,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAErD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnB,IAAI,EAAE,CAAC;QACP,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;KACvD,CAAC,CAAC,CAAC;AACR,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,KAAiB,EAAE,WAAwB,EAAwB,EAAE;IAC1F,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,MAAM,QAAQ,GAAG;QACb,kDAAkD;QAClD,gEAAgE;QAChE,6DAA6D;KAChE,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACtB,IACI,CAAC,WAAW,CAAC,GAAG,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;YACjE,IAAI,CAAC,YAAY,KAAK,YAAY,EACpC;YACE,SAAS;SACZ;QAED,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC5B,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;gBAC3B,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,sBAAsB,OAAO,GAAG,CAAC,CAAC;aAC1E;SACJ;KACJ;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,MAA4B,EAAE,EAAE;IACjD,IAAI,CAAC,MAAM,EAAE;QACT,WAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;KAC/B;SAAM;QACH,WAAG,CAAC,KAAK,CAAC,CAAC,GAAG,eAAe,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;KACjE;AACL,CAAC,CAAC;AAEF,SAAS,cAAc,CAAC,MAAkB;IACtC,oCAAoC;AACxC,CAAC;AAED,SAAS,cAAc,CAAC,KAAiB;IACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,YAAY,CAAC,EAAE;QACnD,WAAG,CAAC,OAAO,CACP,+HAA+H,CAClI,CAAC;KACL;IAED,WAAW,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAiB;IAC9C,WAAW,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAa,WAAW;IACpB,4DAA4D;IACtD,OAAO;;YACT,IAAI,IAAA,gBAAQ,GAAE,EAAE;gBACZ,OAAO;aACV;YAED,IAAI,IAAA,4BAAoB,GAAE,EAAE;gBACxB,WAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBAEpC,OAAO;aACV;YAED,MAAM,cAAc,GAAG,IAAA,kBAAU,GAAE,CAAC;YACpC,MAAM,KAAK,GAAG,cAAc,CAAC,iBAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;YAEnE,IAAI,CAAC,IAAA,gBAAQ,GAAE,EAAE;gBACb,cAAc,CAAC,KAAK,CAAC,CAAC;aACzB;iBAAM,IAAI,IAAA,sBAAc,GAAE,EAAE;gBACzB,uBAAuB,CAAC,KAAK,CAAC,CAAC;aAClC;iBAAM;gBACH,cAAc,CAAC,KAAK,CAAC,CAAC;aACzB;QACL,CAAC;KAAA;CACJ;AAxBD,kCAwBC"}
package/dist/cli/index.js CHANGED
@@ -19,6 +19,8 @@ function getCommand(name) {
19
19
  return commands_1.Lint;
20
20
  case 'test':
21
21
  return commands_1.Tests;
22
+ case 'styles-check':
23
+ return commands_1.StylesCheck;
22
24
  default:
23
25
  utils_1.log.error(`${name}: command not found!`);
24
26
  process.exit(127);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AAAA,iCAAwC;AAExC,oCAA+B;AAC/B,yCASoB;AAMpB,SAAS,UAAU,CAAC,IAAY;IAC5B,QAAQ,IAAI,EAAE;QACV,KAAK,MAAM;YACP,OAAO,eAAI,CAAC;QAEhB,KAAK,iBAAiB;YAClB,OAAO,yBAAc,CAAC;QAE1B,KAAK,OAAO;YACR,OAAO,gBAAK,CAAC;QAEjB,KAAK,OAAO;YACR,OAAO,gBAAK,CAAC;QAEjB,KAAK,gBAAgB;YACjB,OAAO,wBAAa,CAAC;QAEzB,KAAK,MAAM;YACP,OAAO,eAAI,CAAC;QAEhB,KAAK,MAAM;YACP,OAAO,gBAAK,CAAC;QAEjB;YACI,WAAG,CAAC,KAAK,CAAC,GAAG,IAAI,sBAAsB,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACzB;AACL,CAAC;AAED,MAAM,QAAQ,GAAG,YAAiB,CAAC;AAEnC,gEAAgE;AAChE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,iCAAM,QAAQ,KAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAG;KAC9E,OAAO,EAAE;KACT,KAAK,CAAC,GAAG,EAAE;IACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AAAA,iCAAwC;AAExC,oCAA+B;AAC/B,yCAUoB;AAMpB,SAAS,UAAU,CAAC,IAAY;IAC5B,QAAQ,IAAI,EAAE;QACV,KAAK,MAAM;YACP,OAAO,eAAI,CAAC;QAEhB,KAAK,iBAAiB;YAClB,OAAO,yBAAc,CAAC;QAE1B,KAAK,OAAO;YACR,OAAO,gBAAK,CAAC;QAEjB,KAAK,OAAO;YACR,OAAO,gBAAK,CAAC;QAEjB,KAAK,gBAAgB;YACjB,OAAO,wBAAa,CAAC;QAEzB,KAAK,MAAM;YACP,OAAO,eAAI,CAAC;QAEhB,KAAK,MAAM;YACP,OAAO,gBAAK,CAAC;QAEjB,KAAK,cAAc;YACf,OAAO,sBAAW,CAAC;QAEvB;YACI,WAAG,CAAC,KAAK,CAAC,GAAG,IAAI,sBAAsB,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACzB;AACL,CAAC;AAED,MAAM,QAAQ,GAAG,YAAiB,CAAC;AAEnC,gEAAgE;AAChE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,iCAAM,QAAQ,KAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAG;KAC9E,OAAO,EAAE;KACT,KAAK,CAAC,GAAG,EAAE;IACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
@@ -7,6 +7,7 @@ declare type ElementType<T> = T extends readonly (infer ElementType)[] ? Element
7
7
  export interface WebpackConfiguration extends Omit<Pick<WebpackDevServerConfiguration, ElementType<typeof allowedWebpackDevServerOptions>>, 'proxy'> {
8
8
  'custom-style-rules'?: boolean;
9
9
  'expose-shared-dependencies'?: boolean;
10
+ 'disable-style-check'?: boolean;
10
11
  'proxy'?: WebpackDevServerConfiguration['proxy'] | string;
11
12
  }
12
13
  export interface ESLintConfiguration extends ESLint.Options {
@@ -37,5 +38,6 @@ export declare function isLegacy(location?: string): boolean;
37
38
  export declare function getESLintConfiguration(): ESLintConfiguration;
38
39
  export declare function getStylelintConfiguration(): StylelintConfiguration;
39
40
  export declare function getJestConfiguration(): JestConfiguration;
41
+ export declare function isStyleCheckDisabled(): boolean;
40
42
  export {};
41
43
  //# sourceMappingURL=get-configuration.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-configuration.d.ts","sourceRoot":"","sources":["../../src/utils/get-configuration.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,IAAI,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,QAAA,MAAM,8BAA8B,uCAAwC,CAAC;AAE7E,aAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,WAAW,CAAC,EAAE,GAAG,WAAW,GAAG,KAAK,CAAC;AAErF,MAAM,WAAW,oBACb,SAAQ,IAAI,CACR,IAAI,CAAC,6BAA6B,EAAE,WAAW,CAAC,OAAO,8BAA8B,CAAC,CAAC,EACvF,OAAO,CACV;IACD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,OAAO,CAAC,EAAE,6BAA6B,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;CAC7D;AAED,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,OAAO;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,sBAAuB,SAAQ,OAAO,CAAC,aAAa,CAAC;IAClE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,oBAAY,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC;AAE9D,UAAU,aAAa;IACnB,SAAS,CAAC,EAAE,KAAK,GAAG,oBAAoB,CAAC;IACzC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE;QACL,MAAM,EAAE,mBAAmB,CAAC;QAC5B,SAAS,EAAE,sBAAsB,CAAC;KACrC,CAAC;IACF,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,SAAO,GAAG,aAAa,CAE/D;AAED,wBAAgB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,WAEzC;AAED,wBAAgB,kBAAkB,YAQjC;AAED,wBAAgB,0BAA0B,YAQzC;AAUD,wBAAgB,yBAAyB,kFAqBxC;AAED,wBAAgB,cAAc,YAE7B;AAED,wBAAgB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,WAEzC;AAED,wBAAgB,sBAAsB,wBAErC;AAED,wBAAgB,yBAAyB,2BAExC;AAED,wBAAgB,oBAAoB,sBAEnC"}
1
+ {"version":3,"file":"get-configuration.d.ts","sourceRoot":"","sources":["../../src/utils/get-configuration.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,IAAI,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,QAAA,MAAM,8BAA8B,uCAAwC,CAAC;AAE7E,aAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,WAAW,CAAC,EAAE,GAAG,WAAW,GAAG,KAAK,CAAC;AAErF,MAAM,WAAW,oBACb,SAAQ,IAAI,CACR,IAAI,CAAC,6BAA6B,EAAE,WAAW,CAAC,OAAO,8BAA8B,CAAC,CAAC,EACvF,OAAO,CACV;IACD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,OAAO,CAAC,EAAE,6BAA6B,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;CAC7D;AAED,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,OAAO;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,sBAAuB,SAAQ,OAAO,CAAC,aAAa,CAAC;IAClE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,oBAAY,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC;AAE9D,UAAU,aAAa;IACnB,SAAS,CAAC,EAAE,KAAK,GAAG,oBAAoB,CAAC;IACzC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE;QACL,MAAM,EAAE,mBAAmB,CAAC;QAC5B,SAAS,EAAE,sBAAsB,CAAC;KACrC,CAAC;IACF,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,SAAO,GAAG,aAAa,CAE/D;AAED,wBAAgB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,WAEzC;AAED,wBAAgB,kBAAkB,YAQjC;AAED,wBAAgB,0BAA0B,YAQzC;AAUD,wBAAgB,yBAAyB,kFAqBxC;AAED,wBAAgB,cAAc,YAE7B;AAED,wBAAgB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,WAEzC;AAED,wBAAgB,sBAAsB,wBAErC;AAED,wBAAgB,yBAAyB,2BAExC;AAED,wBAAgB,oBAAoB,sBAEnC;AAED,wBAAgB,oBAAoB,YAQnC"}
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getJestConfiguration = exports.getStylelintConfiguration = exports.getESLintConfiguration = exports.isLegacy = exports.isWebComponent = exports.getDevServerConfiguration = exports.isExposeSharedDependencies = exports.isCustomStyleRules = exports.isBundle = exports.getConfiguration = void 0;
6
+ exports.isStyleCheckDisabled = exports.getJestConfiguration = exports.getStylelintConfiguration = exports.getESLintConfiguration = exports.isLegacy = exports.isWebComponent = exports.getDevServerConfiguration = exports.isExposeSharedDependencies = exports.isCustomStyleRules = exports.isBundle = exports.getConfiguration = void 0;
7
7
  const fs_1 = __importDefault(require("fs"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  const _1 = require(".");
@@ -78,4 +78,13 @@ function getJestConfiguration() {
78
78
  return (_a = getConfiguration().test) !== null && _a !== void 0 ? _a : {};
79
79
  }
80
80
  exports.getJestConfiguration = getJestConfiguration;
81
+ function isStyleCheckDisabled() {
82
+ var _a;
83
+ const configuration = getConfiguration();
84
+ if (typeof configuration.webpack !== 'object') {
85
+ return false;
86
+ }
87
+ return ((_a = configuration.webpack) === null || _a === void 0 ? void 0 : _a['disable-style-check']) === true;
88
+ }
89
+ exports.isStyleCheckDisabled = isStyleCheckDisabled;
81
90
  //# sourceMappingURL=get-configuration.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-configuration.js","sourceRoot":"","sources":["../../src/utils/get-configuration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-configuration.js","sourceRoot":"","sources":["../../src/utils/get-configuration.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicetitan/startup",
3
- "version": "22.1.0",
3
+ "version": "22.2.0",
4
4
  "description": "",
5
5
  "homepage": "https://docs.st.dev/docs/frontend/startup",
6
6
  "repository": {
@@ -37,8 +37,8 @@
37
37
  "@jest/core": "~27.5.1",
38
38
  "@jest/types": "~27.5.1",
39
39
  "@lerna/exec": "~5.6.2",
40
- "@servicetitan/eslint-config": "22.1.0",
41
- "@servicetitan/stylelint-config": "22.1.0",
40
+ "@servicetitan/eslint-config": "22.2.0",
41
+ "@servicetitan/stylelint-config": "22.2.0",
42
42
  "@types/jest": "~27.4.0",
43
43
  "chalk": "~4.1.2",
44
44
  "chokidar": "~3.5.3",
@@ -46,7 +46,7 @@
46
46
  "css-loader": "~6.7.2",
47
47
  "deepmerge": "~4.2.2",
48
48
  "esbuild-loader": "~2.20.0",
49
- "eslint": "~8.27.0",
49
+ "eslint": "~8.28.0",
50
50
  "execa": "~5.1.1",
51
51
  "fork-ts-checker-webpack-plugin": "~7.2.13",
52
52
  "glob": "~7.2.0",
@@ -59,8 +59,8 @@
59
59
  "less": "~4.1.3",
60
60
  "less-loader": "~10.2.0",
61
61
  "less-plugin-npm-import": "~2.1.0",
62
- "memfs": "~3.4.11",
63
- "mini-css-extract-plugin": "~2.6.1",
62
+ "memfs": "~3.4.12",
63
+ "mini-css-extract-plugin": "~2.7.1",
64
64
  "moment-locales-webpack-plugin": "~1.2.0",
65
65
  "portfinder": "~1.0.28",
66
66
  "prettier": "~2.7.1",
@@ -92,5 +92,5 @@
92
92
  "cli": {
93
93
  "webpack": false
94
94
  },
95
- "gitHead": "56ffd93619b8fd85a355c00eb2d57e95389a23e8"
95
+ "gitHead": "cbb2dd04f51e14f207ade193ba2a167d6f220f61"
96
96
  }
@@ -5,6 +5,7 @@ export * from './lint';
5
5
  export * from './prepare-package';
6
6
  export * from './start';
7
7
  export * from './tests';
8
+ export * from './styles-check';
8
9
 
9
10
  export interface Command {
10
11
  execute(): Promise<void>;
@@ -6,16 +6,21 @@ import stylelint from 'stylelint';
6
6
  import {
7
7
  getDestinationFolders,
8
8
  getESLintConfiguration,
9
+ getPackages,
9
10
  getStylelintConfiguration,
10
11
  log,
11
12
  logErrors,
12
13
  } from '../../utils';
13
14
  import { Command } from '.';
14
15
 
16
+ const exec = require('@lerna/exec');
17
+
15
18
  interface Args {
16
19
  // eslint-disable-next-line @typescript-eslint/naming-convention
17
20
  _: string[];
18
21
  fix?: boolean;
22
+ scope?: string | string[];
23
+ ignore?: string | string[];
19
24
  }
20
25
 
21
26
  export class Lint implements Command {
@@ -26,6 +31,7 @@ export class Lint implements Command {
26
31
  }
27
32
 
28
33
  async execute() {
34
+ await this.checkStyles();
29
35
  await this.eslint();
30
36
  await this.stylelint();
31
37
  }
@@ -116,6 +122,19 @@ export class Lint implements Command {
116
122
  process.exitCode = 1;
117
123
  }
118
124
  }
125
+
126
+ @logErrors
127
+ private async checkStyles() {
128
+ log.info('Running the style check...');
129
+
130
+ const packages = getPackages({ scope: this.args.scope, ignore: this.args.ignore });
131
+
132
+ await exec({
133
+ cmd: 'startup styles-check',
134
+ scope: packages.map(({ name }) => name),
135
+ stream: true,
136
+ });
137
+ }
119
138
  }
120
139
 
121
140
  function pathUniJoin(...chunks: string[]) {
@@ -0,0 +1,141 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import process from 'process';
4
+ import {
5
+ getFolders,
6
+ isBundle,
7
+ isLegacy,
8
+ isStyleCheckDisabled,
9
+ isWebComponent,
10
+ log,
11
+ } from '../../utils';
12
+ import { Command } from './index';
13
+
14
+ interface FileInfo {
15
+ path: string;
16
+ relativePath: string;
17
+ }
18
+
19
+ const styleCheckError = [
20
+ '!!!!!!!!!!!!! STYLE CHECK ERROR !!!!!!!!!!!!!',
21
+ 'Style check failed with following errors:',
22
+ ];
23
+ const designSystem = 'design-system.css';
24
+
25
+ enum PackageType {
26
+ App = 'app',
27
+ WebComponent = 'web_component',
28
+ }
29
+
30
+ function readDir(startPath: string, filter: string[]): string[] {
31
+ let out: string[] = [];
32
+
33
+ if (!fs.existsSync(startPath)) {
34
+ return out;
35
+ }
36
+
37
+ const files = fs.readdirSync(startPath);
38
+ for (const file of files) {
39
+ const filename = path.join(startPath, file);
40
+ const stat = fs.lstatSync(filename);
41
+
42
+ if (stat.isDirectory()) {
43
+ out = [...out, ...readDir(filename, filter)];
44
+ } else if (filter.some(f => filename.endsWith(f))) {
45
+ out.push(filename);
46
+ }
47
+ }
48
+
49
+ return out;
50
+ }
51
+
52
+ const findStyleFiles = (basePath: string, sourceFolder: string): FileInfo[] => {
53
+ const sourcePath = path.join(basePath, sourceFolder);
54
+ const files = readDir(sourcePath, ['.css', '.less']);
55
+
56
+ return files.map(f => ({
57
+ path: f,
58
+ relativePath: f.replace(sourcePath, '').substring(1),
59
+ }));
60
+ };
61
+
62
+ const checkStyleFiles = (files: FileInfo[], packageType: PackageType): string[] | undefined => {
63
+ const errors = [];
64
+ const patterns = [
65
+ "@import '~@servicetitan/tokens/core/tokens.css';",
66
+ "@import '~@servicetitan/anvil-fonts/dist/css/anvil-fonts.css';",
67
+ "@import '~@servicetitan/design-system/dist/system.min.css';",
68
+ ];
69
+
70
+ for (const file of files) {
71
+ if (
72
+ [PackageType.App, PackageType.WebComponent].includes(packageType) &&
73
+ file.relativePath === designSystem
74
+ ) {
75
+ continue;
76
+ }
77
+
78
+ const content = fs.readFileSync(file.path);
79
+
80
+ for (const pattern of patterns) {
81
+ if (content.includes(pattern)) {
82
+ errors.push(`file ${file.relativePath} contains link to "${pattern}"`);
83
+ }
84
+ }
85
+ }
86
+
87
+ return errors.length ? errors : undefined;
88
+ };
89
+
90
+ const checkErrors = (errors: string[] | undefined) => {
91
+ if (!errors) {
92
+ log.info('style check: OK');
93
+ } else {
94
+ log.error([...styleCheckError, ...errors].join('\n'));
95
+ throw new Error('style check error, please check logs above');
96
+ }
97
+ };
98
+
99
+ function checkStylesLib(_files: FileInfo[]) {
100
+ /* ToDo: add checks for libraries */
101
+ }
102
+
103
+ function checkStylesApp(files: FileInfo[]) {
104
+ if (!files.some(f => f.relativePath === designSystem)) {
105
+ log.warning(
106
+ "application doesn't have design-system.css. Please check https://docs.st.dev/docs/frontend/micro-frontends#host-configuration"
107
+ );
108
+ }
109
+
110
+ checkErrors(checkStyleFiles(files, PackageType.App));
111
+ }
112
+
113
+ function checkStylesWebComponent(files: FileInfo[]) {
114
+ checkErrors(checkStyleFiles(files, PackageType.WebComponent));
115
+ }
116
+
117
+ export class StylesCheck implements Command {
118
+ // eslint-disable-next-line @typescript-eslint/require-await
119
+ async execute() {
120
+ if (isLegacy()) {
121
+ return;
122
+ }
123
+
124
+ if (isStyleCheckDisabled()) {
125
+ log.info('style check is disabled');
126
+
127
+ return;
128
+ }
129
+
130
+ const projectFolders = getFolders();
131
+ const files = findStyleFiles(process.cwd(), projectFolders.source);
132
+
133
+ if (!isBundle()) {
134
+ checkStylesLib(files);
135
+ } else if (isWebComponent()) {
136
+ checkStylesWebComponent(files);
137
+ } else {
138
+ checkStylesApp(files);
139
+ }
140
+ }
141
+ }
package/src/cli/index.ts CHANGED
@@ -10,6 +10,7 @@ import {
10
10
  BundlePackage,
11
11
  Lint,
12
12
  Tests,
13
+ StylesCheck,
13
14
  } from './commands';
14
15
 
15
16
  interface Newable<T> {
@@ -39,6 +40,9 @@ function getCommand(name: string): Newable<Command> {
39
40
  case 'test':
40
41
  return Tests;
41
42
 
43
+ case 'styles-check':
44
+ return StylesCheck;
45
+
42
46
  default:
43
47
  log.error(`${name}: command not found!`);
44
48
  process.exit(127);
@@ -19,6 +19,7 @@ export interface WebpackConfiguration
19
19
  > {
20
20
  'custom-style-rules'?: boolean;
21
21
  'expose-shared-dependencies'?: boolean;
22
+ 'disable-style-check'?: boolean;
22
23
  'proxy'?: WebpackDevServerConfiguration['proxy'] | string;
23
24
  }
24
25
 
@@ -122,3 +123,13 @@ export function getStylelintConfiguration() {
122
123
  export function getJestConfiguration() {
123
124
  return getConfiguration().test ?? {};
124
125
  }
126
+
127
+ export function isStyleCheckDisabled() {
128
+ const configuration = getConfiguration();
129
+
130
+ if (typeof configuration.webpack !== 'object') {
131
+ return false;
132
+ }
133
+
134
+ return configuration.webpack?.['disable-style-check'] === true;
135
+ }