zcb 0.3.1 → 0.3.3

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.
Files changed (62) hide show
  1. package/README.md +3 -5
  2. package/bin/zcb.js +2 -2
  3. package/dist/cjs/cli.cjs +1 -1
  4. package/dist/cjs/cli.cjs.map +1 -1
  5. package/dist/cjs/index.cjs +1 -1
  6. package/dist/cjs/index.cjs.map +1 -1
  7. package/dist/cjs/templates/config.ts.hbs +1 -1
  8. package/dist/esm/cli.mjs +1 -1
  9. package/dist/esm/cli.mjs.map +1 -1
  10. package/dist/esm/index.mjs +1 -1
  11. package/dist/esm/index.mjs.map +1 -1
  12. package/dist/esm/templates/config.ts.hbs +1 -1
  13. package/dist/production.analysis.txt +32 -43
  14. package/dist/types/cjs/cli.d.cts +1 -4
  15. package/dist/types/cjs/cli.d.cts.map +1 -1
  16. package/dist/types/cjs/createConfigBuilder.d.cts.map +1 -1
  17. package/dist/types/cjs/createConfigReader.d.cts.map +1 -1
  18. package/dist/types/cjs/transformers/cloneNonEnumerableValues.d.cts.map +1 -1
  19. package/dist/types/cjs/transformers/removeDisabledSlices.d.cts.map +1 -1
  20. package/dist/types/cjs/transformers/runExperiments.d.cts.map +1 -1
  21. package/dist/types/cjs/transformers/setupExperiments.d.cts.map +1 -1
  22. package/dist/types/cjs/types.d.cts +16 -18
  23. package/dist/types/cjs/types.d.cts.map +1 -1
  24. package/dist/types/cjs/utils/jsonStringifyReplacer.d.cts +92 -0
  25. package/dist/types/cjs/utils/jsonStringifyReplacer.d.cts.map +1 -1
  26. package/dist/types/cjs/utils/transformConfig.d.cts.map +1 -1
  27. package/dist/types/cjs/utils/typedGet.d.cts +3 -0
  28. package/dist/types/cjs/utils/typedGet.d.cts.map +1 -0
  29. package/dist/types/esm/cli.d.ts +1 -4
  30. package/dist/types/esm/cli.d.ts.map +1 -1
  31. package/dist/types/esm/createConfigBuilder.d.ts.map +1 -1
  32. package/dist/types/esm/createConfigReader.d.ts.map +1 -1
  33. package/dist/types/esm/transformers/cloneNonEnumerableValues.d.ts.map +1 -1
  34. package/dist/types/esm/transformers/removeDisabledSlices.d.ts.map +1 -1
  35. package/dist/types/esm/transformers/runExperiments.d.ts.map +1 -1
  36. package/dist/types/esm/transformers/setupExperiments.d.ts.map +1 -1
  37. package/dist/types/esm/types.d.ts +16 -18
  38. package/dist/types/esm/types.d.ts.map +1 -1
  39. package/dist/types/esm/utils/jsonStringifyReplacer.d.ts +92 -0
  40. package/dist/types/esm/utils/jsonStringifyReplacer.d.ts.map +1 -1
  41. package/dist/types/esm/utils/transformConfig.d.ts.map +1 -1
  42. package/dist/types/esm/utils/typedGet.d.ts +3 -0
  43. package/dist/types/esm/utils/typedGet.d.ts.map +1 -0
  44. package/dist/types/tsconfig.build.tsbuildinfo +1 -1
  45. package/package.json +35 -27
  46. package/src/__testUtils__/builtConfig.ts +4 -3
  47. package/src/__testUtils__/configBuilder.ts +4 -2
  48. package/src/__testUtils__/schema.ts +2 -1
  49. package/src/cli.ts +3 -6
  50. package/src/createConfigBuilder.ts +6 -7
  51. package/src/createConfigReader.test.ts +92 -17
  52. package/src/createConfigReader.ts +24 -11
  53. package/src/templates/config.ts.hbs +1 -1
  54. package/src/transformers/cloneNonEnumerableValues.ts +2 -2
  55. package/src/transformers/removeDisabledSlices.ts +3 -8
  56. package/src/transformers/runExperiments.ts +2 -8
  57. package/src/transformers/setupExperiments.ts +2 -7
  58. package/src/types.ts +37 -26
  59. package/src/utils/transformConfig.test.ts +150 -2
  60. package/src/utils/transformConfig.ts +5 -10
  61. package/src/utils/typedGet.ts +8 -0
  62. package/src/utils/__snapshots__/transformConfig.test.ts.snap +0 -151
