@jakubmazanec/zod-utils 1.0.0-11dd4a3

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 (55) hide show
  1. package/LICENSE.md +840 -0
  2. package/README.md +38 -0
  3. package/dist/main.d.ts +2 -0
  4. package/dist/main.js +4 -0
  5. package/dist/main.js.map +1 -0
  6. package/dist/types/Json.d.ts +8 -0
  7. package/dist/types/Json.js +14 -0
  8. package/dist/types/Json.js.map +1 -0
  9. package/dist/types/PackageJson.d.ts +517 -0
  10. package/dist/types/PackageJson.js +292 -0
  11. package/dist/types/PackageJson.js.map +1 -0
  12. package/dist/types/TsconfigJson.d.ts +609 -0
  13. package/dist/types/TsconfigJson.js +338 -0
  14. package/dist/types/TsconfigJson.js.map +1 -0
  15. package/dist/types.d.ts +3 -0
  16. package/dist/types.js +5 -0
  17. package/dist/types.js.map +1 -0
  18. package/dist/utils/is.d.ts +2 -0
  19. package/dist/utils/is.js +5 -0
  20. package/dist/utils/is.js.map +1 -0
  21. package/dist/utils/isPackageJson.d.ts +2 -0
  22. package/dist/utils/isPackageJson.js +6 -0
  23. package/dist/utils/isPackageJson.js.map +1 -0
  24. package/dist/utils/isTsconfigJson.d.ts +2 -0
  25. package/dist/utils/isTsconfigJson.js +6 -0
  26. package/dist/utils/isTsconfigJson.js.map +1 -0
  27. package/dist/utils/readFile.d.ts +11 -0
  28. package/dist/utils/readFile.js +16 -0
  29. package/dist/utils/readFile.js.map +1 -0
  30. package/dist/utils/readJson.d.ts +10 -0
  31. package/dist/utils/readJson.js +7 -0
  32. package/dist/utils/readJson.js.map +1 -0
  33. package/dist/utils/readPackageJson.d.ts +11 -0
  34. package/dist/utils/readPackageJson.js +7 -0
  35. package/dist/utils/readPackageJson.js.map +1 -0
  36. package/dist/utils/zodIssuesToString.d.ts +2 -0
  37. package/dist/utils/zodIssuesToString.js +30 -0
  38. package/dist/utils/zodIssuesToString.js.map +1 -0
  39. package/dist/utils.d.ts +7 -0
  40. package/dist/utils.js +9 -0
  41. package/dist/utils.js.map +1 -0
  42. package/package.json +43 -0
  43. package/src/main.ts +2 -0
  44. package/src/types/Json.ts +11 -0
  45. package/src/types/PackageJson.ts +294 -0
  46. package/src/types/TsconfigJson.ts +346 -0
  47. package/src/types.ts +3 -0
  48. package/src/utils/is.ts +5 -0
  49. package/src/utils/isPackageJson.ts +5 -0
  50. package/src/utils/isTsconfigJson.ts +5 -0
  51. package/src/utils/readFile.ts +40 -0
  52. package/src/utils/readJson.ts +31 -0
  53. package/src/utils/readPackageJson.ts +26 -0
  54. package/src/utils/zodIssuesToString.ts +52 -0
  55. package/src/utils.ts +7 -0
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@jakubmazanec/zod-utils",
3
+ "version": "1.0.0-11dd4a3",
4
+ "description": "Collection of Zod schemas and utilities.",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/jakubmazanec/js-tools",
8
+ "directory": "packages/zod-utils"
9
+ },
10
+ "license": "LGPL-3.0-only",
11
+ "author": "Jakub Mazanec <jakub@mazanec.dev>",
12
+ "sideEffects": false,
13
+ "type": "module",
14
+ "exports": "./dist/main.js",
15
+ "files": [
16
+ "dist",
17
+ "src"
18
+ ],
19
+ "scripts": {
20
+ "build": "swc src -d dist && tsc",
21
+ "clean": "del-cli dist *.tsbuildinfo",
22
+ "document": "typedoc --options typedoc.config.cjs",
23
+ "format": "prettier . --write --ignore-unknown --ignore-path ../../.prettierignore",
24
+ "lint": "eslint .",
25
+ "test": "cross-env NODE_OPTIONS=--experimental-vm-modules jest --passWithNoTests",
26
+ "typecheck": "tsc --project tsconfig.typecheck.json"
27
+ },
28
+ "dependencies": {
29
+ "@jakubmazanec/ts-utils": "2.1.0-11dd4a3"
30
+ },
31
+ "devDependencies": {
32
+ "@jest/globals": "^29.5.0",
33
+ "@types/node": "^16.18.3",
34
+ "zod": "^3.19.1"
35
+ },
36
+ "peerDependencies": {
37
+ "zod": "^3.19.1"
38
+ },
39
+ "packageManager": "npm@8.19.4",
40
+ "engines": {
41
+ "node": ">=16.20.0"
42
+ }
43
+ }
package/src/main.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './types.js';
2
+ export * from './utils.js';
@@ -0,0 +1,11 @@
1
+ import * as z from 'zod';
2
+
3
+ const literalSchema = z.union([z.string(), z.number(), z.boolean(), z.null()]);
4
+
5
+ type Literal = z.infer<typeof literalSchema>;
6
+
7
+ export const jsonSchema: z.ZodSchema<Json> = z.lazy(() =>
8
+ z.union([literalSchema, z.array(jsonSchema), z.record(jsonSchema)]),
9
+ );
10
+
11
+ export type Json = Json[] | Literal | {[key: string]: Json};
@@ -0,0 +1,294 @@
1
+ import * as z from 'zod';
2
+
3
+ const packageJsonFundingSchema = z.union([
4
+ z
5
+ .object({
6
+ type: z
7
+ .union([
8
+ z.enum([
9
+ 'corporation',
10
+ 'foundation',
11
+ 'github',
12
+ 'individual',
13
+ 'opencollective',
14
+ 'patreon',
15
+ ]),
16
+ z.string(),
17
+ ])
18
+ .optional(),
19
+ url: z.string(),
20
+ })
21
+ .strict(),
22
+ z.string(),
23
+ ]);
24
+
25
+ const packageJsonPublishConfigSchema = z.intersection(
26
+ z.object({
27
+ access: z.enum(['public', 'restricted']).optional(),
28
+ registry: z.string().optional(),
29
+ tag: z.string().optional(),
30
+ }),
31
+ z.record(z.unknown()),
32
+ );
33
+
34
+ const packageJsonPersonSchema = z.union([
35
+ z
36
+ .object({
37
+ name: z.string(),
38
+ email: z.string().optional(),
39
+ url: z.string().optional(),
40
+ })
41
+ .strict(),
42
+ z.string(),
43
+ ]);
44
+
45
+ const packageJsonBugsLocationSchema = z.union([
46
+ z
47
+ .object({
48
+ email: z.string().optional(),
49
+ url: z.string().optional(),
50
+ })
51
+ .strict(),
52
+ z.string(),
53
+ ]);
54
+
55
+ const packageJsonDirectoryLocationsSchema = z
56
+ .object({
57
+ bin: z.string().optional(),
58
+ doc: z.string().optional(),
59
+ example: z.string().optional(),
60
+ lib: z.string().optional(),
61
+ man: z.string().optional(),
62
+ v: z.string().optional(),
63
+ })
64
+ .strict();
65
+
66
+ const packageJsonScriptsSchema = z.intersection(
67
+ z.record(z.string()),
68
+ z.object({
69
+ prepublish: z.string().optional(),
70
+ prepare: z.string().optional(),
71
+ prepublishOnly: z.string().optional(),
72
+ prepack: z.string().optional(),
73
+ postpack: z.string().optional(),
74
+ publish: z.string().optional(),
75
+ postpublish: z.string().optional(),
76
+ preinstall: z.string().optional(),
77
+ install: z.string().optional(),
78
+ postinstall: z.string().optional(),
79
+ preuninstall: z.string().optional(),
80
+ uninstall: z.string().optional(),
81
+ postuninstall: z.string().optional(),
82
+ preversion: z.string().optional(),
83
+ version: z.string().optional(),
84
+ postversion: z.string().optional(),
85
+ pretest: z.string().optional(),
86
+ test: z.string().optional(),
87
+ posttest: z.string().optional(),
88
+ prestop: z.string().optional(),
89
+ stop: z.string().optional(),
90
+ poststop: z.string().optional(),
91
+ prestart: z.string().optional(),
92
+ start: z.string().optional(),
93
+ poststart: z.string().optional(),
94
+ prerestart: z.string().optional(),
95
+ restart: z.string().optional(),
96
+ postrestart: z.string().optional(),
97
+ }),
98
+ );
99
+
100
+ const packageJsonDependenciesSchema = z.record(z.string());
101
+
102
+ const packageJsonExportConditionSchema = z.union([
103
+ z.enum([
104
+ 'browser',
105
+ 'default',
106
+ 'deno',
107
+ 'development',
108
+ 'electron',
109
+ 'import',
110
+ 'node',
111
+ 'production',
112
+ 'react-native',
113
+ 'require',
114
+ ]),
115
+ z.string(),
116
+ ]);
117
+
118
+ type PackageJsonExportCondition = z.infer<typeof packageJsonExportConditionSchema>;
119
+
120
+ const packageJsonExportsSchema: z.ZodSchema<PackageJsonExports> = z.lazy(() =>
121
+ z.union([
122
+ z.string().array(),
123
+ z.string(),
124
+ z.object({
125
+ browser: z.union([packageJsonExportsSchema, z.null()]).optional(),
126
+ default: z.union([packageJsonExportsSchema, z.null()]).optional(),
127
+ deno: z.union([packageJsonExportsSchema, z.null()]).optional(),
128
+ development: z.union([packageJsonExportsSchema, z.null()]).optional(),
129
+ electron: z.union([packageJsonExportsSchema, z.null()]).optional(),
130
+ import: z.union([packageJsonExportsSchema, z.null()]).optional(),
131
+ node: z.union([packageJsonExportsSchema, z.null()]).optional(),
132
+ production: z.union([packageJsonExportsSchema, z.null()]).optional(),
133
+ 'react-native': z.union([packageJsonExportsSchema, z.null()]).optional(),
134
+ require: z.union([packageJsonExportsSchema, z.null()]).optional(),
135
+ }),
136
+ z.record(z.union([packageJsonExportsSchema, z.null()])),
137
+ ]),
138
+ );
139
+
140
+ const packageJsonBundledDependenciesSchema = z.union([z.string().array(), z.boolean()]).optional();
141
+
142
+ type PackageJsonExports =
143
+ | string[]
144
+ | string
145
+ | {
146
+ [key in PackageJsonExportCondition]?: PackageJsonExports | null;
147
+ }
148
+ | {[key: string]: PackageJsonExports | null | undefined};
149
+
150
+ export const packageJsonSchema = z.object({
151
+ name: z.string().optional(),
152
+ version: z.string().optional(),
153
+ description: z.string().optional(),
154
+ keywords: z.string().array().optional(),
155
+ homepage: z.string().optional(),
156
+ bugs: packageJsonBugsLocationSchema.optional(),
157
+ license: z.string().optional(),
158
+ author: packageJsonPersonSchema.optional(),
159
+ contributors: packageJsonPersonSchema.array().optional(),
160
+ maintainers: packageJsonPersonSchema.array().optional(),
161
+ files: z.string().array().optional(),
162
+ type: z.union([z.literal('commonjs'), z.literal('module')]).optional(),
163
+ main: z.string().optional(),
164
+ exports: packageJsonExportsSchema.optional(),
165
+ bin: z.union([z.record(z.string()), z.string()]).optional(),
166
+ man: z.union([z.string().array(), z.string()]).optional(),
167
+ directories: packageJsonDirectoryLocationsSchema.optional(),
168
+ repository: z
169
+ .union([
170
+ z
171
+ .object({
172
+ type: z.string(),
173
+ url: z.string(),
174
+ directory: z.string().optional(),
175
+ })
176
+ .strict(),
177
+ z.string(),
178
+ ])
179
+ .optional(),
180
+ scripts: packageJsonScriptsSchema.optional(),
181
+ config: z.record(z.unknown()).optional(),
182
+ dependencies: packageJsonDependenciesSchema.optional(),
183
+ devDependencies: packageJsonDependenciesSchema.optional(),
184
+ optionalDependencies: packageJsonDependenciesSchema.optional(),
185
+ peerDependencies: packageJsonDependenciesSchema.optional(),
186
+ peerDependenciesMeta: z
187
+ .record(
188
+ z.object({
189
+ optional: z.boolean(),
190
+ }),
191
+ )
192
+ .optional(),
193
+ bundledDependencies: packageJsonBundledDependenciesSchema,
194
+ bundleDependencies: packageJsonBundledDependenciesSchema,
195
+ overrides: z
196
+ .record(z.union([z.string(), z.record(z.union([z.string(), z.record(z.unknown())]))]))
197
+ .optional(),
198
+
199
+ funding: z.union([packageJsonFundingSchema.array(), packageJsonFundingSchema]).optional(),
200
+
201
+ module: z.string().optional(),
202
+ esnext: z.union([z.string(), z.record(z.string())]).optional(),
203
+ browser: z.union([z.string(), z.record(z.union([z.string(), z.literal(false)]))]).optional(),
204
+ sideEffects: z.union([z.string().array(), z.boolean()]).optional(),
205
+
206
+ engines: z
207
+ .intersection(
208
+ z.object({
209
+ node: z.string().optional(),
210
+ npm: z.string().optional(),
211
+ }),
212
+ z.record(z.string()),
213
+ )
214
+ .optional(),
215
+
216
+ os: z
217
+ .union([
218
+ z.enum([
219
+ '!aix',
220
+ '!darwin',
221
+ '!freebsd',
222
+ '!linux',
223
+ '!openbsd',
224
+ '!sunos',
225
+ '!win32',
226
+ 'aix',
227
+ 'darwin',
228
+ 'freebsd',
229
+ 'linux',
230
+ 'openbsd',
231
+ 'sunos',
232
+ 'win32',
233
+ ]),
234
+ z.string(),
235
+ ])
236
+ .array()
237
+ .optional(),
238
+ cpu: z
239
+ .union([
240
+ z.enum([
241
+ '!arm',
242
+ '!arm64',
243
+ '!ia32',
244
+ '!mips',
245
+ '!mipsel',
246
+ '!ppc',
247
+ '!ppc64',
248
+ '!s390',
249
+ '!s390x',
250
+ '!x32',
251
+ '!x64',
252
+ 'arm',
253
+ 'arm64',
254
+ 'ia32',
255
+ 'mips',
256
+ 'mipsel',
257
+ 'ppc',
258
+ 'ppc64',
259
+ 's390',
260
+ 's390x',
261
+ 'x32',
262
+ 'x64',
263
+ ]),
264
+ z.string(),
265
+ ])
266
+ .array()
267
+ .optional(),
268
+ private: z.boolean().optional(),
269
+ publishConfig: packageJsonPublishConfigSchema.optional(),
270
+ preferGlobal: z.boolean().optional(),
271
+
272
+ workspaces: z
273
+ .union([
274
+ z.string().array(),
275
+ z
276
+ .object({
277
+ packages: z.string().array().optional(),
278
+ nohoist: z.string().array().optional(),
279
+ })
280
+ .strict(),
281
+ ])
282
+ .optional(),
283
+ flat: z.boolean().optional(),
284
+ resolutions: packageJsonDependenciesSchema.optional(),
285
+
286
+ types: z.string().optional(),
287
+ typings: z.string().optional(),
288
+
289
+ // TODO: move following to separate schema
290
+ packageManager: z.string().optional(),
291
+ source: z.string().optional(),
292
+ });
293
+
294
+ export type PackageJson = z.infer<typeof packageJsonSchema>;
@@ -0,0 +1,346 @@
1
+ import * as z from 'zod';
2
+
3
+ let jsxSchema = z.enum(['preserve', 'react', 'react-jsx', 'react-jsxdev', 'react-native']);
4
+
5
+ let moduleSchema = z.enum([
6
+ 'CommonJS',
7
+ 'AMD',
8
+ 'System',
9
+ 'UMD',
10
+ 'ES6',
11
+ 'ES2015',
12
+ 'ES2020',
13
+ 'ESNext',
14
+ 'None',
15
+ 'commonjs',
16
+ 'amd',
17
+ 'system',
18
+ 'umd',
19
+ 'es6',
20
+ 'es2015',
21
+ 'es2020',
22
+ 'esnext',
23
+ 'none',
24
+ ]);
25
+
26
+ let newLineSchema = z.enum(['CRLF', 'LF', 'crlf', 'lf']);
27
+
28
+ let targetSchema = z.enum([
29
+ 'ES3',
30
+ 'ES5',
31
+ 'ES6',
32
+ 'ES2015',
33
+ 'ES2016',
34
+ 'ES2017',
35
+ 'ES2018',
36
+ 'ES2019',
37
+ 'ES2020',
38
+ 'ES2021',
39
+ 'ESNext',
40
+ 'es3',
41
+ 'es5',
42
+ 'es6',
43
+ 'es2015',
44
+ 'es2016',
45
+ 'es2017',
46
+ 'es2018',
47
+ 'es2019',
48
+ 'es2020',
49
+ 'es2021',
50
+ 'esnext',
51
+ ]);
52
+
53
+ let libSchema = z.enum([
54
+ 'ES5',
55
+ 'ES6',
56
+ 'ES7',
57
+ 'ES2015',
58
+ 'ES2015.Collection',
59
+ 'ES2015.Core',
60
+ 'ES2015.Generator',
61
+ 'ES2015.Iterable',
62
+ 'ES2015.Promise',
63
+ 'ES2015.Proxy',
64
+ 'ES2015.Reflect',
65
+ 'ES2015.Symbol.WellKnown',
66
+ 'ES2015.Symbol',
67
+ 'ES2016',
68
+ 'ES2016.Array.Include',
69
+ 'ES2017',
70
+ 'ES2017.Intl',
71
+ 'ES2017.Object',
72
+ 'ES2017.SharedMemory',
73
+ 'ES2017.String',
74
+ 'ES2017.TypedArrays',
75
+ 'ES2018',
76
+ 'ES2018.AsyncGenerator',
77
+ 'ES2018.AsyncIterable',
78
+ 'ES2018.Intl',
79
+ 'ES2018.Promise',
80
+ 'ES2018.Regexp',
81
+ 'ES2019',
82
+ 'ES2019.Array',
83
+ 'ES2019.Object',
84
+ 'ES2019.String',
85
+ 'ES2019.Symbol',
86
+ 'ES2020',
87
+ 'ES2020.BigInt',
88
+ 'ES2020.Promise',
89
+ 'ES2020.String',
90
+ 'ES2020.Symbol.WellKnown',
91
+ 'ES2020.SharedMemory',
92
+ 'ES2020.Intl',
93
+ 'ES2021',
94
+ 'ES2021.Promise',
95
+ 'ES2021.String',
96
+ 'ES2021.WeakRef',
97
+ 'ESNext',
98
+ 'ESNext.Array',
99
+ 'ESNext.AsyncIterable',
100
+ 'ESNext.BigInt',
101
+ 'ESNext.Intl',
102
+ 'ESNext.Promise',
103
+ 'ESNext.String',
104
+ 'ESNext.Symbol',
105
+ 'ESNext.WeakRef',
106
+ 'DOM',
107
+ 'DOM.Iterable',
108
+ 'ScriptHost',
109
+ 'WebWorker',
110
+ 'WebWorker.ImportScripts',
111
+ 'WebWorker.Iterable',
112
+ 'es5',
113
+ 'es6',
114
+ 'es7',
115
+ 'es2015',
116
+ 'es2015.collection',
117
+ 'es2015.core',
118
+ 'es2015.generator',
119
+ 'es2015.iterable',
120
+ 'es2015.promise',
121
+ 'es2015.proxy',
122
+ 'es2015.reflect',
123
+ 'es2015.symbol.wellknown',
124
+ 'es2015.symbol',
125
+ 'es2016',
126
+ 'es2016.array.include',
127
+ 'es2017',
128
+ 'es2017.intl',
129
+ 'es2017.object',
130
+ 'es2017.sharedmemory',
131
+ 'es2017.string',
132
+ 'es2017.typedarrays',
133
+ 'es2018',
134
+ 'es2018.asyncgenerator',
135
+ 'es2018.asynciterable',
136
+ 'es2018.intl',
137
+ 'es2018.promise',
138
+ 'es2018.regexp',
139
+ 'es2019',
140
+ 'es2019.array',
141
+ 'es2019.object',
142
+ 'es2019.string',
143
+ 'es2019.symbol',
144
+ 'es2020',
145
+ 'es2020.bigint',
146
+ 'es2020.promise',
147
+ 'es2020.string',
148
+ 'es2020.symbol.wellknown',
149
+ 'es2020.sharedmemory',
150
+ 'es2020.intl',
151
+ 'es2021',
152
+ 'es2021.promise',
153
+ 'es2021.string',
154
+ 'es2021.weakref',
155
+ 'esnext',
156
+ 'esnext.array',
157
+ 'esnext.asynciterable',
158
+ 'esnext.bigint',
159
+ 'esnext.intl',
160
+ 'esnext.promise',
161
+ 'esnext.string',
162
+ 'esnext.symbol',
163
+ 'esnext.weakref',
164
+ 'dom',
165
+ 'dom.iterable',
166
+ 'scripthost',
167
+ 'webworker',
168
+ 'webworker.importscripts',
169
+ 'webworker.iterable',
170
+ ]);
171
+
172
+ let pluginSchema = z
173
+ .object({
174
+ name: z.string().optional(),
175
+ })
176
+ .strict()
177
+ .and(z.record(z.unknown()));
178
+
179
+ let importsNotUsedAsValuesSchema = z.enum(['remove', 'preserve', 'error']);
180
+
181
+ let fallbackPollingSchema = z.enum([
182
+ 'fixedPollingInterval',
183
+ 'priorityPollingInterval',
184
+ 'dynamicPriorityPolling',
185
+ 'fixedInterval',
186
+ 'priorityInterval',
187
+ 'dynamicPriority',
188
+ 'fixedChunkSize',
189
+ ]);
190
+
191
+ let watchDirectory = z.enum([
192
+ 'useFsEvents',
193
+ 'fixedPollingInterval',
194
+ 'dynamicPriorityPolling',
195
+ 'fixedChunkSizePolling',
196
+ ]);
197
+
198
+ let watchFileSchema = z.enum([
199
+ 'fixedPollingInterval',
200
+ 'priorityPollingInterval',
201
+ 'dynamicPriorityPolling',
202
+ 'useFsEvents',
203
+ 'useFsEventsOnParentDirectory',
204
+ 'fixedChunkSizePolling',
205
+ ]);
206
+
207
+ let compilerOptionsSchema = z
208
+ .object({
209
+ allowJs: z.boolean().optional(),
210
+ allowSyntheticDefaultImports: z.boolean().optional(),
211
+ allowUmdGlobalAccess: z.boolean().optional(),
212
+ allowUnreachableCode: z.boolean().optional(),
213
+ allowUnusedLabels: z.boolean().optional(),
214
+ alwaysStrict: z.boolean().optional(),
215
+ assumeChangesOnlyAffectDirectDependencies: z.boolean().optional(),
216
+ baseUrl: z.string().optional(),
217
+ charset: z.string().optional(),
218
+ checkJs: z.boolean().optional(),
219
+ composite: z.boolean().optional(),
220
+ declaration: z.boolean().optional(),
221
+ declarationDir: z.string().optional(),
222
+ declarationMap: z.boolean().optional(),
223
+ diagnostics: z.boolean().optional(),
224
+ disableReferencedProjectLoad: z.boolean().optional(),
225
+ disableSizeLimit: z.boolean().optional(),
226
+ disableSolutionSearching: z.boolean().optional(),
227
+ disableSourceOfProjectReferenceRedirect: z.boolean().optional(),
228
+ downlevelIteration: z.boolean().optional(),
229
+ emitBOM: z.boolean().optional(),
230
+ emitDeclarationOnly: z.boolean().optional(),
231
+ emitDecoratorMetadata: z.boolean().optional(),
232
+ esModuleInterop: z.boolean().optional(),
233
+ exactOptionalPropertyTypes: z.boolean().optional(),
234
+ experimentalDecorators: z.boolean().optional(),
235
+ explainFiles: z.boolean().optional(),
236
+ extendedDiagnostics: z.boolean().optional(),
237
+ fallbackPolling: fallbackPollingSchema.optional(),
238
+ forceConsistentCasingInFileNames: z.boolean().optional(),
239
+ generateCpuProfile: z.string().optional(),
240
+ importHelpers: z.boolean().optional(),
241
+ importsNotUsedAsValues: importsNotUsedAsValuesSchema.optional(),
242
+ incremental: z.boolean().optional(),
243
+ inlineSourceMap: z.boolean().optional(),
244
+ inlineSources: z.boolean().optional(),
245
+ isolatedModules: z.boolean().optional(),
246
+ jsx: jsxSchema.optional(),
247
+ jsxFactory: z.string().optional(),
248
+ jsxFragmentFactory: z.string().optional(),
249
+ jsxImportSource: z.string().optional(),
250
+ keyofStringsOnly: z.boolean().optional(),
251
+ lib: libSchema.array().optional(),
252
+ listEmittedFiles: z.boolean().optional(),
253
+ listFiles: z.boolean().optional(),
254
+ listFilesOnly: z.boolean().optional(),
255
+ mapRoot: z.string().optional(),
256
+ maxNodeModuleJsDepth: z.number().optional(),
257
+ module: moduleSchema.optional(),
258
+ moduleResolution: z.enum(['classic', 'node']).optional(),
259
+ newLine: newLineSchema.optional(),
260
+ noEmit: z.boolean().optional(),
261
+ noEmitHelpers: z.boolean().optional(),
262
+ noEmitOnError: z.boolean().optional(),
263
+ noErrorTruncation: z.boolean().optional(),
264
+ noFallthroughCasesInSwitch: z.boolean().optional(),
265
+ noImplicitAny: z.boolean().optional(),
266
+ noImplicitOverride: z.boolean().optional(),
267
+ noImplicitReturns: z.boolean().optional(),
268
+ noImplicitThis: z.boolean().optional(),
269
+ noImplicitUseStrict: z.boolean().optional(),
270
+ noLib: z.boolean().optional(),
271
+ noPropertyAccessFromIndexSignature: z.boolean().optional(),
272
+ noResolve: z.boolean().optional(),
273
+ noStrictGenericChecks: z.boolean().optional(),
274
+ noUncheckedIndexedAccess: z.boolean().optional(),
275
+ noUnusedLocals: z.boolean().optional(),
276
+ noUnusedParameters: z.boolean().optional(),
277
+ outDir: z.string().optional(),
278
+ outFile: z.string().optional(),
279
+ paths: z.record(z.string().array()).optional(),
280
+ plugins: pluginSchema.array().optional(),
281
+ preserveConstEnums: z.boolean().optional(),
282
+ preserveSymlinks: z.boolean().optional(),
283
+ preserveWatchOutput: z.boolean().optional(),
284
+ pretty: z.boolean().optional(),
285
+ reactNamespace: z.string().optional(),
286
+ removeComments: z.boolean().optional(),
287
+ resolveJsonModule: z.boolean().optional(),
288
+ rootDir: z.string().optional(),
289
+ rootDirs: z.string().array().optional(),
290
+ skipDefaultLibCheck: z.boolean().optional(),
291
+ skipLibCheck: z.boolean().optional(),
292
+ sourceMap: z.boolean().optional(),
293
+ sourceRoot: z.string().optional(),
294
+ strict: z.boolean().optional(),
295
+ strictBindCallApply: z.boolean().optional(),
296
+ strictFunctionTypes: z.boolean().optional(),
297
+ strictNullChecks: z.boolean().optional(),
298
+ strictPropertyInitialization: z.boolean().optional(),
299
+ stripInternal: z.boolean().optional(),
300
+ suppressExcessPropertyErrors: z.boolean().optional(),
301
+ suppressImplicitAnyIndexErrors: z.boolean().optional(),
302
+ target: targetSchema.optional(),
303
+ traceResolution: z.boolean().optional(),
304
+ tsBuildInfoFile: z.string().optional(),
305
+ typeRoots: z.string().array().optional(),
306
+ types: z.string().array().optional(),
307
+ useDefineForClassFields: z.boolean().optional(),
308
+ useUnknownInCatchVariables: z.boolean().optional(),
309
+ watch: z.boolean().optional(),
310
+ watchDirectory: watchDirectory.optional(),
311
+ watchFile: watchFileSchema.optional(),
312
+ })
313
+ .strict();
314
+
315
+ let typeAcquisitionSchema = z
316
+ .object({
317
+ enable: z.boolean().optional(),
318
+ include: z.string().array().optional(),
319
+ exclude: z.string().array().optional(),
320
+ })
321
+ .strict();
322
+
323
+ let referencesSchema = z
324
+ .object({
325
+ path: z.string(),
326
+
327
+ originalPath: z.string().optional(),
328
+ prepend: z.boolean().optional(),
329
+ circular: z.boolean().optional(),
330
+ })
331
+ .strict();
332
+
333
+ export const tsconfigJsonSchema = z
334
+ .object({
335
+ compileOnSave: z.boolean().optional(),
336
+ compilerOptions: compilerOptionsSchema.optional(),
337
+ exclude: z.string().array().optional(),
338
+ extends: z.string().optional(),
339
+ files: z.string().array().optional(),
340
+ include: z.string().array().optional(),
341
+ references: referencesSchema.array().optional(),
342
+ typeAcquisition: typeAcquisitionSchema.optional(),
343
+ })
344
+ .strict();
345
+
346
+ export type TsconfigJson = z.infer<typeof tsconfigJsonSchema>;
package/src/types.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './types/Json.js';
2
+ export * from './types/PackageJson.js';
3
+ export * from './types/TsconfigJson.js';
@@ -0,0 +1,5 @@
1
+ import {type z, type ZodTypeAny} from 'zod';
2
+
3
+ export function is<S extends ZodTypeAny>(value: unknown, schema: S): value is z.infer<S> {
4
+ return schema.safeParse(value).success;
5
+ }