@servicetitan/startup 22.17.0 → 22.19.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.
- package/dist/cli/commands/build.d.ts +3 -2
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +1 -0
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/bundle-package.d.ts +2 -1
- package/dist/cli/commands/bundle-package.d.ts.map +1 -1
- package/dist/cli/commands/bundle-package.js +4 -3
- package/dist/cli/commands/bundle-package.js.map +1 -1
- package/dist/cli/commands/mfe-publish.d.ts +1 -0
- package/dist/cli/commands/mfe-publish.d.ts.map +1 -1
- package/dist/cli/commands/mfe-publish.js +3 -2
- package/dist/cli/commands/mfe-publish.js.map +1 -1
- package/dist/cli/commands/start.d.ts +3 -2
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +3 -2
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/utils/bundle.d.ts +7 -2
- package/dist/cli/utils/bundle.d.ts.map +1 -1
- package/dist/cli/utils/bundle.js +28 -58
- package/dist/cli/utils/bundle.js.map +1 -1
- package/dist/cli/utils/set-node-options.d.ts.map +1 -1
- package/dist/cli/utils/set-node-options.js +1 -1
- package/dist/cli/utils/set-node-options.js.map +1 -1
- package/dist/utils/debug.d.ts +5 -0
- package/dist/utils/debug.d.ts.map +1 -0
- package/dist/utils/debug.js +19 -0
- package/dist/utils/debug.js.map +1 -0
- package/dist/utils/get-configuration.d.ts +1 -0
- package/dist/utils/get-configuration.d.ts.map +1 -1
- package/dist/utils/get-configuration.js +6 -1
- package/dist/utils/get-configuration.js.map +1 -1
- package/dist/utils/log.d.ts +6 -0
- package/dist/utils/log.d.ts.map +1 -1
- package/dist/utils/log.js +22 -0
- package/dist/utils/log.js.map +1 -1
- package/dist/webpack/__mocks__/file-rules.d.ts +3 -0
- package/dist/webpack/__mocks__/file-rules.d.ts.map +1 -0
- package/dist/webpack/__mocks__/file-rules.js +31 -0
- package/dist/webpack/__mocks__/file-rules.js.map +1 -0
- package/dist/webpack/__mocks__/index.d.ts +3 -0
- package/dist/webpack/__mocks__/index.d.ts.map +1 -0
- package/dist/webpack/__mocks__/index.js +19 -0
- package/dist/webpack/__mocks__/index.js.map +1 -0
- package/dist/webpack/__mocks__/style-rules.d.ts +8 -0
- package/dist/webpack/__mocks__/style-rules.d.ts.map +1 -0
- package/dist/webpack/__mocks__/style-rules.js +124 -0
- package/dist/webpack/__mocks__/style-rules.js.map +1 -0
- package/dist/webpack/configs/cache-config.d.ts +6 -0
- package/dist/webpack/configs/cache-config.d.ts.map +1 -0
- package/dist/webpack/configs/cache-config.js +24 -0
- package/dist/webpack/configs/cache-config.js.map +1 -0
- package/dist/webpack/configs/dev-server-config.d.ts +6 -0
- package/dist/webpack/configs/dev-server-config.d.ts.map +1 -0
- package/dist/webpack/configs/dev-server-config.js +27 -0
- package/dist/webpack/configs/dev-server-config.js.map +1 -0
- package/dist/webpack/configs/devtool-config.d.ts +6 -0
- package/dist/webpack/configs/devtool-config.d.ts.map +1 -0
- package/dist/webpack/configs/devtool-config.js +16 -0
- package/dist/webpack/configs/devtool-config.js.map +1 -0
- package/dist/webpack/configs/entry.config.d.ts +6 -0
- package/dist/webpack/configs/entry.config.d.ts.map +1 -0
- package/dist/webpack/configs/entry.config.js +14 -0
- package/dist/webpack/configs/entry.config.js.map +1 -0
- package/dist/webpack/configs/externals-config.d.ts +6 -0
- package/dist/webpack/configs/externals-config.d.ts.map +1 -0
- package/dist/webpack/configs/externals-config.js +16 -0
- package/dist/webpack/configs/externals-config.js.map +1 -0
- package/dist/webpack/configs/index.d.ts +13 -0
- package/dist/webpack/configs/index.d.ts.map +1 -0
- package/dist/webpack/configs/index.js +29 -0
- package/dist/webpack/configs/index.js.map +1 -0
- package/dist/webpack/configs/loaders/css-loader.d.ts +14 -0
- package/dist/webpack/configs/loaders/css-loader.d.ts.map +1 -0
- package/dist/webpack/configs/loaders/css-loader.js +17 -0
- package/dist/webpack/configs/loaders/css-loader.js.map +1 -0
- package/dist/webpack/configs/loaders/index.d.ts +5 -0
- package/dist/webpack/configs/loaders/index.d.ts.map +1 -0
- package/dist/webpack/configs/loaders/index.js +21 -0
- package/dist/webpack/configs/loaders/index.js.map +1 -0
- package/dist/webpack/configs/loaders/less-loader.d.ts +9 -0
- package/dist/webpack/configs/loaders/less-loader.d.ts.map +1 -0
- package/dist/webpack/configs/loaders/less-loader.js +8 -0
- package/dist/webpack/configs/loaders/less-loader.js.map +1 -0
- package/dist/webpack/configs/loaders/style-loader.d.ts +9 -0
- package/dist/webpack/configs/loaders/style-loader.d.ts.map +1 -0
- package/dist/webpack/configs/loaders/style-loader.js +13 -0
- package/dist/webpack/configs/loaders/style-loader.js.map +1 -0
- package/dist/webpack/configs/loaders/types.d.ts +4 -0
- package/dist/webpack/configs/loaders/types.d.ts.map +1 -0
- package/dist/webpack/configs/loaders/types.js +3 -0
- package/dist/webpack/configs/loaders/types.js.map +1 -0
- package/dist/webpack/configs/module-config.d.ts +6 -0
- package/dist/webpack/configs/module-config.d.ts.map +1 -0
- package/dist/webpack/configs/module-config.js +10 -0
- package/dist/webpack/configs/module-config.js.map +1 -0
- package/dist/webpack/configs/optimization-config.d.ts +6 -0
- package/dist/webpack/configs/optimization-config.d.ts.map +1 -0
- package/dist/webpack/configs/optimization-config.js +57 -0
- package/dist/webpack/configs/optimization-config.js.map +1 -0
- package/dist/webpack/configs/output-config.d.ts +6 -0
- package/dist/webpack/configs/output-config.d.ts.map +1 -0
- package/dist/webpack/configs/output-config.js +23 -0
- package/dist/webpack/configs/output-config.js.map +1 -0
- package/dist/webpack/configs/plugins/assets-manifest-plugin.d.ts +4 -0
- package/dist/webpack/configs/plugins/assets-manifest-plugin.d.ts.map +1 -0
- package/dist/webpack/configs/plugins/assets-manifest-plugin.js +34 -0
- package/dist/webpack/configs/plugins/assets-manifest-plugin.js.map +1 -0
- package/dist/webpack/configs/plugins/bundle-analyser-plugin.d.ts +3 -0
- package/dist/webpack/configs/plugins/bundle-analyser-plugin.d.ts.map +1 -0
- package/dist/webpack/configs/plugins/bundle-analyser-plugin.js +20 -0
- package/dist/webpack/configs/plugins/bundle-analyser-plugin.js.map +1 -0
- package/dist/webpack/configs/plugins/define-exposed-dependencies-plugin.d.ts +4 -0
- package/dist/webpack/configs/plugins/define-exposed-dependencies-plugin.d.ts.map +1 -0
- package/dist/webpack/configs/plugins/define-exposed-dependencies-plugin.js +25 -0
- package/dist/webpack/configs/plugins/define-exposed-dependencies-plugin.js.map +1 -0
- package/dist/webpack/configs/plugins/define-web-component-name-plugin.d.ts +4 -0
- package/dist/webpack/configs/plugins/define-web-component-name-plugin.d.ts.map +1 -0
- package/dist/webpack/configs/plugins/define-web-component-name-plugin.js +16 -0
- package/dist/webpack/configs/plugins/define-web-component-name-plugin.js.map +1 -0
- package/dist/webpack/configs/plugins/filter-warnings-plugin.d.ts +3 -0
- package/dist/webpack/configs/plugins/filter-warnings-plugin.d.ts.map +1 -0
- package/dist/webpack/configs/plugins/filter-warnings-plugin.js +14 -0
- package/dist/webpack/configs/plugins/filter-warnings-plugin.js.map +1 -0
- package/dist/webpack/configs/plugins/html-plugin.d.ts +4 -0
- package/dist/webpack/configs/plugins/html-plugin.d.ts.map +1 -0
- package/dist/webpack/configs/plugins/html-plugin.js +42 -0
- package/dist/webpack/configs/plugins/html-plugin.js.map +1 -0
- package/dist/webpack/configs/plugins/index.d.ts +12 -0
- package/dist/webpack/configs/plugins/index.d.ts.map +1 -0
- package/dist/webpack/configs/plugins/index.js +28 -0
- package/dist/webpack/configs/plugins/index.js.map +1 -0
- package/dist/webpack/configs/plugins/mini-css-extract-plugin.d.ts +4 -0
- package/dist/webpack/configs/plugins/mini-css-extract-plugin.d.ts.map +1 -0
- package/dist/webpack/configs/plugins/mini-css-extract-plugin.js +23 -0
- package/dist/webpack/configs/plugins/mini-css-extract-plugin.js.map +1 -0
- package/dist/webpack/configs/plugins/moment-locales-plugin.d.ts +4 -0
- package/dist/webpack/configs/plugins/moment-locales-plugin.d.ts.map +1 -0
- package/dist/webpack/configs/plugins/moment-locales-plugin.js +14 -0
- package/dist/webpack/configs/plugins/moment-locales-plugin.js.map +1 -0
- package/dist/webpack/configs/plugins/provide-react-plugin.d.ts +4 -0
- package/dist/webpack/configs/plugins/provide-react-plugin.d.ts.map +1 -0
- package/dist/webpack/configs/plugins/provide-react-plugin.js +14 -0
- package/dist/webpack/configs/plugins/provide-react-plugin.js.map +1 -0
- package/dist/webpack/configs/plugins/ts-checker-plugin.d.ts +4 -0
- package/dist/webpack/configs/plugins/ts-checker-plugin.d.ts.map +1 -0
- package/dist/webpack/configs/plugins/ts-checker-plugin.js +31 -0
- package/dist/webpack/configs/plugins/ts-checker-plugin.js.map +1 -0
- package/dist/webpack/configs/plugins/virtual-modules-plugin.d.ts +4 -0
- package/dist/webpack/configs/plugins/virtual-modules-plugin.d.ts.map +1 -0
- package/dist/webpack/configs/plugins/virtual-modules-plugin.js +42 -0
- package/dist/webpack/configs/plugins/virtual-modules-plugin.js.map +1 -0
- package/dist/webpack/configs/plugins-config.d.ts +6 -0
- package/dist/webpack/configs/plugins-config.d.ts.map +1 -0
- package/dist/webpack/configs/plugins-config.js +24 -0
- package/dist/webpack/configs/plugins-config.js.map +1 -0
- package/dist/webpack/configs/resolve-config.d.ts +6 -0
- package/dist/webpack/configs/resolve-config.d.ts.map +1 -0
- package/dist/webpack/configs/resolve-config.js +11 -0
- package/dist/webpack/configs/resolve-config.js.map +1 -0
- package/dist/webpack/configs/rules/css-rules.d.ts +4 -0
- package/dist/webpack/configs/rules/css-rules.d.ts.map +1 -0
- package/dist/webpack/configs/rules/css-rules.js +35 -0
- package/dist/webpack/configs/rules/css-rules.js.map +1 -0
- package/dist/webpack/configs/rules/font-rules.d.ts +4 -0
- package/dist/webpack/configs/rules/font-rules.d.ts.map +1 -0
- package/dist/webpack/configs/rules/font-rules.js +16 -0
- package/dist/webpack/configs/rules/font-rules.js.map +1 -0
- package/dist/webpack/configs/rules/image-rules.d.ts +4 -0
- package/dist/webpack/configs/rules/image-rules.d.ts.map +1 -0
- package/dist/webpack/configs/rules/image-rules.js +16 -0
- package/dist/webpack/configs/rules/image-rules.js.map +1 -0
- package/dist/webpack/configs/rules/index.d.ts +8 -0
- package/dist/webpack/configs/rules/index.d.ts.map +1 -0
- package/dist/webpack/configs/rules/index.js +24 -0
- package/dist/webpack/configs/rules/index.js.map +1 -0
- package/dist/webpack/configs/rules/js-rules.d.ts +4 -0
- package/dist/webpack/configs/rules/js-rules.d.ts.map +1 -0
- package/dist/webpack/configs/rules/js-rules.js +19 -0
- package/dist/webpack/configs/rules/js-rules.js.map +1 -0
- package/dist/webpack/configs/rules/less-rules.d.ts +4 -0
- package/dist/webpack/configs/rules/less-rules.d.ts.map +1 -0
- package/dist/webpack/configs/rules/less-rules.js +23 -0
- package/dist/webpack/configs/rules/less-rules.js.map +1 -0
- package/dist/webpack/configs/rules/scss-rules.d.ts +4 -0
- package/dist/webpack/configs/rules/scss-rules.d.ts.map +1 -0
- package/dist/webpack/configs/rules/scss-rules.js +23 -0
- package/dist/webpack/configs/rules/scss-rules.js.map +1 -0
- package/dist/webpack/configs/rules/tsx-rules.d.ts +4 -0
- package/dist/webpack/configs/rules/tsx-rules.d.ts.map +1 -0
- package/dist/webpack/configs/rules/tsx-rules.js +23 -0
- package/dist/webpack/configs/rules/tsx-rules.js.map +1 -0
- package/dist/webpack/configs/rules-config.d.ts +9 -0
- package/dist/webpack/configs/rules-config.d.ts.map +1 -0
- package/dist/webpack/configs/rules-config.js +31 -0
- package/dist/webpack/configs/rules-config.js.map +1 -0
- package/dist/webpack/configs/stats-config.d.ts +6 -0
- package/dist/webpack/configs/stats-config.d.ts.map +1 -0
- package/dist/webpack/configs/stats-config.js +16 -0
- package/dist/webpack/configs/stats-config.js.map +1 -0
- package/dist/webpack/configs/types.d.ts +15 -0
- package/dist/webpack/configs/types.d.ts.map +1 -0
- package/dist/webpack/configs/types.js +3 -0
- package/dist/webpack/configs/types.js.map +1 -0
- package/dist/webpack/configs/utils/generate-metadata.d.ts +3 -0
- package/dist/webpack/configs/utils/generate-metadata.d.ts.map +1 -0
- package/dist/webpack/configs/utils/generate-metadata.js +31 -0
- package/dist/webpack/configs/utils/generate-metadata.js.map +1 -0
- package/dist/webpack/configs/utils/get-startup-version.d.ts +2 -0
- package/dist/webpack/configs/utils/get-startup-version.d.ts.map +1 -0
- package/dist/webpack/configs/utils/get-startup-version.js +13 -0
- package/dist/webpack/configs/utils/get-startup-version.js.map +1 -0
- package/dist/webpack/configs/utils/index.d.ts +2 -0
- package/dist/webpack/configs/utils/index.d.ts.map +1 -0
- package/dist/webpack/configs/utils/index.js +18 -0
- package/dist/webpack/configs/utils/index.js.map +1 -0
- package/dist/webpack/create-webpack-config.d.ts +4 -0
- package/dist/webpack/create-webpack-config.d.ts.map +1 -0
- package/dist/webpack/create-webpack-config.js +67 -0
- package/dist/webpack/create-webpack-config.js.map +1 -0
- package/dist/webpack/index.d.ts +2 -10
- package/dist/webpack/index.d.ts.map +1 -1
- package/dist/webpack/index.js +16 -21
- package/dist/webpack/index.js.map +1 -1
- package/dist/webpack/types.d.ts +18 -0
- package/dist/webpack/types.d.ts.map +1 -0
- package/dist/webpack/types.js +3 -0
- package/dist/webpack/types.js.map +1 -0
- package/dist/webpack/utils/index.d.ts +5 -0
- package/dist/webpack/utils/index.d.ts.map +1 -0
- package/dist/webpack/utils/index.js +21 -0
- package/dist/webpack/utils/index.js.map +1 -0
- package/package.json +5 -4
- package/src/cli/commands/__tests__/build.test.ts +13 -0
- package/src/cli/commands/__tests__/bundle-package.test.ts +27 -4
- package/src/cli/commands/__tests__/mfe-package-publish.test.ts +10 -0
- package/src/cli/commands/__tests__/mfe-publish.test.ts +1 -0
- package/src/cli/commands/__tests__/start.test.ts +15 -0
- package/src/cli/commands/build.ts +4 -2
- package/src/cli/commands/bundle-package.ts +7 -4
- package/src/cli/commands/mfe-publish.ts +3 -1
- package/src/cli/commands/start.ts +6 -4
- package/src/cli/utils/__tests__/bundle.test.ts +142 -111
- package/src/cli/utils/__tests__/set-node-options.test.ts +4 -4
- package/src/cli/utils/bundle.ts +37 -118
- package/src/cli/utils/set-node-options.ts +2 -2
- package/src/utils/__tests__/get-configuration.test.ts +46 -0
- package/src/utils/__tests__/log.test.ts +43 -1
- package/src/utils/debug.ts +13 -0
- package/src/utils/get-configuration.ts +5 -1
- package/src/utils/log.ts +22 -0
- package/src/webpack/__mocks__/file-rules.ts +29 -0
- package/src/webpack/__mocks__/index.ts +2 -0
- package/src/webpack/__mocks__/style-rules.ts +126 -0
- package/src/webpack/__tests__/create-webpack-config-shared-dependencies.test.ts +162 -0
- package/src/webpack/__tests__/create-webpack-config-web-component.test.ts +331 -0
- package/src/webpack/__tests__/create-webpack-config.test.ts +400 -42
- package/src/webpack/configs/cache-config.ts +25 -0
- package/src/webpack/configs/dev-server-config.ts +43 -0
- package/src/webpack/configs/devtool-config.ts +18 -0
- package/src/webpack/configs/entry.config.ts +18 -0
- package/src/webpack/configs/externals-config.ts +21 -0
- package/src/webpack/configs/index.ts +12 -0
- package/src/webpack/configs/loaders/css-loader.ts +19 -0
- package/src/webpack/configs/loaders/index.ts +4 -0
- package/src/webpack/configs/loaders/less-loader.ts +3 -0
- package/src/webpack/configs/loaders/style-loader.ts +11 -0
- package/src/webpack/configs/loaders/types.ts +3 -0
- package/src/webpack/configs/module-config.ts +12 -0
- package/src/webpack/configs/optimization-config.ts +63 -0
- package/src/webpack/configs/output-config.ts +28 -0
- package/src/webpack/configs/plugins/assets-manifest-plugin.ts +34 -0
- package/src/webpack/configs/plugins/bundle-analyser-plugin.ts +18 -0
- package/src/webpack/configs/plugins/define-exposed-dependencies-plugin.ts +29 -0
- package/src/webpack/configs/plugins/define-web-component-name-plugin.ts +14 -0
- package/src/webpack/configs/plugins/filter-warnings-plugin.ts +12 -0
- package/src/webpack/configs/plugins/html-plugin.ts +53 -0
- package/src/webpack/configs/plugins/index.ts +11 -0
- package/src/webpack/configs/plugins/mini-css-extract-plugin.ts +19 -0
- package/src/webpack/configs/plugins/moment-locales-plugin.ts +8 -0
- package/src/webpack/configs/plugins/provide-react-plugin.ts +12 -0
- package/src/webpack/configs/plugins/ts-checker-plugin.ts +33 -0
- package/src/webpack/configs/plugins/virtual-modules-plugin.ts +42 -0
- package/src/webpack/configs/plugins-config.ts +38 -0
- package/src/webpack/configs/resolve-config.ts +13 -0
- package/src/webpack/configs/rules/css-rules.ts +36 -0
- package/src/webpack/configs/rules/font-rules.ts +14 -0
- package/src/webpack/configs/rules/image-rules.ts +14 -0
- package/src/webpack/configs/rules/index.ts +7 -0
- package/src/webpack/configs/rules/js-rules.ts +17 -0
- package/src/webpack/configs/rules/less-rules.ts +21 -0
- package/src/webpack/configs/rules/scss-rules.ts +21 -0
- package/src/webpack/configs/rules/tsx-rules.ts +22 -0
- package/src/webpack/configs/rules-config.ts +38 -0
- package/src/webpack/configs/stats-config.ts +18 -0
- package/src/webpack/configs/types.ts +15 -0
- package/src/webpack/configs/utils/__tests__/generate-metadata.test.ts +77 -0
- package/src/webpack/configs/utils/__tests__/get-startup-version.test.ts +27 -0
- package/src/webpack/configs/utils/generate-metadata.ts +30 -0
- package/src/webpack/configs/utils/get-startup-version.ts +8 -0
- package/src/webpack/configs/utils/index.ts +1 -0
- package/src/webpack/create-webpack-config.ts +110 -0
- package/src/webpack/index.ts +2 -52
- package/{dist/webpack/shared.config.d.ts → src/webpack/types.ts} +10 -4
- package/src/webpack/utils/index.ts +4 -0
- package/dist/webpack/development.config.d.ts +0 -11
- package/dist/webpack/development.config.d.ts.map +0 -1
- package/dist/webpack/development.config.js +0 -191
- package/dist/webpack/development.config.js.map +0 -1
- package/dist/webpack/production.config.d.ts +0 -14
- package/dist/webpack/production.config.d.ts.map +0 -1
- package/dist/webpack/production.config.js +0 -172
- package/dist/webpack/production.config.js.map +0 -1
- package/dist/webpack/shared.config.d.ts.map +0 -1
- package/dist/webpack/shared.config.js +0 -268
- package/dist/webpack/shared.config.js.map +0 -1
- package/src/webpack/__tests__/create-development-config.test.ts +0 -306
- package/src/webpack/__tests__/create-production-config.test.ts +0 -231
- package/src/webpack/__tests__/create-shared-config.test.ts +0 -508
- package/src/webpack/development.config.ts +0 -237
- package/src/webpack/production.config.ts +0 -197
- package/src/webpack/shared.config.ts +0 -360
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import mockFS from 'mock-fs';
|
|
2
2
|
import {
|
|
3
3
|
getConfiguration,
|
|
4
|
+
getConfigurationSafe,
|
|
4
5
|
getDevServerConfiguration,
|
|
5
6
|
getESLintConfiguration,
|
|
6
7
|
getJestConfiguration,
|
|
@@ -62,6 +63,51 @@ describe('[startup] Utils', () => {
|
|
|
62
63
|
expect(subject()).toEqual(cli);
|
|
63
64
|
});
|
|
64
65
|
});
|
|
66
|
+
|
|
67
|
+
describe('with no package.json', () => {
|
|
68
|
+
beforeEach(() => mockFS({}));
|
|
69
|
+
|
|
70
|
+
test('throws error', () => {
|
|
71
|
+
expect(subject).toThrowError();
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
describe(`${getConfigurationSafe.name}`, () => {
|
|
77
|
+
let location: string | undefined;
|
|
78
|
+
|
|
79
|
+
beforeEach(() => (location = undefined));
|
|
80
|
+
|
|
81
|
+
const subject = () => getConfigurationSafe(location);
|
|
82
|
+
|
|
83
|
+
itReturns(subject, {});
|
|
84
|
+
|
|
85
|
+
describe(`when ${packageJson} contains cli`, () => {
|
|
86
|
+
const cli = { foo: 'bar' };
|
|
87
|
+
|
|
88
|
+
beforeEach(() => mockPackageJson({ cli }));
|
|
89
|
+
|
|
90
|
+
test('returns cli', () => expect(subject()).toEqual(cli));
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
describe('with a location', () => {
|
|
94
|
+
const cli = { baz: 'qux' };
|
|
95
|
+
|
|
96
|
+
beforeEach(() => {
|
|
97
|
+
location = 'packages/foo';
|
|
98
|
+
mockFS({ packages: { foo: { [packageJson]: JSON.stringify({ cli }) } } });
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
test("returns location's cli", () => {
|
|
102
|
+
expect(subject()).toEqual(cli);
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
describe('with no package.json', () => {
|
|
107
|
+
beforeEach(() => mockFS({}));
|
|
108
|
+
|
|
109
|
+
itReturns(subject, {});
|
|
110
|
+
});
|
|
65
111
|
});
|
|
66
112
|
|
|
67
113
|
describe(`${getDevServerConfiguration.name}`, () => {
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import { log, logErrors } from '../log';
|
|
3
|
+
import { createDebug } from '../debug';
|
|
4
|
+
|
|
5
|
+
jest.mock('../debug');
|
|
3
6
|
|
|
4
7
|
describe(`[startup] Utils`, () => {
|
|
5
8
|
describe('log', () => {
|
|
@@ -29,11 +32,50 @@ describe(`[startup] Utils`, () => {
|
|
|
29
32
|
expect(stdoutSpy).toHaveBeenCalledWith(`${chalk.bold.keyword('orange')(message)}\n`);
|
|
30
33
|
});
|
|
31
34
|
|
|
32
|
-
test('
|
|
35
|
+
test('error() writes red text', () => {
|
|
33
36
|
log.error(message);
|
|
34
37
|
|
|
35
38
|
expect(stdoutSpy).toHaveBeenCalledWith(`${chalk.bold.red(message)}\n`);
|
|
36
39
|
});
|
|
40
|
+
|
|
41
|
+
describe('debug()', () => {
|
|
42
|
+
const namespace = 'log-debug-test';
|
|
43
|
+
const dbg = Object.assign(jest.fn() as any, { enabled: true });
|
|
44
|
+
|
|
45
|
+
beforeEach(() => {
|
|
46
|
+
jest.resetAllMocks();
|
|
47
|
+
jest.mocked(createDebug).mockReturnValue(dbg);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
const subject = (...args: any[]) => log.debug(namespace, ...args);
|
|
51
|
+
|
|
52
|
+
test('returns namespaced debug object', () => {
|
|
53
|
+
expect(subject()).toBe(dbg);
|
|
54
|
+
expect(createDebug).toHaveBeenCalledWith(namespace);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test('outputs text', () => {
|
|
58
|
+
subject('foo');
|
|
59
|
+
|
|
60
|
+
expect(dbg).toHaveBeenCalledWith('foo');
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test('outputs function result', () => {
|
|
64
|
+
subject(() => 'bar');
|
|
65
|
+
|
|
66
|
+
expect(dbg).toHaveBeenCalledWith('bar');
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
describe('when output is disabled', () => {
|
|
70
|
+
beforeEach(() => (dbg.enabled = false));
|
|
71
|
+
|
|
72
|
+
test('outputs nothing', () => {
|
|
73
|
+
subject('foo');
|
|
74
|
+
|
|
75
|
+
expect(dbg).not.toHaveBeenCalled();
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
});
|
|
37
79
|
});
|
|
38
80
|
|
|
39
81
|
describe(`${logErrors.name}`, () => {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import debug from 'debug';
|
|
2
|
+
|
|
3
|
+
const CONTEXT = 'startup';
|
|
4
|
+
|
|
5
|
+
export function createDebug(namespace: string) {
|
|
6
|
+
const result = debug(CONTEXT).extend(namespace);
|
|
7
|
+
return Object.assign(result, {
|
|
8
|
+
/* istanbul ignore next: debug only */
|
|
9
|
+
enable() {
|
|
10
|
+
debug.enable([`${CONTEXT}:${namespace}`, debug.disable()].join());
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
}
|
|
@@ -5,7 +5,7 @@ import { Configuration as WebpackDevServerConfiguration } from 'webpack-dev-serv
|
|
|
5
5
|
import { ESLint } from 'eslint';
|
|
6
6
|
import { LinterOptions } from 'stylelint';
|
|
7
7
|
import { Config } from '@jest/types';
|
|
8
|
-
import { readJson } from './read-json';
|
|
8
|
+
import { readJson, readJsonSafe } from './read-json';
|
|
9
9
|
|
|
10
10
|
const allowedWebpackDevServerOptions = ['headers', 'port', 'proxy', 'contentBase'] as const;
|
|
11
11
|
|
|
@@ -71,6 +71,10 @@ export function getConfiguration(location = './'): Configuration {
|
|
|
71
71
|
return readJson(path.join(location, 'package.json')).cli ?? {};
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
+
export function getConfigurationSafe(location = './'): Configuration {
|
|
75
|
+
return readJsonSafe(path.join(location, 'package.json'))?.cli ?? {};
|
|
76
|
+
}
|
|
77
|
+
|
|
74
78
|
export function isBundle(location?: string) {
|
|
75
79
|
return getConfiguration(location).webpack !== false;
|
|
76
80
|
}
|
package/src/utils/log.ts
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
+
import { createDebug } from './debug';
|
|
3
|
+
|
|
4
|
+
type Debugger = ReturnType<typeof createDebug>;
|
|
2
5
|
|
|
3
6
|
class Log {
|
|
7
|
+
private readonly debugMap: Map<string, Debugger>;
|
|
8
|
+
|
|
9
|
+
constructor() {
|
|
10
|
+
this.debugMap = new Map<string, Debugger>();
|
|
11
|
+
}
|
|
12
|
+
|
|
4
13
|
info(...text: string[]) {
|
|
5
14
|
process.stdout.write(chalk.bold.cyan(...text) + '\n');
|
|
6
15
|
}
|
|
@@ -16,6 +25,19 @@ class Log {
|
|
|
16
25
|
error(...text: string[]) {
|
|
17
26
|
process.stdout.write(chalk.bold.red(...text) + '\n');
|
|
18
27
|
}
|
|
28
|
+
|
|
29
|
+
debug(namespace: string, ...text: any[]) {
|
|
30
|
+
let dbg = this.debugMap.get(namespace);
|
|
31
|
+
if (!dbg) {
|
|
32
|
+
dbg = createDebug(namespace);
|
|
33
|
+
this.debugMap.set(namespace, dbg);
|
|
34
|
+
}
|
|
35
|
+
if (dbg.enabled && text.length) {
|
|
36
|
+
const [formatter, ...args] = text.map(str => (typeof str === 'function' ? str() : str));
|
|
37
|
+
dbg(formatter, ...args);
|
|
38
|
+
}
|
|
39
|
+
return dbg;
|
|
40
|
+
}
|
|
19
41
|
}
|
|
20
42
|
|
|
21
43
|
export const log = new Log();
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { RuleSetRule } from 'webpack';
|
|
2
|
+
|
|
3
|
+
export const fileRules: Record<string, RuleSetRule> = {
|
|
4
|
+
'.js': {
|
|
5
|
+
test: /\.js$/,
|
|
6
|
+
enforce: 'pre',
|
|
7
|
+
exclude: /node_modules/,
|
|
8
|
+
loader: 'source-map-loader',
|
|
9
|
+
},
|
|
10
|
+
'.worker.js': {
|
|
11
|
+
test: /\.worker\.js$/,
|
|
12
|
+
use: { loader: 'worker-loader' },
|
|
13
|
+
},
|
|
14
|
+
'images': {
|
|
15
|
+
test: /\.(png|svg|jpg|jpeg|gif)$/i,
|
|
16
|
+
type: 'asset',
|
|
17
|
+
generator: { filename: 'images/[contenthash][ext][query]' },
|
|
18
|
+
},
|
|
19
|
+
'fonts': {
|
|
20
|
+
test: /\.(woff|woff2|eot|ttf|otf)$/i,
|
|
21
|
+
type: 'asset/resource',
|
|
22
|
+
generator: { filename: 'fonts/[contenthash][ext][query]' },
|
|
23
|
+
},
|
|
24
|
+
'.tsx': {
|
|
25
|
+
test: /\.tsx?$/,
|
|
26
|
+
exclude: /node_modules/,
|
|
27
|
+
use: [{ loader: 'ts-loader', options: { transpileOnly: true } }],
|
|
28
|
+
},
|
|
29
|
+
};
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import MiniCssExtractPlugin from 'mini-css-extract-plugin';
|
|
2
|
+
import { RuleSetRule } from 'webpack';
|
|
3
|
+
|
|
4
|
+
export type StyleRule = RuleSetRule & { use: (string | object)[] };
|
|
5
|
+
|
|
6
|
+
export const styleRules: Record<string, StyleRule> = {
|
|
7
|
+
'.css': {
|
|
8
|
+
test: /(\.css)$/,
|
|
9
|
+
exclude: expect.any(Function),
|
|
10
|
+
use: ['style-loader', 'css-loader'],
|
|
11
|
+
},
|
|
12
|
+
'.scss': {
|
|
13
|
+
test: /(\.scss)$/,
|
|
14
|
+
exclude: /\.module.scss$/,
|
|
15
|
+
use: ['style-loader', 'css-loader', 'sass-loader'],
|
|
16
|
+
},
|
|
17
|
+
'.less': {
|
|
18
|
+
test: /(\.less)$/,
|
|
19
|
+
exclude: /\.module.less$/,
|
|
20
|
+
use: [
|
|
21
|
+
'style-loader',
|
|
22
|
+
'css-loader',
|
|
23
|
+
{
|
|
24
|
+
loader: 'less-loader',
|
|
25
|
+
options: { lessOptions: { math: 'always' } },
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
'.module.css': {
|
|
30
|
+
test: /\.module.css$/,
|
|
31
|
+
use: [
|
|
32
|
+
{
|
|
33
|
+
loader: 'style-loader',
|
|
34
|
+
options: { esModule: true },
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
loader: 'css-loader',
|
|
38
|
+
options: {
|
|
39
|
+
esModule: true,
|
|
40
|
+
modules: { exportLocalsConvention: 'camelCaseOnly', namedExport: true },
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
'.module.scss': {
|
|
46
|
+
test: /\.module.scss$/,
|
|
47
|
+
use: [
|
|
48
|
+
{
|
|
49
|
+
loader: 'style-loader',
|
|
50
|
+
options: { esModule: true },
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
loader: 'css-loader',
|
|
54
|
+
options: {
|
|
55
|
+
esModule: true,
|
|
56
|
+
modules: { exportLocalsConvention: 'camelCaseOnly', namedExport: true },
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
'sass-loader',
|
|
60
|
+
],
|
|
61
|
+
},
|
|
62
|
+
'.module.less': {
|
|
63
|
+
test: /\.module.less$/,
|
|
64
|
+
use: [
|
|
65
|
+
{
|
|
66
|
+
loader: 'style-loader',
|
|
67
|
+
options: { esModule: true },
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
loader: 'css-loader',
|
|
71
|
+
options: {
|
|
72
|
+
esModule: true,
|
|
73
|
+
modules: { exportLocalsConvention: 'camelCaseOnly', namedExport: true },
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
loader: 'less-loader',
|
|
78
|
+
options: { lessOptions: { math: 'always' } },
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export const webComponentStyleRules = Object.entries(styleRules).reduce((result, [key, rule]) => {
|
|
85
|
+
result[key] = { ...rule, use: rule.use?.map(transformStyleLoader) };
|
|
86
|
+
return result;
|
|
87
|
+
}, {} as typeof styleRules);
|
|
88
|
+
|
|
89
|
+
export const productionStyleRules = Object.entries(webComponentStyleRules).reduce(
|
|
90
|
+
(result, [key, rule]) => {
|
|
91
|
+
if (key === '.css') {
|
|
92
|
+
result[key] = { ...rule, exclude: /\.module.css$/ }; // production doesn't use callback?!
|
|
93
|
+
} else {
|
|
94
|
+
result[key] = { ...rule, use: rule.use?.map(transformCssLoader) };
|
|
95
|
+
}
|
|
96
|
+
return result;
|
|
97
|
+
},
|
|
98
|
+
{} as typeof webComponentStyleRules
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Adds options.modules.localIdentName
|
|
103
|
+
*/
|
|
104
|
+
function transformCssLoader(loader: string | Record<string, any>) {
|
|
105
|
+
if (typeof loader === 'object' && loader.loader === 'css-loader' && loader.options?.modules) {
|
|
106
|
+
const options = loader.options;
|
|
107
|
+
const modules = { ...options.modules, localIdentName: '[local]__[hash:base64:5]' };
|
|
108
|
+
return { ...loader, options: { ...options, modules } };
|
|
109
|
+
}
|
|
110
|
+
return loader;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Replaces "style-loader" with MiniCssExtractPlugin.loader
|
|
115
|
+
*/
|
|
116
|
+
function transformStyleLoader(loader: string | Record<string, any>) {
|
|
117
|
+
if (loader === 'style-loader') {
|
|
118
|
+
return MiniCssExtractPlugin.loader;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (typeof loader === 'object' && loader.loader === 'style-loader') {
|
|
122
|
+
return { ...loader, loader: MiniCssExtractPlugin.loader };
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return loader;
|
|
126
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import MiniCssExtractPlugin from 'mini-css-extract-plugin';
|
|
2
|
+
import { DefinePlugin } from 'webpack';
|
|
3
|
+
import {
|
|
4
|
+
getFolders,
|
|
5
|
+
getPackageData,
|
|
6
|
+
getPackageDependencyVersion,
|
|
7
|
+
getPackages,
|
|
8
|
+
getTsConfig,
|
|
9
|
+
isCustomStyleRules,
|
|
10
|
+
isExposeSharedDependencies,
|
|
11
|
+
loadSharedDependencies,
|
|
12
|
+
} from '../../utils';
|
|
13
|
+
import { getModuleEntryPath } from '../utils';
|
|
14
|
+
|
|
15
|
+
import { createWebpackConfig } from '../index';
|
|
16
|
+
|
|
17
|
+
jest.mock('mini-css-extract-plugin', () =>
|
|
18
|
+
Object.assign(jest.fn(), { loader: 'MiniCssExtractPlugin.loader' })
|
|
19
|
+
);
|
|
20
|
+
jest.mock('moment-locales-webpack-plugin', () => jest.fn());
|
|
21
|
+
jest.mock('webpack', () => ({
|
|
22
|
+
...jest.requireActual('webpack'),
|
|
23
|
+
DefinePlugin: jest.fn(),
|
|
24
|
+
}));
|
|
25
|
+
|
|
26
|
+
jest.mock('../../utils', () => ({
|
|
27
|
+
...jest.requireActual('../../utils'),
|
|
28
|
+
getFolders: jest.fn(),
|
|
29
|
+
getPackageData: jest.fn(),
|
|
30
|
+
getPackageDependencyVersion: jest.fn(),
|
|
31
|
+
getPackages: jest.fn(),
|
|
32
|
+
getTsConfig: jest.fn(),
|
|
33
|
+
isCustomStyleRules: jest.fn(),
|
|
34
|
+
isExposeSharedDependencies: jest.fn(),
|
|
35
|
+
loadSharedDependencies: jest.fn(),
|
|
36
|
+
log: { debug: jest.fn(), info: jest.fn() },
|
|
37
|
+
}));
|
|
38
|
+
jest.mock('../utils', () => ({
|
|
39
|
+
...jest.requireActual('../utils'),
|
|
40
|
+
featureCohort: jest.fn(),
|
|
41
|
+
getCallerFile: jest.fn(),
|
|
42
|
+
getModuleEntryPath: jest.fn(),
|
|
43
|
+
}));
|
|
44
|
+
|
|
45
|
+
describe(`[startup] ${createWebpackConfig.name}`, () => {
|
|
46
|
+
const source = 'src';
|
|
47
|
+
const destination = 'dist';
|
|
48
|
+
const tsConfig = 'tsconfig.build.json';
|
|
49
|
+
const sharedDependencies = {
|
|
50
|
+
'@servicetitan/design-system': 'SharedDependencies.ServiceTitan.DesignSystem',
|
|
51
|
+
'react': 'SharedDependencies.React',
|
|
52
|
+
};
|
|
53
|
+
const dependencies: Record<string, string> = {
|
|
54
|
+
'@servicetitan/design-system': '1.2.3',
|
|
55
|
+
'react': '4.5.6',
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
let overrides: Parameters<typeof createWebpackConfig>[0];
|
|
59
|
+
|
|
60
|
+
function mockPlugIn(name: string) {
|
|
61
|
+
return (options: Record<string, any>): any => ({ [name]: options });
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
beforeEach(() => {
|
|
65
|
+
overrides = { plugins: {} };
|
|
66
|
+
|
|
67
|
+
jest.resetAllMocks();
|
|
68
|
+
jest.mocked(MiniCssExtractPlugin).mockImplementation(mockPlugIn('MiniCssExtractPlugin'));
|
|
69
|
+
jest.mocked(DefinePlugin).mockImplementation(mockPlugIn('DefinePlugin'));
|
|
70
|
+
|
|
71
|
+
jest.mocked(getFolders).mockReturnValue({ source, destination });
|
|
72
|
+
jest.mocked(getModuleEntryPath).mockImplementation(name => `${name}/entryPath`);
|
|
73
|
+
jest.mocked(getPackageData).mockReturnValue({ dependencies, sharedDependencies });
|
|
74
|
+
jest.mocked(getPackageDependencyVersion).mockImplementation(
|
|
75
|
+
(_, defaultVersion) => defaultVersion
|
|
76
|
+
);
|
|
77
|
+
jest.mocked(getPackages).mockReturnValue([]);
|
|
78
|
+
jest.mocked(getTsConfig).mockReturnValue(tsConfig);
|
|
79
|
+
jest.mocked(loadSharedDependencies).mockReturnValue(sharedDependencies);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
const subject = () => createWebpackConfig(overrides);
|
|
83
|
+
|
|
84
|
+
describe('when package exposes shared dependencies', () => {
|
|
85
|
+
beforeEach(() => jest.mocked(isExposeSharedDependencies).mockReturnValue(true));
|
|
86
|
+
|
|
87
|
+
test('configures "optimization.splitChunks.cacheGroups.design-system"', () => {
|
|
88
|
+
expect(
|
|
89
|
+
(subject().optimization?.splitChunks as any).cacheGroups['design-system']
|
|
90
|
+
).toEqual({
|
|
91
|
+
test: /[\\/]node_modules[\\/]@servicetitan[\\/](tokens|anvil-fonts|design-system)[\\/].*\.css$/,
|
|
92
|
+
name: 'design-system',
|
|
93
|
+
chunks: 'all',
|
|
94
|
+
enforce: true,
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
test('configures shared dependency entry points', () => {
|
|
99
|
+
expect(subject().entry).toEqual({
|
|
100
|
+
main: expect.arrayContaining(
|
|
101
|
+
Object.keys(sharedDependencies).map(getModuleEntryPath)
|
|
102
|
+
),
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
test('configures shared dependencies to use expose-loader', () => {
|
|
107
|
+
Object.entries(sharedDependencies).forEach(([name, value]) => {
|
|
108
|
+
expect(subject().module?.rules).toContainEqual({
|
|
109
|
+
test: getModuleEntryPath(name),
|
|
110
|
+
loader: require.resolve('../loaders/expose-loader'),
|
|
111
|
+
options: { exposes: value },
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
test('configures EXPOSE_DEPENDENCIES', () => {
|
|
117
|
+
const exposedDependencies = Object.fromEntries(
|
|
118
|
+
Object.entries(sharedDependencies).map(([name, variable]) => [
|
|
119
|
+
name,
|
|
120
|
+
{
|
|
121
|
+
version: getPackageDependencyVersion(name, dependencies[name]),
|
|
122
|
+
variable,
|
|
123
|
+
},
|
|
124
|
+
])
|
|
125
|
+
);
|
|
126
|
+
expect(subject().plugins).toContainEqual(
|
|
127
|
+
new DefinePlugin({
|
|
128
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
129
|
+
EXPOSED_DEPENDENCIES: JSON.stringify(exposedDependencies),
|
|
130
|
+
})
|
|
131
|
+
);
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
test('configures "design-system.css" rules', () => {
|
|
135
|
+
expect(subject().module?.rules).toContainEqual({
|
|
136
|
+
test: /design-system.css$/,
|
|
137
|
+
use: [MiniCssExtractPlugin.loader, 'css-loader'],
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
test('configures ".css" rule to also exclude design-system.css', () => {
|
|
142
|
+
const cssRule: any = subject().module?.rules?.find(({ test }: { test: RegExp }) =>
|
|
143
|
+
'.css'.match(test)
|
|
144
|
+
);
|
|
145
|
+
expect(
|
|
146
|
+
['design-system.css', 'foo.module.css', 'foo.css'].filter(path =>
|
|
147
|
+
cssRule.exclude(path)
|
|
148
|
+
)
|
|
149
|
+
).toEqual(['design-system.css', 'foo.module.css']);
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
describe('when package has custom style rules', () => {
|
|
153
|
+
beforeEach(() => jest.mocked(isCustomStyleRules).mockReturnValue(true));
|
|
154
|
+
|
|
155
|
+
test('does not configure MiniCssExtractPlugIn plugin', () => {
|
|
156
|
+
expect(subject().plugins).not.toContainEqual(
|
|
157
|
+
expect.objectContaining({ MiniCssExtractPlugIn: expect.anything() })
|
|
158
|
+
);
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
});
|