@@ -4,7 +4,81 @@ describe('transformConfig', () => {
4
4
  describe('when no handlers are passed in', () => {
5
5
  it('should return the correct config', async () => {
6
6
  const { transformConfig } = await import('./transformConfig.ts');
7
- await expect(transformConfig(configBuilder.$values())).resolves.toMatchSnapshot();
7
+
8
+ await expect(transformConfig(configBuilder.$values())).resolves.toMatchInlineSnapshot(`
9
+ {
10
+ "countryCode": "GB",
11
+ "countryName": null,
12
+ "distanceUnit": "km",
13
+ "enabled": true,
14
+ "languageCodes": [
15
+ "en",
16
+ ],
17
+ "locales": [
18
+ "en_GB",
19
+ ],
20
+ "pages": {
21
+ "contactDetails": {
22
+ "name": "contactDetails",
23
+ "sections": [
24
+ {
25
+ "name": "header",
26
+ },
27
+ {
28
+ "name": "body",
29
+ "sections": [
30
+ {
31
+ "name": "main",
32
+ },
33
+ {
34
+ "name": "sidebar",
35
+ },
36
+ ],
37
+ },
38
+ {
39
+ "name": "footer",
40
+ },
41
+ ],
42
+ },
43
+ "personalDetails": {
44
+ "name": "personalDetails",
45
+ "sections": [
46
+ {
47
+ "name": "header",
48
+ },
49
+ {
50
+ "name": "body",
51
+ "sections": [
52
+ {
53
+ "name": "main",
54
+ },
55
+ {
56
+ "name": "sidebar",
57
+ },
58
+ ],
59
+ },
60
+ {
61
+ "name": "footer",
62
+ },
63
+ ],
64
+ },
65
+ },
66
+ "routes": [
67
+ {
68
+ "page": "personalDetails",
69
+ "path": "personal-details",
70
+ },
71
+ {
72
+ "page": "contactDetails",
73
+ "path": "contact-details",
74
+ },
75
+ ],
76
+ "timeouts": {
77
+ "apollo": 10000,
78
+ },
79
+ "timezone": "Europe/London",
80
+ }
81
+ `);
8
82
  });
9
83
  });
10
84
  });
@@ -13,7 +87,81 @@ describe('transformConfigSync', () => {
13
87
  describe('when no handlers are passed in', () => {
14
88
  it('should return the correct config', async () => {
15
89
  const { transformConfigSync } = await import('./transformConfig.ts');
16
- expect(transformConfigSync(configBuilder.$values())).toMatchSnapshot();
90
+
91
+ expect(transformConfigSync(configBuilder.$values())).toMatchInlineSnapshot(`
92
+ {
93
+ "countryCode": "GB",
94
+ "countryName": null,
95
+ "distanceUnit": "km",
96
+ "enabled": true,
97
+ "languageCodes": [
98
+ "en",
99
+ ],
100
+ "locales": [
101
+ "en_GB",
102
+ ],
103
+ "pages": {
104
+ "contactDetails": {
105
+ "name": "contactDetails",
106
+ "sections": [
107
+ {
108
+ "name": "header",
109
+ },
110
+ {
111
+ "name": "body",
112
+ "sections": [
113
+ {
114
+ "name": "main",
115
+ },
116
+ {
117
+ "name": "sidebar",
118
+ },
119
+ ],
120
+ },
121
+ {
122
+ "name": "footer",
123
+ },
124
+ ],
125
+ },
126
+ "personalDetails": {
127
+ "name": "personalDetails",
128
+ "sections": [
129
+ {
130
+ "name": "header",
131
+ },
132
+ {
133
+ "name": "body",
134
+ "sections": [
135
+ {
136
+ "name": "main",
137
+ },
138
+ {
139
+ "name": "sidebar",
140
+ },
141
+ ],
142
+ },
143
+ {
144
+ "name": "footer",
145
+ },
146
+ ],
147
+ },
148
+ },
149
+ "routes": [
150
+ {
151
+ "page": "personalDetails",
152
+ "path": "personal-details",
153
+ },
154
+ {
155
+ "page": "contactDetails",
156
+ "path": "contact-details",
157
+ },
158
+ ],
159
+ "timeouts": {
160
+ "apollo": 10000,
161
+ },
162
+ "timezone": "Europe/London",
163
+ }
164
+ `);
17
165
  });
18
166
  });
19
167
  });
@@ -1,10 +1,5 @@
1
1
  import { castArray, isPlainObject } from 'lodash-es';
2
- import {
3
- type AnyRecord,
4
- type TransformConfigHandler,
5
- TransformConfigHandlerAction,
6
- type TransformConfigHandlerSync,
7
- } from '../types.ts';
2
+ import { type AnyRecord, type TransformConfigHandler, type TransformConfigHandlerSync } from '../types.ts';
8
3
 
9
4
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
5
  const transformArray = (list: any[], handler: TransformConfigHandler | TransformConfigHandler[]): Promise<any[]> =>
