openai 7.15.0 → 7.17.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/CHANGELOG.md +62 -0
- package/README.md +6 -0
- package/_vendor/zod-to-json-schema/Options.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/Options.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/Options.js +2 -0
- package/_vendor/zod-to-json-schema/Options.js.map +1 -1
- package/_vendor/zod-to-json-schema/Options.mjs +2 -0
- package/_vendor/zod-to-json-schema/Options.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parseDef.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parseDef.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parseDef.js +1 -0
- package/_vendor/zod-to-json-schema/parseDef.js.map +1 -1
- package/_vendor/zod-to-json-schema/parseDef.mjs +1 -0
- package/_vendor/zod-to-json-schema/parseDef.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/bigint.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/bigint.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/bigint.js +2 -0
- package/_vendor/zod-to-json-schema/parsers/bigint.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/bigint.mjs +2 -0
- package/_vendor/zod-to-json-schema/parsers/bigint.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/literal.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/literal.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/literal.js +1 -0
- package/_vendor/zod-to-json-schema/parsers/literal.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/literal.mjs +1 -0
- package/_vendor/zod-to-json-schema/parsers/literal.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/null.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/null.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/null.js +1 -0
- package/_vendor/zod-to-json-schema/parsers/null.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/null.mjs +1 -0
- package/_vendor/zod-to-json-schema/parsers/null.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/nullable.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/nullable.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/nullable.js +4 -0
- package/_vendor/zod-to-json-schema/parsers/nullable.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/nullable.mjs +4 -0
- package/_vendor/zod-to-json-schema/parsers/nullable.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/number.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/number.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/number.js +2 -0
- package/_vendor/zod-to-json-schema/parsers/number.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/number.mjs +2 -0
- package/_vendor/zod-to-json-schema/parsers/number.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/optional.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/optional.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/optional.js +6 -7
- package/_vendor/zod-to-json-schema/parsers/optional.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/optional.mjs +6 -7
- package/_vendor/zod-to-json-schema/parsers/optional.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/record.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/record.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/record.js +2 -0
- package/_vendor/zod-to-json-schema/parsers/record.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/record.mjs +2 -0
- package/_vendor/zod-to-json-schema/parsers/record.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/string.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/string.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/string.js +1 -0
- package/_vendor/zod-to-json-schema/parsers/string.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/string.mjs +1 -0
- package/_vendor/zod-to-json-schema/parsers/string.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/union.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/union.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/union.js +3 -0
- package/_vendor/zod-to-json-schema/parsers/union.js.map +1 -1
- package/_vendor/zod-to-json-schema/parsers/union.mjs +3 -0
- package/_vendor/zod-to-json-schema/parsers/union.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/util.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/util.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/util.js +1 -0
- package/_vendor/zod-to-json-schema/util.js.map +1 -1
- package/_vendor/zod-to-json-schema/util.mjs +1 -0
- package/_vendor/zod-to-json-schema/util.mjs.map +1 -1
- package/_vendor/zod-to-json-schema/zodToJsonSchema.d.mts.map +1 -1
- package/_vendor/zod-to-json-schema/zodToJsonSchema.d.ts.map +1 -1
- package/_vendor/zod-to-json-schema/zodToJsonSchema.js +2 -0
- package/_vendor/zod-to-json-schema/zodToJsonSchema.js.map +1 -1
- package/_vendor/zod-to-json-schema/zodToJsonSchema.mjs +2 -0
- package/_vendor/zod-to-json-schema/zodToJsonSchema.mjs.map +1 -1
- package/auth/subject-token-providers.d.mts.map +1 -1
- package/auth/subject-token-providers.d.ts.map +1 -1
- package/auth/subject-token-providers.js +6 -1
- package/auth/subject-token-providers.js.map +1 -1
- package/auth/subject-token-providers.mjs +6 -1
- package/auth/subject-token-providers.mjs.map +1 -1
- package/auth/workload-identity-auth.d.mts.map +1 -1
- package/auth/workload-identity-auth.d.ts.map +1 -1
- package/auth/workload-identity-auth.js +9 -0
- package/auth/workload-identity-auth.js.map +1 -1
- package/auth/workload-identity-auth.mjs +9 -0
- package/auth/workload-identity-auth.mjs.map +1 -1
- package/auth/x509-transport.d.mts.map +1 -1
- package/auth/x509-transport.d.ts.map +1 -1
- package/auth/x509-transport.js +11 -0
- package/auth/x509-transport.js.map +1 -1
- package/auth/x509-transport.mjs +11 -0
- package/auth/x509-transport.mjs.map +1 -1
- package/azure.d.mts.map +1 -1
- package/azure.d.ts.map +1 -1
- package/azure.js +3 -0
- package/azure.js.map +1 -1
- package/azure.mjs +3 -0
- package/azure.mjs.map +1 -1
- package/bedrock.d.mts.map +1 -1
- package/bedrock.d.ts.map +1 -1
- package/bedrock.js +14 -6
- package/bedrock.js.map +1 -1
- package/bedrock.mjs +14 -6
- package/bedrock.mjs.map +1 -1
- package/beta/realtime/internal-base.d.mts.map +1 -1
- package/beta/realtime/internal-base.d.ts.map +1 -1
- package/beta/realtime/internal-base.js +1 -0
- package/beta/realtime/internal-base.js.map +1 -1
- package/beta/realtime/internal-base.mjs +1 -0
- package/beta/realtime/internal-base.mjs.map +1 -1
- package/beta/realtime/websocket.d.mts.map +1 -1
- package/beta/realtime/websocket.d.ts.map +1 -1
- package/beta/realtime/websocket.js +9 -1
- package/beta/realtime/websocket.js.map +1 -1
- package/beta/realtime/websocket.mjs +9 -1
- package/beta/realtime/websocket.mjs.map +1 -1
- package/beta/realtime/ws.d.mts.map +1 -1
- package/beta/realtime/ws.d.ts.map +1 -1
- package/beta/realtime/ws.js +3 -0
- package/beta/realtime/ws.js.map +1 -1
- package/beta/realtime/ws.mjs +3 -0
- package/beta/realtime/ws.mjs.map +1 -1
- package/client.d.mts +14 -3
- package/client.d.mts.map +1 -1
- package/client.d.ts +14 -3
- package/client.d.ts.map +1 -1
- package/client.js +64 -26
- package/client.js.map +1 -1
- package/client.mjs +64 -26
- package/client.mjs.map +1 -1
- package/core/EventEmitter.d.mts.map +1 -1
- package/core/EventEmitter.d.ts.map +1 -1
- package/core/EventEmitter.js +15 -0
- package/core/EventEmitter.js.map +1 -1
- package/core/EventEmitter.mjs +15 -0
- package/core/EventEmitter.mjs.map +1 -1
- package/core/streaming.d.mts +1 -0
- package/core/streaming.d.mts.map +1 -1
- package/core/streaming.d.ts +1 -0
- package/core/streaming.d.ts.map +1 -1
- package/core/streaming.js +28 -1
- package/core/streaming.js.map +1 -1
- package/core/streaming.mjs +28 -1
- package/core/streaming.mjs.map +1 -1
- package/helpers/audio.d.mts.map +1 -1
- package/helpers/audio.d.ts.map +1 -1
- package/helpers/audio.js +2 -0
- package/helpers/audio.js.map +1 -1
- package/helpers/audio.mjs +2 -0
- package/helpers/audio.mjs.map +1 -1
- package/helpers/standard-schema.d.mts.map +1 -1
- package/helpers/standard-schema.d.ts.map +1 -1
- package/helpers/standard-schema.js +28 -18
- package/helpers/standard-schema.js.map +1 -1
- package/helpers/standard-schema.mjs +28 -18
- package/helpers/standard-schema.mjs.map +1 -1
- package/helpers/zod-v3-strict-schema.d.mts.map +1 -1
- package/helpers/zod-v3-strict-schema.d.ts.map +1 -1
- package/helpers/zod-v3-strict-schema.js +5 -0
- package/helpers/zod-v3-strict-schema.js.map +1 -1
- package/helpers/zod-v3-strict-schema.mjs +5 -0
- package/helpers/zod-v3-strict-schema.mjs.map +1 -1
- package/helpers/zod.d.mts.map +1 -1
- package/helpers/zod.d.ts.map +1 -1
- package/helpers/zod.js +16 -1
- package/helpers/zod.js.map +1 -1
- package/helpers/zod.mjs +17 -2
- package/helpers/zod.mjs.map +1 -1
- package/internal/assistant-stream-delta.d.mts.map +1 -1
- package/internal/assistant-stream-delta.d.ts.map +1 -1
- package/internal/assistant-stream-delta.js +8 -1
- package/internal/assistant-stream-delta.js.map +1 -1
- package/internal/assistant-stream-delta.mjs +8 -1
- package/internal/assistant-stream-delta.mjs.map +1 -1
- package/internal/auth/x509-credential-options.d.mts.map +1 -1
- package/internal/auth/x509-credential-options.d.ts.map +1 -1
- package/internal/auth/x509-credential-options.js +3 -0
- package/internal/auth/x509-credential-options.js.map +1 -1
- package/internal/auth/x509-credential-options.mjs +3 -0
- package/internal/auth/x509-credential-options.mjs.map +1 -1
- package/internal/auth/x509-token-exchange.d.mts.map +1 -1
- package/internal/auth/x509-token-exchange.d.ts.map +1 -1
- package/internal/auth/x509-token-exchange.js +2 -0
- package/internal/auth/x509-token-exchange.js.map +1 -1
- package/internal/auth/x509-token-exchange.mjs +2 -0
- package/internal/auth/x509-token-exchange.mjs.map +1 -1
- package/internal/auth/x509-transport-capability.d.mts.map +1 -1
- package/internal/auth/x509-transport-capability.d.ts.map +1 -1
- package/internal/auth/x509-transport-capability.js +1 -0
- package/internal/auth/x509-transport-capability.js.map +1 -1
- package/internal/auth/x509-transport-capability.mjs +1 -0
- package/internal/auth/x509-transport-capability.mjs.map +1 -1
- package/internal/auth/x509-transport-state.mjs +1 -0
- package/internal/auth/x509-workload-identity-auth.d.mts.map +1 -1
- package/internal/auth/x509-workload-identity-auth.d.ts.map +1 -1
- package/internal/auth/x509-workload-identity-auth.js +11 -0
- package/internal/auth/x509-workload-identity-auth.js.map +1 -1
- package/internal/auth/x509-workload-identity-auth.mjs +11 -0
- package/internal/auth/x509-workload-identity-auth.mjs.map +1 -1
- package/internal/bedrock.d.mts.map +1 -1
- package/internal/bedrock.d.ts.map +1 -1
- package/internal/bedrock.js +17 -1
- package/internal/bedrock.js.map +1 -1
- package/internal/bedrock.mjs +17 -1
- package/internal/bedrock.mjs.map +1 -1
- package/internal/decoders/line.d.mts.map +1 -1
- package/internal/decoders/line.d.ts.map +1 -1
- package/internal/decoders/line.js +1 -0
- package/internal/decoders/line.js.map +1 -1
- package/internal/decoders/line.mjs +1 -0
- package/internal/decoders/line.mjs.map +1 -1
- package/internal/parse.d.mts +1 -0
- package/internal/parse.d.mts.map +1 -1
- package/internal/parse.d.ts +1 -0
- package/internal/parse.d.ts.map +1 -1
- package/internal/parse.js.map +1 -1
- package/internal/parse.mjs.map +1 -1
- package/internal/provider.d.mts.map +1 -1
- package/internal/provider.d.ts.map +1 -1
- package/internal/provider.js +3 -0
- package/internal/provider.js.map +1 -1
- package/internal/provider.mjs +3 -0
- package/internal/provider.mjs.map +1 -1
- package/internal/qs/stringify.d.mts.map +1 -1
- package/internal/qs/stringify.d.ts.map +1 -1
- package/internal/qs/stringify.js +3 -0
- package/internal/qs/stringify.js.map +1 -1
- package/internal/qs/stringify.mjs +3 -0
- package/internal/qs/stringify.mjs.map +1 -1
- package/internal/qs/utils.d.mts.map +1 -1
- package/internal/qs/utils.d.ts.map +1 -1
- package/internal/qs/utils.js +15 -3
- package/internal/qs/utils.js.map +1 -1
- package/internal/qs/utils.mjs +15 -3
- package/internal/qs/utils.mjs.map +1 -1
- package/internal/realtime-credentials.d.mts +1 -1
- package/internal/realtime-credentials.d.ts +1 -1
- package/internal/realtime-credentials.js +1 -1
- package/internal/realtime-credentials.mjs +1 -1
- package/internal/responses/response-accumulator.d.mts.map +1 -1
- package/internal/responses/response-accumulator.d.ts.map +1 -1
- package/internal/responses/response-accumulator.js +20 -4
- package/internal/responses/response-accumulator.js.map +1 -1
- package/internal/responses/response-accumulator.mjs +20 -4
- package/internal/responses/response-accumulator.mjs.map +1 -1
- package/internal/to-file.js.map +1 -1
- package/internal/to-file.mjs.map +1 -1
- package/internal/uploads.d.mts.map +1 -1
- package/internal/uploads.d.ts.map +1 -1
- package/internal/uploads.js +10 -0
- package/internal/uploads.js.map +1 -1
- package/internal/uploads.mjs +10 -0
- package/internal/uploads.mjs.map +1 -1
- package/internal/utils/abort.d.mts +11 -0
- package/internal/utils/abort.d.mts.map +1 -0
- package/internal/utils/abort.d.ts +11 -0
- package/internal/utils/abort.d.ts.map +1 -0
- package/internal/utils/abort.js +94 -0
- package/internal/utils/abort.js.map +1 -0
- package/internal/utils/abort.mjs +90 -0
- package/internal/utils/abort.mjs.map +1 -0
- package/internal/utils/bytes.d.mts.map +1 -1
- package/internal/utils/bytes.d.ts.map +1 -1
- package/internal/utils/bytes.js +2 -0
- package/internal/utils/bytes.js.map +1 -1
- package/internal/utils/bytes.mjs +2 -0
- package/internal/utils/bytes.mjs.map +1 -1
- package/internal/utils/path.d.mts.map +1 -1
- package/internal/utils/path.d.ts.map +1 -1
- package/internal/utils/path.js +2 -0
- package/internal/utils/path.js.map +1 -1
- package/internal/utils/path.mjs +2 -0
- package/internal/utils/path.mjs.map +1 -1
- package/internal/utils/sleep.d.mts +1 -1
- package/internal/utils/sleep.d.mts.map +1 -1
- package/internal/utils/sleep.d.ts +1 -1
- package/internal/utils/sleep.d.ts.map +1 -1
- package/internal/utils/sleep.js +51 -1
- package/internal/utils/sleep.js.map +1 -1
- package/internal/utils/sleep.mjs +51 -1
- package/internal/utils/sleep.mjs.map +1 -1
- package/internal/ws-adapter-browser.d.mts.map +1 -1
- package/internal/ws-adapter-browser.d.ts.map +1 -1
- package/internal/ws-adapter-browser.js +2 -0
- package/internal/ws-adapter-browser.js.map +1 -1
- package/internal/ws-adapter-browser.mjs +2 -0
- package/internal/ws-adapter-browser.mjs.map +1 -1
- package/internal/ws.d.mts +22 -0
- package/internal/ws.d.mts.map +1 -1
- package/internal/ws.d.ts +22 -0
- package/internal/ws.d.ts.map +1 -1
- package/internal/ws.js +46 -4
- package/internal/ws.js.map +1 -1
- package/internal/ws.mjs +44 -4
- package/internal/ws.mjs.map +1 -1
- package/lib/AbstractChatCompletionRunner.d.mts.map +1 -1
- package/lib/AbstractChatCompletionRunner.d.ts.map +1 -1
- package/lib/AbstractChatCompletionRunner.js +41 -16
- package/lib/AbstractChatCompletionRunner.js.map +1 -1
- package/lib/AbstractChatCompletionRunner.mjs +42 -17
- package/lib/AbstractChatCompletionRunner.mjs.map +1 -1
- package/lib/AssistantStream.d.mts.map +1 -1
- package/lib/AssistantStream.d.ts.map +1 -1
- package/lib/AssistantStream.js +19 -5
- package/lib/AssistantStream.js.map +1 -1
- package/lib/AssistantStream.mjs +20 -6
- package/lib/AssistantStream.mjs.map +1 -1
- package/lib/ChatCompletionRunner.d.mts.map +1 -1
- package/lib/ChatCompletionRunner.d.ts.map +1 -1
- package/lib/ChatCompletionRunner.js +1 -0
- package/lib/ChatCompletionRunner.js.map +1 -1
- package/lib/ChatCompletionRunner.mjs +1 -0
- package/lib/ChatCompletionRunner.mjs.map +1 -1
- package/lib/ChatCompletionStream.d.mts +6 -1
- package/lib/ChatCompletionStream.d.mts.map +1 -1
- package/lib/ChatCompletionStream.d.ts +6 -1
- package/lib/ChatCompletionStream.d.ts.map +1 -1
- package/lib/ChatCompletionStream.js +63 -7
- package/lib/ChatCompletionStream.js.map +1 -1
- package/lib/ChatCompletionStream.mjs +64 -8
- package/lib/ChatCompletionStream.mjs.map +1 -1
- package/lib/EventEmitter.d.mts.map +1 -1
- package/lib/EventEmitter.d.ts.map +1 -1
- package/lib/EventEmitter.js +15 -0
- package/lib/EventEmitter.js.map +1 -1
- package/lib/EventEmitter.mjs +15 -0
- package/lib/EventEmitter.mjs.map +1 -1
- package/lib/EventStream.d.mts +2 -0
- package/lib/EventStream.d.mts.map +1 -1
- package/lib/EventStream.d.ts +2 -0
- package/lib/EventStream.d.ts.map +1 -1
- package/lib/EventStream.js +111 -14
- package/lib/EventStream.js.map +1 -1
- package/lib/EventStream.mjs +111 -14
- package/lib/EventStream.mjs.map +1 -1
- package/lib/ResponsesParser.d.mts.map +1 -1
- package/lib/ResponsesParser.d.ts.map +1 -1
- package/lib/ResponsesParser.js +4 -0
- package/lib/ResponsesParser.js.map +1 -1
- package/lib/ResponsesParser.mjs +4 -0
- package/lib/ResponsesParser.mjs.map +1 -1
- package/lib/RunnableFunction.d.mts.map +1 -1
- package/lib/RunnableFunction.d.ts.map +1 -1
- package/lib/RunnableFunction.js.map +1 -1
- package/lib/RunnableFunction.mjs.map +1 -1
- package/lib/agents/agent-session-stream.d.mts.map +1 -1
- package/lib/agents/agent-session-stream.d.ts.map +1 -1
- package/lib/agents/agent-session-stream.js +5 -2
- package/lib/agents/agent-session-stream.js.map +1 -1
- package/lib/agents/agent-session-stream.mjs +5 -2
- package/lib/agents/agent-session-stream.mjs.map +1 -1
- package/lib/embeddings.d.mts.map +1 -1
- package/lib/embeddings.d.ts.map +1 -1
- package/lib/embeddings.js +2 -0
- package/lib/embeddings.js.map +1 -1
- package/lib/embeddings.mjs +2 -0
- package/lib/embeddings.mjs.map +1 -1
- package/lib/live/transcript-grouper.d.mts.map +1 -1
- package/lib/live/transcript-grouper.d.ts.map +1 -1
- package/lib/live/transcript-grouper.js +8 -2
- package/lib/live/transcript-grouper.js.map +1 -1
- package/lib/live/transcript-grouper.mjs +8 -2
- package/lib/live/transcript-grouper.mjs.map +1 -1
- package/lib/live/transcript-grouping.d.mts +2 -2
- package/lib/live/transcript-grouping.d.mts.map +1 -1
- package/lib/live/transcript-grouping.d.ts +2 -2
- package/lib/live/transcript-grouping.d.ts.map +1 -1
- package/lib/live/transcript-grouping.js +44 -22
- package/lib/live/transcript-grouping.js.map +1 -1
- package/lib/live/transcript-grouping.mjs +44 -22
- package/lib/live/transcript-grouping.mjs.map +1 -1
- package/lib/parser.d.mts.map +1 -1
- package/lib/parser.d.ts.map +1 -1
- package/lib/parser.js +13 -0
- package/lib/parser.js.map +1 -1
- package/lib/parser.mjs +13 -0
- package/lib/parser.mjs.map +1 -1
- package/lib/responses/ResponseInputItems.d.mts.map +1 -1
- package/lib/responses/ResponseInputItems.d.ts.map +1 -1
- package/lib/responses/ResponseInputItems.js +11 -0
- package/lib/responses/ResponseInputItems.js.map +1 -1
- package/lib/responses/ResponseInputItems.mjs +11 -0
- package/lib/responses/ResponseInputItems.mjs.map +1 -1
- package/lib/responses/ResponseStream.d.mts.map +1 -1
- package/lib/responses/ResponseStream.d.ts.map +1 -1
- package/lib/responses/ResponseStream.js +7 -3
- package/lib/responses/ResponseStream.js.map +1 -1
- package/lib/responses/ResponseStream.mjs +8 -4
- package/lib/responses/ResponseStream.mjs.map +1 -1
- package/lib/transform.d.mts.map +1 -1
- package/lib/transform.d.ts.map +1 -1
- package/lib/transform.js +69 -33
- package/lib/transform.js.map +1 -1
- package/lib/transform.mjs +69 -33
- package/lib/transform.mjs.map +1 -1
- package/lib/webrtc/connection.d.mts.map +1 -1
- package/lib/webrtc/connection.d.ts.map +1 -1
- package/lib/webrtc/connection.js +6 -1
- package/lib/webrtc/connection.js.map +1 -1
- package/lib/webrtc/connection.mjs +6 -1
- package/lib/webrtc/connection.mjs.map +1 -1
- package/lib/webrtc/data-channel.d.mts.map +1 -1
- package/lib/webrtc/data-channel.d.ts.map +1 -1
- package/lib/webrtc/data-channel.js +9 -1
- package/lib/webrtc/data-channel.js.map +1 -1
- package/lib/webrtc/data-channel.mjs +9 -1
- package/lib/webrtc/data-channel.mjs.map +1 -1
- package/lib/webrtc/subscriptions.d.mts.map +1 -1
- package/lib/webrtc/subscriptions.d.ts.map +1 -1
- package/lib/webrtc/subscriptions.js +2 -0
- package/lib/webrtc/subscriptions.js.map +1 -1
- package/lib/webrtc/subscriptions.mjs +2 -0
- package/lib/webrtc/subscriptions.mjs.map +1 -1
- package/lib/webrtc/types.d.mts.map +1 -1
- package/lib/webrtc/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/providers/bedrock/aws.d.mts.map +1 -1
- package/providers/bedrock/aws.d.ts.map +1 -1
- package/providers/bedrock/aws.js +4 -0
- package/providers/bedrock/aws.js.map +1 -1
- package/providers/bedrock/aws.mjs +4 -0
- package/providers/bedrock/aws.mjs.map +1 -1
- package/realtime/internal-base.d.mts.map +1 -1
- package/realtime/internal-base.d.ts.map +1 -1
- package/realtime/internal-base.js +1 -0
- package/realtime/internal-base.js.map +1 -1
- package/realtime/internal-base.mjs +1 -0
- package/realtime/internal-base.mjs.map +1 -1
- package/realtime/websocket.d.mts.map +1 -1
- package/realtime/websocket.d.ts.map +1 -1
- package/realtime/websocket.js +9 -1
- package/realtime/websocket.js.map +1 -1
- package/realtime/websocket.mjs +9 -1
- package/realtime/websocket.mjs.map +1 -1
- package/realtime/ws.d.mts.map +1 -1
- package/realtime/ws.d.ts.map +1 -1
- package/realtime/ws.js +3 -0
- package/realtime/ws.js.map +1 -1
- package/realtime/ws.mjs +3 -0
- package/realtime/ws.mjs.map +1 -1
- package/resources/beta/agents/agents.d.mts +2 -1
- package/resources/beta/agents/agents.d.mts.map +1 -1
- package/resources/beta/agents/agents.d.ts +2 -1
- package/resources/beta/agents/agents.d.ts.map +1 -1
- package/resources/beta/agents/agents.js.map +1 -1
- package/resources/beta/agents/agents.mjs.map +1 -1
- package/resources/beta/beta.d.mts +2 -2
- package/resources/beta/beta.d.mts.map +1 -1
- package/resources/beta/beta.d.ts +2 -2
- package/resources/beta/beta.d.ts.map +1 -1
- package/resources/beta/beta.js.map +1 -1
- package/resources/beta/beta.mjs.map +1 -1
- package/resources/beta/index.d.mts +1 -1
- package/resources/beta/index.d.mts.map +1 -1
- package/resources/beta/index.d.ts +1 -1
- package/resources/beta/index.d.ts.map +1 -1
- package/resources/beta/index.js.map +1 -1
- package/resources/beta/index.mjs.map +1 -1
- package/resources/beta/responses/index.d.mts +1 -1
- package/resources/beta/responses/index.d.mts.map +1 -1
- package/resources/beta/responses/index.d.ts +1 -1
- package/resources/beta/responses/index.d.ts.map +1 -1
- package/resources/beta/responses/index.js.map +1 -1
- package/resources/beta/responses/index.mjs.map +1 -1
- package/resources/beta/responses/internal-base.d.mts +3 -0
- package/resources/beta/responses/internal-base.d.mts.map +1 -1
- package/resources/beta/responses/internal-base.d.ts +3 -0
- package/resources/beta/responses/internal-base.d.ts.map +1 -1
- package/resources/beta/responses/internal-base.js +21 -6
- package/resources/beta/responses/internal-base.js.map +1 -1
- package/resources/beta/responses/internal-base.mjs +21 -6
- package/resources/beta/responses/internal-base.mjs.map +1 -1
- package/resources/beta/responses/responses.d.mts +51 -3
- package/resources/beta/responses/responses.d.mts.map +1 -1
- package/resources/beta/responses/responses.d.ts +51 -3
- package/resources/beta/responses/responses.d.ts.map +1 -1
- package/resources/beta/responses/responses.js.map +1 -1
- package/resources/beta/responses/responses.mjs.map +1 -1
- package/resources/beta/responses/ws-base.d.mts +18 -9
- package/resources/beta/responses/ws-base.d.mts.map +1 -1
- package/resources/beta/responses/ws-base.d.ts +18 -9
- package/resources/beta/responses/ws-base.d.ts.map +1 -1
- package/resources/beta/responses/ws-base.js +87 -18
- package/resources/beta/responses/ws-base.js.map +1 -1
- package/resources/beta/responses/ws-base.mjs +89 -20
- package/resources/beta/responses/ws-base.mjs.map +1 -1
- package/resources/beta/responses/ws.d.mts +3 -0
- package/resources/beta/responses/ws.d.mts.map +1 -1
- package/resources/beta/responses/ws.d.ts +3 -0
- package/resources/beta/responses/ws.d.ts.map +1 -1
- package/resources/beta/responses/ws.js +12 -3
- package/resources/beta/responses/ws.js.map +1 -1
- package/resources/beta/responses/ws.mjs +12 -3
- package/resources/beta/responses/ws.mjs.map +1 -1
- package/resources/live/forks/internal-base.d.mts +3 -0
- package/resources/live/forks/internal-base.d.mts.map +1 -1
- package/resources/live/forks/internal-base.d.ts +3 -0
- package/resources/live/forks/internal-base.d.ts.map +1 -1
- package/resources/live/forks/internal-base.js +21 -5
- package/resources/live/forks/internal-base.js.map +1 -1
- package/resources/live/forks/internal-base.mjs +21 -5
- package/resources/live/forks/internal-base.mjs.map +1 -1
- package/resources/live/forks/ws-base.d.mts +13 -8
- package/resources/live/forks/ws-base.d.mts.map +1 -1
- package/resources/live/forks/ws-base.d.ts +13 -8
- package/resources/live/forks/ws-base.d.ts.map +1 -1
- package/resources/live/forks/ws-base.js +85 -14
- package/resources/live/forks/ws-base.js.map +1 -1
- package/resources/live/forks/ws-base.mjs +87 -16
- package/resources/live/forks/ws-base.mjs.map +1 -1
- package/resources/live/forks/ws.d.mts +1 -0
- package/resources/live/forks/ws.d.mts.map +1 -1
- package/resources/live/forks/ws.d.ts +1 -0
- package/resources/live/forks/ws.d.ts.map +1 -1
- package/resources/live/forks/ws.js.map +1 -1
- package/resources/live/forks/ws.mjs.map +1 -1
- package/resources/live/internal-base.d.mts +3 -0
- package/resources/live/internal-base.d.mts.map +1 -1
- package/resources/live/internal-base.d.ts +3 -0
- package/resources/live/internal-base.d.ts.map +1 -1
- package/resources/live/internal-base.js +21 -5
- package/resources/live/internal-base.js.map +1 -1
- package/resources/live/internal-base.mjs +21 -5
- package/resources/live/internal-base.mjs.map +1 -1
- package/resources/live/sideband/internal-base.d.mts +3 -0
- package/resources/live/sideband/internal-base.d.mts.map +1 -1
- package/resources/live/sideband/internal-base.d.ts +3 -0
- package/resources/live/sideband/internal-base.d.ts.map +1 -1
- package/resources/live/sideband/internal-base.js +21 -5
- package/resources/live/sideband/internal-base.js.map +1 -1
- package/resources/live/sideband/internal-base.mjs +21 -5
- package/resources/live/sideband/internal-base.mjs.map +1 -1
- package/resources/live/sideband/ws-base.d.mts +13 -8
- package/resources/live/sideband/ws-base.d.mts.map +1 -1
- package/resources/live/sideband/ws-base.d.ts +13 -8
- package/resources/live/sideband/ws-base.d.ts.map +1 -1
- package/resources/live/sideband/ws-base.js +85 -14
- package/resources/live/sideband/ws-base.js.map +1 -1
- package/resources/live/sideband/ws-base.mjs +87 -16
- package/resources/live/sideband/ws-base.mjs.map +1 -1
- package/resources/live/sideband/ws.d.mts +1 -0
- package/resources/live/sideband/ws.d.mts.map +1 -1
- package/resources/live/sideband/ws.d.ts +1 -0
- package/resources/live/sideband/ws.d.ts.map +1 -1
- package/resources/live/sideband/ws.js.map +1 -1
- package/resources/live/sideband/ws.mjs.map +1 -1
- package/resources/live/ws-base.d.mts +13 -8
- package/resources/live/ws-base.d.mts.map +1 -1
- package/resources/live/ws-base.d.ts +13 -8
- package/resources/live/ws-base.d.ts.map +1 -1
- package/resources/live/ws-base.js +85 -14
- package/resources/live/ws-base.js.map +1 -1
- package/resources/live/ws-base.mjs +87 -16
- package/resources/live/ws-base.mjs.map +1 -1
- package/resources/live/ws.d.mts +1 -0
- package/resources/live/ws.d.mts.map +1 -1
- package/resources/live/ws.d.ts +1 -0
- package/resources/live/ws.d.ts.map +1 -1
- package/resources/live/ws.js.map +1 -1
- package/resources/live/ws.mjs.map +1 -1
- package/resources/responses/internal-base.d.mts +3 -0
- package/resources/responses/internal-base.d.mts.map +1 -1
- package/resources/responses/internal-base.d.ts +3 -0
- package/resources/responses/internal-base.d.ts.map +1 -1
- package/resources/responses/internal-base.js +21 -6
- package/resources/responses/internal-base.js.map +1 -1
- package/resources/responses/internal-base.mjs +21 -6
- package/resources/responses/internal-base.mjs.map +1 -1
- package/resources/responses/responses.d.mts +36 -3
- package/resources/responses/responses.d.mts.map +1 -1
- package/resources/responses/responses.d.ts +36 -3
- package/resources/responses/responses.d.ts.map +1 -1
- package/resources/responses/responses.js.map +1 -1
- package/resources/responses/responses.mjs.map +1 -1
- package/resources/responses/ws-base.d.mts +18 -9
- package/resources/responses/ws-base.d.mts.map +1 -1
- package/resources/responses/ws-base.d.ts +18 -9
- package/resources/responses/ws-base.d.ts.map +1 -1
- package/resources/responses/ws-base.js +87 -18
- package/resources/responses/ws-base.js.map +1 -1
- package/resources/responses/ws-base.mjs +89 -20
- package/resources/responses/ws-base.mjs.map +1 -1
- package/resources/responses/ws.d.mts +3 -0
- package/resources/responses/ws.d.mts.map +1 -1
- package/resources/responses/ws.d.ts +3 -0
- package/resources/responses/ws.d.ts.map +1 -1
- package/resources/responses/ws.js +12 -3
- package/resources/responses/ws.js.map +1 -1
- package/resources/responses/ws.mjs +12 -3
- package/resources/responses/ws.mjs.map +1 -1
- package/src/_vendor/zod-to-json-schema/Options.ts +2 -0
- package/src/_vendor/zod-to-json-schema/parseDef.ts +1 -0
- package/src/_vendor/zod-to-json-schema/parsers/bigint.ts +2 -0
- package/src/_vendor/zod-to-json-schema/parsers/literal.ts +1 -0
- package/src/_vendor/zod-to-json-schema/parsers/null.ts +1 -0
- package/src/_vendor/zod-to-json-schema/parsers/nullable.ts +4 -0
- package/src/_vendor/zod-to-json-schema/parsers/number.ts +2 -0
- package/src/_vendor/zod-to-json-schema/parsers/optional.ts +6 -7
- package/src/_vendor/zod-to-json-schema/parsers/record.ts +2 -0
- package/src/_vendor/zod-to-json-schema/parsers/string.ts +1 -0
- package/src/_vendor/zod-to-json-schema/parsers/union.ts +3 -0
- package/src/_vendor/zod-to-json-schema/util.ts +1 -0
- package/src/_vendor/zod-to-json-schema/zodToJsonSchema.ts +3 -1
- package/src/auth/subject-token-providers.ts +6 -1
- package/src/auth/workload-identity-auth.ts +10 -1
- package/src/auth/x509-transport.ts +13 -2
- package/src/azure.ts +3 -0
- package/src/bedrock.ts +23 -7
- package/src/beta/realtime/internal-base.ts +2 -0
- package/src/beta/realtime/websocket.ts +11 -1
- package/src/beta/realtime/ws.ts +3 -0
- package/src/client.ts +78 -22
- package/src/core/EventEmitter.ts +15 -0
- package/src/core/streaming.ts +30 -2
- package/src/helpers/audio.ts +2 -0
- package/src/helpers/standard-schema.ts +31 -19
- package/src/helpers/zod-v3-strict-schema.ts +8 -2
- package/src/helpers/zod.ts +32 -13
- package/src/internal/assistant-stream-delta.ts +7 -1
- package/src/internal/auth/x509-credential-options.ts +3 -0
- package/src/internal/auth/x509-token-exchange.ts +10 -1
- package/src/internal/auth/x509-transport-capability.ts +2 -1
- package/src/internal/auth/x509-workload-identity-auth.ts +13 -8
- package/src/internal/bedrock.ts +15 -0
- package/src/internal/decoders/line.ts +1 -0
- package/src/internal/parse.ts +1 -0
- package/src/internal/provider.ts +3 -0
- package/src/internal/qs/stringify.ts +3 -0
- package/src/internal/qs/utils.ts +14 -3
- package/src/internal/realtime-credentials.ts +1 -1
- package/src/internal/responses/response-accumulator.ts +34 -4
- package/src/internal/to-file.ts +1 -1
- package/src/internal/uploads.ts +11 -1
- package/src/internal/utils/abort.ts +116 -0
- package/src/internal/utils/bytes.ts +2 -0
- package/src/internal/utils/path.ts +2 -0
- package/src/internal/utils/sleep.ts +52 -1
- package/src/internal/ws-adapter-browser.ts +2 -0
- package/src/internal/ws.ts +66 -4
- package/src/lib/AbstractChatCompletionRunner.ts +40 -17
- package/src/lib/AssistantStream.ts +31 -20
- package/src/lib/ChatCompletionRunner.ts +1 -0
- package/src/lib/ChatCompletionStream.ts +81 -14
- package/src/lib/EventEmitter.ts +15 -0
- package/src/lib/EventStream.ts +93 -3
- package/src/lib/ResponsesParser.ts +5 -0
- package/src/lib/RunnableFunction.ts +4 -1
- package/src/lib/agents/agent-session-stream.ts +5 -3
- package/src/lib/embeddings.ts +3 -1
- package/src/lib/live/transcript-grouper.ts +4 -0
- package/src/lib/live/transcript-grouping.ts +59 -27
- package/src/lib/parser.ts +16 -2
- package/src/lib/responses/ResponseInputItems.ts +11 -0
- package/src/lib/responses/ResponseStream.ts +6 -3
- package/src/lib/transform.ts +70 -35
- package/src/lib/webrtc/connection.ts +5 -1
- package/src/lib/webrtc/data-channel.ts +7 -0
- package/src/lib/webrtc/subscriptions.ts +3 -0
- package/src/lib/webrtc/types.ts +1 -0
- package/src/providers/bedrock/aws.ts +5 -1
- package/src/realtime/internal-base.ts +2 -0
- package/src/realtime/websocket.ts +11 -1
- package/src/realtime/ws.ts +3 -0
- package/src/resources/beta/agents/agents.ts +2 -0
- package/src/resources/beta/beta.ts +2 -0
- package/src/resources/beta/index.ts +1 -0
- package/src/resources/beta/responses/index.ts +1 -0
- package/src/resources/beta/responses/internal-base.ts +24 -6
- package/src/resources/beta/responses/responses.ts +58 -0
- package/src/resources/beta/responses/ws-base.ts +117 -26
- package/src/resources/beta/responses/ws.ts +23 -6
- package/src/resources/live/forks/internal-base.ts +24 -5
- package/src/resources/live/forks/ws-base.ts +110 -21
- package/src/resources/live/forks/ws.ts +2 -0
- package/src/resources/live/internal-base.ts +24 -5
- package/src/resources/live/sideband/internal-base.ts +24 -5
- package/src/resources/live/sideband/ws-base.ts +110 -21
- package/src/resources/live/sideband/ws.ts +2 -0
- package/src/resources/live/ws-base.ts +110 -21
- package/src/resources/live/ws.ts +2 -0
- package/src/resources/responses/api.md +1 -0
- package/src/resources/responses/internal-base.ts +24 -6
- package/src/resources/responses/responses.ts +41 -0
- package/src/resources/responses/ws-base.ts +117 -26
- package/src/resources/responses/ws.ts +23 -6
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
package/lib/transform.mjs
CHANGED
|
@@ -99,6 +99,7 @@ function assignSchema(target, ...sources) {
|
|
|
99
99
|
* participate.
|
|
100
100
|
*/
|
|
101
101
|
export function forEachJSONSchemaChild(schema, path, visit) {
|
|
102
|
+
// SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
|
|
102
103
|
const record = schema;
|
|
103
104
|
for (const keyword of JSON_SCHEMA_SINGLE_SCHEMA_KEYWORDS) {
|
|
104
105
|
if (keyword in record) {
|
|
@@ -171,10 +172,11 @@ export function toStrictJsonSchema(schema) {
|
|
|
171
172
|
return strictSchema;
|
|
172
173
|
}
|
|
173
174
|
function stripUndefinedSchemaKeywords(schema, visited = new Set()) {
|
|
174
|
-
if (
|
|
175
|
+
if (!isObject(schema) || visited.has(schema)) {
|
|
175
176
|
return;
|
|
176
177
|
}
|
|
177
178
|
visited.add(schema);
|
|
179
|
+
// SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
|
|
178
180
|
const schemaRecord = schema;
|
|
179
181
|
for (const keyword of Object.keys(schemaRecord)) {
|
|
180
182
|
if (schemaRecord[keyword] === undefined) {
|
|
@@ -182,6 +184,7 @@ function stripUndefinedSchemaKeywords(schema, visited = new Set()) {
|
|
|
182
184
|
}
|
|
183
185
|
}
|
|
184
186
|
forEachJSONSchemaChild(schema, [], (child) => {
|
|
187
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
185
188
|
stripUndefinedSchemaKeywords(child, visited);
|
|
186
189
|
});
|
|
187
190
|
}
|
|
@@ -257,6 +260,7 @@ function inlineRootRefObject(schema) {
|
|
|
257
260
|
}
|
|
258
261
|
for (const keyword of JSON_SCHEMA_ANNOTATION_KEYWORDS) {
|
|
259
262
|
if (!(keyword in inheritedAnnotations) && keyword in target) {
|
|
263
|
+
// SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
|
|
260
264
|
inheritedAnnotations[keyword] = target[keyword];
|
|
261
265
|
}
|
|
262
266
|
}
|
|
@@ -275,6 +279,7 @@ function inlineRootRefObject(schema) {
|
|
|
275
279
|
delete inlined[keyword];
|
|
276
280
|
}
|
|
277
281
|
}
|
|
282
|
+
// SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
|
|
278
283
|
const schemaRecord = schema;
|
|
279
284
|
for (const keyword of Object.keys(schema)) {
|
|
280
285
|
delete schemaRecord[keyword];
|
|
@@ -313,12 +318,13 @@ function normalizeRootAllOf(schema) {
|
|
|
313
318
|
return;
|
|
314
319
|
}
|
|
315
320
|
const branch = allOf[0];
|
|
316
|
-
if (
|
|
321
|
+
if (!isObject(branch)) {
|
|
317
322
|
return;
|
|
318
323
|
}
|
|
319
324
|
const rootMetadata = { ...schema };
|
|
320
325
|
delete rootMetadata.allOf;
|
|
321
326
|
const normalized = structuredClone(branch);
|
|
327
|
+
// SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
|
|
322
328
|
const schemaRecord = schema;
|
|
323
329
|
for (const keyword of Object.keys(schema)) {
|
|
324
330
|
delete schemaRecord[keyword];
|
|
@@ -347,7 +353,7 @@ function normalizeRootAnyOf(schema) {
|
|
|
347
353
|
return false;
|
|
348
354
|
}
|
|
349
355
|
const { branch, index: branchIndex } = realBranches[0];
|
|
350
|
-
if (
|
|
356
|
+
if (!isObject(branch) || !isObjectOnlySchema(branch, schema)) {
|
|
351
357
|
return false;
|
|
352
358
|
}
|
|
353
359
|
const definitionRenames = planPromotedRootAnyOfDefinitionRenames(schema, branch);
|
|
@@ -374,6 +380,7 @@ function normalizeRootAnyOf(schema) {
|
|
|
374
380
|
normalized[keyword] = mergedDefinitions;
|
|
375
381
|
delete rootMetadata[keyword];
|
|
376
382
|
}
|
|
383
|
+
// SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
|
|
377
384
|
const schemaRecord = schema;
|
|
378
385
|
for (const keyword of Object.keys(schema)) {
|
|
379
386
|
delete schemaRecord[keyword];
|
|
@@ -438,13 +445,14 @@ function rewriteLocalRefsIntoPromotedRootAnyOfBranch(root, branchIndex, definiti
|
|
|
438
445
|
: '#/' + promotedParts.map(encodeJSONPointerTokenForURIFragment).join('/');
|
|
439
446
|
};
|
|
440
447
|
const rewriteRefs = (value) => {
|
|
441
|
-
if (
|
|
448
|
+
if (!isObject(value)) {
|
|
442
449
|
return;
|
|
443
450
|
}
|
|
444
451
|
if (typeof value.$ref === 'string') {
|
|
445
452
|
value.$ref = rewriteRef(value.$ref);
|
|
446
453
|
}
|
|
447
454
|
forEachJSONSchemaChild(value, [], (child) => {
|
|
455
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
448
456
|
rewriteRefs(child);
|
|
449
457
|
});
|
|
450
458
|
};
|
|
@@ -472,13 +480,14 @@ function hasOnlyRootRefAndDefinitions(schema) {
|
|
|
472
480
|
* Multi-type arrays carry real union semantics and must remain unchanged.
|
|
473
481
|
*/
|
|
474
482
|
function normalizeSingletonTypeArrays(schema) {
|
|
475
|
-
if (
|
|
483
|
+
if (!isObject(schema)) {
|
|
476
484
|
return;
|
|
477
485
|
}
|
|
478
486
|
if (Array.isArray(schema.type) && schema.type.length === 1) {
|
|
479
487
|
schema.type = schema.type[0];
|
|
480
488
|
}
|
|
481
489
|
forEachJSONSchemaChild(schema, [], (child) => {
|
|
490
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
482
491
|
normalizeSingletonTypeArrays(child);
|
|
483
492
|
});
|
|
484
493
|
}
|
|
@@ -569,7 +578,7 @@ function ensureStrictJsonSchema(jsonSchema, path, root) {
|
|
|
569
578
|
// keywords without an explicit type, so those implicit object shapes need
|
|
570
579
|
// the same strict handling as type: 'object'. Explicitly open object schemas
|
|
571
580
|
// cannot be represented in Structured Outputs strict mode.
|
|
572
|
-
if (
|
|
581
|
+
if (hasObjectConstraints(jsonSchema)) {
|
|
573
582
|
if (!hasOwn(jsonSchema, 'additionalProperties')) {
|
|
574
583
|
jsonSchema.additionalProperties = false;
|
|
575
584
|
}
|
|
@@ -583,7 +592,7 @@ function ensureStrictJsonSchema(jsonSchema, path, root) {
|
|
|
583
592
|
}
|
|
584
593
|
// Handle object properties
|
|
585
594
|
const properties = jsonSchema.properties;
|
|
586
|
-
if (
|
|
595
|
+
if (hasObjectConstraints(jsonSchema)) {
|
|
587
596
|
for (const key of required) {
|
|
588
597
|
if (!isObject(properties) || !hasOwn(properties, key)) {
|
|
589
598
|
throw new Error(`Object schema at \`${path.join('/') || '<root>'}\` requires property \`${key}\` but does not declare it in \`properties\`.`);
|
|
@@ -630,6 +639,7 @@ function ensureStrictJsonSchema(jsonSchema, path, root) {
|
|
|
630
639
|
}
|
|
631
640
|
}
|
|
632
641
|
normalizeArrayUnionWrapper(jsonSchema, root);
|
|
642
|
+
// SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
|
|
633
643
|
const schemaRecord = jsonSchema;
|
|
634
644
|
for (const keyword of JSON_SCHEMA_UNSUPPORTED_SCHEMA_KEYWORDS) {
|
|
635
645
|
// Optional converter output often keeps undefined placeholders on the
|
|
@@ -653,6 +663,7 @@ function ensureStrictJsonSchema(jsonSchema, path, root) {
|
|
|
653
663
|
if (typeof child === 'boolean' && (keyword === 'additionalProperties' || keyword === 'additionalItems')) {
|
|
654
664
|
return;
|
|
655
665
|
}
|
|
666
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
656
667
|
ensureStrictJsonSchema(child, childPath, root);
|
|
657
668
|
});
|
|
658
669
|
// Strip `null` defaults as there's no meaningful distinction
|
|
@@ -692,6 +703,7 @@ function parseLocalRef(ref) {
|
|
|
692
703
|
}
|
|
693
704
|
return parts;
|
|
694
705
|
}
|
|
706
|
+
// oxlint-disable-next-line anti-slop/no-unknown-returns -- Resolving untrusted schema references may produce any value; callers perform the schema checks. JSON Schema traversal accepts arbitrary keyword values and validates each node before interpreting it.
|
|
695
707
|
function resolvePointerPart(resolved, part) {
|
|
696
708
|
if (Array.isArray(resolved)) {
|
|
697
709
|
if (!/^(?:0|[1-9]\d*)$/.test(part)) {
|
|
@@ -771,7 +783,7 @@ function isSchemaDefinition(value) {
|
|
|
771
783
|
return typeof value === 'boolean' || isObject(value);
|
|
772
784
|
}
|
|
773
785
|
function isObjectOnlySchema(schema, root, seenRefs = new Set()) {
|
|
774
|
-
if (
|
|
786
|
+
if (!isObject(schema)) {
|
|
775
787
|
return false;
|
|
776
788
|
}
|
|
777
789
|
if (schema.$ref !== undefined) {
|
|
@@ -799,7 +811,7 @@ function isObjectOnlySchema(schema, root, seenRefs = new Set()) {
|
|
|
799
811
|
(Array.isArray(schema.type) && schema.type.length === 1 && schema.type[0] === 'object'));
|
|
800
812
|
}
|
|
801
813
|
function isArrayOnlySchema(schema, root, seenRefs = new Set()) {
|
|
802
|
-
if (
|
|
814
|
+
if (!isObject(schema)) {
|
|
803
815
|
return false;
|
|
804
816
|
}
|
|
805
817
|
if (schema.$ref !== undefined) {
|
|
@@ -837,6 +849,7 @@ export function hasOnlyRefAndAnnotations(schema) {
|
|
|
837
849
|
JSON_SCHEMA_ANNOTATION_KEYWORDS.has(keyword));
|
|
838
850
|
}
|
|
839
851
|
function hasOnlyAnnotationSiblings(schema, keyword) {
|
|
852
|
+
// SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
|
|
840
853
|
const schemaRecord = schema;
|
|
841
854
|
return Object.keys(schema).every(
|
|
842
855
|
// Definition maps do not add sibling validation constraints. Keep them
|
|
@@ -865,7 +878,7 @@ function hasOnlyRootAnyOfMetadataSiblings(schema) {
|
|
|
865
878
|
function hasObjectKeywords(schema) {
|
|
866
879
|
return Object.keys(schema).some((keyword) => JSON_SCHEMA_OBJECT_KEYWORDS.has(keyword));
|
|
867
880
|
}
|
|
868
|
-
function
|
|
881
|
+
function hasObjectConstraints(schema) {
|
|
869
882
|
const typ = schema.type;
|
|
870
883
|
return (typ === 'object' ||
|
|
871
884
|
(Array.isArray(typ) && typ.includes('object')) ||
|
|
@@ -887,7 +900,7 @@ function normalizeObjectUnionWrapper(jsonSchema, path, root) {
|
|
|
887
900
|
if (hasEmptyRequired) {
|
|
888
901
|
delete jsonSchema.required;
|
|
889
902
|
}
|
|
890
|
-
if (!
|
|
903
|
+
if (!hasObjectConstraints(jsonSchema)) {
|
|
891
904
|
return;
|
|
892
905
|
}
|
|
893
906
|
const hasOwnObjectConstraints = Object.keys(jsonSchema).some((keyword) => JSON_SCHEMA_OBJECT_KEYWORDS.has(keyword));
|
|
@@ -932,7 +945,7 @@ function normalizeAnyOfFalseBranches(jsonSchema) {
|
|
|
932
945
|
*/
|
|
933
946
|
export function assertNoNestedSchemaIds(schema) {
|
|
934
947
|
const visit = (value, path) => {
|
|
935
|
-
if (
|
|
948
|
+
if (!isObject(value)) {
|
|
936
949
|
return;
|
|
937
950
|
}
|
|
938
951
|
if (path.length > 0 && value.$id !== undefined) {
|
|
@@ -941,6 +954,7 @@ export function assertNoNestedSchemaIds(schema) {
|
|
|
941
954
|
' establishes a separate JSON Schema resource scope and cannot be represented in strict Structured Outputs.');
|
|
942
955
|
}
|
|
943
956
|
forEachJSONSchemaChild(value, path, (child, childPath) => {
|
|
957
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
944
958
|
visit(child, childPath);
|
|
945
959
|
});
|
|
946
960
|
};
|
|
@@ -1006,13 +1020,14 @@ export function rewriteLocalRefsIntoMovedOneOfBranches(root) {
|
|
|
1006
1020
|
return changed ? '#/' + parts.map(encodeJSONPointerTokenForURIFragment).join('/') : ref;
|
|
1007
1021
|
};
|
|
1008
1022
|
const rewriteRefs = (value) => {
|
|
1009
|
-
if (
|
|
1023
|
+
if (!isObject(value)) {
|
|
1010
1024
|
return;
|
|
1011
1025
|
}
|
|
1012
1026
|
if (typeof value.$ref === 'string') {
|
|
1013
1027
|
value.$ref = rewriteRef(value.$ref);
|
|
1014
1028
|
}
|
|
1015
1029
|
forEachJSONSchemaChild(value, [], (child) => {
|
|
1030
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
1016
1031
|
rewriteRefs(child);
|
|
1017
1032
|
});
|
|
1018
1033
|
};
|
|
@@ -1033,9 +1048,8 @@ function rewriteLocalRefsIntoFilteredAnyOfBranches(root) {
|
|
|
1033
1048
|
let resolved = root;
|
|
1034
1049
|
let changed = false;
|
|
1035
1050
|
for (const [index, part] of originalParts.entries()) {
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
: undefined;
|
|
1051
|
+
// SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
|
|
1052
|
+
const resolvedRecord = isObject(resolved) ? resolved : undefined;
|
|
1039
1053
|
if (part === 'anyOf' &&
|
|
1040
1054
|
index < originalParts.length - 1 &&
|
|
1041
1055
|
resolvedRecord !== undefined &&
|
|
@@ -1073,13 +1087,14 @@ function rewriteLocalRefsIntoFilteredAnyOfBranches(root) {
|
|
|
1073
1087
|
return changed ? '#/' + rewrittenParts.map(encodeJSONPointerTokenForURIFragment).join('/') : ref;
|
|
1074
1088
|
};
|
|
1075
1089
|
const rewriteRefs = (value) => {
|
|
1076
|
-
if (
|
|
1090
|
+
if (!isObject(value)) {
|
|
1077
1091
|
return;
|
|
1078
1092
|
}
|
|
1079
1093
|
if (typeof value.$ref === 'string') {
|
|
1080
1094
|
value.$ref = rewriteRef(value.$ref);
|
|
1081
1095
|
}
|
|
1082
1096
|
forEachJSONSchemaChild(value, [], (child) => {
|
|
1097
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
1083
1098
|
rewriteRefs(child);
|
|
1084
1099
|
});
|
|
1085
1100
|
};
|
|
@@ -1093,7 +1108,7 @@ function rewriteLocalRefsIntoFilteredAnyOfBranches(root) {
|
|
|
1093
1108
|
function preserveAllOfRefTargets(root, rootOnly = false) {
|
|
1094
1109
|
const refsToPreserve = new Set();
|
|
1095
1110
|
const collectRefs = (value) => {
|
|
1096
|
-
if (
|
|
1111
|
+
if (!isObject(value)) {
|
|
1097
1112
|
return;
|
|
1098
1113
|
}
|
|
1099
1114
|
if (typeof value.$ref === 'string' && refTargetsAllOfBranch(root, value.$ref)) {
|
|
@@ -1103,6 +1118,7 @@ function preserveAllOfRefTargets(root, rootOnly = false) {
|
|
|
1103
1118
|
}
|
|
1104
1119
|
}
|
|
1105
1120
|
forEachJSONSchemaChild(value, [], (child) => {
|
|
1121
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
1106
1122
|
collectRefs(child);
|
|
1107
1123
|
});
|
|
1108
1124
|
};
|
|
@@ -1118,6 +1134,7 @@ function preserveAllOfRefTargets(root, rootOnly = false) {
|
|
|
1118
1134
|
let aliasIndex = 0;
|
|
1119
1135
|
for (const ref of refsToPreserve) {
|
|
1120
1136
|
const target = resolveLocalRef(root, ref);
|
|
1137
|
+
// oxlint-disable-next-line anti-slop/no-known-value-widening -- Local references require runtime schema validation even when the static return type is narrower.
|
|
1121
1138
|
if (!isSchemaDefinition(target)) {
|
|
1122
1139
|
if (rootOnly) {
|
|
1123
1140
|
continue;
|
|
@@ -1132,13 +1149,14 @@ function preserveAllOfRefTargets(root, rootOnly = false) {
|
|
|
1132
1149
|
rewrittenRefs.set(ref, '#/$defs/' + escapeJSONPointerToken(alias));
|
|
1133
1150
|
}
|
|
1134
1151
|
const rewriteRefs = (value) => {
|
|
1135
|
-
if (
|
|
1152
|
+
if (!isObject(value)) {
|
|
1136
1153
|
return;
|
|
1137
1154
|
}
|
|
1138
1155
|
if (typeof value.$ref === 'string') {
|
|
1139
1156
|
value.$ref = rewrittenRefs.get(value.$ref) ?? value.$ref;
|
|
1140
1157
|
}
|
|
1141
1158
|
forEachJSONSchemaChild(value, [], (child) => {
|
|
1159
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
1142
1160
|
rewriteRefs(child);
|
|
1143
1161
|
});
|
|
1144
1162
|
};
|
|
@@ -1155,7 +1173,7 @@ function preserveDiscardedAllOfPropertyRefTargets(root, discardedPaths) {
|
|
|
1155
1173
|
}
|
|
1156
1174
|
const refsToPreserve = new Set();
|
|
1157
1175
|
const collectRefs = (value) => {
|
|
1158
|
-
if (
|
|
1176
|
+
if (!isObject(value)) {
|
|
1159
1177
|
return;
|
|
1160
1178
|
}
|
|
1161
1179
|
if (typeof value.$ref === 'string') {
|
|
@@ -1167,6 +1185,7 @@ function preserveDiscardedAllOfPropertyRefTargets(root, discardedPaths) {
|
|
|
1167
1185
|
}
|
|
1168
1186
|
}
|
|
1169
1187
|
forEachJSONSchemaChild(value, [], (child) => {
|
|
1188
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
1170
1189
|
collectRefs(child);
|
|
1171
1190
|
});
|
|
1172
1191
|
};
|
|
@@ -1182,6 +1201,7 @@ function preserveDiscardedAllOfPropertyRefTargets(root, discardedPaths) {
|
|
|
1182
1201
|
let aliasIndex = 0;
|
|
1183
1202
|
for (const ref of refsToPreserve) {
|
|
1184
1203
|
const target = resolveLocalRef(root, ref);
|
|
1204
|
+
// oxlint-disable-next-line anti-slop/no-known-value-widening -- Validate referenced schema values at runtime before preserving them under generated definitions.
|
|
1185
1205
|
if (!isSchemaDefinition(target)) {
|
|
1186
1206
|
throw new Error('Local $ref cannot be preserved before allOf property removal: ' + JSON.stringify(ref));
|
|
1187
1207
|
}
|
|
@@ -1193,20 +1213,21 @@ function preserveDiscardedAllOfPropertyRefTargets(root, discardedPaths) {
|
|
|
1193
1213
|
rewrittenRefs.set(ref, '#/$defs/' + escapeJSONPointerToken(alias));
|
|
1194
1214
|
}
|
|
1195
1215
|
const rewriteRefs = (value) => {
|
|
1196
|
-
if (
|
|
1216
|
+
if (!isObject(value)) {
|
|
1197
1217
|
return;
|
|
1198
1218
|
}
|
|
1199
1219
|
if (typeof value.$ref === 'string') {
|
|
1200
1220
|
value.$ref = rewrittenRefs.get(value.$ref) ?? value.$ref;
|
|
1201
1221
|
}
|
|
1202
1222
|
forEachJSONSchemaChild(value, [], (child) => {
|
|
1223
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
1203
1224
|
rewriteRefs(child);
|
|
1204
1225
|
});
|
|
1205
1226
|
};
|
|
1206
1227
|
rewriteRefs(root);
|
|
1207
1228
|
}
|
|
1208
1229
|
function validateRefSchemas(schema, path, root) {
|
|
1209
|
-
if (
|
|
1230
|
+
if (!isObject(schema)) {
|
|
1210
1231
|
return;
|
|
1211
1232
|
}
|
|
1212
1233
|
const ref = schema.$ref;
|
|
@@ -1218,6 +1239,7 @@ function validateRefSchemas(schema, path, root) {
|
|
|
1218
1239
|
throw new Error(`External $ref at \`${path.join('/') || '<root>'}\` is not supported in strict Structured Outputs: ${JSON.stringify(ref)}`);
|
|
1219
1240
|
}
|
|
1220
1241
|
const resolved = resolveLocalRef(root, ref);
|
|
1242
|
+
// oxlint-disable-next-line anti-slop/no-known-value-widening -- Untrusted local references must pass the runtime schema predicate before normalization.
|
|
1221
1243
|
if (resolved === undefined || !isSchemaDefinition(resolved)) {
|
|
1222
1244
|
throw new Error(`Local $ref at \`${path.join('/') || '<root>'}\` does not resolve to an object or boolean schema: ${JSON.stringify(ref)}`);
|
|
1223
1245
|
}
|
|
@@ -1229,6 +1251,7 @@ function validateRefSchemas(schema, path, root) {
|
|
|
1229
1251
|
}
|
|
1230
1252
|
}
|
|
1231
1253
|
forEachJSONSchemaChild(schema, path, (child, childPath) => {
|
|
1254
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
1232
1255
|
validateRefSchemas(child, childPath, root);
|
|
1233
1256
|
});
|
|
1234
1257
|
}
|
|
@@ -1251,7 +1274,7 @@ function resolveObjectAllOfBranch(schema, root, normalizing) {
|
|
|
1251
1274
|
}
|
|
1252
1275
|
seenRefs.add(ref);
|
|
1253
1276
|
const target = resolveLocalRef(root, ref);
|
|
1254
|
-
if (
|
|
1277
|
+
if (!isObject(target)) {
|
|
1255
1278
|
return undefined;
|
|
1256
1279
|
}
|
|
1257
1280
|
const targetPath = parseLocalRef(ref);
|
|
@@ -1279,7 +1302,7 @@ function resolveObjectAllOfBranch(schema, root, normalizing) {
|
|
|
1279
1302
|
}
|
|
1280
1303
|
}
|
|
1281
1304
|
function normalizeObjectAllOfBranches(schema, path, root, normalizing = new Set()) {
|
|
1282
|
-
if (
|
|
1305
|
+
if (!isObject(schema)) {
|
|
1283
1306
|
return;
|
|
1284
1307
|
}
|
|
1285
1308
|
if (normalizing.has(schema)) {
|
|
@@ -1289,6 +1312,7 @@ function normalizeObjectAllOfBranches(schema, path, root, normalizing = new Set(
|
|
|
1289
1312
|
try {
|
|
1290
1313
|
while (true) {
|
|
1291
1314
|
forEachJSONSchemaChild(schema, path, (child, childPath) => {
|
|
1315
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
1292
1316
|
normalizeObjectAllOfBranches(child, childPath, root, normalizing);
|
|
1293
1317
|
});
|
|
1294
1318
|
// Intersections are associative, so normalize nested object
|
|
@@ -1328,13 +1352,14 @@ export function normalizeObjectAllOfForExclusivity(schema, root) {
|
|
|
1328
1352
|
return undefined;
|
|
1329
1353
|
}
|
|
1330
1354
|
const branch = allOf[0];
|
|
1331
|
-
if (
|
|
1355
|
+
if (!isObject(branch)) {
|
|
1332
1356
|
return undefined;
|
|
1333
1357
|
}
|
|
1334
1358
|
const siblings = { ...normalized };
|
|
1335
1359
|
delete siblings.allOf;
|
|
1336
1360
|
const flattened = structuredClone(branch);
|
|
1337
1361
|
for (const keyword of Object.keys(normalized)) {
|
|
1362
|
+
// SAFETY: Only an enumerated own keyword is deleted from this mutable schema object before installing its normalized replacement.
|
|
1338
1363
|
delete normalized[keyword];
|
|
1339
1364
|
}
|
|
1340
1365
|
assignSchema(normalized, flattened, siblings);
|
|
@@ -1371,23 +1396,23 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
|
|
|
1371
1396
|
}
|
|
1372
1397
|
return true;
|
|
1373
1398
|
}
|
|
1374
|
-
const
|
|
1399
|
+
const parentIsMergeableObject = isMergeableObjectSchema(jsonSchema);
|
|
1375
1400
|
const resolvedEntries = allOf.map((entry) => isObject(entry) ? resolveObjectAllOfBranch(entry, root, normalizing) : undefined);
|
|
1376
1401
|
const objectBranches = resolvedEntries
|
|
1377
1402
|
.map((entry) => entry?.schema)
|
|
1378
|
-
.filter((entry) => entry !== undefined &&
|
|
1379
|
-
if (!
|
|
1403
|
+
.filter((entry) => entry !== undefined && isMergeableObjectSchema(entry));
|
|
1404
|
+
if (!parentIsMergeableObject && objectBranches.length === 0) {
|
|
1380
1405
|
return false;
|
|
1381
1406
|
}
|
|
1382
1407
|
// A lone object branch with no object-valued parent is handled by the
|
|
1383
1408
|
// existing safe single-allOf flattening path below.
|
|
1384
|
-
if (!
|
|
1409
|
+
if (!parentIsMergeableObject && allOf.length === 1) {
|
|
1385
1410
|
return false;
|
|
1386
1411
|
}
|
|
1387
1412
|
const fail = () => {
|
|
1388
1413
|
throw new Error(`Object allOf at \`${path.join('/') || '<root>'}\` cannot be merged without changing Draft 7 validation.`);
|
|
1389
1414
|
};
|
|
1390
|
-
if (!
|
|
1415
|
+
if (!parentIsMergeableObject &&
|
|
1391
1416
|
['additionalProperties', 'properties', 'required', 'type'].some((keyword) => keyword in jsonSchema)) {
|
|
1392
1417
|
fail();
|
|
1393
1418
|
}
|
|
@@ -1401,7 +1426,7 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
|
|
|
1401
1426
|
}
|
|
1402
1427
|
}
|
|
1403
1428
|
const branches = [];
|
|
1404
|
-
if (
|
|
1429
|
+
if (parentIsMergeableObject) {
|
|
1405
1430
|
branches.push({ schema: jsonSchema, sourcePath: path });
|
|
1406
1431
|
}
|
|
1407
1432
|
for (const [index, entry] of allOf.entries()) {
|
|
@@ -1417,7 +1442,7 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
|
|
|
1417
1442
|
// branch were preserved under stable root definitions before this merge,
|
|
1418
1443
|
// so a valid definitions-only branch can now be discarded like an
|
|
1419
1444
|
// annotation-only branch.
|
|
1420
|
-
if (
|
|
1445
|
+
if (isMergeableObjectSchema(branch)) {
|
|
1421
1446
|
branches.push({
|
|
1422
1447
|
schema: branch,
|
|
1423
1448
|
sourcePath: branch === entry ? [...path, 'allOf', String(index)] : undefined,
|
|
@@ -1428,6 +1453,7 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
|
|
|
1428
1453
|
}
|
|
1429
1454
|
}
|
|
1430
1455
|
const merged = {};
|
|
1456
|
+
// SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
|
|
1431
1457
|
for (const keyword of ['$defs', 'definitions']) {
|
|
1432
1458
|
if (jsonSchema[keyword] !== undefined) {
|
|
1433
1459
|
merged[keyword] = jsonSchema[keyword];
|
|
@@ -1436,10 +1462,13 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
|
|
|
1436
1462
|
if (path.length === 0) {
|
|
1437
1463
|
for (const keyword of JSON_SCHEMA_ROOT_METADATA_KEYWORDS) {
|
|
1438
1464
|
if (keyword in jsonSchema) {
|
|
1465
|
+
// SAFETY: Root annotation keywords are copied unchanged between schema objects; the record views preserve their unknown values.
|
|
1466
|
+
// oxlint-disable-next-line anti-slop/no-known-value-widening -- Root annotation keywords are copied dynamically; JSONSchema has no index signature for extension fields. Metadata merging preserves arbitrary annotation/default values under the selected schema keywords.
|
|
1439
1467
|
merged[keyword] = jsonSchema[keyword];
|
|
1440
1468
|
}
|
|
1441
1469
|
}
|
|
1442
1470
|
}
|
|
1471
|
+
// SAFETY: This fresh null-prototype dictionary receives only JSON schema definitions while merging the validated property maps.
|
|
1443
1472
|
const mergedProperties = Object.create(null);
|
|
1444
1473
|
const mergedRequired = new Set();
|
|
1445
1474
|
const closedPropertySets = [];
|
|
@@ -1457,6 +1486,7 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
|
|
|
1457
1486
|
// first value (the outer schema, then earlier branches) instead of
|
|
1458
1487
|
// rejecting an otherwise exactly mergeable intersection.
|
|
1459
1488
|
if (!(keyword in merged)) {
|
|
1489
|
+
// SAFETY: These annotation keywords are copied unchanged from the validated branch; arbitrary values are preserved without narrowing.
|
|
1460
1490
|
merged[keyword] = schema[keyword];
|
|
1461
1491
|
}
|
|
1462
1492
|
}
|
|
@@ -1475,6 +1505,7 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
|
|
|
1475
1505
|
if (keyword === 'allOf' && branch === jsonSchema) {
|
|
1476
1506
|
continue;
|
|
1477
1507
|
}
|
|
1508
|
+
// SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
|
|
1478
1509
|
if ((keyword === '$defs' || keyword === 'definitions') &&
|
|
1479
1510
|
isObject(branch[keyword])) {
|
|
1480
1511
|
continue;
|
|
@@ -1559,6 +1590,7 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
|
|
|
1559
1590
|
if (collapsesToNull) {
|
|
1560
1591
|
merged.type = 'null';
|
|
1561
1592
|
for (const keyword of Object.keys(jsonSchema)) {
|
|
1593
|
+
// SAFETY: Only an enumerated own keyword is deleted from this mutable schema object before installing its normalized replacement.
|
|
1562
1594
|
delete jsonSchema[keyword];
|
|
1563
1595
|
}
|
|
1564
1596
|
assignSchema(jsonSchema, merged);
|
|
@@ -1588,18 +1620,20 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
|
|
|
1588
1620
|
merged.additionalProperties = false;
|
|
1589
1621
|
}
|
|
1590
1622
|
for (const keyword of Object.keys(jsonSchema)) {
|
|
1623
|
+
// SAFETY: Only an enumerated own keyword is deleted from this mutable schema object before installing its normalized replacement.
|
|
1591
1624
|
delete jsonSchema[keyword];
|
|
1592
1625
|
}
|
|
1593
1626
|
assignSchema(jsonSchema, merged);
|
|
1594
1627
|
return true;
|
|
1595
1628
|
}
|
|
1596
|
-
function
|
|
1629
|
+
function isMergeableObjectSchema(schema) {
|
|
1597
1630
|
if (schema.type !== undefined) {
|
|
1598
1631
|
return isMergeableObjectType(schema.type);
|
|
1599
1632
|
}
|
|
1600
1633
|
return Object.keys(schema).some((keyword) => JSON_SCHEMA_OBJECT_KEYWORDS.has(keyword));
|
|
1601
1634
|
}
|
|
1602
1635
|
function hasOnlyNeutralAllOfBranchKeywords(schema) {
|
|
1636
|
+
// SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
|
|
1603
1637
|
const schemaRecord = schema;
|
|
1604
1638
|
return Object.keys(schema).every((keyword) => JSON_SCHEMA_ANNOTATION_KEYWORDS.has(keyword) ||
|
|
1605
1639
|
((keyword === '$defs' || keyword === 'definitions') && isObject(schemaRecord[keyword])));
|
|
@@ -1621,7 +1655,9 @@ function schemasEqual(left, right) {
|
|
|
1621
1655
|
if (typeof left !== 'object' || left === null || typeof right !== 'object' || right === null) {
|
|
1622
1656
|
return false;
|
|
1623
1657
|
}
|
|
1658
|
+
// SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
|
|
1624
1659
|
const leftRecord = left;
|
|
1660
|
+
// SAFETY: This is an object schema at this traversal point; the record view permits dynamic keyword access while individual values remain subject to schema checks.
|
|
1625
1661
|
const rightRecord = right;
|
|
1626
1662
|
const leftKeys = Object.keys(leftRecord);
|
|
1627
1663
|
const rightKeys = Object.keys(rightRecord);
|