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.
- package/README.md +3 -5
- package/bin/zcb.js +2 -2
- package/dist/cjs/cli.cjs +1 -1
- package/dist/cjs/cli.cjs.map +1 -1
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/templates/config.ts.hbs +1 -1
- package/dist/esm/cli.mjs +1 -1
- package/dist/esm/cli.mjs.map +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/templates/config.ts.hbs +1 -1
- package/dist/production.analysis.txt +32 -43
- package/dist/types/cjs/cli.d.cts +1 -4
- package/dist/types/cjs/cli.d.cts.map +1 -1
- package/dist/types/cjs/createConfigBuilder.d.cts.map +1 -1
- package/dist/types/cjs/createConfigReader.d.cts.map +1 -1
- package/dist/types/cjs/transformers/cloneNonEnumerableValues.d.cts.map +1 -1
- package/dist/types/cjs/transformers/removeDisabledSlices.d.cts.map +1 -1
- package/dist/types/cjs/transformers/runExperiments.d.cts.map +1 -1
- package/dist/types/cjs/transformers/setupExperiments.d.cts.map +1 -1
- package/dist/types/cjs/types.d.cts +16 -18
- package/dist/types/cjs/types.d.cts.map +1 -1
- package/dist/types/cjs/utils/jsonStringifyReplacer.d.cts +92 -0
- package/dist/types/cjs/utils/jsonStringifyReplacer.d.cts.map +1 -1
- package/dist/types/cjs/utils/transformConfig.d.cts.map +1 -1
- package/dist/types/cjs/utils/typedGet.d.cts +3 -0
- package/dist/types/cjs/utils/typedGet.d.cts.map +1 -0
- package/dist/types/esm/cli.d.ts +1 -4
- package/dist/types/esm/cli.d.ts.map +1 -1
- package/dist/types/esm/createConfigBuilder.d.ts.map +1 -1
- package/dist/types/esm/createConfigReader.d.ts.map +1 -1
- package/dist/types/esm/transformers/cloneNonEnumerableValues.d.ts.map +1 -1
- package/dist/types/esm/transformers/removeDisabledSlices.d.ts.map +1 -1
- package/dist/types/esm/transformers/runExperiments.d.ts.map +1 -1
- package/dist/types/esm/transformers/setupExperiments.d.ts.map +1 -1
- package/dist/types/esm/types.d.ts +16 -18
- package/dist/types/esm/types.d.ts.map +1 -1
- package/dist/types/esm/utils/jsonStringifyReplacer.d.ts +92 -0
- package/dist/types/esm/utils/jsonStringifyReplacer.d.ts.map +1 -1
- package/dist/types/esm/utils/transformConfig.d.ts.map +1 -1
- package/dist/types/esm/utils/typedGet.d.ts +3 -0
- package/dist/types/esm/utils/typedGet.d.ts.map +1 -0
- package/dist/types/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +35 -27
- package/src/__testUtils__/builtConfig.ts +4 -3
- package/src/__testUtils__/configBuilder.ts +4 -2
- package/src/__testUtils__/schema.ts +2 -1
- package/src/cli.ts +3 -6
- package/src/createConfigBuilder.ts +6 -7
- package/src/createConfigReader.test.ts +92 -17
- package/src/createConfigReader.ts +24 -11
- package/src/templates/config.ts.hbs +1 -1
- package/src/transformers/cloneNonEnumerableValues.ts +2 -2
- package/src/transformers/removeDisabledSlices.ts +3 -8
- package/src/transformers/runExperiments.ts +2 -8
- package/src/transformers/setupExperiments.ts +2 -7
- package/src/types.ts +37 -26
- package/src/utils/transformConfig.test.ts +150 -2
- package/src/utils/transformConfig.ts +5 -10
- package/src/utils/typedGet.ts +8 -0
- 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
|
-
|
|
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
|
-
|
|
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 ===
|
|
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 ===
|
|
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 ===
|
|
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 ===
|
|
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
|
-
`;
|