UNPKG

@langchain/langgraph

Version:
1 lines 2.96 kB
{"version":3,"file":"adapter.cjs","names":["isStandardJSONSchema","isStandardSchema"],"sources":["../../src/state/adapter.ts"],"sourcesContent":["/**\n * Adapter utilities for working with Standard Schema.\n */\nimport type { SerializableSchema } from \"./types.js\";\nimport { isStandardJSONSchema, isStandardSchema } from \"./types.js\";\n\n/**\n * Get the JSON schema from a SerializableSchema.\n */\nexport function getJsonSchemaFromSchema(\n schema: SerializableSchema | unknown\n): Record<string, unknown> | undefined {\n if (isStandardJSONSchema(schema)) {\n try {\n const standard = schema[\"~standard\"];\n return standard.jsonSchema.input({ target: \"draft-07\" });\n } catch {\n return undefined;\n }\n }\n return undefined;\n}\n\n/**\n * Detect if a schema has a default value by validating `undefined`.\n *\n * Uses the Standard Schema `~standard.validate` API to detect defaults.\n * If the schema accepts `undefined` and returns a value, that value is the default.\n *\n * This approach is library-agnostic and works with any Standard Schema compliant\n * library (Zod, Valibot, ArkType, etc.) without needing to introspect internals.\n *\n * @param schema - The schema to check for a default value.\n * @returns A factory function returning the default, or undefined if no default exists.\n *\n * @example\n * ```ts\n * const getter = getSchemaDefaultGetter(z.string().default(\"hello\"));\n * getter?.(); // \"hello\"\n *\n * const noDefault = getSchemaDefaultGetter(z.string());\n * noDefault; // undefined\n * ```\n */\nexport function getSchemaDefaultGetter(\n schema: SerializableSchema | unknown\n): (() => unknown) | undefined {\n if (schema == null) {\n return undefined;\n }\n\n if (!isStandardSchema(schema)) {\n return undefined;\n }\n\n try {\n const result = schema[\"~standard\"].validate(undefined);\n\n // Handle sync result (not a Promise)\n // Default values are always synchronous - async validation only happens\n // with async refinements, which don't affect default value resolution.\n if (\n result &&\n typeof result === \"object\" &&\n !(\"then\" in result && typeof result.then === \"function\")\n ) {\n const syncResult = result as { issues?: unknown; value?: unknown };\n if (!syncResult.issues) {\n const defaultValue = syncResult.value;\n return () => defaultValue;\n }\n }\n } catch {\n // Validation threw - no default\n }\n\n return undefined;\n}\n"],"mappings":";;;;;AASA,SAAgB,wBACd,QACqC;AACrC,KAAIA,cAAAA,qBAAqB,OAAO,CAC9B,KAAI;AAEF,SADiB,OAAO,aACR,WAAW,MAAM,EAAE,QAAQ,YAAY,CAAC;SAClD;AACN;;;;;;;;;;;;;;;;;;;;;;;;AA2BN,SAAgB,uBACd,QAC6B;AAC7B,KAAI,UAAU,KACZ;AAGF,KAAI,CAACC,cAAAA,iBAAiB,OAAO,CAC3B;AAGF,KAAI;EACF,MAAM,SAAS,OAAO,aAAa,SAAS,KAAA,EAAU;AAKtD,MACE,UACA,OAAO,WAAW,YAClB,EAAE,UAAU,UAAU,OAAO,OAAO,SAAS,aAC7C;GACA,MAAM,aAAa;AACnB,OAAI,CAAC,WAAW,QAAQ;IACtB,MAAM,eAAe,WAAW;AAChC,iBAAa;;;SAGX"}