@@ -35,7 +30,7 @@ export const transformConfig = async <Config extends AnyRecord>(
35
30
  for (const callback of handlers) {
36
31
  const result = await Promise.resolve(callback(transform, config));
37
32
 
38
- if (result.action === TransformConfigHandlerAction.DELETE_NODE) {
33
+ if (result.action === 'DELETE_NODE') {
39
34
  // Typing gets too complicated without casting.
40
35
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
41
36
  return {} as Config;
@@ -45,7 +40,7 @@ export const transformConfig = async <Config extends AnyRecord>(
45
40
  transform = result.value;
46
41
  }
47
42
 
48
- if (result.action === TransformConfigHandlerAction.SKIP_NODE) {
43
+ if (result.action === 'SKIP_NODE') {
49
44
  return transform;
50
45
  }
51
46
  }
@@ -96,7 +91,7 @@ export const transformConfigSync = <Config extends AnyRecord>(
96
91
  for (const callback of handlers) {
97
92
  const result = callback(transform, config);
98
93
 
99
- if (result.action === TransformConfigHandlerAction.DELETE_NODE) {
94
+ if (result.action === 'DELETE_NODE') {
100
95
  // Typing gets too complicated without casting.
101
96
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
102
97
  return {} as Config;
@@ -106,7 +101,7 @@ export const transformConfigSync = <Config extends AnyRecord>(
106
101
  transform = result.value;
107
102
  }
108
103
 
109
- if (result.action === TransformConfigHandlerAction.SKIP_NODE) {
104
+ if (result.action === 'SKIP_NODE') {
110
105
  return transform;
111
106
  }
112
107
  }
@@ -0,0 +1,8 @@
1
+ import { get as untypedGet } from 'lodash-es';
2
+ import { type Get } from 'type-fest';
3
+
4
+ export const get = <T extends object, P extends string>(obj: T, path: P): Get<T, P> => {
5
+ // Lodash get built-in typing is not very good.
6
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
7
+ return untypedGet(obj, path) as Get<T, P>;
8
+ };
@@ -1,151 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`transformConfig when no handlers are passed in should return the correct config 1`] = `
4
- {
5
- "countryCode": "GB",
6
- "countryName": "United Kingdom",
7
- "distanceUnit": "km",
8
- "languageCodes": [
9
- "en",
10
- ],
11
- "locales": [
12
- "en_GB",
13
- ],
14
- "name": "alpha",
15
- "pages": {
16
- "contactDetails": {
17
- "name": "contactDetails",
18
- "sections": [
19
- {
20
- "name": "header",
21
- },
22
- {
23
- "name": "body",
24
- "sections": [
25
- {
26
- "name": "main",
27
- },
28
- {
29
- "name": "sidebar",
30
- },
31
- ],
32
- },
33
- {
34
- "name": "footer",
35
- },
36
- ],
37
- },
38
- "personalDetails": {
39
- "name": "personalDetails",
40
- "sections": [
41
- {
42
- "name": "header",
43
- },
44
- {
45
- "name": "body",
46
- "sections": [
47
- {
48
- "name": "main",
49
- },
50
- {
51
- "name": "sidebar",
52
- },
53
- ],
54
- },
55
- {
56
- "name": "footer",
57
- },
58
- ],
59
- },
60
- },
61
- "routes": [
62
- {
63
- "page": "personalDetails",
64
- "path": "personal-details",
65
- },
66
- {
67
- "page": "contactDetails",
68
- "path": "contact-details",
69
- },
70
- ],
71
- "timeouts": {
72
- "apollo": 10000,
73
- },
74
- "timezone": "Europe/London",
75
- }
76
- `;
77
-
78
- exports[`transformConfigSync when no handlers are passed in should return the correct config 1`] = `
79
- {
80
- "countryCode": "GB",
81
- "countryName": "United Kingdom",
82
- "distanceUnit": "km",
83
- "languageCodes": [
84
- "en",
85
- ],
86
- "locales": [
87
- "en_GB",
88
- ],
89
- "name": "alpha",
90
- "pages": {
91
- "contactDetails": {
92
- "name": "contactDetails",
93
- "sections": [
94
- {
95
- "name": "header",
96
- },
97
- {
98
- "name": "body",
99
- "sections": [
100
- {
101
- "name": "main",
102
- },
103
- {
104
- "name": "sidebar",
105
- },
106
- ],
107
- },
108
- {
109
- "name": "footer",
110
- },
111
- ],
112
- },
113
- "personalDetails": {
114
- "name": "personalDetails",
115
- "sections": [
116
- {
117
- "name": "header",
118
- },
119
- {
120
- "name": "body",
121
- "sections": [
122
- {
123
- "name": "main",
124
- },
125
- {
126
- "name": "sidebar",
127
- },
128
- ],
129
- },
130
- {
131
- "name": "footer",
132
- },
133
- ],
134
- },
135
- },
136
- "routes": [
137
- {
138
- "page": "personalDetails",
139
- "path": "personal-details",
140
- },
141
- {
142
- "page": "contactDetails",
143
- "path": "contact-details",
144
- },
145
- ],
146
- "timeouts": {
147
- "apollo": 10000,
148
- },
149
- "timezone": "Europe/London",
150
- }
151
- `;