@plasius/schema 1.2.18 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +207 -1
- package/THIRD_PARTY_NOTICES.md +75 -0
- package/dist/chunk-6FE4FLKF.js +254 -0
- package/dist/chunk-6FE4FLKF.js.map +1 -0
- package/dist/chunk-AG2NAPDC.js +117 -0
- package/dist/chunk-AG2NAPDC.js.map +1 -0
- package/dist/chunk-UQHPDQZX.js +2606 -0
- package/dist/chunk-UQHPDQZX.js.map +1 -0
- package/dist/feedback-diagnostics-BaniQAFS.d.cts +353 -0
- package/dist/feedback-diagnostics-CnsI0B9-.d.ts +353 -0
- package/dist/feedback-diagnostics-vocabulary.cjs +156 -0
- package/dist/feedback-diagnostics-vocabulary.cjs.map +1 -0
- package/dist/feedback-diagnostics-vocabulary.d.cts +70 -0
- package/dist/feedback-diagnostics-vocabulary.d.ts +70 -0
- package/dist/feedback-diagnostics-vocabulary.js +33 -0
- package/dist/feedback-diagnostics-vocabulary.js.map +1 -0
- package/dist/feedback-diagnostics.cjs +2696 -0
- package/dist/feedback-diagnostics.cjs.map +1 -0
- package/dist/feedback-diagnostics.d.cts +2 -0
- package/dist/feedback-diagnostics.d.ts +2 -0
- package/dist/feedback-diagnostics.js +39 -0
- package/dist/feedback-diagnostics.js.map +1 -0
- package/dist/feedback-unicode-profile.cjs +283 -0
- package/dist/feedback-unicode-profile.cjs.map +1 -0
- package/dist/feedback-unicode-profile.d.cts +28 -0
- package/dist/feedback-unicode-profile.d.ts +28 -0
- package/dist/feedback-unicode-profile.js +13 -0
- package/dist/feedback-unicode-profile.js.map +1 -0
- package/dist/index.cjs +2258 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +987 -286
- package/dist/index.d.ts +987 -286
- package/dist/index.js +1532 -2197
- package/dist/index.js.map +1 -1
- package/package.json +36 -12
- package/unicode/feedback-unicode-15.1.0-unassigned.json +13 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/feedback-diagnostics.ts","../src/field.builder.ts","../src/validation/email.RFC5322.ts","../src/validation/phone.E.164.ts","../src/validation/url.WHATWG.ts","../src/validation/uuid.RFC4122.ts","../src/validation/dateTime.ISO8601.ts","../src/validation/countryCode.ISO3166.ts","../src/validation/generalText.OWASP.ts","../src/validation/version.SEMVER2.0.0.ts","../src/validation/richtext.OWASP.ts","../src/validation/languageCode.BCP47.ts","../src/field.ts","../src/feedback-contract-version.ts","../src/feedback-diagnostics-vocabulary.ts","../src/types.ts","../src/pii.ts","../src/schema.ts","../src/feedback-diagnostics.contract.ts"],"sourcesContent":["export {\n FEEDBACK_BACKEND_BUCKETS,\n FEEDBACK_FRAME_RATE_BUCKETS,\n FEEDBACK_FRAME_TIME_BUCKETS,\n FEEDBACK_GAME_COUNTER_CODES,\n FEEDBACK_GAME_COUNTER_MAX_COUNT,\n FEEDBACK_GAME_COUNTER_MAX_ITEMS,\n FEEDBACK_GAME_ERROR_CODES,\n FEEDBACK_GAME_FEATURE_IDS,\n FEEDBACK_GAME_PROVENANCE_CONTRACT_IDS,\n FEEDBACK_GAME_PROVENANCE_CONTRACTS,\n FEEDBACK_GAME_SURFACE_IDS,\n FEEDBACK_RENDERER_BUCKETS,\n FEEDBACK_VIEWPORT_BUCKETS,\n FeedbackGameDiagnosticsSchema,\n validateFeedbackGameDiagnostics,\n} from \"./feedback-diagnostics.contract.js\";\n\nexport { FEEDBACK_CONTRACT_VERSION } from \"./feedback-contract-version.js\";\n\nexport type {\n FeedbackGameDiagnostics,\n FeedbackGameDiagnosticsValidationResult,\n} from \"./feedback-diagnostics.contract.js\";\n","type FieldType = \"string\" | \"number\" | \"boolean\" | \"object\" | \"array\" | \"ref\";\n\nimport { type PII } from \"./pii.js\";\nimport { getSchemaForType } from \"./schema.js\";\nimport type { FieldValidator } from \"./validation.types.js\";\n\nexport type FieldExposure = \"public\" | \"internal\";\n\nfunction mergeValidatorResult(\n previousResult: ReturnType<FieldValidator>,\n nextValid: boolean,\n): ReturnType<FieldValidator> {\n if (previousResult !== true) {\n return previousResult;\n }\n\n return nextValid;\n}\n\nexport class FieldBuilder<TExternal = unknown, TInternal = TExternal> {\n _type!: TExternal;\n _storageType!: TInternal;\n isSystem = false;\n isImmutable = false;\n isRequired = true;\n _validator?: FieldValidator<TInternal>;\n _description: string = \"\";\n _version: string = \"1.0.0\";\n _default?: TInternal | (() => TInternal);\n _upgrade?: (\n value: any,\n ctx: {\n entityFrom: string;\n entityTo: string;\n fieldTo: string;\n fieldName: string;\n }\n ) => { ok: boolean; value?: any; error?: string };\n _shape?: Record<string, FieldBuilder<any>>;\n itemType?: FieldBuilder<any>;\n refType?: string;\n _pii: PII = {\n classification: \"none\",\n action: \"none\",\n logHandling: \"plain\",\n purpose: \"an ordinary value\",\n };\n _exposure: FieldExposure = \"public\";\n enumValues?: readonly TInternal[];\n\n constructor(\n public type: FieldType,\n options: {\n shape?: Record<string, FieldBuilder<any>>;\n itemType?: FieldBuilder<any>;\n refType?: string;\n } = {}\n ) {\n this._shape = options.shape;\n this.itemType = options.itemType;\n this.refType = options.refType;\n }\n\n immutable(): FieldBuilder<TExternal, TInternal> {\n this.isImmutable = true;\n return this;\n }\n\n system(): FieldBuilder<TExternal, TInternal> {\n this.isSystem = true;\n return this;\n }\n\n exposure(exposure: FieldExposure): FieldBuilder<TExternal, TInternal> {\n this._exposure = exposure;\n return this;\n }\n\n internal(): FieldBuilder<TExternal, TInternal> {\n return this.exposure(\"internal\");\n }\n\n public(): FieldBuilder<TExternal, TInternal> {\n return this.exposure(\"public\");\n }\n\n required(): FieldBuilder<TExternal, TInternal> {\n this.isRequired = true;\n return this;\n }\n\n optional(): FieldBuilder<TExternal, TInternal> {\n this.isRequired = false;\n return this;\n }\n\n validator(\n fn: FieldValidator<TInternal>\n ): FieldBuilder<TExternal, TInternal> {\n this._validator = fn;\n return this;\n }\n\n description(desc: string): FieldBuilder<TExternal, TInternal> {\n this._description = desc;\n return this;\n }\n\n default(\n value: TInternal | (() => TInternal)\n ): FieldBuilder<TExternal, TInternal> {\n this._default = value;\n // Supplying a default implies the value may be omitted at input time.\n // Do not couple defaulting with validation.\n this.isRequired = false;\n return this;\n }\n\n /**\n * Configure an upgrader used when validating older entities against a newer schema.\n * The upgrader receives the current field value and version context, and should\n * return { ok: true, value } with the upgraded value, or { ok: false, error }.\n */\n upgrade(\n fn: (\n value: any,\n ctx: {\n entityFrom: string;\n entityTo: string;\n fieldTo: string;\n fieldName: string;\n }\n ) => { ok: boolean; value?: any; error?: string }\n ): FieldBuilder<TExternal, TInternal> {\n this._upgrade = fn;\n return this;\n }\n\n getDefault(): TInternal | undefined {\n const v = this._default;\n return typeof v === \"function\" ? (v as () => TInternal)() : v;\n }\n\n version(ver: string): FieldBuilder<TExternal, TInternal> {\n this._version = ver;\n return this;\n }\n\n /// PID informs the schema PII handling of the manner in\n /// which to handle data relating to this field.\n PID(pii: PII): FieldBuilder<TExternal, TInternal> {\n this._pii = pii;\n return this;\n }\n\n min(min: number): FieldBuilder<TExternal, TInternal> {\n if (this.type === \"number\") {\n const prevValidator = this._validator;\n this._validator = (value: any) => {\n const valid = typeof value === \"number\" && value >= min;\n return prevValidator ? mergeValidatorResult(prevValidator(value), valid) : valid;\n };\n } else if (this.type === \"string\") {\n const prevValidator = this._validator;\n this._validator = (value: any) => {\n const valid = typeof value === \"string\" && value.length >= min;\n return prevValidator ? mergeValidatorResult(prevValidator(value), valid) : valid;\n };\n } else if (this.type === \"array\") {\n const prevValidator = this._validator;\n this._validator = (value: any) => {\n const valid = Array.isArray(value) && value.length >= min;\n return prevValidator ? mergeValidatorResult(prevValidator(value), valid) : valid;\n };\n } else {\n throw new Error(\n \"Min is only supported on number, string, or array fields.\"\n );\n }\n return this;\n }\n\n max(max: number): FieldBuilder<TExternal, TInternal> {\n if (this.type === \"number\") {\n const prevValidator = this._validator;\n this._validator = (value: any) => {\n const valid = typeof value === \"number\" && value <= max;\n return prevValidator ? mergeValidatorResult(prevValidator(value), valid) : valid;\n };\n } else if (this.type === \"string\") {\n const prevValidator = this._validator;\n this._validator = (value: any) => {\n const valid = typeof value === \"string\" && value.length <= max;\n return prevValidator ? mergeValidatorResult(prevValidator(value), valid) : valid;\n };\n } else if (this.type === \"array\") {\n const prevValidator = this._validator;\n this._validator = (value: any) => {\n const valid = Array.isArray(value) && value.length <= max;\n return prevValidator ? mergeValidatorResult(prevValidator(value), valid) : valid;\n };\n } else {\n throw new Error(\n \"Max is only supported on number, string, or array fields.\"\n );\n }\n return this;\n }\n\n pattern(regex: RegExp): FieldBuilder<TExternal, TInternal> {\n if (this.type !== \"string\") {\n throw new Error(\"Pattern is only supported on string fields.\");\n }\n const prevValidator = this._validator;\n this._validator = (value: any) => {\n const valid = typeof value === \"string\" && regex.test(value);\n return prevValidator ? mergeValidatorResult(prevValidator(value), valid) : valid;\n };\n return this;\n }\n\n enum<const U extends readonly TInternal[]>(\n values: U\n ): FieldBuilder<U[number]> {\n if (\n this.type !== \"string\" &&\n this.type !== \"number\" &&\n !(\n this.type === \"array\" &&\n (this.itemType?.type === \"string\" || this.itemType?.type === \"number\")\n )\n ) {\n throw new Error(\n \"Enums are only supported on string or number fields or arrays of strings or numbers.\"\n );\n }\n this.enumValues = values;\n return this as any;\n }\n\n /**\n * Create a shallow clone with a different external type parameter.\n * Note: shape and itemType are passed by reference (shallow). If you need\n * deep isolation of nested FieldBuilders, clone them explicitly.\n */\n as<U>(): FieldBuilder<U, TInternal> {\n const clone = new FieldBuilder<U, TInternal>(this.type, {\n shape: this._shape,\n itemType: this.itemType,\n refType: this.refType,\n });\n clone.enumValues = this.enumValues;\n clone.isImmutable = this.isImmutable;\n clone.isSystem = this.isSystem;\n clone.isRequired = this.isRequired;\n clone._description = this._description;\n clone._version = this._version;\n clone._pii = this._pii;\n clone._exposure = this._exposure;\n clone._validator = this._validator as any;\n clone._default = this._default as any;\n clone._upgrade = this._upgrade;\n // refType already provided in constructor options above\n return clone;\n }\n}\n\nexport default FieldBuilder;\n","/**\n * Validates the package's pragmatic dot-domain mailbox subset.\n *\n * This intentionally does not claim full RFC 5322 mailbox support (for\n * example, quoted local parts and address literals are outside the product\n * contract). The legacy filename is retained for import compatibility.\n */\nexport const validateEmail = (value: unknown): boolean => {\n if (typeof value !== \"string\") return false;\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(value);\n};\n","/**\n * Validates a phone number string in strict E.164 format.\n * Returns true for strings like \"+441632960960\" (max 15 digits, starting with a '+').\n */\nexport const validatePhone = (value: unknown): boolean => {\n if (typeof value !== \"string\") return false;\n const phoneRegex = /^\\+[1-9]\\d{1,14}$/; // E.164 format\n return phoneRegex.test(value);\n};\n","/**\n * Validates a URL string using the WHATWG URL API.\n * Accepts only 'http' or 'https' protocols.\n * Returns true if the URL is syntactically valid.\n */\nexport const validateUrl = (value: unknown): boolean => {\n if (typeof value !== \"string\") return false;\n try {\n const url = new URL(value);\n // Enforce scheme:\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") return false;\n return true;\n } catch {\n return false;\n }\n};\n","/** \n * Validates the RFC 9562 UUID text format, including versions 1-8 plus Nil and\n * Max UUIDs. The legacy filename is retained for import compatibility.\n */ \nexport const validateUUID = (value: unknown): boolean => {\n if (typeof value !== \"string\") return false;\n const standard = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n return standard.test(value)\n || value.toLowerCase() === \"00000000-0000-0000-0000-000000000000\"\n || value.toLowerCase() === \"ffffffff-ffff-ffff-ffff-ffffffffffff\";\n};\n","/**\n * Validates whether a string is a properly formatted ISO 8601 datetime, date, or time.\n * \n * @param value - The value to validate.\n * @param options - Optional settings for validation mode.\n * @param options.mode - The mode of validation:\n * - \"datetime\" (default): Checks full ISO 8601 datetime and equality with toISOString().\n * - \"date\": Validates that the string is in YYYY-MM-DD format and represents a valid date.\n * - \"time\": Validates that the string matches a valid HH:MM:SS(.sss)?Z? ISO 8601 time pattern.\n * @returns True if the value is valid according to the specified mode; otherwise, false.\n */\nexport const validateDateTimeISO = (\n value: unknown,\n options?: { mode?: \"datetime\" | \"date\" | \"time\" }\n): boolean => {\n const mode = options?.mode ?? \"datetime\";\n\n if (typeof value !== \"string\") return false;\n\n if (mode === \"datetime\") {\n // Strict ISO 8601 date-time: YYYY-MM-DDTHH:mm:ss(.fraction)?(Z|±HH:MM)\n const isoDateTimeRegex =\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,9})?(?:Z|[+-]\\d{2}:\\d{2})$/;\n\n if (!isoDateTimeRegex.test(value)) return false;\n\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return false;\n\n // We purposely do NOT require `value === date.toISOString()` because\n // valid ISO8601 inputs may include offsets (e.g., \"+01:00\") or omit\n // milliseconds, both of which produce a different canonical ISO string.\n // The regex ensures strict shape; Date parsing ensures it is a real moment.\n return true;\n }\n\n if (mode === \"date\") {\n // YYYY-MM-DD format\n const dateRegex = /^\\d{4}-\\d{2}-\\d{2}$/;\n if (!dateRegex.test(value)) return false;\n const date = new Date(value);\n if (isNaN(date.getTime())) return false;\n // Ensure the date parts match exactly (to avoid 2023-02-30 being accepted)\n const [year, month, day] = value.split(\"-\").map(Number);\n return (\n date.getUTCFullYear() === year &&\n date.getUTCMonth() + 1 === month &&\n date.getUTCDate() === day\n );\n }\n\n if (mode === \"time\") {\n // HH:MM:SS(.sss)?Z?\n // Hours: 00-23, Minutes: 00-59, Seconds: 00-59, optional fractional seconds, optional Z\n const timeRegex = /^([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(\\.\\d+)?Z?$/;\n return timeRegex.test(value);\n }\n\n return false;\n};\n","export const isoCountryCodes = new Set([\n \"AD\",\n \"AE\",\n \"AF\",\n \"AG\",\n \"AI\",\n \"AL\",\n \"AM\",\n \"AO\",\n \"AQ\",\n \"AR\",\n \"AS\",\n \"AT\",\n \"AU\",\n \"AW\",\n \"AX\",\n \"AZ\",\n \"BA\",\n \"BB\",\n \"BD\",\n \"BE\",\n \"BF\",\n \"BG\",\n \"BH\",\n \"BI\",\n \"BJ\",\n \"BL\",\n \"BM\",\n \"BN\",\n \"BO\",\n \"BQ\",\n \"BR\",\n \"BS\",\n \"BT\",\n \"BV\",\n \"BW\",\n \"BY\",\n \"BZ\",\n \"CA\",\n \"CC\",\n \"CD\",\n \"CF\",\n \"CG\",\n \"CH\",\n \"CI\",\n \"CK\",\n \"CL\",\n \"CM\",\n \"CN\",\n \"CO\",\n \"CR\",\n \"CU\",\n \"CV\",\n \"CW\",\n \"CX\",\n \"CY\",\n \"CZ\",\n \"DE\",\n \"DJ\",\n \"DK\",\n \"DM\",\n \"DO\",\n \"DZ\",\n \"EC\",\n \"EE\",\n \"EG\",\n \"EH\",\n \"ER\",\n \"ES\",\n \"ET\",\n \"FI\",\n \"FJ\",\n \"FM\",\n \"FO\",\n \"FR\",\n \"GA\",\n \"GB\",\n \"GD\",\n \"GE\",\n \"GF\",\n \"GG\",\n \"GH\",\n \"GI\",\n \"GL\",\n \"GM\",\n \"GN\",\n \"GP\",\n \"GQ\",\n \"GR\",\n \"GT\",\n \"GU\",\n \"GW\",\n \"GY\",\n \"HK\",\n \"HM\",\n \"HN\",\n \"HR\",\n \"HT\",\n \"HU\",\n \"ID\",\n \"IE\",\n \"IL\",\n \"IM\",\n \"IN\",\n \"IO\",\n \"IQ\",\n \"IR\",\n \"IS\",\n \"IT\",\n \"JE\",\n \"JM\",\n \"JO\",\n \"JP\",\n \"KE\",\n \"KG\",\n \"KH\",\n \"KI\",\n \"KM\",\n \"KN\",\n \"KP\",\n \"KR\",\n \"KW\",\n \"KY\",\n \"KZ\",\n \"LA\",\n \"LB\",\n \"LC\",\n \"LI\",\n \"LK\",\n \"LR\",\n \"LS\",\n \"LT\",\n \"LU\",\n \"LV\",\n \"LY\",\n \"MA\",\n \"MC\",\n \"MD\",\n \"ME\",\n \"MF\",\n \"MG\",\n \"MH\",\n \"MK\",\n \"ML\",\n \"MM\",\n \"MN\",\n \"MO\",\n \"MP\",\n \"MQ\",\n \"MR\",\n \"MS\",\n \"MT\",\n \"MU\",\n \"MV\",\n \"MW\",\n \"MX\",\n \"MY\",\n \"MZ\",\n \"NA\",\n \"NC\",\n \"NE\",\n \"NF\",\n \"NG\",\n \"NI\",\n \"NL\",\n \"NO\",\n \"NP\",\n \"NR\",\n \"NU\",\n \"NZ\",\n \"OM\",\n \"PA\",\n \"PE\",\n \"PF\",\n \"PG\",\n \"PH\",\n \"PK\",\n \"PL\",\n \"PM\",\n \"PN\",\n \"PR\",\n \"PS\",\n \"PT\",\n \"PW\",\n \"PY\",\n \"QA\",\n \"RE\",\n \"RO\",\n \"RS\",\n \"RU\",\n \"RW\",\n \"SA\",\n \"SB\",\n \"SC\",\n \"SD\",\n \"SE\",\n \"SG\",\n \"SH\",\n \"SI\",\n \"SJ\",\n \"SK\",\n \"SL\",\n \"SM\",\n \"SN\",\n \"SO\",\n \"SR\",\n \"SS\",\n \"ST\",\n \"SV\",\n \"SX\",\n \"SY\",\n \"SZ\",\n \"TC\",\n \"TD\",\n \"TF\",\n \"TG\",\n \"TH\",\n \"TJ\",\n \"TK\",\n \"TL\",\n \"TM\",\n \"TN\",\n \"TO\",\n \"TR\",\n \"TT\",\n \"TV\",\n \"TZ\",\n \"UA\",\n \"UG\",\n \"UM\",\n \"US\",\n \"UY\",\n \"UZ\",\n \"VA\",\n \"VC\",\n \"VE\",\n \"VG\",\n \"VI\",\n \"VN\",\n \"VU\",\n \"WF\",\n \"WS\",\n \"YE\",\n \"YT\",\n \"ZA\",\n \"ZM\",\n \"ZW\",\n]);\n\n/**\n * Validates whether a string is a valid ISO 3166-1 alpha-2 country code. \n * Performs a case-insensitive lookup against a predefined set of known codes.\n */\nexport const validateCountryCode = (value: unknown): boolean => {\n if (typeof value !== \"string\") return false;\n return isoCountryCodes.has(value.toUpperCase());\n};\n","/**\n * Validates that a text field is safe for storage (per OWASP guidelines).\n * Applies to general text fields: names, descriptions, titles, etc.\n * Global Standard: OWASP Input Validation Cheat Sheet (2024)\n */\nexport function validateSafeText(value: unknown): boolean {\n if (typeof value !== \"string\") return false;\n\n // Trimmed version should not be empty\n const trimmed = value.trim();\n if (trimmed.length === 0) return false;\n\n // Reject control chars\n for (let i = 0; i < trimmed.length; i++) {\n const code = trimmed.codePointAt(i);\n if (code !== undefined && (code >= 0x00 && code <= 0x1F || code === 0x7F)) {\n return false;\n }\n }\n\n // Reject dangerous characters\n if (/['\"<>\\\\{}();]/.test(trimmed)) return false;\n\n // Reject SQL-style injection patterns\n if (\n /(--|\\b(SELECT|UPDATE|DELETE|INSERT|DROP|ALTER|EXEC|UNION|GRANT|REVOKE)\\b|\\/\\*|\\*\\/|@@)/i.test(\n trimmed\n )\n )\n return false;\n\n // Reject null char\n if (trimmed.includes(\"\\u0000\")) return false;\n\n // Optional: limit length\n if (trimmed.length > 1024) return false;\n\n return true;\n}\n","/**\n * Validates that a version string conforms to Semantic Versioning (SemVer 2.0.0).\n * Global Standard: https://semver.org/\n */\nexport function validateSemVer(value: unknown): boolean {\n if (typeof value !== \"string\") return false;\n return /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/.test(\n value\n );\n}\n","/**\n * Validates rich text input to ensure it contains only safe HTML/Markdown.\n * Global Standard: OWASP HTML Sanitization Guidelines (2024).\n * This validator checks for dangerous patterns — does not sanitize — assumes text will be sanitized downstream.\n */\nexport function validateRichText(value: unknown): boolean {\n if (typeof value !== \"string\") return false;\n const trimmed = value.trim();\n if (trimmed.length === 0) return true; // Allow empty rich text\n\n // Reject known dangerous tags\n if (\n /<(script|iframe|object|embed|style|link|meta|base|form|input|button|textarea|select)\\b/i.test(\n trimmed\n )\n ) {\n return false;\n }\n\n // Reject javascript: links\n if (/javascript:/i.test(trimmed)) {\n return false;\n }\n\n // Reject event handlers (onload, onclick, etc)\n if (/on\\w+=[\"']?/i.test(trimmed)) {\n return false;\n }\n\n // Optionally: limit max length (e.g. 10,000 chars)\n if (trimmed.length > 10000) return false;\n\n return true;\n}\n","/**\n * ISO 639-1 language codes (two-letter).\n * Tip: Keep this list as source of truth for supported languages in your app.\n */\nexport enum IsoLanguageCode {\n Afar = \"aa\",\n Abkhazian = \"ab\",\n Afrikaans = \"af\",\n Akan = \"ak\",\n Albanian = \"sq\",\n Amharic = \"am\",\n Arabic = \"ar\",\n Aragonese = \"an\",\n Armenian = \"hy\",\n Assamese = \"as\",\n Avaric = \"av\",\n Aymara = \"ay\",\n Azerbaijani = \"az\",\n Bashkir = \"ba\",\n Bambara = \"bm\",\n Basque = \"eu\",\n Belarusian = \"be\",\n Bengali = \"bn\",\n Bislama = \"bi\",\n Bosnian = \"bs\",\n Breton = \"br\",\n Bulgarian = \"bg\",\n Burmese = \"my\",\n Catalan = \"ca\",\n Chamorro = \"ch\",\n Chechen = \"ce\",\n Chinese = \"zh\",\n ChurchSlavic = \"cu\",\n Chuvash = \"cv\",\n Cornish = \"kw\",\n Corsican = \"co\",\n Cree = \"cr\",\n Croatian = \"hr\",\n Czech = \"cs\",\n Danish = \"da\",\n Divehi = \"dv\",\n Dutch = \"nl\",\n Dzongkha = \"dz\",\n English = \"en\",\n Esperanto = \"eo\",\n Estonian = \"et\",\n Ewe = \"ee\",\n Faroese = \"fo\",\n Fijian = \"fj\",\n Finnish = \"fi\",\n French = \"fr\",\n WesternFrisian = \"fy\",\n Fulah = \"ff\",\n Gaelic = \"gd\",\n Galician = \"gl\",\n Ganda = \"lg\",\n Georgian = \"ka\",\n German = \"de\",\n Greek = \"el\",\n Kalaallisut = \"kl\",\n Guarani = \"gn\",\n Gujarati = \"gu\",\n Haitian = \"ht\",\n Hausa = \"ha\",\n Hebrew = \"he\",\n Herero = \"hz\",\n Hindi = \"hi\",\n HiriMotu = \"ho\",\n Hungarian = \"hu\",\n Icelandic = \"is\",\n Ido = \"io\",\n Igbo = \"ig\",\n Indonesian = \"id\",\n Interlingua = \"ia\",\n Interlingue = \"ie\",\n Inuktitut = \"iu\",\n Inupiaq = \"ik\",\n Irish = \"ga\",\n Italian = \"it\",\n Japanese = \"ja\",\n Javanese = \"jv\",\n Kannada = \"kn\",\n Kanuri = \"kr\",\n Kashmiri = \"ks\",\n Kazakh = \"kk\",\n CentralKhmer = \"km\",\n Kikuyu = \"ki\",\n Kinyarwanda = \"rw\",\n Kyrgyz = \"ky\",\n Komi = \"kv\",\n Kongo = \"kg\",\n Korean = \"ko\",\n Kuanyama = \"kj\",\n Kurdish = \"ku\",\n Lao = \"lo\",\n Latin = \"la\",\n Latvian = \"lv\",\n Limburgan = \"li\",\n Lingala = \"ln\",\n Lithuanian = \"lt\",\n LubaKatanga = \"lu\",\n Luxembourgish = \"lb\",\n Macedonian = \"mk\",\n Malagasy = \"mg\",\n Malay = \"ms\",\n Malayalam = \"ml\",\n Maltese = \"mt\",\n Manx = \"gv\",\n Maori = \"mi\",\n Marathi = \"mr\",\n Marshallese = \"mh\",\n Mongolian = \"mn\",\n Nauru = \"na\",\n Navajo = \"nv\",\n NorthNdebele = \"nd\",\n SouthNdebele = \"nr\",\n Ndonga = \"ng\",\n Nepali = \"ne\",\n Norwegian = \"no\",\n NorwegianBokmal = \"nb\",\n NorwegianNynorsk = \"nn\",\n SichuanYi = \"ii\",\n Occitan = \"oc\",\n Ojibwa = \"oj\",\n Oriya = \"or\",\n Oromo = \"om\",\n Ossetian = \"os\",\n Pali = \"pi\",\n Pashto = \"ps\",\n Persian = \"fa\",\n Polish = \"pl\",\n Portuguese = \"pt\",\n Punjabi = \"pa\",\n Quechua = \"qu\",\n Romansh = \"rm\",\n Romanian = \"ro\",\n Rundi = \"rn\",\n Russian = \"ru\",\n Samoan = \"sm\",\n Sango = \"sg\",\n Sanskrit = \"sa\",\n Sardinian = \"sc\",\n Serbian = \"sr\",\n Shona = \"sn\",\n Sindhi = \"sd\",\n Sinhala = \"si\",\n Slovak = \"sk\",\n Slovenian = \"sl\",\n Somali = \"so\",\n SouthernSotho = \"st\",\n Spanish = \"es\",\n Sundanese = \"su\",\n Swahili = \"sw\",\n Swati = \"ss\",\n Swedish = \"sv\",\n Tagalog = \"tl\",\n Tahitian = \"ty\",\n Tajik = \"tg\",\n Tamil = \"ta\",\n Tatar = \"tt\",\n Telugu = \"te\",\n Thai = \"th\",\n Tibetan = \"bo\",\n Tigrinya = \"ti\",\n Tonga = \"to\",\n Tsonga = \"ts\",\n Tswana = \"tn\",\n Turkish = \"tr\",\n Turkmen = \"tk\",\n Twi = \"tw\",\n Uighur = \"ug\",\n Ukrainian = \"uk\",\n Urdu = \"ur\",\n Uzbek = \"uz\",\n Venda = \"ve\",\n Vietnamese = \"vi\",\n Volapuk = \"vo\",\n Walloon = \"wa\",\n Welsh = \"cy\",\n Wolof = \"wo\",\n Xhosa = \"xh\",\n Yiddish = \"yi\",\n Yoruba = \"yo\",\n Zhuang = \"za\",\n Zulu = \"zu\",\n}\n\n/** Fast lookup set for enum values (lowercase 2-letter codes). */\nconst ISO_LANGUAGE_SET: ReadonlySet<string> = new Set<string>(\n Object.values(IsoLanguageCode)\n);\n\n/** Type guard: primary language must be one of the enum values. */\nexport function isIsoLanguageCode(value: unknown): value is IsoLanguageCode {\n return typeof value === \"string\" && ISO_LANGUAGE_SET.has(value.toLowerCase());\n}\n\n/**\n * Region validator per BCP 47:\n * - ISO 3166-1 alpha-2: 2 uppercase letters (e.g., GB, US)\n * - UN M.49 numeric: 3 digits (e.g., 419 for Latin America)\n *\n * NOTE: This validates *shape* not membership against the 3166 list.\n * If you want hard membership, we can add a Set of all alpha-2 regions.\n */\nexport function isRegionSubtag(value: string): boolean {\n return /^[A-Za-z]{2}$/.test(value) || /^\\d{3}$/.test(value);\n}\n\n/** Script subtag per ISO 15924: one capital + three lowercase (e.g., Latn, Cyrl, Hans). */\nexport function isScriptSubtag(value: string): boolean {\n return /^[A-Za-z]{4}$/.test(value);\n}\n\n/** Variant subtag per BCP 47: 5–8 alnum, or 4 starting with a digit. */\nexport function isVariantSubtag(value: string): boolean {\n return /^([0-9][A-Za-z0-9]{3}|[A-Za-z0-9]{5,8})$/.test(value);\n}\n\n/** Extension sequence: singleton (alnum except 'x') + one or more 2–8 alnum subtags. */\nexport function isExtensionSingleton(value: string): boolean {\n return /^[0-9A-WY-Za-wy-z]$/.test(value); // any alnum except 'x' (private-use)\n}\nexport function isExtensionSubtag(value: string): boolean {\n return /^[A-Za-z0-9]{2,8}$/.test(value);\n}\n\n/** Private-use subtag: 'x' then one or more 1–8 alnum subtags. */\nexport function isPrivateUseSingleton(value: string): boolean {\n return value.toLowerCase() === \"x\";\n}\nexport function isPrivateUseSubtag(value: string): boolean {\n return /^[A-Za-z0-9]{1,8}$/.test(value);\n}\n\n/**\n * Validates:\n * - plain language: \"en\"\n * - language + region: \"en-GB\"\n * - language + script + region: \"sr-Cyrl-RS\"\n * - language + variants: \"sl-rozaj-biske\", \"de-CH-1996\"\n * - extensions: \"en-GB-u-ca-gregory\"\n * - private-use: \"en-x-klingon\" or just \"x-piglatin\"\n *\n * Returns true only if the primary language is in IsoLanguageCode\n * and the rest of the tag conforms to BCP 47 structure.\n */\nexport function validateLanguage(value: unknown): boolean {\n if (typeof value !== \"string\" || value.length === 0) return false;\n\n const parts = value.split(\"-\");\n if (parts.some(part => part.length === 0)) return false;\n const lowerTag = value.toLowerCase();\n if (GRANDFATHERED_TAGS.has(lowerTag)) return true;\n if (parts[0]?.toLowerCase() === \"x\") {\n return parts.length > 1 && parts.slice(1).every(isPrivateUseSubtag);\n }\n let i = 0;\n\n // Supported RFC 5646 §2.2.1 subset: registered ISO 639-1 primaries and\n // three-letter primary shapes. Longer registered primaries require an IANA\n // registry dependency and are deliberately not claimed by this validator.\n const lang = parts[i];\n if (!lang || !/^[A-Za-z]{2,3}$/.test(lang)) return false;\n if (lang.length === 2 && !isIsoLanguageCode(lang)) return false;\n i += 1;\n\n // Up to three extlang subtags may follow a 2-3 letter primary.\n if (lang.length <= 3) {\n let extlangCount = 0;\n while (i < parts.length && extlangCount < 3 && /^[A-Za-z]{3}$/.test(parts[i]!)) {\n i += 1;\n extlangCount += 1;\n }\n }\n\n // 2) optional script\n if (i < parts.length && isScriptSubtag(parts[i] as string)) {\n i += 1;\n }\n\n // 3) optional region\n if (i < parts.length && isRegionSubtag((parts[i] as string).toUpperCase())) {\n // region must be uppercase if alpha; we normalize for check only\n i += 1;\n }\n\n // 4) zero or more variants\n const variants = new Set<string>();\n while (i < parts.length && isVariantSubtag((parts[i] as string))) {\n const variant = parts[i]!.toLowerCase();\n if (variants.has(variant)) return false;\n variants.add(variant);\n i += 1;\n }\n\n // 5) zero or more extensions\n // extension = singleton ; 2–8 ; ( ; 2–8 )*\n const extensionSingletons = new Set<string>();\n while (i < parts.length && isExtensionSingleton((parts[i] as string))) {\n const singleton = parts[i]!.toLowerCase();\n if (extensionSingletons.has(singleton)) return false;\n extensionSingletons.add(singleton);\n i += 1;\n // must have at least one following subtag of length 2–8\n if (!(i < parts.length && isExtensionSubtag(parts[i]!))) return false;\n while (i < parts.length && isExtensionSubtag(parts[i]!)) {\n i += 1;\n }\n }\n\n // 6) optional private-use: 'x' 1*('-' (1*8alnum))\n if (i < parts.length && isPrivateUseSingleton(parts[i]!)) {\n i += 1;\n if (!(i < parts.length && isPrivateUseSubtag(parts[i]!))) return false;\n while (i < parts.length && isPrivateUseSubtag(parts[i]!)) {\n i += 1;\n }\n }\n\n // no leftovers\n return i === parts.length;\n}\n\n/** RFC 5646 §2.1 grandfathered tags, matched case-insensitively. */\nconst GRANDFATHERED_TAGS: ReadonlySet<string> = new Set([\n \"art-lojban\", \"cel-gaulish\", \"en-gb-oed\", \"i-ami\", \"i-bnn\", \"i-default\",\n \"i-enochian\", \"i-hak\", \"i-klingon\", \"i-lux\", \"i-mingo\", \"i-navajo\",\n \"i-pwn\", \"i-tao\", \"i-tay\", \"i-tsu\", \"no-bok\", \"no-nyn\", \"sgn-be-fr\",\n \"sgn-be-nl\", \"sgn-ch-de\", \"zh-guoyu\", \"zh-hakka\", \"zh-min\", \"zh-min-nan\",\n \"zh-xiang\",\n]);\n","import { version } from \"os\";\nimport { FieldBuilder } from \"./field.builder.js\";\nimport { Infer } from \"./infer.js\";\nimport { SchemaShape } from \"./types.js\";\nimport {\n validateCountryCode,\n validateDateTimeISO,\n validateEmail,\n validatePhone,\n validateRichText,\n validateSafeText,\n validateSemVer,\n validateUrl,\n validateUUID,\n} from \"./validation/index.js\";\nimport { validateLanguage } from \"./validation/languageCode.BCP47.js\";\n\nexport const field = {\n string: () => new FieldBuilder<string>(\"string\"),\n number: () => new FieldBuilder<number>(\"number\"),\n boolean: () => new FieldBuilder<boolean>(\"boolean\"),\n object: <T extends Record<string, FieldBuilder>>(fields: T) =>\n new FieldBuilder<T>(\"object\", { shape: fields }),\n array: (itemType: FieldBuilder) => new FieldBuilder(\"array\", { itemType }),\n ref: <S extends SchemaShape>(refType: string) =>\n new FieldBuilder<Infer<S>>(\"ref\", { refType }),\n email: () =>\n new FieldBuilder<string>(\"string\")\n .validator(validateEmail)\n .PID({\n classification: \"high\",\n action: \"encrypt\",\n logHandling: \"redact\",\n purpose: \"an email address\",\n })\n .description(\"An email address\"),\n phone: () =>\n new FieldBuilder<string>(\"string\")\n .validator(validatePhone)\n .PID({\n classification: \"high\",\n action: \"encrypt\",\n logHandling: \"redact\",\n purpose: \"a phone number\",\n })\n .description(\"A phone number\"),\n url: () =>\n new FieldBuilder<string>(\"string\")\n .validator(validateUrl)\n .PID({\n classification: \"low\",\n action: \"hash\",\n logHandling: \"pseudonym\",\n purpose: \"a URL\",\n })\n .description(\"A URL\"),\n uuid: () =>\n new FieldBuilder<string>(\"string\")\n .PID({\n classification: \"low\",\n action: \"hash\",\n logHandling: \"pseudonym\",\n purpose: \"a UUID\",\n })\n .validator(validateUUID)\n .description(\"A UUID\"),\n dateTimeISO: () =>\n new FieldBuilder<string>(\"string\")\n .PID({\n classification: \"none\",\n action: \"none\",\n logHandling: \"plain\",\n purpose: \"a date string\",\n })\n .validator(validateDateTimeISO)\n .description(\"A date string in ISO 8601 format\"),\n dateISO: () =>\n new FieldBuilder<string>(\"string\")\n .PID({\n classification: \"none\",\n action: \"none\",\n logHandling: \"plain\",\n purpose: \"a date string\",\n })\n .validator((s) => validateDateTimeISO(s, { mode: \"date\" }))\n .description(\"A date string in ISO 8601 format (date only)\"),\n timeISO: () =>\n new FieldBuilder<string>(\"string\")\n .PID({\n classification: \"none\",\n action: \"none\",\n logHandling: \"plain\",\n purpose: \"a time string\",\n })\n .validator((s) => validateDateTimeISO(s, { mode: \"time\" }))\n .description(\"A time string in ISO 8601 format (time only)\"),\n richText: () =>\n new FieldBuilder<string>(\"string\")\n .PID({\n classification: \"low\",\n action: \"clear\",\n logHandling: \"omit\",\n purpose: \"rich text content\",\n })\n .validator(validateRichText)\n .description(\"Rich text content, may include basic HTML formatting\"),\n generalText: () =>\n new FieldBuilder<string>(\"string\")\n .PID({\n classification: \"none\",\n action: \"none\",\n logHandling: \"plain\",\n purpose: \"Plain text content\",\n })\n .validator(validateSafeText)\n .description(\"Standard text content, no HTML allowed\"),\n latitude: () =>\n new FieldBuilder<number>(\"number\")\n .PID({\n classification: \"low\",\n action: \"clear\",\n logHandling: \"omit\",\n purpose: \"Latitude in decimal degrees, WGS 84 (ISO 6709)\",\n })\n .min(-90)\n .max(90)\n .description(\"Latitude in decimal degrees, WGS 84 (ISO 6709)\"),\n longitude: () =>\n new FieldBuilder<number>(\"number\")\n .PID({\n classification: \"low\",\n action: \"clear\",\n logHandling: \"omit\",\n purpose: \"Longitude in decimal degrees, WGS 84 (ISO 6709)\",\n })\n .min(-180)\n .max(180)\n .description(\"Longitude in decimal degrees, WGS 84 (ISO 6709)\"),\n version: () =>\n new FieldBuilder<string>(\"string\")\n .validator(validateSemVer)\n .description(\"A semantic version string, e.g. '1.0.0'\"),\n countryCode: () =>\n new FieldBuilder<string>(\"string\")\n .validator(validateCountryCode)\n .description(\"An ISO 3166 country code, e.g. 'US', 'GB', 'FR'\"),\n languageCode: () =>\n new FieldBuilder<string>(\"string\")\n .validator(validateLanguage)\n .description(\n \"An BCP 47 structured language code, primarily ISO 639-1 and optionally with ISO 3166-1 alpha-2 country code, e.g. 'en', 'en-US', 'fr', 'fr-FR'\"\n ),\n};\n","/** Version shared by the first privacy-safe feedback contracts. */\nexport const FEEDBACK_CONTRACT_VERSION = \"1.0.0\";\n","import { FEEDBACK_CONTRACT_VERSION } from \"./feedback-contract-version.js\";\n\nexport { FEEDBACK_CONTRACT_VERSION };\n\n/** Coarse renderer buckets permitted in privacy-safe game diagnostics. */\nexport const FEEDBACK_RENDERER_BUCKETS = [\n \"webgl2\",\n \"webgpu\",\n \"canvas2d\",\n \"unknown\",\n] as const;\n\n/** Coarse execution-backend buckets permitted in game diagnostics. */\nexport const FEEDBACK_BACKEND_BUCKETS = [\n \"browser\",\n \"worker\",\n \"unknown\",\n] as const;\n\n/** Renderer surfaces approved to carry diagnostics in the first contract. */\nexport const FEEDBACK_GAME_SURFACE_IDS = [\n \"site.generator\",\n \"site.gpu-demo\",\n] as const;\n\n/** Exact renderer-owned provenance contracts for approved game surfaces. */\nexport const FEEDBACK_GAME_PROVENANCE_CONTRACTS = [\n {\n surfaceId: \"site.generator\",\n contractId: \"generator.renderer-diagnostics.v1\",\n },\n {\n surfaceId: \"site.gpu-demo\",\n contractId: \"gpu-demo.renderer-diagnostics.v1\",\n },\n] as const;\n\n/** Closed provenance identifiers accepted from the browser. */\nexport const FEEDBACK_GAME_PROVENANCE_CONTRACT_IDS = [\n \"generator.renderer-diagnostics.v1\",\n \"gpu-demo.renderer-diagnostics.v1\",\n] as const;\n\n/** Closed renderer feature identifiers accepted from the browser. */\nexport const FEEDBACK_GAME_FEATURE_IDS = [\n \"renderer.initialisation\",\n \"renderer.frame-loop\",\n \"renderer.asset-loading\",\n \"renderer.input\",\n \"renderer.scene-generation\",\n \"renderer.post-processing\",\n] as const;\n\n/** Closed renderer counter identifiers accepted from the browser. */\nexport const FEEDBACK_GAME_COUNTER_CODES = [\n \"frame-drop\",\n \"device-loss\",\n \"asset-load-failure\",\n \"shader-failure\",\n \"fallback-activation\",\n] as const;\n\n/** Maximum number of distinct coarse counters in one diagnostics packet. */\nexport const FEEDBACK_GAME_COUNTER_MAX_ITEMS = 32;\n\n/** Maximum value accepted for one coarse diagnostics counter. */\nexport const FEEDBACK_GAME_COUNTER_MAX_COUNT = 10_000;\n\n/** Closed renderer error identifiers accepted from the browser. */\nexport const FEEDBACK_GAME_ERROR_CODES = [\n \"renderer.initialisation-failed\",\n \"renderer.device-lost\",\n \"renderer.asset-load-failed\",\n \"renderer.frame-budget-exceeded\",\n \"renderer.shader-failed\",\n \"renderer.unknown\",\n] as const;\n\n/** Coarse viewport buckets; exact dimensions are deliberately excluded. */\nexport const FEEDBACK_VIEWPORT_BUCKETS = [\n \"small-portrait\",\n \"small-landscape\",\n \"medium-portrait\",\n \"medium-landscape\",\n \"large-portrait\",\n \"large-landscape\",\n \"unknown\",\n] as const;\n\n/** Coarse frame-rate buckets permitted in game diagnostics. */\nexport const FEEDBACK_FRAME_RATE_BUCKETS = [\n \"under-15\",\n \"15-29\",\n \"30-59\",\n \"60-plus\",\n \"unknown\",\n] as const;\n\n/** Coarse frame-time buckets permitted in game diagnostics. */\nexport const FEEDBACK_FRAME_TIME_BUCKETS = [\n \"under-17ms\",\n \"17-33ms\",\n \"34-66ms\",\n \"over-66ms\",\n \"unknown\",\n] as const;\n\nfor (const vocabulary of [\n FEEDBACK_RENDERER_BUCKETS,\n FEEDBACK_BACKEND_BUCKETS,\n FEEDBACK_GAME_SURFACE_IDS,\n FEEDBACK_GAME_PROVENANCE_CONTRACTS,\n FEEDBACK_GAME_PROVENANCE_CONTRACT_IDS,\n FEEDBACK_GAME_FEATURE_IDS,\n FEEDBACK_GAME_COUNTER_CODES,\n FEEDBACK_GAME_ERROR_CODES,\n FEEDBACK_VIEWPORT_BUCKETS,\n FEEDBACK_FRAME_RATE_BUCKETS,\n FEEDBACK_FRAME_TIME_BUCKETS,\n]) {\n Object.freeze(vocabulary);\n}\nfor (const entry of FEEDBACK_GAME_PROVENANCE_CONTRACTS) {\n Object.freeze(entry);\n}\n\n/** Fields shared by every coarse, consented game-diagnostics packet. */\ninterface FeedbackGameDiagnosticsBase {\n type: \"feedback-game-diagnostics\";\n version: typeof FEEDBACK_CONTRACT_VERSION;\n consentConfirmed: true;\n renderer: (typeof FEEDBACK_RENDERER_BUCKETS)[number];\n backend: (typeof FEEDBACK_BACKEND_BUCKETS)[number];\n viewportBucket: (typeof FEEDBACK_VIEWPORT_BUCKETS)[number];\n frameRateBucket: (typeof FEEDBACK_FRAME_RATE_BUCKETS)[number];\n frameTimeBucket: (typeof FEEDBACK_FRAME_TIME_BUCKETS)[number];\n featureIds: readonly (typeof FEEDBACK_GAME_FEATURE_IDS)[number][];\n counters: readonly {\n code: (typeof FEEDBACK_GAME_COUNTER_CODES)[number];\n count: number;\n }[];\n errorCodes: readonly (typeof FEEDBACK_GAME_ERROR_CODES)[number][];\n}\n\ntype FeedbackGameProvenanceContract =\n (typeof FEEDBACK_GAME_PROVENANCE_CONTRACTS)[number];\n\ntype FeedbackGameProvenancePair = {\n [SurfaceId in FeedbackGameProvenanceContract[\"surfaceId\"]]: {\n surfaceId: SurfaceId;\n provenanceContractId: Extract<\n FeedbackGameProvenanceContract,\n { surfaceId: SurfaceId }\n >[\"contractId\"];\n };\n}[FeedbackGameProvenanceContract[\"surfaceId\"]];\n\n/**\n * Coarse, consented game facts that cannot express captured pixels.\n *\n * The discriminated union prevents a renderer from pairing one approved\n * surface with another surface's provenance contract at compile time.\n */\nexport type FeedbackGameDiagnostics = FeedbackGameDiagnosticsBase &\n FeedbackGameProvenancePair;\n","import FieldBuilder, { type FieldExposure } from \"./field.builder.js\";\nimport { Infer } from \"./infer.js\";\nimport { PII, PIIAction, PIIClassification, PIILogHandling } from \"./pii.js\";\nimport type { FieldValidator, ValidationIssue } from \"./validation.types.js\";\n\nexport type FieldTypeMap = {\n string: string;\n number: number;\n boolean: boolean;\n object: Record<string, unknown>;\n \"string[]\": string[];\n \"number[]\": number[];\n \"boolean[]\": boolean[];\n \"object[]\": Record<string, unknown>[];\n ref: RefEntityId;\n \"ref[]\": RefEntityId[];\n};\n\nexport type FieldType = keyof FieldTypeMap;\n\nexport type PIIEnforcement = \"strict\" | \"warn\" | \"none\";\n\n/** Supported unknown-field policies in backwards-compatible order. */\nexport const SCHEMA_UNKNOWN_FIELDS_POLICIES = Object.freeze([\n \"strip\",\n \"reject\",\n] as const);\n\n/** Controls whether fields outside a schema shape are stripped or rejected. */\nexport type UnknownFieldsPolicy =\n (typeof SCHEMA_UNKNOWN_FIELDS_POLICIES)[number];\n\n/** Supported schema-identity policies in backwards-compatible order. */\nexport const SCHEMA_IDENTITY_POLICIES = Object.freeze([\n \"compatible\",\n \"exact\",\n] as const);\n\n/** Controls exact enforcement of a schema's declared type and version. */\nexport type SchemaIdentityPolicy =\n (typeof SCHEMA_IDENTITY_POLICIES)[number];\n\n// Schema-level upgrade support\n/** Result returned by a schema upgrade function. */\nexport type SchemaUpgradeResult = {\n ok: boolean;\n /** Upgraded entity (must include all required fields for the new schema). */\n value?: Record<string, any>;\n /** Optional human-readable errors if upgrade fails. */\n errors?: string[];\n};\n\n/**\n * A function that upgrades an entity from an older schema version to a newer one.\n * It should be **pure** and not mutate its arguments.\n */\nexport type SchemaUpgradeFunction = (\n input: Record<string, any>,\n ctx: {\n from: string; // entity.version (or 0.0.0 if missing)\n to: string; // schema.meta.version\n entityType: string;\n /** Describe function for the target schema – useful for dynamic migrations. */\n describe: () => {\n entityType: string;\n version: string;\n shape: Record<string, any>;\n };\n log?: (msg: string) => void;\n }\n) => SchemaUpgradeResult;\n\n// Support for cascading (multi-step) upgrades\nexport type SchemaUpgradeStep = {\n /** The target version this step upgrades to (e.g., \"1.1.0\"). */\n to: string;\n /** The migration function that upgrades from the previous step's version to `to`. */\n run: SchemaUpgradeFunction;\n};\n\n/**\n * Schema-level upgrade specification can be either:\n * - a single `SchemaUpgradeFunction` that handles any from->to, OR\n * - an ordered array of steps, each targeting a specific `to` version, which\n * will be applied sequentially to cascade from the oldest known version to the latest.\n */\nexport type SchemaUpgradeSpec = SchemaUpgradeFunction | SchemaUpgradeStep[];\n\n/**\n * Presence-only metadata supplied to a schema-level validator.\n *\n * Raw input values are intentionally withheld. `wasProvided` distinguishes\n * an omitted optional field from an explicitly supplied `null`/`undefined`.\n */\nexport interface SchemaValidationContext {\n readonly wasProvided: (fieldName: string) => boolean;\n}\n\nexport interface SchemaOptions {\n version?: string;\n table?: string;\n schemaValidator?: (\n value: any,\n context?: SchemaValidationContext,\n ) => boolean;\n piiEnforcement?: PIIEnforcement; // How should PII be enforced?\n /**\n * How validation handles properties not declared by the schema.\n *\n * `strip` preserves the historical behaviour. `reject` is intended for\n * trust boundaries where silently accepting extra data would be unsafe.\n */\n unknownFields?: UnknownFieldsPolicy;\n /**\n * `exact` rejects a mismatched `type` or `version` after any configured\n * upgrade. The backwards-compatible default validates only their field\n * shapes.\n */\n identity?: SchemaIdentityPolicy;\n schemaUpgrade?: SchemaUpgradeStep[] | SchemaUpgradeFunction | undefined; // Optional schema-level upgrader (single function or cascade steps)\n}\n\nexport interface SerializeOptions {\n includeInternal?: boolean;\n}\n\nexport type SchemaShape = Record<string, FieldBuilder<any>>;\n\nexport interface FieldDefinition<T = unknown> {\n type: FieldType;\n __valueType?: T;\n optional?: boolean;\n immutable?: boolean;\n description?: string;\n refType?: string;\n version?: string;\n deprecated?: boolean;\n deprecatedVersion?: string;\n system?: boolean;\n autoValidate?: boolean;\n refPolicy?: \"eager\" | \"lazy\";\n enum?: string[];\n _shape?: SchemaShape;\n pii?: PII;\n exposure?: FieldExposure;\n validator?: FieldValidator<T>;\n}\n\nexport interface ValidateCompositionOptions {\n resolveEntity: (type: string, id: string) => Promise<any | null>;\n validatorContext?: { visited: Set<string> };\n maxDepth?: number;\n log?: (msg: string) => void; // Optional for trace/debug\n onlyFields?: string[]; // NEW\n}\n\n\n\nexport interface Schema<T extends SchemaShape> {\n //// The shape of the schema.\n _shape: T;\n\n //// System metadata about the schema\n meta: { entityType: string; version: string };\n\n //// Methods for schema validation\n schemaValidator: (\n entity: Infer<T>,\n context?: SchemaValidationContext,\n ) => boolean;\n\n /**\n * Runs the optional schema-level upgrade function once, without validating.\n * Useful for offline migrations or testing migration logic.\n */\n upgrade(\n input: Record<string, any>,\n log?: (msg: string) => void\n ): {\n ok: boolean;\n value?: Record<string, any>;\n errors?: string[];\n };\n\n // Validate an input object against the schema\n validate: (\n input: unknown,\n existing?: Record<string, any>\n ) => ValidationResult<Infer<T>>;\n\n // Validate an input object against the schema, with options for composition validation\n validateComposition: (\n entity: Infer<T>,\n options: ValidateCompositionOptions\n ) => Promise<void>;\n\n serialize: (\n input: Record<string, any>,\n options?: SerializeOptions\n ) => Record<string, any>;\n\n //// Optional methods for schema metadata\n\n // Get the tableName for this schema\n tableName?: () => string | undefined; // Optional method to get the table name\n\n //// 🔒 Optional methods for PII handling\n\n // 🔒 Auto-prepare for read (decrypt PII)\n prepareForRead(\n stored: Record<string, any>,\n decryptFn: (value: string) => any | null\n ): Record<string, any>;\n\n // 🔒 Auto-prepare for storage (encrypt/hash PII)\n prepareForStorage(\n input: Record<string, any>,\n encryptFn: (value: any) => string,\n hashFn: (value: any) => string\n ): Record<string, any>;\n\n // 🔒 Sanitize data for logging (e.g., redact PII)\n sanitizeForLog(\n data: Record<string, any>,\n pseudonymFn: (value: any) => string\n ): Record<string, any>;\n\n // 🔒 Get PII audit information\n getPiiAudit(): Array<{\n field: string;\n classification: PIIClassification;\n action: PIIAction;\n logHandling?: PIILogHandling;\n purpose?: string;\n }> | null;\n\n // 🔒 Scrub PII for deletion (e.g., clear or hash sensitive data)\n scrubPiiForDelete(stored: Record<string, any>): Record<string, any>;\n\n describe(): {\n entityType: string;\n version: string;\n shape: Record<\n string,\n {\n type: FieldType;\n optional: boolean;\n immutable: boolean;\n description: string;\n version: string;\n deprecated: boolean;\n deprecatedVersion: string | null;\n system: boolean;\n enum: string[] | null;\n refType: string | null;\n pii: PII | null;\n exposure: FieldExposure;\n }\n >;\n };\n}\n\nexport type DeepReadonly<T> = {\n readonly [K in keyof T]: T[K] extends object\n ? T[K] extends (...args: any[]) => any\n ? T[K]\n : DeepReadonly<T[K]>\n : T[K];\n};\n\nexport interface ValidationResult<T> {\n valid: boolean;\n value?: DeepReadonly<T>;\n errors?: string[];\n issues?: ValidationIssue[];\n}\n\nexport type RefEntityId<T extends string = string> = {\n type: T;\n id: string;\n};\n","export type PIIClassification = \"none\" | \"low\" | \"high\";\n\nexport type PIIAction = \"encrypt\" | \"hash\" | \"clear\" | \"none\";\n\nexport type PIILogHandling = \"redact\" | \"omit\" | \"pseudonym\" | \"plain\";\n\nexport type PiiEnforcement = \"strict\" | \"warn\" | \"none\";\n\nexport interface PII {\n classification: PIIClassification;\n action: PIIAction;\n logHandling?: PIILogHandling; // How should this PII be handled in logs?\n purpose?: string; // optional, for audit: e.g. \"user contact\", \"analytics\"\n}\n\n/**\n * Centralized PII enforcement for field-level validation.\n * Returns { shortCircuit: true } when in strict mode and value is missing for high PII.\n */\nexport function enforcePIIField(\n parentKey: string,\n key: string,\n value: any,\n def: any,\n enforcement: PiiEnforcement = \"none\",\n errors?: string[],\n logger?: { warn: (msg: string) => void }\n): { shortCircuit: boolean } {\n const path = parentKey ? `${parentKey}.${key}` : key;\n if (def?._pii?.classification === \"high\" && (def?.isRequired ?? true)) {\n const missing = value === undefined || value === null || value === \"\";\n if (missing) {\n const msg = `High PII field must not be empty: ${path}`;\n if (enforcement === \"strict\") {\n errors?.push(msg);\n return { shortCircuit: true };\n }\n if (enforcement === \"warn\") {\n logger?.warn?.(`WARN (PII Enforcement): ${msg}`);\n }\n }\n }\n return { shortCircuit: false };\n}\n\n/**\n * Apply storage-time PII transforms based on field definitions in shape.\n */\nexport function prepareForStorage(\n shape: Record<string, any>,\n input: Record<string, any>,\n encryptFn: (value: any) => string,\n hashFn: (value: any) => string\n): Record<string, any> {\n const build = (\n def: any,\n value: any,\n key: string,\n out: any,\n ctx: { parentKey?: string; isArrayItem?: boolean } = {}\n ) => {\n if (!def) return;\n const isMissing = value === undefined || value === null;\n\n // Leaf handling with PII transforms\n if (def._pii?.action === \"encrypt\") {\n if (!isMissing) out[key + \"Encrypted\"] = encryptFn(value);\n return;\n }\n if (def._pii?.action === \"hash\") {\n if (!isMissing) out[key + \"Hash\"] = hashFn(value);\n return;\n }\n if (def._pii?.action === \"clear\") {\n if (!isMissing) out[key] = null;\n return;\n }\n\n if (isMissing && def.isRequired === false) {\n return;\n }\n\n if (def.type === \"object\" && def._shape) {\n const obj: any = {};\n for (const [childKey, childDef] of Object.entries(def._shape)) {\n build(childDef, value?.[childKey], childKey, obj, { parentKey: key });\n }\n out[key] = obj;\n return;\n }\n\n if (def.type === \"array\" && def.itemType && Array.isArray(value)) {\n out[key] = value.map((item: any) => {\n const obj: any = {};\n // Use the array field name for primitive items; unwrap object items\n build(def.itemType, item, key, obj, {\n parentKey: key,\n isArrayItem: true,\n });\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n return obj[key];\n }\n return Object.keys(obj).length > 0 ? obj : item;\n });\n return;\n }\n\n if (def.type === \"ref\") {\n const ref: any = { ...value };\n const refShape = def._shape;\n if (refShape && value) {\n for (const [childKey, childDef] of Object.entries(refShape)) {\n build(childDef, value[childKey], childKey, ref, { parentKey: key });\n }\n }\n out[key] = ref;\n return;\n }\n\n out[key] = value;\n };\n\n const result: any = {};\n for (const key in shape) {\n build(shape[key], input?.[key], key, result);\n }\n return result;\n}\n\n/**\n * Apply read-time PII transforms (e.g., decrypt) based on field definitions in shape.\n */\nexport function prepareForRead(\n shape: Record<string, any>,\n stored: Record<string, any>,\n decryptFn: (value: string) => any\n): Record<string, any> {\n const readValue = (\n def: any,\n key: string,\n container: any,\n ctx: { parentKey?: string; isArrayItem?: boolean } = {}\n ): any => {\n if (!def) return container?.[key];\n const action = def._pii?.action;\n const hasValue =\n container !== undefined &&\n container !== null &&\n Object.prototype.hasOwnProperty.call(container, key);\n if (action === \"encrypt\") {\n const enc =\n container?.[key + \"Encrypted\"] ??\n container?.[`${ctx.parentKey ?? key}Encrypted`];\n return enc === undefined ? undefined : decryptFn(enc);\n }\n if (action === \"hash\") {\n const h =\n container?.[key + \"Hash\"] ?? container?.[`${ctx.parentKey ?? key}Hash`];\n return h === undefined ? undefined : h;\n }\n if (action === \"clear\")\n return container?.hasOwnProperty(key) ? null : undefined;\n if (!hasValue && def.isRequired === false) {\n return undefined;\n }\n\n if (def.type === \"object\" && def._shape) {\n const obj: any = {};\n const source =\n container && Object.prototype.hasOwnProperty.call(container, key)\n ? container[key]\n : container ?? {};\n for (const [childKey, childDef] of Object.entries(def._shape)) {\n const child = readValue(childDef, childKey, source);\n if (child !== undefined) {\n obj[childKey] = child;\n }\n }\n return obj;\n }\n\n if (def.type === \"array\" && def.itemType) {\n const arr = container?.[key];\n if (!Array.isArray(arr)) return arr;\n return arr.map((item: any) =>\n readValue(def.itemType, key, item, { parentKey: key, isArrayItem: true })\n );\n }\n\n if (def.type === \"ref\") {\n const ref = { ...(container?.[key] ?? {}) };\n const refShape = def._shape;\n if (refShape) {\n for (const [childKey, childDef] of Object.entries(refShape)) {\n const child = readValue(childDef, childKey, ref);\n if (child !== undefined) {\n ref[childKey] = child;\n }\n }\n }\n return ref;\n }\n\n return container?.[key];\n };\n\n const result: any = {};\n for (const key in shape) {\n const value = readValue(shape[key], key, stored);\n if (value !== undefined) {\n result[key] = value;\n }\n }\n return result;\n}\n\n/**\n * Sanitize data for logging according to PII logHandling.\n */\nexport function sanitizeForLog(\n shape: Record<string, any>,\n data: Record<string, any>,\n pseudonymFn: (value: any) => string\n): Record<string, any> {\n const visit = (\n def: any,\n value: any,\n ctx: { parentKey?: string } = {}\n ): any => {\n if (!def) return undefined;\n if (\n (value === undefined || value === null) &&\n def.isRequired === false\n ) {\n return undefined;\n }\n const handling = def._pii?.logHandling as PIILogHandling | undefined;\n if (handling === \"omit\") return undefined;\n if (handling === \"redact\") return \"[REDACTED]\";\n if (handling === \"pseudonym\") return pseudonymFn(value);\n\n if (def.type === \"object\" && def._shape) {\n const obj: any = {};\n const src = value ?? {};\n for (const [k, childDef] of Object.entries(def._shape)) {\n const child = visit(childDef, src[k], { parentKey: k });\n if (child !== undefined) obj[k] = child;\n }\n return obj;\n }\n\n if (def.type === \"array\" && def.itemType) {\n if (!Array.isArray(value)) return undefined;\n const arr = value\n .map((v: any) => visit(def.itemType, v, { parentKey: ctx.parentKey }))\n .filter((v) => v !== undefined);\n return arr;\n }\n\n if (def.type === \"ref\") {\n const ref: any = value ? { type: value.type, id: value.id } : {};\n const refShape = def._shape;\n const src = value ?? {};\n if (refShape) {\n for (const [k, childDef] of Object.entries(refShape)) {\n const child = visit(childDef, src[k]);\n if (child !== undefined) ref[k] = child;\n }\n } else if (value) {\n // no nested shape: keep original ref fields\n ref.type = value.type;\n ref.id = value.id;\n }\n return ref;\n }\n\n return value;\n };\n\n const output: any = {};\n for (const key in shape) {\n const child = visit(shape[key], data?.[key]);\n if (child !== undefined) output[key] = child;\n }\n return output;\n}\n\n/**\n * Produce a PII audit list for the given shape.\n */\nexport function getPiiAudit(shape: Record<string, any>): Array<{\n field: string;\n classification: PIIClassification;\n action: PIIAction;\n logHandling?: PIILogHandling;\n purpose?: string;\n}> {\n const piiFields: Array<any> = [];\n const visit = (def: any, path: string) => {\n if (!def) return;\n if (def._pii && def._pii.classification !== \"none\") {\n piiFields.push({\n field: path,\n classification: def._pii.classification,\n action: def._pii.action,\n logHandling: def._pii.logHandling,\n purpose: def._pii.purpose,\n });\n }\n\n if ((def.type === \"object\" || def.type === \"ref\") && def._shape) {\n for (const [childKey, childDef] of Object.entries(def._shape)) {\n visit(childDef, `${path}.${childKey}`);\n }\n }\n\n if (def.type === \"array\" && def.itemType) {\n const itemPath = `${path}[]`;\n if (\n (def.itemType.type === \"object\" || def.itemType.type === \"ref\") &&\n def.itemType._shape\n ) {\n for (const [childKey, childDef] of Object.entries(\n def.itemType._shape,\n )) {\n visit(childDef, `${itemPath}.${childKey}`);\n }\n } else {\n visit(def.itemType, itemPath);\n }\n }\n };\n\n for (const key in shape) {\n visit(shape[key], key);\n }\n return piiFields;\n}\n\n/**\n * Scrub PII fields for delete/retention workflows.\n */\nexport function scrubPiiForDelete(\n shape: Record<string, any>,\n stored: Record<string, any>\n): Record<string, any> {\n const result: any = Array.isArray(stored) ? [...stored] : { ...stored };\n\n const setAtPath = (target: any, path: Array<string | number>, val: any) => {\n let cur = target;\n for (let i = 0; i < path.length - 1; i++) {\n const p = path[i];\n if (p === undefined) return;\n if (cur[p] === undefined) {\n const next = path[i + 1];\n cur[p] = typeof next === \"number\" ? [] : {};\n }\n cur = cur[p];\n }\n const last = path[path.length - 1];\n if (last === undefined) return;\n cur[last] = val;\n };\n\n const visit = (\n def: any,\n host: any,\n path: Array<string | number>,\n keyName: string | number\n ) => {\n if (!def) return;\n\n const applyPath = (targetKey: string) => {\n const last = path[path.length - 1];\n if (last === undefined) return;\n if (typeof last === \"number\") {\n setAtPath(result, [...path, targetKey], null);\n } else {\n setAtPath(result, [...path.slice(0, -1), targetKey], null);\n }\n };\n\n if (def._pii?.action === \"encrypt\") {\n const targetKey = `${keyName}Encrypted`;\n if (host && Object.prototype.hasOwnProperty.call(host, targetKey)) {\n applyPath(targetKey);\n }\n return;\n }\n if (def._pii?.action === \"hash\") {\n const targetKey = `${keyName}Hash`;\n if (host && Object.prototype.hasOwnProperty.call(host, targetKey)) {\n applyPath(targetKey);\n }\n return;\n }\n if (def._pii?.action === \"clear\") {\n if (host && Object.prototype.hasOwnProperty.call(host, keyName)) {\n setAtPath(result, path, null);\n }\n return;\n }\n\n if (def.type === \"object\" && def._shape) {\n const obj =\n host && Object.prototype.hasOwnProperty.call(host, keyName)\n ? host[keyName]\n : host;\n for (const [k, childDef] of Object.entries(def._shape)) {\n visit(childDef, obj, [...path, k], k);\n }\n return;\n }\n\n if (def.type === \"array\" && def.itemType) {\n const arr = host?.[keyName];\n if (Array.isArray(arr)) {\n arr.forEach((item, idx) =>\n visit(def.itemType, item, [...path, idx], keyName)\n );\n }\n return;\n }\n\n if (def.type === \"ref\") {\n const refShape = def._shape;\n const ref = host?.[keyName];\n if (refShape && ref) {\n for (const [k, childDef] of Object.entries(refShape)) {\n visit(childDef, ref, [...path, k], k);\n }\n }\n }\n };\n\n for (const key in shape) {\n visit(shape[key], stored, [key], key);\n }\n\n return result;\n}\n","import { Infer } from \"./infer.js\";\nimport {\n FieldType,\n Schema,\n SchemaOptions,\n SchemaShape,\n PIIEnforcement,\n SchemaValidationContext,\n SchemaUpgradeResult,\n SchemaUpgradeSpec,\n SCHEMA_IDENTITY_POLICIES,\n SCHEMA_UNKNOWN_FIELDS_POLICIES,\n SerializeOptions,\n} from \"./types.js\";\nimport type {\n FieldValidatorResult,\n ValidationIssue,\n ValidationIssueInput,\n} from \"./validation.types.js\";\nimport { field } from \"./field.js\";\nimport { PIIAction, PIIClassification, PIILogHandling } from \"./pii.js\";\nimport {\n enforcePIIField,\n prepareForStorage as piiPrepareForStorage,\n prepareForRead as piiPrepareForRead,\n sanitizeForLog as piiSanitizeForLog,\n getPiiAudit as piiGetPiiAudit,\n scrubPiiForDelete as piiScrubPiiForDelete,\n} from \"./pii.js\";\nimport { FieldBuilder } from \"./field.builder.js\";\nimport { validateSemVer } from \"./validation/version.SEMVER2.0.0.js\";\n\nconst globalSchemaRegistry = new Map<string, Schema<any>>();\n\nfunction deepClone<T>(value: T): T {\n const seen = new WeakMap();\n const cloneAny = (val: any): any => {\n if (val === null || typeof val !== \"object\") return val;\n if (seen.has(val)) throw new TypeError(\"Cannot clone circular structures\");\n if (val instanceof Date) return new Date(val.getTime());\n if (Array.isArray(val)) {\n const arr: any[] = [];\n seen.set(val, arr);\n val.forEach((item) => arr.push(cloneAny(item)));\n return arr;\n }\n const out: any = {};\n seen.set(val, out);\n for (const [k, v] of Object.entries(val)) out[k] = cloneAny(v);\n return out;\n };\n return cloneAny(value);\n}\n\nfunction shouldIncludeField(def: any, options: SerializeOptions): boolean {\n return options.includeInternal === true || (def?._exposure ?? \"public\") !== \"internal\";\n}\n\nfunction serializeFieldValue(\n def: any,\n value: any,\n options: SerializeOptions\n): any {\n if (value === undefined) {\n return undefined;\n }\n\n if (value === null) {\n return null;\n }\n\n switch (def?.type) {\n case \"string\":\n case \"number\":\n case \"boolean\":\n return deepClone(value);\n case \"ref\": {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return deepClone(value);\n }\n\n const shape = getShape(def);\n if (!shape || Object.keys(shape).length === 0) {\n return deepClone(value);\n }\n\n const serializedRef: Record<string, any> = {};\n if (typeof value.type === \"string\") {\n serializedRef.type = value.type;\n }\n if (typeof value.id === \"string\") {\n serializedRef.id = value.id;\n }\n\n for (const [childKey, childDef] of Object.entries(shape)) {\n if (!shouldIncludeField(childDef, options)) {\n continue;\n }\n if (!Object.prototype.hasOwnProperty.call(value, childKey)) {\n continue;\n }\n\n const serializedChild = serializeFieldValue(\n childDef,\n value[childKey],\n options\n );\n if (serializedChild !== undefined) {\n serializedRef[childKey] = serializedChild;\n }\n }\n\n return serializedRef;\n }\n case \"object\": {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return deepClone(value);\n }\n\n const shape = getShape(def);\n if (!shape || Object.keys(shape).length === 0) {\n return deepClone(value);\n }\n\n const serializedObject: Record<string, any> = {};\n for (const [childKey, childDef] of Object.entries(shape)) {\n if (!shouldIncludeField(childDef, options)) {\n continue;\n }\n if (!Object.prototype.hasOwnProperty.call(value, childKey)) {\n continue;\n }\n\n const serializedChild = serializeFieldValue(\n childDef,\n value[childKey],\n options\n );\n if (serializedChild !== undefined) {\n serializedObject[childKey] = serializedChild;\n }\n }\n\n return serializedObject;\n }\n case \"array\": {\n if (!Array.isArray(value)) {\n return deepClone(value);\n }\n\n if (!def.itemType) {\n return deepClone(value);\n }\n\n return value.map((item) => serializeFieldValue(def.itemType, item, options));\n }\n default:\n return deepClone(value);\n }\n}\n\nfunction cmpSemver(a: string, b: string): number {\n const pa = a.split(\".\").map((n) => parseInt(n, 10));\n const pb = b.split(\".\").map((n) => parseInt(n, 10));\n for (let i = 0; i < 3; i++) {\n const ai = pa[i] ?? 0;\n const bi = pb[i] ?? 0;\n if (ai > bi) return 1;\n if (ai < bi) return -1;\n }\n return 0;\n}\n\n// ──────────────────────────────────────────────────────────────────────────────\n// Helper: apply schema upgrade using SchemaUpgradeSpec (function or cascading steps)\n// ──────────────────────────────────────────────────────────────────────────────\nfunction applySchemaUpgrade(\n spec: SchemaUpgradeSpec,\n input: Record<string, any>,\n ctx: {\n from: string;\n to: string;\n entityType: string;\n describe: () => { entityType: string; version: string; shape: Record<string, any> };\n log?: (msg: string) => void;\n }\n): SchemaUpgradeResult {\n // Single universal upgrader\n if (typeof spec === \"function\") {\n return spec(input, ctx);\n }\n\n // Cascading steps: sort by target version, then apply those between from..to\n const steps = [...spec].sort((s1, s2) => cmpSemver(s1.to, s2.to));\n let working: Record<string, any> = { ...input };\n let fromVersion = ctx.from;\n\n for (const step of steps) {\n // Apply step if it advances beyond current `from` and does not exceed target `to`\n if (cmpSemver(fromVersion, step.to) < 0 && cmpSemver(step.to, ctx.to) <= 0) {\n ctx.log?.(`Upgrading entity from v${fromVersion} → v${step.to}`);\n const res = step.run(working, { ...ctx, from: fromVersion, to: step.to });\n if (!res || res.ok !== true || !res.value) {\n return {\n ok: false,\n errors: res?.errors?.length\n ? res.errors\n : [`Failed to upgrade entity from v${fromVersion} to v${step.to}`],\n };\n }\n working = res.value;\n fromVersion = step.to;\n }\n }\n\n // If no steps applied or we stopped before ctx.to, the caller will normalize type/version.\n return { ok: true, value: working };\n}\n\nfunction validateEnum(\n parentKey: string,\n value: any,\n enumValues?: Array<string | number>\n): string | undefined {\n if (!enumValues) return;\n\n const values = Array.isArray(enumValues)\n ? enumValues\n : Array.from(enumValues);\n\n if (Array.isArray(value)) {\n const invalid = value.filter((v) => !values.includes(v));\n if (invalid.length > 0) {\n return `Field ${parentKey} must contain only: ${values.join(\", \")}`;\n }\n } else {\n if (!values.includes(value)) {\n return `Field ${parentKey} must be one of: ${values.join(\", \")}`;\n }\n }\n}\n\n// Helper: some builders may store enum/optional/validator under different keys\n// schema.ts\nfunction getEnumValues(def: any): Array<string | number> | undefined {\n const src = Array.isArray(def?.enum)\n ? def.enum\n : Array.isArray(def?.enumValues)\n ? def.enumValues\n : Array.isArray(def?._enum)\n ? def._enum\n : Array.isArray(def?._enumValues)\n ? def._enumValues\n : def?._enumSet instanceof Set\n ? Array.from(def._enumSet)\n : undefined;\n\n if (!src) return undefined;\n const ok = src.every(\n (v: unknown) => typeof v === \"string\" || typeof v === \"number\"\n );\n return ok ? (src as Array<string | number>) : undefined;\n}\n\n// Apply default value when provided and input is nullish\nfunction applyDefault(\n def: any,\n current: any\n): { value: any; applied: boolean } {\n if (\n (current === undefined || current === null) &&\n typeof def?.getDefault === \"function\"\n ) {\n const next = def.getDefault();\n if (next !== undefined) {\n return { value: next, applied: true };\n }\n }\n return { value: current, applied: false };\n}\n\nfunction isOptional(def: any): boolean {\n return def?.isRequired === false;\n}\n\nfunction getValidator(def: any): ((v: any) => FieldValidatorResult) | undefined {\n return def?._validator ?? undefined;\n}\n\nfunction getShape(def: any): Record<string, any> | undefined {\n return def?._shape ?? def?.shape ?? undefined;\n}\n\nconst MAX_STRICT_VALIDATION_NODES = 10_000;\nconst MAX_STRICT_VALIDATION_DEPTH = 256;\nconst MAX_STRICT_VALIDATION_OBJECTS = MAX_STRICT_VALIDATION_NODES;\n\nfunction strictInputIsWithinComplexityLimit(input: unknown): boolean {\n const pending: Array<{ value: unknown; depth: number }> = [\n { value: input, depth: 0 },\n ];\n const seen = new WeakSet<object>();\n let visitedNodes = 0;\n\n try {\n while (pending.length > 0) {\n const current = pending.pop();\n if (!current) {\n continue;\n }\n visitedNodes += 1;\n if (\n visitedNodes > MAX_STRICT_VALIDATION_NODES ||\n current.depth > MAX_STRICT_VALIDATION_DEPTH\n ) {\n return false;\n }\n if (\n typeof current.value !== \"object\" ||\n current.value === null\n ) {\n continue;\n }\n if (seen.has(current.value)) {\n return false;\n }\n seen.add(current.value);\n\n const keys = Object.keys(current.value);\n if (\n visitedNodes + pending.length + keys.length >\n MAX_STRICT_VALIDATION_NODES\n ) {\n return false;\n }\n const record = current.value as Record<string, unknown>;\n for (const key of keys) {\n pending.push({\n value: record[key],\n depth: current.depth + 1,\n });\n }\n }\n } catch {\n return false;\n }\n\n return true;\n}\n\ninterface UnknownFieldScanState {\n remainingObjects: number;\n limitExceeded: boolean;\n}\n\nfunction strictReferenceShape(def: any): Record<string, any> {\n return {\n type: { type: \"string\" },\n id: { type: \"string\" },\n ...(getShape(def) ?? {}),\n };\n}\n\nfunction unknownFieldLocations(\n value: unknown,\n shape: Record<string, any>,\n location = \"root\",\n state: UnknownFieldScanState = {\n remainingObjects: MAX_STRICT_VALIDATION_OBJECTS,\n limitExceeded: false,\n },\n): string[] {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return [];\n }\n if (state.remainingObjects <= 0) {\n state.limitExceeded = true;\n return [];\n }\n state.remainingObjects -= 1;\n\n const record = value as Record<string, unknown>;\n const knownKeys = new Set(Object.keys(shape));\n const locations = new Set<string>();\n\n if (Object.keys(record).some((key) => !knownKeys.has(key))) {\n locations.add(location);\n }\n\n for (const [key, def] of Object.entries(shape)) {\n const child = record[key];\n if (child === undefined || child === null) {\n continue;\n }\n\n const childLocation = location === \"root\" ? key : `${location}.${key}`;\n const childShape = getShape(def);\n if ((def as any)?.type === \"object\" && childShape) {\n for (const nestedLocation of unknownFieldLocations(\n child,\n childShape,\n childLocation,\n state,\n )) {\n locations.add(nestedLocation);\n }\n continue;\n }\n\n const itemType = (def as any)?.itemType;\n if (\n (def as any)?.type === \"array\" &&\n (itemType?.type === \"object\" || itemType?.type === \"ref\") &&\n Array.isArray(child)\n ) {\n const itemShape =\n itemType.type === \"ref\"\n ? strictReferenceShape(itemType)\n : getShape(itemType);\n if (!itemShape) {\n continue;\n }\n for (const [index, item] of child.entries()) {\n if (state.limitExceeded) {\n break;\n }\n for (const nestedLocation of unknownFieldLocations(\n item,\n itemShape,\n `${childLocation}[${index}]`,\n state,\n )) {\n locations.add(nestedLocation);\n }\n }\n continue;\n }\n\n if ((def as any)?.type === \"ref\") {\n for (const nestedLocation of unknownFieldLocations(\n child,\n strictReferenceShape(def),\n childLocation,\n state,\n )) {\n locations.add(nestedLocation);\n }\n }\n }\n\n return [...locations];\n}\n\nfunction normalizeValidationIssue(\n path: string,\n issue: string | ValidationIssueInput,\n defaultCode: string\n): ValidationIssue {\n if (typeof issue === \"string\") {\n return {\n path,\n code: defaultCode,\n message: issue,\n };\n }\n\n return {\n path: issue.path ?? path,\n code: issue.code || defaultCode,\n message: issue.message,\n };\n}\n\nfunction normalizeValidatorIssues(\n path: string,\n result: FieldValidatorResult,\n defaultCode: string\n): ValidationIssue[] {\n if (result === true) {\n return [];\n }\n\n if (result === false) {\n return [\n {\n path,\n code: defaultCode,\n message: `Invalid value for field: ${path}`,\n },\n ];\n }\n\n if (Array.isArray(result)) {\n return result.map((issue) => normalizeValidationIssue(path, issue, defaultCode));\n }\n\n return [normalizeValidationIssue(path, result, defaultCode)];\n}\n\n// ──────────────────────────────────────────────────────────────────────────────\n// Validation helpers (extracted from validate())\n// ──────────────────────────────────────────────────────────────────────────────\n\nfunction checkMissingRequired(\n parentKey: string,\n key: string,\n value: any,\n def: any,\n errors: string[]\n): { missing: boolean } {\n if (value === undefined || value === null) {\n const path = parentKey ? `${parentKey}.${key}` : key;\n if (!isOptional(def)) {\n errors.push(`Missing required field: ${path}`);\n }\n return { missing: true };\n }\n return { missing: false };\n}\n\nfunction checkImmutable(\n parentKey: string,\n key: string,\n value: any,\n def: any,\n existing: Record<string, any> | undefined,\n errors: string[]\n): { immutableViolation: boolean } {\n if (\n def.isImmutable &&\n existing &&\n existing[key] !== undefined &&\n value !== existing[key]\n ) {\n const path = parentKey ? `${parentKey}.${key}` : key;\n errors.push(`Field is immutable: ${path}`);\n return { immutableViolation: true };\n }\n return { immutableViolation: false };\n}\n\nfunction runCustomValidator(\n parentKey: string,\n key: string,\n value: any,\n def: any,\n errors: string[],\n issues?: ValidationIssue[]\n): { invalid: boolean } {\n const validator = getValidator(def);\n if (validator && value !== undefined && value !== null) {\n const path = parentKey ? `${parentKey}.${key}` : key;\n const normalizedIssues = normalizeValidatorIssues(path, validator(value), \"invalid_value\");\n if (normalizedIssues.length > 0) {\n errors.push(...normalizedIssues.map((issue) => issue.message));\n if (issues) {\n issues.push(...normalizedIssues);\n }\n return { invalid: true };\n }\n }\n return { invalid: false };\n}\n\nfunction validateStringField(\n parentKey: string,\n key: string,\n value: any,\n def: any,\n errors: string[]\n) {\n const path = parentKey ? `${parentKey}.${key}` : key;\n if (typeof value !== \"string\") {\n errors.push(`Field ${path} must be string`);\n return;\n }\n\n const enumValues = getEnumValues(def);\n if (Array.isArray(enumValues)) {\n const enumError = validateEnum(path, value, enumValues);\n if (enumError) {\n errors.push(enumError);\n }\n }\n}\n\nfunction validateNumberField(\n parentKey: string,\n key: string,\n value: any,\n def: any,\n errors: string[]\n) {\n const path = parentKey ? `${parentKey}.${key}` : key;\n if (typeof value !== \"number\") {\n errors.push(`Field ${path} must be number`);\n return;\n }\n\n const enumValues = getEnumValues(def);\n if (Array.isArray(enumValues)) {\n const enumError = validateEnum(path, value, enumValues);\n if (enumError) {\n errors.push(enumError);\n }\n }\n}\n\nfunction validateBooleanField(\n parentKey: string,\n key: string,\n value: any,\n _def: any,\n errors: string[]\n) {\n const path = parentKey ? `${parentKey}.${key}` : key;\n if (typeof value !== \"boolean\") {\n errors.push(`Field ${path} must be boolean`);\n }\n}\n\nfunction validateObjectChildren(\n parentKey: string,\n obj: any,\n shape: Record<string, any>,\n errors: string[],\n issues: ValidationIssue[],\n existing: Record<string, any> | undefined,\n piiEnforcement: PIIEnforcement,\n logger?: { warn: (msg: string) => void }\n) {\n for (const [childKey, childDef] of Object.entries(shape) as [\n string,\n FieldBuilder<any>\n ][]) {\n let childValue = obj[childKey];\n const existingChild =\n existing && typeof existing === \"object\" ? (existing as any)[childKey] : undefined;\n\n // Apply defaults before required checks\n const { value: withDefault, applied } = applyDefault(childDef, childValue);\n if (applied) {\n obj[childKey] = withDefault;\n childValue = withDefault;\n }\n\n // Required check\n const { missing } = checkMissingRequired(\n parentKey,\n childKey,\n childValue,\n childDef,\n errors\n );\n if (missing) continue;\n\n const { immutableViolation } = checkImmutable(\n parentKey,\n childKey,\n childValue,\n childDef,\n existing,\n errors\n );\n if (immutableViolation) continue;\n\n const { shortCircuit } = enforcePIIField(\n parentKey,\n childKey,\n childValue,\n childDef,\n piiEnforcement,\n errors,\n logger\n );\n if (shortCircuit) continue;\n\n // Custom validator (per-field)\n const { invalid } = runCustomValidator(\n parentKey,\n childKey,\n childValue,\n childDef,\n errors,\n issues\n );\n if (invalid) continue;\n\n // Type-specific validation (string/number/boolean/object/array/ref)\n // This will recurse into nested objects via validateObjectField → validateObjectChildren\n validateByType(\n parentKey,\n childKey,\n childValue,\n childDef,\n errors,\n issues,\n existingChild,\n piiEnforcement,\n logger\n );\n }\n}\n\nfunction validateObjectField(\n parentKey: string,\n key: string,\n value: any,\n def: any,\n errors: string[],\n issues: ValidationIssue[],\n existing: Record<string, any> | undefined,\n piiEnforcement: PIIEnforcement,\n logger?: { warn: (msg: string) => void }\n) {\n const path = parentKey ? `${parentKey}.${key}` : key;\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n errors.push(`Field ${path} must be object`);\n return;\n }\n const objShape = getShape(def);\n if (objShape)\n validateObjectChildren(path, value, objShape, errors, issues, existing, piiEnforcement, logger);\n}\n\nfunction validateArrayOfStrings(\n parentKey: string,\n key: string,\n arr: any[],\n itemDef: any,\n errors: string[]\n) {\n const path = parentKey ? `${parentKey}.${key}` : key;\n if (!arr.every((v) => typeof v === \"string\")) {\n errors.push(`Field ${path} must be string[]`);\n return;\n }\n const enumValues = getEnumValues(itemDef);\n if (Array.isArray(enumValues)) {\n const enumError = validateEnum(path, arr, enumValues);\n if (enumError) {\n errors.push(enumError);\n }\n }\n\n const validator = getValidator(itemDef);\n if (validator) {\n arr.forEach((v, idx) => {\n if (!validator(v)) {\n errors.push(`Invalid value for field: ${path}[${idx}]`);\n }\n });\n }\n}\n\nfunction validateArrayOfNumbers(\n parentKey: string,\n key: string,\n arr: any[],\n itemDef: any,\n errors: string[]\n) {\n const path = parentKey ? `${parentKey}.${key}` : key;\n if (!arr.every((v) => typeof v === \"number\")) {\n errors.push(`Field ${path} must be number[]`);\n }\n\n const enumValues = getEnumValues(itemDef);\n if (Array.isArray(enumValues)) {\n const enumError = validateEnum(path, arr, enumValues);\n if (enumError) {\n errors.push(enumError);\n }\n }\n\n const validator = getValidator(itemDef);\n if (validator) {\n arr.forEach((v, idx) => {\n if (!validator(v)) {\n errors.push(`Invalid value for field: ${path}[${idx}]`);\n }\n });\n }\n}\n\nfunction validateArrayOfBooleans(\n parentKey: string,\n key: string,\n arr: any[],\n _itemDef: any,\n errors: string[]\n) {\n const path = parentKey ? `${parentKey}.${key}` : key;\n if (!arr.every((v) => typeof v === \"boolean\")) {\n errors.push(`Field ${path} must be boolean[]`);\n }\n\n const validator = getValidator(_itemDef);\n if (validator) {\n arr.forEach((v, idx) => {\n if (!validator(v)) {\n errors.push(`Invalid value for field: ${path}[${idx}]`);\n }\n });\n }\n}\n\nfunction validateArrayOfObjects(\n parentKey: string,\n key: string,\n arr: any[],\n itemDef: any,\n errors: string[],\n issues: ValidationIssue[],\n existing: any,\n piiEnforcement: PIIEnforcement,\n logger?: { warn: (msg: string) => void }\n) {\n const path = parentKey ? `${parentKey}.${key}` : key;\n\n if (\n !Array.isArray(arr) ||\n !arr.every((v) => typeof v === \"object\" && v !== null && !Array.isArray(v))\n ) {\n errors.push(`Field ${path} must be object[]`);\n return;\n }\n\n const itemShape = getShape(itemDef);\n if (!itemShape) return;\n\n arr.forEach((item, idx) => {\n const itemParent = `${path}[${idx}]`;\n const existingItem = Array.isArray(existing) ? existing[idx] : undefined;\n for (const [childKey, childDef] of Object.entries(itemShape) as [\n string,\n FieldBuilder<any>\n ][]) {\n let childValue = (item as any)[childKey];\n const existingChild =\n existingItem && typeof existingItem === \"object\"\n ? (existingItem as any)[childKey]\n : undefined;\n\n const { value: withDefault, applied } = applyDefault(\n childDef,\n childValue\n );\n if (applied) {\n (item as any)[childKey] = withDefault;\n childValue = withDefault;\n }\n\n // Required check (path-aware)\n const { missing } = checkMissingRequired(\n itemParent,\n childKey,\n childValue,\n childDef,\n errors\n );\n if (missing) continue;\n\n const { immutableViolation } = checkImmutable(\n itemParent,\n childKey,\n childValue,\n childDef,\n existingItem,\n errors\n );\n if (immutableViolation) continue;\n\n const { shortCircuit } = enforcePIIField(\n itemParent,\n childKey,\n childValue,\n childDef,\n piiEnforcement,\n errors,\n logger\n );\n if (shortCircuit) continue;\n\n // Custom validator (path-aware)\n const { invalid } = runCustomValidator(\n itemParent,\n childKey,\n childValue,\n childDef,\n errors,\n issues\n );\n if (invalid) continue;\n\n // Type-specific validation (recurses into nested object/array/ref)\n validateByType(\n itemParent,\n childKey,\n childValue,\n childDef,\n errors,\n issues,\n existingChild,\n piiEnforcement,\n logger\n );\n }\n });\n}\n\nfunction validateArrayField(\n parentKey: string,\n key: string,\n value: any,\n def: any,\n errors: string[],\n issues: ValidationIssue[],\n existing: any,\n piiEnforcement: PIIEnforcement,\n logger?: { warn: (msg: string) => void }\n) {\n const path = parentKey ? `${parentKey}.${key}` : key;\n if (!Array.isArray(value)) {\n errors.push(`Field ${key} must be an array`);\n return;\n }\n const itemType = def.itemType?.type;\n if (itemType === \"string\")\n return validateArrayOfStrings(parentKey, key, value, def.itemType, errors);\n if (itemType === \"number\")\n return validateArrayOfNumbers(parentKey, key, value, def.itemType, errors);\n if (itemType === \"boolean\")\n return validateArrayOfBooleans(parentKey, key, value, def.itemType, errors);\n if (itemType === \"object\")\n return validateArrayOfObjects(\n parentKey,\n key,\n value,\n def.itemType,\n errors,\n issues,\n existing,\n piiEnforcement,\n logger\n );\n if (itemType === \"ref\") {\n const expectedType = (def.itemType as any).refType;\n value.forEach((ref: any, idx: number) => {\n if (\n !ref ||\n typeof ref !== \"object\" ||\n ref === null ||\n typeof ref.type !== \"string\" ||\n typeof ref.id !== \"string\" ||\n (expectedType && ref.type !== expectedType)\n ) {\n errors.push(\n `Field ${path}[${idx}] must be a reference object with type: ${expectedType}`\n );\n }\n });\n const refShape = getShape(def.itemType);\n if (refShape) {\n const existingRefs = Array.isArray(existing) ? existing : [];\n value.forEach((ref: any, idx: number) => {\n if (ref && typeof ref === \"object\" && ref !== null) {\n const existingRef = existingRefs[idx];\n for (const [childKey, childDef] of Object.entries(refShape) as [\n string,\n FieldBuilder<any>\n ][]) {\n const childPath = `${path}[${idx}].${childKey}`;\n let childValue = ref[childKey];\n const existingChild =\n existingRef && typeof existingRef === \"object\"\n ? (existingRef as any)[childKey]\n : undefined;\n const { value: withDefault, applied } = applyDefault(\n childDef,\n childValue\n );\n if (applied) {\n ref[childKey] = withDefault;\n childValue = withDefault;\n }\n if (\n (childValue === undefined || childValue === null) &&\n !isOptional(childDef)\n ) {\n errors.push(`Missing required field: ${childPath}`);\n continue;\n }\n\n const { immutableViolation } = checkImmutable(\n `${path}[${idx}]`,\n childKey,\n childValue,\n childDef,\n existingRef,\n errors\n );\n if (immutableViolation) continue;\n\n const { shortCircuit } = enforcePIIField(\n `${path}[${idx}]`,\n childKey,\n childValue,\n childDef,\n piiEnforcement,\n errors,\n logger\n );\n if (shortCircuit) continue;\n\n const childValidator = getValidator(childDef);\n if (\n childValidator &&\n childValue !== undefined &&\n childValue !== null\n ) {\n const normalizedIssues = normalizeValidatorIssues(\n childPath,\n childValidator(childValue),\n \"invalid_value\"\n );\n if (normalizedIssues.length > 0) {\n errors.push(...normalizedIssues.map((issue) => issue.message));\n issues.push(...normalizedIssues);\n continue;\n }\n }\n\n validateByType(\n `${path}[${idx}]`,\n childKey,\n childValue,\n childDef,\n errors,\n issues,\n existingChild,\n piiEnforcement,\n logger\n );\n }\n }\n });\n }\n return;\n }\n errors.push(`Field ${path} has unsupported array item type`);\n}\n\nfunction validateRefField(\n parentKey: string,\n key: string,\n value: any,\n def: any,\n errors: string[],\n _existing: any,\n _piiEnforcement: PIIEnforcement,\n _logger?: { warn: (msg: string) => void }\n) {\n const path = parentKey ? `${parentKey}.${key}` : key;\n if (\n typeof value !== \"object\" ||\n value === null ||\n typeof value.type !== \"string\" ||\n typeof value.id !== \"string\"\n ) {\n errors.push(`Field ${path} must be { type: string; id: string }`);\n return;\n }\n\n const expectedType = (def as any).refType;\n if (expectedType && value.type !== expectedType) {\n errors.push(\n `Field ${path} must reference type: ${expectedType} (got ${value.type})`\n );\n }\n}\n\nfunction validateByType(\n parentKey: string,\n key: string,\n value: any,\n def: any,\n errors: string[],\n issues: ValidationIssue[],\n existing: any,\n piiEnforcement: PIIEnforcement,\n logger?: { warn: (msg: string) => void }\n) {\n const path = parentKey ? `${parentKey}.${key}` : key;\n switch (def.type) {\n case \"string\":\n return validateStringField(parentKey, key, value, def, errors);\n case \"number\":\n return validateNumberField(parentKey, key, value, def, errors);\n case \"boolean\":\n return validateBooleanField(parentKey, key, value, def, errors);\n case \"object\":\n return validateObjectField(\n parentKey,\n key,\n value,\n def,\n errors,\n issues,\n existing,\n piiEnforcement,\n logger\n );\n case \"array\":\n return validateArrayField(\n parentKey,\n key,\n value,\n def,\n errors,\n issues,\n existing,\n piiEnforcement,\n logger\n );\n case \"ref\":\n return validateRefField(parentKey, key, value, def, errors, existing, piiEnforcement, logger);\n default:\n errors.push(`Unknown type for field ${path}: ${def.type}`);\n }\n}\n\nexport function createSchema<S extends SchemaShape>(\n _shape: S,\n entityType: string,\n options: SchemaOptions = {\n version: \"1.0.0\",\n table: \"\",\n schemaValidator: () => true,\n piiEnforcement: \"none\",\n unknownFields: SCHEMA_UNKNOWN_FIELDS_POLICIES[0],\n identity: SCHEMA_IDENTITY_POLICIES[0],\n schemaUpgrade: undefined,\n }\n): Schema<S> {\n const systemFields = {\n type: field.string().immutable().system(),\n version: field.string().immutable().system().validator(validateSemVer),\n };\n\n const version = options.version || \"1.0.0\";\n const store = options.table || \"\";\n\n // Optional schema-level upgrader supplied by the caller via options.schemaUpgrade\n const schemaUpgrade: SchemaUpgradeSpec | undefined = (options as any)\n .schemaUpgrade;\n\n const schema: Schema<S> = {\n // 🔗 Define the schema shape\n _shape: {\n ...systemFields,\n ..._shape,\n } as S,\n\n // 🔗 Metadata about the schema\n meta: { entityType, version },\n\n // 🔗 Validate input against the schema\n validate(input: unknown, existing?: Record<string, any>) {\n const errors: string[] = [];\n const issues: ValidationIssue[] = [];\n const result: any = {};\n const piiMode: PIIEnforcement = options.piiEnforcement ?? \"none\";\n\n if (typeof input !== \"object\" || input === null) {\n return { valid: false, errors: [\"Input must be an object\"] } as any;\n }\n if (options.unknownFields === \"reject\") {\n if (!strictInputIsWithinComplexityLimit(input)) {\n return {\n valid: false,\n errors: [\"Strict validation complexity limit exceeded.\"],\n issues: [\n {\n path: \"root\",\n code: \"validation_complexity_limit\",\n message: \"Strict validation complexity limit exceeded.\",\n },\n ],\n } as any;\n }\n const scanState: UnknownFieldScanState = {\n remainingObjects: MAX_STRICT_VALIDATION_OBJECTS,\n limitExceeded: false,\n };\n const locations = unknownFieldLocations(\n input,\n schema._shape,\n \"root\",\n scanState,\n );\n if (scanState.limitExceeded) {\n return {\n valid: false,\n errors: [\"Strict validation complexity limit exceeded.\"],\n issues: [\n {\n path: \"root\",\n code: \"validation_complexity_limit\",\n message: \"Strict validation complexity limit exceeded.\",\n },\n ],\n } as any;\n }\n if (locations.length > 0) {\n return {\n valid: false,\n errors: locations.map(\n (location) => `Unknown fields are not allowed at ${location}.`,\n ),\n issues: locations.map((location) => ({\n path: location,\n code: \"unknown_fields\",\n message: `Unknown fields are not allowed at ${location}.`,\n })),\n } as any;\n }\n }\n // Work on a non-mutating copy that includes system defaults for first-time objects\n const working: Record<string, any> =\n typeof input === \"object\" && input !== null\n ? deepClone(input as any)\n : { ...(input as any) };\n if (working.type == null) working.type = entityType;\n if (working.version == null) working.version = version;\n\n // ── Schema-level upgrade (runs once before any field checks) ─────────────\n const fromVersion = String(working.version ?? \"0.0.0\");\n const toVersion = String(version);\n if (schemaUpgrade && cmpSemver(fromVersion, toVersion) < 0) {\n const upgradeRes = applySchemaUpgrade(schemaUpgrade, { ...working }, {\n from: fromVersion,\n to: toVersion,\n entityType,\n describe: () => schema.describe(),\n });\n if (!upgradeRes || upgradeRes.ok !== true || !upgradeRes.value) {\n const errs = upgradeRes?.errors?.length\n ? upgradeRes.errors\n : [`Failed to upgrade entity from v${fromVersion} to v${toVersion}`];\n errors.push(...errs);\n // Stop early if the schema-level migration itself failed\n return { valid: false, errors } as any;\n }\n // Use the upgraded value as our new working copy\n for (const k of Object.keys(working)) delete (working as any)[k];\n Object.assign(working, upgradeRes.value);\n // Ensure system defaults remain correct after user migration\n working.type = entityType;\n working.version = toVersion;\n }\n\n if (\n options.identity === \"exact\" &&\n (working.type !== entityType || working.version !== version)\n ) {\n return {\n valid: false,\n errors: [\"Schema type or version does not match the contract.\"],\n issues: [\n {\n path: \"root\",\n code: \"schema_identity_mismatch\",\n message: \"Schema type or version does not match the contract.\",\n },\n ],\n } as any;\n }\n\n for (const key in schema._shape) {\n const def = schema._shape[key];\n let value = working[key];\n const existingField =\n existing && typeof existing === \"object\" ? (existing as any)[key] : undefined;\n\n if (!def) {\n errors.push(`Field definition missing for: ${key}`);\n continue;\n }\n\n // Apply defaults before required/validation checks\n const { value: withDefault, applied } = applyDefault(def, value);\n if (applied) {\n working[key] = withDefault;\n value = withDefault;\n }\n\n // 1) Required\n const { missing } = checkMissingRequired(\"\", key, value, def, errors);\n if (missing) continue;\n\n // 2) Immutable\n const { immutableViolation } = checkImmutable(\n \"\",\n key,\n value,\n def,\n existing,\n errors\n );\n if (immutableViolation) continue;\n\n // 3) PII enforcement (may short-circuit)\n const { shortCircuit } = enforcePIIField(\n \"\",\n key,\n value,\n def,\n piiMode,\n errors,\n console\n );\n if (shortCircuit) continue;\n\n // A local validator for this field that returns errors instead of pushing into the outer array\n const validateField = (val: any): string[] => {\n const localErrors: string[] = [];\n const localIssues: ValidationIssue[] = [];\n const { invalid } = runCustomValidator(\n \"\",\n key,\n val,\n def,\n localErrors,\n localIssues\n );\n if (!invalid) {\n validateByType(\"\", key, val, def, localErrors, localIssues, existingField, piiMode, console);\n }\n issues.push(...localIssues);\n return localErrors;\n };\n\n // First pass validation\n let fieldValue = value;\n let fieldErrors = validateField(fieldValue);\n\n // Attempt upgrade if invalid and an upgrader exists and entity is older than schema\n const entityFrom = String(working.version ?? \"0.0.0\");\n const entityTo = String(version);\n const fieldTo = String((def as any)._version ?? entityTo);\n const hasUpgrader = typeof (def as any)._upgrade === \"function\";\n\n if (\n fieldErrors.length > 0 &&\n hasUpgrader &&\n cmpSemver(entityFrom, entityTo) < 0\n ) {\n const up = (def as any)._upgrade as (\n value: any,\n ctx: {\n entityFrom: string;\n entityTo: string;\n fieldTo: string;\n fieldName: string;\n }\n ) => { ok: boolean; value?: any; error?: string };\n\n const res = up(fieldValue, {\n entityFrom,\n entityTo,\n fieldTo,\n fieldName: key,\n });\n if (res && res.ok) {\n fieldValue = res.value;\n fieldErrors = validateField(fieldValue);\n } else {\n fieldErrors.push(\n res?.error ||\n `Failed to upgrade field ${key} from v${entityFrom} to v${entityTo}`\n );\n }\n }\n\n result[key] = fieldValue;\n // Apply or record errors\n if (fieldErrors.length !== 0) {\n errors.push(...fieldErrors);\n continue;\n }\n }\n\n if (errors.length === 0 && options.schemaValidator) {\n const castValue = result as Infer<S>;\n const source = input as Record<string, unknown>;\n const validationContext: SchemaValidationContext = Object.freeze({\n wasProvided: (fieldName: string) =>\n Object.prototype.hasOwnProperty.call(source, fieldName),\n });\n if (!options.schemaValidator(castValue, validationContext)) {\n errors.push(\"Schema-level validation failed.\");\n }\n }\n\n return {\n valid: errors.length === 0,\n value: result as Infer<S>,\n errors,\n issues,\n };\n },\n\n // specific validator for a schema to allow conditional validation\n schemaValidator: options.schemaValidator!, // <== expose it here!\n\n /**\n * Runs the optional schema-level upgrade function once, without validating.\n * Useful for offline migrations or testing migration logic.\n */\n upgrade(\n input: Record<string, any>,\n log?: (msg: string) => void\n ): {\n ok: boolean;\n value?: Record<string, any>;\n errors?: string[];\n } {\n const fromVersion = String((input as any)?.version ?? \"0.0.0\");\n const toVersion = String(version);\n if (!schemaUpgrade || cmpSemver(fromVersion, toVersion) >= 0) {\n // Nothing to do – already current or no upgrader provided.\n return {\n ok: true,\n value: { ...input, type: entityType, version: toVersion },\n };\n }\n const res = applySchemaUpgrade(\n schemaUpgrade,\n { ...(input as any) },\n {\n from: fromVersion,\n to: toVersion,\n entityType,\n describe: () => schema.describe(),\n log,\n }\n );\n if (res && res.ok && res.value) {\n const out = { ...res.value, type: entityType, version: toVersion };\n return { ok: true, value: out };\n }\n return {\n ok: false,\n errors: res?.errors?.length\n ? res.errors\n : [`Failed to upgrade entity from v${fromVersion} to v${toVersion}`],\n };\n },\n\n /**\n * Recursively validates entity references defined in this schema.\n *\n * Traverses fields of type `ref` and arrays of `ref` and resolves each target\n * entity using the provided `resolveEntity` function. When `autoValidate` is\n * enabled (default) and the field's `refPolicy` is `eager`, the referenced\n * entity's schema is fetched and validated via `validateComposition` up to\n * `maxDepth` levels.\n *\n * Skips fields not listed in `onlyFields` when provided. Prevents cycles via\n * a `visited` set in `validatorContext`.\n *\n * @param entity The root entity to validate (must include `type` and `id`).\n * @param options Options controlling traversal and resolution behavior.\n * @param options.resolveEntity Function to resolve a referenced entity by type and id.\n * @param options.validatorContext Internal context (visited set) to prevent cycles.\n * @param options.maxDepth Maximum depth for recursive validation (default: 5).\n * @param options.onlyFields Optional whitelist of field names to validate.\n * @param options.log Optional logger for traversal/debug output.\n *\n * @throws Error if a broken reference is encountered (target cannot be resolved).\n */\n async validateComposition(entity, options) {\n const {\n resolveEntity,\n validatorContext = { visited: new Set() },\n maxDepth = 5,\n log,\n } = options;\n\n const entityKey = `${(entity as any).type}:${(entity as any).id}`;\n if (validatorContext.visited.has(entityKey)) {\n log?.(`Skipping already visited entity ${entityKey}`);\n return;\n }\n validatorContext.visited.add(entityKey);\n log?.(`Validating composition for entity ${entityKey}`);\n\n for (const [key, def] of Object.entries(schema._shape)) {\n // NEW: skip if not in onlyFields\n if (options.onlyFields && !options.onlyFields.includes(key)) {\n log?.(`Skipping field ${key} (not in onlyFields)`);\n continue;\n }\n\n const autoValidate = (def as any).autoValidate !== false;\n const refPolicy = (def as any).refPolicy ?? \"eager\";\n const value = (entity as any)[key];\n if (!value) continue;\n\n if (def.type === \"ref\") {\n const refType = (def as any).refType as string;\n if (!refType)\n throw new Error(`Missing refType for reference field ${key}`);\n const ref = value as { type: string; id: string };\n if (ref.type && ref.type !== refType) {\n throw new Error(\n `Reference type mismatch for field ${key}: expected ${refType}, got ${ref.type}`\n );\n }\n const target = await options.resolveEntity(refType, ref.id);\n if (!target)\n throw new Error(\n `Broken reference: ${refType} ${ref.id} in field ${key}`\n );\n log?.(`Resolved ${refType} ${ref.id} from field ${key}`);\n\n if (autoValidate && refPolicy === \"eager\") {\n const targetSchema = getSchemaForType(refType);\n if (options.maxDepth! > 0 && targetSchema) {\n await targetSchema.validateComposition(target, {\n ...options,\n maxDepth: options.maxDepth! - 1,\n });\n }\n }\n // Handle array of refs: type === \"array\" and itemType?.type === \"ref\"\n } else if (def.type === \"array\" && def.itemType?.type === \"ref\") {\n const refType = (def.itemType as any).refType as string;\n if (!refType)\n throw new Error(`Missing refType for reference array field ${key}`);\n const refs = value as Array<{ type: string; id: string }>;\n for (const ref of refs) {\n if (ref.type && ref.type !== refType) {\n throw new Error(\n `Reference type mismatch for field ${key}: expected ${refType}, got ${ref.type}`\n );\n }\n const target = await options.resolveEntity(refType, ref.id);\n if (!target)\n throw new Error(\n `Broken reference: ${refType} ${ref.id} in field ${key}`\n );\n log?.(`Resolved ${refType} ${ref.id} from field ${key}`);\n\n if (autoValidate && refPolicy === \"eager\") {\n const targetSchema = getSchemaForType(refType);\n if (options.maxDepth! > 0 && targetSchema) {\n await targetSchema.validateComposition(target, {\n ...options,\n maxDepth: options.maxDepth! - 1,\n });\n }\n }\n }\n }\n }\n },\n\n /**\n * Returns the configured table name for this schema.\n *\n * @throws Error if no store/table name has been defined for this schema.\n */\n tableName(): string {\n if (!store || store === \"\") {\n throw new Error(\"Store is not defined for this schema\");\n }\n return store;\n },\n\n serialize(\n input: Record<string, any>,\n options: SerializeOptions = {}\n ): Record<string, any> {\n if (typeof input !== \"object\" || input === null) {\n return {};\n }\n\n const serialized: Record<string, any> = {};\n for (const [key, def] of Object.entries(schema._shape)) {\n if (!shouldIncludeField(def, options)) {\n continue;\n }\n\n if (!Object.prototype.hasOwnProperty.call(input, key)) {\n continue;\n }\n\n const value = serializeFieldValue(def, (input as any)[key], options);\n if (value !== undefined) {\n serialized[key] = value;\n }\n }\n\n return serialized;\n },\n\n /**\n * Transforms an input object for persistence by applying PII protection\n * according to field annotations (e.g., encryption and hashing).\n *\n * @param input The raw entity data.\n * @param encryptFn Function used to encrypt sensitive values.\n * @param hashFn Function used to hash sensitive values.\n * @returns A new object safe to store.\n */\n prepareForStorage(\n input: Record<string, any>,\n encryptFn: (value: any) => string,\n hashFn: (value: any) => string\n ): Record<string, any> {\n return piiPrepareForStorage(_shape, input, encryptFn, hashFn);\n },\n\n /**\n * Reverses storage transformations for read paths (e.g., decrypts values)\n * according to PII annotations, returning a consumer-friendly object.\n *\n * @param stored Data retrieved from storage.\n * @param decryptFn Function used to decrypt values that were encrypted on write.\n * @returns A new object suitable for application consumption.\n */\n prepareForRead(\n stored: Record<string, any>,\n decryptFn: (value: string) => any\n ): Record<string, any> {\n return piiPrepareForRead(_shape, stored, decryptFn);\n },\n\n /**\n * Produces a log-safe copy of the provided data by redacting or pseudonymizing\n * PII fields in accordance with field annotations.\n *\n * @param data Arbitrary data to sanitize for logging.\n * @param pseudonymFn Function producing stable pseudonyms for sensitive values.\n * @returns A copy safe to emit to logs.\n */\n sanitizeForLog(\n data: Record<string, any>,\n pseudonymFn: (value: any) => string\n ): Record<string, any> {\n return piiSanitizeForLog(_shape, data, pseudonymFn);\n },\n\n /**\n * Returns a list of fields annotated with PII metadata for auditing purposes.\n * Each entry includes classification, required action, and optional log policy.\n */\n getPiiAudit(): Array<{\n field: string;\n classification: PIIClassification;\n action: PIIAction;\n logHandling?: PIILogHandling;\n purpose?: string;\n }> {\n return piiGetPiiAudit(_shape);\n },\n\n /**\n * Produces a copy of stored data suitable for data deletion flows by scrubbing\n * or blanking PII per field annotations.\n *\n * @param stored Data as persisted.\n * @returns A copy with PII removed or neutralized for deletion.\n */\n scrubPiiForDelete(stored: Record<string, any>): Record<string, any> {\n return piiScrubPiiForDelete(_shape, stored);\n },\n\n /**\n * Returns a normalized description of the schema suitable for documentation\n * or UI rendering (type, optionality, enum values, PII flags, etc.).\n */\n describe() {\n const description: Record<string, any> = {};\n for (const [key, def] of Object.entries(schema._shape)) {\n description[key] = {\n type: def.type,\n optional: isOptional(def),\n immutable: !!def.isImmutable,\n system: !!def.isSystem,\n description: def._description ?? \"\",\n version: def._version ?? \"\",\n deprecated: (def as any).deprecated ?? false,\n deprecatedVersion:\n (def as any).deprecatedVersion === undefined\n ? null\n : (def as any).deprecatedVersion,\n enum: getEnumValues(def as any) ?? null,\n refType: (def as any).refType ?? null,\n pii:\n !def._pii || def._pii.classification === \"none\" ? null : def._pii,\n exposure: def._exposure ?? \"public\",\n };\n }\n\n return {\n entityType,\n version,\n hasSchemaUpgrade: !!schemaUpgrade,\n shape: description,\n };\n },\n };\n\n // Register the schema globally\n globalSchemaRegistry.set(entityType, schema);\n return schema;\n}\n\n/**\n * Retrieves a previously registered schema by its `entityType` from the\n * in-process global schema registry.\n */\nexport function getSchemaForType(type: string): Schema<any> | undefined {\n return globalSchemaRegistry.get(type);\n}\n\n/**\n * Returns all schemas registered in the in-process global registry.\n */\nexport function getAllSchemas(): Schema<any>[] {\n return Array.from(globalSchemaRegistry.values());\n}\n\n/**\n * Renders a schema into a simplified descriptor for front-end consumption.\n * Intended for documentation and admin tooling rather than validation.\n */\nexport function renderSchemaDescription(\n schema: Schema<any>\n): {\n title: string;\n fields: Array<{\n name: string;\n type: FieldType;\n optional: boolean;\n description: string;\n deprecated: boolean;\n pii?: string;\n exposure: \"public\" | \"internal\";\n }>;\n} {\n const meta = schema.describe();\n return {\n title: `${meta.entityType} (v${meta.version})`,\n fields: Object.entries(meta.shape).map(([name, def]) => ({\n name,\n type: def.type,\n optional: def.optional,\n description: def.description,\n deprecated: def.deprecated,\n pii: def.pii ? def.pii.classification : undefined,\n exposure: def.exposure,\n })),\n };\n}\n","import { field } from \"./field.js\";\nimport { FEEDBACK_CONTRACT_VERSION } from \"./feedback-contract-version.js\";\nimport {\n FEEDBACK_BACKEND_BUCKETS,\n FEEDBACK_FRAME_RATE_BUCKETS,\n FEEDBACK_FRAME_TIME_BUCKETS,\n FEEDBACK_GAME_COUNTER_CODES,\n FEEDBACK_GAME_COUNTER_MAX_COUNT,\n FEEDBACK_GAME_COUNTER_MAX_ITEMS,\n FEEDBACK_GAME_ERROR_CODES,\n FEEDBACK_GAME_FEATURE_IDS,\n FEEDBACK_GAME_PROVENANCE_CONTRACT_IDS,\n FEEDBACK_GAME_PROVENANCE_CONTRACTS,\n FEEDBACK_GAME_SURFACE_IDS,\n FEEDBACK_RENDERER_BUCKETS,\n FEEDBACK_VIEWPORT_BUCKETS,\n} from \"./feedback-diagnostics-vocabulary.js\";\nimport type {\n FeedbackGameDiagnostics,\n} from \"./feedback-diagnostics-vocabulary.js\";\nimport { createSchema } from \"./schema.js\";\nimport type { ValidationIssue } from \"./validation.types.js\";\n\nexport {\n FEEDBACK_BACKEND_BUCKETS,\n FEEDBACK_FRAME_RATE_BUCKETS,\n FEEDBACK_FRAME_TIME_BUCKETS,\n FEEDBACK_GAME_COUNTER_CODES,\n FEEDBACK_GAME_COUNTER_MAX_COUNT,\n FEEDBACK_GAME_COUNTER_MAX_ITEMS,\n FEEDBACK_GAME_ERROR_CODES,\n FEEDBACK_GAME_FEATURE_IDS,\n FEEDBACK_GAME_PROVENANCE_CONTRACT_IDS,\n FEEDBACK_GAME_PROVENANCE_CONTRACTS,\n FEEDBACK_GAME_SURFACE_IDS,\n FEEDBACK_RENDERER_BUCKETS,\n FEEDBACK_VIEWPORT_BUCKETS,\n};\nexport type { FeedbackGameDiagnostics };\n\nconst positiveCountField = (maximum: number) =>\n field\n .number()\n .validator((value) => Number.isSafeInteger(value))\n .min(1)\n .max(maximum);\n\nconst nestedIdentityShape = () => ({\n type: field.string().enum([\"feedback-game-diagnostics\"] as const),\n version: field.string().enum([FEEDBACK_CONTRACT_VERSION] as const),\n});\n\nconst gameCounterShape = () => ({\n code: field.string().enum(FEEDBACK_GAME_COUNTER_CODES),\n count: positiveCountField(FEEDBACK_GAME_COUNTER_MAX_COUNT),\n});\n\nexport const feedbackGameDiagnosticsShape = (includeIdentity = false) => ({\n ...(includeIdentity ? nestedIdentityShape() : {}),\n surfaceId: field.string().enum(FEEDBACK_GAME_SURFACE_IDS),\n consentConfirmed: field.boolean(),\n provenanceContractId: field\n .string()\n .enum(FEEDBACK_GAME_PROVENANCE_CONTRACT_IDS),\n renderer: field.string().enum(FEEDBACK_RENDERER_BUCKETS),\n backend: field.string().enum(FEEDBACK_BACKEND_BUCKETS),\n viewportBucket: field.string().enum(FEEDBACK_VIEWPORT_BUCKETS),\n frameRateBucket: field.string().enum(FEEDBACK_FRAME_RATE_BUCKETS),\n frameTimeBucket: field.string().enum(FEEDBACK_FRAME_TIME_BUCKETS),\n featureIds: field\n .array(field.string().enum(FEEDBACK_GAME_FEATURE_IDS))\n .max(FEEDBACK_GAME_FEATURE_IDS.length),\n counters: field\n .array(field.object(gameCounterShape()))\n .max(FEEDBACK_GAME_COUNTER_MAX_ITEMS),\n errorCodes: field\n .array(field.string().enum(FEEDBACK_GAME_ERROR_CODES))\n .max(FEEDBACK_GAME_ERROR_CODES.length),\n});\n\nexport const isFeedbackGameDiagnosticsConsistent = (\n value: Record<string, unknown>,\n): boolean => {\n const featureIds = Array.isArray(value.featureIds) ? value.featureIds : [];\n const errorCodes = Array.isArray(value.errorCodes) ? value.errorCodes : [];\n const counters = Array.isArray(value.counters) ? value.counters : [];\n const provenance = FEEDBACK_GAME_PROVENANCE_CONTRACTS.find(\n ({ surfaceId }) => surfaceId === value.surfaceId,\n );\n return (\n value.consentConfirmed === true &&\n provenance !== undefined &&\n provenance.contractId === value.provenanceContractId &&\n new Set(featureIds).size === featureIds.length &&\n new Set(errorCodes).size === errorCodes.length &&\n new Set(\n counters.map((counter) =>\n typeof counter === \"object\" && counter !== null\n ? (counter as { code?: unknown }).code\n : undefined,\n ),\n ).size === counters.length\n );\n};\n\n/** Bucketed, consented renderer diagnostics; it cannot express pixels or DOM. */\nexport const FeedbackGameDiagnosticsSchema = createSchema(\n feedbackGameDiagnosticsShape(),\n \"feedback-game-diagnostics\",\n {\n version: FEEDBACK_CONTRACT_VERSION,\n piiEnforcement: \"strict\",\n unknownFields: \"reject\",\n identity: \"exact\",\n schemaValidator: isFeedbackGameDiagnosticsConsistent,\n },\n);\n\nexport type FeedbackGameDiagnosticsValidationResult =\n | {\n readonly valid: true;\n readonly value: FeedbackGameDiagnostics;\n readonly errors?: never;\n readonly issues?: never;\n }\n | {\n readonly valid: false;\n readonly value?: never;\n readonly errors: readonly string[];\n readonly issues?: readonly ValidationIssue[];\n };\n\n/**\n * Validate and clone diagnostics while preserving the correlated public type.\n *\n * `createSchema` intentionally exposes its generic inferred shape; this\n * domain wrapper is the typed boundary consumers should use.\n */\nexport const validateFeedbackGameDiagnostics = (\n input: unknown,\n): FeedbackGameDiagnosticsValidationResult => {\n const result = FeedbackGameDiagnosticsSchema.validate(input);\n if (!result.valid || result.value === undefined) {\n return {\n valid: false,\n errors: result.errors ?? [\"Game diagnostics validation failed.\"],\n ...(result.issues === undefined ? {} : { issues: result.issues }),\n };\n }\n return {\n valid: true,\n value: result.value as unknown as FeedbackGameDiagnostics,\n };\n};\n"],"mappings":"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AQ;AAGnB,UAAM,YAAY;AAClB,WAAO,UAAU,KAAK,KAAK;AAAA,EAC7B;AAEA,SAAO;AACT;;;AC3DO,IAAM,kBAAkB,oBAAI,IAAI;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAMM,IAAM,sBAAsB,CAAC,UAA4B;AAC9D,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,SAAO,gBAAgB,IAAI,MAAM,YAAY,CAAC;AAChD;;;AC3PO,SAAS,iBAAiB,OAAyB;AACxD,MAAI,OAAO,UAAU,SAAU,QAAO;AAGtC,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,QAAQ,WAAW,EAAG,QAAO;AAGjC,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAM,OAAO,QAAQ,YAAY,CAAC;AAClC,QAAI,SAAS,WAAc,QAAQ,KAAQ,QAAQ,MAAQ,SAAS,MAAO;AACzE,aAAO;AAAA,IACT;AAAA,EACF;AAGA,MAAI,gBAAgB,KAAK,OAAO,EAAG,QAAO;AAG1C,MACE,0FAA0F;AAAA,IACxF;AAAA,EACF;AAEA,WAAO;AAGT,MAAI,QAAQ,SAAS,IAAQ,EAAG,QAAO;AAGvC,MAAI,QAAQ,SAAS,KAAM,QAAO;AAElC,SAAO;AACT;;;AClCO,SAAS,eAAe,OAAyB;AACtD,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,SAAO,sLAAsL;AAAA,IAC3L;AAAA,EACF;AACF;;;ACJO,SAAS,iBAAiB,OAAyB;AACxD,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,QAAQ,WAAW,EAAG,QAAO;AAGjC,MACE,0FAA0F;AAAA,IACxF;AAAA,EACF,GACA;AACA,WAAO;AAAA,EACT;AAGA,MAAI,eAAe,KAAK,OAAO,GAAG;AAChC,WAAO;AAAA,EACT;AAGA,MAAI,eAAe,KAAK,OAAO,GAAG;AAChC,WAAO;AAAA,EACT;AAGA,MAAI,QAAQ,SAAS,IAAO,QAAO;AAEnC,SAAO;AACT;;;AC7BO,IAAK,kBAAL,kBAAKA,qBAAL;AACL,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,iBAAc;AACd,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,gBAAa;AACb,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,kBAAe;AACf,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,SAAM;AACN,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,oBAAiB;AACjB,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,iBAAc;AACd,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,SAAM;AACN,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,gBAAa;AACb,EAAAA,iBAAA,iBAAc;AACd,EAAAA,iBAAA,iBAAc;AACd,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,kBAAe;AACf,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,iBAAc;AACd,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,SAAM;AACN,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,gBAAa;AACb,EAAAA,iBAAA,iBAAc;AACd,EAAAA,iBAAA,mBAAgB;AAChB,EAAAA,iBAAA,gBAAa;AACb,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,iBAAc;AACd,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,kBAAe;AACf,EAAAA,iBAAA,kBAAe;AACf,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,qBAAkB;AAClB,EAAAA,iBAAA,sBAAmB;AACnB,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,gBAAa;AACb,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,mBAAgB;AAChB,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,SAAM;AACN,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,gBAAa;AACb,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,UAAO;AApLG,SAAAA;AAAA,GAAA;AAwLZ,IAAM,mBAAwC,IAAI;AAAA,EAChD,OAAO,OAAO,eAAe;AAC/B;AAGO,SAAS,kBAAkB,OAA0C;AAC1E,SAAO,OAAO,UAAU,YAAY,iBAAiB,IAAI,MAAM,YAAY,CAAC;AAC9E;AAUO,SAAS,eAAe,OAAwB;AACrD,SAAO,gBAAgB,KAAK,KAAK,KAAK,UAAU,KAAK,KAAK;AAC5D;AAGO,SAAS,eAAe,OAAwB;AACrD,SAAO,gBAAgB,KAAK,KAAK;AACnC;AAGO,SAAS,gBAAgB,OAAwB;AACtD,SAAO,2CAA2C,KAAK,KAAK;AAC9D;AAGO,SAAS,qBAAqB,OAAwB;AAC3D,SAAO,sBAAsB,KAAK,KAAK;AACzC;AACO,SAAS,kBAAkB,OAAwB;AACxD,SAAO,qBAAqB,KAAK,KAAK;AACxC;AAGO,SAAS,sBAAsB,OAAwB;AAC5D,SAAO,MAAM,YAAY,MAAM;AACjC;AACO,SAAS,mBAAmB,OAAwB;AACzD,SAAO,qBAAqB,KAAK,KAAK;AACxC;AAcO,SAAS,iBAAiB,OAAyB;AACxD,MAAI,OAAO,UAAU,YAAY,MAAM,WAAW,EAAG,QAAO;AAE5D,QAAM,QAAQ,MAAM,MAAM,GAAG;AAC7B,MAAI,MAAM,KAAK,UAAQ,KAAK,WAAW,CAAC,EAAG,QAAO;AAClD,QAAM,WAAW,MAAM,YAAY;AACnC,MAAI,mBAAmB,IAAI,QAAQ,EAAG,QAAO;AAC7C,MAAI,MAAM,CAAC,GAAG,YAAY,MAAM,KAAK;AACnC,WAAO,MAAM,SAAS,KAAK,MAAM,MAAM,CAAC,EAAE,MAAM,kBAAkB;AAAA,EACpE;AACA,MAAI,IAAI;AAKR,QAAM,OAAO,MAAM,CAAC;AACpB,MAAI,CAAC,QAAQ,CAAC,kBAAkB,KAAK,IAAI,EAAG,QAAO;AACnD,MAAI,KAAK,WAAW,KAAK,CAAC,kBAAkB,IAAI,EAAG,QAAO;AAC1D,OAAK;AAGL,MAAI,KAAK,UAAU,GAAG;AACpB,QAAI,eAAe;AACnB,WAAO,IAAI,MAAM,UAAU,eAAe,KAAK,gBAAgB,KAAK,MAAM,CAAC,CAAE,GAAG;AAC9E,WAAK;AACL,sBAAgB;AAAA,IAClB;AAAA,EACF;AAGA,MAAI,IAAI,MAAM,UAAU,eAAe,MAAM,CAAC,CAAW,GAAG;AAC1D,SAAK;AAAA,EACP;AAGA,MAAI,IAAI,MAAM,UAAU,eAAgB,MAAM,CAAC,EAAa,YAAY,CAAC,GAAG;AAE1E,SAAK;AAAA,EACP;AAGA,QAAM,WAAW,oBAAI,IAAY;AACjC,SAAO,IAAI,MAAM,UAAU,gBAAiB,MAAM,CAAC,CAAY,GAAG;AAChE,UAAM,UAAU,MAAM,CAAC,EAAG,YAAY;AACtC,QAAI,SAAS,IAAI,OAAO,EAAG,QAAO;AAClC,aAAS,IAAI,OAAO;AACpB,SAAK;AAAA,EACP;AAIA,QAAM,sBAAsB,oBAAI,IAAY;AAC5C,SAAO,IAAI,MAAM,UAAU,qBAAsB,MAAM,CAAC,CAAY,GAAG;AACrE,UAAM,YAAY,MAAM,CAAC,EAAG,YAAY;AACxC,QAAI,oBAAoB,IAAI,SAAS,EAAG,QAAO;AAC/C,wBAAoB,IAAI,SAAS;AACjC,SAAK;AAEL,QAAI,EAAE,IAAI,MAAM,UAAU,kBAAkB,MAAM,CAAC,CAAE,GAAI,QAAO;AAChE,WAAO,IAAI,MAAM,UAAU,kBAAkB,MAAM,CAAC,CAAE,GAAG;AACvD,WAAK;AAAA,IACP;AAAA,EACF;AAGA,MAAI,IAAI,MAAM,UAAU,sBAAsB,MAAM,CAAC,CAAE,GAAG;AACxD,SAAK;AACL,QAAI,EAAE,IAAI,MAAM,UAAU,mBAAmB,MAAM,CAAC,CAAE,GAAI,QAAO;AACjE,WAAO,IAAI,MAAM,UAAU,mBAAmB,MAAM,CAAC,CAAE,GAAG;AACxD,WAAK;AAAA,IACP;AAAA,EACF;AAGA,SAAO,MAAM,MAAM;AACrB;AAGA,IAAM,qBAA0C,oBAAI,IAAI;AAAA,EACtD;AAAA,EAAc;AAAA,EAAe;AAAA,EAAa;AAAA,EAAS;AAAA,EAAS;AAAA,EAC5D;AAAA,EAAc;AAAA,EAAS;AAAA,EAAa;AAAA,EAAS;AAAA,EAAW;AAAA,EACxD;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAU;AAAA,EAAU;AAAA,EACxD;AAAA,EAAa;AAAA,EAAa;AAAA,EAAY;AAAA,EAAY;AAAA,EAAU;AAAA,EAC5D;AACF,CAAC;;;AC1TM,IAAM,QAAQ;AAAA,EACnB,QAAQ,MAAM,IAAI,aAAqB,QAAQ;AAAA,EAC/C,QAAQ,MAAM,IAAI,aAAqB,QAAQ;AAAA,EAC/C,SAAS,MAAM,IAAI,aAAsB,SAAS;AAAA,EAClD,QAAQ,CAAyC,WAC/C,IAAI,aAAgB,UAAU,EAAE,OAAO,OAAO,CAAC;AAAA,EACjD,OAAO,CAAC,aAA2B,IAAI,aAAa,SAAS,EAAE,SAAS,CAAC;AAAA,EACzE,KAAK,CAAwB,YAC3B,IAAI,aAAuB,OAAO,EAAE,QAAQ,CAAC;AAAA,EAC/C,OAAO,MACL,IAAI,aAAqB,QAAQ,EAC9B,UAAU,aAAa,EACvB,IAAI;AAAA,IACH,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,EACX,CAAC,EACA,YAAY,kBAAkB;AAAA,EACnC,OAAO,MACL,IAAI,aAAqB,QAAQ,EAC9B,UAAU,aAAa,EACvB,IAAI;AAAA,IACH,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,EACX,CAAC,EACA,YAAY,gBAAgB;AAAA,EACjC,KAAK,MACH,IAAI,aAAqB,QAAQ,EAC9B,UAAU,WAAW,EACrB,IAAI;AAAA,IACH,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,EACX,CAAC,EACA,YAAY,OAAO;AAAA,EACxB,MAAM,MACJ,IAAI,aAAqB,QAAQ,EAC9B,IAAI;AAAA,IACH,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,EACX,CAAC,EACA,UAAU,YAAY,EACtB,YAAY,QAAQ;AAAA,EACzB,aAAa,MACX,IAAI,aAAqB,QAAQ,EAC9B,IAAI;AAAA,IACH,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,EACX,CAAC,EACA,UAAU,mBAAmB,EAC7B,YAAY,kCAAkC;AAAA,EACnD,SAAS,MACP,IAAI,aAAqB,QAAQ,EAC9B,IAAI;AAAA,IACH,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,EACX,CAAC,EACA,UAAU,CAAC,MAAM,oBAAoB,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,EACzD,YAAY,8CAA8C;AAAA,EAC/D,SAAS,MACP,IAAI,aAAqB,QAAQ,EAC9B,IAAI;AAAA,IACH,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,EACX,CAAC,EACA,UAAU,CAAC,MAAM,oBAAoB,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,EACzD,YAAY,8CAA8C;AAAA,EAC/D,UAAU,MACR,IAAI,aAAqB,QAAQ,EAC9B,IAAI;AAAA,IACH,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,EACX,CAAC,EACA,UAAU,gBAAgB,EAC1B,YAAY,sDAAsD;AAAA,EACvE,aAAa,MACX,IAAI,aAAqB,QAAQ,EAC9B,IAAI;AAAA,IACH,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,EACX,CAAC,EACA,UAAU,gBAAgB,EAC1B,YAAY,wCAAwC;AAAA,EACzD,UAAU,MACR,IAAI,aAAqB,QAAQ,EAC9B,IAAI;AAAA,IACH,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,EACX,CAAC,EACA,IAAI,GAAG,EACP,IAAI,EAAE,EACN,YAAY,gDAAgD;AAAA,EACjE,WAAW,MACT,IAAI,aAAqB,QAAQ,EAC9B,IAAI;AAAA,IACH,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,SAAS;AAAA,EACX,CAAC,EACA,IAAI,IAAI,EACR,IAAI,GAAG,EACP,YAAY,iDAAiD;AAAA,EAClE,SAAS,MACP,IAAI,aAAqB,QAAQ,EAC9B,UAAU,cAAc,EACxB,YAAY,yCAAyC;AAAA,EAC1D,aAAa,MACX,IAAI,aAAqB,QAAQ,EAC9B,UAAU,mBAAmB,EAC7B,YAAY,iDAAiD;AAAA,EAClE,cAAc,MACZ,IAAI,aAAqB,QAAQ,EAC9B,UAAU,gBAAgB,EAC1B;AAAA,IACC;AAAA,EACF;AACN;;;ACvJO,IAAM,4BAA4B;;;ACIlC,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,2BAA2B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AACF;AAGO,IAAM,qCAAqC;AAAA,EAChD;AAAA,IACE,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AACF;AAGO,IAAM,wCAAwC;AAAA,EACnD;AAAA,EACA;AACF;AAGO,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,8BAA8B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,kCAAkC;AAGxC,IAAM,kCAAkC;AAGxC,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,4BAA4B;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,8BAA8B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAGO,IAAM,8BAA8B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,WAAW,cAAc;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAG;AACD,SAAO,OAAO,UAAU;AAC1B;AACA,WAAW,SAAS,oCAAoC;AACtD,SAAO,OAAO,KAAK;AACrB;;;ACrGO,IAAM,iCAAiC,OAAO,OAAO;AAAA,EAC1D;AAAA,EACA;AACF,CAAU;AAOH,IAAM,2BAA2B,OAAO,OAAO;AAAA,EACpD;AAAA,EACA;AACF,CAAU;;;ACjBH,SAAS,gBACd,WACA,KACA,OACA,KACA,cAA8B,QAC9B,QACA,QAC2B;AAC3B,QAAM,OAAO,YAAY,GAAG,SAAS,IAAI,GAAG,KAAK;AACjD,MAAI,KAAK,MAAM,mBAAmB,WAAW,KAAK,cAAc,OAAO;AACrE,UAAM,UAAU,UAAU,UAAa,UAAU,QAAQ,UAAU;AACnE,QAAI,SAAS;AACX,YAAM,MAAM,qCAAqC,IAAI;AACrD,UAAI,gBAAgB,UAAU;AAC5B,gBAAQ,KAAK,GAAG;AAChB,eAAO,EAAE,cAAc,KAAK;AAAA,MAC9B;AACA,UAAI,gBAAgB,QAAQ;AAC1B,gBAAQ,OAAO,2BAA2B,GAAG,EAAE;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AACA,SAAO,EAAE,cAAc,MAAM;AAC/B;AAKO,SAAS,kBACd,OACA,OACA,WACA,QACqB;AACrB,QAAM,QAAQ,CACZ,KACA,OACA,KACA,KACA,MAAqD,CAAC,MACnD;AACH,QAAI,CAAC,IAAK;AACV,UAAM,YAAY,UAAU,UAAa,UAAU;AAGnD,QAAI,IAAI,MAAM,WAAW,WAAW;AAClC,UAAI,CAAC,UAAW,KAAI,MAAM,WAAW,IAAI,UAAU,KAAK;AACxD;AAAA,IACF;AACA,QAAI,IAAI,MAAM,WAAW,QAAQ;AAC/B,UAAI,CAAC,UAAW,KAAI,MAAM,MAAM,IAAI,OAAO,KAAK;AAChD;AAAA,IACF;AACA,QAAI,IAAI,MAAM,WAAW,SAAS;AAChC,UAAI,CAAC,UAAW,KAAI,GAAG,IAAI;AAC3B;AAAA,IACF;AAEA,QAAI,aAAa,IAAI,eAAe,OAAO;AACzC;AAAA,IACF;AAEA,QAAI,IAAI,SAAS,YAAY,IAAI,QAAQ;AACvC,YAAM,MAAW,CAAC;AAClB,iBAAW,CAAC,UAAU,QAAQ,KAAK,OAAO,QAAQ,IAAI,MAAM,GAAG;AAC7D,cAAM,UAAU,QAAQ,QAAQ,GAAG,UAAU,KAAK,EAAE,WAAW,IAAI,CAAC;AAAA,MACtE;AACA,UAAI,GAAG,IAAI;AACX;AAAA,IACF;AAEA,QAAI,IAAI,SAAS,WAAW,IAAI,YAAY,MAAM,QAAQ,KAAK,GAAG;AAChE,UAAI,GAAG,IAAI,MAAM,IAAI,CAAC,SAAc;AAClC,cAAM,MAAW,CAAC;AAElB,cAAM,IAAI,UAAU,MAAM,KAAK,KAAK;AAAA,UAClC,WAAW;AAAA,UACX,aAAa;AAAA,QACf,CAAC;AACD,YAAI,OAAO,UAAU,eAAe,KAAK,KAAK,GAAG,GAAG;AAClD,iBAAO,IAAI,GAAG;AAAA,QAChB;AACA,eAAO,OAAO,KAAK,GAAG,EAAE,SAAS,IAAI,MAAM;AAAA,MAC7C,CAAC;AACD;AAAA,IACF;AAEA,QAAI,IAAI,SAAS,OAAO;AACtB,YAAM,MAAW,EAAE,GAAG,MAAM;AAC5B,YAAM,WAAW,IAAI;AACrB,UAAI,YAAY,OAAO;AACrB,mBAAW,CAAC,UAAU,QAAQ,KAAK,OAAO,QAAQ,QAAQ,GAAG;AAC3D,gBAAM,UAAU,MAAM,QAAQ,GAAG,UAAU,KAAK,EAAE,WAAW,IAAI,CAAC;AAAA,QACpE;AAAA,MACF;AACA,UAAI,GAAG,IAAI;AACX;AAAA,IACF;AAEA,QAAI,GAAG,IAAI;AAAA,EACb;AAEA,QAAM,SAAc,CAAC;AACrB,aAAW,OAAO,OAAO;AACvB,UAAM,MAAM,GAAG,GAAG,QAAQ,GAAG,GAAG,KAAK,MAAM;AAAA,EAC7C;AACA,SAAO;AACT;AAKO,SAAS,eACd,OACA,QACA,WACqB;AACrB,QAAM,YAAY,CAChB,KACA,KACA,WACA,MAAqD,CAAC,MAC9C;AACR,QAAI,CAAC,IAAK,QAAO,YAAY,GAAG;AAChC,UAAM,SAAS,IAAI,MAAM;AACzB,UAAM,WACJ,cAAc,UACd,cAAc,QACd,OAAO,UAAU,eAAe,KAAK,WAAW,GAAG;AACrD,QAAI,WAAW,WAAW;AACxB,YAAM,MACJ,YAAY,MAAM,WAAW,KAC7B,YAAY,GAAG,IAAI,aAAa,GAAG,WAAW;AAChD,aAAO,QAAQ,SAAY,SAAY,UAAU,GAAG;AAAA,IACtD;AACA,QAAI,WAAW,QAAQ;AACrB,YAAM,IACJ,YAAY,MAAM,MAAM,KAAK,YAAY,GAAG,IAAI,aAAa,GAAG,MAAM;AACxE,aAAO,MAAM,SAAY,SAAY;AAAA,IACvC;AACA,QAAI,WAAW;AACb,aAAO,WAAW,eAAe,GAAG,IAAI,OAAO;AACjD,QAAI,CAAC,YAAY,IAAI,eAAe,OAAO;AACzC,aAAO;AAAA,IACT;AAEA,QAAI,IAAI,SAAS,YAAY,IAAI,QAAQ;AACvC,YAAM,MAAW,CAAC;AAClB,YAAM,SACJ,aAAa,OAAO,UAAU,eAAe,KAAK,WAAW,GAAG,IAC5D,UAAU,GAAG,IACb,aAAa,CAAC;AACpB,iBAAW,CAAC,UAAU,QAAQ,KAAK,OAAO,QAAQ,IAAI,MAAM,GAAG;AAC7D,cAAM,QAAQ,UAAU,UAAU,UAAU,MAAM;AAClD,YAAI,UAAU,QAAW;AACvB,cAAI,QAAQ,IAAI;AAAA,QAClB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,QAAI,IAAI,SAAS,WAAW,IAAI,UAAU;AACxC,YAAM,MAAM,YAAY,GAAG;AAC3B,UAAI,CAAC,MAAM,QAAQ,GAAG,EAAG,QAAO;AAChC,aAAO,IAAI;AAAA,QAAI,CAAC,SACd,UAAU,IAAI,UAAU,KAAK,MAAM,EAAE,WAAW,KAAK,aAAa,KAAK,CAAC;AAAA,MAC1E;AAAA,IACF;AAEA,QAAI,IAAI,SAAS,OAAO;AACtB,YAAM,MAAM,EAAE,GAAI,YAAY,GAAG,KAAK,CAAC,EAAG;AAC1C,YAAM,WAAW,IAAI;AACrB,UAAI,UAAU;AACZ,mBAAW,CAAC,UAAU,QAAQ,KAAK,OAAO,QAAQ,QAAQ,GAAG;AAC3D,gBAAM,QAAQ,UAAU,UAAU,UAAU,GAAG;AAC/C,cAAI,UAAU,QAAW;AACvB,gBAAI,QAAQ,IAAI;AAAA,UAClB;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,WAAO,YAAY,GAAG;AAAA,EACxB;AAEA,QAAM,SAAc,CAAC;AACrB,aAAW,OAAO,OAAO;AACvB,UAAM,QAAQ,UAAU,MAAM,GAAG,GAAG,KAAK,MAAM;AAC/C,QAAI,UAAU,QAAW;AACvB,aAAO,GAAG,IAAI;AAAA,IAChB;AAAA,EACF;AACA,SAAO;AACT;AAKO,SAAS,eACd,OACA,MACA,aACqB;AACrB,QAAM,QAAQ,CACZ,KACA,OACA,MAA8B,CAAC,MACvB;AACR,QAAI,CAAC,IAAK,QAAO;AACjB,SACG,UAAU,UAAa,UAAU,SAClC,IAAI,eAAe,OACnB;AACA,aAAO;AAAA,IACT;AACA,UAAM,WAAW,IAAI,MAAM;AAC3B,QAAI,aAAa,OAAQ,QAAO;AAChC,QAAI,aAAa,SAAU,QAAO;AAClC,QAAI,aAAa,YAAa,QAAO,YAAY,KAAK;AAEtD,QAAI,IAAI,SAAS,YAAY,IAAI,QAAQ;AACvC,YAAM,MAAW,CAAC;AAClB,YAAM,MAAM,SAAS,CAAC;AACtB,iBAAW,CAAC,GAAG,QAAQ,KAAK,OAAO,QAAQ,IAAI,MAAM,GAAG;AACtD,cAAM,QAAQ,MAAM,UAAU,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC;AACtD,YAAI,UAAU,OAAW,KAAI,CAAC,IAAI;AAAA,MACpC;AACA,aAAO;AAAA,IACT;AAEA,QAAI,IAAI,SAAS,WAAW,IAAI,UAAU;AACxC,UAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO;AAClC,YAAM,MAAM,MACT,IAAI,CAAC,MAAW,MAAM,IAAI,UAAU,GAAG,EAAE,WAAW,IAAI,UAAU,CAAC,CAAC,EACpE,OAAO,CAAC,MAAM,MAAM,MAAS;AAChC,aAAO;AAAA,IACT;AAEA,QAAI,IAAI,SAAS,OAAO;AACtB,YAAM,MAAW,QAAQ,EAAE,MAAM,MAAM,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC;AAC/D,YAAM,WAAW,IAAI;AACrB,YAAM,MAAM,SAAS,CAAC;AACtB,UAAI,UAAU;AACZ,mBAAW,CAAC,GAAG,QAAQ,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACpD,gBAAM,QAAQ,MAAM,UAAU,IAAI,CAAC,CAAC;AACpC,cAAI,UAAU,OAAW,KAAI,CAAC,IAAI;AAAA,QACpC;AAAA,MACF,WAAW,OAAO;AAEhB,YAAI,OAAO,MAAM;AACjB,YAAI,KAAK,MAAM;AAAA,MACjB;AACA,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,SAAc,CAAC;AACrB,aAAW,OAAO,OAAO;AACvB,UAAM,QAAQ,MAAM,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC;AAC3C,QAAI,UAAU,OAAW,QAAO,GAAG,IAAI;AAAA,EACzC;AACA,SAAO;AACT;AAKO,SAAS,YAAY,OAMzB;AACD,QAAM,YAAwB,CAAC;AAC/B,QAAM,QAAQ,CAAC,KAAU,SAAiB;AACxC,QAAI,CAAC,IAAK;AACV,QAAI,IAAI,QAAQ,IAAI,KAAK,mBAAmB,QAAQ;AAClD,gBAAU,KAAK;AAAA,QACb,OAAO;AAAA,QACP,gBAAgB,IAAI,KAAK;AAAA,QACzB,QAAQ,IAAI,KAAK;AAAA,QACjB,aAAa,IAAI,KAAK;AAAA,QACtB,SAAS,IAAI,KAAK;AAAA,MACpB,CAAC;AAAA,IACH;AAEA,SAAK,IAAI,SAAS,YAAY,IAAI,SAAS,UAAU,IAAI,QAAQ;AAC/D,iBAAW,CAAC,UAAU,QAAQ,KAAK,OAAO,QAAQ,IAAI,MAAM,GAAG;AAC7D,cAAM,UAAU,GAAG,IAAI,IAAI,QAAQ,EAAE;AAAA,MACvC;AAAA,IACF;AAEA,QAAI,IAAI,SAAS,WAAW,IAAI,UAAU;AACxC,YAAM,WAAW,GAAG,IAAI;AACxB,WACG,IAAI,SAAS,SAAS,YAAY,IAAI,SAAS,SAAS,UACzD,IAAI,SAAS,QACb;AACA,mBAAW,CAAC,UAAU,QAAQ,KAAK,OAAO;AAAA,UACxC,IAAI,SAAS;AAAA,QACf,GAAG;AACD,gBAAM,UAAU,GAAG,QAAQ,IAAI,QAAQ,EAAE;AAAA,QAC3C;AAAA,MACF,OAAO;AACL,cAAM,IAAI,UAAU,QAAQ;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAEA,aAAW,OAAO,OAAO;AACvB,UAAM,MAAM,GAAG,GAAG,GAAG;AAAA,EACvB;AACA,SAAO;AACT;AAKO,SAAS,kBACd,OACA,QACqB;AACrB,QAAM,SAAc,MAAM,QAAQ,MAAM,IAAI,CAAC,GAAG,MAAM,IAAI,EAAE,GAAG,OAAO;AAEtE,QAAM,YAAY,CAAC,QAAa,MAA8B,QAAa;AACzE,QAAI,MAAM;AACV,aAAS,IAAI,GAAG,IAAI,KAAK,SAAS,GAAG,KAAK;AACxC,YAAM,IAAI,KAAK,CAAC;AAChB,UAAI,MAAM,OAAW;AACrB,UAAI,IAAI,CAAC,MAAM,QAAW;AACxB,cAAM,OAAO,KAAK,IAAI,CAAC;AACvB,YAAI,CAAC,IAAI,OAAO,SAAS,WAAW,CAAC,IAAI,CAAC;AAAA,MAC5C;AACA,YAAM,IAAI,CAAC;AAAA,IACb;AACA,UAAM,OAAO,KAAK,KAAK,SAAS,CAAC;AACjC,QAAI,SAAS,OAAW;AACxB,QAAI,IAAI,IAAI;AAAA,EACd;AAEA,QAAM,QAAQ,CACZ,KACA,MACA,MACA,YACG;AACH,QAAI,CAAC,IAAK;AAEV,UAAM,YAAY,CAAC,cAAsB;AACvC,YAAM,OAAO,KAAK,KAAK,SAAS,CAAC;AACjC,UAAI,SAAS,OAAW;AACxB,UAAI,OAAO,SAAS,UAAU;AAC5B,kBAAU,QAAQ,CAAC,GAAG,MAAM,SAAS,GAAG,IAAI;AAAA,MAC9C,OAAO;AACL,kBAAU,QAAQ,CAAC,GAAG,KAAK,MAAM,GAAG,EAAE,GAAG,SAAS,GAAG,IAAI;AAAA,MAC3D;AAAA,IACF;AAEA,QAAI,IAAI,MAAM,WAAW,WAAW;AAClC,YAAM,YAAY,GAAG,OAAO;AAC5B,UAAI,QAAQ,OAAO,UAAU,eAAe,KAAK,MAAM,SAAS,GAAG;AACjE,kBAAU,SAAS;AAAA,MACrB;AACA;AAAA,IACF;AACA,QAAI,IAAI,MAAM,WAAW,QAAQ;AAC/B,YAAM,YAAY,GAAG,OAAO;AAC5B,UAAI,QAAQ,OAAO,UAAU,eAAe,KAAK,MAAM,SAAS,GAAG;AACjE,kBAAU,SAAS;AAAA,MACrB;AACA;AAAA,IACF;AACA,QAAI,IAAI,MAAM,WAAW,SAAS;AAChC,UAAI,QAAQ,OAAO,UAAU,eAAe,KAAK,MAAM,OAAO,GAAG;AAC/D,kBAAU,QAAQ,MAAM,IAAI;AAAA,MAC9B;AACA;AAAA,IACF;AAEA,QAAI,IAAI,SAAS,YAAY,IAAI,QAAQ;AACvC,YAAM,MACJ,QAAQ,OAAO,UAAU,eAAe,KAAK,MAAM,OAAO,IACtD,KAAK,OAAO,IACZ;AACN,iBAAW,CAAC,GAAG,QAAQ,KAAK,OAAO,QAAQ,IAAI,MAAM,GAAG;AACtD,cAAM,UAAU,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;AAAA,MACtC;AACA;AAAA,IACF;AAEA,QAAI,IAAI,SAAS,WAAW,IAAI,UAAU;AACxC,YAAM,MAAM,OAAO,OAAO;AAC1B,UAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,YAAI;AAAA,UAAQ,CAAC,MAAM,QACjB,MAAM,IAAI,UAAU,MAAM,CAAC,GAAG,MAAM,GAAG,GAAG,OAAO;AAAA,QACnD;AAAA,MACF;AACA;AAAA,IACF;AAEA,QAAI,IAAI,SAAS,OAAO;AACtB,YAAM,WAAW,IAAI;AACrB,YAAM,MAAM,OAAO,OAAO;AAC1B,UAAI,YAAY,KAAK;AACnB,mBAAW,CAAC,GAAG,QAAQ,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACpD,gBAAM,UAAU,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,aAAW,OAAO,OAAO;AACvB,UAAM,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,GAAG,GAAG;AAAA,EACtC;AAEA,SAAO;AACT;;;ACxZA,IAAM,uBAAuB,oBAAI,IAAyB;AAE1D,SAAS,UAAa,OAAa;AACjC,QAAM,OAAO,oBAAI,QAAQ;AACzB,QAAM,WAAW,CAAC,QAAkB;AAClC,QAAI,QAAQ,QAAQ,OAAO,QAAQ,SAAU,QAAO;AACpD,QAAI,KAAK,IAAI,GAAG,EAAG,OAAM,IAAI,UAAU,kCAAkC;AACzE,QAAI,eAAe,KAAM,QAAO,IAAI,KAAK,IAAI,QAAQ,CAAC;AACtD,QAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,YAAM,MAAa,CAAC;AACpB,WAAK,IAAI,KAAK,GAAG;AACjB,UAAI,QAAQ,CAAC,SAAS,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC;AAC9C,aAAO;AAAA,IACT;AACA,UAAM,MAAW,CAAC;AAClB,SAAK,IAAI,KAAK,GAAG;AACjB,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,GAAG,EAAG,KAAI,CAAC,IAAI,SAAS,CAAC;AAC7D,WAAO;AAAA,EACT;AACA,SAAO,SAAS,KAAK;AACvB;AAEA,SAAS,mBAAmB,KAAU,SAAoC;AACxE,SAAO,QAAQ,oBAAoB,SAAS,KAAK,aAAa,cAAc;AAC9E;AAEA,SAAS,oBACP,KACA,OACA,SACK;AACL,MAAI,UAAU,QAAW;AACvB,WAAO;AAAA,EACT;AAEA,MAAI,UAAU,MAAM;AAClB,WAAO;AAAA,EACT;AAEA,UAAQ,KAAK,MAAM;AAAA,IACjB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,UAAU,KAAK;AAAA,IACxB,KAAK,OAAO;AACV,UAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GAAG;AACvE,eAAO,UAAU,KAAK;AAAA,MACxB;AAEA,YAAM,QAAQ,SAAS,GAAG;AAC1B,UAAI,CAAC,SAAS,OAAO,KAAK,KAAK,EAAE,WAAW,GAAG;AAC7C,eAAO,UAAU,KAAK;AAAA,MACxB;AAEA,YAAM,gBAAqC,CAAC;AAC5C,UAAI,OAAO,MAAM,SAAS,UAAU;AAClC,sBAAc,OAAO,MAAM;AAAA,MAC7B;AACA,UAAI,OAAO,MAAM,OAAO,UAAU;AAChC,sBAAc,KAAK,MAAM;AAAA,MAC3B;AAEA,iBAAW,CAAC,UAAU,QAAQ,KAAK,OAAO,QAAQ,KAAK,GAAG;AACxD,YAAI,CAAC,mBAAmB,UAAU,OAAO,GAAG;AAC1C;AAAA,QACF;AACA,YAAI,CAAC,OAAO,UAAU,eAAe,KAAK,OAAO,QAAQ,GAAG;AAC1D;AAAA,QACF;AAEA,cAAM,kBAAkB;AAAA,UACtB;AAAA,UACA,MAAM,QAAQ;AAAA,UACd;AAAA,QACF;AACA,YAAI,oBAAoB,QAAW;AACjC,wBAAc,QAAQ,IAAI;AAAA,QAC5B;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,IACA,KAAK,UAAU;AACb,UAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GAAG;AACvE,eAAO,UAAU,KAAK;AAAA,MACxB;AAEA,YAAM,QAAQ,SAAS,GAAG;AAC1B,UAAI,CAAC,SAAS,OAAO,KAAK,KAAK,EAAE,WAAW,GAAG;AAC7C,eAAO,UAAU,KAAK;AAAA,MACxB;AAEA,YAAM,mBAAwC,CAAC;AAC/C,iBAAW,CAAC,UAAU,QAAQ,KAAK,OAAO,QAAQ,KAAK,GAAG;AACxD,YAAI,CAAC,mBAAmB,UAAU,OAAO,GAAG;AAC1C;AAAA,QACF;AACA,YAAI,CAAC,OAAO,UAAU,eAAe,KAAK,OAAO,QAAQ,GAAG;AAC1D;AAAA,QACF;AAEA,cAAM,kBAAkB;AAAA,UACtB;AAAA,UACA,MAAM,QAAQ;AAAA,UACd;AAAA,QACF;AACA,YAAI,oBAAoB,QAAW;AACjC,2BAAiB,QAAQ,IAAI;AAAA,QAC/B;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,IACA,KAAK,SAAS;AACZ,UAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,eAAO,UAAU,KAAK;AAAA,MACxB;AAEA,UAAI,CAAC,IAAI,UAAU;AACjB,eAAO,UAAU,KAAK;AAAA,MACxB;AAEA,aAAO,MAAM,IAAI,CAAC,SAAS,oBAAoB,IAAI,UAAU,MAAM,OAAO,CAAC;AAAA,IAC7E;AAAA,IACA;AACE,aAAO,UAAU,KAAK;AAAA,EAC1B;AACF;AAEA,SAAS,UAAU,GAAW,GAAmB;AAC/C,QAAM,KAAK,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC;AAClD,QAAM,KAAK,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC;AAClD,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,UAAM,KAAK,GAAG,CAAC,KAAK;AACpB,UAAM,KAAK,GAAG,CAAC,KAAK;AACpB,QAAI,KAAK,GAAI,QAAO;AACpB,QAAI,KAAK,GAAI,QAAO;AAAA,EACtB;AACA,SAAO;AACT;AAKA,SAAS,mBACP,MACA,OACA,KAOqB;AAErB,MAAI,OAAO,SAAS,YAAY;AAC9B,WAAO,KAAK,OAAO,GAAG;AAAA,EACxB;AAGA,QAAM,QAAQ,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,IAAI,OAAO,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;AAChE,MAAI,UAA+B,EAAE,GAAG,MAAM;AAC9C,MAAI,cAAc,IAAI;AAEtB,aAAW,QAAQ,OAAO;AAExB,QAAI,UAAU,aAAa,KAAK,EAAE,IAAI,KAAK,UAAU,KAAK,IAAI,IAAI,EAAE,KAAK,GAAG;AAC1E,UAAI,MAAM,0BAA0B,WAAW,YAAO,KAAK,EAAE,EAAE;AAC/D,YAAM,MAAM,KAAK,IAAI,SAAS,EAAE,GAAG,KAAK,MAAM,aAAa,IAAI,KAAK,GAAG,CAAC;AACxE,UAAI,CAAC,OAAO,IAAI,OAAO,QAAQ,CAAC,IAAI,OAAO;AACzC,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,QAAQ,KAAK,QAAQ,SACjB,IAAI,SACJ,CAAC,kCAAkC,WAAW,QAAQ,KAAK,EAAE,EAAE;AAAA,QACrE;AAAA,MACF;AACA,gBAAU,IAAI;AACd,oBAAc,KAAK;AAAA,IACrB;AAAA,EACF;AAGA,SAAO,EAAE,IAAI,MAAM,OAAO,QAAQ;AACpC;AAEA,SAAS,aACP,WACA,OACA,YACoB;AACpB,MAAI,CAAC,WAAY;AAEjB,QAAM,SAAS,MAAM,QAAQ,UAAU,IACnC,aACA,MAAM,KAAK,UAAU;AAEzB,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,UAAM,UAAU,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,SAAS,CAAC,CAAC;AACvD,QAAI,QAAQ,SAAS,GAAG;AACtB,aAAO,SAAS,SAAS,uBAAuB,OAAO,KAAK,IAAI,CAAC;AAAA,IACnE;AAAA,EACF,OAAO;AACL,QAAI,CAAC,OAAO,SAAS,KAAK,GAAG;AAC3B,aAAO,SAAS,SAAS,oBAAoB,OAAO,KAAK,IAAI,CAAC;AAAA,IAChE;AAAA,EACF;AACF;AAIA,SAAS,cAAc,KAA8C;AACnE,QAAM,MAAM,MAAM,QAAQ,KAAK,IAAI,IAC/B,IAAI,OACJ,MAAM,QAAQ,KAAK,UAAU,IAC7B,IAAI,aACJ,MAAM,QAAQ,KAAK,KAAK,IACxB,IAAI,QACJ,MAAM,QAAQ,KAAK,WAAW,IAC9B,IAAI,cACJ,KAAK,oBAAoB,MACzB,MAAM,KAAK,IAAI,QAAQ,IACvB;AAEJ,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,KAAK,IAAI;AAAA,IACb,CAAC,MAAe,OAAO,MAAM,YAAY,OAAO,MAAM;AAAA,EACxD;AACA,SAAO,KAAM,MAAiC;AAChD;AAGA,SAAS,aACP,KACA,SACkC;AAClC,OACG,YAAY,UAAa,YAAY,SACtC,OAAO,KAAK,eAAe,YAC3B;AACA,UAAM,OAAO,IAAI,WAAW;AAC5B,QAAI,SAAS,QAAW;AACtB,aAAO,EAAE,OAAO,MAAM,SAAS,KAAK;AAAA,IACtC;AAAA,EACF;AACA,SAAO,EAAE,OAAO,SAAS,SAAS,MAAM;AAC1C;AAEA,SAAS,WAAW,KAAmB;AACrC,SAAO,KAAK,eAAe;AAC7B;AAEA,SAAS,aAAa,KAA0D;AAC9E,SAAO,KAAK,cAAc;AAC5B;AAEA,SAAS,SAAS,KAA2C;AAC3D,SAAO,KAAK,UAAU,KAAK,SAAS;AACtC;AAEA,IAAM,8BAA8B;AACpC,IAAM,8BAA8B;AACpC,IAAM,gCAAgC;AAEtC,SAAS,mCAAmC,OAAyB;AACnE,QAAM,UAAoD;AAAA,IACxD,EAAE,OAAO,OAAO,OAAO,EAAE;AAAA,EAC3B;AACA,QAAM,OAAO,oBAAI,QAAgB;AACjC,MAAI,eAAe;AAEnB,MAAI;AACF,WAAO,QAAQ,SAAS,GAAG;AACzB,YAAM,UAAU,QAAQ,IAAI;AAC5B,UAAI,CAAC,SAAS;AACZ;AAAA,MACF;AACA,sBAAgB;AAChB,UACE,eAAe,+BACf,QAAQ,QAAQ,6BAChB;AACA,eAAO;AAAA,MACT;AACA,UACE,OAAO,QAAQ,UAAU,YACzB,QAAQ,UAAU,MAClB;AACA;AAAA,MACF;AACA,UAAI,KAAK,IAAI,QAAQ,KAAK,GAAG;AAC3B,eAAO;AAAA,MACT;AACA,WAAK,IAAI,QAAQ,KAAK;AAEtB,YAAM,OAAO,OAAO,KAAK,QAAQ,KAAK;AACtC,UACE,eAAe,QAAQ,SAAS,KAAK,SACrC,6BACA;AACA,eAAO;AAAA,MACT;AACA,YAAM,SAAS,QAAQ;AACvB,iBAAW,OAAO,MAAM;AACtB,gBAAQ,KAAK;AAAA,UACX,OAAO,OAAO,GAAG;AAAA,UACjB,OAAO,QAAQ,QAAQ;AAAA,QACzB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAOA,SAAS,qBAAqB,KAA+B;AAC3D,SAAO;AAAA,IACL,MAAM,EAAE,MAAM,SAAS;AAAA,IACvB,IAAI,EAAE,MAAM,SAAS;AAAA,IACrB,GAAI,SAAS,GAAG,KAAK,CAAC;AAAA,EACxB;AACF;AAEA,SAAS,sBACP,OACA,OACA,WAAW,QACX,QAA+B;AAAA,EAC7B,kBAAkB;AAAA,EAClB,eAAe;AACjB,GACU;AACV,MAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GAAG;AACvE,WAAO,CAAC;AAAA,EACV;AACA,MAAI,MAAM,oBAAoB,GAAG;AAC/B,UAAM,gBAAgB;AACtB,WAAO,CAAC;AAAA,EACV;AACA,QAAM,oBAAoB;AAE1B,QAAM,SAAS;AACf,QAAM,YAAY,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC;AAC5C,QAAM,YAAY,oBAAI,IAAY;AAElC,MAAI,OAAO,KAAK,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,UAAU,IAAI,GAAG,CAAC,GAAG;AAC1D,cAAU,IAAI,QAAQ;AAAA,EACxB;AAEA,aAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC9C,UAAM,QAAQ,OAAO,GAAG;AACxB,QAAI,UAAU,UAAa,UAAU,MAAM;AACzC;AAAA,IACF;AAEA,UAAM,gBAAgB,aAAa,SAAS,MAAM,GAAG,QAAQ,IAAI,GAAG;AACpE,UAAM,aAAa,SAAS,GAAG;AAC/B,QAAK,KAAa,SAAS,YAAY,YAAY;AACjD,iBAAW,kBAAkB;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,GAAG;AACD,kBAAU,IAAI,cAAc;AAAA,MAC9B;AACA;AAAA,IACF;AAEA,UAAM,WAAY,KAAa;AAC/B,QACG,KAAa,SAAS,YACtB,UAAU,SAAS,YAAY,UAAU,SAAS,UACnD,MAAM,QAAQ,KAAK,GACnB;AACA,YAAM,YACJ,SAAS,SAAS,QACd,qBAAqB,QAAQ,IAC7B,SAAS,QAAQ;AACvB,UAAI,CAAC,WAAW;AACd;AAAA,MACF;AACA,iBAAW,CAAC,OAAO,IAAI,KAAK,MAAM,QAAQ,GAAG;AAC3C,YAAI,MAAM,eAAe;AACvB;AAAA,QACF;AACA,mBAAW,kBAAkB;AAAA,UAC3B;AAAA,UACA;AAAA,UACA,GAAG,aAAa,IAAI,KAAK;AAAA,UACzB;AAAA,QACF,GAAG;AACD,oBAAU,IAAI,cAAc;AAAA,QAC9B;AAAA,MACF;AACA;AAAA,IACF;AAEA,QAAK,KAAa,SAAS,OAAO;AAChC,iBAAW,kBAAkB;AAAA,QAC3B;AAAA,QACA,qBAAqB,GAAG;AAAA,QACxB;AAAA,QACA;AAAA,MACF,GAAG;AACD,kBAAU,IAAI,cAAc;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAEA,SAAO,CAAC,GAAG,SAAS;AACtB;AAEA,SAAS,yBACP,MACA,OACA,aACiB;AACjB,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM,MAAM,QAAQ;AAAA,IACpB,MAAM,MAAM,QAAQ;AAAA,IACpB,SAAS,MAAM;AAAA,EACjB;AACF;AAEA,SAAS,yBACP,MACA,QACA,aACmB;AACnB,MAAI,WAAW,MAAM;AACnB,WAAO,CAAC;AAAA,EACV;AAEA,MAAI,WAAW,OAAO;AACpB,WAAO;AAAA,MACL;AAAA,QACE;AAAA,QACA,MAAM;AAAA,QACN,SAAS,4BAA4B,IAAI;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AAEA,MAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,WAAO,OAAO,IAAI,CAAC,UAAU,yBAAyB,MAAM,OAAO,WAAW,CAAC;AAAA,EACjF;AAEA,SAAO,CAAC,yBAAyB,MAAM,QAAQ,WAAW,CAAC;AAC7D;AAMA,SAAS,qBACP,WACA,KACA,OACA,KACA,QACsB;AACtB,MAAI,UAAU,UAAa,UAAU,MAAM;AACzC,UAAM,OAAO,YAAY,GAAG,SAAS,IAAI,GAAG,KAAK;AACjD,QAAI,CAAC,WAAW,GAAG,GAAG;AACpB,aAAO,KAAK,2BAA2B,IAAI,EAAE;AAAA,IAC/C;AACA,WAAO,EAAE,SAAS,KAAK;AAAA,EACzB;AACA,SAAO,EAAE,SAAS,MAAM;AAC1B;AAEA,SAAS,eACP,WACA,KACA,OACA,KACA,UACA,QACiC;AACjC,MACE,IAAI,eACJ,YACA,SAAS,GAAG,MAAM,UAClB,UAAU,SAAS,GAAG,GACtB;AACA,UAAM,OAAO,YAAY,GAAG,SAAS,IAAI,GAAG,KAAK;AACjD,WAAO,KAAK,uBAAuB,IAAI,EAAE;AACzC,WAAO,EAAE,oBAAoB,KAAK;AAAA,EACpC;AACA,SAAO,EAAE,oBAAoB,MAAM;AACrC;AAEA,SAAS,mBACP,WACA,KACA,OACA,KACA,QACA,QACsB;AACtB,QAAM,YAAY,aAAa,GAAG;AAClC,MAAI,aAAa,UAAU,UAAa,UAAU,MAAM;AACtD,UAAM,OAAO,YAAY,GAAG,SAAS,IAAI,GAAG,KAAK;AACjD,UAAM,mBAAmB,yBAAyB,MAAM,UAAU,KAAK,GAAG,eAAe;AACzF,QAAI,iBAAiB,SAAS,GAAG;AAC/B,aAAO,KAAK,GAAG,iBAAiB,IAAI,CAAC,UAAU,MAAM,OAAO,CAAC;AAC7D,UAAI,QAAQ;AACV,eAAO,KAAK,GAAG,gBAAgB;AAAA,MACjC;AACA,aAAO,EAAE,SAAS,KAAK;AAAA,IACzB;AAAA,EACF;AACA,SAAO,EAAE,SAAS,MAAM;AAC1B;AAEA,SAAS,oBACP,WACA,KACA,OACA,KACA,QACA;AACA,QAAM,OAAO,YAAY,GAAG,SAAS,IAAI,GAAG,KAAK;AACjD,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,KAAK,SAAS,IAAI,iBAAiB;AAC1C;AAAA,EACF;AAEA,QAAM,aAAa,cAAc,GAAG;AACpC,MAAI,MAAM,QAAQ,UAAU,GAAG;AAC7B,UAAM,YAAY,aAAa,MAAM,OAAO,UAAU;AACtD,QAAI,WAAW;AACb,aAAO,KAAK,SAAS;AAAA,IACvB;AAAA,EACF;AACF;AAEA,SAAS,oBACP,WACA,KACA,OACA,KACA,QACA;AACA,QAAM,OAAO,YAAY,GAAG,SAAS,IAAI,GAAG,KAAK;AACjD,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,KAAK,SAAS,IAAI,iBAAiB;AAC1C;AAAA,EACF;AAEA,QAAM,aAAa,cAAc,GAAG;AACpC,MAAI,MAAM,QAAQ,UAAU,GAAG;AAC7B,UAAM,YAAY,aAAa,MAAM,OAAO,UAAU;AACtD,QAAI,WAAW;AACb,aAAO,KAAK,SAAS;AAAA,IACvB;AAAA,EACF;AACF;AAEA,SAAS,qBACP,WACA,KACA,OACA,MACA,QACA;AACA,QAAM,OAAO,YAAY,GAAG,SAAS,IAAI,GAAG,KAAK;AACjD,MAAI,OAAO,UAAU,WAAW;AAC9B,WAAO,KAAK,SAAS,IAAI,kBAAkB;AAAA,EAC7C;AACF;AAEA,SAAS,uBACP,WACA,KACA,OACA,QACA,QACA,UACA,gBACA,QACA;AACA,aAAW,CAAC,UAAU,QAAQ,KAAK,OAAO,QAAQ,KAAK,GAGlD;AACH,QAAI,aAAa,IAAI,QAAQ;AAC7B,UAAM,gBACJ,YAAY,OAAO,aAAa,WAAY,SAAiB,QAAQ,IAAI;AAG3E,UAAM,EAAE,OAAO,aAAa,QAAQ,IAAI,aAAa,UAAU,UAAU;AACzE,QAAI,SAAS;AACX,UAAI,QAAQ,IAAI;AAChB,mBAAa;AAAA,IACf;AAGA,UAAM,EAAE,QAAQ,IAAI;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAI,QAAS;AAEb,UAAM,EAAE,mBAAmB,IAAI;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAI,mBAAoB;AAExB,UAAM,EAAE,aAAa,IAAI;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAI,aAAc;AAGlB,UAAM,EAAE,QAAQ,IAAI;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAI,QAAS;AAIb;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,oBACP,WACA,KACA,OACA,KACA,QACA,QACA,UACA,gBACA,QACA;AACA,QAAM,OAAO,YAAY,GAAG,SAAS,IAAI,GAAG,KAAK;AACjD,MAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GAAG;AACvE,WAAO,KAAK,SAAS,IAAI,iBAAiB;AAC1C;AAAA,EACF;AACA,QAAM,WAAW,SAAS,GAAG;AAC7B,MAAI;AACF,2BAAuB,MAAM,OAAO,UAAU,QAAQ,QAAQ,UAAU,gBAAgB,MAAM;AAClG;AAEA,SAAS,uBACP,WACA,KACA,KACA,SACA,QACA;AACA,QAAM,OAAO,YAAY,GAAG,SAAS,IAAI,GAAG,KAAK;AACjD,MAAI,CAAC,IAAI,MAAM,CAAC,MAAM,OAAO,MAAM,QAAQ,GAAG;AAC5C,WAAO,KAAK,SAAS,IAAI,mBAAmB;AAC5C;AAAA,EACF;AACA,QAAM,aAAa,cAAc,OAAO;AACxC,MAAI,MAAM,QAAQ,UAAU,GAAG;AAC7B,UAAM,YAAY,aAAa,MAAM,KAAK,UAAU;AACpD,QAAI,WAAW;AACb,aAAO,KAAK,SAAS;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,YAAY,aAAa,OAAO;AACtC,MAAI,WAAW;AACb,QAAI,QAAQ,CAAC,GAAG,QAAQ;AACtB,UAAI,CAAC,UAAU,CAAC,GAAG;AACjB,eAAO,KAAK,4BAA4B,IAAI,IAAI,GAAG,GAAG;AAAA,MACxD;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,SAAS,uBACP,WACA,KACA,KACA,SACA,QACA;AACA,QAAM,OAAO,YAAY,GAAG,SAAS,IAAI,GAAG,KAAK;AACjD,MAAI,CAAC,IAAI,MAAM,CAAC,MAAM,OAAO,MAAM,QAAQ,GAAG;AAC5C,WAAO,KAAK,SAAS,IAAI,mBAAmB;AAAA,EAC9C;AAEA,QAAM,aAAa,cAAc,OAAO;AACxC,MAAI,MAAM,QAAQ,UAAU,GAAG;AAC7B,UAAM,YAAY,aAAa,MAAM,KAAK,UAAU;AACpD,QAAI,WAAW;AACb,aAAO,KAAK,SAAS;AAAA,IACvB;AAAA,EACF;AAEA,QAAM,YAAY,aAAa,OAAO;AACtC,MAAI,WAAW;AACb,QAAI,QAAQ,CAAC,GAAG,QAAQ;AACtB,UAAI,CAAC,UAAU,CAAC,GAAG;AACjB,eAAO,KAAK,4BAA4B,IAAI,IAAI,GAAG,GAAG;AAAA,MACxD;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,SAAS,wBACP,WACA,KACA,KACA,UACA,QACA;AACA,QAAM,OAAO,YAAY,GAAG,SAAS,IAAI,GAAG,KAAK;AACjD,MAAI,CAAC,IAAI,MAAM,CAAC,MAAM,OAAO,MAAM,SAAS,GAAG;AAC7C,WAAO,KAAK,SAAS,IAAI,oBAAoB;AAAA,EAC/C;AAEA,QAAM,YAAY,aAAa,QAAQ;AACvC,MAAI,WAAW;AACb,QAAI,QAAQ,CAAC,GAAG,QAAQ;AACtB,UAAI,CAAC,UAAU,CAAC,GAAG;AACjB,eAAO,KAAK,4BAA4B,IAAI,IAAI,GAAG,GAAG;AAAA,MACxD;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,SAAS,uBACP,WACA,KACA,KACA,SACA,QACA,QACA,UACA,gBACA,QACA;AACA,QAAM,OAAO,YAAY,GAAG,SAAS,IAAI,GAAG,KAAK;AAEjD,MACE,CAAC,MAAM,QAAQ,GAAG,KAClB,CAAC,IAAI,MAAM,CAAC,MAAM,OAAO,MAAM,YAAY,MAAM,QAAQ,CAAC,MAAM,QAAQ,CAAC,CAAC,GAC1E;AACA,WAAO,KAAK,SAAS,IAAI,mBAAmB;AAC5C;AAAA,EACF;AAEA,QAAM,YAAY,SAAS,OAAO;AAClC,MAAI,CAAC,UAAW;AAEhB,MAAI,QAAQ,CAAC,MAAM,QAAQ;AACzB,UAAM,aAAa,GAAG,IAAI,IAAI,GAAG;AACjC,UAAM,eAAe,MAAM,QAAQ,QAAQ,IAAI,SAAS,GAAG,IAAI;AAC/D,eAAW,CAAC,UAAU,QAAQ,KAAK,OAAO,QAAQ,SAAS,GAGtD;AACH,UAAI,aAAc,KAAa,QAAQ;AACvC,YAAM,gBACJ,gBAAgB,OAAO,iBAAiB,WACnC,aAAqB,QAAQ,IAC9B;AAEN,YAAM,EAAE,OAAO,aAAa,QAAQ,IAAI;AAAA,QACtC;AAAA,QACA;AAAA,MACF;AACA,UAAI,SAAS;AACX,QAAC,KAAa,QAAQ,IAAI;AAC1B,qBAAa;AAAA,MACf;AAGA,YAAM,EAAE,QAAQ,IAAI;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,UAAI,QAAS;AAEb,YAAM,EAAE,mBAAmB,IAAI;AAAA,QAC7B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,UAAI,mBAAoB;AAExB,YAAM,EAAE,aAAa,IAAI;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,UAAI,aAAc;AAGlB,YAAM,EAAE,QAAQ,IAAI;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,UAAI,QAAS;AAGb;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,SAAS,mBACP,WACA,KACA,OACA,KACA,QACA,QACA,UACA,gBACA,QACA;AACA,QAAM,OAAO,YAAY,GAAG,SAAS,IAAI,GAAG,KAAK;AACjD,MAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AACzB,WAAO,KAAK,SAAS,GAAG,mBAAmB;AAC3C;AAAA,EACF;AACA,QAAM,WAAW,IAAI,UAAU;AAC/B,MAAI,aAAa;AACf,WAAO,uBAAuB,WAAW,KAAK,OAAO,IAAI,UAAU,MAAM;AAC3E,MAAI,aAAa;AACf,WAAO,uBAAuB,WAAW,KAAK,OAAO,IAAI,UAAU,MAAM;AAC3E,MAAI,aAAa;AACf,WAAO,wBAAwB,WAAW,KAAK,OAAO,IAAI,UAAU,MAAM;AAC5E,MAAI,aAAa;AACf,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACF,MAAI,aAAa,OAAO;AACtB,UAAM,eAAgB,IAAI,SAAiB;AAC3C,UAAM,QAAQ,CAAC,KAAU,QAAgB;AACvC,UACE,CAAC,OACD,OAAO,QAAQ,YACf,QAAQ,QACR,OAAO,IAAI,SAAS,YACpB,OAAO,IAAI,OAAO,YACjB,gBAAgB,IAAI,SAAS,cAC9B;AACA,eAAO;AAAA,UACL,SAAS,IAAI,IAAI,GAAG,2CAA2C,YAAY;AAAA,QAC7E;AAAA,MACF;AAAA,IACF,CAAC;AACD,UAAM,WAAW,SAAS,IAAI,QAAQ;AACtC,QAAI,UAAU;AACZ,YAAM,eAAe,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC;AAC3D,YAAM,QAAQ,CAAC,KAAU,QAAgB;AACvC,YAAI,OAAO,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAClD,gBAAM,cAAc,aAAa,GAAG;AACpC,qBAAW,CAAC,UAAU,QAAQ,KAAK,OAAO,QAAQ,QAAQ,GAGrD;AACH,kBAAM,YAAY,GAAG,IAAI,IAAI,GAAG,KAAK,QAAQ;AAC7C,gBAAI,aAAa,IAAI,QAAQ;AAC7B,kBAAM,gBACJ,eAAe,OAAO,gBAAgB,WACjC,YAAoB,QAAQ,IAC7B;AACN,kBAAM,EAAE,OAAO,aAAa,QAAQ,IAAI;AAAA,cACtC;AAAA,cACA;AAAA,YACF;AACA,gBAAI,SAAS;AACX,kBAAI,QAAQ,IAAI;AAChB,2BAAa;AAAA,YACf;AACA,iBACG,eAAe,UAAa,eAAe,SAC5C,CAAC,WAAW,QAAQ,GACpB;AACA,qBAAO,KAAK,2BAA2B,SAAS,EAAE;AAClD;AAAA,YACF;AAEA,kBAAM,EAAE,mBAAmB,IAAI;AAAA,cAC7B,GAAG,IAAI,IAAI,GAAG;AAAA,cACd;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AACA,gBAAI,mBAAoB;AAExB,kBAAM,EAAE,aAAa,IAAI;AAAA,cACvB,GAAG,IAAI,IAAI,GAAG;AAAA,cACd;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AACA,gBAAI,aAAc;AAElB,kBAAM,iBAAiB,aAAa,QAAQ;AAC5C,gBACE,kBACA,eAAe,UACf,eAAe,MACf;AACA,oBAAM,mBAAmB;AAAA,gBACvB;AAAA,gBACA,eAAe,UAAU;AAAA,gBACzB;AAAA,cACF;AACA,kBAAI,iBAAiB,SAAS,GAAG;AAC/B,uBAAO,KAAK,GAAG,iBAAiB,IAAI,CAAC,UAAU,MAAM,OAAO,CAAC;AAC7D,uBAAO,KAAK,GAAG,gBAAgB;AAC/B;AAAA,cACF;AAAA,YACF;AAEA;AAAA,cACE,GAAG,IAAI,IAAI,GAAG;AAAA,cACd;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA;AAAA,EACF;AACA,SAAO,KAAK,SAAS,IAAI,kCAAkC;AAC7D;AAEA,SAAS,iBACP,WACA,KACA,OACA,KACA,QACA,WACA,iBACA,SACA;AACA,QAAM,OAAO,YAAY,GAAG,SAAS,IAAI,GAAG,KAAK;AACjD,MACE,OAAO,UAAU,YACjB,UAAU,QACV,OAAO,MAAM,SAAS,YACtB,OAAO,MAAM,OAAO,UACpB;AACA,WAAO,KAAK,SAAS,IAAI,uCAAuC;AAChE;AAAA,EACF;AAEA,QAAM,eAAgB,IAAY;AAClC,MAAI,gBAAgB,MAAM,SAAS,cAAc;AAC/C,WAAO;AAAA,MACL,SAAS,IAAI,yBAAyB,YAAY,SAAS,MAAM,IAAI;AAAA,IACvE;AAAA,EACF;AACF;AAEA,SAAS,eACP,WACA,KACA,OACA,KACA,QACA,QACA,UACA,gBACA,QACA;AACA,QAAM,OAAO,YAAY,GAAG,SAAS,IAAI,GAAG,KAAK;AACjD,UAAQ,IAAI,MAAM;AAAA,IAChB,KAAK;AACH,aAAO,oBAAoB,WAAW,KAAK,OAAO,KAAK,MAAM;AAAA,IAC/D,KAAK;AACH,aAAO,oBAAoB,WAAW,KAAK,OAAO,KAAK,MAAM;AAAA,IAC/D,KAAK;AACH,aAAO,qBAAqB,WAAW,KAAK,OAAO,KAAK,MAAM;AAAA,IAChE,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO,iBAAiB,WAAW,KAAK,OAAO,KAAK,QAAQ,UAAU,gBAAgB,MAAM;AAAA,IAC9F;AACE,aAAO,KAAK,0BAA0B,IAAI,KAAK,IAAI,IAAI,EAAE;AAAA,EAC7D;AACF;AAEO,SAAS,aACd,QACA,YACA,UAAyB;AAAA,EACvB,SAAS;AAAA,EACT,OAAO;AAAA,EACP,iBAAiB,MAAM;AAAA,EACvB,gBAAgB;AAAA,EAChB,eAAe,+BAA+B,CAAC;AAAA,EAC/C,UAAU,yBAAyB,CAAC;AAAA,EACpC,eAAe;AACjB,GACW;AACX,QAAM,eAAe;AAAA,IACnB,MAAM,MAAM,OAAO,EAAE,UAAU,EAAE,OAAO;AAAA,IACxC,SAAS,MAAM,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,cAAc;AAAA,EACvE;AAEA,QAAM,UAAU,QAAQ,WAAW;AACnC,QAAM,QAAQ,QAAQ,SAAS;AAG/B,QAAM,gBAAgD,QACnD;AAEH,QAAM,SAAoB;AAAA;AAAA,IAExB,QAAQ;AAAA,MACN,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA;AAAA,IAGA,MAAM,EAAE,YAAY,QAAQ;AAAA;AAAA,IAG5B,SAAS,OAAgB,UAAgC;AACvD,YAAM,SAAmB,CAAC;AAC1B,YAAM,SAA4B,CAAC;AACnC,YAAM,SAAc,CAAC;AACrB,YAAM,UAA0B,QAAQ,kBAAkB;AAE1D,UAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,eAAO,EAAE,OAAO,OAAO,QAAQ,CAAC,yBAAyB,EAAE;AAAA,MAC7D;AACA,UAAI,QAAQ,kBAAkB,UAAU;AACtC,YAAI,CAAC,mCAAmC,KAAK,GAAG;AAC9C,iBAAO;AAAA,YACL,OAAO;AAAA,YACP,QAAQ,CAAC,8CAA8C;AAAA,YACvD,QAAQ;AAAA,cACN;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,SAAS;AAAA,cACX;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,cAAM,YAAmC;AAAA,UACvC,kBAAkB;AAAA,UAClB,eAAe;AAAA,QACjB;AACA,cAAM,YAAY;AAAA,UAChB;AAAA,UACA,OAAO;AAAA,UACP;AAAA,UACA;AAAA,QACF;AACA,YAAI,UAAU,eAAe;AAC3B,iBAAO;AAAA,YACL,OAAO;AAAA,YACP,QAAQ,CAAC,8CAA8C;AAAA,YACvD,QAAQ;AAAA,cACN;AAAA,gBACE,MAAM;AAAA,gBACN,MAAM;AAAA,gBACN,SAAS;AAAA,cACX;AAAA,YACF;AAAA,UACF;AAAA,QACF;AACA,YAAI,UAAU,SAAS,GAAG;AACxB,iBAAO;AAAA,YACL,OAAO;AAAA,YACP,QAAQ,UAAU;AAAA,cAChB,CAAC,aAAa,qCAAqC,QAAQ;AAAA,YAC7D;AAAA,YACA,QAAQ,UAAU,IAAI,CAAC,cAAc;AAAA,cACnC,MAAM;AAAA,cACN,MAAM;AAAA,cACN,SAAS,qCAAqC,QAAQ;AAAA,YACxD,EAAE;AAAA,UACJ;AAAA,QACF;AAAA,MACF;AAEA,YAAM,UACJ,OAAO,UAAU,YAAY,UAAU,OACnC,UAAU,KAAY,IACtB,EAAE,GAAI,MAAc;AAC1B,UAAI,QAAQ,QAAQ,KAAM,SAAQ,OAAO;AACzC,UAAI,QAAQ,WAAW,KAAM,SAAQ,UAAU;AAG/C,YAAM,cAAc,OAAO,QAAQ,WAAW,OAAO;AACrD,YAAM,YAAY,OAAO,OAAO;AAChC,UAAI,iBAAiB,UAAU,aAAa,SAAS,IAAI,GAAG;AAC1D,cAAM,aAAa,mBAAmB,eAAe,EAAE,GAAG,QAAQ,GAAG;AAAA,UACnE,MAAM;AAAA,UACN,IAAI;AAAA,UACJ;AAAA,UACA,UAAU,MAAM,OAAO,SAAS;AAAA,QAClC,CAAC;AACD,YAAI,CAAC,cAAc,WAAW,OAAO,QAAQ,CAAC,WAAW,OAAO;AAC9D,gBAAM,OAAO,YAAY,QAAQ,SAC7B,WAAW,SACX,CAAC,kCAAkC,WAAW,QAAQ,SAAS,EAAE;AACrE,iBAAO,KAAK,GAAG,IAAI;AAEnB,iBAAO,EAAE,OAAO,OAAO,OAAO;AAAA,QAChC;AAEA,mBAAW,KAAK,OAAO,KAAK,OAAO,EAAG,QAAQ,QAAgB,CAAC;AAC/D,eAAO,OAAO,SAAS,WAAW,KAAK;AAEvC,gBAAQ,OAAO;AACf,gBAAQ,UAAU;AAAA,MACpB;AAEA,UACE,QAAQ,aAAa,YACpB,QAAQ,SAAS,cAAc,QAAQ,YAAY,UACpD;AACA,eAAO;AAAA,UACL,OAAO;AAAA,UACP,QAAQ,CAAC,qDAAqD;AAAA,UAC9D,QAAQ;AAAA,YACN;AAAA,cACE,MAAM;AAAA,cACN,MAAM;AAAA,cACN,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,iBAAW,OAAO,OAAO,QAAQ;AAC/B,cAAM,MAAM,OAAO,OAAO,GAAG;AAC7B,YAAI,QAAQ,QAAQ,GAAG;AACvB,cAAM,gBACJ,YAAY,OAAO,aAAa,WAAY,SAAiB,GAAG,IAAI;AAEtE,YAAI,CAAC,KAAK;AACR,iBAAO,KAAK,iCAAiC,GAAG,EAAE;AAClD;AAAA,QACF;AAGA,cAAM,EAAE,OAAO,aAAa,QAAQ,IAAI,aAAa,KAAK,KAAK;AAC/D,YAAI,SAAS;AACX,kBAAQ,GAAG,IAAI;AACf,kBAAQ;AAAA,QACV;AAGA,cAAM,EAAE,QAAQ,IAAI,qBAAqB,IAAI,KAAK,OAAO,KAAK,MAAM;AACpE,YAAI,QAAS;AAGb,cAAM,EAAE,mBAAmB,IAAI;AAAA,UAC7B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,YAAI,mBAAoB;AAGxB,cAAM,EAAE,aAAa,IAAI;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AACA,YAAI,aAAc;AAGlB,cAAM,gBAAgB,CAAC,QAAuB;AAC5C,gBAAM,cAAwB,CAAC;AAC/B,gBAAM,cAAiC,CAAC;AACxC,gBAAM,EAAE,QAAQ,IAAI;AAAA,YAClB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,cAAI,CAAC,SAAS;AACZ,2BAAe,IAAI,KAAK,KAAK,KAAK,aAAa,aAAa,eAAe,SAAS,OAAO;AAAA,UAC7F;AACA,iBAAO,KAAK,GAAG,WAAW;AAC1B,iBAAO;AAAA,QACT;AAGA,YAAI,aAAa;AACjB,YAAI,cAAc,cAAc,UAAU;AAG1C,cAAM,aAAa,OAAO,QAAQ,WAAW,OAAO;AACpD,cAAM,WAAW,OAAO,OAAO;AAC/B,cAAM,UAAU,OAAQ,IAAY,YAAY,QAAQ;AACxD,cAAM,cAAc,OAAQ,IAAY,aAAa;AAErD,YACE,YAAY,SAAS,KACrB,eACA,UAAU,YAAY,QAAQ,IAAI,GAClC;AACA,gBAAM,KAAM,IAAY;AAUxB,gBAAM,MAAM,GAAG,YAAY;AAAA,YACzB;AAAA,YACA;AAAA,YACA;AAAA,YACA,WAAW;AAAA,UACb,CAAC;AACD,cAAI,OAAO,IAAI,IAAI;AACjB,yBAAa,IAAI;AACjB,0BAAc,cAAc,UAAU;AAAA,UACxC,OAAO;AACL,wBAAY;AAAA,cACV,KAAK,SACH,2BAA2B,GAAG,UAAU,UAAU,QAAQ,QAAQ;AAAA,YACtE;AAAA,UACF;AAAA,QACF;AAEA,eAAO,GAAG,IAAI;AAEd,YAAI,YAAY,WAAW,GAAG;AAC5B,iBAAO,KAAK,GAAG,WAAW;AAC1B;AAAA,QACF;AAAA,MACF;AAEA,UAAI,OAAO,WAAW,KAAK,QAAQ,iBAAiB;AAClD,cAAM,YAAY;AAClB,cAAM,SAAS;AACf,cAAM,oBAA6C,OAAO,OAAO;AAAA,UAC/D,aAAa,CAAC,cACZ,OAAO,UAAU,eAAe,KAAK,QAAQ,SAAS;AAAA,QAC1D,CAAC;AACD,YAAI,CAAC,QAAQ,gBAAgB,WAAW,iBAAiB,GAAG;AAC1D,iBAAO,KAAK,iCAAiC;AAAA,QAC/C;AAAA,MACF;AAEA,aAAO;AAAA,QACL,OAAO,OAAO,WAAW;AAAA,QACzB,OAAO;AAAA,QACP;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAGA,iBAAiB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMzB,QACE,OACA,KAKA;AACA,YAAM,cAAc,OAAQ,OAAe,WAAW,OAAO;AAC7D,YAAM,YAAY,OAAO,OAAO;AAChC,UAAI,CAAC,iBAAiB,UAAU,aAAa,SAAS,KAAK,GAAG;AAE5D,eAAO;AAAA,UACL,IAAI;AAAA,UACJ,OAAO,EAAE,GAAG,OAAO,MAAM,YAAY,SAAS,UAAU;AAAA,QAC1D;AAAA,MACF;AACA,YAAM,MAAM;AAAA,QACV;AAAA,QACA,EAAE,GAAI,MAAc;AAAA,QACpB;AAAA,UACE,MAAM;AAAA,UACN,IAAI;AAAA,UACJ;AAAA,UACA,UAAU,MAAM,OAAO,SAAS;AAAA,UAChC;AAAA,QACF;AAAA,MACF;AACA,UAAI,OAAO,IAAI,MAAM,IAAI,OAAO;AAC9B,cAAM,MAAM,EAAE,GAAG,IAAI,OAAO,MAAM,YAAY,SAAS,UAAU;AACjE,eAAO,EAAE,IAAI,MAAM,OAAO,IAAI;AAAA,MAChC;AACA,aAAO;AAAA,QACL,IAAI;AAAA,QACJ,QAAQ,KAAK,QAAQ,SACjB,IAAI,SACJ,CAAC,kCAAkC,WAAW,QAAQ,SAAS,EAAE;AAAA,MACvE;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAwBA,MAAM,oBAAoB,QAAQC,UAAS;AACzC,YAAM;AAAA,QACJ;AAAA,QACA,mBAAmB,EAAE,SAAS,oBAAI,IAAI,EAAE;AAAA,QACxC,WAAW;AAAA,QACX;AAAA,MACF,IAAIA;AAEJ,YAAM,YAAY,GAAI,OAAe,IAAI,IAAK,OAAe,EAAE;AAC/D,UAAI,iBAAiB,QAAQ,IAAI,SAAS,GAAG;AAC3C,cAAM,mCAAmC,SAAS,EAAE;AACpD;AAAA,MACF;AACA,uBAAiB,QAAQ,IAAI,SAAS;AACtC,YAAM,qCAAqC,SAAS,EAAE;AAEtD,iBAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,OAAO,MAAM,GAAG;AAEtD,YAAIA,SAAQ,cAAc,CAACA,SAAQ,WAAW,SAAS,GAAG,GAAG;AAC3D,gBAAM,kBAAkB,GAAG,sBAAsB;AACjD;AAAA,QACF;AAEA,cAAM,eAAgB,IAAY,iBAAiB;AACnD,cAAM,YAAa,IAAY,aAAa;AAC5C,cAAM,QAAS,OAAe,GAAG;AACjC,YAAI,CAAC,MAAO;AAEZ,YAAI,IAAI,SAAS,OAAO;AACtB,gBAAM,UAAW,IAAY;AAC7B,cAAI,CAAC;AACH,kBAAM,IAAI,MAAM,uCAAuC,GAAG,EAAE;AAC9D,gBAAM,MAAM;AACZ,cAAI,IAAI,QAAQ,IAAI,SAAS,SAAS;AACpC,kBAAM,IAAI;AAAA,cACR,qCAAqC,GAAG,cAAc,OAAO,SAAS,IAAI,IAAI;AAAA,YAChF;AAAA,UACF;AACA,gBAAM,SAAS,MAAMA,SAAQ,cAAc,SAAS,IAAI,EAAE;AAC1D,cAAI,CAAC;AACH,kBAAM,IAAI;AAAA,cACR,qBAAqB,OAAO,IAAI,IAAI,EAAE,aAAa,GAAG;AAAA,YACxD;AACF,gBAAM,YAAY,OAAO,IAAI,IAAI,EAAE,eAAe,GAAG,EAAE;AAEvD,cAAI,gBAAgB,cAAc,SAAS;AACzC,kBAAM,eAAe,iBAAiB,OAAO;AAC7C,gBAAIA,SAAQ,WAAY,KAAK,cAAc;AACzC,oBAAM,aAAa,oBAAoB,QAAQ;AAAA,gBAC7C,GAAGA;AAAA,gBACH,UAAUA,SAAQ,WAAY;AAAA,cAChC,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QAEF,WAAW,IAAI,SAAS,WAAW,IAAI,UAAU,SAAS,OAAO;AAC/D,gBAAM,UAAW,IAAI,SAAiB;AACtC,cAAI,CAAC;AACH,kBAAM,IAAI,MAAM,6CAA6C,GAAG,EAAE;AACpE,gBAAM,OAAO;AACb,qBAAW,OAAO,MAAM;AACtB,gBAAI,IAAI,QAAQ,IAAI,SAAS,SAAS;AACpC,oBAAM,IAAI;AAAA,gBACR,qCAAqC,GAAG,cAAc,OAAO,SAAS,IAAI,IAAI;AAAA,cAChF;AAAA,YACF;AACA,kBAAM,SAAS,MAAMA,SAAQ,cAAc,SAAS,IAAI,EAAE;AAC1D,gBAAI,CAAC;AACH,oBAAM,IAAI;AAAA,gBACR,qBAAqB,OAAO,IAAI,IAAI,EAAE,aAAa,GAAG;AAAA,cACxD;AACF,kBAAM,YAAY,OAAO,IAAI,IAAI,EAAE,eAAe,GAAG,EAAE;AAEvD,gBAAI,gBAAgB,cAAc,SAAS;AACzC,oBAAM,eAAe,iBAAiB,OAAO;AAC7C,kBAAIA,SAAQ,WAAY,KAAK,cAAc;AACzC,sBAAM,aAAa,oBAAoB,QAAQ;AAAA,kBAC7C,GAAGA;AAAA,kBACH,UAAUA,SAAQ,WAAY;AAAA,gBAChC,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,YAAoB;AAClB,UAAI,CAAC,SAAS,UAAU,IAAI;AAC1B,cAAM,IAAI,MAAM,sCAAsC;AAAA,MACxD;AACA,aAAO;AAAA,IACT;AAAA,IAEA,UACE,OACAA,WAA4B,CAAC,GACR;AACrB,UAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC/C,eAAO,CAAC;AAAA,MACV;AAEA,YAAM,aAAkC,CAAC;AACzC,iBAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,OAAO,MAAM,GAAG;AACtD,YAAI,CAAC,mBAAmB,KAAKA,QAAO,GAAG;AACrC;AAAA,QACF;AAEA,YAAI,CAAC,OAAO,UAAU,eAAe,KAAK,OAAO,GAAG,GAAG;AACrD;AAAA,QACF;AAEA,cAAM,QAAQ,oBAAoB,KAAM,MAAc,GAAG,GAAGA,QAAO;AACnE,YAAI,UAAU,QAAW;AACvB,qBAAW,GAAG,IAAI;AAAA,QACpB;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA,kBACE,OACA,WACA,QACqB;AACrB,aAAO,kBAAqB,QAAQ,OAAO,WAAW,MAAM;AAAA,IAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,eACE,QACA,WACqB;AACrB,aAAO,eAAkB,QAAQ,QAAQ,SAAS;AAAA,IACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,eACE,MACA,aACqB;AACrB,aAAO,eAAkB,QAAQ,MAAM,WAAW;AAAA,IACpD;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,cAMG;AACD,aAAO,YAAe,MAAM;AAAA,IAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,kBAAkB,QAAkD;AAClE,aAAO,kBAAqB,QAAQ,MAAM;AAAA,IAC5C;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,WAAW;AACT,YAAM,cAAmC,CAAC;AAC1C,iBAAW,CAAC,KAAK,GAAG,KAAK,OAAO,QAAQ,OAAO,MAAM,GAAG;AACtD,oBAAY,GAAG,IAAI;AAAA,UACjB,MAAM,IAAI;AAAA,UACV,UAAU,WAAW,GAAG;AAAA,UACxB,WAAW,CAAC,CAAC,IAAI;AAAA,UACjB,QAAQ,CAAC,CAAC,IAAI;AAAA,UACd,aAAa,IAAI,gBAAgB;AAAA,UACjC,SAAS,IAAI,YAAY;AAAA,UACzB,YAAa,IAAY,cAAc;AAAA,UACvC,mBACG,IAAY,sBAAsB,SAC/B,OACC,IAAY;AAAA,UACnB,MAAM,cAAc,GAAU,KAAK;AAAA,UACnC,SAAU,IAAY,WAAW;AAAA,UACjC,KACE,CAAC,IAAI,QAAQ,IAAI,KAAK,mBAAmB,SAAS,OAAO,IAAI;AAAA,UAC/D,UAAU,IAAI,aAAa;AAAA,QAC7B;AAAA,MACF;AAEA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,kBAAkB,CAAC,CAAC;AAAA,QACpB,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAGA,uBAAqB,IAAI,YAAY,MAAM;AAC3C,SAAO;AACT;AAMO,SAAS,iBAAiB,MAAuC;AACtE,SAAO,qBAAqB,IAAI,IAAI;AACtC;;;ACvpDA,IAAM,qBAAqB,CAAC,YAC1B,MACG,OAAO,EACP,UAAU,CAAC,UAAU,OAAO,cAAc,KAAK,CAAC,EAChD,IAAI,CAAC,EACL,IAAI,OAAO;AAEhB,IAAM,sBAAsB,OAAO;AAAA,EACjC,MAAM,MAAM,OAAO,EAAE,KAAK,CAAC,2BAA2B,CAAU;AAAA,EAChE,SAAS,MAAM,OAAO,EAAE,KAAK,CAAC,yBAAyB,CAAU;AACnE;AAEA,IAAM,mBAAmB,OAAO;AAAA,EAC9B,MAAM,MAAM,OAAO,EAAE,KAAK,2BAA2B;AAAA,EACrD,OAAO,mBAAmB,+BAA+B;AAC3D;AAEO,IAAM,+BAA+B,CAAC,kBAAkB,WAAW;AAAA,EACxE,GAAI,kBAAkB,oBAAoB,IAAI,CAAC;AAAA,EAC/C,WAAW,MAAM,OAAO,EAAE,KAAK,yBAAyB;AAAA,EACxD,kBAAkB,MAAM,QAAQ;AAAA,EAChC,sBAAsB,MACnB,OAAO,EACP,KAAK,qCAAqC;AAAA,EAC7C,UAAU,MAAM,OAAO,EAAE,KAAK,yBAAyB;AAAA,EACvD,SAAS,MAAM,OAAO,EAAE,KAAK,wBAAwB;AAAA,EACrD,gBAAgB,MAAM,OAAO,EAAE,KAAK,yBAAyB;AAAA,EAC7D,iBAAiB,MAAM,OAAO,EAAE,KAAK,2BAA2B;AAAA,EAChE,iBAAiB,MAAM,OAAO,EAAE,KAAK,2BAA2B;AAAA,EAChE,YAAY,MACT,MAAM,MAAM,OAAO,EAAE,KAAK,yBAAyB,CAAC,EACpD,IAAI,0BAA0B,MAAM;AAAA,EACvC,UAAU,MACP,MAAM,MAAM,OAAO,iBAAiB,CAAC,CAAC,EACtC,IAAI,+BAA+B;AAAA,EACtC,YAAY,MACT,MAAM,MAAM,OAAO,EAAE,KAAK,yBAAyB,CAAC,EACpD,IAAI,0BAA0B,MAAM;AACzC;AAEO,IAAM,sCAAsC,CACjD,UACY;AACZ,QAAM,aAAa,MAAM,QAAQ,MAAM,UAAU,IAAI,MAAM,aAAa,CAAC;AACzE,QAAM,aAAa,MAAM,QAAQ,MAAM,UAAU,IAAI,MAAM,aAAa,CAAC;AACzE,QAAM,WAAW,MAAM,QAAQ,MAAM,QAAQ,IAAI,MAAM,WAAW,CAAC;AACnE,QAAM,aAAa,mCAAmC;AAAA,IACpD,CAAC,EAAE,UAAU,MAAM,cAAc,MAAM;AAAA,EACzC;AACA,SACE,MAAM,qBAAqB,QAC3B,eAAe,UACf,WAAW,eAAe,MAAM,wBAChC,IAAI,IAAI,UAAU,EAAE,SAAS,WAAW,UACxC,IAAI,IAAI,UAAU,EAAE,SAAS,WAAW,UACxC,IAAI;AAAA,IACF,SAAS;AAAA,MAAI,CAAC,YACZ,OAAO,YAAY,YAAY,YAAY,OACtC,QAA+B,OAChC;AAAA,IACN;AAAA,EACF,EAAE,SAAS,SAAS;AAExB;AAGO,IAAM,gCAAgC;AAAA,EAC3C,6BAA6B;AAAA,EAC7B;AAAA,EACA;AAAA,IACE,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,UAAU;AAAA,IACV,iBAAiB;AAAA,EACnB;AACF;AAsBO,IAAM,kCAAkC,CAC7C,UAC4C;AAC5C,QAAM,SAAS,8BAA8B,SAAS,KAAK;AAC3D,MAAI,CAAC,OAAO,SAAS,OAAO,UAAU,QAAW;AAC/C,WAAO;AAAA,MACL,OAAO;AAAA,MACP,QAAQ,OAAO,UAAU,CAAC,qCAAqC;AAAA,MAC/D,GAAI,OAAO,WAAW,SAAY,CAAC,IAAI,EAAE,QAAQ,OAAO,OAAO;AAAA,IACjE;AAAA,EACF;AACA,SAAO;AAAA,IACL,OAAO;AAAA,IACP,OAAO,OAAO;AAAA,EAChB;AACF;","names":["IsoLanguageCode","options"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { d as FeedbackGameDiagnosticsSchema, e as FeedbackGameDiagnosticsValidationResult, w as validateFeedbackGameDiagnostics } from './feedback-diagnostics-BaniQAFS.cjs';
|
|
2
|
+
export { FEEDBACK_BACKEND_BUCKETS, FEEDBACK_CONTRACT_VERSION, FEEDBACK_FRAME_RATE_BUCKETS, FEEDBACK_FRAME_TIME_BUCKETS, FEEDBACK_GAME_COUNTER_CODES, FEEDBACK_GAME_COUNTER_MAX_COUNT, FEEDBACK_GAME_COUNTER_MAX_ITEMS, FEEDBACK_GAME_ERROR_CODES, FEEDBACK_GAME_FEATURE_IDS, FEEDBACK_GAME_PROVENANCE_CONTRACTS, FEEDBACK_GAME_PROVENANCE_CONTRACT_IDS, FEEDBACK_GAME_SURFACE_IDS, FEEDBACK_RENDERER_BUCKETS, FEEDBACK_VIEWPORT_BUCKETS, FeedbackGameDiagnostics } from './feedback-diagnostics-vocabulary.cjs';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { d as FeedbackGameDiagnosticsSchema, e as FeedbackGameDiagnosticsValidationResult, w as validateFeedbackGameDiagnostics } from './feedback-diagnostics-CnsI0B9-.js';
|
|
2
|
+
export { FEEDBACK_BACKEND_BUCKETS, FEEDBACK_CONTRACT_VERSION, FEEDBACK_FRAME_RATE_BUCKETS, FEEDBACK_FRAME_TIME_BUCKETS, FEEDBACK_GAME_COUNTER_CODES, FEEDBACK_GAME_COUNTER_MAX_COUNT, FEEDBACK_GAME_COUNTER_MAX_ITEMS, FEEDBACK_GAME_ERROR_CODES, FEEDBACK_GAME_FEATURE_IDS, FEEDBACK_GAME_PROVENANCE_CONTRACTS, FEEDBACK_GAME_PROVENANCE_CONTRACT_IDS, FEEDBACK_GAME_SURFACE_IDS, FEEDBACK_RENDERER_BUCKETS, FEEDBACK_VIEWPORT_BUCKETS, FeedbackGameDiagnostics } from './feedback-diagnostics-vocabulary.js';
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FeedbackGameDiagnosticsSchema,
|
|
3
|
+
validateFeedbackGameDiagnostics
|
|
4
|
+
} from "./chunk-UQHPDQZX.js";
|
|
5
|
+
import {
|
|
6
|
+
FEEDBACK_BACKEND_BUCKETS,
|
|
7
|
+
FEEDBACK_CONTRACT_VERSION,
|
|
8
|
+
FEEDBACK_FRAME_RATE_BUCKETS,
|
|
9
|
+
FEEDBACK_FRAME_TIME_BUCKETS,
|
|
10
|
+
FEEDBACK_GAME_COUNTER_CODES,
|
|
11
|
+
FEEDBACK_GAME_COUNTER_MAX_COUNT,
|
|
12
|
+
FEEDBACK_GAME_COUNTER_MAX_ITEMS,
|
|
13
|
+
FEEDBACK_GAME_ERROR_CODES,
|
|
14
|
+
FEEDBACK_GAME_FEATURE_IDS,
|
|
15
|
+
FEEDBACK_GAME_PROVENANCE_CONTRACTS,
|
|
16
|
+
FEEDBACK_GAME_PROVENANCE_CONTRACT_IDS,
|
|
17
|
+
FEEDBACK_GAME_SURFACE_IDS,
|
|
18
|
+
FEEDBACK_RENDERER_BUCKETS,
|
|
19
|
+
FEEDBACK_VIEWPORT_BUCKETS
|
|
20
|
+
} from "./chunk-AG2NAPDC.js";
|
|
21
|
+
export {
|
|
22
|
+
FEEDBACK_BACKEND_BUCKETS,
|
|
23
|
+
FEEDBACK_CONTRACT_VERSION,
|
|
24
|
+
FEEDBACK_FRAME_RATE_BUCKETS,
|
|
25
|
+
FEEDBACK_FRAME_TIME_BUCKETS,
|
|
26
|
+
FEEDBACK_GAME_COUNTER_CODES,
|
|
27
|
+
FEEDBACK_GAME_COUNTER_MAX_COUNT,
|
|
28
|
+
FEEDBACK_GAME_COUNTER_MAX_ITEMS,
|
|
29
|
+
FEEDBACK_GAME_ERROR_CODES,
|
|
30
|
+
FEEDBACK_GAME_FEATURE_IDS,
|
|
31
|
+
FEEDBACK_GAME_PROVENANCE_CONTRACTS,
|
|
32
|
+
FEEDBACK_GAME_PROVENANCE_CONTRACT_IDS,
|
|
33
|
+
FEEDBACK_GAME_SURFACE_IDS,
|
|
34
|
+
FEEDBACK_RENDERER_BUCKETS,
|
|
35
|
+
FEEDBACK_VIEWPORT_BUCKETS,
|
|
36
|
+
FeedbackGameDiagnosticsSchema,
|
|
37
|
+
validateFeedbackGameDiagnostics
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=feedback-diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|