@magidoc/plugin-starter-variables 0.10.0 → 0.11.1

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 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,2 @@
1
+ import type { Converter, ZodTypeProvider } from '../variable';
2
+ export declare function arrayConverter<V>(valueType: ZodTypeProvider<V>): Converter<Array<V | undefined>>;
@@ -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
- export { stringConverter, booleanConverter, recordConverter };
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
- try {
9
- const result = JSON.parse(target);
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,IAAI;oBACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAsB,CAAA;AACtD,oBAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,wBAAA,OAAO,IAAI,CAAA;AACZ,qBAAA;AACD,oBAAA,OAAO,MAAM,CAAA;AACd,iBAAA;gBAAC,MAAM;AACN,oBAAA,OAAO,IAAI,CAAA;AACZ,iBAAA;AACF,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
+ {"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,11 @@
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>;
4
- QUERY_GENERATION_FACTORIES: import("./variable").Variable<Record<string, unknown>>;
8
+ QUERY_GENERATION_FACTORIES: import("./variable").Variable<Record<string, string | number | boolean | Record<string, unknown> | null | undefined>>;
9
+ PAGES: import("./variable").Variable<(Page | undefined)[]>;
5
10
  };
6
11
  export default _default;
@@ -1,11 +1,25 @@
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()),
8
- QUERY_GENERATION_FACTORIES: createVariable('QUERY_GENERATION_FACTORIES', recordConverter((zod) => zod.unknown())),
9
+ QUERY_GENERATION_FACTORIES: createVariable('QUERY_GENERATION_FACTORIES', recordConverter((zod) => zod.union([
10
+ zod.string(),
11
+ zod.boolean(),
12
+ zod.number(),
13
+ zod.null(),
14
+ zod.record(zod.unknown()),
15
+ ]))),
16
+ PAGES: createVariable('PAGES', arrayConverter((zod) => {
17
+ const type = zod.lazy(() => zod.object({
18
+ title: zod.string().nonempty(),
19
+ content: zod.union([zod.array(type), zod.string().nonempty()]),
20
+ }));
21
+ return type;
22
+ })),
9
23
  };
10
24
 
11
25
  export { templates as default };
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sources":["../../../src/variables/templates.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAGA,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,0BAA0B,EAAE,cAAc,CACxC,4BAA4B,EAC5B,eAAe,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CACxC;CACF;;;;"}
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,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.10.0",
5
+ "version": "0.11.1",
6
6
  "type": "module",
7
7
  "license": "MIT",
8
8
  "main": "./build/index.js",
package/rollup.config.cjs CHANGED
@@ -1,10 +1,10 @@
1
1
  const { defineConfig } = require('rollup')
2
2
  const typescript = require('@rollup/plugin-typescript')
3
- const shebang = require('rollup-plugin-preserve-shebang')
4
3
 
