ts-procedures 10.1.1 → 10.1.2
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/CHANGELOG.md +26 -0
- package/build/schema/compute-schema.js +5 -1
- package/build/schema/compute-schema.js.map +1 -1
- package/build/schema/compute-schema.test.js +13 -0
- package/build/schema/compute-schema.test.js.map +1 -1
- package/build/schema/strip-internal-keywords.d.ts +18 -0
- package/build/schema/strip-internal-keywords.js +33 -0
- package/build/schema/strip-internal-keywords.js.map +1 -0
- package/build/schema/strip-internal-keywords.test.d.ts +1 -0
- package/build/schema/strip-internal-keywords.test.js +38 -0
- package/build/schema/strip-internal-keywords.test.js.map +1 -0
- package/package.json +1 -1
- package/src/schema/compute-schema.test.ts +16 -0
- package/src/schema/compute-schema.ts +5 -1
- package/src/schema/strip-internal-keywords.test.ts +43 -0
- package/src/schema/strip-internal-keywords.ts +36 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,32 @@ All notable changes to **ts-procedures** are documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## 10.1.2 — 2026-06-24
|
|
8
|
+
|
|
9
|
+
Fixes a registration crash and output leak when TypeBox internal markers escape
|
|
10
|
+
as enumerable properties. Complements the detection fix in 10.1.1.
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **`Type.Optional(Type.Unsafe({...}))` no longer crashes registration or leaks
|
|
15
|
+
markers.** Most TypeBox `~`-prefixed markers are non-enumerable and stay out of
|
|
16
|
+
the JSON Schema, but some compositions — notably `Type.Optional` wrapping
|
|
17
|
+
`Type.Unsafe` — emit `~unsafe`/`~optional` as **enumerable** own properties.
|
|
18
|
+
Those then (a) made strict AJV throw `unknown keyword: "~unsafe"` at
|
|
19
|
+
registration and (b) leaked into serialized DocEnvelope/codegen output. JSON
|
|
20
|
+
Schema extracted from any channel is now deep-stripped of `~`-prefixed keys
|
|
21
|
+
(`stripInternalKeywords`) at the single extraction chokepoint, so both runtime
|
|
22
|
+
validation and emitted docs/codegen are clean. Stripping by the `~`-prefix
|
|
23
|
+
convention (not a fixed name list) stays robust against future markers.
|
|
24
|
+
|
|
25
|
+
### Notes
|
|
26
|
+
|
|
27
|
+
- AJV stays strict (no `strictSchema: false`) — stripping cleans the output too
|
|
28
|
+
and keeps AJV's unknown-keyword safety net for genuine schema typos.
|
|
29
|
+
- 10.1.1 fixed *recognition* of a bare top-level `Type.Unsafe(...)`; this release
|
|
30
|
+
fixes the distinct *enumerable-marker leak* in nested compositions. Schemas
|
|
31
|
+
built only from `Type.Object`/primitives were never affected by either.
|
|
32
|
+
|
|
7
33
|
## 10.1.1 — 2026-06-24
|
|
8
34
|
|
|
9
35
|
Fixes TypeBox schema detection for `Type.Unsafe(...)` on typebox ≥ 1.2.0. No
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ProcedureRegistrationError } from '../core/errors.js';
|
|
2
2
|
import { extractJsonSchema } from './adapter.js';
|
|
3
|
+
import { stripInternalKeywords } from './strip-internal-keywords.js';
|
|
3
4
|
function fail(ctx, channel, detail) {
|
|
4
5
|
throw new ProcedureRegistrationError(ctx.name, `Error parsing schema for ${ctx.name} - ${channel}: ${detail}`, ctx.definitionInfo);
|
|
5
6
|
}
|
|
@@ -20,7 +21,10 @@ function extractChannel(ctx, channel, raw) {
|
|
|
20
21
|
const known = ctx.adapters.map((a) => a.name).join(', ');
|
|
21
22
|
fail(ctx, channel, `Error extracting json schema ${channel} - it might be empty or not recognized by any schema adapter (registered: ${known})`);
|
|
22
23
|
}
|
|
23
|
-
|
|
24
|
+
// Strip TypeBox internal markers (`~unsafe`/`~optional`/…) that some
|
|
25
|
+
// compositions leak as enumerable properties — they break strict AJV and
|
|
26
|
+
// pollute serialized docs/codegen. See strip-internal-keywords.ts.
|
|
27
|
+
return stripInternalKeywords(extracted);
|
|
24
28
|
}
|
|
25
29
|
/** Extracts and compiles one validated channel. */
|
|
26
30
|
function compileChannel(ctx, channel, raw) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compute-schema.js","sourceRoot":"","sources":["../../src/schema/compute-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAA;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"compute-schema.js","sourceRoot":"","sources":["../../src/schema/compute-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -182,6 +182,19 @@ describe('computeSchema', () => {
|
|
|
182
182
|
it('throws a meaningful error naming the failing req channel', () => {
|
|
183
183
|
expect(() => computeSchema('test-procedure', { req: { query: { not: 'a schema' } } }, options)).toThrow(/Error extracting json schema schema\.req\.query/);
|
|
184
184
|
});
|
|
185
|
+
it('handles Type.Optional(Type.Unsafe(...)) without leaking ~markers into strict AJV or output', () => {
|
|
186
|
+
// typebox >= 1.2.0: this composition emits `~unsafe`/`~optional` as
|
|
187
|
+
// enumerable props, which crashed strict AJV and polluted the JSON Schema.
|
|
188
|
+
const schema = {
|
|
189
|
+
params: Type.Object({ x: Type.Optional(Type.Unsafe({ type: 'string' })) }),
|
|
190
|
+
};
|
|
191
|
+
const result = computeSchema('test-procedure', schema, options);
|
|
192
|
+
// No registration crash, and the stored JSON Schema is clean.
|
|
193
|
+
expect(JSON.stringify(result.jsonSchema.params)).not.toMatch(/~/);
|
|
194
|
+
expect(result.jsonSchema.params.properties.x).toEqual({ type: 'string' });
|
|
195
|
+
// Validator works against the cleaned schema.
|
|
196
|
+
expect(result.validations.params({ x: 'hello' })).toEqual({});
|
|
197
|
+
});
|
|
185
198
|
it('throws a compile error when the schema is recognized but invalid JSON Schema', () => {
|
|
186
199
|
// Looks like a TypeBox schema (has ~kind) but AJV rejects it at compile time
|
|
187
200
|
const recognizedButInvalid = { '~kind': 'Object', type: 'not-a-real-type' };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compute-schema.test.js","sourceRoot":"","sources":["../../src/schema/compute-schema.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"compute-schema.test.js","sourceRoot":"","sources":["../../src/schema/compute-schema.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { TJSONSchema } from './json-schema.js';
|
|
2
|
+
/**
|
|
3
|
+
* Deep-removes TypeBox v1 internal markers (`~kind`, `~unsafe`, `~optional`, …)
|
|
4
|
+
* from an extracted JSON Schema, returning a fresh structure (never mutates the
|
|
5
|
+
* input).
|
|
6
|
+
*
|
|
7
|
+
* These markers are *usually* non-enumerable, so they stay out of JSON Schema on
|
|
8
|
+
* their own. But some compositions leak them as **enumerable** own properties —
|
|
9
|
+
* notably `Type.Optional(Type.Unsafe({...}))`, which emits `~unsafe`/`~optional`
|
|
10
|
+
* inline. Left in place those markers (a) pollute serialized docs/codegen output
|
|
11
|
+
* and (b) make strict AJV throw `unknown keyword: "~unsafe"` at registration.
|
|
12
|
+
*
|
|
13
|
+
* Stripping by the `~`-prefix convention (rather than a fixed name list) keeps
|
|
14
|
+
* this robust against future TypeBox markers — same convention the TypeBox
|
|
15
|
+
* adapter detects on.
|
|
16
|
+
*/
|
|
17
|
+
export declare function stripInternalKeywords<T>(schema: T): T;
|
|
18
|
+
export type { TJSONSchema };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** TypeBox v1 prefixes every internal marker key with `~`. */
|
|
2
|
+
const TILDE = '~';
|
|
3
|
+
/**
|
|
4
|
+
* Deep-removes TypeBox v1 internal markers (`~kind`, `~unsafe`, `~optional`, …)
|
|
5
|
+
* from an extracted JSON Schema, returning a fresh structure (never mutates the
|
|
6
|
+
* input).
|
|
7
|
+
*
|
|
8
|
+
* These markers are *usually* non-enumerable, so they stay out of JSON Schema on
|
|
9
|
+
* their own. But some compositions leak them as **enumerable** own properties —
|
|
10
|
+
* notably `Type.Optional(Type.Unsafe({...}))`, which emits `~unsafe`/`~optional`
|
|
11
|
+
* inline. Left in place those markers (a) pollute serialized docs/codegen output
|
|
12
|
+
* and (b) make strict AJV throw `unknown keyword: "~unsafe"` at registration.
|
|
13
|
+
*
|
|
14
|
+
* Stripping by the `~`-prefix convention (rather than a fixed name list) keeps
|
|
15
|
+
* this robust against future TypeBox markers — same convention the TypeBox
|
|
16
|
+
* adapter detects on.
|
|
17
|
+
*/
|
|
18
|
+
export function stripInternalKeywords(schema) {
|
|
19
|
+
if (Array.isArray(schema)) {
|
|
20
|
+
return schema.map((item) => stripInternalKeywords(item));
|
|
21
|
+
}
|
|
22
|
+
if (schema !== null && typeof schema === 'object') {
|
|
23
|
+
const out = {};
|
|
24
|
+
for (const [key, value] of Object.entries(schema)) {
|
|
25
|
+
if (key.startsWith(TILDE))
|
|
26
|
+
continue;
|
|
27
|
+
out[key] = stripInternalKeywords(value);
|
|
28
|
+
}
|
|
29
|
+
return out;
|
|
30
|
+
}
|
|
31
|
+
return schema;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=strip-internal-keywords.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strip-internal-keywords.js","sourceRoot":"","sources":["../../src/schema/strip-internal-keywords.ts"],"names":[],"mappings":"AAEA,8DAA8D;AAC9D,MAAM,KAAK,GAAG,GAAG,CAAA;AAEjB;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,qBAAqB,CAAI,MAAS;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAM,CAAA;IAC/D,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAClD,MAAM,GAAG,GAA4B,EAAE,CAAA;QACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAClD,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;gBAAE,SAAQ;YACnC,GAAG,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAA;QACzC,CAAC;QACD,OAAO,GAAQ,CAAA;IACjB,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { describe, expect, test } from 'vitest';
|
|
2
|
+
import { Type } from 'typebox';
|
|
3
|
+
import { stripInternalKeywords } from './strip-internal-keywords.js';
|
|
4
|
+
describe('stripInternalKeywords', () => {
|
|
5
|
+
test('removes enumerable ~-prefixed markers leaked by Type.Optional(Type.Unsafe(...))', () => {
|
|
6
|
+
// This composition emits `~unsafe`/`~optional` as ENUMERABLE own props.
|
|
7
|
+
const leaky = Type.Optional(Type.Unsafe({ type: 'string' }));
|
|
8
|
+
expect(Object.keys(leaky).some((k) => k.startsWith('~'))).toBe(true);
|
|
9
|
+
const clean = stripInternalKeywords(leaky);
|
|
10
|
+
expect(clean).toEqual({ type: 'string' });
|
|
11
|
+
expect(Object.keys(clean).some((k) => k.startsWith('~'))).toBe(false);
|
|
12
|
+
});
|
|
13
|
+
test('strips markers nested inside object properties', () => {
|
|
14
|
+
const schema = Type.Object({ x: Type.Optional(Type.Unsafe({ type: 'string' })) });
|
|
15
|
+
const clean = stripInternalKeywords(schema);
|
|
16
|
+
expect(JSON.stringify(clean)).not.toMatch(/~/);
|
|
17
|
+
expect(clean.properties.x).toEqual({ type: 'string' });
|
|
18
|
+
});
|
|
19
|
+
test('strips markers inside arrays (e.g. anyOf members)', () => {
|
|
20
|
+
const schema = {
|
|
21
|
+
anyOf: [Type.Unsafe({ type: 'string' }), { type: 'number', '~optional': true }],
|
|
22
|
+
};
|
|
23
|
+
const clean = stripInternalKeywords(schema);
|
|
24
|
+
expect(clean.anyOf).toEqual([{ type: 'string' }, { type: 'number' }]);
|
|
25
|
+
});
|
|
26
|
+
test('leaves a clean schema structurally equal and does not mutate the input', () => {
|
|
27
|
+
const input = { type: 'object', properties: { a: { type: 'string' } } };
|
|
28
|
+
const clean = stripInternalKeywords(input);
|
|
29
|
+
expect(clean).toEqual(input);
|
|
30
|
+
expect(clean).not.toBe(input); // fresh structure
|
|
31
|
+
});
|
|
32
|
+
test('passes primitives through unchanged', () => {
|
|
33
|
+
expect(stripInternalKeywords('x')).toBe('x');
|
|
34
|
+
expect(stripInternalKeywords(5)).toBe(5);
|
|
35
|
+
expect(stripInternalKeywords(null)).toBe(null);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=strip-internal-keywords.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strip-internal-keywords.test.js","sourceRoot":"","sources":["../../src/schema/strip-internal-keywords.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ts-procedures",
|
|
3
|
-
"version": "10.1.
|
|
3
|
+
"version": "10.1.2",
|
|
4
4
|
"description": "A TypeScript RPC framework that creates type-safe, schema-validated procedure calls with a single function definition. Define your procedures once and get full type inference, runtime validation, and framework integration hooks.",
|
|
5
5
|
"main": "build/exports.js",
|
|
6
6
|
"types": "build/exports.d.ts",
|
|
@@ -245,6 +245,22 @@ describe('computeSchema', () => {
|
|
|
245
245
|
).toThrow(/Error extracting json schema schema\.req\.query/)
|
|
246
246
|
})
|
|
247
247
|
|
|
248
|
+
it('handles Type.Optional(Type.Unsafe(...)) without leaking ~markers into strict AJV or output', () => {
|
|
249
|
+
// typebox >= 1.2.0: this composition emits `~unsafe`/`~optional` as
|
|
250
|
+
// enumerable props, which crashed strict AJV and polluted the JSON Schema.
|
|
251
|
+
const schema = {
|
|
252
|
+
params: Type.Object({ x: Type.Optional(Type.Unsafe({ type: 'string' })) }),
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
const result = computeSchema('test-procedure', schema, options)
|
|
256
|
+
|
|
257
|
+
// No registration crash, and the stored JSON Schema is clean.
|
|
258
|
+
expect(JSON.stringify(result.jsonSchema.params)).not.toMatch(/~/)
|
|
259
|
+
expect((result.jsonSchema.params as any).properties.x).toEqual({ type: 'string' })
|
|
260
|
+
// Validator works against the cleaned schema.
|
|
261
|
+
expect(result.validations.params!({ x: 'hello' })).toEqual({})
|
|
262
|
+
})
|
|
263
|
+
|
|
248
264
|
it('throws a compile error when the schema is recognized but invalid JSON Schema', () => {
|
|
249
265
|
// Looks like a TypeBox schema (has ~kind) but AJV rejects it at compile time
|
|
250
266
|
const recognizedButInvalid = { '~kind': 'Object', type: 'not-a-real-type' }
|
|
@@ -2,6 +2,7 @@ import { ProcedureRegistrationError } from '../core/errors.js'
|
|
|
2
2
|
import type { DefinitionInfo } from '../core/definition-site.js'
|
|
3
3
|
import { extractJsonSchema } from './adapter.js'
|
|
4
4
|
import type { SchemaAdapter } from './adapter.js'
|
|
5
|
+
import { stripInternalKeywords } from './strip-internal-keywords.js'
|
|
5
6
|
import type { TJSONSchema } from './json-schema.js'
|
|
6
7
|
import type { TSchemaValidationError, Validate, ValidatorCompiler } from './compile.js'
|
|
7
8
|
|
|
@@ -67,7 +68,10 @@ function extractChannel(ctx: ComputeContext, channel: string, raw: unknown): TJS
|
|
|
67
68
|
`Error extracting json schema ${channel} - it might be empty or not recognized by any schema adapter (registered: ${known})`,
|
|
68
69
|
)
|
|
69
70
|
}
|
|
70
|
-
|
|
71
|
+
// Strip TypeBox internal markers (`~unsafe`/`~optional`/…) that some
|
|
72
|
+
// compositions leak as enumerable properties — they break strict AJV and
|
|
73
|
+
// pollute serialized docs/codegen. See strip-internal-keywords.ts.
|
|
74
|
+
return stripInternalKeywords(extracted)
|
|
71
75
|
}
|
|
72
76
|
|
|
73
77
|
/** Extracts and compiles one validated channel. */
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { describe, expect, test } from 'vitest'
|
|
2
|
+
import { Type } from 'typebox'
|
|
3
|
+
import { stripInternalKeywords } from './strip-internal-keywords.js'
|
|
4
|
+
|
|
5
|
+
describe('stripInternalKeywords', () => {
|
|
6
|
+
test('removes enumerable ~-prefixed markers leaked by Type.Optional(Type.Unsafe(...))', () => {
|
|
7
|
+
// This composition emits `~unsafe`/`~optional` as ENUMERABLE own props.
|
|
8
|
+
const leaky = Type.Optional(Type.Unsafe({ type: 'string' })) as unknown as Record<string, unknown>
|
|
9
|
+
expect(Object.keys(leaky).some((k) => k.startsWith('~'))).toBe(true)
|
|
10
|
+
|
|
11
|
+
const clean = stripInternalKeywords(leaky)
|
|
12
|
+
expect(clean).toEqual({ type: 'string' })
|
|
13
|
+
expect(Object.keys(clean as object).some((k) => k.startsWith('~'))).toBe(false)
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
test('strips markers nested inside object properties', () => {
|
|
17
|
+
const schema = Type.Object({ x: Type.Optional(Type.Unsafe({ type: 'string' })) })
|
|
18
|
+
const clean = stripInternalKeywords(schema) as any
|
|
19
|
+
expect(JSON.stringify(clean)).not.toMatch(/~/)
|
|
20
|
+
expect(clean.properties.x).toEqual({ type: 'string' })
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
test('strips markers inside arrays (e.g. anyOf members)', () => {
|
|
24
|
+
const schema = {
|
|
25
|
+
anyOf: [Type.Unsafe({ type: 'string' }), { type: 'number', '~optional': true }],
|
|
26
|
+
}
|
|
27
|
+
const clean = stripInternalKeywords(schema) as any
|
|
28
|
+
expect(clean.anyOf).toEqual([{ type: 'string' }, { type: 'number' }])
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
test('leaves a clean schema structurally equal and does not mutate the input', () => {
|
|
32
|
+
const input = { type: 'object', properties: { a: { type: 'string' } } }
|
|
33
|
+
const clean = stripInternalKeywords(input)
|
|
34
|
+
expect(clean).toEqual(input)
|
|
35
|
+
expect(clean).not.toBe(input) // fresh structure
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
test('passes primitives through unchanged', () => {
|
|
39
|
+
expect(stripInternalKeywords('x')).toBe('x')
|
|
40
|
+
expect(stripInternalKeywords(5)).toBe(5)
|
|
41
|
+
expect(stripInternalKeywords(null)).toBe(null)
|
|
42
|
+
})
|
|
43
|
+
})
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { TJSONSchema } from './json-schema.js'
|
|
2
|
+
|
|
3
|
+
/** TypeBox v1 prefixes every internal marker key with `~`. */
|
|
4
|
+
const TILDE = '~'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Deep-removes TypeBox v1 internal markers (`~kind`, `~unsafe`, `~optional`, …)
|
|
8
|
+
* from an extracted JSON Schema, returning a fresh structure (never mutates the
|
|
9
|
+
* input).
|
|
10
|
+
*
|
|
11
|
+
* These markers are *usually* non-enumerable, so they stay out of JSON Schema on
|
|
12
|
+
* their own. But some compositions leak them as **enumerable** own properties —
|
|
13
|
+
* notably `Type.Optional(Type.Unsafe({...}))`, which emits `~unsafe`/`~optional`
|
|
14
|
+
* inline. Left in place those markers (a) pollute serialized docs/codegen output
|
|
15
|
+
* and (b) make strict AJV throw `unknown keyword: "~unsafe"` at registration.
|
|
16
|
+
*
|
|
17
|
+
* Stripping by the `~`-prefix convention (rather than a fixed name list) keeps
|
|
18
|
+
* this robust against future TypeBox markers — same convention the TypeBox
|
|
19
|
+
* adapter detects on.
|
|
20
|
+
*/
|
|
21
|
+
export function stripInternalKeywords<T>(schema: T): T {
|
|
22
|
+
if (Array.isArray(schema)) {
|
|
23
|
+
return schema.map((item) => stripInternalKeywords(item)) as T
|
|
24
|
+
}
|
|
25
|
+
if (schema !== null && typeof schema === 'object') {
|
|
26
|
+
const out: Record<string, unknown> = {}
|
|
27
|
+
for (const [key, value] of Object.entries(schema)) {
|
|
28
|
+
if (key.startsWith(TILDE)) continue
|
|
29
|
+
out[key] = stripInternalKeywords(value)
|
|
30
|
+
}
|
|
31
|
+
return out as T
|
|
32
|
+
}
|
|
33
|
+
return schema
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export type { TJSONSchema }
|