@tamagui/codemod-flat-values 0.0.0-bootstrap.0 → 3.0.0-beta.1093.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 +234 -1
- package/dist/builtInNames.mjs +14 -0
- package/dist/builtInNames.mjs.map +1 -0
- package/dist/containers.mjs +141 -0
- package/dist/containers.mjs.map +1 -0
- package/dist/convert.mjs +1233 -0
- package/dist/convert.mjs.map +1 -0
- package/dist/expressions.mjs +188 -0
- package/dist/expressions.mjs.map +1 -0
- package/dist/functionalVariants.mjs +469 -0
- package/dist/functionalVariants.mjs.map +1 -0
- package/dist/grammar.mjs +73 -0
- package/dist/grammar.mjs.map +1 -0
- package/dist/index.mjs +374 -0
- package/dist/index.mjs.map +1 -0
- package/dist/legacyConditions.mjs +293 -0
- package/dist/legacyConditions.mjs.map +1 -0
- package/dist/legacyNames.mjs +130 -0
- package/dist/legacyNames.mjs.map +1 -0
- package/dist/provenance.mjs +137 -0
- package/dist/provenance.mjs.map +1 -0
- package/dist/report.mjs +188 -0
- package/dist/report.mjs.map +1 -0
- package/dist/sheetAnatomy.mjs +200 -0
- package/dist/sheetAnatomy.mjs.map +1 -0
- package/dist/structuredNative.mjs +275 -0
- package/dist/structuredNative.mjs.map +1 -0
- package/dist/transition.mjs +257 -0
- package/dist/transition.mjs.map +1 -0
- package/package.json +35 -7
- package/src/builtInNames.ts +23 -0
- package/src/containers.ts +227 -0
- package/src/convert.ts +1977 -0
- package/src/expressions.ts +220 -0
- package/src/functionalVariants.ts +642 -0
- package/src/grammar.ts +190 -0
- package/src/index.ts +589 -0
- package/src/legacyConditions.ts +357 -0
- package/src/legacyNames.ts +160 -0
- package/src/provenance.ts +210 -0
- package/src/report.ts +362 -0
- package/src/sheetAnatomy.ts +277 -0
- package/src/structuredNative.ts +459 -0
- package/src/transition.ts +415 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.js","names":[],"sources":["convert.js"],"sourcesContent":["import {\n Node,\n SyntaxKind\n} from \"ts-morph\";\nimport {\n compact,\n literalTree,\n numericValue,\n runtimeType,\n staticLeafValue,\n unwrapExpression\n} from \"./expressions\";\nimport {\n assessFlatConversion,\n convertLegacyConditionProp,\n expandToLonghands,\n flatStringValue,\n mergeProgramValues,\n parseValue,\n printProgram,\n resolveProp,\n sharedPayload,\n shorthands,\n styleProps,\n tokenVariantProps,\n unitSuffix\n} from \"./grammar\";\nimport { isLegacyConditionName, resolveLegacyName } from \"./legacyNames\";\nimport { classifyStructuredNativeValue } from \"./structuredNative\";\nfunction assessmentVerdict(assessments) {\n if (assessments.some((assessment) => assessment.verdict === \"ineligible\")) {\n return \"ineligible\";\n }\n if (assessments.some((assessment) => assessment.verdict === \"needs-relocation\")) {\n return \"needs-relocation\";\n }\n return assessments.length ? \"unknown-host\" : \"clean\";\n}\nfunction createSite(kind, registry, containers, targets, host) {\n return {\n kind,\n registry,\n containers,\n targets,\n host,\n members: [],\n comments: /* @__PURE__ */ new Map(),\n extras: [],\n respelled: [],\n warnings: [],\n flags: [],\n inventory: [],\n pending: [],\n assessments: [],\n notes: [],\n legacy: false,\n index: 0\n };\n}\nfunction assessProgram(site, property, modifiers) {\n const targetProperty = resolveProp(property);\n const assessment = assessFlatConversion(\n {\n property: targetProperty,\n modifiers,\n targets: site.targets,\n host: site.host\n },\n site.registry\n );\n if (assessment.verdict !== \"clean\") addAssessment(site, targetProperty, assessment);\n return assessment.verdict !== \"ineligible\";\n}\nfunction addAssessment(site, property, assessment) {\n if (assessment.verdict === \"clean\") return;\n if (!site.assessments.some(\n (finding) => finding.property === property && finding.verdict === assessment.verdict && JSON.stringify(finding.reasons) === JSON.stringify(assessment.reasons)\n )) {\n site.assessments.push({\n property,\n verdict: assessment.verdict,\n reasons: assessment.reasons\n });\n }\n}\nfunction legacyKeysInSpread(expression) {\n const names = /* @__PURE__ */ new Set();\n for (const object of expression.getDescendantsOfKind(\n SyntaxKind.ObjectLiteralExpression\n )) {\n for (const property of object.getProperties()) {\n if (!Node.isPropertyAssignment(property)) continue;\n const name = propertyName(property.getNameNode());\n if (name !== null && isLegacyConditionName(name)) names.add(name);\n }\n }\n return [...names];\n}\nfunction pushSpread(site, expression, text) {\n const keys = legacyKeysInSpread(expression);\n if (keys.length) {\n site.legacy = true;\n addFlag(\n site.flags,\n \"legacy-condition-in-spread\",\n `\"${compact(text)}\" is not an inline object literal, so its ${keys.map((key) => `\"${key}\"`).join(\", \")} ${keys.length === 1 ? \"entry stays\" : \"entries stay\"} authored`\n );\n }\n site.members.push({\n type: \"spread\",\n index: site.index++,\n text,\n legacy: keys.length > 0\n });\n}\nfunction converted(site, report) {\n return report.programs.length > 0 || site.extras.length > 0 || site.members.some(\n (member) => member.type === \"authored\" && member.activated || member.type === \"legacy\" && !member.failed\n );\n}\nfunction legacyLeft(site) {\n return site.members.filter(\n (member) => member.type === \"legacy\" && member.failed || member.type === \"spread\" && member.legacy\n ).length;\n}\nfunction isConvertedName(name) {\n return name === \"group\" || styleProps.has(name) || tokenVariantProps.has(name) || isLegacyConditionName(name);\n}\nfunction addFlag(list, code, detail) {\n if (!list.some((flag) => flag.code === code && flag.detail === detail)) {\n list.push({ code, detail });\n }\n}\nfunction addNote(site, note) {\n if (!site.notes.includes(note)) site.notes.push(note);\n}\nconst legacyPaletteStepPattern = /(?:^|[^\\w-])\\$?((?:gray|mauve|slate|sage|olive|sand|tomato|red|ruby|crimson|pink|plum|purple|violet|iris|indigo|blue|cyan|teal|jade|green|grass|bronze|gold|brown|orange|amber|yellow|lime|mint|sky)(?:1[0-2]|[1-9]))(?![\\w-])/g;\nconst legacyTrueTokenPattern = /(?:^|[^\\w-])\\$true(?![\\w-])/;\nfunction legacyTokenWarnings(prop, values) {\n const warnings = [];\n if (values.some((value) => legacyTrueTokenPattern.test(value))) {\n warnings.push({\n code: \"legacy-true-token\",\n detail: `${prop} spelled the \\`$true\\` alias, written as \\`4\\` because the default config aliased it there; confirm the app's tokens agree`\n });\n }\n const names = /* @__PURE__ */ new Set();\n for (const value of values) {\n legacyPaletteStepPattern.lastIndex = 0;\n for (const match of value.matchAll(legacyPaletteStepPattern)) names.add(match[1]);\n }\n if (!names.size) return warnings;\n const formatted = [...names].sort().map((name) => `\\`${name}\\``).join(\", \");\n warnings.push({\n code: \"legacy-palette-token\",\n detail: `${prop} preserves ${formatted}, which @tamagui/config/v6 does not define; choose an absolute palette token or an adaptive colorN value`\n });\n return warnings;\n}\nconst empty = {\n payload: null,\n text: null,\n dynamic: false,\n problem: null,\n warnings: [],\n blocked: null,\n inventory: null\n};\nfunction interpolate(prop, text, kind, registry) {\n return `\\${${text}}${kind === \"number\" ? unitSuffix(resolveProp(prop), registry) : \"\"}`;\n}\nfunction classifyStatic(prop, value, registry) {\n const probe = sharedPayload(prop, value, registry);\n const error = probe.errors[0];\n if (error || probe.payload === null) {\n const flag = {\n code: error?.code ?? \"unsupported-legacy-value\",\n detail: `${prop}: ${error?.message ?? `\"${String(value)}\" has no flat spelling`}`\n };\n return { ...empty, problem: flag, blocked: flag };\n }\n return { ...empty, payload: probe.payload };\n}\nfunction reparsesAsBase(value, registry) {\n const parsed = parseValue(value, registry);\n return parsed.ok && parsed.value.clauses.length === 0 && parsed.value.base === value.trim();\n}\nfunction classifyDynamic(prop, expression, registry) {\n const current = unwrapExpression(expression);\n const source = compact(current.getText());\n const structured = classifyStructuredNativeValue(\n resolveProp(prop),\n current,\n source,\n registry\n );\n if (structured) {\n return {\n ...empty,\n payload: structured.payload,\n blocked: structured.blocked\n };\n }\n const tree = literalTree(current, registry);\n if (tree && tree.error) {\n const flag2 = {\n code: tree.error.code,\n detail: `${prop}: ${tree.error.message}`\n };\n return { ...empty, problem: flag2, blocked: flag2 };\n }\n if (tree && tree.kind !== \"nullish\") {\n const rewrittenTokenText = /\\$(?=[\\w-])/.test(source) && tree.text !== source ? tree.text : null;\n return {\n ...empty,\n payload: interpolate(prop, tree.text, tree.kind, registry),\n text: rewrittenTokenText,\n dynamic: true,\n warnings: legacyTokenWarnings(prop, tree.strings)\n };\n }\n if (tree) {\n const flag2 = {\n code: \"empty-style-value\",\n detail: `${prop} value \"${source}\" is always nullish and cannot join a program`\n };\n return { ...empty, blocked: flag2 };\n }\n const runtime = runtimeType(current);\n if (runtime.kind === \"number\") {\n return {\n ...empty,\n payload: interpolate(prop, source, \"number\", registry),\n dynamic: true\n };\n }\n if (runtime.kind === \"string\") {\n const tokens = runtime.literals?.filter((literal) => literal.startsWith(\"$\"));\n if (tokens?.length) {\n const flag2 = {\n code: \"legacy-token-constant\",\n detail: `${prop} value \"${source}\" resolves to legacy token ${tokens.map((token) => `\"${token}\"`).join(\", \")}; migrate the constant it comes from`\n };\n return { ...empty, problem: flag2, blocked: flag2 };\n }\n if (runtime.literals === null) {\n return {\n ...empty,\n payload: interpolate(prop, source, \"string\", registry),\n dynamic: true,\n inventory: {\n code: \"dynamic-string-value\",\n detail: `${prop} value \"${source}\" is an open string; confirm it never holds a legacy \"$token\" spelling`\n }\n };\n }\n return {\n ...empty,\n payload: interpolate(prop, source, \"string\", registry),\n dynamic: true\n };\n }\n const flag = {\n code: \"unprovable-dynamic-value\",\n detail: `${prop} value \"${source}\" has no provable number or string type, so it cannot fold into a program`\n };\n return { ...empty, blocked: flag };\n}\nfunction pushBase(site, prop, text, value, literalString) {\n const index = site.index++;\n if (literalString !== null) {\n for (const warning of legacyTokenWarnings(prop, [literalString])) {\n addFlag(site.warnings, warning.code, warning.detail);\n }\n if (literalString.includes(\"$\")) {\n site.legacy = true;\n const allowed2 = assessProgram(site, prop, []);\n const flat = flatStringValue(literalString, site.registry);\n const problem = flat.text === null ? {\n code: flat.error?.code ?? \"unsupported-legacy-value\",\n detail: `${prop}: ${flat.error?.message ?? `${JSON.stringify(literalString)} has no flat spelling`}`\n } : !reparsesAsBase(flat.text, site.registry) ? {\n code: \"value-reparses-as-program\",\n detail: `${prop} value ${JSON.stringify(flat.text)} does not read back as one flat base value`\n } : null;\n if (problem !== null) addFlag(site.flags, problem.code, problem.detail);\n site.members.push({\n type: \"authored\",\n index,\n prop,\n text,\n payload: allowed2 && problem === null ? flat.text : null,\n dynamic: false,\n blocked: problem,\n token: allowed2,\n activated: false\n });\n return;\n }\n if (!reparsesAsBase(literalString, site.registry)) {\n const flag = {\n code: \"value-reparses-as-program\",\n detail: `${prop} value ${JSON.stringify(literalString)} does not read back as one flat base value`\n };\n addFlag(site.flags, flag.code, flag.detail);\n site.members.push({\n type: \"authored\",\n index,\n prop,\n text,\n payload: null,\n dynamic: false,\n blocked: flag,\n token: false,\n activated: false\n });\n return;\n }\n site.members.push({\n type: \"authored\",\n index,\n prop,\n text,\n payload: literalString,\n dynamic: false,\n blocked: null,\n token: false,\n activated: false\n });\n return;\n }\n const number = value ? numericValue(value) : null;\n if (number !== null) {\n const classified2 = classifyStatic(prop, number, site.registry);\n site.members.push({\n type: \"authored\",\n index,\n prop,\n text,\n payload: classified2.payload,\n dynamic: false,\n blocked: classified2.blocked,\n token: false,\n activated: false\n });\n return;\n }\n const kind = value?.getKind();\n if (value === null || kind === SyntaxKind.TrueKeyword || kind === SyntaxKind.FalseKeyword || kind === SyntaxKind.NullKeyword) {\n site.members.push({\n type: \"authored\",\n index,\n prop,\n text,\n payload: null,\n dynamic: false,\n blocked: {\n code: \"non-css-style-value\",\n detail: `${prop} value \"${compact(text)}\" is not a CSS value and cannot join a program`\n },\n token: false,\n activated: false\n });\n return;\n }\n const classified = classifyDynamic(prop, value, site.registry);\n if (classified.problem) {\n site.legacy = true;\n addFlag(site.flags, classified.problem.code, classified.problem.detail);\n }\n for (const warning of classified.warnings) {\n addFlag(site.warnings, warning.code, warning.detail);\n }\n if (classified.inventory) {\n addFlag(site.inventory, classified.inventory.code, classified.inventory.detail);\n }\n if (classified.text !== null) site.legacy = true;\n const allowed = classified.text === null || assessProgram(site, prop, []);\n site.members.push({\n type: \"authored\",\n index,\n prop,\n text,\n payload: allowed ? classified.payload : null,\n dynamic: classified.dynamic,\n blocked: classified.blocked,\n token: allowed && classified.text !== null,\n activated: false\n });\n}\nconst sentinelMark = \"\u0001\";\nfunction evaluateLegacyObject(object, rootPath) {\n const leaves = [];\n const visit = (current, currentPath) => {\n const value = {};\n for (const property of current.getProperties()) {\n if (Node.isSpreadAssignment(property)) {\n return {\n value: null,\n fatal: `spread \"${compact(property.getText())}\" hides legacy condition entries`\n };\n }\n if (!Node.isPropertyAssignment(property)) {\n return {\n value: null,\n fatal: `property \"${compact(property.getText())}\" is not a static assignment`\n };\n }\n const nameNode = property.getNameNode();\n if (Node.isComputedPropertyName(nameNode)) {\n return {\n value: null,\n fatal: `computed property \"${compact(nameNode.getText())}\" hides the affected style property`\n };\n }\n const name = propertyName(nameNode);\n if (name === null) {\n return {\n value: null,\n fatal: `property name \"${compact(nameNode.getText())}\" is not statically known`\n };\n }\n const path = `${currentPath}.${name}`;\n const initializer = unwrapExpression(property.getInitializerOrThrow());\n if (Node.isObjectLiteralExpression(initializer)) {\n const nested = visit(initializer, path);\n if (nested.fatal) return nested;\n value[name] = nested.value;\n continue;\n }\n const leaf = staticLeafValue(initializer);\n if (leaf) {\n value[name] = leaf.value;\n continue;\n }\n value[name] = `${sentinelMark}${leaves.length}${sentinelMark}`;\n leaves.push({ path, prop: name, expression: initializer });\n }\n return { value, fatal: null };\n };\n const result = visit(object, rootPath);\n return { ...result, leaves };\n}\nfunction conditionProperties(value) {\n const properties = /* @__PURE__ */ new Set();\n const visit = (object) => {\n for (const key in object) {\n const child = object[key];\n if (child !== null && typeof child === \"object\" && isLegacyConditionName(key)) {\n visit(child);\n continue;\n }\n if (!styleProps.has(key)) continue;\n for (const property of expandToLonghands(key, shorthands)) properties.add(property);\n }\n };\n visit(value);\n return properties;\n}\nfunction pushLegacy(site, name, text, initializer, node) {\n const index = site.index++;\n site.legacy = true;\n const keep = (properties2) => {\n site.members.push({\n type: \"legacy\",\n index,\n name,\n text,\n contributions: [],\n properties: properties2,\n failed: true\n });\n };\n if (initializer === null || !Node.isObjectLiteralExpression(initializer)) {\n addFlag(\n site.flags,\n \"dynamic-legacy-condition\",\n `\"${name}\" is not an inline object literal, so its entries are not statically known`\n );\n keep(null);\n return;\n }\n const evaluated = evaluateLegacyObject(initializer, name);\n if (evaluated.fatal || evaluated.value === null) {\n addFlag(site.flags, \"dynamic-legacy-condition\", evaluated.fatal ?? \"unresolved\");\n keep(null);\n return;\n }\n const properties = conditionProperties(evaluated.value);\n const eligibilityStack = [{ object: evaluated.value, path: name }];\n let hasRejectedProperty = false;\n while (eligibilityStack.length > 0) {\n const current = eligibilityStack.pop();\n for (const prop in current.object) {\n const value = current.object[prop];\n const targetProp = resolveProp(prop);\n if (styleProps.has(targetProp) && !isLegacyConditionName(prop)) {\n const assessment = assessFlatConversion(\n {\n property: targetProp,\n targets: site.targets,\n host: site.host\n },\n site.registry\n );\n if (assessment.verdict === \"ineligible\") {\n addAssessment(site, targetProp, assessment);\n hasRejectedProperty = true;\n }\n continue;\n }\n if (value !== null && typeof value === \"object\" && !Array.isArray(value) && isLegacyConditionName(prop)) {\n eligibilityStack.push({\n object: value,\n path: `${current.path}.${prop}`\n });\n }\n }\n }\n if (hasRejectedProperty) {\n keep(properties);\n return;\n }\n const unresolved = site.containers.unresolved.get(node);\n if (unresolved !== void 0) {\n addFlag(site.flags, unresolved.code, unresolved.detail);\n keep(properties);\n return;\n }\n const resolution = resolveLegacyName(name, site.registry);\n if (!resolution.ok) {\n addFlag(site.flags, resolution.code, resolution.message);\n keep(properties);\n return;\n }\n const payloads = /* @__PURE__ */ new Map();\n let failed = false;\n for (let index2 = 0; index2 < evaluated.leaves.length; index2++) {\n const leaf = evaluated.leaves[index2];\n const classified = classifyDynamic(leaf.prop, leaf.expression, site.registry);\n for (const warning of classified.warnings) {\n addFlag(site.warnings, warning.code, `${leaf.path}: ${warning.detail}`);\n }\n if (classified.payload === null) {\n const flag = classified.problem ?? classified.blocked;\n addFlag(\n site.flags,\n flag?.code ?? \"dynamic-condition-value\",\n `${leaf.path}: ${flag?.detail ?? \"the value is not statically known\"}`\n );\n failed = true;\n continue;\n }\n payloads.set(`${sentinelMark}${index2}${sentinelMark}`, classified.payload);\n }\n if (failed) {\n keep(properties);\n return;\n }\n const { canonical, replaceRoot } = resolution.resolved;\n const converted2 = convertLegacyConditionProp(canonical, evaluated.value, {\n registry: site.registry\n });\n if (converted2 === null) {\n addFlag(\n site.flags,\n \"unknown-legacy-condition\",\n `\"${name}\" is not a registered legacy condition spelling`\n );\n keep(properties);\n return;\n }\n for (const error of converted2.errors) {\n const path = error.path.startsWith(canonical) ? `${name}${error.path.slice(canonical.length)}` : error.path;\n addFlag(site.flags, error.code, `${path}: ${error.message}`);\n failed = true;\n }\n const contributions = [];\n for (const contribution of converted2.contributions) {\n if (!styleProps.has(contribution.prop)) {\n addFlag(\n site.flags,\n \"non-style-condition-entry\",\n `${name}.${contribution.prop} is not a style property, so a flat value cannot carry it`\n );\n failed = true;\n continue;\n }\n const modifiers = replaceRoot ? [...replaceRoot, ...contribution.clause.modifiers.slice(1)] : contribution.clause.modifiers;\n const dynamicPayload = payloads.get(contribution.clause.payload);\n contributions.push({\n prop: contribution.prop,\n clause: {\n modifiers,\n payload: dynamicPayload ?? contribution.clause.payload\n },\n dynamic: dynamicPayload !== void 0\n });\n if (!assessProgram(site, contribution.prop, modifiers)) failed = true;\n }\n if (failed) {\n keep(properties);\n return;\n }\n site.members.push({\n type: \"legacy\",\n index,\n name,\n text,\n contributions,\n properties,\n failed: false\n });\n}\nfunction activationName(prop) {\n return resolveProp(prop);\n}\nconst noProperties = /* @__PURE__ */ new Set();\nconst legacyStatePriorities = Object.freeze({\n hover: 2,\n press: 3,\n active: 3,\n focus: 4,\n \"focus-visible\": 4,\n \"focus-within\": 4,\n enter: 4,\n disabled: 5,\n exit: 5\n});\nfunction legacyStatePriority(modifiers) {\n let priority = null;\n for (const modifier of modifiers) {\n const candidate = legacyStatePriorities[modifier];\n if (candidate !== void 0 && (priority === null || candidate > priority)) {\n priority = candidate;\n }\n }\n return priority;\n}\nfunction orderedEntries(site) {\n const ordered = [];\n for (const member of site.members) {\n if (member.type === \"authored\") {\n if (!member.activated || member.payload === null) continue;\n ordered.push({\n prop: member.prop,\n value: { base: member.payload, clauses: [] },\n dynamic: member.dynamic,\n index: member.index,\n base: true,\n from: null,\n legacyStatePriority: null\n });\n continue;\n }\n if (member.type !== \"legacy\" || member.failed) continue;\n for (const contribution of member.contributions) {\n ordered.push({\n prop: contribution.prop,\n value: { base: null, clauses: [contribution.clause] },\n dynamic: contribution.dynamic,\n index: member.index,\n base: false,\n from: member,\n legacyStatePriority: legacyStatePriority(contribution.clause.modifiers)\n });\n }\n }\n const ranked = ordered.filter((entry) => entry.legacyStatePriority !== null).sort(\n (left, right) => left.legacyStatePriority - right.legacyStatePriority || left.index - right.index\n );\n if (ranked.length < 2) return ordered;\n let rankedIndex = 0;\n return ordered.map(\n (entry) => entry.legacyStatePriority === null ? entry : ranked[rankedIndex++]\n );\n}\nfunction buildSlots(ordered) {\n const slots = /* @__PURE__ */ new Map();\n for (const entry of ordered) {\n for (const property of expandToLonghands(entry.prop, shorthands)) {\n const previous = slots.get(property);\n const value = previous ? mergeProgramValues(previous.value, entry.value) : entry.value;\n slots.delete(property);\n slots.set(property, {\n property,\n sourceProp: entry.prop,\n value,\n anchor: previous ? Math.min(previous.anchor, entry.index) : entry.index,\n last: previous ? Math.max(previous.last, entry.index) : entry.index,\n dynamic: (previous?.dynamic ?? false) || entry.dynamic\n });\n }\n }\n return slots;\n}\nfunction barriers(site) {\n const list = [];\n for (const member of site.members) {\n if (member.type === \"spread\") {\n list.push({ index: member.index, source: member.text, bases: null, clauses: null });\n continue;\n }\n if (member.type === \"authored\" && !member.activated) {\n list.push({\n index: member.index,\n source: member.text,\n bases: new Set(expandToLonghands(member.prop, shorthands)),\n clauses: noProperties\n });\n continue;\n }\n if (member.type === \"legacy\" && member.failed) {\n list.push({\n index: member.index,\n source: member.name,\n bases: noProperties,\n clauses: member.properties\n });\n }\n }\n return list;\n}\nfunction resolveBarriers(site, ordered, slots) {\n let changed = false;\n for (const slot of slots.values()) {\n const contributions = ordered.filter(\n (entry) => expandToLonghands(entry.prop, shorthands).includes(slot.property)\n );\n for (const barrier of barriers(site)) {\n if (barrier.index <= slot.anchor || barrier.index >= slot.last) continue;\n if (barrier.clauses === null || barrier.clauses.has(slot.property)) {\n for (const entry of contributions) {\n if (entry.base || entry.index < barrier.index || !entry.from) continue;\n addFlag(\n site.flags,\n \"condition-order-not-preservable\",\n `\"${compact(barrier.source)}\" can set \"${slot.property}\" between the values contributing to it, so \"${entry.from.name}\" stays authored instead of merging`\n );\n entry.from.failed = true;\n changed = true;\n }\n }\n if (barrier.bases === null || barrier.bases.has(slot.property)) {\n for (const entry of contributions) {\n if (!entry.base || entry.index < barrier.index) continue;\n const authored = site.members.find(\n (member) => member.type === \"authored\" && member.index === entry.index && member.activated\n );\n if (authored && authored.type === \"authored\") {\n authored.payload = null;\n authored.blocked = {\n code: \"base-order-not-preservable\",\n detail: `\"${compact(barrier.source)}\" can set \"${slot.property}\" between the values contributing to it, so this base cannot move`\n };\n changed = true;\n continue;\n }\n addFlag(\n site.flags,\n \"base-order-not-preservable\",\n `\"${compact(barrier.source)}\" can set \"${slot.property}\" between the values contributing to it, so the merged base may win where it did not before`\n );\n }\n }\n }\n }\n return changed;\n}\nfunction assemble(site) {\n let slots = /* @__PURE__ */ new Map();\n for (; ; ) {\n let changed = false;\n const contributed = /* @__PURE__ */ new Set();\n for (const member of site.members) {\n if (member.type !== \"legacy\" || member.failed) continue;\n for (const contribution of member.contributions) {\n contributed.add(activationName(contribution.prop));\n }\n }\n for (const member of site.members) {\n if (member.type !== \"authored\") continue;\n const name = activationName(member.prop);\n member.activated = member.token && member.payload !== null || contributed.has(name);\n if (!member.activated || member.payload !== null) continue;\n const blocked = member.blocked;\n addFlag(\n site.flags,\n blocked?.code ?? \"unprovable-dynamic-value\",\n `a legacy condition targets \"${member.prop}\": ${blocked?.detail ?? `its base value \"${compact(member.text)}\" cannot join a program`}`\n );\n member.activated = false;\n for (const other of site.members) {\n if (other.type !== \"legacy\" || other.failed) continue;\n if (other.contributions.some((one) => activationName(one.prop) === name)) {\n other.failed = true;\n changed = true;\n }\n }\n }\n if (changed) continue;\n const ordered = orderedEntries(site);\n slots = buildSlots(ordered);\n if (!resolveBarriers(site, ordered, slots)) break;\n }\n const entries = [];\n for (const member of site.members) {\n if (member.type === \"authored\" && member.activated) continue;\n if (member.type === \"legacy\" && !member.failed) continue;\n entries.push({ index: member.index, text: member.text });\n }\n const printed = printSlots(site, slots);\n entries.push(...printed.output);\n entries.push(...site.extras);\n entries.sort((left, right) => left.index - right.index);\n return { entries, programs: printed.programs };\n}\nfunction printSlots(site, slots) {\n const printed = /* @__PURE__ */ new Set();\n const output = [];\n const programs = [];\n const outputCommentRanges = [];\n for (const [property, slot] of slots) {\n if (printed.has(property)) continue;\n const serialized = printProgram(slot.value);\n const expansion = expandToLonghands(slot.sourceProp, shorthands);\n const collapses = expansion.length > 0 && expansion.every((expanded) => {\n const candidate = slots.get(expanded);\n return candidate !== void 0 && candidate.sourceProp === slot.sourceProp && candidate.anchor === slot.anchor && candidate.dynamic === slot.dynamic && printProgram(candidate.value) === serialized;\n });\n const name = collapses ? slot.sourceProp : property;\n if (collapses) for (const expanded of expansion) printed.add(expanded);\n else printed.add(property);\n const value = slot.dynamic ? `\\`${serialized}\\`` : JSON.stringify(serialized);\n programs.push({ name, value: serialized, dynamic: slot.dynamic });\n const propertyText = site.kind === \"styled\" ? `${name}: ${value}` : `${name}=${slot.dynamic ? `{${value}}` : value}`;\n output.push({\n index: slot.anchor,\n text: propertyText\n });\n outputCommentRanges.push({\n outputIndex: output.length - 1,\n first: slot.anchor,\n last: slot.last\n });\n }\n verify(\n site,\n slots,\n [...output].sort((left, right) => left.index - right.index)\n );\n if (site.kind === \"styled\") {\n const commentedIndexes = /* @__PURE__ */ new Set();\n for (const range of outputCommentRanges) {\n const comments = [];\n for (const [index, texts] of site.comments) {\n if (index < range.first || index > range.last || commentedIndexes.has(index)) {\n continue;\n }\n comments.push(...texts);\n commentedIndexes.add(index);\n }\n if (comments.length) {\n output[range.outputIndex].text = `${comments.join(\"\\n\")}\n${output[range.outputIndex].text}`;\n }\n }\n }\n return { output, programs };\n}\nfunction sanitize(text) {\n let result = \"\";\n for (let index = 0; index < text.length; index++) {\n if (text[index] !== \"$\" || text[index + 1] !== \"{\") {\n result += text[index];\n continue;\n }\n let depth = 0;\n let end = index + 1;\n for (; end < text.length; end++) {\n if (text[end] === \"{\") depth++;\n else if (text[end] === \"}\" && --depth === 0) break;\n }\n result += \"zz\";\n index = end;\n }\n return result;\n}\nfunction verify(site, slots, output) {\n const separator = site.kind === \"styled\" ? \": \" : \"=\";\n const reparsed = /* @__PURE__ */ new Map();\n for (const entry of output) {\n const split = entry.text.indexOf(separator);\n const prop = entry.text.slice(0, split);\n let raw = entry.text.slice(split + separator.length);\n if (raw.startsWith(\"{\")) raw = raw.slice(1, -1);\n const text = sanitize(raw.slice(1, -1));\n const parsed = parseValue(text, site.registry);\n if (!parsed.ok) {\n addFlag(\n site.flags,\n \"emitted-value-invalid\",\n `\"${prop}=${text}\" does not parse: ${parsed.errors.map((error) => error.message).join(\"; \")}`\n );\n return;\n }\n for (const property of expandToLonghands(prop, shorthands)) {\n const previous = reparsed.get(property);\n reparsed.set(\n property,\n previous ? mergeProgramValues(previous, parsed.value) : parsed.value\n );\n }\n }\n for (const [property, slot] of slots) {\n const actual = reparsed.get(property);\n const expected = sanitize(printProgram(slot.value));\n if (actual === void 0 || sanitize(printProgram(actual)) !== expected) {\n addFlag(\n site.flags,\n \"emitted-program-mismatch\",\n `\"${property}\" reads back as \"${actual ? sanitize(printProgram(actual)) : \"(missing)\"}\" instead of \"${expected}\"`\n );\n }\n }\n}\nfunction propertyName(node) {\n if (Node.isIdentifier(node) || Node.isStringLiteral(node) || Node.isNumericLiteral(node)) {\n return node.getText().replace(/^['\"]|['\"]$/g, \"\");\n }\n return null;\n}\nfunction jsxAttributeName(attribute) {\n const name = attribute.getNameNode();\n return Node.isIdentifier(name) ? name.getText() : null;\n}\nfunction jsxLiteralString(attribute) {\n const initializer = attribute.getInitializer();\n if (Node.isStringLiteral(initializer)) return initializer.getLiteralValue();\n const expression = jsxExpression(attribute);\n if (expression && (Node.isStringLiteral(expression) || Node.isNoSubstitutionTemplateLiteral(expression))) {\n return expression.getLiteralValue();\n }\n return null;\n}\nfunction jsxExpression(attribute) {\n const initializer = attribute.getInitializer();\n if (!Node.isJsxExpression(initializer)) return null;\n const expression = initializer.getExpression();\n return expression ? unwrapExpression(expression) : null;\n}\nfunction isConvertedJsxAttribute(attribute) {\n if (Node.isJsxSpreadAttribute(attribute)) return true;\n if (!Node.isJsxAttribute(attribute)) return false;\n const name = jsxAttributeName(attribute);\n return !!name && isConvertedName(name);\n}\nfunction rewriteJsxSite(opening, entries) {\n const attributes = opening.getAttributes();\n const rendered = [];\n let inserted = false;\n for (const attribute of attributes) {\n if (isConvertedJsxAttribute(attribute)) {\n if (!inserted) {\n rendered.push(...entries.map((entry) => entry.text));\n inserted = true;\n }\n } else {\n rendered.push(attribute.getText());\n }\n }\n const source = opening.getText();\n const start = opening.getStart();\n const first = attributes[0];\n const last = attributes[attributes.length - 1];\n const prefix = source.slice(0, first.getStart() - start);\n const suffix = source.slice(last.getEnd() - start);\n const authoredMultiline = prefix.includes(\"\\n\") || source.slice(first.getStart() - start, last.getEnd() - start).includes(\"\\n\");\n opening.replaceWithText(\n authoredMultiline ? `${prefix.replace(/[ \\t]+$/, \"\")}${rendered.map((text) => ` ${text}`).join(\"\\n\")}${suffix.replace(/\\n[ \\t]+/, \"\\n\")}` : `${prefix}${rendered.join(\" \")}${suffix}`\n );\n}\nfunction containerExtras(site, declaration, index) {\n const target = site.containers.targets.get(declaration);\n if (target === void 0) return;\n const name = target.named && target.group !== \"\" ? target.group : null;\n const text = site.kind === \"styled\" ? name === null ? \"container: true\" : `container: ${JSON.stringify(name)}` : name === null ? \"container\" : `container=${JSON.stringify(name)}`;\n site.legacy = true;\n site.extras.push({ index, text });\n if (target.flag !== null) addFlag(site.flags, target.flag.code, target.flag.detail);\n addNote(\n site,\n `a descendant uses a legacy container-size condition on this group, so it declares a query container`\n );\n}\nfunction convertJsxSite(opening, registry, containers, targets, host, write = false) {\n const site = createSite(\"jsx\", registry, containers, targets, host);\n const before = [];\n for (const attribute of opening.getAttributes()) {\n if (Node.isJsxSpreadAttribute(attribute)) {\n const expression = unwrapExpression(attribute.getExpression());\n if (Node.isObjectLiteralExpression(expression)) {\n before.push(compact(attribute.getText()));\n for (const property of expression.getProperties()) {\n if (Node.isPropertyAssignment(property)) {\n const name2 = propertyName(property.getNameNode());\n if (name2 !== null) {\n if (isConvertedName(name2)) {\n pushStyledProperty(\n site,\n name2,\n property,\n `${name2}={${property.getInitializerOrThrow().getText()}}`\n );\n } else {\n site.members.push({\n type: \"passthrough\",\n index: site.index++,\n text: `${name2}={${property.getInitializerOrThrow().getText()}}`\n });\n }\n continue;\n }\n }\n pushSpread(\n site,\n property,\n Node.isSpreadAssignment(property) ? `{${property.getText()}}` : `{...{ ${property.getText()} }}`\n );\n }\n continue;\n }\n before.push(compact(attribute.getText()));\n pushSpread(site, expression, attribute.getText());\n continue;\n }\n const name = jsxAttributeName(attribute);\n if (!name) continue;\n const text = compact(attribute.getText());\n if (name === \"group\") {\n before.push(text);\n containerExtras(site, attribute, site.index);\n site.members.push({ type: \"passthrough\", index: site.index++, text });\n continue;\n }\n if (isLegacyConditionName(name)) {\n before.push(text);\n pushLegacy(site, name, text, jsxExpression(attribute), attribute);\n continue;\n }\n if (tokenVariantProps.has(name)) {\n if (pushTokenVariant(site, name, attribute, text)) before.push(text);\n continue;\n }\n if (!styleProps.has(name)) continue;\n before.push(text);\n const literal = jsxLiteralString(attribute);\n pushBase(\n site,\n name,\n text,\n literal === null ? jsxExpression(attribute) : null,\n literal\n );\n }\n if (!site.legacy) return null;\n const { entries, programs } = assemble(site);\n const sourceFile = opening.getSourceFile();\n const report = {\n kind: \"jsx\",\n label: `<${opening.getTagNameNode().getText()}>`,\n line: sourceFile.getLineAndColumnAtPos(opening.getStart()).line,\n before: before.join(\" \"),\n after: entries.map((entry) => entry.text).join(\" \") || \"(no style props left)\",\n programs: [...programs, ...site.respelled],\n assessments: site.assessments,\n assessmentVerdict: assessmentVerdict(site.assessments),\n warnings: site.warnings,\n flags: site.flags,\n inventory: site.inventory,\n pending: site.pending,\n notes: site.notes,\n legacyLeft: legacyLeft(site)\n };\n if (write && converted(site, report) && !site.flags.some(\n (flag) => flag.code === \"emitted-program-mismatch\" || flag.code === \"emitted-value-invalid\"\n )) {\n rewriteJsxSite(opening, entries);\n }\n return report;\n}\nfunction pushStyledProperty(site, name, property, authoredText) {\n const comments = allCommentTexts(property);\n if (comments.length) site.comments.set(site.index, comments);\n const text = authoredText ?? textWithOuterComments(property);\n const initializer = unwrapExpression(property.getInitializerOrThrow());\n if (name === \"group\") {\n containerExtras(site, property, site.index);\n site.members.push({ type: \"passthrough\", index: site.index++, text });\n return;\n }\n if (isLegacyConditionName(name)) {\n pushLegacy(site, name, text, initializer, property);\n return;\n }\n if (tokenVariantProps.has(name)) {\n pushTokenVariant(site, name, property, text);\n return;\n }\n if (!styleProps.has(name)) return;\n const literal = Node.isStringLiteral(initializer) || Node.isNoSubstitutionTemplateLiteral(initializer) ? initializer.getLiteralValue() : null;\n pushBase(site, name, text, literal === null ? initializer : null, literal);\n}\nfunction pushTokenVariant(site, name, node, text) {\n const index = site.index++;\n const initializer = node.getInitializer();\n const value = initializer !== void 0 && Node.isJsxExpression(initializer) ? initializer.getExpression() : initializer;\n const literals = value === void 0 ? [] : [value, ...value.getDescendants()].filter(\n (candidate) => (Node.isStringLiteral(candidate) || Node.isNoSubstitutionTemplateLiteral(candidate)) && candidate.getLiteralValue().startsWith(\"$\")\n );\n if (value === void 0 || literals.length === 0) {\n site.members.push({ type: \"passthrough\", index, text });\n return false;\n }\n const source = value.getText();\n const start = value.getStart();\n let rewritten = \"\";\n let cursor = start;\n for (const literal of literals) {\n let replacement = \"true\";\n if (literal.getLiteralValue() !== \"$true\") {\n const flat = flatStringValue(literal.getLiteralValue(), site.registry);\n if (flat.text === null) {\n site.legacy = true;\n addFlag(\n site.flags,\n flat.error?.code ?? \"unsupported-legacy-value\",\n `${name}: ${flat.error?.message ?? `${literal.getText()} has no flat spelling`}`\n );\n site.members.push({ type: \"passthrough\", index, text });\n return true;\n }\n const quote = literal.getText()[0];\n replacement = `${quote}${flat.text}${quote}`;\n }\n rewritten += source.slice(cursor - start, literal.getStart() - start);\n rewritten += replacement;\n cursor = literal.getEnd();\n }\n rewritten += source.slice(cursor - start);\n site.legacy = true;\n const output = Node.isJsxAttribute(node) ? Node.isStringLiteral(initializer) ? rewritten === \"true\" ? name : `${name}=${rewritten}` : `${name}={${rewritten}}` : site.kind === \"jsx\" ? `${name}={${rewritten}}` : textWithOuterComments(node, `${node.getNameNode().getText()}: ${rewritten}`);\n site.members.push({ type: \"passthrough\", index, text: output });\n site.respelled.push({\n name,\n value: rewritten,\n dynamic: literals.length !== 1 || literals[0] !== value\n });\n return true;\n}\nfunction convertStyleObject(object, kind, label, registry, containers, targets, host, write = false) {\n const site = createSite(kind, registry, containers, targets, host);\n const before = [];\n for (const property of object.getProperties()) {\n if (Node.isSpreadAssignment(property)) {\n const expression = unwrapExpression(property.getExpression());\n before.push(compact(property.getText()));\n if (Node.isObjectLiteralExpression(expression)) {\n for (const nested of expression.getProperties()) {\n if (Node.isPropertyAssignment(nested)) {\n const name2 = propertyName(nested.getNameNode());\n if (name2 !== null) {\n if (isConvertedName(name2)) {\n pushStyledProperty(site, name2, nested);\n } else {\n site.members.push({\n type: \"passthrough\",\n index: site.index++,\n text: compact(nested.getText())\n });\n }\n continue;\n }\n }\n pushSpread(site, nested, compact(nested.getText()));\n }\n continue;\n }\n pushSpread(site, expression, compact(property.getText()));\n continue;\n }\n if (!Node.isPropertyAssignment(property)) continue;\n const nameNode = property.getNameNode();\n if (Node.isComputedPropertyName(nameNode)) {\n addFlag(\n site.flags,\n \"computed-property\",\n `\"${compact(nameNode.getText())}\" hides the affected style property`\n );\n continue;\n }\n const name = propertyName(nameNode);\n if (name === null) continue;\n if (!isConvertedName(name)) continue;\n before.push(compact(property.getText()));\n pushStyledProperty(site, name, property);\n }\n if (!site.legacy) return null;\n const { entries, programs } = assemble(site);\n const sourceFile = object.getSourceFile();\n const report = {\n kind,\n label,\n line: sourceFile.getLineAndColumnAtPos(object.getStart()).line,\n before: before.join(\", \"),\n after: entries.map((entry) => entry.text).join(\", \") || \"(no style props left)\",\n programs: [...programs, ...site.respelled],\n assessments: site.assessments,\n assessmentVerdict: assessmentVerdict(site.assessments),\n warnings: site.warnings,\n flags: site.flags,\n inventory: site.inventory,\n pending: site.pending,\n notes: site.notes,\n legacyLeft: legacyLeft(site)\n };\n if (write && converted(site, report) && !site.flags.some(\n (flag) => flag.code === \"emitted-program-mismatch\" || flag.code === \"emitted-value-invalid\"\n )) {\n rewriteStyleObject(object, entries);\n }\n return report;\n}\nfunction isConvertedStyledProperty(property) {\n if (Node.isSpreadAssignment(property)) return true;\n if (!Node.isPropertyAssignment(property)) return false;\n const nameNode = property.getNameNode();\n if (Node.isComputedPropertyName(nameNode)) return false;\n const name = propertyName(nameNode);\n return !!name && isConvertedName(name);\n}\nfunction allCommentTexts(node) {\n const comments = /* @__PURE__ */ new Map();\n for (const current of [node, ...node.getDescendants()]) {\n for (const range of [\n ...current.getLeadingCommentRanges(),\n ...current.getTrailingCommentRanges()\n ]) {\n comments.set(range.getPos(), range.getText());\n }\n }\n return [...comments.entries()].sort((left, right) => left[0] - right[0]).map((entry) => entry[1]);\n}\nfunction textWithOuterComments(node, text = node.getText()) {\n const comments = /* @__PURE__ */ new Map();\n for (const range of [\n ...node.getLeadingCommentRanges(),\n ...node.getTrailingCommentRanges()\n ]) {\n comments.set(range.getPos(), range.getText());\n }\n const prefix = [...comments.entries()].sort((left, right) => left[0] - right[0]).map((entry) => entry[1]);\n return [...prefix, text].join(\"\\n \");\n}\nfunction rewriteStyleObject(object, entries) {\n const rendered = [];\n let inserted = false;\n for (const property of object.getProperties()) {\n if (isConvertedStyledProperty(property)) {\n if (!inserted) {\n rendered.push(...entries.map((entry) => entry.text));\n inserted = true;\n }\n } else {\n rendered.push(textWithOuterComments(property));\n }\n }\n if (rendered.length === 0) {\n object.replaceWithText(\"{}\");\n return;\n }\n object.replaceWithText(`{\n${rendered.map((text) => ` ${text}`).join(\",\\n\")}\n}`);\n}\nexport {\n convertJsxSite,\n convertStyleObject,\n sanitize\n};\n//# sourceMappingURL=convert.js.map\n"],"mappings":";;;;;;;AA6BA,SAAS,kBAAkB,aAAa;CACtC,IAAI,YAAY,MAAM,eAAe,WAAW,YAAY,YAAY,GAAG;EACzE,OAAO;CACT;CACA,IAAI,YAAY,MAAM,eAAe,WAAW,YAAY,kBAAkB,GAAG;EAC/E,OAAO;CACT;CACA,OAAO,YAAY,SAAS,iBAAiB;AAC/C;AACA,SAAS,WAAW,MAAM,UAAU,YAAY,SAAS,MAAM;CAC7D,OAAO;EACL;EACA;EACA;EACA;EACA;EACA,SAAS,CAAC;EACV,0BAA0B,IAAI,IAAI;EAClC,QAAQ,CAAC;EACT,WAAW,CAAC;EACZ,UAAU,CAAC;EACX,OAAO,CAAC;EACR,WAAW,CAAC;EACZ,SAAS,CAAC;EACV,aAAa,CAAC;EACd,OAAO,CAAC;EACR,QAAQ;EACR,OAAO;CACT;AACF;AACA,SAAS,cAAc,MAAM,UAAU,WAAW;CAChD,MAAM,iBAAiB,YAAY,QAAQ;CAC3C,MAAM,aAAa,qBACjB;EACE,UAAU;EACV;EACA,SAAS,KAAK;EACd,MAAM,KAAK;CACb,GACA,KAAK,QACP;CACA,IAAI,WAAW,YAAY,SAAS,cAAc,MAAM,gBAAgB,UAAU;CAClF,OAAO,WAAW,YAAY;AAChC;AACA,SAAS,cAAc,MAAM,UAAU,YAAY;CACjD,IAAI,WAAW,YAAY,SAAS;CACpC,IAAI,CAAC,KAAK,YAAY,MACnB,YAAY,QAAQ,aAAa,YAAY,QAAQ,YAAY,WAAW,WAAW,KAAK,UAAU,QAAQ,OAAO,MAAM,KAAK,UAAU,WAAW,OAAO,CAC/J,GAAG;EACD,KAAK,YAAY,KAAK;GACpB;GACA,SAAS,WAAW;GACpB,SAAS,WAAW;EACtB,CAAC;CACH;AACF;AACA,SAAS,mBAAmB,YAAY;CACtC,MAAM,wBAAwB,IAAI,IAAI;CACtC,KAAK,MAAM,UAAU,WAAW,qBAC9B,WAAW,uBACb,GAAG;EACD,KAAK,MAAM,YAAY,OAAO,cAAc,GAAG;GAC7C,IAAI,CAAC,KAAK,qBAAqB,QAAQ,GAAG;GAC1C,MAAM,OAAO,aAAa,SAAS,YAAY,CAAC;GAChD,IAAI,SAAS,QAAQ,sBAAsB,IAAI,GAAG,MAAM,IAAI,IAAI;EAClE;CACF;CACA,OAAO,CAAC,GAAG,KAAK;AAClB;AACA,SAAS,WAAW,MAAM,YAAY,MAAM;CAC1C,MAAM,OAAO,mBAAmB,UAAU;CAC1C,IAAI,KAAK,QAAQ;EACf,KAAK,SAAS;EACd,QACE,KAAK,OACL,8BACA,IAAI,QAAQ,IAAI,EAAE,4CAA4C,KAAK,KAAK,QAAQ,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,GAAG,KAAK,WAAW,IAAI,gBAAgB,eAAe,UAC/J;CACF;CACA,KAAK,QAAQ,KAAK;EAChB,MAAM;EACN,OAAO,KAAK;EACZ;EACA,QAAQ,KAAK,SAAS;CACxB,CAAC;AACH;AACA,SAAS,UAAU,MAAM,QAAQ;CAC/B,OAAO,OAAO,SAAS,SAAS,KAAK,KAAK,OAAO,SAAS,KAAK,KAAK,QAAQ,MACzE,WAAW,OAAO,SAAS,cAAc,OAAO,aAAa,OAAO,SAAS,YAAY,CAAC,OAAO,MACpG;AACF;AACA,SAAS,WAAW,MAAM;CACxB,OAAO,KAAK,QAAQ,QACjB,WAAW,OAAO,SAAS,YAAY,OAAO,UAAU,OAAO,SAAS,YAAY,OAAO,MAC9F,CAAC,CAAC;AACJ;AACA,SAAS,gBAAgB,MAAM;CAC7B,OAAO,SAAS,WAAW,WAAW,IAAI,IAAI,KAAK,kBAAkB,IAAI,IAAI,KAAK,sBAAsB,IAAI;AAC9G;AACA,SAAS,QAAQ,MAAM,MAAM,QAAQ;CACnC,IAAI,CAAC,KAAK,MAAM,SAAS,KAAK,SAAS,QAAQ,KAAK,WAAW,MAAM,GAAG;EACtE,KAAK,KAAK;GAAE;GAAM;EAAO,CAAC;CAC5B;AACF;AACA,SAAS,QAAQ,MAAM,MAAM;CAC3B,IAAI,CAAC,KAAK,MAAM,SAAS,IAAI,GAAG,KAAK,MAAM,KAAK,IAAI;AACtD;AACA,MAAM,2BAA2B;AACjC,MAAM,yBAAyB;AAC/B,SAAS,oBAAoB,MAAM,QAAQ;CACzC,MAAM,WAAW,CAAC;CAClB,IAAI,OAAO,MAAM,UAAU,uBAAuB,KAAK,KAAK,CAAC,GAAG;EAC9D,SAAS,KAAK;GACZ,MAAM;GACN,QAAQ,GAAG,KAAK;EAClB,CAAC;CACH;CACA,MAAM,wBAAwB,IAAI,IAAI;CACtC,KAAK,MAAM,SAAS,QAAQ;EAC1B,yBAAyB,YAAY;EACrC,KAAK,MAAM,SAAS,MAAM,SAAS,wBAAwB,GAAG,MAAM,IAAI,MAAM,EAAE;CAClF;CACA,IAAI,CAAC,MAAM,MAAM,OAAO;CACxB,MAAM,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,SAAS,KAAK,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI;CAC1E,SAAS,KAAK;EACZ,MAAM;EACN,QAAQ,GAAG,KAAK,aAAa,UAAU;CACzC,CAAC;CACD,OAAO;AACT;AACA,MAAM,QAAQ;CACZ,SAAS;CACT,MAAM;CACN,SAAS;CACT,SAAS;CACT,UAAU,CAAC;CACX,SAAS;CACT,WAAW;AACb;AACA,SAAS,YAAY,MAAM,MAAM,MAAM,UAAU;CAC/C,OAAO,MAAM,KAAK,GAAG,SAAS,WAAW,WAAW,YAAY,IAAI,GAAG,QAAQ,IAAI;AACrF;AACA,SAAS,eAAe,MAAM,OAAO,UAAU;CAC7C,MAAM,QAAQ,cAAc,MAAM,OAAO,QAAQ;CACjD,MAAM,QAAQ,MAAM,OAAO;CAC3B,IAAI,SAAS,MAAM,YAAY,MAAM;EACnC,MAAM,OAAO;GACX,MAAM,OAAO,QAAQ;GACrB,QAAQ,GAAG,KAAK,IAAI,OAAO,WAAW,IAAI,OAAO,KAAK,EAAE;EAC1D;EACA,OAAO;GAAE,GAAG;GAAO,SAAS;GAAM,SAAS;EAAK;CAClD;CACA,OAAO;EAAE,GAAG;EAAO,SAAS,MAAM;CAAQ;AAC5C;AACA,SAAS,eAAe,OAAO,UAAU;CACvC,MAAM,SAAS,WAAW,OAAO,QAAQ;CACzC,OAAO,OAAO,MAAM,OAAO,MAAM,QAAQ,WAAW,KAAK,OAAO,MAAM,SAAS,MAAM,KAAK;AAC5F;AACA,SAAS,gBAAgB,MAAM,YAAY,UAAU;CACnD,MAAM,UAAU,iBAAiB,UAAU;CAC3C,MAAM,SAAS,QAAQ,QAAQ,QAAQ,CAAC;CACxC,MAAM,aAAa,8BACjB,YAAY,IAAI,GAChB,SACA,QACA,QACF;CACA,IAAI,YAAY;EACd,OAAO;GACL,GAAG;GACH,SAAS,WAAW;GACpB,SAAS,WAAW;EACtB;CACF;CACA,MAAM,OAAO,YAAY,SAAS,QAAQ;CAC1C,IAAI,QAAQ,KAAK,OAAO;EACtB,MAAM,QAAQ;GACZ,MAAM,KAAK,MAAM;GACjB,QAAQ,GAAG,KAAK,IAAI,KAAK,MAAM;EACjC;EACA,OAAO;GAAE,GAAG;GAAO,SAAS;GAAO,SAAS;EAAM;CACpD;CACA,IAAI,QAAQ,KAAK,SAAS,WAAW;EACnC,MAAM,qBAAqB,cAAc,KAAK,MAAM,KAAK,KAAK,SAAS,SAAS,KAAK,OAAO;EAC5F,OAAO;GACL,GAAG;GACH,SAAS,YAAY,MAAM,KAAK,MAAM,KAAK,MAAM,QAAQ;GACzD,MAAM;GACN,SAAS;GACT,UAAU,oBAAoB,MAAM,KAAK,OAAO;EAClD;CACF;CACA,IAAI,MAAM;EACR,MAAM,QAAQ;GACZ,MAAM;GACN,QAAQ,GAAG,KAAK,UAAU,OAAO;EACnC;EACA,OAAO;GAAE,GAAG;GAAO,SAAS;EAAM;CACpC;CACA,MAAM,UAAU,YAAY,OAAO;CACnC,IAAI,QAAQ,SAAS,UAAU;EAC7B,OAAO;GACL,GAAG;GACH,SAAS,YAAY,MAAM,QAAQ,UAAU,QAAQ;GACrD,SAAS;EACX;CACF;CACA,IAAI,QAAQ,SAAS,UAAU;EAC7B,MAAM,SAAS,QAAQ,UAAU,QAAQ,YAAY,QAAQ,WAAW,GAAG,CAAC;EAC5E,IAAI,QAAQ,QAAQ;GAClB,MAAM,QAAQ;IACZ,MAAM;IACN,QAAQ,GAAG,KAAK,UAAU,OAAO,6BAA6B,OAAO,KAAK,UAAU,IAAI,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;GAC/G;GACA,OAAO;IAAE,GAAG;IAAO,SAAS;IAAO,SAAS;GAAM;EACpD;EACA,IAAI,QAAQ,aAAa,MAAM;GAC7B,OAAO;IACL,GAAG;IACH,SAAS,YAAY,MAAM,QAAQ,UAAU,QAAQ;IACrD,SAAS;IACT,WAAW;KACT,MAAM;KACN,QAAQ,GAAG,KAAK,UAAU,OAAO;IACnC;GACF;EACF;EACA,OAAO;GACL,GAAG;GACH,SAAS,YAAY,MAAM,QAAQ,UAAU,QAAQ;GACrD,SAAS;EACX;CACF;CACA,MAAM,OAAO;EACX,MAAM;EACN,QAAQ,GAAG,KAAK,UAAU,OAAO;CACnC;CACA,OAAO;EAAE,GAAG;EAAO,SAAS;CAAK;AACnC;AACA,SAAS,SAAS,MAAM,MAAM,MAAM,OAAO,eAAe;CACxD,MAAM,QAAQ,KAAK;CACnB,IAAI,kBAAkB,MAAM;EAC1B,KAAK,MAAM,WAAW,oBAAoB,MAAM,CAAC,aAAa,CAAC,GAAG;GAChE,QAAQ,KAAK,UAAU,QAAQ,MAAM,QAAQ,MAAM;EACrD;EACA,IAAI,cAAc,SAAS,GAAG,GAAG;GAC/B,KAAK,SAAS;GACd,MAAM,WAAW,cAAc,MAAM,MAAM,CAAC,CAAC;GAC7C,MAAM,OAAO,gBAAgB,eAAe,KAAK,QAAQ;GACzD,MAAM,UAAU,KAAK,SAAS,OAAO;IACnC,MAAM,KAAK,OAAO,QAAQ;IAC1B,QAAQ,GAAG,KAAK,IAAI,KAAK,OAAO,WAAW,GAAG,KAAK,UAAU,aAAa,EAAE;GAC9E,IAAI,CAAC,eAAe,KAAK,MAAM,KAAK,QAAQ,IAAI;IAC9C,MAAM;IACN,QAAQ,GAAG,KAAK,SAAS,KAAK,UAAU,KAAK,IAAI,EAAE;GACrD,IAAI;GACJ,IAAI,YAAY,MAAM,QAAQ,KAAK,OAAO,QAAQ,MAAM,QAAQ,MAAM;GACtE,KAAK,QAAQ,KAAK;IAChB,MAAM;IACN;IACA;IACA;IACA,SAAS,YAAY,YAAY,OAAO,KAAK,OAAO;IACpD,SAAS;IACT,SAAS;IACT,OAAO;IACP,WAAW;GACb,CAAC;GACD;EACF;EACA,IAAI,CAAC,eAAe,eAAe,KAAK,QAAQ,GAAG;GACjD,MAAM,OAAO;IACX,MAAM;IACN,QAAQ,GAAG,KAAK,SAAS,KAAK,UAAU,aAAa,EAAE;GACzD;GACA,QAAQ,KAAK,OAAO,KAAK,MAAM,KAAK,MAAM;GAC1C,KAAK,QAAQ,KAAK;IAChB,MAAM;IACN;IACA;IACA;IACA,SAAS;IACT,SAAS;IACT,SAAS;IACT,OAAO;IACP,WAAW;GACb,CAAC;GACD;EACF;EACA,KAAK,QAAQ,KAAK;GAChB,MAAM;GACN;GACA;GACA;GACA,SAAS;GACT,SAAS;GACT,SAAS;GACT,OAAO;GACP,WAAW;EACb,CAAC;EACD;CACF;CACA,MAAM,SAAS,QAAQ,aAAa,KAAK,IAAI;CAC7C,IAAI,WAAW,MAAM;EACnB,MAAM,cAAc,eAAe,MAAM,QAAQ,KAAK,QAAQ;EAC9D,KAAK,QAAQ,KAAK;GAChB,MAAM;GACN;GACA;GACA;GACA,SAAS,YAAY;GACrB,SAAS;GACT,SAAS,YAAY;GACrB,OAAO;GACP,WAAW;EACb,CAAC;EACD;CACF;CACA,MAAM,OAAO,OAAO,QAAQ;CAC5B,IAAI,UAAU,QAAQ,SAAS,WAAW,eAAe,SAAS,WAAW,gBAAgB,SAAS,WAAW,aAAa;EAC5H,KAAK,QAAQ,KAAK;GAChB,MAAM;GACN;GACA;GACA;GACA,SAAS;GACT,SAAS;GACT,SAAS;IACP,MAAM;IACN,QAAQ,GAAG,KAAK,UAAU,QAAQ,IAAI,EAAE;GAC1C;GACA,OAAO;GACP,WAAW;EACb,CAAC;EACD;CACF;CACA,MAAM,aAAa,gBAAgB,MAAM,OAAO,KAAK,QAAQ;CAC7D,IAAI,WAAW,SAAS;EACtB,KAAK,SAAS;EACd,QAAQ,KAAK,OAAO,WAAW,QAAQ,MAAM,WAAW,QAAQ,MAAM;CACxE;CACA,KAAK,MAAM,WAAW,WAAW,UAAU;EACzC,QAAQ,KAAK,UAAU,QAAQ,MAAM,QAAQ,MAAM;CACrD;CACA,IAAI,WAAW,WAAW;EACxB,QAAQ,KAAK,WAAW,WAAW,UAAU,MAAM,WAAW,UAAU,MAAM;CAChF;CACA,IAAI,WAAW,SAAS,MAAM,KAAK,SAAS;CAC5C,MAAM,UAAU,WAAW,SAAS,QAAQ,cAAc,MAAM,MAAM,CAAC,CAAC;CACxE,KAAK,QAAQ,KAAK;EAChB,MAAM;EACN;EACA;EACA;EACA,SAAS,UAAU,WAAW,UAAU;EACxC,SAAS,WAAW;EACpB,SAAS,WAAW;EACpB,OAAO,WAAW,WAAW,SAAS;EACtC,WAAW;CACb,CAAC;AACH;AACA,MAAM,eAAe;AACrB,SAAS,qBAAqB,QAAQ,UAAU;CAC9C,MAAM,SAAS,CAAC;CAChB,MAAM,SAAS,SAAS,gBAAgB;EACtC,MAAM,QAAQ,CAAC;EACf,KAAK,MAAM,YAAY,QAAQ,cAAc,GAAG;GAC9C,IAAI,KAAK,mBAAmB,QAAQ,GAAG;IACrC,OAAO;KACL,OAAO;KACP,OAAO,WAAW,QAAQ,SAAS,QAAQ,CAAC,EAAE;IAChD;GACF;GACA,IAAI,CAAC,KAAK,qBAAqB,QAAQ,GAAG;IACxC,OAAO;KACL,OAAO;KACP,OAAO,aAAa,QAAQ,SAAS,QAAQ,CAAC,EAAE;IAClD;GACF;GACA,MAAM,WAAW,SAAS,YAAY;GACtC,IAAI,KAAK,uBAAuB,QAAQ,GAAG;IACzC,OAAO;KACL,OAAO;KACP,OAAO,sBAAsB,QAAQ,SAAS,QAAQ,CAAC,EAAE;IAC3D;GACF;GACA,MAAM,OAAO,aAAa,QAAQ;GAClC,IAAI,SAAS,MAAM;IACjB,OAAO;KACL,OAAO;KACP,OAAO,kBAAkB,QAAQ,SAAS,QAAQ,CAAC,EAAE;IACvD;GACF;GACA,MAAM,OAAO,GAAG,YAAY,GAAG;GAC/B,MAAM,cAAc,iBAAiB,SAAS,sBAAsB,CAAC;GACrE,IAAI,KAAK,0BAA0B,WAAW,GAAG;IAC/C,MAAM,SAAS,MAAM,aAAa,IAAI;IACtC,IAAI,OAAO,OAAO,OAAO;IACzB,MAAM,QAAQ,OAAO;IACrB;GACF;GACA,MAAM,OAAO,gBAAgB,WAAW;GACxC,IAAI,MAAM;IACR,MAAM,QAAQ,KAAK;IACnB;GACF;GACA,MAAM,QAAQ,GAAG,eAAe,OAAO,SAAS;GAChD,OAAO,KAAK;IAAE;IAAM,MAAM;IAAM,YAAY;GAAY,CAAC;EAC3D;EACA,OAAO;GAAE;GAAO,OAAO;EAAK;CAC9B;CACA,MAAM,SAAS,MAAM,QAAQ,QAAQ;CACrC,OAAO;EAAE,GAAG;EAAQ;CAAO;AAC7B;AACA,SAAS,oBAAoB,OAAO;CAClC,MAAM,6BAA6B,IAAI,IAAI;CAC3C,MAAM,SAAS,WAAW;EACxB,KAAK,MAAM,OAAO,QAAQ;GACxB,MAAM,QAAQ,OAAO;GACrB,IAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,sBAAsB,GAAG,GAAG;IAC7E,MAAM,KAAK;IACX;GACF;GACA,IAAI,CAAC,WAAW,IAAI,GAAG,GAAG;GAC1B,KAAK,MAAM,YAAY,kBAAkB,KAAK,UAAU,GAAG,WAAW,IAAI,QAAQ;EACpF;CACF;CACA,MAAM,KAAK;CACX,OAAO;AACT;AACA,SAAS,WAAW,MAAM,MAAM,MAAM,aAAa,MAAM;CACvD,MAAM,QAAQ,KAAK;CACnB,KAAK,SAAS;CACd,MAAM,QAAQ,gBAAgB;EAC5B,KAAK,QAAQ,KAAK;GAChB,MAAM;GACN;GACA;GACA;GACA,eAAe,CAAC;GAChB,YAAY;GACZ,QAAQ;EACV,CAAC;CACH;CACA,IAAI,gBAAgB,QAAQ,CAAC,KAAK,0BAA0B,WAAW,GAAG;EACxE,QACE,KAAK,OACL,4BACA,IAAI,KAAK,2EACX;EACA,KAAK,IAAI;EACT;CACF;CACA,MAAM,YAAY,qBAAqB,aAAa,IAAI;CACxD,IAAI,UAAU,SAAS,UAAU,UAAU,MAAM;EAC/C,QAAQ,KAAK,OAAO,4BAA4B,UAAU,SAAS,YAAY;EAC/E,KAAK,IAAI;EACT;CACF;CACA,MAAM,aAAa,oBAAoB,UAAU,KAAK;CACtD,MAAM,mBAAmB,CAAC;EAAE,QAAQ,UAAU;EAAO,MAAM;CAAK,CAAC;CACjE,IAAI,sBAAsB;CAC1B,OAAO,iBAAiB,SAAS,GAAG;EAClC,MAAM,UAAU,iBAAiB,IAAI;EACrC,KAAK,MAAM,QAAQ,QAAQ,QAAQ;GACjC,MAAM,QAAQ,QAAQ,OAAO;GAC7B,MAAM,aAAa,YAAY,IAAI;GACnC,IAAI,WAAW,IAAI,UAAU,KAAK,CAAC,sBAAsB,IAAI,GAAG;IAC9D,MAAM,aAAa,qBACjB;KACE,UAAU;KACV,SAAS,KAAK;KACd,MAAM,KAAK;IACb,GACA,KAAK,QACP;IACA,IAAI,WAAW,YAAY,cAAc;KACvC,cAAc,MAAM,YAAY,UAAU;KAC1C,sBAAsB;IACxB;IACA;GACF;GACA,IAAI,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,KAAK,sBAAsB,IAAI,GAAG;IACvG,iBAAiB,KAAK;KACpB,QAAQ;KACR,MAAM,GAAG,QAAQ,KAAK,GAAG;IAC3B,CAAC;GACH;EACF;CACF;CACA,IAAI,qBAAqB;EACvB,KAAK,UAAU;EACf;CACF;CACA,MAAM,aAAa,KAAK,WAAW,WAAW,IAAI,IAAI;CACtD,IAAI,eAAe,KAAK,GAAG;EACzB,QAAQ,KAAK,OAAO,WAAW,MAAM,WAAW,MAAM;EACtD,KAAK,UAAU;EACf;CACF;CACA,MAAM,aAAa,kBAAkB,MAAM,KAAK,QAAQ;CACxD,IAAI,CAAC,WAAW,IAAI;EAClB,QAAQ,KAAK,OAAO,WAAW,MAAM,WAAW,OAAO;EACvD,KAAK,UAAU;EACf;CACF;CACA,MAAM,2BAA2B,IAAI,IAAI;CACzC,IAAI,SAAS;CACb,KAAK,IAAI,SAAS,GAAG,SAAS,UAAU,OAAO,QAAQ,UAAU;EAC/D,MAAM,OAAO,UAAU,OAAO;EAC9B,MAAM,aAAa,gBAAgB,KAAK,MAAM,KAAK,YAAY,KAAK,QAAQ;EAC5E,KAAK,MAAM,WAAW,WAAW,UAAU;GACzC,QAAQ,KAAK,UAAU,QAAQ,MAAM,GAAG,KAAK,KAAK,IAAI,QAAQ,QAAQ;EACxE;EACA,IAAI,WAAW,YAAY,MAAM;GAC/B,MAAM,OAAO,WAAW,WAAW,WAAW;GAC9C,QACE,KAAK,OACL,MAAM,QAAQ,2BACd,GAAG,KAAK,KAAK,IAAI,MAAM,UAAU,qCACnC;GACA,SAAS;GACT;EACF;EACA,SAAS,IAAI,GAAG,eAAe,SAAS,gBAAgB,WAAW,OAAO;CAC5E;CACA,IAAI,QAAQ;EACV,KAAK,UAAU;EACf;CACF;CACA,MAAM,EAAE,WAAW,gBAAgB,WAAW;CAC9C,MAAM,aAAa,2BAA2B,WAAW,UAAU,OAAO,EACxE,UAAU,KAAK,SACjB,CAAC;CACD,IAAI,eAAe,MAAM;EACvB,QACE,KAAK,OACL,4BACA,IAAI,KAAK,gDACX;EACA,KAAK,UAAU;EACf;CACF;CACA,KAAK,MAAM,SAAS,WAAW,QAAQ;EACrC,MAAM,OAAO,MAAM,KAAK,WAAW,SAAS,IAAI,GAAG,OAAO,MAAM,KAAK,MAAM,UAAU,MAAM,MAAM,MAAM;EACvG,QAAQ,KAAK,OAAO,MAAM,MAAM,GAAG,KAAK,IAAI,MAAM,SAAS;EAC3D,SAAS;CACX;CACA,MAAM,gBAAgB,CAAC;CACvB,KAAK,MAAM,gBAAgB,WAAW,eAAe;EACnD,IAAI,CAAC,WAAW,IAAI,aAAa,IAAI,GAAG;GACtC,QACE,KAAK,OACL,6BACA,GAAG,KAAK,GAAG,aAAa,KAAK,0DAC/B;GACA,SAAS;GACT;EACF;EACA,MAAM,YAAY,cAAc,CAAC,GAAG,aAAa,GAAG,aAAa,OAAO,UAAU,MAAM,CAAC,CAAC,IAAI,aAAa,OAAO;EAClH,MAAM,iBAAiB,SAAS,IAAI,aAAa,OAAO,OAAO;EAC/D,cAAc,KAAK;GACjB,MAAM,aAAa;GACnB,QAAQ;IACN;IACA,SAAS,kBAAkB,aAAa,OAAO;GACjD;GACA,SAAS,mBAAmB,KAAK;EACnC,CAAC;EACD,IAAI,CAAC,cAAc,MAAM,aAAa,MAAM,SAAS,GAAG,SAAS;CACnE;CACA,IAAI,QAAQ;EACV,KAAK,UAAU;EACf;CACF;CACA,KAAK,QAAQ,KAAK;EAChB,MAAM;EACN;EACA;EACA;EACA;EACA;EACA,QAAQ;CACV,CAAC;AACH;AACA,SAAS,eAAe,MAAM;CAC5B,OAAO,YAAY,IAAI;AACzB;AACA,MAAM,+BAA+B,IAAI,IAAI;AAC7C,MAAM,wBAAwB,OAAO,OAAO;CAC1C,OAAO;CACP,OAAO;CACP,QAAQ;CACR,OAAO;CACP,iBAAiB;CACjB,gBAAgB;CAChB,OAAO;CACP,UAAU;CACV,MAAM;AACR,CAAC;AACD,SAAS,oBAAoB,WAAW;CACtC,IAAI,WAAW;CACf,KAAK,MAAM,YAAY,WAAW;EAChC,MAAM,YAAY,sBAAsB;EACxC,IAAI,cAAc,KAAK,MAAM,aAAa,QAAQ,YAAY,WAAW;GACvE,WAAW;EACb;CACF;CACA,OAAO;AACT;AACA,SAAS,eAAe,MAAM;CAC5B,MAAM,UAAU,CAAC;CACjB,KAAK,MAAM,UAAU,KAAK,SAAS;EACjC,IAAI,OAAO,SAAS,YAAY;GAC9B,IAAI,CAAC,OAAO,aAAa,OAAO,YAAY,MAAM;GAClD,QAAQ,KAAK;IACX,MAAM,OAAO;IACb,OAAO;KAAE,MAAM,OAAO;KAAS,SAAS,CAAC;IAAE;IAC3C,SAAS,OAAO;IAChB,OAAO,OAAO;IACd,MAAM;IACN,MAAM;IACN,qBAAqB;GACvB,CAAC;GACD;EACF;EACA,IAAI,OAAO,SAAS,YAAY,OAAO,QAAQ;EAC/C,KAAK,MAAM,gBAAgB,OAAO,eAAe;GAC/C,QAAQ,KAAK;IACX,MAAM,aAAa;IACnB,OAAO;KAAE,MAAM;KAAM,SAAS,CAAC,aAAa,MAAM;IAAE;IACpD,SAAS,aAAa;IACtB,OAAO,OAAO;IACd,MAAM;IACN,MAAM;IACN,qBAAqB,oBAAoB,aAAa,OAAO,SAAS;GACxE,CAAC;EACH;CACF;CACA,MAAM,SAAS,QAAQ,QAAQ,UAAU,MAAM,wBAAwB,IAAI,CAAC,CAAC,MAC1E,MAAM,UAAU,KAAK,sBAAsB,MAAM,uBAAuB,KAAK,QAAQ,MAAM,KAC9F;CACA,IAAI,OAAO,SAAS,GAAG,OAAO;CAC9B,IAAI,cAAc;CAClB,OAAO,QAAQ,KACZ,UAAU,MAAM,wBAAwB,OAAO,QAAQ,OAAO,cACjE;AACF;AACA,SAAS,WAAW,SAAS;CAC3B,MAAM,wBAAwB,IAAI,IAAI;CACtC,KAAK,MAAM,SAAS,SAAS;EAC3B,KAAK,MAAM,YAAY,kBAAkB,MAAM,MAAM,UAAU,GAAG;GAChE,MAAM,WAAW,MAAM,IAAI,QAAQ;GACnC,MAAM,QAAQ,WAAW,mBAAmB,SAAS,OAAO,MAAM,KAAK,IAAI,MAAM;GACjF,MAAM,OAAO,QAAQ;GACrB,MAAM,IAAI,UAAU;IAClB;IACA,YAAY,MAAM;IAClB;IACA,QAAQ,WAAW,KAAK,IAAI,SAAS,QAAQ,MAAM,KAAK,IAAI,MAAM;IAClE,MAAM,WAAW,KAAK,IAAI,SAAS,MAAM,MAAM,KAAK,IAAI,MAAM;IAC9D,UAAU,UAAU,WAAW,UAAU,MAAM;GACjD,CAAC;EACH;CACF;CACA,OAAO;AACT;AACA,SAAS,SAAS,MAAM;CACtB,MAAM,OAAO,CAAC;CACd,KAAK,MAAM,UAAU,KAAK,SAAS;EACjC,IAAI,OAAO,SAAS,UAAU;GAC5B,KAAK,KAAK;IAAE,OAAO,OAAO;IAAO,QAAQ,OAAO;IAAM,OAAO;IAAM,SAAS;GAAK,CAAC;GAClF;EACF;EACA,IAAI,OAAO,SAAS,cAAc,CAAC,OAAO,WAAW;GACnD,KAAK,KAAK;IACR,OAAO,OAAO;IACd,QAAQ,OAAO;IACf,OAAO,IAAI,IAAI,kBAAkB,OAAO,MAAM,UAAU,CAAC;IACzD,SAAS;GACX,CAAC;GACD;EACF;EACA,IAAI,OAAO,SAAS,YAAY,OAAO,QAAQ;GAC7C,KAAK,KAAK;IACR,OAAO,OAAO;IACd,QAAQ,OAAO;IACf,OAAO;IACP,SAAS,OAAO;GAClB,CAAC;EACH;CACF;CACA,OAAO;AACT;AACA,SAAS,gBAAgB,MAAM,SAAS,OAAO;CAC7C,IAAI,UAAU;CACd,KAAK,MAAM,QAAQ,MAAM,OAAO,GAAG;EACjC,MAAM,gBAAgB,QAAQ,QAC3B,UAAU,kBAAkB,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,KAAK,QAAQ,CAC7E;EACA,KAAK,MAAM,WAAW,SAAS,IAAI,GAAG;GACpC,IAAI,QAAQ,SAAS,KAAK,UAAU,QAAQ,SAAS,KAAK,MAAM;GAChE,IAAI,QAAQ,YAAY,QAAQ,QAAQ,QAAQ,IAAI,KAAK,QAAQ,GAAG;IAClE,KAAK,MAAM,SAAS,eAAe;KACjC,IAAI,MAAM,QAAQ,MAAM,QAAQ,QAAQ,SAAS,CAAC,MAAM,MAAM;KAC9D,QACE,KAAK,OACL,mCACA,IAAI,QAAQ,QAAQ,MAAM,EAAE,aAAa,KAAK,SAAS,+CAA+C,MAAM,KAAK,KAAK,oCACxH;KACA,MAAM,KAAK,SAAS;KACpB,UAAU;IACZ;GACF;GACA,IAAI,QAAQ,UAAU,QAAQ,QAAQ,MAAM,IAAI,KAAK,QAAQ,GAAG;IAC9D,KAAK,MAAM,SAAS,eAAe;KACjC,IAAI,CAAC,MAAM,QAAQ,MAAM,QAAQ,QAAQ,OAAO;KAChD,MAAM,WAAW,KAAK,QAAQ,MAC3B,WAAW,OAAO,SAAS,cAAc,OAAO,UAAU,MAAM,SAAS,OAAO,SACnF;KACA,IAAI,YAAY,SAAS,SAAS,YAAY;MAC5C,SAAS,UAAU;MACnB,SAAS,UAAU;OACjB,MAAM;OACN,QAAQ,IAAI,QAAQ,QAAQ,MAAM,EAAE,aAAa,KAAK,SAAS;MACjE;MACA,UAAU;MACV;KACF;KACA,QACE,KAAK,OACL,8BACA,IAAI,QAAQ,QAAQ,MAAM,EAAE,aAAa,KAAK,SAAS,4FACzD;IACF;GACF;EACF;CACF;CACA,OAAO;AACT;AACA,SAAS,SAAS,MAAM;CACtB,IAAI,wBAAwB,IAAI,IAAI;CACpC,SAAW;EACT,IAAI,UAAU;EACd,MAAM,8BAA8B,IAAI,IAAI;EAC5C,KAAK,MAAM,UAAU,KAAK,SAAS;GACjC,IAAI,OAAO,SAAS,YAAY,OAAO,QAAQ;GAC/C,KAAK,MAAM,gBAAgB,OAAO,eAAe;IAC/C,YAAY,IAAI,eAAe,aAAa,IAAI,CAAC;GACnD;EACF;EACA,KAAK,MAAM,UAAU,KAAK,SAAS;GACjC,IAAI,OAAO,SAAS,YAAY;GAChC,MAAM,OAAO,eAAe,OAAO,IAAI;GACvC,OAAO,YAAY,OAAO,SAAS,OAAO,YAAY,QAAQ,YAAY,IAAI,IAAI;GAClF,IAAI,CAAC,OAAO,aAAa,OAAO,YAAY,MAAM;GAClD,MAAM,UAAU,OAAO;GACvB,QACE,KAAK,OACL,SAAS,QAAQ,4BACjB,+BAA+B,OAAO,KAAK,KAAK,SAAS,UAAU,mBAAmB,QAAQ,OAAO,IAAI,EAAE,0BAC7G;GACA,OAAO,YAAY;GACnB,KAAK,MAAM,SAAS,KAAK,SAAS;IAChC,IAAI,MAAM,SAAS,YAAY,MAAM,QAAQ;IAC7C,IAAI,MAAM,cAAc,MAAM,QAAQ,eAAe,IAAI,IAAI,MAAM,IAAI,GAAG;KACxE,MAAM,SAAS;KACf,UAAU;IACZ;GACF;EACF;EACA,IAAI,SAAS;EACb,MAAM,UAAU,eAAe,IAAI;EACnC,QAAQ,WAAW,OAAO;EAC1B,IAAI,CAAC,gBAAgB,MAAM,SAAS,KAAK,GAAG;CAC9C;CACA,MAAM,UAAU,CAAC;CACjB,KAAK,MAAM,UAAU,KAAK,SAAS;EACjC,IAAI,OAAO,SAAS,cAAc,OAAO,WAAW;EACpD,IAAI,OAAO,SAAS,YAAY,CAAC,OAAO,QAAQ;EAChD,QAAQ,KAAK;GAAE,OAAO,OAAO;GAAO,MAAM,OAAO;EAAK,CAAC;CACzD;CACA,MAAM,UAAU,WAAW,MAAM,KAAK;CACtC,QAAQ,KAAK,GAAG,QAAQ,MAAM;CAC9B,QAAQ,KAAK,GAAG,KAAK,MAAM;CAC3B,QAAQ,MAAM,MAAM,UAAU,KAAK,QAAQ,MAAM,KAAK;CACtD,OAAO;EAAE;EAAS,UAAU,QAAQ;CAAS;AAC/C;AACA,SAAS,WAAW,MAAM,OAAO;CAC/B,MAAM,0BAA0B,IAAI,IAAI;CACxC,MAAM,SAAS,CAAC;CAChB,MAAM,WAAW,CAAC;CAClB,MAAM,sBAAsB,CAAC;CAC7B,KAAK,MAAM,CAAC,UAAU,SAAS,OAAO;EACpC,IAAI,QAAQ,IAAI,QAAQ,GAAG;EAC3B,MAAM,aAAa,aAAa,KAAK,KAAK;EAC1C,MAAM,YAAY,kBAAkB,KAAK,YAAY,UAAU;EAC/D,MAAM,YAAY,UAAU,SAAS,KAAK,UAAU,OAAO,aAAa;GACtE,MAAM,YAAY,MAAM,IAAI,QAAQ;GACpC,OAAO,cAAc,KAAK,KAAK,UAAU,eAAe,KAAK,cAAc,UAAU,WAAW,KAAK,UAAU,UAAU,YAAY,KAAK,WAAW,aAAa,UAAU,KAAK,MAAM;EACzL,CAAC;EACD,MAAM,OAAO,YAAY,KAAK,aAAa;EAC3C,IAAI,WAAW,KAAK,MAAM,YAAY,WAAW,QAAQ,IAAI,QAAQ;OAChE,QAAQ,IAAI,QAAQ;EACzB,MAAM,QAAQ,KAAK,UAAU,KAAK,WAAW,MAAM,KAAK,UAAU,UAAU;EAC5E,SAAS,KAAK;GAAE;GAAM,OAAO;GAAY,SAAS,KAAK;EAAQ,CAAC;EAChE,MAAM,eAAe,KAAK,SAAS,WAAW,GAAG,KAAK,IAAI,UAAU,GAAG,KAAK,GAAG,KAAK,UAAU,IAAI,MAAM,KAAK;EAC7G,OAAO,KAAK;GACV,OAAO,KAAK;GACZ,MAAM;EACR,CAAC;EACD,oBAAoB,KAAK;GACvB,aAAa,OAAO,SAAS;GAC7B,OAAO,KAAK;GACZ,MAAM,KAAK;EACb,CAAC;CACH;CACA,OACE,MACA,OACA,CAAC,GAAG,MAAM,CAAC,CAAC,MAAM,MAAM,UAAU,KAAK,QAAQ,MAAM,KAAK,CAC5D;CACA,IAAI,KAAK,SAAS,UAAU;EAC1B,MAAM,mCAAmC,IAAI,IAAI;EACjD,KAAK,MAAM,SAAS,qBAAqB;GACvC,MAAM,WAAW,CAAC;GAClB,KAAK,MAAM,CAAC,OAAO,UAAU,KAAK,UAAU;IAC1C,IAAI,QAAQ,MAAM,SAAS,QAAQ,MAAM,QAAQ,iBAAiB,IAAI,KAAK,GAAG;KAC5E;IACF;IACA,SAAS,KAAK,GAAG,KAAK;IACtB,iBAAiB,IAAI,KAAK;GAC5B;GACA,IAAI,SAAS,QAAQ;IACnB,OAAO,MAAM,YAAY,CAAC,OAAO,GAAG,SAAS,KAAK,IAAI,EAAE;EAC9D,OAAO,MAAM,YAAY,CAAC;GACtB;EACF;CACF;CACA,OAAO;EAAE;EAAQ;CAAS;AAC5B;AACA,SAAS,SAAS,MAAM;CACtB,IAAI,SAAS;CACb,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS;EAChD,IAAI,KAAK,WAAW,OAAO,KAAK,QAAQ,OAAO,KAAK;GAClD,UAAU,KAAK;GACf;EACF;EACA,IAAI,QAAQ;EACZ,IAAI,MAAM,QAAQ;EAClB,OAAO,MAAM,KAAK,QAAQ,OAAO;GAC/B,IAAI,KAAK,SAAS,KAAK;QAClB,IAAI,KAAK,SAAS,OAAO,EAAE,UAAU,GAAG;EAC/C;EACA,UAAU;EACV,QAAQ;CACV;CACA,OAAO;AACT;AACA,SAAS,OAAO,MAAM,OAAO,QAAQ;CACnC,MAAM,YAAY,KAAK,SAAS,WAAW,OAAO;CAClD,MAAM,2BAA2B,IAAI,IAAI;CACzC,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,QAAQ,MAAM,KAAK,QAAQ,SAAS;EAC1C,MAAM,OAAO,MAAM,KAAK,MAAM,GAAG,KAAK;EACtC,IAAI,MAAM,MAAM,KAAK,MAAM,QAAQ,UAAU,MAAM;EACnD,IAAI,IAAI,WAAW,GAAG,GAAG,MAAM,IAAI,MAAM,GAAG,CAAC,CAAC;EAC9C,MAAM,OAAO,SAAS,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;EACtC,MAAM,SAAS,WAAW,MAAM,KAAK,QAAQ;EAC7C,IAAI,CAAC,OAAO,IAAI;GACd,QACE,KAAK,OACL,yBACA,IAAI,KAAK,GAAG,KAAK,oBAAoB,OAAO,OAAO,KAAK,UAAU,MAAM,OAAO,CAAC,CAAC,KAAK,IAAI,GAC5F;GACA;EACF;EACA,KAAK,MAAM,YAAY,kBAAkB,MAAM,UAAU,GAAG;GAC1D,MAAM,WAAW,SAAS,IAAI,QAAQ;GACtC,SAAS,IACP,UACA,WAAW,mBAAmB,UAAU,OAAO,KAAK,IAAI,OAAO,KACjE;EACF;CACF;CACA,KAAK,MAAM,CAAC,UAAU,SAAS,OAAO;EACpC,MAAM,SAAS,SAAS,IAAI,QAAQ;EACpC,MAAM,WAAW,SAAS,aAAa,KAAK,KAAK,CAAC;EAClD,IAAI,WAAW,KAAK,KAAK,SAAS,aAAa,MAAM,CAAC,MAAM,UAAU;GACpE,QACE,KAAK,OACL,4BACA,IAAI,SAAS,mBAAmB,SAAS,SAAS,aAAa,MAAM,CAAC,IAAI,YAAY,gBAAgB,SAAS,EACjH;EACF;CACF;AACF;AACA,SAAS,aAAa,MAAM;CAC1B,IAAI,KAAK,aAAa,IAAI,KAAK,KAAK,gBAAgB,IAAI,KAAK,KAAK,iBAAiB,IAAI,GAAG;EACxF,OAAO,KAAK,QAAQ,CAAC,CAAC,QAAQ,gBAAgB,EAAE;CAClD;CACA,OAAO;AACT;AACA,SAAS,iBAAiB,WAAW;CACnC,MAAM,OAAO,UAAU,YAAY;CACnC,OAAO,KAAK,aAAa,IAAI,IAAI,KAAK,QAAQ,IAAI;AACpD;AACA,SAAS,iBAAiB,WAAW;CACnC,MAAM,cAAc,UAAU,eAAe;CAC7C,IAAI,KAAK,gBAAgB,WAAW,GAAG,OAAO,YAAY,gBAAgB;CAC1E,MAAM,aAAa,cAAc,SAAS;CAC1C,IAAI,eAAe,KAAK,gBAAgB,UAAU,KAAK,KAAK,gCAAgC,UAAU,IAAI;EACxG,OAAO,WAAW,gBAAgB;CACpC;CACA,OAAO;AACT;AACA,SAAS,cAAc,WAAW;CAChC,MAAM,cAAc,UAAU,eAAe;CAC7C,IAAI,CAAC,KAAK,gBAAgB,WAAW,GAAG,OAAO;CAC/C,MAAM,aAAa,YAAY,cAAc;CAC7C,OAAO,aAAa,iBAAiB,UAAU,IAAI;AACrD;AACA,SAAS,wBAAwB,WAAW;CAC1C,IAAI,KAAK,qBAAqB,SAAS,GAAG,OAAO;CACjD,IAAI,CAAC,KAAK,eAAe,SAAS,GAAG,OAAO;CAC5C,MAAM,OAAO,iBAAiB,SAAS;CACvC,OAAO,CAAC,CAAC,QAAQ,gBAAgB,IAAI;AACvC;AACA,SAAS,eAAe,SAAS,SAAS;CACxC,MAAM,aAAa,QAAQ,cAAc;CACzC,MAAM,WAAW,CAAC;CAClB,IAAI,WAAW;CACf,KAAK,MAAM,aAAa,YAAY;EAClC,IAAI,wBAAwB,SAAS,GAAG;GACtC,IAAI,CAAC,UAAU;IACb,SAAS,KAAK,GAAG,QAAQ,KAAK,UAAU,MAAM,IAAI,CAAC;IACnD,WAAW;GACb;EACF,OAAO;GACL,SAAS,KAAK,UAAU,QAAQ,CAAC;EACnC;CACF;CACA,MAAM,SAAS,QAAQ,QAAQ;CAC/B,MAAM,QAAQ,QAAQ,SAAS;CAC/B,MAAM,QAAQ,WAAW;CACzB,MAAM,OAAO,WAAW,WAAW,SAAS;CAC5C,MAAM,SAAS,OAAO,MAAM,GAAG,MAAM,SAAS,IAAI,KAAK;CACvD,MAAM,SAAS,OAAO,MAAM,KAAK,OAAO,IAAI,KAAK;CACjD,MAAM,oBAAoB,OAAO,SAAS,IAAI,KAAK,OAAO,MAAM,MAAM,SAAS,IAAI,OAAO,KAAK,OAAO,IAAI,KAAK,CAAC,CAAC,SAAS,IAAI;CAC9H,QAAQ,gBACN,oBAAoB,GAAG,OAAO,QAAQ,WAAW,EAAE,IAAI,SAAS,KAAK,SAAS,KAAK,MAAM,CAAC,CAAC,KAAK,IAAI,IAAI,OAAO,QAAQ,YAAY,IAAI,MAAM,GAAG,SAAS,SAAS,KAAK,GAAG,IAAI,QAChL;AACF;AACA,SAAS,gBAAgB,MAAM,aAAa,OAAO;CACjD,MAAM,SAAS,KAAK,WAAW,QAAQ,IAAI,WAAW;CACtD,IAAI,WAAW,KAAK,GAAG;CACvB,MAAM,OAAO,OAAO,SAAS,OAAO,UAAU,KAAK,OAAO,QAAQ;CAClE,MAAM,OAAO,KAAK,SAAS,WAAW,SAAS,OAAO,oBAAoB,cAAc,KAAK,UAAU,IAAI,MAAM,SAAS,OAAO,cAAc,aAAa,KAAK,UAAU,IAAI;CAC/K,KAAK,SAAS;CACd,KAAK,OAAO,KAAK;EAAE;EAAO;CAAK,CAAC;CAChC,IAAI,OAAO,SAAS,MAAM,QAAQ,KAAK,OAAO,OAAO,KAAK,MAAM,OAAO,KAAK,MAAM;CAClF,QACE,MACA,qGACF;AACF;AACA,SAAS,eAAe,SAAS,UAAU,YAAY,SAAS,MAAM,QAAQ,OAAO;CACnF,MAAM,OAAO,WAAW,OAAO,UAAU,YAAY,SAAS,IAAI;CAClE,MAAM,SAAS,CAAC;CAChB,KAAK,MAAM,aAAa,QAAQ,cAAc,GAAG;EAC/C,IAAI,KAAK,qBAAqB,SAAS,GAAG;GACxC,MAAM,aAAa,iBAAiB,UAAU,cAAc,CAAC;GAC7D,IAAI,KAAK,0BAA0B,UAAU,GAAG;IAC9C,OAAO,KAAK,QAAQ,UAAU,QAAQ,CAAC,CAAC;IACxC,KAAK,MAAM,YAAY,WAAW,cAAc,GAAG;KACjD,IAAI,KAAK,qBAAqB,QAAQ,GAAG;MACvC,MAAM,QAAQ,aAAa,SAAS,YAAY,CAAC;MACjD,IAAI,UAAU,MAAM;OAClB,IAAI,gBAAgB,KAAK,GAAG;QAC1B,mBACE,MACA,OACA,UACA,GAAG,MAAM,IAAI,SAAS,sBAAsB,CAAC,CAAC,QAAQ,EAAE,EAC1D;OACF,OAAO;QACL,KAAK,QAAQ,KAAK;SAChB,MAAM;SACN,OAAO,KAAK;SACZ,MAAM,GAAG,MAAM,IAAI,SAAS,sBAAsB,CAAC,CAAC,QAAQ,EAAE;QAChE,CAAC;OACH;OACA;MACF;KACF;KACA,WACE,MACA,UACA,KAAK,mBAAmB,QAAQ,IAAI,IAAI,SAAS,QAAQ,EAAE,KAAK,SAAS,SAAS,QAAQ,EAAE,IAC9F;IACF;IACA;GACF;GACA,OAAO,KAAK,QAAQ,UAAU,QAAQ,CAAC,CAAC;GACxC,WAAW,MAAM,YAAY,UAAU,QAAQ,CAAC;GAChD;EACF;EACA,MAAM,OAAO,iBAAiB,SAAS;EACvC,IAAI,CAAC,MAAM;EACX,MAAM,OAAO,QAAQ,UAAU,QAAQ,CAAC;EACxC,IAAI,SAAS,SAAS;GACpB,OAAO,KAAK,IAAI;GAChB,gBAAgB,MAAM,WAAW,KAAK,KAAK;GAC3C,KAAK,QAAQ,KAAK;IAAE,MAAM;IAAe,OAAO,KAAK;IAAS;GAAK,CAAC;GACpE;EACF;EACA,IAAI,sBAAsB,IAAI,GAAG;GAC/B,OAAO,KAAK,IAAI;GAChB,WAAW,MAAM,MAAM,MAAM,cAAc,SAAS,GAAG,SAAS;GAChE;EACF;EACA,IAAI,kBAAkB,IAAI,IAAI,GAAG;GAC/B,IAAI,iBAAiB,MAAM,MAAM,WAAW,IAAI,GAAG,OAAO,KAAK,IAAI;GACnE;EACF;EACA,IAAI,CAAC,WAAW,IAAI,IAAI,GAAG;EAC3B,OAAO,KAAK,IAAI;EAChB,MAAM,UAAU,iBAAiB,SAAS;EAC1C,SACE,MACA,MACA,MACA,YAAY,OAAO,cAAc,SAAS,IAAI,MAC9C,OACF;CACF;CACA,IAAI,CAAC,KAAK,QAAQ,OAAO;CACzB,MAAM,EAAE,SAAS,aAAa,SAAS,IAAI;CAC3C,MAAM,aAAa,QAAQ,cAAc;CACzC,MAAM,SAAS;EACb,MAAM;EACN,OAAO,IAAI,QAAQ,eAAe,CAAC,CAAC,QAAQ,EAAE;EAC9C,MAAM,WAAW,sBAAsB,QAAQ,SAAS,CAAC,CAAC,CAAC;EAC3D,QAAQ,OAAO,KAAK,GAAG;EACvB,OAAO,QAAQ,KAAK,UAAU,MAAM,IAAI,CAAC,CAAC,KAAK,GAAG,KAAK;EACvD,UAAU,CAAC,GAAG,UAAU,GAAG,KAAK,SAAS;EACzC,aAAa,KAAK;EAClB,mBAAmB,kBAAkB,KAAK,WAAW;EACrD,UAAU,KAAK;EACf,OAAO,KAAK;EACZ,WAAW,KAAK;EAChB,SAAS,KAAK;EACd,OAAO,KAAK;EACZ,YAAY,WAAW,IAAI;CAC7B;CACA,IAAI,SAAS,UAAU,MAAM,MAAM,KAAK,CAAC,KAAK,MAAM,MACjD,SAAS,KAAK,SAAS,8BAA8B,KAAK,SAAS,uBACtE,GAAG;EACD,eAAe,SAAS,OAAO;CACjC;CACA,OAAO;AACT;AACA,SAAS,mBAAmB,MAAM,MAAM,UAAU,cAAc;CAC9D,MAAM,WAAW,gBAAgB,QAAQ;CACzC,IAAI,SAAS,QAAQ,KAAK,SAAS,IAAI,KAAK,OAAO,QAAQ;CAC3D,MAAM,OAAO,gBAAgB,sBAAsB,QAAQ;CAC3D,MAAM,cAAc,iBAAiB,SAAS,sBAAsB,CAAC;CACrE,IAAI,SAAS,SAAS;EACpB,gBAAgB,MAAM,UAAU,KAAK,KAAK;EAC1C,KAAK,QAAQ,KAAK;GAAE,MAAM;GAAe,OAAO,KAAK;GAAS;EAAK,CAAC;EACpE;CACF;CACA,IAAI,sBAAsB,IAAI,GAAG;EAC/B,WAAW,MAAM,MAAM,MAAM,aAAa,QAAQ;EAClD;CACF;CACA,IAAI,kBAAkB,IAAI,IAAI,GAAG;EAC/B,iBAAiB,MAAM,MAAM,UAAU,IAAI;EAC3C;CACF;CACA,IAAI,CAAC,WAAW,IAAI,IAAI,GAAG;CAC3B,MAAM,UAAU,KAAK,gBAAgB,WAAW,KAAK,KAAK,gCAAgC,WAAW,IAAI,YAAY,gBAAgB,IAAI;CACzI,SAAS,MAAM,MAAM,MAAM,YAAY,OAAO,cAAc,MAAM,OAAO;AAC3E;AACA,SAAS,iBAAiB,MAAM,MAAM,MAAM,MAAM;CAChD,MAAM,QAAQ,KAAK;CACnB,MAAM,cAAc,KAAK,eAAe;CACxC,MAAM,QAAQ,gBAAgB,KAAK,KAAK,KAAK,gBAAgB,WAAW,IAAI,YAAY,cAAc,IAAI;CAC1G,MAAM,WAAW,UAAU,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,eAAe,CAAC,CAAC,CAAC,QACzE,eAAe,KAAK,gBAAgB,SAAS,KAAK,KAAK,gCAAgC,SAAS,MAAM,UAAU,gBAAgB,CAAC,CAAC,WAAW,GAAG,CACnJ;CACA,IAAI,UAAU,KAAK,KAAK,SAAS,WAAW,GAAG;EAC7C,KAAK,QAAQ,KAAK;GAAE,MAAM;GAAe;GAAO;EAAK,CAAC;EACtD,OAAO;CACT;CACA,MAAM,SAAS,MAAM,QAAQ;CAC7B,MAAM,QAAQ,MAAM,SAAS;CAC7B,IAAI,YAAY;CAChB,IAAI,SAAS;CACb,KAAK,MAAM,WAAW,UAAU;EAC9B,IAAI,cAAc;EAClB,IAAI,QAAQ,gBAAgB,MAAM,SAAS;GACzC,MAAM,OAAO,gBAAgB,QAAQ,gBAAgB,GAAG,KAAK,QAAQ;GACrE,IAAI,KAAK,SAAS,MAAM;IACtB,KAAK,SAAS;IACd,QACE,KAAK,OACL,KAAK,OAAO,QAAQ,4BACpB,GAAG,KAAK,IAAI,KAAK,OAAO,WAAW,GAAG,QAAQ,QAAQ,EAAE,wBAC1D;IACA,KAAK,QAAQ,KAAK;KAAE,MAAM;KAAe;KAAO;IAAK,CAAC;IACtD,OAAO;GACT;GACA,MAAM,QAAQ,QAAQ,QAAQ,CAAC,CAAC;GAChC,cAAc,GAAG,QAAQ,KAAK,OAAO;EACvC;EACA,aAAa,OAAO,MAAM,SAAS,OAAO,QAAQ,SAAS,IAAI,KAAK;EACpE,aAAa;EACb,SAAS,QAAQ,OAAO;CAC1B;CACA,aAAa,OAAO,MAAM,SAAS,KAAK;CACxC,KAAK,SAAS;CACd,MAAM,SAAS,KAAK,eAAe,IAAI,IAAI,KAAK,gBAAgB,WAAW,IAAI,cAAc,SAAS,OAAO,GAAG,KAAK,GAAG,cAAc,GAAG,KAAK,IAAI,UAAU,KAAK,KAAK,SAAS,QAAQ,GAAG,KAAK,IAAI,UAAU,KAAK,sBAAsB,MAAM,GAAG,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,IAAI,WAAW;CAC7R,KAAK,QAAQ,KAAK;EAAE,MAAM;EAAe;EAAO,MAAM;CAAO,CAAC;CAC9D,KAAK,UAAU,KAAK;EAClB;EACA,OAAO;EACP,SAAS,SAAS,WAAW,KAAK,SAAS,OAAO;CACpD,CAAC;CACD,OAAO;AACT;AACA,SAAS,mBAAmB,QAAQ,MAAM,OAAO,UAAU,YAAY,SAAS,MAAM,QAAQ,OAAO;CACnG,MAAM,OAAO,WAAW,MAAM,UAAU,YAAY,SAAS,IAAI;CACjE,MAAM,SAAS,CAAC;CAChB,KAAK,MAAM,YAAY,OAAO,cAAc,GAAG;EAC7C,IAAI,KAAK,mBAAmB,QAAQ,GAAG;GACrC,MAAM,aAAa,iBAAiB,SAAS,cAAc,CAAC;GAC5D,OAAO,KAAK,QAAQ,SAAS,QAAQ,CAAC,CAAC;GACvC,IAAI,KAAK,0BAA0B,UAAU,GAAG;IAC9C,KAAK,MAAM,UAAU,WAAW,cAAc,GAAG;KAC/C,IAAI,KAAK,qBAAqB,MAAM,GAAG;MACrC,MAAM,QAAQ,aAAa,OAAO,YAAY,CAAC;MAC/C,IAAI,UAAU,MAAM;OAClB,IAAI,gBAAgB,KAAK,GAAG;QAC1B,mBAAmB,MAAM,OAAO,MAAM;OACxC,OAAO;QACL,KAAK,QAAQ,KAAK;SAChB,MAAM;SACN,OAAO,KAAK;SACZ,MAAM,QAAQ,OAAO,QAAQ,CAAC;QAChC,CAAC;OACH;OACA;MACF;KACF;KACA,WAAW,MAAM,QAAQ,QAAQ,OAAO,QAAQ,CAAC,CAAC;IACpD;IACA;GACF;GACA,WAAW,MAAM,YAAY,QAAQ,SAAS,QAAQ,CAAC,CAAC;GACxD;EACF;EACA,IAAI,CAAC,KAAK,qBAAqB,QAAQ,GAAG;EAC1C,MAAM,WAAW,SAAS,YAAY;EACtC,IAAI,KAAK,uBAAuB,QAAQ,GAAG;GACzC,QACE,KAAK,OACL,qBACA,IAAI,QAAQ,SAAS,QAAQ,CAAC,EAAE,oCAClC;GACA;EACF;EACA,MAAM,OAAO,aAAa,QAAQ;EAClC,IAAI,SAAS,MAAM;EACnB,IAAI,CAAC,gBAAgB,IAAI,GAAG;EAC5B,OAAO,KAAK,QAAQ,SAAS,QAAQ,CAAC,CAAC;EACvC,mBAAmB,MAAM,MAAM,QAAQ;CACzC;CACA,IAAI,CAAC,KAAK,QAAQ,OAAO;CACzB,MAAM,EAAE,SAAS,aAAa,SAAS,IAAI;CAC3C,MAAM,aAAa,OAAO,cAAc;CACxC,MAAM,SAAS;EACb;EACA;EACA,MAAM,WAAW,sBAAsB,OAAO,SAAS,CAAC,CAAC,CAAC;EAC1D,QAAQ,OAAO,KAAK,IAAI;EACxB,OAAO,QAAQ,KAAK,UAAU,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK;EACxD,UAAU,CAAC,GAAG,UAAU,GAAG,KAAK,SAAS;EACzC,aAAa,KAAK;EAClB,mBAAmB,kBAAkB,KAAK,WAAW;EACrD,UAAU,KAAK;EACf,OAAO,KAAK;EACZ,WAAW,KAAK;EAChB,SAAS,KAAK;EACd,OAAO,KAAK;EACZ,YAAY,WAAW,IAAI;CAC7B;CACA,IAAI,SAAS,UAAU,MAAM,MAAM,KAAK,CAAC,KAAK,MAAM,MACjD,SAAS,KAAK,SAAS,8BAA8B,KAAK,SAAS,uBACtE,GAAG;EACD,mBAAmB,QAAQ,OAAO;CACpC;CACA,OAAO;AACT;AACA,SAAS,0BAA0B,UAAU;CAC3C,IAAI,KAAK,mBAAmB,QAAQ,GAAG,OAAO;CAC9C,IAAI,CAAC,KAAK,qBAAqB,QAAQ,GAAG,OAAO;CACjD,MAAM,WAAW,SAAS,YAAY;CACtC,IAAI,KAAK,uBAAuB,QAAQ,GAAG,OAAO;CAClD,MAAM,OAAO,aAAa,QAAQ;CAClC,OAAO,CAAC,CAAC,QAAQ,gBAAgB,IAAI;AACvC;AACA,SAAS,gBAAgB,MAAM;CAC7B,MAAM,2BAA2B,IAAI,IAAI;CACzC,KAAK,MAAM,WAAW,CAAC,MAAM,GAAG,KAAK,eAAe,CAAC,GAAG;EACtD,KAAK,MAAM,SAAS,CAClB,GAAG,QAAQ,wBAAwB,GACnC,GAAG,QAAQ,yBAAyB,CACtC,GAAG;GACD,SAAS,IAAI,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC;EAC9C;CACF;CACA,OAAO,CAAC,GAAG,SAAS,QAAQ,CAAC,CAAC,CAAC,MAAM,MAAM,UAAU,KAAK,KAAK,MAAM,EAAE,CAAC,CAAC,KAAK,UAAU,MAAM,EAAE;AAClG;AACA,SAAS,sBAAsB,MAAM,OAAO,KAAK,QAAQ,GAAG;CAC1D,MAAM,2BAA2B,IAAI,IAAI;CACzC,KAAK,MAAM,SAAS,CAClB,GAAG,KAAK,wBAAwB,GAChC,GAAG,KAAK,yBAAyB,CACnC,GAAG;EACD,SAAS,IAAI,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC;CAC9C;CACA,MAAM,SAAS,CAAC,GAAG,SAAS,QAAQ,CAAC,CAAC,CAAC,MAAM,MAAM,UAAU,KAAK,KAAK,MAAM,EAAE,CAAC,CAAC,KAAK,UAAU,MAAM,EAAE;CACxG,OAAO,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC,KAAK,MAAM;AACtC;AACA,SAAS,mBAAmB,QAAQ,SAAS;CAC3C,MAAM,WAAW,CAAC;CAClB,IAAI,WAAW;CACf,KAAK,MAAM,YAAY,OAAO,cAAc,GAAG;EAC7C,IAAI,0BAA0B,QAAQ,GAAG;GACvC,IAAI,CAAC,UAAU;IACb,SAAS,KAAK,GAAG,QAAQ,KAAK,UAAU,MAAM,IAAI,CAAC;IACnD,WAAW;GACb;EACF,OAAO;GACL,SAAS,KAAK,sBAAsB,QAAQ,CAAC;EAC/C;CACF;CACA,IAAI,SAAS,WAAW,GAAG;EACzB,OAAO,gBAAgB,IAAI;EAC3B;CACF;CACA,OAAO,gBAAgB;EACvB,SAAS,KAAK,SAAS,KAAK,MAAM,CAAC,CAAC,KAAK,KAAK,EAAE;EAChD;AACF"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { Node, SyntaxKind } from "ts-morph";
|
|
2
|
+
import { flatStringValue } from "./grammar.mjs";
|
|
3
|
+
|
|
4
|
+
function unwrapExpression(expression) {
|
|
5
|
+
let current = expression;
|
|
6
|
+
while (Node.isParenthesizedExpression(current) || Node.isAsExpression(current) || Node.isTypeAssertion(current) || Node.isNonNullExpression(current)) {
|
|
7
|
+
current = current.getExpression();
|
|
8
|
+
}
|
|
9
|
+
return current;
|
|
10
|
+
}
|
|
11
|
+
function numericValue(expression) {
|
|
12
|
+
const current = unwrapExpression(expression);
|
|
13
|
+
if (Node.isNumericLiteral(current)) return Number(current.getText());
|
|
14
|
+
if (Node.isPrefixUnaryExpression(current)) {
|
|
15
|
+
const operand = current.getOperand();
|
|
16
|
+
if (!Node.isNumericLiteral(operand)) return null;
|
|
17
|
+
const value = Number(operand.getText());
|
|
18
|
+
const operator = current.getOperatorToken();
|
|
19
|
+
if (operator === SyntaxKind.MinusToken) return -value;
|
|
20
|
+
if (operator === SyntaxKind.PlusToken) return value;
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
function staticLeafValue(expression) {
|
|
25
|
+
const current = unwrapExpression(expression);
|
|
26
|
+
if (Node.isStringLiteral(current) || Node.isNoSubstitutionTemplateLiteral(current)) {
|
|
27
|
+
return {
|
|
28
|
+
found: true,
|
|
29
|
+
value: current.getLiteralValue()
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const number = numericValue(current);
|
|
33
|
+
if (number !== null) return {
|
|
34
|
+
found: true,
|
|
35
|
+
value: number
|
|
36
|
+
};
|
|
37
|
+
if (current.getKind() === SyntaxKind.TrueKeyword) return {
|
|
38
|
+
found: true,
|
|
39
|
+
value: true
|
|
40
|
+
};
|
|
41
|
+
if (current.getKind() === SyntaxKind.FalseKeyword) return {
|
|
42
|
+
found: true,
|
|
43
|
+
value: false
|
|
44
|
+
};
|
|
45
|
+
if (current.getKind() === SyntaxKind.NullKeyword) return {
|
|
46
|
+
found: true,
|
|
47
|
+
value: null
|
|
48
|
+
};
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
function literalText(value, registry) {
|
|
52
|
+
if (!value.includes("$")) return {
|
|
53
|
+
text: value,
|
|
54
|
+
error: null
|
|
55
|
+
};
|
|
56
|
+
const flat = flatStringValue(value, registry);
|
|
57
|
+
if (flat.text === null) {
|
|
58
|
+
return {
|
|
59
|
+
text: value,
|
|
60
|
+
error: {
|
|
61
|
+
code: flat.error?.code ?? "unsupported-legacy-value",
|
|
62
|
+
message: flat.error?.message ?? `"${value}" has no flat spelling`
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
text: flat.text,
|
|
68
|
+
error: null
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function templateTree(template, registry) {
|
|
72
|
+
const head = literalText(template.getHead().getLiteralText(), registry);
|
|
73
|
+
let error = head.error;
|
|
74
|
+
let text = `\`${head.text}`;
|
|
75
|
+
const strings = [template.getHead().getLiteralText()];
|
|
76
|
+
for (const span of template.getTemplateSpans()) {
|
|
77
|
+
const literal = span.getLiteral().getLiteralText();
|
|
78
|
+
const tail = literalText(literal, registry);
|
|
79
|
+
error ??= tail.error;
|
|
80
|
+
strings.push(literal);
|
|
81
|
+
text += `\${${span.getExpression().getText().trim()}}${tail.text}`;
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
kind: "string",
|
|
85
|
+
text: `${text}\``,
|
|
86
|
+
strings,
|
|
87
|
+
error
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function literalTree(expression, registry) {
|
|
91
|
+
const current = unwrapExpression(expression);
|
|
92
|
+
if (Node.isStringLiteral(current) || Node.isNoSubstitutionTemplateLiteral(current)) {
|
|
93
|
+
const value = current.getLiteralValue();
|
|
94
|
+
const literal = literalText(value, registry);
|
|
95
|
+
return {
|
|
96
|
+
kind: "string",
|
|
97
|
+
text: JSON.stringify(literal.text),
|
|
98
|
+
strings: [value],
|
|
99
|
+
error: literal.error
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
if (Node.isTemplateExpression(current)) return templateTree(current, registry);
|
|
103
|
+
const number = numericValue(current);
|
|
104
|
+
if (number !== null) {
|
|
105
|
+
return {
|
|
106
|
+
kind: "number",
|
|
107
|
+
text: String(number),
|
|
108
|
+
strings: [],
|
|
109
|
+
error: null
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
if (current.getKind() === SyntaxKind.UndefinedKeyword || current.getKind() === SyntaxKind.NullKeyword || Node.isIdentifier(current) && current.getText() === "undefined") {
|
|
113
|
+
return {
|
|
114
|
+
kind: "nullish",
|
|
115
|
+
text: current.getText(),
|
|
116
|
+
strings: [],
|
|
117
|
+
error: null
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
if (Node.isConditionalExpression(current)) {
|
|
121
|
+
const whenTrue = literalTree(current.getWhenTrue(), registry);
|
|
122
|
+
const whenFalse = literalTree(current.getWhenFalse(), registry);
|
|
123
|
+
if (!whenTrue || !whenFalse) return null;
|
|
124
|
+
if (whenTrue.kind !== whenFalse.kind && whenTrue.kind !== "nullish" && whenFalse.kind !== "nullish") {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
kind: whenTrue.kind === "nullish" ? whenFalse.kind : whenTrue.kind,
|
|
129
|
+
text: `${current.getCondition().getText().trim()} ? ${whenTrue.text} : ${whenFalse.text}`,
|
|
130
|
+
strings: [...whenTrue.strings, ...whenFalse.strings],
|
|
131
|
+
error: whenTrue.error ?? whenFalse.error
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
function runtimeType(expression) {
|
|
137
|
+
const type = unwrapExpression(expression).getType();
|
|
138
|
+
const parts = type.isUnion() ? type.getUnionTypes() : [type];
|
|
139
|
+
const literals = [];
|
|
140
|
+
let numbers = 0;
|
|
141
|
+
let strings = 0;
|
|
142
|
+
let known = 0;
|
|
143
|
+
for (const part of parts) {
|
|
144
|
+
if (part.isUndefined() || part.isNull()) continue;
|
|
145
|
+
known++;
|
|
146
|
+
if (part.isNumber() || part.isNumberLiteral()) {
|
|
147
|
+
numbers++;
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
if (part.isStringLiteral()) {
|
|
151
|
+
strings++;
|
|
152
|
+
literals.push(String(part.getLiteralValue()));
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
if (part.isString()) {
|
|
156
|
+
strings++;
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
return {
|
|
160
|
+
kind: "unknown",
|
|
161
|
+
literals: null
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
if (!known) return {
|
|
165
|
+
kind: "unknown",
|
|
166
|
+
literals: null
|
|
167
|
+
};
|
|
168
|
+
if (numbers === known) return {
|
|
169
|
+
kind: "number",
|
|
170
|
+
literals: null
|
|
171
|
+
};
|
|
172
|
+
if (strings === known) {
|
|
173
|
+
return {
|
|
174
|
+
kind: "string",
|
|
175
|
+
literals: literals.length === known ? literals : null
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
kind: "unknown",
|
|
180
|
+
literals: null
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
function compact(text) {
|
|
184
|
+
return text.replace(/\s+/g, " ").trim();
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export { compact, literalTree, numericValue, runtimeType, staticLeafValue, unwrapExpression };
|
|
188
|
+
//# sourceMappingURL=expressions.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expressions.js","names":[],"sources":["expressions.js"],"sourcesContent":["import { Node, SyntaxKind } from \"ts-morph\";\nimport { flatStringValue } from \"./grammar\";\nfunction unwrapExpression(expression) {\n let current = expression;\n while (Node.isParenthesizedExpression(current) || Node.isAsExpression(current) || Node.isTypeAssertion(current) || Node.isNonNullExpression(current)) {\n current = current.getExpression();\n }\n return current;\n}\nfunction numericValue(expression) {\n const current = unwrapExpression(expression);\n if (Node.isNumericLiteral(current)) return Number(current.getText());\n if (Node.isPrefixUnaryExpression(current)) {\n const operand = current.getOperand();\n if (!Node.isNumericLiteral(operand)) return null;\n const value = Number(operand.getText());\n const operator = current.getOperatorToken();\n if (operator === SyntaxKind.MinusToken) return -value;\n if (operator === SyntaxKind.PlusToken) return value;\n }\n return null;\n}\nfunction staticLeafValue(expression) {\n const current = unwrapExpression(expression);\n if (Node.isStringLiteral(current) || Node.isNoSubstitutionTemplateLiteral(current)) {\n return { found: true, value: current.getLiteralValue() };\n }\n const number = numericValue(current);\n if (number !== null) return { found: true, value: number };\n if (current.getKind() === SyntaxKind.TrueKeyword) return { found: true, value: true };\n if (current.getKind() === SyntaxKind.FalseKeyword) return { found: true, value: false };\n if (current.getKind() === SyntaxKind.NullKeyword) return { found: true, value: null };\n return null;\n}\nfunction literalText(value, registry) {\n if (!value.includes(\"$\")) return { text: value, error: null };\n const flat = flatStringValue(value, registry);\n if (flat.text === null) {\n return {\n text: value,\n error: {\n code: flat.error?.code ?? \"unsupported-legacy-value\",\n message: flat.error?.message ?? `\"${value}\" has no flat spelling`\n }\n };\n }\n return { text: flat.text, error: null };\n}\nfunction templateTree(template, registry) {\n const head = literalText(template.getHead().getLiteralText(), registry);\n let error = head.error;\n let text = `\\`${head.text}`;\n const strings = [template.getHead().getLiteralText()];\n for (const span of template.getTemplateSpans()) {\n const literal = span.getLiteral().getLiteralText();\n const tail = literalText(literal, registry);\n error ??= tail.error;\n strings.push(literal);\n text += `\\${${span.getExpression().getText().trim()}}${tail.text}`;\n }\n return { kind: \"string\", text: `${text}\\``, strings, error };\n}\nfunction literalTree(expression, registry) {\n const current = unwrapExpression(expression);\n if (Node.isStringLiteral(current) || Node.isNoSubstitutionTemplateLiteral(current)) {\n const value = current.getLiteralValue();\n const literal = literalText(value, registry);\n return {\n kind: \"string\",\n text: JSON.stringify(literal.text),\n strings: [value],\n error: literal.error\n };\n }\n if (Node.isTemplateExpression(current)) return templateTree(current, registry);\n const number = numericValue(current);\n if (number !== null) {\n return { kind: \"number\", text: String(number), strings: [], error: null };\n }\n if (current.getKind() === SyntaxKind.UndefinedKeyword || current.getKind() === SyntaxKind.NullKeyword || Node.isIdentifier(current) && current.getText() === \"undefined\") {\n return { kind: \"nullish\", text: current.getText(), strings: [], error: null };\n }\n if (Node.isConditionalExpression(current)) {\n const whenTrue = literalTree(current.getWhenTrue(), registry);\n const whenFalse = literalTree(current.getWhenFalse(), registry);\n if (!whenTrue || !whenFalse) return null;\n if (whenTrue.kind !== whenFalse.kind && whenTrue.kind !== \"nullish\" && whenFalse.kind !== \"nullish\") {\n return null;\n }\n return {\n kind: whenTrue.kind === \"nullish\" ? whenFalse.kind : whenTrue.kind,\n text: `${current.getCondition().getText().trim()} ? ${whenTrue.text} : ${whenFalse.text}`,\n strings: [...whenTrue.strings, ...whenFalse.strings],\n error: whenTrue.error ?? whenFalse.error\n };\n }\n return null;\n}\nfunction runtimeType(expression) {\n const type = unwrapExpression(expression).getType();\n const parts = type.isUnion() ? type.getUnionTypes() : [type];\n const literals = [];\n let numbers = 0;\n let strings = 0;\n let known = 0;\n for (const part of parts) {\n if (part.isUndefined() || part.isNull()) continue;\n known++;\n if (part.isNumber() || part.isNumberLiteral()) {\n numbers++;\n continue;\n }\n if (part.isStringLiteral()) {\n strings++;\n literals.push(String(part.getLiteralValue()));\n continue;\n }\n if (part.isString()) {\n strings++;\n continue;\n }\n return { kind: \"unknown\", literals: null };\n }\n if (!known) return { kind: \"unknown\", literals: null };\n if (numbers === known) return { kind: \"number\", literals: null };\n if (strings === known) {\n return { kind: \"string\", literals: literals.length === known ? literals : null };\n }\n return { kind: \"unknown\", literals: null };\n}\nfunction compact(text) {\n return text.replace(/\\s+/g, \" \").trim();\n}\nexport {\n compact,\n literalTree,\n numericValue,\n runtimeType,\n staticLeafValue,\n unwrapExpression\n};\n//# sourceMappingURL=expressions.js.map\n"],"mappings":"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"}
|