openai 7.16.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 +28 -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 +5 -0
- package/bedrock.js.map +1 -1
- package/bedrock.mjs +5 -0
- 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 +1 -0
- package/client.d.mts.map +1 -1
- package/client.d.ts +1 -0
- package/client.d.ts.map +1 -1
- package/client.js +27 -6
- package/client.js.map +1 -1
- package/client.mjs +27 -6
- 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/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.map +1 -1
- package/internal/utils/abort.d.ts.map +1 -1
- package/internal/utils/abort.js +9 -2
- package/internal/utils/abort.js.map +1 -1
- package/internal/utils/abort.mjs +9 -2
- package/internal/utils/abort.mjs.map +1 -1
- 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 +9 -0
- package/internal/ws.d.mts.map +1 -1
- package/internal/ws.d.ts +9 -0
- package/internal/ws.d.ts.map +1 -1
- package/internal/ws.js +36 -4
- package/internal/ws.js.map +1 -1
- package/internal/ws.mjs +35 -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/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 -12
- package/resources/beta/responses/internal-base.js.map +1 -1
- package/resources/beta/responses/internal-base.mjs +21 -12
- 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 +5 -1
- package/resources/beta/responses/ws-base.d.mts.map +1 -1
- package/resources/beta/responses/ws-base.d.ts +5 -1
- package/resources/beta/responses/ws-base.d.ts.map +1 -1
- package/resources/beta/responses/ws-base.js +2 -4
- package/resources/beta/responses/ws-base.js.map +1 -1
- package/resources/beta/responses/ws-base.mjs +2 -4
- package/resources/beta/responses/ws-base.mjs.map +1 -1
- package/resources/beta/responses/ws.d.mts +2 -0
- package/resources/beta/responses/ws.d.mts.map +1 -1
- package/resources/beta/responses/ws.d.ts +2 -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/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/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 -12
- package/resources/responses/internal-base.js.map +1 -1
- package/resources/responses/internal-base.mjs +21 -12
- 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 +5 -1
- package/resources/responses/ws-base.d.mts.map +1 -1
- package/resources/responses/ws-base.d.ts +5 -1
- package/resources/responses/ws-base.d.ts.map +1 -1
- package/resources/responses/ws-base.js +2 -4
- package/resources/responses/ws-base.js.map +1 -1
- package/resources/responses/ws-base.mjs +2 -4
- package/resources/responses/ws-base.mjs.map +1 -1
- package/resources/responses/ws.d.mts +2 -0
- package/resources/responses/ws.d.mts.map +1 -1
- package/resources/responses/ws.d.ts +2 -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 +5 -0
- 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 +35 -3
- 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/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 +7 -2
- 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 +44 -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/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 -11
- package/src/resources/beta/responses/responses.ts +58 -0
- package/src/resources/beta/responses/ws-base.ts +7 -5
- package/src/resources/beta/responses/ws.ts +21 -6
- package/src/resources/live/forks/internal-base.ts +24 -5
- package/src/resources/live/internal-base.ts +24 -5
- package/src/resources/live/sideband/internal-base.ts +24 -5
- package/src/resources/responses/api.md +1 -0
- package/src/resources/responses/internal-base.ts +24 -11
- package/src/resources/responses/responses.ts +41 -0
- package/src/resources/responses/ws-base.ts +7 -5
- package/src/resources/responses/ws.ts +21 -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.js
CHANGED
|
@@ -108,6 +108,7 @@ function assignSchema(target, ...sources) {
|
|
|
108
108
|
* participate.
|
|
109
109
|
*/
|
|
110
110
|
function forEachJSONSchemaChild(schema, path, visit) {
|
|
111
|
+
// 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.
|
|
111
112
|
const record = schema;
|
|
112
113
|
for (const keyword of JSON_SCHEMA_SINGLE_SCHEMA_KEYWORDS) {
|
|
113
114
|
if (keyword in record) {
|
|
@@ -180,10 +181,11 @@ function toStrictJsonSchema(schema) {
|
|
|
180
181
|
return strictSchema;
|
|
181
182
|
}
|
|
182
183
|
function stripUndefinedSchemaKeywords(schema, visited = new Set()) {
|
|
183
|
-
if (
|
|
184
|
+
if (!isObject(schema) || visited.has(schema)) {
|
|
184
185
|
return;
|
|
185
186
|
}
|
|
186
187
|
visited.add(schema);
|
|
188
|
+
// 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.
|
|
187
189
|
const schemaRecord = schema;
|
|
188
190
|
for (const keyword of Object.keys(schemaRecord)) {
|
|
189
191
|
if (schemaRecord[keyword] === undefined) {
|
|
@@ -191,6 +193,7 @@ function stripUndefinedSchemaKeywords(schema, visited = new Set()) {
|
|
|
191
193
|
}
|
|
192
194
|
}
|
|
193
195
|
forEachJSONSchemaChild(schema, [], (child) => {
|
|
196
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
194
197
|
stripUndefinedSchemaKeywords(child, visited);
|
|
195
198
|
});
|
|
196
199
|
}
|
|
@@ -266,6 +269,7 @@ function inlineRootRefObject(schema) {
|
|
|
266
269
|
}
|
|
267
270
|
for (const keyword of JSON_SCHEMA_ANNOTATION_KEYWORDS) {
|
|
268
271
|
if (!(keyword in inheritedAnnotations) && keyword in target) {
|
|
272
|
+
// 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.
|
|
269
273
|
inheritedAnnotations[keyword] = target[keyword];
|
|
270
274
|
}
|
|
271
275
|
}
|
|
@@ -284,6 +288,7 @@ function inlineRootRefObject(schema) {
|
|
|
284
288
|
delete inlined[keyword];
|
|
285
289
|
}
|
|
286
290
|
}
|
|
291
|
+
// 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.
|
|
287
292
|
const schemaRecord = schema;
|
|
288
293
|
for (const keyword of Object.keys(schema)) {
|
|
289
294
|
delete schemaRecord[keyword];
|
|
@@ -322,12 +327,13 @@ function normalizeRootAllOf(schema) {
|
|
|
322
327
|
return;
|
|
323
328
|
}
|
|
324
329
|
const branch = allOf[0];
|
|
325
|
-
if (
|
|
330
|
+
if (!isObject(branch)) {
|
|
326
331
|
return;
|
|
327
332
|
}
|
|
328
333
|
const rootMetadata = { ...schema };
|
|
329
334
|
delete rootMetadata.allOf;
|
|
330
335
|
const normalized = structuredClone(branch);
|
|
336
|
+
// 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.
|
|
331
337
|
const schemaRecord = schema;
|
|
332
338
|
for (const keyword of Object.keys(schema)) {
|
|
333
339
|
delete schemaRecord[keyword];
|
|
@@ -356,7 +362,7 @@ function normalizeRootAnyOf(schema) {
|
|
|
356
362
|
return false;
|
|
357
363
|
}
|
|
358
364
|
const { branch, index: branchIndex } = realBranches[0];
|
|
359
|
-
if (
|
|
365
|
+
if (!isObject(branch) || !isObjectOnlySchema(branch, schema)) {
|
|
360
366
|
return false;
|
|
361
367
|
}
|
|
362
368
|
const definitionRenames = planPromotedRootAnyOfDefinitionRenames(schema, branch);
|
|
@@ -383,6 +389,7 @@ function normalizeRootAnyOf(schema) {
|
|
|
383
389
|
normalized[keyword] = mergedDefinitions;
|
|
384
390
|
delete rootMetadata[keyword];
|
|
385
391
|
}
|
|
392
|
+
// 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.
|
|
386
393
|
const schemaRecord = schema;
|
|
387
394
|
for (const keyword of Object.keys(schema)) {
|
|
388
395
|
delete schemaRecord[keyword];
|
|
@@ -447,13 +454,14 @@ function rewriteLocalRefsIntoPromotedRootAnyOfBranch(root, branchIndex, definiti
|
|
|
447
454
|
: '#/' + promotedParts.map(encodeJSONPointerTokenForURIFragment).join('/');
|
|
448
455
|
};
|
|
449
456
|
const rewriteRefs = (value) => {
|
|
450
|
-
if (
|
|
457
|
+
if (!isObject(value)) {
|
|
451
458
|
return;
|
|
452
459
|
}
|
|
453
460
|
if (typeof value.$ref === 'string') {
|
|
454
461
|
value.$ref = rewriteRef(value.$ref);
|
|
455
462
|
}
|
|
456
463
|
forEachJSONSchemaChild(value, [], (child) => {
|
|
464
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
457
465
|
rewriteRefs(child);
|
|
458
466
|
});
|
|
459
467
|
};
|
|
@@ -481,13 +489,14 @@ function hasOnlyRootRefAndDefinitions(schema) {
|
|
|
481
489
|
* Multi-type arrays carry real union semantics and must remain unchanged.
|
|
482
490
|
*/
|
|
483
491
|
function normalizeSingletonTypeArrays(schema) {
|
|
484
|
-
if (
|
|
492
|
+
if (!isObject(schema)) {
|
|
485
493
|
return;
|
|
486
494
|
}
|
|
487
495
|
if (Array.isArray(schema.type) && schema.type.length === 1) {
|
|
488
496
|
schema.type = schema.type[0];
|
|
489
497
|
}
|
|
490
498
|
forEachJSONSchemaChild(schema, [], (child) => {
|
|
499
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
491
500
|
normalizeSingletonTypeArrays(child);
|
|
492
501
|
});
|
|
493
502
|
}
|
|
@@ -578,7 +587,7 @@ function ensureStrictJsonSchema(jsonSchema, path, root) {
|
|
|
578
587
|
// keywords without an explicit type, so those implicit object shapes need
|
|
579
588
|
// the same strict handling as type: 'object'. Explicitly open object schemas
|
|
580
589
|
// cannot be represented in Structured Outputs strict mode.
|
|
581
|
-
if (
|
|
590
|
+
if (hasObjectConstraints(jsonSchema)) {
|
|
582
591
|
if (!(0, utils_1.hasOwn)(jsonSchema, 'additionalProperties')) {
|
|
583
592
|
jsonSchema.additionalProperties = false;
|
|
584
593
|
}
|
|
@@ -592,7 +601,7 @@ function ensureStrictJsonSchema(jsonSchema, path, root) {
|
|
|
592
601
|
}
|
|
593
602
|
// Handle object properties
|
|
594
603
|
const properties = jsonSchema.properties;
|
|
595
|
-
if (
|
|
604
|
+
if (hasObjectConstraints(jsonSchema)) {
|
|
596
605
|
for (const key of required) {
|
|
597
606
|
if (!isObject(properties) || !(0, utils_1.hasOwn)(properties, key)) {
|
|
598
607
|
throw new Error(`Object schema at \`${path.join('/') || '<root>'}\` requires property \`${key}\` but does not declare it in \`properties\`.`);
|
|
@@ -639,6 +648,7 @@ function ensureStrictJsonSchema(jsonSchema, path, root) {
|
|
|
639
648
|
}
|
|
640
649
|
}
|
|
641
650
|
normalizeArrayUnionWrapper(jsonSchema, root);
|
|
651
|
+
// 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.
|
|
642
652
|
const schemaRecord = jsonSchema;
|
|
643
653
|
for (const keyword of JSON_SCHEMA_UNSUPPORTED_SCHEMA_KEYWORDS) {
|
|
644
654
|
// Optional converter output often keeps undefined placeholders on the
|
|
@@ -662,6 +672,7 @@ function ensureStrictJsonSchema(jsonSchema, path, root) {
|
|
|
662
672
|
if (typeof child === 'boolean' && (keyword === 'additionalProperties' || keyword === 'additionalItems')) {
|
|
663
673
|
return;
|
|
664
674
|
}
|
|
675
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
665
676
|
ensureStrictJsonSchema(child, childPath, root);
|
|
666
677
|
});
|
|
667
678
|
// Strip `null` defaults as there's no meaningful distinction
|
|
@@ -701,6 +712,7 @@ function parseLocalRef(ref) {
|
|
|
701
712
|
}
|
|
702
713
|
return parts;
|
|
703
714
|
}
|
|
715
|
+
// 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.
|
|
704
716
|
function resolvePointerPart(resolved, part) {
|
|
705
717
|
if (Array.isArray(resolved)) {
|
|
706
718
|
if (!/^(?:0|[1-9]\d*)$/.test(part)) {
|
|
@@ -780,7 +792,7 @@ function isSchemaDefinition(value) {
|
|
|
780
792
|
return typeof value === 'boolean' || isObject(value);
|
|
781
793
|
}
|
|
782
794
|
function isObjectOnlySchema(schema, root, seenRefs = new Set()) {
|
|
783
|
-
if (
|
|
795
|
+
if (!isObject(schema)) {
|
|
784
796
|
return false;
|
|
785
797
|
}
|
|
786
798
|
if (schema.$ref !== undefined) {
|
|
@@ -808,7 +820,7 @@ function isObjectOnlySchema(schema, root, seenRefs = new Set()) {
|
|
|
808
820
|
(Array.isArray(schema.type) && schema.type.length === 1 && schema.type[0] === 'object'));
|
|
809
821
|
}
|
|
810
822
|
function isArrayOnlySchema(schema, root, seenRefs = new Set()) {
|
|
811
|
-
if (
|
|
823
|
+
if (!isObject(schema)) {
|
|
812
824
|
return false;
|
|
813
825
|
}
|
|
814
826
|
if (schema.$ref !== undefined) {
|
|
@@ -846,6 +858,7 @@ function hasOnlyRefAndAnnotations(schema) {
|
|
|
846
858
|
JSON_SCHEMA_ANNOTATION_KEYWORDS.has(keyword));
|
|
847
859
|
}
|
|
848
860
|
function hasOnlyAnnotationSiblings(schema, keyword) {
|
|
861
|
+
// 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.
|
|
849
862
|
const schemaRecord = schema;
|
|
850
863
|
return Object.keys(schema).every(
|
|
851
864
|
// Definition maps do not add sibling validation constraints. Keep them
|
|
@@ -874,7 +887,7 @@ function hasOnlyRootAnyOfMetadataSiblings(schema) {
|
|
|
874
887
|
function hasObjectKeywords(schema) {
|
|
875
888
|
return Object.keys(schema).some((keyword) => JSON_SCHEMA_OBJECT_KEYWORDS.has(keyword));
|
|
876
889
|
}
|
|
877
|
-
function
|
|
890
|
+
function hasObjectConstraints(schema) {
|
|
878
891
|
const typ = schema.type;
|
|
879
892
|
return (typ === 'object' ||
|
|
880
893
|
(Array.isArray(typ) && typ.includes('object')) ||
|
|
@@ -896,7 +909,7 @@ function normalizeObjectUnionWrapper(jsonSchema, path, root) {
|
|
|
896
909
|
if (hasEmptyRequired) {
|
|
897
910
|
delete jsonSchema.required;
|
|
898
911
|
}
|
|
899
|
-
if (!
|
|
912
|
+
if (!hasObjectConstraints(jsonSchema)) {
|
|
900
913
|
return;
|
|
901
914
|
}
|
|
902
915
|
const hasOwnObjectConstraints = Object.keys(jsonSchema).some((keyword) => JSON_SCHEMA_OBJECT_KEYWORDS.has(keyword));
|
|
@@ -941,7 +954,7 @@ function normalizeAnyOfFalseBranches(jsonSchema) {
|
|
|
941
954
|
*/
|
|
942
955
|
function assertNoNestedSchemaIds(schema) {
|
|
943
956
|
const visit = (value, path) => {
|
|
944
|
-
if (
|
|
957
|
+
if (!isObject(value)) {
|
|
945
958
|
return;
|
|
946
959
|
}
|
|
947
960
|
if (path.length > 0 && value.$id !== undefined) {
|
|
@@ -950,6 +963,7 @@ function assertNoNestedSchemaIds(schema) {
|
|
|
950
963
|
' establishes a separate JSON Schema resource scope and cannot be represented in strict Structured Outputs.');
|
|
951
964
|
}
|
|
952
965
|
forEachJSONSchemaChild(value, path, (child, childPath) => {
|
|
966
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
953
967
|
visit(child, childPath);
|
|
954
968
|
});
|
|
955
969
|
};
|
|
@@ -1015,13 +1029,14 @@ function rewriteLocalRefsIntoMovedOneOfBranches(root) {
|
|
|
1015
1029
|
return changed ? '#/' + parts.map(encodeJSONPointerTokenForURIFragment).join('/') : ref;
|
|
1016
1030
|
};
|
|
1017
1031
|
const rewriteRefs = (value) => {
|
|
1018
|
-
if (
|
|
1032
|
+
if (!isObject(value)) {
|
|
1019
1033
|
return;
|
|
1020
1034
|
}
|
|
1021
1035
|
if (typeof value.$ref === 'string') {
|
|
1022
1036
|
value.$ref = rewriteRef(value.$ref);
|
|
1023
1037
|
}
|
|
1024
1038
|
forEachJSONSchemaChild(value, [], (child) => {
|
|
1039
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
1025
1040
|
rewriteRefs(child);
|
|
1026
1041
|
});
|
|
1027
1042
|
};
|
|
@@ -1042,9 +1057,8 @@ function rewriteLocalRefsIntoFilteredAnyOfBranches(root) {
|
|
|
1042
1057
|
let resolved = root;
|
|
1043
1058
|
let changed = false;
|
|
1044
1059
|
for (const [index, part] of originalParts.entries()) {
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
: undefined;
|
|
1060
|
+
// 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.
|
|
1061
|
+
const resolvedRecord = isObject(resolved) ? resolved : undefined;
|
|
1048
1062
|
if (part === 'anyOf' &&
|
|
1049
1063
|
index < originalParts.length - 1 &&
|
|
1050
1064
|
resolvedRecord !== undefined &&
|
|
@@ -1082,13 +1096,14 @@ function rewriteLocalRefsIntoFilteredAnyOfBranches(root) {
|
|
|
1082
1096
|
return changed ? '#/' + rewrittenParts.map(encodeJSONPointerTokenForURIFragment).join('/') : ref;
|
|
1083
1097
|
};
|
|
1084
1098
|
const rewriteRefs = (value) => {
|
|
1085
|
-
if (
|
|
1099
|
+
if (!isObject(value)) {
|
|
1086
1100
|
return;
|
|
1087
1101
|
}
|
|
1088
1102
|
if (typeof value.$ref === 'string') {
|
|
1089
1103
|
value.$ref = rewriteRef(value.$ref);
|
|
1090
1104
|
}
|
|
1091
1105
|
forEachJSONSchemaChild(value, [], (child) => {
|
|
1106
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
1092
1107
|
rewriteRefs(child);
|
|
1093
1108
|
});
|
|
1094
1109
|
};
|
|
@@ -1102,7 +1117,7 @@ function rewriteLocalRefsIntoFilteredAnyOfBranches(root) {
|
|
|
1102
1117
|
function preserveAllOfRefTargets(root, rootOnly = false) {
|
|
1103
1118
|
const refsToPreserve = new Set();
|
|
1104
1119
|
const collectRefs = (value) => {
|
|
1105
|
-
if (
|
|
1120
|
+
if (!isObject(value)) {
|
|
1106
1121
|
return;
|
|
1107
1122
|
}
|
|
1108
1123
|
if (typeof value.$ref === 'string' && refTargetsAllOfBranch(root, value.$ref)) {
|
|
@@ -1112,6 +1127,7 @@ function preserveAllOfRefTargets(root, rootOnly = false) {
|
|
|
1112
1127
|
}
|
|
1113
1128
|
}
|
|
1114
1129
|
forEachJSONSchemaChild(value, [], (child) => {
|
|
1130
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
1115
1131
|
collectRefs(child);
|
|
1116
1132
|
});
|
|
1117
1133
|
};
|
|
@@ -1127,6 +1143,7 @@ function preserveAllOfRefTargets(root, rootOnly = false) {
|
|
|
1127
1143
|
let aliasIndex = 0;
|
|
1128
1144
|
for (const ref of refsToPreserve) {
|
|
1129
1145
|
const target = resolveLocalRef(root, ref);
|
|
1146
|
+
// oxlint-disable-next-line anti-slop/no-known-value-widening -- Local references require runtime schema validation even when the static return type is narrower.
|
|
1130
1147
|
if (!isSchemaDefinition(target)) {
|
|
1131
1148
|
if (rootOnly) {
|
|
1132
1149
|
continue;
|
|
@@ -1141,13 +1158,14 @@ function preserveAllOfRefTargets(root, rootOnly = false) {
|
|
|
1141
1158
|
rewrittenRefs.set(ref, '#/$defs/' + escapeJSONPointerToken(alias));
|
|
1142
1159
|
}
|
|
1143
1160
|
const rewriteRefs = (value) => {
|
|
1144
|
-
if (
|
|
1161
|
+
if (!isObject(value)) {
|
|
1145
1162
|
return;
|
|
1146
1163
|
}
|
|
1147
1164
|
if (typeof value.$ref === 'string') {
|
|
1148
1165
|
value.$ref = rewrittenRefs.get(value.$ref) ?? value.$ref;
|
|
1149
1166
|
}
|
|
1150
1167
|
forEachJSONSchemaChild(value, [], (child) => {
|
|
1168
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
1151
1169
|
rewriteRefs(child);
|
|
1152
1170
|
});
|
|
1153
1171
|
};
|
|
@@ -1164,7 +1182,7 @@ function preserveDiscardedAllOfPropertyRefTargets(root, discardedPaths) {
|
|
|
1164
1182
|
}
|
|
1165
1183
|
const refsToPreserve = new Set();
|
|
1166
1184
|
const collectRefs = (value) => {
|
|
1167
|
-
if (
|
|
1185
|
+
if (!isObject(value)) {
|
|
1168
1186
|
return;
|
|
1169
1187
|
}
|
|
1170
1188
|
if (typeof value.$ref === 'string') {
|
|
@@ -1176,6 +1194,7 @@ function preserveDiscardedAllOfPropertyRefTargets(root, discardedPaths) {
|
|
|
1176
1194
|
}
|
|
1177
1195
|
}
|
|
1178
1196
|
forEachJSONSchemaChild(value, [], (child) => {
|
|
1197
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
1179
1198
|
collectRefs(child);
|
|
1180
1199
|
});
|
|
1181
1200
|
};
|
|
@@ -1191,6 +1210,7 @@ function preserveDiscardedAllOfPropertyRefTargets(root, discardedPaths) {
|
|
|
1191
1210
|
let aliasIndex = 0;
|
|
1192
1211
|
for (const ref of refsToPreserve) {
|
|
1193
1212
|
const target = resolveLocalRef(root, ref);
|
|
1213
|
+
// oxlint-disable-next-line anti-slop/no-known-value-widening -- Validate referenced schema values at runtime before preserving them under generated definitions.
|
|
1194
1214
|
if (!isSchemaDefinition(target)) {
|
|
1195
1215
|
throw new Error('Local $ref cannot be preserved before allOf property removal: ' + JSON.stringify(ref));
|
|
1196
1216
|
}
|
|
@@ -1202,20 +1222,21 @@ function preserveDiscardedAllOfPropertyRefTargets(root, discardedPaths) {
|
|
|
1202
1222
|
rewrittenRefs.set(ref, '#/$defs/' + escapeJSONPointerToken(alias));
|
|
1203
1223
|
}
|
|
1204
1224
|
const rewriteRefs = (value) => {
|
|
1205
|
-
if (
|
|
1225
|
+
if (!isObject(value)) {
|
|
1206
1226
|
return;
|
|
1207
1227
|
}
|
|
1208
1228
|
if (typeof value.$ref === 'string') {
|
|
1209
1229
|
value.$ref = rewrittenRefs.get(value.$ref) ?? value.$ref;
|
|
1210
1230
|
}
|
|
1211
1231
|
forEachJSONSchemaChild(value, [], (child) => {
|
|
1232
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
1212
1233
|
rewriteRefs(child);
|
|
1213
1234
|
});
|
|
1214
1235
|
};
|
|
1215
1236
|
rewriteRefs(root);
|
|
1216
1237
|
}
|
|
1217
1238
|
function validateRefSchemas(schema, path, root) {
|
|
1218
|
-
if (
|
|
1239
|
+
if (!isObject(schema)) {
|
|
1219
1240
|
return;
|
|
1220
1241
|
}
|
|
1221
1242
|
const ref = schema.$ref;
|
|
@@ -1227,6 +1248,7 @@ function validateRefSchemas(schema, path, root) {
|
|
|
1227
1248
|
throw new Error(`External $ref at \`${path.join('/') || '<root>'}\` is not supported in strict Structured Outputs: ${JSON.stringify(ref)}`);
|
|
1228
1249
|
}
|
|
1229
1250
|
const resolved = resolveLocalRef(root, ref);
|
|
1251
|
+
// oxlint-disable-next-line anti-slop/no-known-value-widening -- Untrusted local references must pass the runtime schema predicate before normalization.
|
|
1230
1252
|
if (resolved === undefined || !isSchemaDefinition(resolved)) {
|
|
1231
1253
|
throw new Error(`Local $ref at \`${path.join('/') || '<root>'}\` does not resolve to an object or boolean schema: ${JSON.stringify(ref)}`);
|
|
1232
1254
|
}
|
|
@@ -1238,6 +1260,7 @@ function validateRefSchemas(schema, path, root) {
|
|
|
1238
1260
|
}
|
|
1239
1261
|
}
|
|
1240
1262
|
forEachJSONSchemaChild(schema, path, (child, childPath) => {
|
|
1263
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
1241
1264
|
validateRefSchemas(child, childPath, root);
|
|
1242
1265
|
});
|
|
1243
1266
|
}
|
|
@@ -1260,7 +1283,7 @@ function resolveObjectAllOfBranch(schema, root, normalizing) {
|
|
|
1260
1283
|
}
|
|
1261
1284
|
seenRefs.add(ref);
|
|
1262
1285
|
const target = resolveLocalRef(root, ref);
|
|
1263
|
-
if (
|
|
1286
|
+
if (!isObject(target)) {
|
|
1264
1287
|
return undefined;
|
|
1265
1288
|
}
|
|
1266
1289
|
const targetPath = parseLocalRef(ref);
|
|
@@ -1288,7 +1311,7 @@ function resolveObjectAllOfBranch(schema, root, normalizing) {
|
|
|
1288
1311
|
}
|
|
1289
1312
|
}
|
|
1290
1313
|
function normalizeObjectAllOfBranches(schema, path, root, normalizing = new Set()) {
|
|
1291
|
-
if (
|
|
1314
|
+
if (!isObject(schema)) {
|
|
1292
1315
|
return;
|
|
1293
1316
|
}
|
|
1294
1317
|
if (normalizing.has(schema)) {
|
|
@@ -1298,6 +1321,7 @@ function normalizeObjectAllOfBranches(schema, path, root, normalizing = new Set(
|
|
|
1298
1321
|
try {
|
|
1299
1322
|
while (true) {
|
|
1300
1323
|
forEachJSONSchemaChild(schema, path, (child, childPath) => {
|
|
1324
|
+
// SAFETY: The schema-child visitor supplies only recognized object or boolean schema positions; the recursive helper validates their contents.
|
|
1301
1325
|
normalizeObjectAllOfBranches(child, childPath, root, normalizing);
|
|
1302
1326
|
});
|
|
1303
1327
|
// Intersections are associative, so normalize nested object
|
|
@@ -1337,13 +1361,14 @@ function normalizeObjectAllOfForExclusivity(schema, root) {
|
|
|
1337
1361
|
return undefined;
|
|
1338
1362
|
}
|
|
1339
1363
|
const branch = allOf[0];
|
|
1340
|
-
if (
|
|
1364
|
+
if (!isObject(branch)) {
|
|
1341
1365
|
return undefined;
|
|
1342
1366
|
}
|
|
1343
1367
|
const siblings = { ...normalized };
|
|
1344
1368
|
delete siblings.allOf;
|
|
1345
1369
|
const flattened = structuredClone(branch);
|
|
1346
1370
|
for (const keyword of Object.keys(normalized)) {
|
|
1371
|
+
// SAFETY: Only an enumerated own keyword is deleted from this mutable schema object before installing its normalized replacement.
|
|
1347
1372
|
delete normalized[keyword];
|
|
1348
1373
|
}
|
|
1349
1374
|
assignSchema(normalized, flattened, siblings);
|
|
@@ -1380,23 +1405,23 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
|
|
|
1380
1405
|
}
|
|
1381
1406
|
return true;
|
|
1382
1407
|
}
|
|
1383
|
-
const
|
|
1408
|
+
const parentIsMergeableObject = isMergeableObjectSchema(jsonSchema);
|
|
1384
1409
|
const resolvedEntries = allOf.map((entry) => isObject(entry) ? resolveObjectAllOfBranch(entry, root, normalizing) : undefined);
|
|
1385
1410
|
const objectBranches = resolvedEntries
|
|
1386
1411
|
.map((entry) => entry?.schema)
|
|
1387
|
-
.filter((entry) => entry !== undefined &&
|
|
1388
|
-
if (!
|
|
1412
|
+
.filter((entry) => entry !== undefined && isMergeableObjectSchema(entry));
|
|
1413
|
+
if (!parentIsMergeableObject && objectBranches.length === 0) {
|
|
1389
1414
|
return false;
|
|
1390
1415
|
}
|
|
1391
1416
|
// A lone object branch with no object-valued parent is handled by the
|
|
1392
1417
|
// existing safe single-allOf flattening path below.
|
|
1393
|
-
if (!
|
|
1418
|
+
if (!parentIsMergeableObject && allOf.length === 1) {
|
|
1394
1419
|
return false;
|
|
1395
1420
|
}
|
|
1396
1421
|
const fail = () => {
|
|
1397
1422
|
throw new Error(`Object allOf at \`${path.join('/') || '<root>'}\` cannot be merged without changing Draft 7 validation.`);
|
|
1398
1423
|
};
|
|
1399
|
-
if (!
|
|
1424
|
+
if (!parentIsMergeableObject &&
|
|
1400
1425
|
['additionalProperties', 'properties', 'required', 'type'].some((keyword) => keyword in jsonSchema)) {
|
|
1401
1426
|
fail();
|
|
1402
1427
|
}
|
|
@@ -1410,7 +1435,7 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
|
|
|
1410
1435
|
}
|
|
1411
1436
|
}
|
|
1412
1437
|
const branches = [];
|
|
1413
|
-
if (
|
|
1438
|
+
if (parentIsMergeableObject) {
|
|
1414
1439
|
branches.push({ schema: jsonSchema, sourcePath: path });
|
|
1415
1440
|
}
|
|
1416
1441
|
for (const [index, entry] of allOf.entries()) {
|
|
@@ -1426,7 +1451,7 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
|
|
|
1426
1451
|
// branch were preserved under stable root definitions before this merge,
|
|
1427
1452
|
// so a valid definitions-only branch can now be discarded like an
|
|
1428
1453
|
// annotation-only branch.
|
|
1429
|
-
if (
|
|
1454
|
+
if (isMergeableObjectSchema(branch)) {
|
|
1430
1455
|
branches.push({
|
|
1431
1456
|
schema: branch,
|
|
1432
1457
|
sourcePath: branch === entry ? [...path, 'allOf', String(index)] : undefined,
|
|
@@ -1437,6 +1462,7 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
|
|
|
1437
1462
|
}
|
|
1438
1463
|
}
|
|
1439
1464
|
const merged = {};
|
|
1465
|
+
// 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.
|
|
1440
1466
|
for (const keyword of ['$defs', 'definitions']) {
|
|
1441
1467
|
if (jsonSchema[keyword] !== undefined) {
|
|
1442
1468
|
merged[keyword] = jsonSchema[keyword];
|
|
@@ -1445,10 +1471,13 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
|
|
|
1445
1471
|
if (path.length === 0) {
|
|
1446
1472
|
for (const keyword of JSON_SCHEMA_ROOT_METADATA_KEYWORDS) {
|
|
1447
1473
|
if (keyword in jsonSchema) {
|
|
1474
|
+
// SAFETY: Root annotation keywords are copied unchanged between schema objects; the record views preserve their unknown values.
|
|
1475
|
+
// 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.
|
|
1448
1476
|
merged[keyword] = jsonSchema[keyword];
|
|
1449
1477
|
}
|
|
1450
1478
|
}
|
|
1451
1479
|
}
|
|
1480
|
+
// SAFETY: This fresh null-prototype dictionary receives only JSON schema definitions while merging the validated property maps.
|
|
1452
1481
|
const mergedProperties = Object.create(null);
|
|
1453
1482
|
const mergedRequired = new Set();
|
|
1454
1483
|
const closedPropertySets = [];
|
|
@@ -1466,6 +1495,7 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
|
|
|
1466
1495
|
// first value (the outer schema, then earlier branches) instead of
|
|
1467
1496
|
// rejecting an otherwise exactly mergeable intersection.
|
|
1468
1497
|
if (!(keyword in merged)) {
|
|
1498
|
+
// SAFETY: These annotation keywords are copied unchanged from the validated branch; arbitrary values are preserved without narrowing.
|
|
1469
1499
|
merged[keyword] = schema[keyword];
|
|
1470
1500
|
}
|
|
1471
1501
|
}
|
|
@@ -1484,6 +1514,7 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
|
|
|
1484
1514
|
if (keyword === 'allOf' && branch === jsonSchema) {
|
|
1485
1515
|
continue;
|
|
1486
1516
|
}
|
|
1517
|
+
// 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.
|
|
1487
1518
|
if ((keyword === '$defs' || keyword === 'definitions') &&
|
|
1488
1519
|
isObject(branch[keyword])) {
|
|
1489
1520
|
continue;
|
|
@@ -1568,6 +1599,7 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
|
|
|
1568
1599
|
if (collapsesToNull) {
|
|
1569
1600
|
merged.type = 'null';
|
|
1570
1601
|
for (const keyword of Object.keys(jsonSchema)) {
|
|
1602
|
+
// SAFETY: Only an enumerated own keyword is deleted from this mutable schema object before installing its normalized replacement.
|
|
1571
1603
|
delete jsonSchema[keyword];
|
|
1572
1604
|
}
|
|
1573
1605
|
assignSchema(jsonSchema, merged);
|
|
@@ -1597,18 +1629,20 @@ function mergeObjectAllOf(jsonSchema, path, root, normalizing = new Set()) {
|
|
|
1597
1629
|
merged.additionalProperties = false;
|
|
1598
1630
|
}
|
|
1599
1631
|
for (const keyword of Object.keys(jsonSchema)) {
|
|
1632
|
+
// SAFETY: Only an enumerated own keyword is deleted from this mutable schema object before installing its normalized replacement.
|
|
1600
1633
|
delete jsonSchema[keyword];
|
|
1601
1634
|
}
|
|
1602
1635
|
assignSchema(jsonSchema, merged);
|
|
1603
1636
|
return true;
|
|
1604
1637
|
}
|
|
1605
|
-
function
|
|
1638
|
+
function isMergeableObjectSchema(schema) {
|
|
1606
1639
|
if (schema.type !== undefined) {
|
|
1607
1640
|
return isMergeableObjectType(schema.type);
|
|
1608
1641
|
}
|
|
1609
1642
|
return Object.keys(schema).some((keyword) => JSON_SCHEMA_OBJECT_KEYWORDS.has(keyword));
|
|
1610
1643
|
}
|
|
1611
1644
|
function hasOnlyNeutralAllOfBranchKeywords(schema) {
|
|
1645
|
+
// 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.
|
|
1612
1646
|
const schemaRecord = schema;
|
|
1613
1647
|
return Object.keys(schema).every((keyword) => JSON_SCHEMA_ANNOTATION_KEYWORDS.has(keyword) ||
|
|
1614
1648
|
((keyword === '$defs' || keyword === 'definitions') && isObject(schemaRecord[keyword])));
|
|
@@ -1630,7 +1664,9 @@ function schemasEqual(left, right) {
|
|
|
1630
1664
|
if (typeof left !== 'object' || left === null || typeof right !== 'object' || right === null) {
|
|
1631
1665
|
return false;
|
|
1632
1666
|
}
|
|
1667
|
+
// 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.
|
|
1633
1668
|
const leftRecord = left;
|
|
1669
|
+
// 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.
|
|
1634
1670
|
const rightRecord = right;
|
|
1635
1671
|
const leftKeys = Object.keys(leftRecord);
|
|
1636
1672
|
const rightKeys = Object.keys(rightRecord);
|