@ir-kit/schema 0.2.0 → 0.3.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/README.md +1 -1
- package/dist/enum.d.ts +9 -9
- package/dist/enum.d.ts.map +1 -1
- package/dist/enum.js +27 -26
- package/dist/enum.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -52,4 +52,4 @@ Subset of JSON Schema 2020-12. Omitted (codegen can't bind cleanly): `$dynamicRe
|
|
|
52
52
|
|
|
53
53
|
## Repo
|
|
54
54
|
|
|
55
|
-
Source at [
|
|
55
|
+
Source at [ahmedrowaihi/ir-kit](https://github.com/ahmedrowaihi/ir-kit/tree/main/packages/shared/schema).
|
package/dist/enum.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Schema } from "./types.js";
|
|
2
2
|
export type EnumLiteral = string | number | boolean;
|
|
3
|
-
export type EnumKind = "string" | "integer";
|
|
3
|
+
export type EnumKind = "string" | "integer" | "number" | "boolean" | "mixed";
|
|
4
4
|
/**
|
|
5
5
|
* Extract enum literals from a schema. Recognises both explicit
|
|
6
6
|
* `enum: [...]` and `oneOf`/`anyOf` of `{const}` branches. Returns
|
|
@@ -8,19 +8,19 @@ export type EnumKind = "string" | "integer";
|
|
|
8
8
|
*/
|
|
9
9
|
export declare function extractEnumValues(schema: Schema): ReadonlyArray<unknown> | undefined;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* The value domain of an enum's literals. `string` / `integer` become
|
|
12
|
+
* real enums; `number` / `boolean` degrade to the matching primitive;
|
|
13
|
+
* `mixed` (or empty) becomes the target's untyped fallback.
|
|
13
14
|
*/
|
|
14
|
-
export declare function classifyEnumLiterals(values: ReadonlyArray<unknown
|
|
15
|
+
export declare function classifyEnumLiterals(values: ReadonlyArray<unknown>): EnumKind;
|
|
15
16
|
export interface EnumEntryIdent<T extends string | number> {
|
|
16
17
|
identifier: string;
|
|
17
18
|
raw: T;
|
|
18
19
|
}
|
|
19
20
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* name`; tests pin the exact phrase.
|
|
21
|
+
* Assign every distinct raw value its own identifier. Duplicate raws
|
|
22
|
+
* collapse to one entry; raws whose identifiers clash (`"ASC"` / `"asc"`)
|
|
23
|
+
* get deterministic suffixes from `disambiguate`.
|
|
24
24
|
*/
|
|
25
|
-
export declare function
|
|
25
|
+
export declare function uniqueEnumEntries<T extends string | number>(raws: ReadonlyArray<T>, identifier: (raw: T) => string, disambiguate?: (base: string, n: number) => string): EnumEntryIdent<T>[];
|
|
26
26
|
//# sourceMappingURL=enum.d.ts.map
|
package/dist/enum.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../src/enum.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../src/enum.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACpD,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAE7E;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,GACb,aAAa,CAAC,OAAO,CAAC,GAAG,SAAS,CAWpC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,QAAQ,CAQ7E;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,CAAC,CAAC;CACR;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EACzD,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EACtB,UAAU,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,EAC9B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,GACjD,cAAc,CAAC,CAAC,CAAC,EAAE,CAUrB"}
|
package/dist/enum.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Namespace } from "@ir-kit/codegen-core";
|
|
1
2
|
import { isSchemaObject } from "./types.js";
|
|
2
3
|
/**
|
|
3
4
|
* Extract enum literals from a schema. Recognises both explicit
|
|
@@ -22,37 +23,37 @@ export function extractEnumValues(schema) {
|
|
|
22
23
|
return consts.length > 0 ? consts : undefined;
|
|
23
24
|
}
|
|
24
25
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
26
|
+
* The value domain of an enum's literals. `string` / `integer` become
|
|
27
|
+
* real enums; `number` / `boolean` degrade to the matching primitive;
|
|
28
|
+
* `mixed` (or empty) becomes the target's untyped fallback.
|
|
27
29
|
*/
|
|
28
|
-
export function classifyEnumLiterals(values
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
if (
|
|
32
|
-
|
|
30
|
+
export function classifyEnumLiterals(values) {
|
|
31
|
+
if (values.length === 0)
|
|
32
|
+
return "mixed";
|
|
33
|
+
if (values.every((v) => typeof v === "string"))
|
|
34
|
+
return "string";
|
|
35
|
+
if (values.every((v) => typeof v === "boolean"))
|
|
36
|
+
return "boolean";
|
|
37
|
+
if (values.every((v) => typeof v === "number")) {
|
|
38
|
+
return values.every((v) => Number.isInteger(v)) ? "integer" : "number";
|
|
33
39
|
}
|
|
34
|
-
return
|
|
40
|
+
return "mixed";
|
|
35
41
|
}
|
|
36
42
|
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* name`; tests pin the exact phrase.
|
|
43
|
+
* Assign every distinct raw value its own identifier. Duplicate raws
|
|
44
|
+
* collapse to one entry; raws whose identifiers clash (`"ASC"` / `"asc"`)
|
|
45
|
+
* get deterministic suffixes from `disambiguate`.
|
|
41
46
|
*/
|
|
42
|
-
export function
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const formatted = raws
|
|
52
|
-
.map((r) => (typeof r === "string" ? `"${r}"` : String(r)))
|
|
53
|
-
.join(", ");
|
|
54
|
-
throw new Error(`Enum ${schemaName}: ${noun} "${identifier}" collides for raw values [${formatted}]`);
|
|
55
|
-
}
|
|
47
|
+
export function uniqueEnumEntries(raws, identifier, disambiguate) {
|
|
48
|
+
const ns = new Namespace({ normalize: (s) => s, disambiguate });
|
|
49
|
+
const seen = new Set();
|
|
50
|
+
const out = [];
|
|
51
|
+
for (const raw of raws) {
|
|
52
|
+
if (seen.has(raw))
|
|
53
|
+
continue;
|
|
54
|
+
seen.add(raw);
|
|
55
|
+
out.push({ raw, identifier: ns.claim(String(raw), identifier(raw)) });
|
|
56
56
|
}
|
|
57
|
+
return out;
|
|
57
58
|
}
|
|
58
59
|
//# sourceMappingURL=enum.js.map
|
package/dist/enum.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enum.js","sourceRoot":"","sources":["../src/enum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAe,MAAM,YAAY,CAAC;AAKzD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAc;IAEd,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IAC7E,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;IAC9C,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;;YAC/C,OAAO,SAAS,CAAC;IACxB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"enum.js","sourceRoot":"","sources":["../src/enum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAe,MAAM,YAAY,CAAC;AAKzD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAc;IAEd,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IAC7E,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;IAC9C,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACzC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;;YAC/C,OAAO,SAAS,CAAC;IACxB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA8B;IACjE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACxC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAChE,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAClE,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;QAC/C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IACzE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAOD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAsB,EACtB,UAA8B,EAC9B,YAAkD;IAElD,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC;IAChE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAK,CAAC;IAC1B,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { classifyEnumLiterals, type EnumEntryIdent, type EnumKind, type EnumLiteral, extractEnumValues, uniqueEnumEntries, } from "./enum.js";
|
|
2
2
|
export { classifyObject, iterateObjectProperties, type ObjectProperty, type ObjectShape, } from "./object.js";
|
|
3
3
|
export { isPrimitive, isPrimitiveTag, primitiveTag, } from "./primitive.js";
|
|
4
4
|
export { refName } from "./ref.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,KAAK,cAAc,EACnB,KAAK,WAAW,GACjB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,cAAc,EACd,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EACL,UAAU,EACV,SAAS,EACT,cAAc,EACd,KAAK,MAAM,EACX,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,QAAQ,GACT,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,KAAK,UAAU,GAChB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { classifyEnumLiterals, extractEnumValues, uniqueEnumEntries, } from "./enum.js";
|
|
2
2
|
export { classifyObject, iterateObjectProperties, } from "./object.js";
|
|
3
3
|
export { isPrimitive, isPrimitiveTag, primitiveTag, } from "./primitive.js";
|
|
4
4
|
export { refName } from "./ref.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAIpB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,cAAc,EACd,uBAAuB,GAGxB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,cAAc,EACd,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EACL,UAAU,EACV,SAAS,EACT,cAAc,EAKd,QAAQ,GACT,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,aAAa,EACb,YAAY,GAEb,MAAM,YAAY,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ir-kit/schema",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Canonical JSON Schema 2020-12 IR shared across OpenAPI and AsyncAPI codegen families. Source-agnostic schema model + adapters from hey-api's IR.SchemaObject and @asyncapi/parser schemas.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"json-schema",
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
"openapi",
|
|
11
11
|
"asyncapi"
|
|
12
12
|
],
|
|
13
|
-
"homepage": "https://github.com/
|
|
13
|
+
"homepage": "https://github.com/ahmedrowaihi/ir-kit/tree/main/packages/shared/schema",
|
|
14
14
|
"bugs": {
|
|
15
|
-
"url": "https://github.com/
|
|
15
|
+
"url": "https://github.com/ahmedrowaihi/ir-kit/issues"
|
|
16
16
|
},
|
|
17
17
|
"license": "MIT",
|
|
18
18
|
"author": {
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
},
|
|
22
22
|
"repository": {
|
|
23
23
|
"type": "git",
|
|
24
|
-
"url": "git+https://github.com/
|
|
24
|
+
"url": "git+https://github.com/ahmedrowaihi/ir-kit.git",
|
|
25
25
|
"directory": "packages/shared/schema"
|
|
26
26
|
},
|
|
27
27
|
"type": "module",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
64
|
"json-schema-typed": "^8.0.2",
|
|
65
|
-
"@ir-kit/codegen-core": "0.
|
|
65
|
+
"@ir-kit/codegen-core": "0.2.0"
|
|
66
66
|
},
|
|
67
67
|
"devDependencies": {
|
|
68
68
|
"@hey-api/shared": "^0.4.2",
|