5
4
  module.exports = defineConfig({
6
5
  input: ['src/index.ts'],
7
6
  plugins: [typescript()],
7
+ external: ['zod'],
8
8
  output: {
9
9
  dir: 'build',
10
10
  format: 'esm',
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
- try {
14
- const result = JSON.parse(target) as Record<string, V>
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,11 +1,42 @@
1
- import { recordConverter, stringConverter } from './converters'
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()),
7
- QUERY_GENERATION_FACTORIES: createVariable<Record<string, unknown>>(
13
+ QUERY_GENERATION_FACTORIES: createVariable<
14
+ Record<
15
+ string,
16
+ string | boolean | number | Record<string, unknown> | null | undefined
17
+ >
18
+ >(
8
19
  'QUERY_GENERATION_FACTORIES',
9
- recordConverter((zod) => zod.unknown()),
20
+ recordConverter((zod) =>
21
+ zod.union([
22
+ zod.string(),
23
+ zod.boolean(),
24
+ zod.number(),
25
+ zod.null(),
26
+ zod.record(zod.unknown()),
27
+ ]),
28
+ ),
29
+ ),
30
+ PAGES: createVariable<Array<Page | undefined>>(
31
+ 'PAGES',
32
+ arrayConverter((zod) => {
33
+ const type: ZodType<Page> = zod.lazy(() =>
34
+ zod.object({
35
+ title: zod.string().nonempty(),
36
+ content: zod.union([zod.array(type), zod.string().nonempty()]),
37
+ }),
38
+ )
39
+ return type
40
+ }),
10
41
  ),
11
42
  }
@@ -1,38 +1,96 @@
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
- it('contains the right templates variables', () => {
11
- expect(Object.keys(variables.templates)).toEqual([
12
- 'APP_LOGO',
13
- 'APP_TITLE',
14
- 'QUERY_GENERATION_FACTORIES',
15
- ])
16
-
17
- testStringVariable(variables.templates.APP_TITLE, 'VITE_APP_TITLE')
18
- testStringVariable(variables.templates.APP_LOGO, 'VITE_APP_LOGO')
19
- testRecordVariable(
20
- variables.templates.QUERY_GENERATION_FACTORIES,
21
- 'VITE_QUERY_GENERATION_FACTORIES',
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
+ 'QUERY_GENERATION_FACTORIES',
18
+ 'PAGES',
19
+ ])
20
+ })
21
+
22
+ test('app title', () => {
23
+ testStringVariable(
24
+ variables.templates.APP_TITLE,
25
+ 'VITE_APP_TITLE',
26
+ z.string().optional(),
27
+ )
28
+ })
29
+
30
+ test('app logo', () => {
31
+ testStringVariable(
32
+ variables.templates.APP_LOGO,
33
+ 'VITE_APP_LOGO',
34
+ z.string().optional(),
35
+ )
36
+ })
37
+
38
+ test('query generation factories', () => {
39
+ testRecordVariable(
40
+ variables.templates.QUERY_GENERATION_FACTORIES,
41
+ 'VITE_QUERY_GENERATION_FACTORIES',
42
+ z
43
+ .record(
44
+ z
45
+ .union([
46
+ z.string(),
47
+ z.boolean(),
48
+ z.number(),
49
+ z.null(),
50
+ z.record(z.unknown()),
51
+ ])
52
+ .optional(),
53
+ )
54
+ .optional(),
55
+ )
56
+ })
57
+
58
+ test('pages', () => {
59
+ const pagesType: ZodType<Page> = z.lazy(() =>
60
+ z.object({
61
+ title: z.string(),
62
+ content: z.union([z.array(pagesType), z.string()]),
63
+ }),
64
+ )
65
+
66
+ testArrayVariable(
67
+ variables.templates.PAGES,
68
+ 'VITE_PAGES',
69
+ z.array(pagesType).optional(),
70
+ )
71
+ })
23
72
  })
24
73
 
25
- it('contains the right magidoc variables', () => {
26
- expect(Object.keys(variables.magidoc)).toEqual(['MAGIDOC_GENERATE'])
27
-
28
- testBooleanVariable(
29
- variables.magidoc.MAGIDOC_GENERATE,
30
- 'VITE_MAGIDOC_GENERATE',
31
- )
74
+ describe('magidoc variables', () => {
75
+ it('contains the right magidoc variables', () => {
76
+ expect(Object.keys(variables.magidoc)).toEqual(['MAGIDOC_GENERATE'])
77
+ })
78
+
79
+ test('magidoc generate', () => {
80
+ testBooleanVariable(
81
+ variables.magidoc.MAGIDOC_GENERATE,
82
+ 'VITE_MAGIDOC_GENERATE',
83
+ z.boolean().optional(),
84
+ )
85
+ })
32
86
  })
33
87
  })
34
88
 
