@walkeros/cli 0.4.1 → 0.5.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/CHANGELOG.md +26 -0
- package/README.md +247 -46
- package/dist/__tests__/bundle/bundler-helpers.test.js +0 -134
- package/dist/__tests__/bundle/bundler-helpers.test.js.map +1 -1
- package/dist/__tests__/bundle/bundler.test.js +253 -183
- package/dist/__tests__/bundle/bundler.test.js.map +1 -1
- package/dist/__tests__/bundle/programmatic.test.js +74 -53
- package/dist/__tests__/bundle/programmatic.test.js.map +1 -1
- package/dist/__tests__/cli.test.js +58 -46
- package/dist/__tests__/cli.test.js.map +1 -1
- package/dist/__tests__/config-loader.test.d.ts +1 -1
- package/dist/__tests__/config-loader.test.js +229 -212
- package/dist/__tests__/config-loader.test.js.map +1 -1
- package/dist/__tests__/core/build-cache.test.d.ts +2 -0
- package/dist/__tests__/core/build-cache.test.d.ts.map +1 -0
- package/dist/__tests__/core/build-cache.test.js +55 -0
- package/dist/__tests__/core/build-cache.test.js.map +1 -0
- package/dist/__tests__/core/cache-utils.test.d.ts +2 -0
- package/dist/__tests__/core/cache-utils.test.d.ts.map +1 -0
- package/dist/__tests__/core/cache-utils.test.js +70 -0
- package/dist/__tests__/core/cache-utils.test.js.map +1 -0
- package/dist/__tests__/integration/bundle-run.integration.test.js +8 -4
- package/dist/__tests__/integration/bundle-run.integration.test.js.map +1 -1
- package/dist/__tests__/simulate/node-executor.test.d.ts +5 -0
- package/dist/__tests__/simulate/node-executor.test.d.ts.map +1 -0
- package/dist/__tests__/simulate/node-executor.test.js +25 -0
- package/dist/__tests__/simulate/node-executor.test.js.map +1 -0
- package/dist/__tests__/simulate/server-simulate.integration.test.d.ts +5 -0
- package/dist/__tests__/simulate/server-simulate.integration.test.d.ts.map +1 -0
- package/dist/__tests__/simulate/server-simulate.integration.test.js +58 -0
- package/dist/__tests__/simulate/server-simulate.integration.test.js.map +1 -0
- package/dist/__tests__/smoke/production.smoke.test.js +9 -2
- package/dist/__tests__/smoke/production.smoke.test.js.map +1 -1
- package/dist/commands/bundle/bundler.d.ts +18 -0
- package/dist/commands/bundle/bundler.d.ts.map +1 -1
- package/dist/commands/bundle/bundler.js +286 -80
- package/dist/commands/bundle/bundler.js.map +1 -1
- package/dist/commands/bundle/index.d.ts +16 -10
- package/dist/commands/bundle/index.d.ts.map +1 -1
- package/dist/commands/bundle/index.js +44 -32
- package/dist/commands/bundle/index.js.map +1 -1
- package/dist/commands/bundle/package-manager.d.ts +2 -1
- package/dist/commands/bundle/package-manager.d.ts.map +1 -1
- package/dist/commands/bundle/package-manager.js +34 -7
- package/dist/commands/bundle/package-manager.js.map +1 -1
- package/dist/commands/cache.d.ts +3 -0
- package/dist/commands/cache.d.ts.map +1 -0
- package/dist/commands/cache.js +44 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/commands/push/index.d.ts.map +1 -1
- package/dist/commands/push/index.js +49 -44
- package/dist/commands/push/index.js.map +1 -1
- package/dist/commands/push/types.d.ts +1 -1
- package/dist/commands/push/types.d.ts.map +1 -1
- package/dist/commands/run/__tests__/run.integration.test.js +14 -15
- package/dist/commands/run/__tests__/run.integration.test.js.map +1 -1
- package/dist/commands/run/execution.d.ts.map +1 -1
- package/dist/commands/run/execution.js +6 -2
- package/dist/commands/run/execution.js.map +1 -1
- package/dist/commands/run/utils.d.ts +4 -1
- package/dist/commands/run/utils.d.ts.map +1 -1
- package/dist/commands/run/utils.js +18 -24
- package/dist/commands/run/utils.js.map +1 -1
- package/dist/commands/run/validators.d.ts +9 -5
- package/dist/commands/run/validators.d.ts.map +1 -1
- package/dist/commands/run/validators.js +14 -11
- package/dist/commands/run/validators.js.map +1 -1
- package/dist/commands/simulate/index.d.ts +1 -0
- package/dist/commands/simulate/index.d.ts.map +1 -1
- package/dist/commands/simulate/index.js +1 -0
- package/dist/commands/simulate/index.js.map +1 -1
- package/dist/commands/simulate/node-executor.d.ts +28 -0
- package/dist/commands/simulate/node-executor.d.ts.map +1 -0
- package/dist/commands/simulate/node-executor.js +94 -0
- package/dist/commands/simulate/node-executor.js.map +1 -0
- package/dist/commands/simulate/simulator.d.ts.map +1 -1
- package/dist/commands/simulate/simulator.js +36 -32
- package/dist/commands/simulate/simulator.js.map +1 -1
- package/dist/config/build-defaults.d.ts +49 -0
- package/dist/config/build-defaults.d.ts.map +1 -0
- package/dist/config/build-defaults.js +70 -0
- package/dist/config/build-defaults.js.map +1 -0
- package/dist/config/index.d.ts +6 -7
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +6 -7
- package/dist/config/index.js.map +1 -1
- package/dist/config/loader.d.ts +34 -27
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +107 -92
- package/dist/config/loader.js.map +1 -1
- package/dist/config/validators.d.ts +34 -8
- package/dist/config/validators.d.ts.map +1 -1
- package/dist/config/validators.js +59 -21
- package/dist/config/validators.js.map +1 -1
- package/dist/core/asset-resolver.d.ts +9 -16
- package/dist/core/asset-resolver.d.ts.map +1 -1
- package/dist/core/asset-resolver.js +30 -41
- package/dist/core/asset-resolver.js.map +1 -1
- package/dist/core/build-cache.d.ts +23 -0
- package/dist/core/build-cache.d.ts.map +1 -0
- package/dist/core/build-cache.js +43 -0
- package/dist/core/build-cache.js.map +1 -0
- package/dist/core/cache-utils.d.ts +27 -0
- package/dist/core/cache-utils.d.ts.map +1 -0
- package/dist/core/cache-utils.js +60 -0
- package/dist/core/cache-utils.js.map +1 -0
- package/dist/core/docker.d.ts.map +1 -1
- package/dist/core/docker.js +14 -27
- package/dist/core/docker.js.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/local-packages.d.ts +19 -0
- package/dist/core/local-packages.d.ts.map +1 -0
- package/dist/core/local-packages.js +60 -0
- package/dist/core/local-packages.js.map +1 -0
- package/dist/examples/.npm-cache/content-v2/sha512/0d/2d/7581c288670eaf8538ddd9df145b78756ce3be0791c6e0b9cd33429b3bae894525b9bda287a3cedffbcdd2c7b3107bafc03f2b0367eea489eee1cc042abb +1 -0
- package/dist/examples/.npm-cache/content-v2/sha512/12/20/bc4f5acca143809f7e07da1fdafb38137d93243de4d5b403e6e10b92d0d3a6e51eab24fe9dbc9d3ed1cd72e8f7a406085e99c422bb2c7d1166cf9f1f564e +0 -0
- package/dist/examples/.npm-cache/content-v2/sha512/22/ee/fb2695b01871c1d36946bdcfb49f1b520a57200d0a0b221b1e7d5f047ab38a8b2ab0e5f0e25a00acde1f3f2f9d24430a18f1092d438bc1a9e9891cc45f75 +0 -0
- package/dist/examples/.npm-cache/content-v2/sha512/24/89/da1ce6a61bca6de7e132f241a675c01c83738bf6b78af25b5cce01d3030361332b3fe938571e2b721f1555da9ddf930fdcf8c02f0471556071590e68cc09 +0 -0
- package/dist/examples/.npm-cache/content-v2/sha512/47/fd/c6be997da99228c3e279b95d4a46d6913947078a178f54ac71795a159f3513b1483232f4c2d0a1f403178bf9f96bb19615de32a9e2133e949880c6bc15e2 +0 -0
- package/dist/examples/.npm-cache/content-v2/sha512/4b/1c/c1cb7f8b32102071a89fef97158daa32080ebaedfbbd596880d2213d84e305abc76d2a95a412ded55c1c3d487adcb1ceff87fc2c85d7e2856ebd9d3f16f3 +0 -0
- package/dist/examples/.npm-cache/content-v2/sha512/6e/53/ff864769671f44f39d8a3bf904cd646535b745cc4824a8bb3189193b474678049f43b5178ba15cad7f0289046105e70f1565afc84e907120b35a466690fd +1 -0
- package/dist/examples/.npm-cache/content-v2/sha512/70/4c/4c8837d446965c5551b4ea527e95fa011744fb727581d82cf35bb5599ea0b57d18baa490f7af93ef9a16e8e45e5c0802737da20575f4056a4a5c9a3cd288 +0 -0
- package/dist/examples/.npm-cache/content-v2/sha512/96/ad/05de3bbb12d7de8ea353f962bdaea7d2eb44f707f2973462a6635daf537c67b46cca7764fed7d464fe62152c3f783a07aba1ceb35e09ad446bff05a4b466 +1 -0
- package/dist/examples/.npm-cache/content-v2/sha512/b5/20/52dde94e6cef7170f6089c64a4843e57be18be450d956f4e455905aed047ae6a368451c93035e6ac3ee59576b600f03f815afba0836b3a16e10a9aaca4ba +1 -0
- package/dist/examples/.npm-cache/content-v2/sha512/c7/a9/d166a1c39f97df312c59261319ba1cf9aac178bda0a0cb697d5ddd78bd8dd38ef1bf40017bcc8633c2049896c2d70696d9bff9280851f270792ff38bb3a0 +1 -0
- package/dist/examples/.npm-cache/content-v2/sha512/e0/d0/8c14083b633e6adbd3c6a93da5fc0f6bbd456c5512ef276920bedd8d85d551052adff992de977aff326616a211aaa2d6ddcc801149e9b7f914f566359b6a +1 -0
- package/dist/examples/.npm-cache/content-v2/sha512/e7/c5/06ad3fd79ac4f1031fe0b16ea5e54e232ca397bbcd7592c679021cbfb027276099f8c848f3f7a7691f0102ad53aa64f9141e61d729b037a678bd60440d17 +1 -0
- package/dist/examples/.npm-cache/content-v2/sha512/f3/28/d5d32329604ed7d471a4949105daa2cc98858cf24f45b0b97c41d0eb0d5a9fe7bf1f69c792161cc6693e4fc1b52e886ac41875ebfb8fe47fafe417ca3e6e +0 -0
- package/dist/examples/.npm-cache/index-v5/04/5a/2b5d7a7c407d85d746baa0f5c9388a333e35a717a8a0a81943daa6cb1364 +3 -0
- package/dist/examples/.npm-cache/index-v5/12/9a/eba560cbace295d8ee04cf283015377bd77b379e70968fb6bc407c7fc410 +15 -0
- package/dist/examples/.npm-cache/index-v5/2f/a2/7b047564b0ee21ac835ec609e89153dd6549be554d098584d5bfd19fe043 +15 -0
- package/dist/examples/.npm-cache/index-v5/32/8e/322d58dd8d1e000be248ada51385bf96288e56039de9feec1a4c6a467653 +3 -0
- package/dist/examples/.npm-cache/index-v5/57/93/d1d7cd1402e3e26468db03f2870822bb2c9018a506cdfb3b405f38cd3e1c +3 -0
- package/dist/examples/.npm-cache/index-v5/5d/f8/0a1f4fa7149e4ff33e09eb6aea41ac8d1730c868a5d3ace91f762698acff +3 -0
- package/dist/examples/.npm-cache/index-v5/69/a4/a92c72d838259b051cdf8e0acfb2bc680b6d4cfc642314a7836c3f7b2c50 +15 -0
- package/dist/examples/.npm-cache/index-v5/71/31/6da3423bb203f3de5eb16c942431073f89be2cfcb40058ec91dcb5ce0abc +15 -0
- package/dist/examples/.npm-cache/index-v5/7b/94/72b6bffa050d9ef52a558dd220663695bc606f756be0dfa196ef4f3913ba +3 -0
- package/dist/examples/.npm-cache/index-v5/85/9e/99e97fdd562517e56285337db91d1a8f2f416b8d631cf4d7d754fa671299 +15 -0
- package/dist/examples/.npm-cache/index-v5/92/4c/9416ada81a9b3c679539fd1ab53f8de3d41ff268f35eba7a194389a85b06 +3 -0
- package/dist/examples/.npm-cache/index-v5/c1/5a/13df76b218deed8a6ef12961116af5183db98c53fad1b922fd9edc075247 +3 -0
- package/dist/examples/.npm-cache/index-v5/cb/11/253c55410a8ab7c4a9ea9d6e1bf8ef1450a581da64c478074dfd82c8bff6 +3 -0
- package/dist/examples/.npm-cache/index-v5/d5/ae/b57fad3a62b5ba2dbdf24b042a9e7b70820f3db00e5a630f02e1fea020dc +3 -0
- package/dist/examples/.npm-cache/index-v5/d6/32/2f620f83c7d14451de98de8298c2408e05a16cc0829bd16c891ac19d7a67 +3 -0
- package/dist/examples/.npm-cache/index-v5/dd/b5/01dc7a3cd8b6a03a69aee9af500d51ae19cb0aa12631a4aafd152148b8e5 +15 -0
- package/dist/examples/.npm-cache/index-v5/e0/cf/6b862c15d74630d3871cd813d305210ab741311deb10baf8813014e0bc30 +3 -0
- package/dist/examples/.npm-cache/index-v5/e2/be/e880ccd35950a814d3c1dded34d3938ac61b15a195321dc51357f801aad4 +15 -0
- package/dist/examples/.npm-cache/index-v5/e5/1f/f4affe0b392cd03288f23cc03abcb274ff11a2c8f8965299de681914abb2 +3 -0
- package/dist/examples/.npm-cache/index-v5/f3/5b/9ebe450958ff0d7cc44ab0a00080cb8a3ff1389744b5eab5f97b68a6a6af +3 -0
- package/dist/examples/.npm-cache/index-v5/fb/c1/0de405e902866d53e7c30cf36a97dc2578838622b261816f44dc377c9a80 +3 -0
- package/dist/examples/README.md +355 -0
- package/dist/examples/event.json +53 -0
- package/dist/examples/flow-order-complete.json +67 -0
- package/dist/examples/flow-simple.json +31 -0
- package/dist/examples/flow.json +82 -0
- package/dist/examples/server-collect.json +60 -0
- package/dist/examples/server-collect.mjs +13540 -0
- package/dist/examples/test.html +43 -0
- package/dist/examples/web-serve.js +25503 -0
- package/dist/examples/web-serve.json +74 -0
- package/dist/index.d.ts +80 -310
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +924 -736
- package/dist/index.js.map +1 -1
- package/dist/schemas/index.d.ts +9 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +9 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/primitives.d.ts +37 -0
- package/dist/schemas/primitives.d.ts.map +1 -0
- package/dist/schemas/primitives.js +43 -0
- package/dist/schemas/primitives.js.map +1 -0
- package/dist/schemas/run.d.ts +23 -0
- package/dist/schemas/run.d.ts.map +1 -0
- package/dist/schemas/run.js +20 -0
- package/dist/schemas/run.js.map +1 -0
- package/dist/types/bundle.d.ts +64 -191
- package/dist/types/bundle.d.ts.map +1 -1
- package/dist/types/bundle.js +2 -2
- package/dist/walker.js +1 -0
- package/examples/README.md +55 -30
- package/examples/flow-order-complete.json +56 -57
- package/examples/flow-simple.json +24 -25
- package/examples/flow.json +69 -69
- package/examples/server-collect.json +51 -44
- package/examples/server-collect.mjs +1 -1
- package/examples/web-serve.json +62 -63
- package/package.json +2 -4
- package/dist/__tests__/bundle/serializer.test.d.ts +0 -2
- package/dist/__tests__/bundle/serializer.test.d.ts.map +0 -1
- package/dist/__tests__/bundle/serializer.test.js +0 -173
- package/dist/__tests__/bundle/serializer.test.js.map +0 -1
- package/dist/__tests__/bundle/template-engine.test.d.ts +0 -2
- package/dist/__tests__/bundle/template-engine.test.d.ts.map +0 -1
- package/dist/__tests__/bundle/template-engine.test.js +0 -107
- package/dist/__tests__/bundle/template-engine.test.js.map +0 -1
- package/dist/commands/bundle/serializer.d.ts +0 -23
- package/dist/commands/bundle/serializer.d.ts.map +0 -1
- package/dist/commands/bundle/serializer.js +0 -127
- package/dist/commands/bundle/serializer.js.map +0 -1
- package/dist/commands/bundle/template-engine.d.ts +0 -20
- package/dist/commands/bundle/template-engine.d.ts.map +0 -1
- package/dist/commands/bundle/template-engine.js +0 -54
- package/dist/commands/bundle/template-engine.js.map +0 -1
- package/dist/config/defaults.d.ts +0 -33
- package/dist/config/defaults.d.ts.map +0 -1
- package/dist/config/defaults.js +0 -69
- package/dist/config/defaults.js.map +0 -1
- package/dist/config/parser.d.ts +0 -128
- package/dist/config/parser.d.ts.map +0 -1
- package/dist/config/parser.js +0 -256
- package/dist/config/parser.js.map +0 -1
- package/dist/types/template.d.ts +0 -108
- package/dist/types/template.d.ts.map +0 -1
- package/dist/types/template.js +0 -10
- package/dist/types/template.js.map +0 -1
- package/templates/server.hbs +0 -29
- package/templates/web.hbs +0 -45
|
@@ -1,55 +1,55 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Config Loader Tests
|
|
3
3
|
*
|
|
4
|
-
* Tests for
|
|
4
|
+
* Tests for Flow.Setup configuration loading with the new format.
|
|
5
5
|
*/
|
|
6
|
-
import { loadBundleConfig,
|
|
6
|
+
import { loadBundleConfig, loadAllFlows, getAvailableFlows, } from '../config/index.js';
|
|
7
7
|
describe('Config Loader', () => {
|
|
8
8
|
// ========================================
|
|
9
|
-
// Single
|
|
9
|
+
// Single Flow (Flow.Setup with one flow)
|
|
10
10
|
// ========================================
|
|
11
|
-
describe('Single
|
|
12
|
-
test('loads single
|
|
11
|
+
describe('Single Flow (Flow.Setup)', () => {
|
|
12
|
+
test('loads Flow.Setup with single flow automatically', () => {
|
|
13
13
|
const config = {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
version: 1,
|
|
15
|
+
flows: {
|
|
16
|
+
default: {
|
|
17
|
+
web: {},
|
|
18
|
+
packages: {
|
|
19
|
+
'@walkeros/core': { imports: ['getId'] },
|
|
19
20
|
},
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
sources: {
|
|
22
|
+
browser: {
|
|
23
|
+
package: '@walkeros/web-source-browser',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
destinations: {
|
|
27
|
+
gtag: {
|
|
28
|
+
package: '@walkeros/web-destination-gtag',
|
|
29
|
+
config: {
|
|
30
|
+
settings: { ga4: { measurementId: 'G-123' } },
|
|
31
|
+
},
|
|
26
32
|
},
|
|
27
33
|
},
|
|
28
34
|
},
|
|
29
35
|
},
|
|
30
|
-
build: {
|
|
31
|
-
packages: {},
|
|
32
|
-
code: 'export {};',
|
|
33
|
-
output: './dist/test.js',
|
|
34
|
-
},
|
|
35
36
|
};
|
|
36
37
|
const result = loadBundleConfig(config, {
|
|
37
38
|
configPath: '/test/config.json',
|
|
38
39
|
});
|
|
39
|
-
expect(result.
|
|
40
|
-
expect(result.
|
|
41
|
-
expect(result.flowConfig.
|
|
40
|
+
expect(result.flowName).toBe('default');
|
|
41
|
+
expect(result.isMultiFlow).toBe(false);
|
|
42
|
+
expect(result.flowConfig.web).toBeDefined();
|
|
42
43
|
expect(result.flowConfig.sources).toBeDefined();
|
|
43
44
|
});
|
|
44
45
|
test('applies platform-specific defaults for web', () => {
|
|
45
46
|
const config = {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
output: '',
|
|
47
|
+
version: 1,
|
|
48
|
+
flows: {
|
|
49
|
+
default: {
|
|
50
|
+
web: {},
|
|
51
|
+
packages: {},
|
|
52
|
+
},
|
|
53
53
|
},
|
|
54
54
|
};
|
|
55
55
|
const result = loadBundleConfig(config, {
|
|
@@ -58,18 +58,18 @@ describe('Config Loader', () => {
|
|
|
58
58
|
expect(result.buildOptions.platform).toBe('browser');
|
|
59
59
|
expect(result.buildOptions.format).toBe('iife');
|
|
60
60
|
expect(result.buildOptions.target).toBe('es2020');
|
|
61
|
+
expect(result.buildOptions.minify).toBe(true);
|
|
61
62
|
// Output path is resolved relative to config file directory
|
|
62
63
|
expect(result.buildOptions.output).toBe('/test/dist/walker.js');
|
|
63
64
|
});
|
|
64
65
|
test('applies platform-specific defaults for server', () => {
|
|
65
66
|
const config = {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
output: '',
|
|
67
|
+
version: 1,
|
|
68
|
+
flows: {
|
|
69
|
+
default: {
|
|
70
|
+
server: {},
|
|
71
|
+
packages: {},
|
|
72
|
+
},
|
|
73
73
|
},
|
|
74
74
|
};
|
|
75
75
|
const result = loadBundleConfig(config, {
|
|
@@ -78,266 +78,265 @@ describe('Config Loader', () => {
|
|
|
78
78
|
expect(result.buildOptions.platform).toBe('node');
|
|
79
79
|
expect(result.buildOptions.format).toBe('esm');
|
|
80
80
|
expect(result.buildOptions.target).toBe('node20');
|
|
81
|
+
expect(result.buildOptions.minify).toBe(true);
|
|
81
82
|
// Output path is resolved relative to config file directory
|
|
82
|
-
expect(result.buildOptions.output).toBe('/test/dist/bundle.
|
|
83
|
+
expect(result.buildOptions.output).toBe('/test/dist/bundle.mjs');
|
|
83
84
|
});
|
|
84
|
-
test('
|
|
85
|
+
test('extracts packages from flowConfig', () => {
|
|
85
86
|
const config = {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
87
|
+
version: 1,
|
|
88
|
+
flows: {
|
|
89
|
+
default: {
|
|
90
|
+
web: {},
|
|
91
|
+
packages: {
|
|
92
|
+
'@walkeros/core': { imports: ['getId', 'clone'] },
|
|
93
|
+
'@walkeros/destination-demo': { imports: ['destinationDemo'] },
|
|
94
|
+
},
|
|
95
|
+
},
|
|
95
96
|
},
|
|
96
97
|
};
|
|
97
98
|
const result = loadBundleConfig(config, {
|
|
98
99
|
configPath: '/test/config.json',
|
|
99
100
|
});
|
|
100
|
-
expect(result.buildOptions.
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
expect(result.buildOptions.packages).toEqual({
|
|
102
|
+
'@walkeros/core': { imports: ['getId', 'clone'] },
|
|
103
|
+
'@walkeros/destination-demo': { imports: ['destinationDemo'] },
|
|
104
|
+
});
|
|
103
105
|
});
|
|
104
|
-
test('
|
|
106
|
+
test('respects build overrides from CLI', () => {
|
|
105
107
|
const config = {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
output: '',
|
|
108
|
+
version: 1,
|
|
109
|
+
flows: {
|
|
110
|
+
default: {
|
|
111
|
+
web: {},
|
|
112
|
+
packages: {},
|
|
113
|
+
},
|
|
113
114
|
},
|
|
114
115
|
};
|
|
115
116
|
const result = loadBundleConfig(config, {
|
|
116
117
|
configPath: '/test/config.json',
|
|
118
|
+
buildOverrides: {
|
|
119
|
+
minify: false,
|
|
120
|
+
output: '/custom/output.js',
|
|
121
|
+
},
|
|
117
122
|
});
|
|
118
|
-
|
|
119
|
-
expect(result.buildOptions.
|
|
123
|
+
expect(result.buildOptions.minify).toBe(false);
|
|
124
|
+
expect(result.buildOptions.output).toBe('/custom/output.js');
|
|
120
125
|
});
|
|
121
126
|
});
|
|
122
127
|
// ========================================
|
|
123
|
-
// Multi-
|
|
128
|
+
// Multi-Flow Tests
|
|
124
129
|
// ========================================
|
|
125
|
-
describe('Multi-
|
|
126
|
-
const
|
|
130
|
+
describe('Multi-Flow Config', () => {
|
|
131
|
+
const multiFlowConfig = {
|
|
127
132
|
version: 1,
|
|
128
|
-
|
|
133
|
+
flows: {
|
|
129
134
|
web_prod: {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
},
|
|
136
|
-
},
|
|
137
|
-
destinations: {
|
|
138
|
-
gtag: {
|
|
139
|
-
package: '@walkeros/web-destination-gtag',
|
|
140
|
-
config: { settings: { ga4: { measurementId: 'G-PROD' } } },
|
|
141
|
-
},
|
|
135
|
+
web: {},
|
|
136
|
+
packages: {},
|
|
137
|
+
sources: {
|
|
138
|
+
browser: {
|
|
139
|
+
package: '@walkeros/web-source-browser',
|
|
142
140
|
},
|
|
143
141
|
},
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
142
|
+
destinations: {
|
|
143
|
+
gtag: {
|
|
144
|
+
package: '@walkeros/web-destination-gtag',
|
|
145
|
+
config: { settings: { ga4: { measurementId: 'G-PROD' } } },
|
|
146
|
+
},
|
|
148
147
|
},
|
|
149
148
|
},
|
|
150
149
|
web_stage: {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
},
|
|
157
|
-
},
|
|
158
|
-
destinations: {
|
|
159
|
-
gtag: {
|
|
160
|
-
package: '@walkeros/web-destination-gtag',
|
|
161
|
-
config: { settings: { ga4: { measurementId: 'G-STAGE' } } },
|
|
162
|
-
},
|
|
150
|
+
web: {},
|
|
151
|
+
packages: {},
|
|
152
|
+
sources: {
|
|
153
|
+
browser: {
|
|
154
|
+
package: '@walkeros/web-source-browser',
|
|
163
155
|
},
|
|
164
156
|
},
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
157
|
+
destinations: {
|
|
158
|
+
gtag: {
|
|
159
|
+
package: '@walkeros/web-destination-gtag',
|
|
160
|
+
config: { settings: { ga4: { measurementId: 'G-STAGE' } } },
|
|
161
|
+
},
|
|
169
162
|
},
|
|
170
163
|
},
|
|
171
164
|
server_prod: {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
},
|
|
165
|
+
server: {},
|
|
166
|
+
packages: {},
|
|
167
|
+
destinations: {
|
|
168
|
+
api: {
|
|
169
|
+
package: '@walkeros/server-destination-api',
|
|
178
170
|
},
|
|
179
171
|
},
|
|
180
|
-
build: {
|
|
181
|
-
packages: {},
|
|
182
|
-
code: 'export {};',
|
|
183
|
-
output: './dist/server.js',
|
|
184
|
-
},
|
|
185
172
|
},
|
|
186
173
|
},
|
|
187
174
|
};
|
|
188
|
-
test('loads specific
|
|
189
|
-
const result = loadBundleConfig(
|
|
175
|
+
test('loads specific flow from multi-flow config', () => {
|
|
176
|
+
const result = loadBundleConfig(multiFlowConfig, {
|
|
190
177
|
configPath: '/test/config.json',
|
|
191
|
-
|
|
178
|
+
flowName: 'web_prod',
|
|
192
179
|
});
|
|
193
|
-
expect(result.
|
|
194
|
-
expect(result.
|
|
195
|
-
expect(result.
|
|
180
|
+
expect(result.flowName).toBe('web_prod');
|
|
181
|
+
expect(result.isMultiFlow).toBe(true);
|
|
182
|
+
expect(result.availableFlows).toEqual([
|
|
196
183
|
'web_prod',
|
|
197
184
|
'web_stage',
|
|
198
185
|
'server_prod',
|
|
199
186
|
]);
|
|
200
|
-
expect(result.flowConfig.
|
|
187
|
+
expect(result.flowConfig.web).toBeDefined();
|
|
201
188
|
});
|
|
202
|
-
test('throws error if
|
|
203
|
-
expect(() => loadBundleConfig(
|
|
189
|
+
test('throws error if flow not specified for multi-flow config', () => {
|
|
190
|
+
expect(() => loadBundleConfig(multiFlowConfig, {
|
|
204
191
|
configPath: '/test/config.json',
|
|
205
|
-
})).toThrow('Please specify
|
|
192
|
+
})).toThrow('Please specify a flow using --flow flag');
|
|
206
193
|
});
|
|
207
|
-
test('throws error if specified
|
|
208
|
-
expect(() => loadBundleConfig(
|
|
194
|
+
test('throws error if specified flow not found', () => {
|
|
195
|
+
expect(() => loadBundleConfig(multiFlowConfig, {
|
|
209
196
|
configPath: '/test/config.json',
|
|
210
|
-
|
|
211
|
-
})).toThrow('
|
|
197
|
+
flowName: 'nonexistent',
|
|
198
|
+
})).toThrow('Flow "nonexistent" not found');
|
|
212
199
|
});
|
|
213
|
-
test('loads all
|
|
214
|
-
const results =
|
|
200
|
+
test('loads all flows', () => {
|
|
201
|
+
const results = loadAllFlows(multiFlowConfig, {
|
|
215
202
|
configPath: '/test/config.json',
|
|
216
203
|
});
|
|
217
204
|
expect(results).toHaveLength(3);
|
|
218
|
-
expect(results.map((r) => r.
|
|
205
|
+
expect(results.map((r) => r.flowName)).toEqual([
|
|
219
206
|
'web_prod',
|
|
220
207
|
'web_stage',
|
|
221
208
|
'server_prod',
|
|
222
209
|
]);
|
|
223
|
-
expect(results[0].flowConfig.
|
|
224
|
-
expect(results[2].flowConfig.
|
|
225
|
-
});
|
|
226
|
-
test('throws error if --all used with single-environment config', () => {
|
|
227
|
-
const singleConfig = {
|
|
228
|
-
flow: { platform: 'web' },
|
|
229
|
-
build: { packages: {}, code: 'export {};', output: '' },
|
|
230
|
-
};
|
|
231
|
-
expect(() => loadAllEnvironments(singleConfig, {
|
|
232
|
-
configPath: '/test/config.json',
|
|
233
|
-
})).toThrow('--all flag requires a multi-environment configuration');
|
|
234
|
-
});
|
|
235
|
-
test('gets available environments from multi-env config', () => {
|
|
236
|
-
const environments = getAvailableEnvironments(multiEnvConfig);
|
|
237
|
-
expect(environments).toEqual(['web_prod', 'web_stage', 'server_prod']);
|
|
210
|
+
expect(results[0].flowConfig.web).toBeDefined();
|
|
211
|
+
expect(results[2].flowConfig.server).toBeDefined();
|
|
238
212
|
});
|
|
239
|
-
test('
|
|
240
|
-
const
|
|
241
|
-
|
|
242
|
-
build: { packages: {}, code: 'export {};', output: '' },
|
|
243
|
-
};
|
|
244
|
-
const environments = getAvailableEnvironments(singleConfig);
|
|
245
|
-
expect(environments).toEqual([]);
|
|
213
|
+
test('gets available flows from multi-flow config', () => {
|
|
214
|
+
const flows = getAvailableFlows(multiFlowConfig);
|
|
215
|
+
expect(flows).toEqual(['web_prod', 'web_stage', 'server_prod']);
|
|
246
216
|
});
|
|
247
217
|
});
|
|
248
218
|
// ========================================
|
|
249
219
|
// Error Handling Tests
|
|
250
220
|
// ========================================
|
|
251
221
|
describe('Error Handling', () => {
|
|
252
|
-
test('throws
|
|
222
|
+
test('throws error for invalid config format (missing version)', () => {
|
|
253
223
|
const invalidConfig = {
|
|
254
|
-
|
|
255
|
-
|
|
224
|
+
flows: {
|
|
225
|
+
default: { web: {} },
|
|
256
226
|
},
|
|
257
|
-
build: { packages: {}, code: 'export {};', output: '' },
|
|
258
227
|
};
|
|
259
228
|
expect(() => loadBundleConfig(invalidConfig, {
|
|
260
229
|
configPath: '/test/config.json',
|
|
261
|
-
})).toThrow(
|
|
230
|
+
})).toThrow(/Invalid configuration[\s\S]*version/);
|
|
262
231
|
});
|
|
263
|
-
test('throws error for
|
|
264
|
-
const invalidConfig = {
|
|
232
|
+
test('throws error for invalid config format (wrong version)', () => {
|
|
233
|
+
const invalidConfig = {
|
|
234
|
+
version: 2,
|
|
235
|
+
flows: {
|
|
236
|
+
default: { web: {} },
|
|
237
|
+
},
|
|
238
|
+
};
|
|
265
239
|
expect(() => loadBundleConfig(invalidConfig, {
|
|
266
240
|
configPath: '/test/config.json',
|
|
267
|
-
})).toThrow();
|
|
241
|
+
})).toThrow(/Invalid configuration[\s\S]*version/);
|
|
268
242
|
});
|
|
269
|
-
test('throws error for invalid
|
|
243
|
+
test('throws error for invalid config format (missing flows)', () => {
|
|
270
244
|
const invalidConfig = {
|
|
271
|
-
version:
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
245
|
+
version: 1,
|
|
246
|
+
};
|
|
247
|
+
expect(() => loadBundleConfig(invalidConfig, {
|
|
248
|
+
configPath: '/test/config.json',
|
|
249
|
+
})).toThrow(/Invalid configuration[\s\S]*flows/);
|
|
250
|
+
});
|
|
251
|
+
test('throws error for empty flows', () => {
|
|
252
|
+
const invalidConfig = {
|
|
253
|
+
version: 1,
|
|
254
|
+
flows: {},
|
|
255
|
+
};
|
|
256
|
+
expect(() => loadBundleConfig(invalidConfig, {
|
|
257
|
+
configPath: '/test/config.json',
|
|
258
|
+
})).toThrow(/at least one flow/i);
|
|
259
|
+
});
|
|
260
|
+
test('throws error for flow without web/server key', () => {
|
|
261
|
+
const invalidConfig = {
|
|
262
|
+
version: 1,
|
|
263
|
+
flows: {
|
|
264
|
+
default: {
|
|
265
|
+
packages: {},
|
|
276
266
|
},
|
|
277
267
|
},
|
|
278
268
|
};
|
|
279
269
|
expect(() => loadBundleConfig(invalidConfig, {
|
|
280
270
|
configPath: '/test/config.json',
|
|
281
|
-
|
|
282
|
-
|
|
271
|
+
})).toThrow(/web.*or.*server|Exactly one of/i);
|
|
272
|
+
});
|
|
273
|
+
test('returns empty array for non-Flow.Setup config', () => {
|
|
274
|
+
const oldFormatConfig = {
|
|
275
|
+
flow: { platform: 'web' },
|
|
276
|
+
build: { packages: {} },
|
|
277
|
+
};
|
|
278
|
+
const flows = getAvailableFlows(oldFormatConfig);
|
|
279
|
+
expect(flows).toEqual([]);
|
|
283
280
|
});
|
|
284
281
|
});
|
|
285
282
|
// ========================================
|
|
286
283
|
// Logger Integration Tests
|
|
287
284
|
// ========================================
|
|
288
285
|
describe('Logger Integration', () => {
|
|
289
|
-
test('logs info message for multi-
|
|
286
|
+
test('logs info message for multi-flow config', () => {
|
|
290
287
|
const logger = {
|
|
291
288
|
info: jest.fn(),
|
|
292
289
|
warn: jest.fn(),
|
|
293
290
|
};
|
|
294
291
|
const config = {
|
|
295
292
|
version: 1,
|
|
296
|
-
|
|
293
|
+
flows: {
|
|
297
294
|
prod: {
|
|
298
|
-
|
|
299
|
-
|
|
295
|
+
web: {},
|
|
296
|
+
packages: {},
|
|
297
|
+
},
|
|
298
|
+
stage: {
|
|
299
|
+
web: {},
|
|
300
|
+
packages: {},
|
|
300
301
|
},
|
|
301
302
|
},
|
|
302
303
|
};
|
|
303
304
|
loadBundleConfig(config, {
|
|
304
305
|
configPath: '/test/config.json',
|
|
305
|
-
|
|
306
|
+
flowName: 'prod',
|
|
306
307
|
logger,
|
|
307
308
|
});
|
|
308
|
-
expect(logger.info).toHaveBeenCalledWith(expect.stringContaining('Using
|
|
309
|
+
expect(logger.info).toHaveBeenCalledWith(expect.stringContaining('Using flow: prod'));
|
|
309
310
|
});
|
|
310
|
-
test('
|
|
311
|
+
test('does not log for single-flow config', () => {
|
|
311
312
|
const logger = {
|
|
312
313
|
info: jest.fn(),
|
|
313
314
|
warn: jest.fn(),
|
|
314
315
|
};
|
|
315
316
|
const config = {
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
output: '',
|
|
317
|
+
version: 1,
|
|
318
|
+
flows: {
|
|
319
|
+
default: {
|
|
320
|
+
web: {},
|
|
321
|
+
packages: {},
|
|
322
|
+
},
|
|
323
323
|
},
|
|
324
324
|
};
|
|
325
325
|
loadBundleConfig(config, {
|
|
326
326
|
configPath: '/test/config.json',
|
|
327
|
-
environment: 'ignored',
|
|
328
327
|
logger,
|
|
329
328
|
});
|
|
330
|
-
|
|
329
|
+
// Should not log flow selection for single-flow
|
|
330
|
+
expect(logger.info).not.toHaveBeenCalled();
|
|
331
331
|
});
|
|
332
332
|
});
|
|
333
333
|
// ========================================
|
|
334
334
|
// Real-World Scenario Tests
|
|
335
335
|
// ========================================
|
|
336
336
|
describe('Real-World Scenarios', () => {
|
|
337
|
-
test('loads complex multi-
|
|
337
|
+
test('loads complex multi-flow setup', () => {
|
|
338
338
|
const complexConfig = {
|
|
339
339
|
version: 1,
|
|
340
|
-
$schema: 'https://walkeros.io/schema/flow/v1.json',
|
|
341
340
|
variables: {
|
|
342
341
|
CURRENCY: 'USD',
|
|
343
342
|
},
|
|
@@ -346,51 +345,69 @@ describe('Config Loader', () => {
|
|
|
346
345
|
page: { view: { name: 'page_view' } },
|
|
347
346
|
},
|
|
348
347
|
},
|
|
349
|
-
|
|
348
|
+
flows: {
|
|
350
349
|
web_production: {
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
settings: { pageview: true },
|
|
358
|
-
},
|
|
359
|
-
primary: true,
|
|
360
|
-
},
|
|
350
|
+
web: {},
|
|
351
|
+
packages: {
|
|
352
|
+
'@walkeros/collector': { imports: ['startFlow'] },
|
|
353
|
+
'@walkeros/web-source-browser': { imports: ['sourceBrowser'] },
|
|
354
|
+
'@walkeros/web-destination-gtag': {
|
|
355
|
+
imports: ['destinationGtag'],
|
|
361
356
|
},
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
},
|
|
357
|
+
},
|
|
358
|
+
sources: {
|
|
359
|
+
browser: {
|
|
360
|
+
package: '@walkeros/web-source-browser@2.0.0',
|
|
361
|
+
config: {
|
|
362
|
+
settings: { pageview: true },
|
|
368
363
|
},
|
|
364
|
+
primary: true,
|
|
369
365
|
},
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
366
|
+
},
|
|
367
|
+
destinations: {
|
|
368
|
+
gtag: {
|
|
369
|
+
package: '@walkeros/web-destination-gtag@2.0.0',
|
|
370
|
+
config: {
|
|
371
|
+
settings: { ga4: { measurementId: 'G-PROD' } },
|
|
372
|
+
},
|
|
373
373
|
},
|
|
374
374
|
},
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
minify: true,
|
|
379
|
-
sourcemap: false,
|
|
380
|
-
output: './dist/walker.min.js',
|
|
375
|
+
collector: {
|
|
376
|
+
run: true,
|
|
377
|
+
tagging: 1,
|
|
381
378
|
},
|
|
382
379
|
},
|
|
383
380
|
},
|
|
384
381
|
};
|
|
385
382
|
const result = loadBundleConfig(complexConfig, {
|
|
386
383
|
configPath: '/test/config.json',
|
|
387
|
-
|
|
384
|
+
flowName: 'web_production',
|
|
388
385
|
});
|
|
389
|
-
expect(result.flowConfig.
|
|
386
|
+
expect(result.flowConfig.web).toBeDefined();
|
|
390
387
|
expect(result.flowConfig.sources?.browser?.package).toBe('@walkeros/web-source-browser@2.0.0');
|
|
391
388
|
expect(result.buildOptions.minify).toBe(true);
|
|
392
|
-
// Output
|
|
393
|
-
expect(result.buildOptions.output).toBe('/test/dist/walker.
|
|
389
|
+
// Output uses convention default
|
|
390
|
+
expect(result.buildOptions.output).toBe('/test/dist/walker.js');
|
|
391
|
+
});
|
|
392
|
+
test('extracts windowCollector and windowElb from web config', () => {
|
|
393
|
+
const config = {
|
|
394
|
+
version: 1,
|
|
395
|
+
flows: {
|
|
396
|
+
default: {
|
|
397
|
+
web: {
|
|
398
|
+
windowCollector: 'myCollector',
|
|
399
|
+
windowElb: 'myElb',
|
|
400
|
+
},
|
|
401
|
+
packages: {},
|
|
402
|
+
},
|
|
403
|
+
},
|
|
404
|
+
};
|
|
405
|
+
const result = loadBundleConfig(config, {
|
|
406
|
+
configPath: '/test/config.json',
|
|
407
|
+
});
|
|
408
|
+
// Web config values should be in flowConfig
|
|
409
|
+
expect(result.flowConfig.web.windowCollector).toBe('myCollector');
|
|
410
|
+
expect(result.flowConfig.web.windowElb).toBe('myElb');
|
|
394
411
|
});
|
|
395
412
|
});
|
|
396
413
|
});
|