@atcute/lex-cli 2.3.0 → 2.3.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/dist/cli.js +8 -5
- package/dist/cli.js.map +1 -1
- package/dist/lexicon-metadata.d.ts +15 -33
- package/dist/lexicon-metadata.d.ts.map +1 -1
- package/dist/lexicon-metadata.js +23 -12
- package/dist/lexicon-metadata.js.map +1 -1
- package/package.json +4 -5
- package/schema/lexicon-package.schema.json +6 -5
- package/src/cli.ts +10 -5
- package/src/lexicon-metadata.ts +44 -27
package/dist/cli.js
CHANGED
|
@@ -8,7 +8,7 @@ import { path as pathParser } from '@optique/run/valueparser';
|
|
|
8
8
|
import pc from 'picocolors';
|
|
9
9
|
import { lexiconDoc } from '@atcute/lexicon-doc';
|
|
10
10
|
import { generateLexiconApi } from './codegen.js';
|
|
11
|
-
import {
|
|
11
|
+
import { packageJsonSchema } from './lexicon-metadata.js';
|
|
12
12
|
/**
|
|
13
13
|
* Resolves package imports to ImportMapping[]
|
|
14
14
|
*/
|
|
@@ -44,13 +44,16 @@ const resolveImportsToMappings = async (imports, configDirname) => {
|
|
|
44
44
|
process.exit(1);
|
|
45
45
|
}
|
|
46
46
|
// Validate package.json
|
|
47
|
-
const result =
|
|
48
|
-
if (!result.
|
|
47
|
+
const result = packageJsonSchema.try(packageJson, { mode: 'passthrough' });
|
|
48
|
+
if (!result.ok) {
|
|
49
49
|
console.error(pc.bold(pc.red(`invalid atcute:lexicons in "${packageName}":`)));
|
|
50
|
-
console.error(result.
|
|
50
|
+
console.error(result.message);
|
|
51
|
+
for (const issue of result.issues) {
|
|
52
|
+
console.log(`- ${issue.code} at .${issue.path.join('.')}`);
|
|
53
|
+
}
|
|
51
54
|
process.exit(1);
|
|
52
55
|
}
|
|
53
|
-
const lexicons = result.
|
|
56
|
+
const lexicons = result.value['atcute:lexicons'];
|
|
54
57
|
if (!lexicons?.mappings) {
|
|
55
58
|
continue;
|
|
56
59
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,UAAU,EAAmB,MAAM,qBAAqB,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAsB,MAAM,cAAc,CAAC;AAEtE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,37 +1,19 @@
|
|
|
1
|
-
import * as v from '
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "path must be \".\" or start with \"./\"">]>;
|
|
16
|
-
}, undefined>, undefined>, undefined>;
|
|
17
|
-
}, undefined>;
|
|
1
|
+
import * as v from '@badrap/valita';
|
|
2
|
+
export type LexiconMappingEntryType = 'namespace' | 'named';
|
|
3
|
+
export type LexiconMappingPath = '.' | `./${string}`;
|
|
4
|
+
export interface LexiconMappingEntry {
|
|
5
|
+
type: LexiconMappingEntryType;
|
|
6
|
+
path: LexiconMappingPath;
|
|
7
|
+
}
|
|
8
|
+
export interface AtcuteLexiconsField {
|
|
9
|
+
mappings?: Record<string, LexiconMappingEntry>;
|
|
10
|
+
}
|
|
11
|
+
export interface PackageJsonWithLexicons {
|
|
12
|
+
'atcute:lexicons'?: AtcuteLexiconsField;
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
}
|
|
18
15
|
/**
|
|
19
16
|
* Schema for package.json with atcute:lexicons field
|
|
20
17
|
*/
|
|
21
|
-
export declare const packageJsonSchema: v.
|
|
22
|
-
readonly 'atcute:lexicons': v.OptionalSchema<v.ObjectSchema<{
|
|
23
|
-
readonly mappings: v.OptionalSchema<v.RecordSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.CheckAction<string, "invalid NSID pattern (must be valid NSID or end with .*)">]>, v.ObjectSchema<{
|
|
24
|
-
readonly type: v.PicklistSchema<["namespace", "named"], undefined>;
|
|
25
|
-
readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "path must be \".\" or start with \"./\"">]>;
|
|
26
|
-
}, undefined>, undefined>, undefined>;
|
|
27
|
-
}, undefined>, undefined>;
|
|
28
|
-
}, undefined>;
|
|
29
|
-
export type LexiconMappingEntry = v.InferOutput<typeof lexiconMappingEntry>;
|
|
30
|
-
export type AtcuteLexiconsField = v.InferOutput<typeof atcuteLexiconsField>;
|
|
31
|
-
export type PackageJsonWithLexicons = v.InferOutput<typeof packageJsonSchema>;
|
|
32
|
-
/**
|
|
33
|
-
* Validates a package.json object against the schema
|
|
34
|
-
*/
|
|
35
|
-
export declare const validatePackageJson: (data: unknown) => v.SafeParseResult<typeof packageJsonSchema>;
|
|
36
|
-
export {};
|
|
18
|
+
export declare const packageJsonSchema: v.Type<PackageJsonWithLexicons>;
|
|
37
19
|
//# sourceMappingURL=lexicon-metadata.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexicon-metadata.d.ts","sourceRoot":"","sources":["../src/lexicon-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"lexicon-metadata.d.ts","sourceRoot":"","sources":["../src/lexicon-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAIpC,MAAM,MAAM,uBAAuB,GAAG,WAAW,GAAG,OAAO,CAAC;AAC5D,MAAM,MAAM,kBAAkB,GAAG,GAAG,GAAG,KAAK,MAAM,EAAE,CAAC;AAErD,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,IAAI,EAAE,kBAAkB,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,uBAAuB;IACvC,iBAAiB,CAAC,EAAE,mBAAmB,CAAC;IACxC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAmDD;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAE5D,CAAC"}
|
package/dist/lexicon-metadata.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as v from '
|
|
1
|
+
import * as v from '@badrap/valita';
|
|
2
2
|
import { isNsid } from '@atcute/lexicons/syntax';
|
|
3
3
|
/**
|
|
4
4
|
* Validates if a string is a valid NSID pattern (exact or wildcard)
|
|
@@ -18,25 +18,36 @@ const isValidLexiconPattern = (pattern) => {
|
|
|
18
18
|
* Schema for a single lexicon mapping entry
|
|
19
19
|
*/
|
|
20
20
|
const lexiconMappingEntry = v.object({
|
|
21
|
-
type: v.
|
|
22
|
-
path: v
|
|
21
|
+
type: v.union(v.literal('namespace'), v.literal('named')),
|
|
22
|
+
path: v
|
|
23
|
+
.string()
|
|
24
|
+
.assert((input) => input === '.' || input.startsWith('./'), {
|
|
25
|
+
message: `path must be "." or start with "./"`,
|
|
26
|
+
}),
|
|
23
27
|
});
|
|
24
28
|
/**
|
|
25
29
|
* Schema for the atcute:lexicons field in package.json
|
|
26
30
|
*/
|
|
31
|
+
const mappingsSchema = v
|
|
32
|
+
.record(lexiconMappingEntry)
|
|
33
|
+
.chain((input) => {
|
|
34
|
+
for (const key in input) {
|
|
35
|
+
if (!isValidLexiconPattern(key)) {
|
|
36
|
+
return v.err({
|
|
37
|
+
message: `invalid NSID pattern (must be valid NSID or end with .*)`,
|
|
38
|
+
path: [key],
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return v.ok(input);
|
|
43
|
+
});
|
|
27
44
|
const atcuteLexiconsField = v.object({
|
|
28
|
-
mappings:
|
|
45
|
+
mappings: mappingsSchema.optional(),
|
|
29
46
|
});
|
|
30
47
|
/**
|
|
31
48
|
* Schema for package.json with atcute:lexicons field
|
|
32
49
|
*/
|
|
33
|
-
export const packageJsonSchema = v.
|
|
34
|
-
'atcute:lexicons':
|
|
50
|
+
export const packageJsonSchema = v.object({
|
|
51
|
+
'atcute:lexicons': atcuteLexiconsField.optional(),
|
|
35
52
|
});
|
|
36
|
-
/**
|
|
37
|
-
* Validates a package.json object against the schema
|
|
38
|
-
*/
|
|
39
|
-
export const validatePackageJson = (data) => {
|
|
40
|
-
return v.safeParse(packageJsonSchema, data);
|
|
41
|
-
};
|
|
42
53
|
//# sourceMappingURL=lexicon-metadata.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexicon-metadata.js","sourceRoot":"","sources":["../src/lexicon-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"lexicon-metadata.js","sourceRoot":"","sources":["../src/lexicon-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAmBjD;;;;GAIG;AACH,MAAM,qBAAqB,GAAG,CAAC,OAAe,EAAW,EAAE;IAC1D,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,0EAA0E;QAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpC,6DAA6D;QAC7D,OAAO,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,mBAAmB,GAAgC,CAAC,CAAC,MAAM,CAAC;IACjE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,EAAE,CAAC;SACL,MAAM,EAAE;SACR,MAAM,CAAC,CAAC,KAAK,EAA+B,EAAE,CAAC,KAAK,KAAK,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACxF,OAAO,EAAE,qCAAqC;KAC9C,CAAC;CACH,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,cAAc,GAAgD,CAAC;KACnE,MAAM,CAAC,mBAAmB,CAAC;KAC3B,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAChB,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,CAAC,GAAG,CAAC;gBACZ,OAAO,EAAE,0DAA0D;gBACnE,IAAI,EAAE,CAAC,GAAG,CAAC;aACX,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEJ,MAAM,mBAAmB,GAAgC,CAAC,CAAC,MAAM,CAAC;IACjE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAoC,CAAC,CAAC,MAAM,CAAC;IAC1E,iBAAiB,EAAE,mBAAmB,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@atcute/lex-cli",
|
|
4
|
-
"version": "2.3.
|
|
4
|
+
"version": "2.3.1",
|
|
5
5
|
"description": "cli tool to generate type definitions for atcute",
|
|
6
6
|
"license": "0BSD",
|
|
7
7
|
"repository": {
|
|
@@ -26,17 +26,16 @@
|
|
|
26
26
|
"@optique/run": "^0.6.1",
|
|
27
27
|
"picocolors": "^1.1.1",
|
|
28
28
|
"prettier": "^3.6.2",
|
|
29
|
-
"
|
|
30
|
-
"@atcute/lexicon-doc": "^1.1.3"
|
|
29
|
+
"@atcute/lexicon-doc": "^1.1.4"
|
|
31
30
|
},
|
|
32
31
|
"devDependencies": {
|
|
33
32
|
"@types/node": "^22.18.0",
|
|
34
|
-
"
|
|
33
|
+
"tschema": "^3.2.0",
|
|
35
34
|
"@atcute/lexicons": "^1.2.2"
|
|
36
35
|
},
|
|
37
36
|
"scripts": {
|
|
38
37
|
"build": "pnpm run generate:schema && tsc",
|
|
39
|
-
"generate:schema": "node scripts/generate-schema.
|
|
38
|
+
"generate:schema": "node scripts/generate-schema.js",
|
|
40
39
|
"prepublish": "rm -rf dist; pnpm run build"
|
|
41
40
|
}
|
|
42
41
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"$id": "https://unpkg.com/@atcute/lex-cli/schema/lexicon-package.schema.json",
|
|
4
4
|
"title": "package.json with atcute:lexicons",
|
|
5
5
|
"description": "JSON Schema for package.json with atcute:lexicons field for lexicon import mappings",
|
|
6
|
+
"additionalProperties": true,
|
|
6
7
|
"type": "object",
|
|
7
8
|
"properties": {
|
|
8
9
|
"atcute:lexicons": {
|
|
@@ -20,10 +21,11 @@
|
|
|
20
21
|
]
|
|
21
22
|
},
|
|
22
23
|
"path": {
|
|
23
|
-
"
|
|
24
|
-
"
|
|
24
|
+
"pattern": "^\\.$|^\\.\\/",
|
|
25
|
+
"type": "string"
|
|
25
26
|
}
|
|
26
27
|
},
|
|
28
|
+
"additionalProperties": false,
|
|
27
29
|
"required": [
|
|
28
30
|
"type",
|
|
29
31
|
"path"
|
|
@@ -31,8 +33,7 @@
|
|
|
31
33
|
}
|
|
32
34
|
}
|
|
33
35
|
},
|
|
34
|
-
"
|
|
36
|
+
"additionalProperties": false
|
|
35
37
|
}
|
|
36
|
-
}
|
|
37
|
-
"required": []
|
|
38
|
+
}
|
|
38
39
|
}
|
package/src/cli.ts
CHANGED
|
@@ -12,7 +12,7 @@ import { lexiconDoc, type LexiconDoc } from '@atcute/lexicon-doc';
|
|
|
12
12
|
|
|
13
13
|
import { generateLexiconApi, type ImportMapping } from './codegen.js';
|
|
14
14
|
import type { LexiconConfig } from './index.js';
|
|
15
|
-
import {
|
|
15
|
+
import { packageJsonSchema } from './lexicon-metadata.js';
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Resolves package imports to ImportMapping[]
|
|
@@ -56,14 +56,19 @@ const resolveImportsToMappings = async (
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
// Validate package.json
|
|
59
|
-
const result =
|
|
60
|
-
if (!result.
|
|
59
|
+
const result = packageJsonSchema.try(packageJson, { mode: 'passthrough' });
|
|
60
|
+
if (!result.ok) {
|
|
61
61
|
console.error(pc.bold(pc.red(`invalid atcute:lexicons in "${packageName}":`)));
|
|
62
|
-
console.error(result.
|
|
62
|
+
console.error(result.message);
|
|
63
|
+
|
|
64
|
+
for (const issue of result.issues) {
|
|
65
|
+
console.log(`- ${issue.code} at .${issue.path.join('.')}`);
|
|
66
|
+
}
|
|
67
|
+
|
|
63
68
|
process.exit(1);
|
|
64
69
|
}
|
|
65
70
|
|
|
66
|
-
const lexicons = result.
|
|
71
|
+
const lexicons = result.value['atcute:lexicons'];
|
|
67
72
|
if (!lexicons?.mappings) {
|
|
68
73
|
continue;
|
|
69
74
|
}
|
package/src/lexicon-metadata.ts
CHANGED
|
@@ -1,7 +1,24 @@
|
|
|
1
|
-
import * as v from '
|
|
1
|
+
import * as v from '@badrap/valita';
|
|
2
2
|
|
|
3
3
|
import { isNsid } from '@atcute/lexicons/syntax';
|
|
4
4
|
|
|
5
|
+
export type LexiconMappingEntryType = 'namespace' | 'named';
|
|
6
|
+
export type LexiconMappingPath = '.' | `./${string}`;
|
|
7
|
+
|
|
8
|
+
export interface LexiconMappingEntry {
|
|
9
|
+
type: LexiconMappingEntryType;
|
|
10
|
+
path: LexiconMappingPath;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface AtcuteLexiconsField {
|
|
14
|
+
mappings?: Record<string, LexiconMappingEntry>;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface PackageJsonWithLexicons {
|
|
18
|
+
'atcute:lexicons'?: AtcuteLexiconsField;
|
|
19
|
+
[key: string]: unknown;
|
|
20
|
+
}
|
|
21
|
+
|
|
5
22
|
/**
|
|
6
23
|
* Validates if a string is a valid NSID pattern (exact or wildcard)
|
|
7
24
|
* - Exact: "com.atproto.repo.getRecord"
|
|
@@ -20,40 +37,40 @@ const isValidLexiconPattern = (pattern: string): boolean => {
|
|
|
20
37
|
/**
|
|
21
38
|
* Schema for a single lexicon mapping entry
|
|
22
39
|
*/
|
|
23
|
-
const lexiconMappingEntry = v.object({
|
|
24
|
-
type: v.
|
|
25
|
-
path: v
|
|
40
|
+
const lexiconMappingEntry: v.Type<LexiconMappingEntry> = v.object({
|
|
41
|
+
type: v.union(v.literal('namespace'), v.literal('named')),
|
|
42
|
+
path: v
|
|
43
|
+
.string()
|
|
44
|
+
.assert((input): input is LexiconMappingPath => input === '.' || input.startsWith('./'), {
|
|
45
|
+
message: `path must be "." or start with "./"`,
|
|
46
|
+
}),
|
|
26
47
|
});
|
|
27
48
|
|
|
28
49
|
/**
|
|
29
50
|
* Schema for the atcute:lexicons field in package.json
|
|
30
51
|
*/
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
v.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
52
|
+
const mappingsSchema: v.Type<Record<string, LexiconMappingEntry>> = v
|
|
53
|
+
.record(lexiconMappingEntry)
|
|
54
|
+
.chain((input) => {
|
|
55
|
+
for (const key in input) {
|
|
56
|
+
if (!isValidLexiconPattern(key)) {
|
|
57
|
+
return v.err({
|
|
58
|
+
message: `invalid NSID pattern (must be valid NSID or end with .*)`,
|
|
59
|
+
path: [key],
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return v.ok(input);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
const atcuteLexiconsField: v.Type<AtcuteLexiconsField> = v.object({
|
|
68
|
+
mappings: mappingsSchema.optional(),
|
|
41
69
|
});
|
|
42
70
|
|
|
43
71
|
/**
|
|
44
72
|
* Schema for package.json with atcute:lexicons field
|
|
45
73
|
*/
|
|
46
|
-
export const packageJsonSchema = v.
|
|
47
|
-
'atcute:lexicons':
|
|
74
|
+
export const packageJsonSchema: v.Type<PackageJsonWithLexicons> = v.object({
|
|
75
|
+
'atcute:lexicons': atcuteLexiconsField.optional(),
|
|
48
76
|
});
|
|
49
|
-
|
|
50
|
-
export type LexiconMappingEntry = v.InferOutput<typeof lexiconMappingEntry>;
|
|
51
|
-
export type AtcuteLexiconsField = v.InferOutput<typeof atcuteLexiconsField>;
|
|
52
|
-
export type PackageJsonWithLexicons = v.InferOutput<typeof packageJsonSchema>;
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Validates a package.json object against the schema
|
|
56
|
-
*/
|
|
57
|
-
export const validatePackageJson = (data: unknown): v.SafeParseResult<typeof packageJsonSchema> => {
|
|
58
|
-
return v.safeParse(packageJsonSchema, data);
|
|
59
|
-
};
|