35
- function testStringVariable(target: Variable<string>, viteKey: string) {
89
+ function testStringVariable(
90
+ target: Variable<string>,
91
+ viteKey: string,
92
+ expectedZod: ZodType<any>,
93
+ ) {
36
94
  expect(target.vite.key).toEqual(viteKey)
37
95
 
38
96
  expect(target.vite.get({ [viteKey]: 'Potato' })).toBe('Potato')
@@ -48,9 +106,15 @@ function testStringVariable(target: Variable<string>, viteKey: string) {
48
106
  expect(target.vite.getOrDefault({}, 'Default')).toBe('Default')
49
107
 
50
108
  expect(target.asEnv('Potato')).toEqual({ [viteKey]: 'Potato' })
109
+
110
+ ensureZodTypeEqual(target, expectedZod)
51
111
  }
52
112
 
53
- function testBooleanVariable(target: Variable<boolean>, viteKey: string) {
113
+ function testBooleanVariable(
114
+ target: Variable<boolean>,
115
+ viteKey: string,
116
+ expectedZod: ZodType<any>,
117
+ ) {
54
118
  expect(target.vite.key).toEqual(viteKey)
55
119
 
56
120
  expect(target.vite.get({ [viteKey]: true })).toBe(true)
@@ -75,11 +139,14 @@ function testBooleanVariable(target: Variable<boolean>, viteKey: string) {
75
139
 
76
140
  expect(target.asEnv(true)).toEqual({ [viteKey]: 'true' })
77
141
  expect(target.asEnv(false)).toEqual({ [viteKey]: 'false' })
142
+
143
+ ensureZodTypeEqual(target, expectedZod)
78
144
  }
79
145
 
80
146
  function testRecordVariable(
81
- target: Variable<Record<string, unknown>>,
147
+ target: Variable<Record<string, any>>,
82
148
  viteKey: string,
149
+ expectedZod: ZodType<any>,
83
150
  ) {
84
151
  expect(target.vite.key).toEqual(viteKey)
85
152
 
@@ -103,4 +170,54 @@ function testRecordVariable(
103
170
  [viteKey]: JSON.stringify({ abc: 123 }),
104
171
  })
105
172
  expect(target.asEnv({})).toEqual({ [viteKey]: '{}' })
173
+
174
+ ensureZodTypeEqual(target, expectedZod)
175
+ }
176
+
177
+ function testArrayVariable(
178
+ target: Variable<Array<any>>,
179
+ viteKey: string,
180
+ expectedZod: ZodType<any>,
181
+ ) {
182
+ expect(target.vite.key).toEqual(viteKey)
183
+
184
+ expect(target.vite.get({ [viteKey]: true })).toBeNull()
185
+ expect(target.vite.get({ [viteKey]: 'true' })).toBeNull()
186
+ expect(target.vite.get({ [viteKey]: '4234' })).toBeNull()
187
+ expect(target.vite.get({ [viteKey]: 4234 })).toBeNull()
188
+ expect(target.vite.get({ [viteKey]: {} })).toBeNull()
189
+
190
+ expect(target.vite.get({ [viteKey]: [{ abc: '123' }] })).toEqual([
191
+ { abc: '123' },
192
+ ])
193
+ expect(
194
+ target.vite.get({ [viteKey]: JSON.stringify([{ abc: '123' }]) }),
195
+ ).toEqual([{ abc: '123' }])
196
+
197
+ expect(
198
+ target.vite.getOrDefault({ [viteKey]: false }, [{ abc: 123 }]),
199
+ ).toEqual([
200
+ {
201
+ abc: 123,
202
+ },
203
+ ])
204
+ expect(target.vite.getOrDefault({ [viteKey]: [] }, [{ abc: 123 }])).toEqual(
205
+ [],
206
+ )
207
+ expect(target.vite.getOrDefault({}, [{ abc: 123 }])).toEqual([{ abc: 123 }])
208
+
209
+ expect(target.asEnv([{ abc: 123 }])).toEqual({
210
+ [viteKey]: JSON.stringify([{ abc: 123 }]),
211
+ })
212
+ expect(target.asEnv([])).toEqual({ [viteKey]: '[]' })
213
+
214
+ ensureZodTypeEqual(target, expectedZod)
215
+ }
216
+
217
+ function ensureZodTypeEqual(target: Variable<any>, expected: ZodType<any>) {
218
+ // @ts-ignore
219
+ // this does a good enough compare to make sure they have the same schema
220
+ expect(JSON.parse(JSON.stringify(target.zod.type(z)))).toEqual(
221
+ JSON.parse(JSON.stringify(expected, null, 2)),
222
+ )
106
223
  }