@magidoc/plugin-starter-variables 0.10.1 → 0.12.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/build/index.d.ts +2 -1
- package/build/variables/converters/array.d.ts +2 -0
- package/build/variables/converters/array.js +22 -0
- package/build/variables/converters/array.js.map +1 -0
- package/build/variables/converters/index.d.ts +2 -1
- package/build/variables/converters/record.js +3 -8
- package/build/variables/converters/record.js.map +1 -1
- package/build/variables/templates.d.ts +6 -0
- package/build/variables/templates.js +9 -0
- package/build/variables/templates.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +2 -1
- package/src/variables/converters/array.ts +25 -0
- package/src/variables/converters/index.ts +2 -1
- package/src/variables/converters/record.ts +3 -7
- package/src/variables/templates.ts +20 -1
- package/tests/index.spec.ts +148 -22
package/build/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import templates from './variables/templates';
|
|
2
2
|
import magidoc from './variables/magidoc';
|
|
3
3
|
import type { Variable, ViteVariable } from './variables/variable';
|
|
4
|
+
import type { Page } from './variables/templates';
|
|
4
5
|
export { templates };
|
|
5
6
|
export { magidoc };
|
|
6
|
-
export type { Variable, ViteVariable };
|
|
7
|
+
export type { Variable, ViteVariable, Page };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
function arrayConverter(valueType) {
|
|
2
|
+
return {
|
|
3
|
+
convert: (target) => {
|
|
4
|
+
if (Array.isArray(target)) {
|
|
5
|
+
return target;
|
|
6
|
+
}
|
|
7
|
+
if (typeof target === 'string') {
|
|
8
|
+
const result = JSON.parse(target);
|
|
9
|
+
if (!Array.isArray(result)) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
return result;
|
|
13
|
+
}
|
|
14
|
+
return null;
|
|
15
|
+
},
|
|
16
|
+
asString: (value) => JSON.stringify(value),
|
|
17
|
+
type: (z) => z.array(valueType(z)).optional(),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { arrayConverter };
|
|
22
|
+
//# sourceMappingURL=array.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array.js","sources":["../../../../src/variables/converters/array.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEM,SAAU,cAAc,CAC5B,SAA6B,EAAA;IAE7B,OAAO;AACL,QAAA,OAAO,EAAE,CAAC,MAAM,KAAI;AAClB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzB,gBAAA,OAAO,MAAkB,CAAA;AAC1B,aAAA;AAED,YAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAsB,CAAA;AACtD,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC1B,oBAAA,OAAO,IAAI,CAAA;AACZ,iBAAA;AACD,gBAAA,OAAO,MAAM,CAAA;AACd,aAAA;AAED,YAAA,OAAO,IAAI,CAAA;SACZ;QACD,QAAQ,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAC1C,QAAA,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;KAC9C,CAAA;AACH;;;;"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { stringConverter } from './string';
|
|
2
2
|
import { booleanConverter } from './boolean';
|
|
3
3
|
import { recordConverter } from './record';
|
|
4
|
-
|
|
4
|
+
import { arrayConverter } from './array';
|
|
5
|
+
export { stringConverter, booleanConverter, recordConverter, arrayConverter };
|
|
@@ -5,16 +5,11 @@ function recordConverter(valueType) {
|
|
|
5
5
|
return target;
|
|
6
6
|
}
|
|
7
7
|
if (typeof target === 'string') {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
if (typeof result !== 'object') {
|
|
11
|
-
return null;
|
|
12
|
-
}
|
|
13
|
-
return result;
|
|
14
|
-
}
|
|
15
|
-
catch {
|
|
8
|
+
const result = JSON.parse(target);
|
|
9
|
+
if (typeof result !== 'object') {
|
|
16
10
|
return null;
|
|
17
11
|
}
|
|
12
|
+
return result;
|
|
18
13
|
}
|
|
19
14
|
return null;
|
|
20
15
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.js","sources":["../../../../src/variables/converters/record.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEM,SAAU,eAAe,CAC7B,SAA6B,EAAA;IAE7B,OAAO;AACL,QAAA,OAAO,EAAE,CAAC,MAAM,KAAI;AAClB,YAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,gBAAA,OAAO,MAA2B,CAAA;AACnC,aAAA;AAED,YAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC9B,
|
|
1
|
+
{"version":3,"file":"record.js","sources":["../../../../src/variables/converters/record.ts"],"sourcesContent":[null],"names":[],"mappings":"AAEM,SAAU,eAAe,CAC7B,SAA6B,EAAA;IAE7B,OAAO;AACL,QAAA,OAAO,EAAE,CAAC,MAAM,KAAI;AAClB,YAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,gBAAA,OAAO,MAA2B,CAAA;AACnC,aAAA;AAED,YAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;gBAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAsB,CAAA;AACtD,gBAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,oBAAA,OAAO,IAAI,CAAA;AACZ,iBAAA;AACD,gBAAA,OAAO,MAAM,CAAA;AACd,aAAA;AAED,YAAA,OAAO,IAAI,CAAA;SACZ;QACD,QAAQ,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAC1C,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC1D,CAAA;AACH;;;;"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
|
+
export declare type Page = {
|
|
2
|
+
title: string;
|
|
3
|
+
content: string | Page[];
|
|
4
|
+
};
|
|
1
5
|
declare const _default: {
|
|
2
6
|
APP_LOGO: import("./variable").Variable<string>;
|
|
3
7
|
APP_TITLE: import("./variable").Variable<string>;
|
|
8
|
+
SITE_ROOT: import("./variable").Variable<string>;
|
|
4
9
|
QUERY_GENERATION_FACTORIES: import("./variable").Variable<Record<string, string | number | boolean | Record<string, unknown> | null | undefined>>;
|
|
10
|
+
PAGES: import("./variable").Variable<(Page | undefined)[]>;
|
|
5
11
|
};
|
|
6
12
|
export default _default;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { stringConverter } from './converters/string.js';
|
|
2
2
|
import { recordConverter } from './converters/record.js';
|
|
3
|
+
import { arrayConverter } from './converters/array.js';
|
|
3
4
|
import { createVariable } from './variable.js';
|
|
4
5
|
|
|
5
6
|
var templates = {
|
|
6
7
|
APP_LOGO: createVariable('APP_LOGO', stringConverter()),
|
|
7
8
|
APP_TITLE: createVariable('APP_TITLE', stringConverter()),
|
|
9
|
+
SITE_ROOT: createVariable('SITE_ROOT', stringConverter()),
|
|
8
10
|
QUERY_GENERATION_FACTORIES: createVariable('QUERY_GENERATION_FACTORIES', recordConverter((zod) => zod.union([
|
|
9
11
|
zod.string(),
|
|
10
12
|
zod.boolean(),
|
|
@@ -12,6 +14,13 @@ var templates = {
|
|
|
12
14
|
zod.null(),
|
|
13
15
|
zod.record(zod.unknown()),
|
|
14
16
|
]))),
|
|
17
|
+
PAGES: createVariable('PAGES', arrayConverter((zod) => {
|
|
18
|
+
const type = zod.lazy(() => zod.object({
|
|
19
|
+
title: zod.string().nonempty(),
|
|
20
|
+
content: zod.union([zod.array(type), zod.string().nonempty()]),
|
|
21
|
+
}));
|
|
22
|
+
return type;
|
|
23
|
+
})),
|
|
15
24
|
};
|
|
16
25
|
|
|
17
26
|
export { templates as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sources":["../../../src/variables/templates.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"templates.js","sources":["../../../src/variables/templates.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AASA,gBAAe;AACb,IAAA,QAAQ,EAAE,cAAc,CAAS,UAAU,EAAE,eAAe,EAAE,CAAC;AAC/D,IAAA,SAAS,EAAE,cAAc,CAAS,WAAW,EAAE,eAAe,EAAE,CAAC;AACjE,IAAA,SAAS,EAAE,cAAc,CAAS,WAAW,EAAE,eAAe,EAAE,CAAC;AACjE,IAAA,0BAA0B,EAAE,cAAc,CAMxC,4BAA4B,EAC5B,eAAe,CAAC,CAAC,GAAG,KAClB,GAAG,CAAC,KAAK,CAAC;QACR,GAAG,CAAC,MAAM,EAAE;QACZ,GAAG,CAAC,OAAO,EAAE;QACb,GAAG,CAAC,MAAM,EAAE;QACZ,GAAG,CAAC,IAAI,EAAE;AACV,QAAA,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;AAC1B,KAAA,CAAC,CACH,CACF;IACD,KAAK,EAAE,cAAc,CACnB,OAAO,EACP,cAAc,CAAC,CAAC,GAAG,KAAI;AACrB,QAAA,MAAM,IAAI,GAAkB,GAAG,CAAC,IAAI,CAAC,MACnC,GAAG,CAAC,MAAM,CAAC;AACT,YAAA,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC/D,SAAA,CAAC,CACH,CAAA;AACD,QAAA,OAAO,IAAI,CAAA;AACb,KAAC,CAAC,CACH;CACF;;;;"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@magidoc/plugin-starter-variables",
|
|
3
3
|
"description": "A shared library that contains common Magidoc starter environment variables keys.",
|
|
4
4
|
"private": false,
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.12.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"main": "./build/index.js",
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import templates from './variables/templates'
|
|
2
2
|
import magidoc from './variables/magidoc'
|
|
3
3
|
import type { Variable, ViteVariable } from './variables/variable'
|
|
4
|
+
import type { Page } from './variables/templates'
|
|
4
5
|
|
|
5
6
|
export { templates }
|
|
6
7
|
export { magidoc }
|
|
7
|
-
export type { Variable, ViteVariable }
|
|
8
|
+
export type { Variable, ViteVariable, Page }
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Converter, ZodTypeProvider } from '../variable'
|
|
2
|
+
|
|
3
|
+
export function arrayConverter<V>(
|
|
4
|
+
valueType: ZodTypeProvider<V>,
|
|
5
|
+
): Converter<Array<V | undefined>> {
|
|
6
|
+
return {
|
|
7
|
+
convert: (target) => {
|
|
8
|
+
if (Array.isArray(target)) {
|
|
9
|
+
return target as Array<V>
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
if (typeof target === 'string') {
|
|
13
|
+
const result = JSON.parse(target) as Record<string, V>
|
|
14
|
+
if (!Array.isArray(result)) {
|
|
15
|
+
return null
|
|
16
|
+
}
|
|
17
|
+
return result
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return null
|
|
21
|
+
},
|
|
22
|
+
asString: (value) => JSON.stringify(value),
|
|
23
|
+
type: (z) => z.array(valueType(z)).optional(),
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { stringConverter } from './string'
|
|
2
2
|
import { booleanConverter } from './boolean'
|
|
3
3
|
import { recordConverter } from './record'
|
|
4
|
+
import { arrayConverter } from './array'
|
|
4
5
|
|
|
5
|
-
export { stringConverter, booleanConverter, recordConverter }
|
|
6
|
+
export { stringConverter, booleanConverter, recordConverter, arrayConverter }
|
|
@@ -10,15 +10,11 @@ export function recordConverter<V>(
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
if (typeof target === 'string') {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if (typeof result !== 'object') {
|
|
16
|
-
return null
|
|
17
|
-
}
|
|
18
|
-
return result
|
|
19
|
-
} catch {
|
|
13
|
+
const result = JSON.parse(target) as Record<string, V>
|
|
14
|
+
if (typeof result !== 'object') {
|
|
20
15
|
return null
|
|
21
16
|
}
|
|
17
|
+
return result
|
|
22
18
|
}
|
|
23
19
|
|
|
24
20
|
return null
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { ZodType } from 'zod'
|
|
2
|
+
import { arrayConverter, recordConverter, stringConverter } from './converters'
|
|
2
3
|
import { createVariable } from './variable'
|
|
3
4
|
|
|
5
|
+
export type Page = {
|
|
6
|
+
title: string
|
|
7
|
+
content: string | Page[]
|
|
8
|
+
}
|
|
9
|
+
|
|
4
10
|
export default {
|
|
5
11
|
APP_LOGO: createVariable<string>('APP_LOGO', stringConverter()),
|
|
6
12
|
APP_TITLE: createVariable<string>('APP_TITLE', stringConverter()),
|
|
13
|
+
SITE_ROOT: createVariable<string>('SITE_ROOT', stringConverter()),
|
|
7
14
|
QUERY_GENERATION_FACTORIES: createVariable<
|
|
8
15
|
Record<
|
|
9
16
|
string,
|
|
@@ -21,4 +28,16 @@ export default {
|
|
|
21
28
|
]),
|
|
22
29
|
),
|
|
23
30
|
),
|
|
31
|
+
PAGES: createVariable<Array<Page | undefined>>(
|
|
32
|
+
'PAGES',
|
|
33
|
+
arrayConverter((zod) => {
|
|
34
|
+
const type: ZodType<Page> = zod.lazy(() =>
|
|
35
|
+
zod.object({
|
|
36
|
+
title: zod.string().nonempty(),
|
|
37
|
+
content: zod.union([zod.array(type), zod.string().nonempty()]),
|
|
38
|
+
}),
|
|
39
|
+
)
|
|
40
|
+
return type
|
|
41
|
+
}),
|
|
42
|
+
),
|
|
24
43
|
}
|
package/tests/index.spec.ts
CHANGED
|
@@ -1,38 +1,105 @@
|
|
|
1
|
+
import type { ZodType } from 'zod'
|
|
1
2
|
import * as variables from '../src/index'
|
|
2
3
|
import type { Variable } from '../src/variables/variable'
|
|
3
4
|
import z from 'zod'
|
|
5
|
+
import type { Page } from '../src/index'
|
|
4
6
|
|
|
5
7
|
describe('variables', () => {
|
|
6
8
|
it('contains the right number of export keys', () => {
|
|
7
9
|
expect(Object.keys(variables)).toEqual(['templates', 'magidoc'])
|
|
8
10
|
})
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
12
|
+
describe('template variables', () => {
|
|
13
|
+
it('contains the right templates variables', () => {
|
|
14
|
+
expect(Object.keys(variables.templates)).toEqual([
|
|
15
|
+
'APP_LOGO',
|
|
16
|
+
'APP_TITLE',
|
|
17
|
+
'SITE_ROOT',
|
|
18
|
+
'QUERY_GENERATION_FACTORIES',
|
|
19
|
+
'PAGES',
|
|
20
|
+
])
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
test('app title', () => {
|
|
24
|
+
testStringVariable(
|
|
25
|
+
variables.templates.APP_TITLE,
|
|
26
|
+
'VITE_APP_TITLE',
|
|
27
|
+
z.string().optional(),
|
|
28
|
+
)
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
test('app logo', () => {
|
|
32
|
+
testStringVariable(
|
|
33
|
+
variables.templates.APP_LOGO,
|
|
34
|
+
'VITE_APP_LOGO',
|
|
35
|
+
z.string().optional(),
|
|
36
|
+
)
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
test('site root', () => {
|
|
40
|
+
testStringVariable(
|
|
41
|
+
variables.templates.SITE_ROOT,
|
|
42
|
+
'VITE_SITE_ROOT',
|
|
43
|
+
z.string().optional(),
|
|
44
|
+
)
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
test('query generation factories', () => {
|
|
48
|
+
testRecordVariable(
|
|
49
|
+
variables.templates.QUERY_GENERATION_FACTORIES,
|
|
50
|
+
'VITE_QUERY_GENERATION_FACTORIES',
|
|
51
|
+
z
|
|
52
|
+
.record(
|
|
53
|
+
z
|
|
54
|
+
.union([
|
|
55
|
+
z.string(),
|
|
56
|
+
z.boolean(),
|
|
57
|
+
z.number(),
|
|
58
|
+
z.null(),
|
|
59
|
+
z.record(z.unknown()),
|
|
60
|
+
])
|
|
61
|
+
.optional(),
|
|
62
|
+
)
|
|
63
|
+
.optional(),
|
|
64
|
+
)
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
test('pages', () => {
|
|
68
|
+
const pagesType: ZodType<Page> = z.lazy(() =>
|
|
69
|
+
z.object({
|
|
70
|
+
title: z.string(),
|
|
71
|
+
content: z.union([z.array(pagesType), z.string()]),
|
|
72
|
+
}),
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
testArrayVariable(
|
|
76
|
+
variables.templates.PAGES,
|
|
77
|
+
'VITE_PAGES',
|
|
78
|
+
z.array(pagesType).optional(),
|
|
79
|
+
)
|
|
80
|
+
})
|
|
23
81
|
})
|
|
24
82
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
83
|
+
describe('magidoc variables', () => {
|
|
84
|
+
it('contains the right magidoc variables', () => {
|
|
85
|
+
expect(Object.keys(variables.magidoc)).toEqual(['MAGIDOC_GENERATE'])
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
test('magidoc generate', () => {
|
|
89
|
+
testBooleanVariable(
|
|
90
|
+
variables.magidoc.MAGIDOC_GENERATE,
|
|
91
|
+
'VITE_MAGIDOC_GENERATE',
|
|
92
|
+
z.boolean().optional(),
|
|
93
|
+
)
|
|
94
|
+
})
|
|
32
95
|
})
|
|
33
96
|
})
|
|
34
97
|
|
|
35
|
-
function testStringVariable(
|
|
98
|
+
function testStringVariable(
|
|
99
|
+
target: Variable<string>,
|
|
100
|
+
viteKey: string,
|
|
101
|
+
expectedZod: ZodType<any>,
|
|
102
|
+
) {
|
|
36
103
|
expect(target.vite.key).toEqual(viteKey)
|
|
37
104
|
|
|
38
105
|
expect(target.vite.get({ [viteKey]: 'Potato' })).toBe('Potato')
|
|
@@ -48,9 +115,15 @@ function testStringVariable(target: Variable<string>, viteKey: string) {
|
|
|
48
115
|
expect(target.vite.getOrDefault({}, 'Default')).toBe('Default')
|
|
49
116
|
|
|
50
117
|
expect(target.asEnv('Potato')).toEqual({ [viteKey]: 'Potato' })
|
|
118
|
+
|
|
119
|
+
ensureZodTypeEqual(target, expectedZod)
|
|
51
120
|
}
|
|
52
121
|
|
|
53
|
-
function testBooleanVariable(
|
|
122
|
+
function testBooleanVariable(
|
|
123
|
+
target: Variable<boolean>,
|
|
124
|
+
viteKey: string,
|
|
125
|
+
expectedZod: ZodType<any>,
|
|
126
|
+
) {
|
|
54
127
|
expect(target.vite.key).toEqual(viteKey)
|
|
55
128
|
|
|
56
129
|
expect(target.vite.get({ [viteKey]: true })).toBe(true)
|
|
@@ -75,11 +148,14 @@ function testBooleanVariable(target: Variable<boolean>, viteKey: string) {
|
|
|
75
148
|
|
|
76
149
|
expect(target.asEnv(true)).toEqual({ [viteKey]: 'true' })
|
|
77
150
|
expect(target.asEnv(false)).toEqual({ [viteKey]: 'false' })
|
|
151
|
+
|
|
152
|
+
ensureZodTypeEqual(target, expectedZod)
|
|
78
153
|
}
|
|
79
154
|
|
|
80
155
|
function testRecordVariable(
|
|
81
156
|
target: Variable<Record<string, any>>,
|
|
82
157
|
viteKey: string,
|
|
158
|
+
expectedZod: ZodType<any>,
|
|
83
159
|
) {
|
|
84
160
|
expect(target.vite.key).toEqual(viteKey)
|
|
85
161
|
|
|
@@ -103,4 +179,54 @@ function testRecordVariable(
|
|
|
103
179
|
[viteKey]: JSON.stringify({ abc: 123 }),
|
|
104
180
|
})
|
|
105
181
|
expect(target.asEnv({})).toEqual({ [viteKey]: '{}' })
|
|
182
|
+
|
|
183
|
+
ensureZodTypeEqual(target, expectedZod)
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
function testArrayVariable(
|
|
187
|
+
target: Variable<Array<any>>,
|
|
188
|
+
viteKey: string,
|
|
189
|
+
expectedZod: ZodType<any>,
|
|
190
|
+
) {
|
|
191
|
+
expect(target.vite.key).toEqual(viteKey)
|
|
192
|
+
|
|
193
|
+
expect(target.vite.get({ [viteKey]: true })).toBeNull()
|
|
194
|
+
expect(target.vite.get({ [viteKey]: 'true' })).toBeNull()
|
|
195
|
+
expect(target.vite.get({ [viteKey]: '4234' })).toBeNull()
|
|
196
|
+
expect(target.vite.get({ [viteKey]: 4234 })).toBeNull()
|
|
197
|
+
expect(target.vite.get({ [viteKey]: {} })).toBeNull()
|
|
198
|
+
|
|
199
|
+
expect(target.vite.get({ [viteKey]: [{ abc: '123' }] })).toEqual([
|
|
200
|
+
{ abc: '123' },
|
|
201
|
+
])
|
|
202
|
+
expect(
|
|
203
|
+
target.vite.get({ [viteKey]: JSON.stringify([{ abc: '123' }]) }),
|
|
204
|
+
).toEqual([{ abc: '123' }])
|
|
205
|
+
|
|
206
|
+
expect(
|
|
207
|
+
target.vite.getOrDefault({ [viteKey]: false }, [{ abc: 123 }]),
|
|
208
|
+
).toEqual([
|
|
209
|
+
{
|
|
210
|
+
abc: 123,
|
|
211
|
+
},
|
|
212
|
+
])
|
|
213
|
+
expect(target.vite.getOrDefault({ [viteKey]: [] }, [{ abc: 123 }])).toEqual(
|
|
214
|
+
[],
|
|
215
|
+
)
|
|
216
|
+
expect(target.vite.getOrDefault({}, [{ abc: 123 }])).toEqual([{ abc: 123 }])
|
|
217
|
+
|
|
218
|
+
expect(target.asEnv([{ abc: 123 }])).toEqual({
|
|
219
|
+
[viteKey]: JSON.stringify([{ abc: 123 }]),
|
|
220
|
+
})
|
|
221
|
+
expect(target.asEnv([])).toEqual({ [viteKey]: '[]' })
|
|
222
|
+
|
|
223
|
+
ensureZodTypeEqual(target, expectedZod)
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
function ensureZodTypeEqual(target: Variable<any>, expected: ZodType<any>) {
|
|
227
|
+
// @ts-ignore
|
|
228
|
+
// this does a good enough compare to make sure they have the same schema
|
|
229
|
+
expect(JSON.parse(JSON.stringify(target.zod.type(z)))).toEqual(
|
|
230
|
+
JSON.parse(JSON.stringify(expected, null, 2)),
|
|
231
|
+
)
|
|
106
232
|
}
|