@tamagui/compiler-core 3.0.0-beta.831.1 → 3.0.0-beta.889.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/dist/cjs/evaluate.cjs +57 -4
- package/dist/cjs/graph.cjs +10 -0
- package/dist/cjs/materialize.cjs +2 -0
- package/dist/cjs/normalize.cjs +14 -5
- package/dist/cjs/planCache.cjs +41 -2
- package/dist/cjs/session.cjs +21 -12
- package/dist/esm/evaluate.mjs +57 -4
- package/dist/esm/evaluate.mjs.map +1 -1
- package/dist/esm/graph.mjs +10 -0
- package/dist/esm/graph.mjs.map +1 -1
- package/dist/esm/materialize.mjs +2 -0
- package/dist/esm/materialize.mjs.map +1 -1
- package/dist/esm/normalize.mjs +14 -5
- package/dist/esm/normalize.mjs.map +1 -1
- package/dist/esm/planCache.mjs +42 -4
- package/dist/esm/planCache.mjs.map +1 -1
- package/dist/esm/session.mjs +22 -13
- package/dist/esm/session.mjs.map +1 -1
- package/package.json +2 -2
- package/src/evaluate.ts +107 -4
- package/src/graph.ts +11 -0
- package/src/ir.ts +3 -1
- package/src/materialize.ts +5 -0
- package/src/normalize.ts +16 -8
- package/src/planCache.ts +38 -3
- package/src/session.ts +29 -9
- package/types/evaluate.d.ts.map +1 -1
- package/types/graph.d.ts +2 -0
- package/types/graph.d.ts.map +1 -1
- package/types/ir.d.ts +3 -1
- package/types/ir.d.ts.map +1 -1
- package/types/materialize.d.ts +1 -0
- package/types/materialize.d.ts.map +1 -1
- package/types/normalize.d.ts.map +1 -1
- package/types/planCache.d.ts +11 -1
- package/types/planCache.d.ts.map +1 -1
- package/types/session.d.ts +8 -0
- package/types/session.d.ts.map +1 -1
package/dist/esm/graph.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","names":["#installHostRecord","#files","#resolutions","#candidate","#modules","#dependencies","#dependents","#elementCache","#removeOutgoingEdges","#removeResolutions"],"sources":["esm/graph.js"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { expressionReference, resolutionKey, resolvedModuleId } from \"./contracts\";\nimport { linkedBailout, localBailout } from \"./diagnostics\";\nimport {\n evaluateBinding,\n evaluateBranches,\n evaluateDynamicExpression,\n evaluateExpression\n} from \"./evaluate\";\nimport { nodeAtSpan, normalizeElements } from \"./normalize\";\nfunction compareIds(left, right) {\n return compareCodeUnits(left, right);\n}\nfunction compareCodeUnits(left, right) {\n return left < right ? -1 : left > right ? 1 : 0;\n}\nfunction stableImports(imports) {\n return [...imports].sort((left, right) => {\n const bySpecifier = compareCodeUnits(left.specifier, right.specifier);\n return bySpecifier || compareCodeUnits(left.resolvedId, right.resolvedId);\n });\n}\nfunction moduleContentHash(input) {\n const hash = createHash(\"sha256\");\n hash.update(input.source);\n hash.update(\"\\0\");\n for (const dependency of stableImports(input.imports)) {\n hash.update(dependency.specifier);\n hash.update(\"\\0\");\n hash.update(dependency.resolvedId);\n hash.update(\"\\0\");\n hash.update(dependency.external ? \"external\" : \"internal\");\n hash.update(\"\\0\");\n }\n return hash.digest(\"hex\");\n}\nclass ProjectGraph {\n #files = /* @__PURE__ */ new Map();\n #resolutions = /* @__PURE__ */ new Map();\n #modules = /* @__PURE__ */ new Map();\n #dependencies = /* @__PURE__ */ new Map();\n #dependents = /* @__PURE__ */ new Map();\n #elementCache = /* @__PURE__ */ new Map();\n #candidate;\n constructor(factory, project) {\n for (const input of project.modules) this.#installHostRecord(input);\n const candidateProject = {\n files: this.#files,\n resolutions: this.#resolutions\n };\n this.#candidate = factory.create(candidateProject);\n this.#candidate.link();\n }\n moduleIds() {\n return [...this.#modules.keys()].sort(compareIds);\n }\n contentHash(id) {\n return this.#modules.get(id)?.hash ?? null;\n }\n sourceOf(id) {\n const source = this.#modules.get(id)?.input.source;\n if (source === void 0) throw new Error(`Unknown host module ${id}`);\n return source;\n }\n dependenciesOf(id) {\n return [...this.#dependencies.get(id) ?? []].sort(compareIds);\n }\n dependentsOf(id) {\n return [...this.#dependents.get(id) ?? []].sort(compareIds);\n }\n affectedBy(id) {\n const affected = /* @__PURE__ */ new Set([id]);\n const queue = [id];\n while (queue.length) {\n const current = queue.shift();\n for (const dependent of this.#dependents.get(current) ?? []) {\n if (affected.has(dependent)) continue;\n affected.add(dependent);\n queue.push(dependent);\n }\n }\n return [...affected].sort(compareIds);\n }\n parseCount(id) {\n return this.#candidate.parseCount(id);\n }\n resolveBinding(id, localName) {\n const definition = this.#candidate.definitionOf(id, localName);\n if (!definition) return null;\n return {\n id: definition.id,\n name: definition.name,\n span: {\n id: definition.id,\n start: definition.start,\n end: definition.end\n },\n initializer: definition.initializer ? expressionReference(definition.id, definition.initializer) : null,\n constant: definition.constant\n };\n }\n resolveReference(reference) {\n const definition = this.#candidate.definitionAt(\n reference.id,\n reference.start,\n reference.end\n );\n if (!definition) return null;\n return {\n id: definition.id,\n name: definition.name,\n span: {\n id: definition.id,\n start: definition.start,\n end: definition.end\n },\n initializer: definition.initializer ? expressionReference(definition.id, definition.initializer) : null,\n constant: definition.constant\n };\n }\n expressionNode(reference) {\n if (!this.#modules.has(reference.id)) return null;\n return nodeAtSpan(\n this.#candidate.programOf(reference.id),\n reference.start,\n reference.end\n );\n }\n evaluate(reference) {\n return evaluateExpression(this, reference);\n }\n evaluateBranches(reference) {\n return evaluateBranches(this, reference);\n }\n evaluateDynamic(reference) {\n return evaluateDynamicExpression(this, reference);\n }\n evaluateBinding(id, localName) {\n return evaluateBinding(this, id, localName);\n }\n elementsOf(id) {\n const record = this.#modules.get(id);\n if (!record) throw new Error(`Unknown host module ${id}`);\n const cached = this.#elementCache.get(id);\n if (cached?.hash === record.hash) return cached.result;\n const result = normalizeElements(this.#candidate, id, record.input.imports);\n this.#elementCache.set(id, { hash: record.hash, result });\n return result;\n }\n diagnostics() {\n const diagnostics = this.#candidate.diagnostics().map(\n (diagnostic) => diagnostic.kind === \"parse\" ? localBailout(\n \"local/parse-error\",\n { id: diagnostic.id, start: 0, end: 0 },\n diagnostic.message\n ) : linkedBailout(\n \"linked/unresolved-binding\",\n { id: diagnostic.id, start: 0, end: 0 },\n diagnostic.message\n )\n );\n for (const [id, record] of this.#modules) {\n for (const dependency of record.input.imports) {\n if (dependency.external) continue;\n if (this.#modules.has(dependency.resolvedId)) continue;\n diagnostics.push(\n linkedBailout(\n \"linked/unresolved-import\",\n { id, start: 0, end: 0 },\n `Host-resolved import ${dependency.specifier} points outside the project graph`,\n dependency.resolvedId\n )\n );\n }\n }\n return diagnostics.sort((left, right) => {\n const byId = compareCodeUnits(left.span.id, right.span.id);\n return byId || left.span.start - right.span.start || compareCodeUnits(left.code, right.code);\n });\n }\n updateModule(input) {\n const previous = this.#modules.get(input.id);\n const nextHash = moduleContentHash(input);\n if (previous?.hash === nextHash) {\n return {\n changed: false,\n id: input.id,\n previousHash: previous.hash,\n contentHash: previous.hash,\n invalidatedIds: []\n };\n }\n const invalidatedIds = this.affectedBy(input.id);\n const previousHash = previous?.hash ?? null;\n if (previous) this.#candidate.removeFile(input.id);\n this.#installHostRecord(input);\n this.#candidate.addFile(input.id, input.source);\n this.#candidate.link();\n for (const id of invalidatedIds) this.#elementCache.delete(id);\n return {\n changed: true,\n id: input.id,\n previousHash,\n contentHash: nextHash,\n invalidatedIds\n };\n }\n removeModule(id) {\n const previous = this.#modules.get(id);\n if (!previous) {\n return {\n changed: false,\n id,\n previousHash: null,\n contentHash: null,\n invalidatedIds: []\n };\n }\n const invalidatedIds = this.affectedBy(id);\n this.#candidate.removeFile(id);\n this.#removeOutgoingEdges(id);\n this.#removeResolutions(id);\n this.#modules.delete(id);\n this.#files.delete(id);\n this.#candidate.link();\n for (const invalidated of invalidatedIds) this.#elementCache.delete(invalidated);\n return {\n changed: true,\n id,\n previousHash: previous.hash,\n contentHash: null,\n invalidatedIds\n };\n }\n #installHostRecord(input) {\n resolvedModuleId(input.id);\n const seenSpecifiers = /* @__PURE__ */ new Set();\n for (const dependency of input.imports) {\n resolvedModuleId(dependency.resolvedId);\n if (seenSpecifiers.has(dependency.specifier)) {\n throw new Error(\n `Duplicate host resolution for ${input.id}:${dependency.specifier}`\n );\n }\n seenSpecifiers.add(dependency.specifier);\n }\n this.#removeOutgoingEdges(input.id);\n this.#removeResolutions(input.id);\n const dependencies = new Set(\n input.imports.filter(({ external }) => !external).map(({ resolvedId }) => resolvedId)\n );\n this.#dependencies.set(input.id, dependencies);\n for (const dependency of dependencies) {\n let reverse = this.#dependents.get(dependency);\n if (!reverse) {\n reverse = /* @__PURE__ */ new Set();\n this.#dependents.set(dependency, reverse);\n }\n reverse.add(input.id);\n }\n for (const dependency of input.imports) {\n if (dependency.external) continue;\n this.#resolutions.set(\n resolutionKey(input.id, dependency.specifier),\n dependency.resolvedId\n );\n }\n const installedInput = {\n ...input,\n imports: input.imports.map((dependency) => ({ ...dependency }))\n };\n this.#files.set(installedInput.id, installedInput.source);\n this.#modules.set(installedInput.id, {\n input: installedInput,\n hash: moduleContentHash(installedInput)\n });\n }\n #removeOutgoingEdges(id) {\n for (const dependency of this.#dependencies.get(id) ?? []) {\n const reverse = this.#dependents.get(dependency);\n reverse?.delete(id);\n if (reverse?.size === 0) this.#dependents.delete(dependency);\n }\n this.#dependencies.delete(id);\n }\n #removeResolutions(id) {\n const prefix = `${id}\\0`;\n for (const key of this.#resolutions.keys()) {\n if (key.startsWith(prefix)) this.#resolutions.delete(key);\n }\n }\n}\nexport {\n ProjectGraph,\n moduleContentHash\n};\n//# sourceMappingURL=graph.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"graph.js","names":["#installHostRecord","#files","#resolutions","#candidate","#modules","#dependencies","#dependents","#elementCache","#removeOutgoingEdges","#removeResolutions"],"sources":["esm/graph.js"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { expressionReference, resolutionKey, resolvedModuleId } from \"./contracts\";\nimport { linkedBailout, localBailout } from \"./diagnostics\";\nimport {\n evaluateBinding,\n evaluateBranches,\n evaluateDynamicExpression,\n evaluateExpression\n} from \"./evaluate\";\nimport { nodeAtSpan, normalizeElements } from \"./normalize\";\nfunction compareIds(left, right) {\n return compareCodeUnits(left, right);\n}\nfunction compareCodeUnits(left, right) {\n return left < right ? -1 : left > right ? 1 : 0;\n}\nfunction stableImports(imports) {\n return [...imports].sort((left, right) => {\n const bySpecifier = compareCodeUnits(left.specifier, right.specifier);\n return bySpecifier || compareCodeUnits(left.resolvedId, right.resolvedId);\n });\n}\nfunction moduleContentHash(input) {\n const hash = createHash(\"sha256\");\n hash.update(input.source);\n hash.update(\"\\0\");\n for (const dependency of stableImports(input.imports)) {\n hash.update(dependency.specifier);\n hash.update(\"\\0\");\n hash.update(dependency.resolvedId);\n hash.update(\"\\0\");\n hash.update(dependency.external ? \"external\" : \"internal\");\n hash.update(\"\\0\");\n }\n return hash.digest(\"hex\");\n}\nclass ProjectGraph {\n #files = /* @__PURE__ */ new Map();\n #resolutions = /* @__PURE__ */ new Map();\n #modules = /* @__PURE__ */ new Map();\n #dependencies = /* @__PURE__ */ new Map();\n #dependents = /* @__PURE__ */ new Map();\n #elementCache = /* @__PURE__ */ new Map();\n #candidate;\n constructor(factory, project) {\n for (const input of project.modules) this.#installHostRecord(input);\n const candidateProject = {\n files: this.#files,\n resolutions: this.#resolutions\n };\n this.#candidate = factory.create(candidateProject);\n this.#candidate.link();\n }\n moduleIds() {\n return [...this.#modules.keys()].sort(compareIds);\n }\n contentHash(id) {\n return this.#modules.get(id)?.hash ?? null;\n }\n sourceOf(id) {\n const source = this.#modules.get(id)?.input.source;\n if (source === void 0) throw new Error(`Unknown host module ${id}`);\n return source;\n }\n dependenciesOf(id) {\n return [...this.#dependencies.get(id) ?? []].sort(compareIds);\n }\n dependentsOf(id) {\n return [...this.#dependents.get(id) ?? []].sort(compareIds);\n }\n /** resolved ids a module imports that the graph does not own (package entries) */\n externalImportsOf(id) {\n const record = this.#modules.get(id);\n if (!record) return [];\n const ids = /* @__PURE__ */ new Set();\n for (const dependency of record.input.imports) {\n if (dependency.external) ids.add(dependency.resolvedId);\n }\n return [...ids].sort(compareIds);\n }\n affectedBy(id) {\n const affected = /* @__PURE__ */ new Set([id]);\n const queue = [id];\n while (queue.length) {\n const current = queue.shift();\n for (const dependent of this.#dependents.get(current) ?? []) {\n if (affected.has(dependent)) continue;\n affected.add(dependent);\n queue.push(dependent);\n }\n }\n return [...affected].sort(compareIds);\n }\n parseCount(id) {\n return this.#candidate.parseCount(id);\n }\n resolveBinding(id, localName) {\n const definition = this.#candidate.definitionOf(id, localName);\n if (!definition) return null;\n return {\n id: definition.id,\n name: definition.name,\n span: {\n id: definition.id,\n start: definition.start,\n end: definition.end\n },\n initializer: definition.initializer ? expressionReference(definition.id, definition.initializer) : null,\n constant: definition.constant\n };\n }\n resolveReference(reference) {\n const definition = this.#candidate.definitionAt(\n reference.id,\n reference.start,\n reference.end\n );\n if (!definition) return null;\n return {\n id: definition.id,\n name: definition.name,\n span: {\n id: definition.id,\n start: definition.start,\n end: definition.end\n },\n initializer: definition.initializer ? expressionReference(definition.id, definition.initializer) : null,\n constant: definition.constant\n };\n }\n expressionNode(reference) {\n if (!this.#modules.has(reference.id)) return null;\n return nodeAtSpan(\n this.#candidate.programOf(reference.id),\n reference.start,\n reference.end\n );\n }\n evaluate(reference) {\n return evaluateExpression(this, reference);\n }\n evaluateBranches(reference) {\n return evaluateBranches(this, reference);\n }\n evaluateDynamic(reference) {\n return evaluateDynamicExpression(this, reference);\n }\n evaluateBinding(id, localName) {\n return evaluateBinding(this, id, localName);\n }\n elementsOf(id) {\n const record = this.#modules.get(id);\n if (!record) throw new Error(`Unknown host module ${id}`);\n const cached = this.#elementCache.get(id);\n if (cached?.hash === record.hash) return cached.result;\n const result = normalizeElements(this.#candidate, id, record.input.imports);\n this.#elementCache.set(id, { hash: record.hash, result });\n return result;\n }\n diagnostics() {\n const diagnostics = this.#candidate.diagnostics().map(\n (diagnostic) => diagnostic.kind === \"parse\" ? localBailout(\n \"local/parse-error\",\n { id: diagnostic.id, start: 0, end: 0 },\n diagnostic.message\n ) : linkedBailout(\n \"linked/unresolved-binding\",\n { id: diagnostic.id, start: 0, end: 0 },\n diagnostic.message\n )\n );\n for (const [id, record] of this.#modules) {\n for (const dependency of record.input.imports) {\n if (dependency.external) continue;\n if (this.#modules.has(dependency.resolvedId)) continue;\n diagnostics.push(\n linkedBailout(\n \"linked/unresolved-import\",\n { id, start: 0, end: 0 },\n `Host-resolved import ${dependency.specifier} points outside the project graph`,\n dependency.resolvedId\n )\n );\n }\n }\n return diagnostics.sort((left, right) => {\n const byId = compareCodeUnits(left.span.id, right.span.id);\n return byId || left.span.start - right.span.start || compareCodeUnits(left.code, right.code);\n });\n }\n updateModule(input) {\n const previous = this.#modules.get(input.id);\n const nextHash = moduleContentHash(input);\n if (previous?.hash === nextHash) {\n return {\n changed: false,\n id: input.id,\n previousHash: previous.hash,\n contentHash: previous.hash,\n invalidatedIds: []\n };\n }\n const invalidatedIds = this.affectedBy(input.id);\n const previousHash = previous?.hash ?? null;\n if (previous) this.#candidate.removeFile(input.id);\n this.#installHostRecord(input);\n this.#candidate.addFile(input.id, input.source);\n this.#candidate.link();\n for (const id of invalidatedIds) this.#elementCache.delete(id);\n return {\n changed: true,\n id: input.id,\n previousHash,\n contentHash: nextHash,\n invalidatedIds\n };\n }\n removeModule(id) {\n const previous = this.#modules.get(id);\n if (!previous) {\n return {\n changed: false,\n id,\n previousHash: null,\n contentHash: null,\n invalidatedIds: []\n };\n }\n const invalidatedIds = this.affectedBy(id);\n this.#candidate.removeFile(id);\n this.#removeOutgoingEdges(id);\n this.#removeResolutions(id);\n this.#modules.delete(id);\n this.#files.delete(id);\n this.#candidate.link();\n for (const invalidated of invalidatedIds) this.#elementCache.delete(invalidated);\n return {\n changed: true,\n id,\n previousHash: previous.hash,\n contentHash: null,\n invalidatedIds\n };\n }\n #installHostRecord(input) {\n resolvedModuleId(input.id);\n const seenSpecifiers = /* @__PURE__ */ new Set();\n for (const dependency of input.imports) {\n resolvedModuleId(dependency.resolvedId);\n if (seenSpecifiers.has(dependency.specifier)) {\n throw new Error(\n `Duplicate host resolution for ${input.id}:${dependency.specifier}`\n );\n }\n seenSpecifiers.add(dependency.specifier);\n }\n this.#removeOutgoingEdges(input.id);\n this.#removeResolutions(input.id);\n const dependencies = new Set(\n input.imports.filter(({ external }) => !external).map(({ resolvedId }) => resolvedId)\n );\n this.#dependencies.set(input.id, dependencies);\n for (const dependency of dependencies) {\n let reverse = this.#dependents.get(dependency);\n if (!reverse) {\n reverse = /* @__PURE__ */ new Set();\n this.#dependents.set(dependency, reverse);\n }\n reverse.add(input.id);\n }\n for (const dependency of input.imports) {\n if (dependency.external) continue;\n this.#resolutions.set(\n resolutionKey(input.id, dependency.specifier),\n dependency.resolvedId\n );\n }\n const installedInput = {\n ...input,\n imports: input.imports.map((dependency) => ({ ...dependency }))\n };\n this.#files.set(installedInput.id, installedInput.source);\n this.#modules.set(installedInput.id, {\n input: installedInput,\n hash: moduleContentHash(installedInput)\n });\n }\n #removeOutgoingEdges(id) {\n for (const dependency of this.#dependencies.get(id) ?? []) {\n const reverse = this.#dependents.get(dependency);\n reverse?.delete(id);\n if (reverse?.size === 0) this.#dependents.delete(dependency);\n }\n this.#dependencies.delete(id);\n }\n #removeResolutions(id) {\n const prefix = `${id}\\0`;\n for (const key of this.#resolutions.keys()) {\n if (key.startsWith(prefix)) this.#resolutions.delete(key);\n }\n }\n}\nexport {\n ProjectGraph,\n moduleContentHash\n};\n//# sourceMappingURL=graph.js.map\n"],"mappings":"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"}
|
package/dist/esm/materialize.mjs
CHANGED
|
@@ -103,6 +103,7 @@ function materializeStyledDefinition(graph, definition) {
|
|
|
103
103
|
base: definition.base,
|
|
104
104
|
baseClassName: definition.baseClassName ? materializeValue(graph, definition.baseClassName) : null,
|
|
105
105
|
options: materializeValue(graph, definition.options),
|
|
106
|
+
staticConfig: definition.staticConfig ? materializeValue(graph, definition.staticConfig) : null,
|
|
106
107
|
complete: definition.complete,
|
|
107
108
|
bailouts: [...definition.bailouts]
|
|
108
109
|
};
|
|
@@ -138,6 +139,7 @@ function collectDependencies(module) {
|
|
|
138
139
|
if (definition.base.definition) dependencies.add(definition.base.definition.id);
|
|
139
140
|
if (definition.baseClassName) collect(definition.baseClassName);
|
|
140
141
|
collect(definition.options);
|
|
142
|
+
if (definition.staticConfig) collect(definition.staticConfig);
|
|
141
143
|
}
|
|
142
144
|
for (const definition of module.domStyleDefinitions) {
|
|
143
145
|
dependencies.add(definition.factory.resolvedId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"materialize.js","names":[],"sources":["esm/materialize.js"],"sourcesContent":["import { collectBranchDependencies } from \"./evaluate\";\nfunction compareCodeUnits(left, right) {\n return left < right ? -1 : left > right ? 1 : 0;\n}\nfunction materializeValue(graph, value) {\n if (value.kind === \"static\") {\n return {\n kind: \"static\",\n value: value.value,\n dependencies: [],\n span: value.span,\n literalOrigin: true\n };\n }\n if (value.kind === \"dom-style\") {\n return {\n kind: \"dom-style\",\n span: value.span,\n items: value.items.map((item) => ({\n condition: item.condition,\n value: materializeValue(graph, item.value)\n }))\n };\n }\n const result = graph.evaluate(value);\n if (result.ok) {\n return {\n kind: \"static\",\n value: result.value,\n dependencies: result.dependencies,\n span: value\n };\n }\n const tree = graph.evaluateBranches(value);\n if (tree) {\n return {\n kind: \"conditional\",\n tree,\n dependencies: collectBranchDependencies(tree).sort(compareCodeUnits),\n bailout: result.bailout,\n span: value\n };\n }\n return {\n kind: \"bailout\",\n bailout: result.bailout,\n span: value,\n dynamic: graph.evaluateDynamic(value)\n };\n}\nfunction materializeEntry(graph, entry) {\n if (entry.kind === \"prop\") {\n return {\n kind: entry.kind,\n name: entry.name,\n span: entry.span,\n value: materializeValue(graph, entry.value)\n };\n }\n if (entry.kind === \"spread\") {\n return {\n kind: entry.kind,\n span: entry.span,\n value: materializeValue(graph, entry.value)\n };\n }\n if (entry.value.kind === \"element\" || entry.value.kind === \"empty\") {\n return { kind: entry.kind, span: entry.span, value: entry.value };\n }\n return {\n kind: entry.kind,\n span: entry.span,\n value: materializeValue(graph, entry.value)\n };\n}\nfunction materializeElement(graph, element) {\n const entries = element.complete ? element.entries : element.bailedEntries;\n return {\n kind: element.kind,\n form: element.form,\n id: element.id,\n span: element.span,\n propsSpan: element.propsSpan,\n component: element.component,\n complete: element.complete,\n entries: entries.map((entry) => materializeEntry(graph, entry)),\n bailouts: [...element.bailouts]\n };\n}\nfunction materializeStyledDefinition(graph, definition) {\n return {\n kind: definition.kind,\n id: definition.id,\n name: definition.name,\n span: definition.span,\n definitionSpan: definition.definitionSpan,\n factory: definition.factory,\n base: definition.base,\n baseClassName: definition.baseClassName ? materializeValue(graph, definition.baseClassName) : null,\n options: materializeValue(graph, definition.options),\n complete: definition.complete,\n bailouts: [...definition.bailouts]\n };\n}\nfunction collectDependencies(module) {\n const dependencies = /* @__PURE__ */ new Set();\n const collect = (value) => {\n if (value.kind === \"static\" || value.kind === \"conditional\") {\n for (const dependency of value.dependencies) dependencies.add(dependency);\n } else if (value.kind === \"dom-style\") {\n for (const item of value.items) collect(item.value);\n } else {\n for (const dependency of value.dynamic?.dependencies ?? []) {\n dependencies.add(dependency);\n }\n if (value.bailout.dependencyId) dependencies.add(value.bailout.dependencyId);\n }\n };\n for (const element of module.elements) {\n if (element.component.provenance) {\n dependencies.add(element.component.provenance.resolvedId);\n }\n if (element.component.definition) dependencies.add(element.component.definition.id);\n for (const entry of element.entries) {\n if (\"value\" in entry && entry.value.kind !== \"element\" && entry.value.kind !== \"empty\") {\n collect(entry.value);\n }\n }\n }\n for (const definition of module.styledDefinitions) {\n dependencies.add(definition.factory.resolvedId);\n if (definition.base.provenance)\n dependencies.add(definition.base.provenance.resolvedId);\n if (definition.base.definition) dependencies.add(definition.base.definition.id);\n if (definition.baseClassName) collect(definition.baseClassName);\n collect(definition.options);\n }\n for (const definition of module.domStyleDefinitions) {\n dependencies.add(definition.factory.resolvedId);\n collect(definition.value);\n }\n return [...dependencies].sort(compareCodeUnits);\n}\nfunction materializeModule(graph, id) {\n const inputHash = graph.contentHash(id);\n if (!inputHash) throw new Error(`Cannot materialize unknown host module ${id}`);\n const result = graph.elementsOf(id);\n const definitions = [...result.styledDefinitions];\n const definitionKeys = new Set(\n definitions.map((definition) => `${definition.id}\\0${definition.name}`)\n );\n for (const element of result.elements) {\n const linked = element.component.definition;\n if (!linked || linked.id === id) continue;\n const definition = graph.elementsOf(linked.id).styledDefinitions.find(\n (candidate) => candidate.id === linked.id && candidate.name === linked.name\n );\n const key = definition && `${definition.id}\\0${definition.name}`;\n if (definition && key && !definitionKeys.has(key)) {\n definitionKeys.add(key);\n definitions.push(definition);\n }\n }\n const base = {\n version: 1,\n id,\n inputHash,\n elements: result.elements.map((element) => materializeElement(graph, element)),\n styledDefinitions: definitions.map(\n (definition) => materializeStyledDefinition(graph, definition)\n ),\n domStyleDefinitions: result.domStyleDefinitions.map((definition) => ({\n ...definition,\n value: materializeValue(graph, definition.value)\n })),\n diagnostics: graph.diagnostics().filter(({ span }) => span.id === id)\n };\n return { ...base, dependencies: collectDependencies(base) };\n}\nexport {\n materializeModule\n};\n//# sourceMappingURL=materialize.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"materialize.js","names":[],"sources":["esm/materialize.js"],"sourcesContent":["import { collectBranchDependencies } from \"./evaluate\";\nfunction compareCodeUnits(left, right) {\n return left < right ? -1 : left > right ? 1 : 0;\n}\nfunction materializeValue(graph, value) {\n if (value.kind === \"static\") {\n return {\n kind: \"static\",\n value: value.value,\n dependencies: [],\n span: value.span,\n literalOrigin: true\n };\n }\n if (value.kind === \"dom-style\") {\n return {\n kind: \"dom-style\",\n span: value.span,\n items: value.items.map((item) => ({\n condition: item.condition,\n value: materializeValue(graph, item.value)\n }))\n };\n }\n const result = graph.evaluate(value);\n if (result.ok) {\n return {\n kind: \"static\",\n value: result.value,\n dependencies: result.dependencies,\n span: value\n };\n }\n const tree = graph.evaluateBranches(value);\n if (tree) {\n return {\n kind: \"conditional\",\n tree,\n dependencies: collectBranchDependencies(tree).sort(compareCodeUnits),\n bailout: result.bailout,\n span: value\n };\n }\n return {\n kind: \"bailout\",\n bailout: result.bailout,\n span: value,\n dynamic: graph.evaluateDynamic(value)\n };\n}\nfunction materializeEntry(graph, entry) {\n if (entry.kind === \"prop\") {\n return {\n kind: entry.kind,\n name: entry.name,\n span: entry.span,\n value: materializeValue(graph, entry.value)\n };\n }\n if (entry.kind === \"spread\") {\n return {\n kind: entry.kind,\n span: entry.span,\n value: materializeValue(graph, entry.value)\n };\n }\n if (entry.value.kind === \"element\" || entry.value.kind === \"empty\") {\n return { kind: entry.kind, span: entry.span, value: entry.value };\n }\n return {\n kind: entry.kind,\n span: entry.span,\n value: materializeValue(graph, entry.value)\n };\n}\nfunction materializeElement(graph, element) {\n const entries = element.complete ? element.entries : element.bailedEntries;\n return {\n kind: element.kind,\n form: element.form,\n id: element.id,\n span: element.span,\n propsSpan: element.propsSpan,\n component: element.component,\n complete: element.complete,\n entries: entries.map((entry) => materializeEntry(graph, entry)),\n bailouts: [...element.bailouts]\n };\n}\nfunction materializeStyledDefinition(graph, definition) {\n return {\n kind: definition.kind,\n id: definition.id,\n name: definition.name,\n span: definition.span,\n definitionSpan: definition.definitionSpan,\n factory: definition.factory,\n base: definition.base,\n baseClassName: definition.baseClassName ? materializeValue(graph, definition.baseClassName) : null,\n options: materializeValue(graph, definition.options),\n staticConfig: definition.staticConfig ? materializeValue(graph, definition.staticConfig) : null,\n complete: definition.complete,\n bailouts: [...definition.bailouts]\n };\n}\nfunction collectDependencies(module) {\n const dependencies = /* @__PURE__ */ new Set();\n const collect = (value) => {\n if (value.kind === \"static\" || value.kind === \"conditional\") {\n for (const dependency of value.dependencies) dependencies.add(dependency);\n } else if (value.kind === \"dom-style\") {\n for (const item of value.items) collect(item.value);\n } else {\n for (const dependency of value.dynamic?.dependencies ?? []) {\n dependencies.add(dependency);\n }\n if (value.bailout.dependencyId) dependencies.add(value.bailout.dependencyId);\n }\n };\n for (const element of module.elements) {\n if (element.component.provenance) {\n dependencies.add(element.component.provenance.resolvedId);\n }\n if (element.component.definition) dependencies.add(element.component.definition.id);\n for (const entry of element.entries) {\n if (\"value\" in entry && entry.value.kind !== \"element\" && entry.value.kind !== \"empty\") {\n collect(entry.value);\n }\n }\n }\n for (const definition of module.styledDefinitions) {\n dependencies.add(definition.factory.resolvedId);\n if (definition.base.provenance)\n dependencies.add(definition.base.provenance.resolvedId);\n if (definition.base.definition) dependencies.add(definition.base.definition.id);\n if (definition.baseClassName) collect(definition.baseClassName);\n collect(definition.options);\n if (definition.staticConfig) collect(definition.staticConfig);\n }\n for (const definition of module.domStyleDefinitions) {\n dependencies.add(definition.factory.resolvedId);\n collect(definition.value);\n }\n return [...dependencies].sort(compareCodeUnits);\n}\nfunction materializeModule(graph, id) {\n const inputHash = graph.contentHash(id);\n if (!inputHash) throw new Error(`Cannot materialize unknown host module ${id}`);\n const result = graph.elementsOf(id);\n const definitions = [...result.styledDefinitions];\n const definitionKeys = new Set(\n definitions.map((definition) => `${definition.id}\\0${definition.name}`)\n );\n for (const element of result.elements) {\n const linked = element.component.definition;\n if (!linked || linked.id === id) continue;\n const definition = graph.elementsOf(linked.id).styledDefinitions.find(\n (candidate) => candidate.id === linked.id && candidate.name === linked.name\n );\n const key = definition && `${definition.id}\\0${definition.name}`;\n if (definition && key && !definitionKeys.has(key)) {\n definitionKeys.add(key);\n definitions.push(definition);\n }\n }\n const base = {\n version: 1,\n id,\n inputHash,\n elements: result.elements.map((element) => materializeElement(graph, element)),\n styledDefinitions: definitions.map(\n (definition) => materializeStyledDefinition(graph, definition)\n ),\n domStyleDefinitions: result.domStyleDefinitions.map((definition) => ({\n ...definition,\n value: materializeValue(graph, definition.value)\n })),\n diagnostics: graph.diagnostics().filter(({ span }) => span.id === id)\n };\n return { ...base, dependencies: collectDependencies(base) };\n}\nexport {\n materializeModule\n};\n//# sourceMappingURL=materialize.js.map\n"],"mappings":"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"}
|
package/dist/esm/normalize.mjs
CHANGED
|
@@ -389,7 +389,8 @@ function styledDefinitions(candidate, id, program, imports, bailouts) {
|
|
|
389
389
|
const definitionBailouts = [];
|
|
390
390
|
const args = childNodes(call, "arguments");
|
|
391
391
|
const baseNode = args[0];
|
|
392
|
-
const
|
|
392
|
+
const objectForm = args[1]?.type === "ObjectExpression";
|
|
393
|
+
const optionsNode = objectForm ? args[1] : args.length >= 3 ? args[2] : args[1];
|
|
393
394
|
if (!baseNode || !optionsNode) {
|
|
394
395
|
definitionBailouts.push(localBailout("local/unsupported-styled-definition", spanOf(id, call), `styled definition ${name} must provide a base and options object`));
|
|
395
396
|
bailouts.push(...definitionBailouts);
|
|
@@ -400,7 +401,8 @@ function styledDefinitions(candidate, id, program, imports, bailouts) {
|
|
|
400
401
|
bailouts.push(...definitionBailouts);
|
|
401
402
|
return;
|
|
402
403
|
}
|
|
403
|
-
const baseClassNode = args.length >= 3 ? args[1] : null;
|
|
404
|
+
const baseClassNode = objectForm ? null : args.length >= 3 ? args[1] : null;
|
|
405
|
+
const staticConfigNode = objectForm && args.length >= 3 ? args[2] : null;
|
|
404
406
|
const baseDefinition = {
|
|
405
407
|
kind: "styled-definition",
|
|
406
408
|
id,
|
|
@@ -410,7 +412,8 @@ function styledDefinitions(candidate, id, program, imports, bailouts) {
|
|
|
410
412
|
factory,
|
|
411
413
|
base,
|
|
412
414
|
baseClassName: baseClassNode ? elementValue(id, baseClassNode) : null,
|
|
413
|
-
options: expressionReference(id, optionsNode)
|
|
415
|
+
options: expressionReference(id, optionsNode),
|
|
416
|
+
staticConfig: staticConfigNode ? expressionReference(id, staticConfigNode) : null
|
|
414
417
|
};
|
|
415
418
|
definitions.push(definitionBailouts.length === 0 ? {
|
|
416
419
|
...baseDefinition,
|
|
@@ -430,6 +433,12 @@ const DOM_STYLE_FRONTENDS = /* @__PURE__ */ new Set([
|
|
|
430
433
|
"@tamagui/core/dom",
|
|
431
434
|
"@tamagui/tailwind"
|
|
432
435
|
]);
|
|
436
|
+
const STYLE_FRONTENDS = /* @__PURE__ */ new Set([
|
|
437
|
+
...DOM_STYLE_FRONTENDS,
|
|
438
|
+
"tamagui",
|
|
439
|
+
"@tamagui/core",
|
|
440
|
+
"@tamagui/web"
|
|
441
|
+
]);
|
|
433
442
|
function domStyleDefinitions(id, program, imports) {
|
|
434
443
|
const definitions = [];
|
|
435
444
|
walkAst(program, (node) => {
|
|
@@ -442,7 +451,7 @@ function domStyleDefinitions(id, program, imports) {
|
|
|
442
451
|
const factoryName = callee && identifierName(callee);
|
|
443
452
|
if (!factoryName) return;
|
|
444
453
|
const binding = importBinding(program, factoryName);
|
|
445
|
-
if (!binding || binding.imported !== "style" || !
|
|
454
|
+
if (!binding || binding.imported !== "style" || !STYLE_FRONTENDS.has(binding.source)) {
|
|
446
455
|
return;
|
|
447
456
|
}
|
|
448
457
|
const factory = hostImportProvenance(imports, binding.source, binding.imported);
|
|
@@ -473,7 +482,7 @@ function domStyleArgument(candidate, id, program, node) {
|
|
|
473
482
|
const factoryName = callee && identifierName(callee);
|
|
474
483
|
if (!factoryName) return null;
|
|
475
484
|
const binding = importBinding(program, factoryName);
|
|
476
|
-
if (!binding || binding.imported !== "style" || !
|
|
485
|
+
if (!binding || binding.imported !== "style" || !STYLE_FRONTENDS.has(binding.source)) {
|
|
477
486
|
return null;
|
|
478
487
|
}
|
|
479
488
|
return childNodes(call, "arguments")[0] ?? null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize.js","names":[],"sources":["esm/normalize.js"],"sourcesContent":["import {\n childNode,\n childNodes,\n findAstNode,\n identifierName,\n isAstNode,\n walkAst\n} from \"./ast\";\nimport {\n expressionReference,\n resolvedModuleId,\n spanOf\n} from \"./contracts\";\nimport { linkedBailout, localBailout } from \"./diagnostics\";\nimport { hostImportProvenance } from \"./ir\";\nfunction finalizeElement(base, entries, bailouts) {\n if (bailouts.length === 0) {\n return { ...base, complete: true, entries, bailouts: [] };\n }\n return {\n ...base,\n complete: false,\n bailedEntries: entries,\n bailouts\n };\n}\nfunction definitionFromDeclaration(id, name, program, declaration) {\n let identifier = declaration;\n let initializer = null;\n let constant = false;\n if (declaration.type === \"VariableDeclarator\") {\n identifier = childNode(declaration, \"id\") ?? declaration;\n initializer = childNode(declaration, \"init\");\n constant = !!findAstNode(\n program,\n (node) => node.type === \"VariableDeclaration\" && node.kind === \"const\" && childNodes(node, \"declarations\").some(\n (candidate) => candidate.start === declaration.start\n )\n );\n } else if (declaration.type === \"Identifier\") {\n const declarator = findAstNode(\n program,\n (node) => node.type === \"VariableDeclarator\" && childNode(node, \"id\")?.start === declaration.start\n );\n if (declarator) {\n initializer = childNode(declarator, \"init\");\n constant = !!findAstNode(\n program,\n (node) => node.type === \"VariableDeclaration\" && node.kind === \"const\" && childNodes(node, \"declarations\").some(\n (candidate) => candidate.start === declarator.start\n )\n );\n }\n }\n return {\n id: resolvedModuleId(id),\n name,\n start: identifier.start,\n end: identifier.end,\n initializer,\n constant\n };\n}\nfunction importBinding(program, localName) {\n for (const statement of childNodes(program, \"body\")) {\n if (statement.type !== \"ImportDeclaration\") continue;\n const source = childNode(statement, \"source\");\n const sourceValue = source && typeof source.value === \"string\" ? source.value : null;\n if (!sourceValue) continue;\n for (const specifier of childNodes(statement, \"specifiers\")) {\n if (identifierName(childNode(specifier, \"local\")) !== localName) continue;\n if (specifier.type === \"ImportDefaultSpecifier\") {\n return { source: sourceValue, imported: \"default\" };\n }\n if (specifier.type === \"ImportNamespaceSpecifier\") {\n return { source: sourceValue, imported: \"*\" };\n }\n const imported = childNode(specifier, \"imported\");\n const importedName = identifierName(imported) ?? (typeof imported?.value === \"string\" ? imported.value : null);\n return importedName ? { source: sourceValue, imported: importedName } : null;\n }\n }\n return null;\n}\nfunction asStaticValue(node) {\n if (!node) return void 0;\n if (node.type === \"NullLiteral\") return null;\n if (node.type === \"Literal\" || node.type.endsWith(\"Literal\")) {\n const value = node.value;\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\" || value === null) {\n return value;\n }\n }\n return void 0;\n}\nfunction elementValue(id, node) {\n const staticValue = asStaticValue(node);\n return staticValue === void 0 ? expressionReference(id, node) : { kind: \"static\", value: staticValue, span: spanOf(id, node) };\n}\nfunction symbolDefinition(definition) {\n if (!definition) return null;\n return {\n id: definition.id,\n name: definition.name,\n span: {\n id: definition.id,\n start: definition.start,\n end: definition.end\n },\n initializer: definition.initializer ? expressionReference(definition.id, definition.initializer) : null,\n constant: definition.constant\n };\n}\nfunction componentFromNode(candidate, id, program, imports, node, bailouts) {\n const literal = asStaticValue(node);\n if (typeof literal === \"string\") {\n return {\n kind: \"intrinsic\",\n name: literal,\n span: spanOf(id, node),\n closingSpan: null,\n definition: null,\n provenance: null\n };\n }\n if ((node.type === \"MemberExpression\" || node.type === \"JSXMemberExpression\") && node.computed !== true) {\n const objectName = identifierName(childNode(node, \"object\"));\n const memberName = identifierName(childNode(node, \"property\"));\n const binding2 = objectName ? importBinding(program, objectName) : null;\n if (memberName && binding2?.imported === \"html\") {\n const provenance2 = hostImportProvenance(imports, binding2.source, binding2.imported);\n if (provenance2) {\n return {\n kind: \"binding\",\n name: memberName,\n span: spanOf(id, node),\n closingSpan: null,\n definition: null,\n provenance: provenance2\n };\n }\n }\n }\n const name = identifierName(node);\n if (!name) {\n bailouts.push(\n localBailout(\n \"local/unsupported-element-name\",\n spanOf(id, node),\n `Element target ${node.type} is not a stable identifier or intrinsic tag`\n )\n );\n return null;\n }\n const intrinsic = /^[a-z]/.test(name);\n const binding = intrinsic ? null : importBinding(program, name);\n const provenance = binding ? hostImportProvenance(imports, binding.source, binding.imported) : null;\n const definition = intrinsic ? null : symbolDefinition(candidate.definitionOf(id, name));\n if (!intrinsic && !definition && !provenance) {\n bailouts.push(\n linkedBailout(\n \"linked/unresolved-component-binding\",\n spanOf(id, node),\n `Component binding ${name} has no linked definition`\n )\n );\n }\n return {\n kind: intrinsic ? \"intrinsic\" : \"binding\",\n name,\n span: spanOf(id, node),\n closingSpan: null,\n definition,\n provenance\n };\n}\nfunction jsxComponentNode(opening) {\n return childNode(opening, \"name\");\n}\nfunction jsxEntries(id, element, opening, bailouts) {\n const entries = [];\n for (const attribute of childNodes(opening, \"attributes\")) {\n if (attribute.type === \"JSXSpreadAttribute\") {\n const argument = childNode(attribute, \"argument\");\n if (argument) {\n entries.push({\n kind: \"spread\",\n span: spanOf(id, attribute),\n value: expressionReference(id, argument)\n });\n }\n continue;\n }\n if (attribute.type !== \"JSXAttribute\") continue;\n const nameNode = childNode(attribute, \"name\");\n const name = identifierName(nameNode);\n if (!name) {\n bailouts.push(\n localBailout(\n \"local/unsupported-prop-key\",\n spanOf(id, attribute),\n \"Namespaced JSX attributes are not statically supported\"\n )\n );\n continue;\n }\n const rawValue = childNode(attribute, \"value\");\n let value;\n if (!rawValue) {\n value = { kind: \"static\", value: true, span: spanOf(id, attribute) };\n } else if (rawValue.type === \"JSXExpressionContainer\") {\n const expression = childNode(rawValue, \"expression\");\n if (!expression || expression.type === \"JSXEmptyExpression\") {\n bailouts.push(\n localBailout(\n \"local/unsupported-expression\",\n spanOf(id, rawValue),\n `JSX prop ${name} has no expression`\n )\n );\n continue;\n }\n value = elementValue(id, expression);\n } else {\n value = elementValue(id, rawValue);\n }\n entries.push({ kind: \"prop\", name, span: spanOf(id, attribute), value });\n }\n for (const child of childNodes(element, \"children\")) {\n let value;\n if (child.type === \"JSXText\") {\n if (typeof child.value !== \"string\" || child.value.trim() === \"\") continue;\n value = {\n kind: \"static\",\n value: child.value,\n span: spanOf(id, child)\n };\n } else if (child.type === \"JSXExpressionContainer\") {\n const expression = childNode(child, \"expression\");\n value = !expression || expression.type === \"JSXEmptyExpression\" ? { kind: \"empty\", span: spanOf(id, child) } : elementValue(id, expression);\n } else if (child.type === \"JSXElement\" || child.type === \"JSXFragment\") {\n value = { kind: \"element\", span: spanOf(id, child) };\n } else {\n bailouts.push(\n localBailout(\n \"local/unsupported-child\",\n spanOf(id, child),\n `JSX child ${child.type} cannot be normalized`\n )\n );\n continue;\n }\n entries.push({ kind: \"child\", span: spanOf(id, child), value });\n }\n return entries.sort((left, right) => left.span.start - right.span.start);\n}\nfunction propertyName(property) {\n if (property.computed === true) return null;\n const key = childNode(property, \"key\");\n const name = identifierName(key);\n if (name) return name;\n const literal = asStaticValue(key);\n return typeof literal === \"string\" || typeof literal === \"number\" ? String(literal) : null;\n}\nfunction runtimeChildEntries(id, program, node, bailouts) {\n const rawNodes = node.type === \"ArrayExpression\" ? node.elements : null;\n if (Array.isArray(rawNodes) && rawNodes.some((child) => child === null || !isAstNode(child))) {\n bailouts.push(\n localBailout(\n \"local/unsupported-child\",\n spanOf(id, node),\n \"Sparse compiled children cannot be normalized without changing order\"\n )\n );\n return [];\n }\n const nodes = Array.isArray(rawNodes) ? rawNodes.filter(isAstNode) : [node];\n return nodes.flatMap((child) => {\n if (child.type === \"SpreadElement\") {\n bailouts.push(\n localBailout(\n \"local/unsupported-child\",\n spanOf(id, child),\n \"Spread children cannot be statically ordered\"\n )\n );\n return [];\n }\n if (child.type === \"CallExpression\" && runtimeCall(program, child)) {\n return [\n {\n kind: \"child\",\n span: spanOf(id, child),\n value: { kind: \"element\", span: spanOf(id, child) }\n }\n ];\n }\n return [{ kind: \"child\", span: spanOf(id, child), value: elementValue(id, child) }];\n });\n}\nfunction objectEntries(id, program, object, bailouts) {\n const entries = [];\n for (const property of childNodes(object, \"properties\")) {\n if (property.type === \"SpreadElement\") {\n const argument = childNode(property, \"argument\");\n if (argument) {\n const spread = {\n kind: \"spread\",\n span: spanOf(id, property),\n value: expressionReference(id, argument)\n };\n entries.push(spread);\n }\n continue;\n }\n if (property.type !== \"Property\" && property.type !== \"ObjectProperty\") {\n bailouts.push(\n localBailout(\n \"local/unsupported-prop-key\",\n spanOf(id, property),\n `Runtime props entry ${property.type} is not a data property`\n )\n );\n continue;\n }\n const name = propertyName(property);\n const valueNode = childNode(property, \"value\");\n if (!name || !valueNode) {\n bailouts.push(\n localBailout(\n \"local/unsupported-prop-key\",\n spanOf(id, property),\n \"Computed runtime prop keys are not statically supported\"\n )\n );\n continue;\n }\n if (name === \"children\") {\n entries.push(...runtimeChildEntries(id, program, valueNode, bailouts));\n continue;\n }\n const prop = {\n kind: \"prop\",\n name,\n span: spanOf(id, property),\n value: elementValue(id, valueNode)\n };\n entries.push(prop);\n }\n return entries;\n}\nfunction runtimeCall(program, call) {\n const callee = childNode(call, \"callee\");\n if (!callee) return null;\n const directName = identifierName(callee);\n if (directName) {\n const provenance2 = importBinding(program, directName);\n if (provenance2?.source === \"react/jsx-runtime\" && (provenance2.imported === \"jsx\" || provenance2.imported === \"jsxs\")) {\n return { form: \"jsx-runtime\" };\n }\n if (provenance2?.source === \"react\" && provenance2.imported === \"createElement\") {\n return { form: \"create-element\" };\n }\n }\n if (callee.type !== \"MemberExpression\" || callee.computed === true) return null;\n const objectName = identifierName(childNode(callee, \"object\"));\n const propertyName2 = identifierName(childNode(callee, \"property\"));\n if (propertyName2 !== \"createElement\" || !objectName) return null;\n const provenance = importBinding(program, objectName);\n return provenance?.source === \"react\" && (provenance.imported === \"default\" || provenance.imported === \"*\") ? { form: \"create-element\" } : null;\n}\nfunction normalizeRuntimeElement(candidate, id, program, imports, call, runtime, bailouts) {\n const bailoutStart = bailouts.length;\n const args = childNodes(call, \"arguments\");\n const target = args[0];\n if (!target) {\n bailouts.push(\n localBailout(\n \"local/invalid-element-call\",\n spanOf(id, call),\n `${runtime.form} call has no element target`\n )\n );\n return null;\n }\n const component = componentFromNode(candidate, id, program, imports, target, bailouts);\n if (!component) return null;\n const entries = [];\n const props = args[1];\n if (props && asStaticValue(props) !== null) {\n if (props.type === \"ObjectExpression\") {\n entries.push(...objectEntries(id, program, props, bailouts));\n } else {\n entries.push({\n kind: \"spread\",\n span: spanOf(id, props),\n value: expressionReference(id, props)\n });\n }\n }\n if (runtime.form === \"create-element\") {\n for (const child of args.slice(2)) {\n entries.push(...runtimeChildEntries(id, program, child, bailouts));\n }\n }\n return finalizeElement(\n {\n kind: \"element\",\n form: runtime.form,\n id,\n span: spanOf(id, call),\n propsSpan: props ? spanOf(id, props) : null,\n component\n },\n entries.sort((left, right) => left.span.start - right.span.start),\n bailouts.slice(bailoutStart)\n );\n}\nfunction styledDefinitions(candidate, id, program, imports, bailouts) {\n const definitions = [];\n walkAst(program, (node) => {\n if (node.type !== \"VariableDeclarator\") return;\n const identifier = childNode(node, \"id\");\n const name = identifierName(identifier);\n const call = childNode(node, \"init\");\n if (!name || !identifier || call?.type !== \"CallExpression\") return;\n const callee = childNode(call, \"callee\");\n const factoryName = callee && identifierName(callee);\n if (!factoryName) return;\n const binding = importBinding(program, factoryName);\n if (!binding || binding.imported !== \"styled\") return;\n const factory = hostImportProvenance(imports, binding.source, binding.imported);\n if (!factory) return;\n const definitionBailouts = [];\n const args = childNodes(call, \"arguments\");\n const baseNode = args[0];\n const optionsNode = args.length >= 3 ? args[2] : args[1];\n if (!baseNode || !optionsNode) {\n definitionBailouts.push(\n localBailout(\n \"local/unsupported-styled-definition\",\n spanOf(id, call),\n `styled definition ${name} must provide a base and options object`\n )\n );\n bailouts.push(...definitionBailouts);\n return;\n }\n const base = componentFromNode(\n candidate,\n id,\n program,\n imports,\n baseNode,\n definitionBailouts\n );\n if (!base) {\n bailouts.push(...definitionBailouts);\n return;\n }\n const baseClassNode = args.length >= 3 ? args[1] : null;\n const baseDefinition = {\n kind: \"styled-definition\",\n id,\n name,\n span: spanOf(id, call),\n definitionSpan: spanOf(id, identifier),\n factory,\n base,\n baseClassName: baseClassNode ? elementValue(id, baseClassNode) : null,\n options: expressionReference(id, optionsNode)\n };\n definitions.push(\n definitionBailouts.length === 0 ? { ...baseDefinition, complete: true, bailouts: [] } : {\n ...baseDefinition,\n complete: false,\n bailouts: definitionBailouts\n }\n );\n bailouts.push(...definitionBailouts);\n });\n return definitions.sort((left, right) => left.span.start - right.span.start);\n}\nconst DOM_STYLE_FRONTENDS = /* @__PURE__ */ new Set([\n \"tamagui/dom\",\n \"@tamagui/core/dom\",\n \"@tamagui/tailwind\"\n]);\nfunction domStyleDefinitions(id, program, imports) {\n const definitions = [];\n walkAst(program, (node) => {\n if (node.type !== \"VariableDeclarator\") return;\n const identifier = childNode(node, \"id\");\n const name = identifierName(identifier);\n const call = childNode(node, \"init\");\n if (!name || !identifier || call?.type !== \"CallExpression\") return;\n const callee = childNode(call, \"callee\");\n const factoryName = callee && identifierName(callee);\n if (!factoryName) return;\n const binding = importBinding(program, factoryName);\n if (!binding || binding.imported !== \"style\" || !DOM_STYLE_FRONTENDS.has(binding.source)) {\n return;\n }\n const factory = hostImportProvenance(imports, binding.source, binding.imported);\n const value = childNodes(call, \"arguments\")[0];\n if (!factory || !value) return;\n definitions.push({\n kind: \"dom-style-definition\",\n id,\n name,\n span: spanOf(id, call),\n definitionSpan: spanOf(id, identifier),\n factory,\n value: expressionReference(id, value)\n });\n });\n return definitions.sort((left, right) => left.span.start - right.span.start);\n}\nfunction domStyleArgument(candidate, id, program, node) {\n let call = node;\n if (node.type === \"Identifier\") {\n const name = identifierName(node);\n const definition = name ? candidate.definitionOf(id, name) : null;\n if (!definition?.constant || !definition.initializer) return null;\n call = definition.initializer;\n }\n if (call.type !== \"CallExpression\") return null;\n const callee = childNode(call, \"callee\");\n const factoryName = callee && identifierName(callee);\n if (!factoryName) return null;\n const binding = importBinding(program, factoryName);\n if (!binding || binding.imported !== \"style\" || !DOM_STYLE_FRONTENDS.has(binding.source)) {\n return null;\n }\n return childNodes(call, \"arguments\")[0] ?? null;\n}\nfunction domStyleProgram(candidate, id, program, node) {\n if (node.type !== \"ArrayExpression\" || !Array.isArray(node.elements)) {\n const argument = domStyleArgument(candidate, id, program, node);\n return argument ? {\n kind: \"dom-style\",\n span: spanOf(id, node),\n items: [{ condition: null, value: expressionReference(id, argument) }]\n } : null;\n }\n const items = [];\n for (const rawItem of node.elements) {\n if (!isAstNode(rawItem)) return null;\n let item = rawItem;\n let condition = null;\n if (item.type === \"LogicalExpression\" && item.operator === \"&&\") {\n const left = childNode(item, \"left\");\n const right = childNode(item, \"right\");\n if (!left || !right) return null;\n condition = expressionReference(id, left);\n item = right;\n }\n const argument = domStyleArgument(candidate, id, program, item);\n if (!argument) {\n const staticValue = asStaticValue(item);\n if (staticValue === false || staticValue === null) continue;\n return null;\n }\n items.push({ condition, value: expressionReference(id, argument) });\n }\n return { kind: \"dom-style\", span: spanOf(id, node), items };\n}\nfunction normalizeElements(candidate, rawId, imports = []) {\n const id = resolvedModuleId(rawId);\n const program = candidate.programOf(id);\n const elements = [];\n const bailouts = [];\n walkAst(program, (node) => {\n if (node.type === \"JSXElement\") {\n const bailoutStart = bailouts.length;\n const opening = childNode(node, \"openingElement\");\n const target = opening && jsxComponentNode(opening);\n if (!opening || !target) return;\n const component = componentFromNode(\n candidate,\n id,\n program,\n imports,\n target,\n bailouts\n );\n if (!component) return;\n const closingElement = childNode(node, \"closingElement\");\n const closingName = closingElement && childNode(closingElement, \"name\");\n if (closingName) component.closingSpan = spanOf(id, closingName);\n const entries = jsxEntries(id, node, opening, bailouts);\n for (const entry of entries) {\n if (entry.kind !== \"prop\" || entry.name !== \"style\") continue;\n const raw = entry.value.kind === \"expression\" ? nodeAtSpan(program, entry.value.start, entry.value.end) : null;\n const styleProgram = raw && domStyleProgram(candidate, id, program, raw);\n const argument = raw && domStyleArgument(candidate, id, program, raw);\n if (styleProgram) entry.value = styleProgram;\n else if (argument) entry.value = expressionReference(id, argument);\n }\n elements.push(\n finalizeElement(\n {\n kind: \"element\",\n form: \"jsx\",\n id,\n span: spanOf(id, node),\n propsSpan: spanOf(id, opening),\n component\n },\n entries,\n bailouts.slice(bailoutStart)\n )\n );\n return;\n }\n if (node.type !== \"CallExpression\") return;\n const runtime = runtimeCall(program, node);\n if (!runtime) return;\n const element = normalizeRuntimeElement(\n candidate,\n id,\n program,\n imports,\n node,\n runtime,\n bailouts\n );\n if (element) {\n const entries = element.complete ? element.entries : element.bailedEntries;\n for (const entry of entries) {\n if (entry.kind !== \"prop\" || entry.name !== \"style\") continue;\n const raw = entry.value.kind === \"expression\" ? nodeAtSpan(program, entry.value.start, entry.value.end) : null;\n const styleProgram = raw && domStyleProgram(candidate, id, program, raw);\n const argument = raw && domStyleArgument(candidate, id, program, raw);\n if (styleProgram) entry.value = styleProgram;\n else if (argument) entry.value = expressionReference(id, argument);\n }\n elements.push(element);\n }\n });\n return {\n elements: elements.sort((left, right) => left.span.start - right.span.start),\n styledDefinitions: styledDefinitions(candidate, id, program, imports, bailouts),\n domStyleDefinitions: domStyleDefinitions(id, program, imports),\n bailouts: bailouts.sort((left, right) => left.span.start - right.span.start)\n };\n}\nfunction declarationForName(program, name) {\n return findAstNode(program, (node) => {\n if (node.type !== \"VariableDeclarator\") return false;\n return identifierName(childNode(node, \"id\")) === name;\n });\n}\nfunction nodeAtSpan(program, start, end) {\n return findAstNode(program, (node) => node.start === start && node.end === end);\n}\nfunction asAstNode(value, label) {\n if (!isAstNode(value)) throw new Error(`${label} is not an AST node`);\n return value;\n}\nexport {\n asAstNode,\n declarationForName,\n definitionFromDeclaration,\n nodeAtSpan,\n normalizeElements\n};\n//# sourceMappingURL=normalize.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"normalize.js","names":[],"sources":["esm/normalize.js"],"sourcesContent":["import {\n childNode,\n childNodes,\n findAstNode,\n identifierName,\n isAstNode,\n walkAst\n} from \"./ast\";\nimport {\n expressionReference,\n resolvedModuleId,\n spanOf\n} from \"./contracts\";\nimport { linkedBailout, localBailout } from \"./diagnostics\";\nimport { hostImportProvenance } from \"./ir\";\nfunction finalizeElement(base, entries, bailouts) {\n if (bailouts.length === 0) {\n return { ...base, complete: true, entries, bailouts: [] };\n }\n return {\n ...base,\n complete: false,\n bailedEntries: entries,\n bailouts\n };\n}\nfunction definitionFromDeclaration(id, name, program, declaration) {\n let identifier = declaration;\n let initializer = null;\n let constant = false;\n if (declaration.type === \"VariableDeclarator\") {\n identifier = childNode(declaration, \"id\") ?? declaration;\n initializer = childNode(declaration, \"init\");\n constant = !!findAstNode(\n program,\n (node) => node.type === \"VariableDeclaration\" && node.kind === \"const\" && childNodes(node, \"declarations\").some(\n (candidate) => candidate.start === declaration.start\n )\n );\n } else if (declaration.type === \"Identifier\") {\n const declarator = findAstNode(\n program,\n (node) => node.type === \"VariableDeclarator\" && childNode(node, \"id\")?.start === declaration.start\n );\n if (declarator) {\n initializer = childNode(declarator, \"init\");\n constant = !!findAstNode(\n program,\n (node) => node.type === \"VariableDeclaration\" && node.kind === \"const\" && childNodes(node, \"declarations\").some(\n (candidate) => candidate.start === declarator.start\n )\n );\n }\n }\n return {\n id: resolvedModuleId(id),\n name,\n start: identifier.start,\n end: identifier.end,\n initializer,\n constant\n };\n}\nfunction importBinding(program, localName) {\n for (const statement of childNodes(program, \"body\")) {\n if (statement.type !== \"ImportDeclaration\") continue;\n const source = childNode(statement, \"source\");\n const sourceValue = source && typeof source.value === \"string\" ? source.value : null;\n if (!sourceValue) continue;\n for (const specifier of childNodes(statement, \"specifiers\")) {\n if (identifierName(childNode(specifier, \"local\")) !== localName) continue;\n if (specifier.type === \"ImportDefaultSpecifier\") {\n return { source: sourceValue, imported: \"default\" };\n }\n if (specifier.type === \"ImportNamespaceSpecifier\") {\n return { source: sourceValue, imported: \"*\" };\n }\n const imported = childNode(specifier, \"imported\");\n const importedName = identifierName(imported) ?? (typeof imported?.value === \"string\" ? imported.value : null);\n return importedName ? { source: sourceValue, imported: importedName } : null;\n }\n }\n return null;\n}\nfunction asStaticValue(node) {\n if (!node) return void 0;\n if (node.type === \"NullLiteral\") return null;\n if (node.type === \"Literal\" || node.type.endsWith(\"Literal\")) {\n const value = node.value;\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\" || value === null) {\n return value;\n }\n }\n return void 0;\n}\nfunction elementValue(id, node) {\n const staticValue = asStaticValue(node);\n return staticValue === void 0 ? expressionReference(id, node) : { kind: \"static\", value: staticValue, span: spanOf(id, node) };\n}\nfunction symbolDefinition(definition) {\n if (!definition) return null;\n return {\n id: definition.id,\n name: definition.name,\n span: {\n id: definition.id,\n start: definition.start,\n end: definition.end\n },\n initializer: definition.initializer ? expressionReference(definition.id, definition.initializer) : null,\n constant: definition.constant\n };\n}\nfunction componentFromNode(candidate, id, program, imports, node, bailouts) {\n const literal = asStaticValue(node);\n if (typeof literal === \"string\") {\n return {\n kind: \"intrinsic\",\n name: literal,\n span: spanOf(id, node),\n closingSpan: null,\n definition: null,\n provenance: null\n };\n }\n if ((node.type === \"MemberExpression\" || node.type === \"JSXMemberExpression\") && node.computed !== true) {\n const objectName = identifierName(childNode(node, \"object\"));\n const memberName = identifierName(childNode(node, \"property\"));\n const binding2 = objectName ? importBinding(program, objectName) : null;\n if (memberName && binding2?.imported === \"html\") {\n const provenance2 = hostImportProvenance(imports, binding2.source, binding2.imported);\n if (provenance2) {\n return {\n kind: \"binding\",\n name: memberName,\n span: spanOf(id, node),\n closingSpan: null,\n definition: null,\n provenance: provenance2\n };\n }\n }\n }\n const name = identifierName(node);\n if (!name) {\n bailouts.push(\n localBailout(\n \"local/unsupported-element-name\",\n spanOf(id, node),\n `Element target ${node.type} is not a stable identifier or intrinsic tag`\n )\n );\n return null;\n }\n const intrinsic = /^[a-z]/.test(name);\n const binding = intrinsic ? null : importBinding(program, name);\n const provenance = binding ? hostImportProvenance(imports, binding.source, binding.imported) : null;\n const definition = intrinsic ? null : symbolDefinition(candidate.definitionOf(id, name));\n if (!intrinsic && !definition && !provenance) {\n bailouts.push(\n linkedBailout(\n \"linked/unresolved-component-binding\",\n spanOf(id, node),\n `Component binding ${name} has no linked definition`\n )\n );\n }\n return {\n kind: intrinsic ? \"intrinsic\" : \"binding\",\n name,\n span: spanOf(id, node),\n closingSpan: null,\n definition,\n provenance\n };\n}\nfunction jsxComponentNode(opening) {\n return childNode(opening, \"name\");\n}\nfunction jsxEntries(id, element, opening, bailouts) {\n const entries = [];\n for (const attribute of childNodes(opening, \"attributes\")) {\n if (attribute.type === \"JSXSpreadAttribute\") {\n const argument = childNode(attribute, \"argument\");\n if (argument) {\n entries.push({\n kind: \"spread\",\n span: spanOf(id, attribute),\n value: expressionReference(id, argument)\n });\n }\n continue;\n }\n if (attribute.type !== \"JSXAttribute\") continue;\n const nameNode = childNode(attribute, \"name\");\n const name = identifierName(nameNode);\n if (!name) {\n bailouts.push(\n localBailout(\n \"local/unsupported-prop-key\",\n spanOf(id, attribute),\n \"Namespaced JSX attributes are not statically supported\"\n )\n );\n continue;\n }\n const rawValue = childNode(attribute, \"value\");\n let value;\n if (!rawValue) {\n value = { kind: \"static\", value: true, span: spanOf(id, attribute) };\n } else if (rawValue.type === \"JSXExpressionContainer\") {\n const expression = childNode(rawValue, \"expression\");\n if (!expression || expression.type === \"JSXEmptyExpression\") {\n bailouts.push(\n localBailout(\n \"local/unsupported-expression\",\n spanOf(id, rawValue),\n `JSX prop ${name} has no expression`\n )\n );\n continue;\n }\n value = elementValue(id, expression);\n } else {\n value = elementValue(id, rawValue);\n }\n entries.push({ kind: \"prop\", name, span: spanOf(id, attribute), value });\n }\n for (const child of childNodes(element, \"children\")) {\n let value;\n if (child.type === \"JSXText\") {\n if (typeof child.value !== \"string\" || child.value.trim() === \"\") continue;\n value = {\n kind: \"static\",\n value: child.value,\n span: spanOf(id, child)\n };\n } else if (child.type === \"JSXExpressionContainer\") {\n const expression = childNode(child, \"expression\");\n value = !expression || expression.type === \"JSXEmptyExpression\" ? { kind: \"empty\", span: spanOf(id, child) } : elementValue(id, expression);\n } else if (child.type === \"JSXElement\" || child.type === \"JSXFragment\") {\n value = { kind: \"element\", span: spanOf(id, child) };\n } else {\n bailouts.push(\n localBailout(\n \"local/unsupported-child\",\n spanOf(id, child),\n `JSX child ${child.type} cannot be normalized`\n )\n );\n continue;\n }\n entries.push({ kind: \"child\", span: spanOf(id, child), value });\n }\n return entries.sort((left, right) => left.span.start - right.span.start);\n}\nfunction propertyName(property) {\n if (property.computed === true) return null;\n const key = childNode(property, \"key\");\n const name = identifierName(key);\n if (name) return name;\n const literal = asStaticValue(key);\n return typeof literal === \"string\" || typeof literal === \"number\" ? String(literal) : null;\n}\nfunction runtimeChildEntries(id, program, node, bailouts) {\n const rawNodes = node.type === \"ArrayExpression\" ? node.elements : null;\n if (Array.isArray(rawNodes) && rawNodes.some((child) => child === null || !isAstNode(child))) {\n bailouts.push(\n localBailout(\n \"local/unsupported-child\",\n spanOf(id, node),\n \"Sparse compiled children cannot be normalized without changing order\"\n )\n );\n return [];\n }\n const nodes = Array.isArray(rawNodes) ? rawNodes.filter(isAstNode) : [node];\n return nodes.flatMap((child) => {\n if (child.type === \"SpreadElement\") {\n bailouts.push(\n localBailout(\n \"local/unsupported-child\",\n spanOf(id, child),\n \"Spread children cannot be statically ordered\"\n )\n );\n return [];\n }\n if (child.type === \"CallExpression\" && runtimeCall(program, child)) {\n return [\n {\n kind: \"child\",\n span: spanOf(id, child),\n value: { kind: \"element\", span: spanOf(id, child) }\n }\n ];\n }\n return [{ kind: \"child\", span: spanOf(id, child), value: elementValue(id, child) }];\n });\n}\nfunction objectEntries(id, program, object, bailouts) {\n const entries = [];\n for (const property of childNodes(object, \"properties\")) {\n if (property.type === \"SpreadElement\") {\n const argument = childNode(property, \"argument\");\n if (argument) {\n const spread = {\n kind: \"spread\",\n span: spanOf(id, property),\n value: expressionReference(id, argument)\n };\n entries.push(spread);\n }\n continue;\n }\n if (property.type !== \"Property\" && property.type !== \"ObjectProperty\") {\n bailouts.push(\n localBailout(\n \"local/unsupported-prop-key\",\n spanOf(id, property),\n `Runtime props entry ${property.type} is not a data property`\n )\n );\n continue;\n }\n const name = propertyName(property);\n const valueNode = childNode(property, \"value\");\n if (!name || !valueNode) {\n bailouts.push(\n localBailout(\n \"local/unsupported-prop-key\",\n spanOf(id, property),\n \"Computed runtime prop keys are not statically supported\"\n )\n );\n continue;\n }\n if (name === \"children\") {\n entries.push(...runtimeChildEntries(id, program, valueNode, bailouts));\n continue;\n }\n const prop = {\n kind: \"prop\",\n name,\n span: spanOf(id, property),\n value: elementValue(id, valueNode)\n };\n entries.push(prop);\n }\n return entries;\n}\nfunction runtimeCall(program, call) {\n const callee = childNode(call, \"callee\");\n if (!callee) return null;\n const directName = identifierName(callee);\n if (directName) {\n const provenance2 = importBinding(program, directName);\n if (provenance2?.source === \"react/jsx-runtime\" && (provenance2.imported === \"jsx\" || provenance2.imported === \"jsxs\")) {\n return { form: \"jsx-runtime\" };\n }\n if (provenance2?.source === \"react\" && provenance2.imported === \"createElement\") {\n return { form: \"create-element\" };\n }\n }\n if (callee.type !== \"MemberExpression\" || callee.computed === true) return null;\n const objectName = identifierName(childNode(callee, \"object\"));\n const propertyName2 = identifierName(childNode(callee, \"property\"));\n if (propertyName2 !== \"createElement\" || !objectName) return null;\n const provenance = importBinding(program, objectName);\n return provenance?.source === \"react\" && (provenance.imported === \"default\" || provenance.imported === \"*\") ? { form: \"create-element\" } : null;\n}\nfunction normalizeRuntimeElement(candidate, id, program, imports, call, runtime, bailouts) {\n const bailoutStart = bailouts.length;\n const args = childNodes(call, \"arguments\");\n const target = args[0];\n if (!target) {\n bailouts.push(\n localBailout(\n \"local/invalid-element-call\",\n spanOf(id, call),\n `${runtime.form} call has no element target`\n )\n );\n return null;\n }\n const component = componentFromNode(candidate, id, program, imports, target, bailouts);\n if (!component) return null;\n const entries = [];\n const props = args[1];\n if (props && asStaticValue(props) !== null) {\n if (props.type === \"ObjectExpression\") {\n entries.push(...objectEntries(id, program, props, bailouts));\n } else {\n entries.push({\n kind: \"spread\",\n span: spanOf(id, props),\n value: expressionReference(id, props)\n });\n }\n }\n if (runtime.form === \"create-element\") {\n for (const child of args.slice(2)) {\n entries.push(...runtimeChildEntries(id, program, child, bailouts));\n }\n }\n return finalizeElement(\n {\n kind: \"element\",\n form: runtime.form,\n id,\n span: spanOf(id, call),\n propsSpan: props ? spanOf(id, props) : null,\n component\n },\n entries.sort((left, right) => left.span.start - right.span.start),\n bailouts.slice(bailoutStart)\n );\n}\nfunction styledDefinitions(candidate, id, program, imports, bailouts) {\n const definitions = [];\n walkAst(program, (node) => {\n if (node.type !== \"VariableDeclarator\") return;\n const identifier = childNode(node, \"id\");\n const name = identifierName(identifier);\n const call = childNode(node, \"init\");\n if (!name || !identifier || call?.type !== \"CallExpression\") return;\n const callee = childNode(call, \"callee\");\n const factoryName = callee && identifierName(callee);\n if (!factoryName) return;\n const binding = importBinding(program, factoryName);\n if (!binding || binding.imported !== \"styled\") return;\n const factory = hostImportProvenance(imports, binding.source, binding.imported);\n if (!factory) return;\n const definitionBailouts = [];\n const args = childNodes(call, \"arguments\");\n const baseNode = args[0];\n const objectForm = args[1]?.type === \"ObjectExpression\";\n const optionsNode = objectForm ? args[1] : args.length >= 3 ? args[2] : args[1];\n if (!baseNode || !optionsNode) {\n definitionBailouts.push(\n localBailout(\n \"local/unsupported-styled-definition\",\n spanOf(id, call),\n `styled definition ${name} must provide a base and options object`\n )\n );\n bailouts.push(...definitionBailouts);\n return;\n }\n const base = componentFromNode(\n candidate,\n id,\n program,\n imports,\n baseNode,\n definitionBailouts\n );\n if (!base) {\n bailouts.push(...definitionBailouts);\n return;\n }\n const baseClassNode = objectForm ? null : args.length >= 3 ? args[1] : null;\n const staticConfigNode = objectForm && args.length >= 3 ? args[2] : null;\n const baseDefinition = {\n kind: \"styled-definition\",\n id,\n name,\n span: spanOf(id, call),\n definitionSpan: spanOf(id, identifier),\n factory,\n base,\n baseClassName: baseClassNode ? elementValue(id, baseClassNode) : null,\n options: expressionReference(id, optionsNode),\n staticConfig: staticConfigNode ? expressionReference(id, staticConfigNode) : null\n };\n definitions.push(\n definitionBailouts.length === 0 ? { ...baseDefinition, complete: true, bailouts: [] } : {\n ...baseDefinition,\n complete: false,\n bailouts: definitionBailouts\n }\n );\n bailouts.push(...definitionBailouts);\n });\n return definitions.sort((left, right) => left.span.start - right.span.start);\n}\nconst DOM_STYLE_FRONTENDS = /* @__PURE__ */ new Set([\n \"tamagui/dom\",\n \"@tamagui/core/dom\",\n \"@tamagui/tailwind\"\n]);\nconst STYLE_FRONTENDS = /* @__PURE__ */ new Set([\n ...DOM_STYLE_FRONTENDS,\n \"tamagui\",\n \"@tamagui/core\",\n \"@tamagui/web\"\n]);\nfunction domStyleDefinitions(id, program, imports) {\n const definitions = [];\n walkAst(program, (node) => {\n if (node.type !== \"VariableDeclarator\") return;\n const identifier = childNode(node, \"id\");\n const name = identifierName(identifier);\n const call = childNode(node, \"init\");\n if (!name || !identifier || call?.type !== \"CallExpression\") return;\n const callee = childNode(call, \"callee\");\n const factoryName = callee && identifierName(callee);\n if (!factoryName) return;\n const binding = importBinding(program, factoryName);\n if (!binding || binding.imported !== \"style\" || !STYLE_FRONTENDS.has(binding.source)) {\n return;\n }\n const factory = hostImportProvenance(imports, binding.source, binding.imported);\n const value = childNodes(call, \"arguments\")[0];\n if (!factory || !value) return;\n definitions.push({\n kind: \"dom-style-definition\",\n id,\n name,\n span: spanOf(id, call),\n definitionSpan: spanOf(id, identifier),\n factory,\n value: expressionReference(id, value)\n });\n });\n return definitions.sort((left, right) => left.span.start - right.span.start);\n}\nfunction domStyleArgument(candidate, id, program, node) {\n let call = node;\n if (node.type === \"Identifier\") {\n const name = identifierName(node);\n const definition = name ? candidate.definitionOf(id, name) : null;\n if (!definition?.constant || !definition.initializer) return null;\n call = definition.initializer;\n }\n if (call.type !== \"CallExpression\") return null;\n const callee = childNode(call, \"callee\");\n const factoryName = callee && identifierName(callee);\n if (!factoryName) return null;\n const binding = importBinding(program, factoryName);\n if (!binding || binding.imported !== \"style\" || !STYLE_FRONTENDS.has(binding.source)) {\n return null;\n }\n return childNodes(call, \"arguments\")[0] ?? null;\n}\nfunction domStyleProgram(candidate, id, program, node) {\n if (node.type !== \"ArrayExpression\" || !Array.isArray(node.elements)) {\n const argument = domStyleArgument(candidate, id, program, node);\n return argument ? {\n kind: \"dom-style\",\n span: spanOf(id, node),\n items: [{ condition: null, value: expressionReference(id, argument) }]\n } : null;\n }\n const items = [];\n for (const rawItem of node.elements) {\n if (!isAstNode(rawItem)) return null;\n let item = rawItem;\n let condition = null;\n if (item.type === \"LogicalExpression\" && item.operator === \"&&\") {\n const left = childNode(item, \"left\");\n const right = childNode(item, \"right\");\n if (!left || !right) return null;\n condition = expressionReference(id, left);\n item = right;\n }\n const argument = domStyleArgument(candidate, id, program, item);\n if (!argument) {\n const staticValue = asStaticValue(item);\n if (staticValue === false || staticValue === null) continue;\n return null;\n }\n items.push({ condition, value: expressionReference(id, argument) });\n }\n return { kind: \"dom-style\", span: spanOf(id, node), items };\n}\nfunction normalizeElements(candidate, rawId, imports = []) {\n const id = resolvedModuleId(rawId);\n const program = candidate.programOf(id);\n const elements = [];\n const bailouts = [];\n walkAst(program, (node) => {\n if (node.type === \"JSXElement\") {\n const bailoutStart = bailouts.length;\n const opening = childNode(node, \"openingElement\");\n const target = opening && jsxComponentNode(opening);\n if (!opening || !target) return;\n const component = componentFromNode(\n candidate,\n id,\n program,\n imports,\n target,\n bailouts\n );\n if (!component) return;\n const closingElement = childNode(node, \"closingElement\");\n const closingName = closingElement && childNode(closingElement, \"name\");\n if (closingName) component.closingSpan = spanOf(id, closingName);\n const entries = jsxEntries(id, node, opening, bailouts);\n for (const entry of entries) {\n if (entry.kind !== \"prop\" || entry.name !== \"style\") continue;\n const raw = entry.value.kind === \"expression\" ? nodeAtSpan(program, entry.value.start, entry.value.end) : null;\n const styleProgram = raw && domStyleProgram(candidate, id, program, raw);\n const argument = raw && domStyleArgument(candidate, id, program, raw);\n if (styleProgram) entry.value = styleProgram;\n else if (argument) entry.value = expressionReference(id, argument);\n }\n elements.push(\n finalizeElement(\n {\n kind: \"element\",\n form: \"jsx\",\n id,\n span: spanOf(id, node),\n propsSpan: spanOf(id, opening),\n component\n },\n entries,\n bailouts.slice(bailoutStart)\n )\n );\n return;\n }\n if (node.type !== \"CallExpression\") return;\n const runtime = runtimeCall(program, node);\n if (!runtime) return;\n const element = normalizeRuntimeElement(\n candidate,\n id,\n program,\n imports,\n node,\n runtime,\n bailouts\n );\n if (element) {\n const entries = element.complete ? element.entries : element.bailedEntries;\n for (const entry of entries) {\n if (entry.kind !== \"prop\" || entry.name !== \"style\") continue;\n const raw = entry.value.kind === \"expression\" ? nodeAtSpan(program, entry.value.start, entry.value.end) : null;\n const styleProgram = raw && domStyleProgram(candidate, id, program, raw);\n const argument = raw && domStyleArgument(candidate, id, program, raw);\n if (styleProgram) entry.value = styleProgram;\n else if (argument) entry.value = expressionReference(id, argument);\n }\n elements.push(element);\n }\n });\n return {\n elements: elements.sort((left, right) => left.span.start - right.span.start),\n styledDefinitions: styledDefinitions(candidate, id, program, imports, bailouts),\n domStyleDefinitions: domStyleDefinitions(id, program, imports),\n bailouts: bailouts.sort((left, right) => left.span.start - right.span.start)\n };\n}\nfunction declarationForName(program, name) {\n return findAstNode(program, (node) => {\n if (node.type !== \"VariableDeclarator\") return false;\n return identifierName(childNode(node, \"id\")) === name;\n });\n}\nfunction nodeAtSpan(program, start, end) {\n return findAstNode(program, (node) => node.start === start && node.end === end);\n}\nfunction asAstNode(value, label) {\n if (!isAstNode(value)) throw new Error(`${label} is not an AST node`);\n return value;\n}\nexport {\n asAstNode,\n declarationForName,\n definitionFromDeclaration,\n nodeAtSpan,\n normalizeElements\n};\n//# sourceMappingURL=normalize.js.map\n"],"mappings":";;;;;;AAeA,SAAS,gBAAgB,MAAM,SAAS,UAAU;CAChD,IAAI,SAAS,WAAW,GAAG;EACzB,OAAO;GAAE,GAAG;GAAM,UAAU;GAAM;GAAS,UAAU,CAAC;EAAE;CAC1D;CACA,OAAO;EACL,GAAG;EACH,UAAU;EACV,eAAe;EACf;CACF;AACF;AACA,SAAS,0BAA0B,IAAI,MAAM,SAAS,aAAa;CACjE,IAAI,aAAa;CACjB,IAAI,cAAc;CAClB,IAAI,WAAW;CACf,IAAI,YAAY,SAAS,sBAAsB;EAC7C,aAAa,UAAU,aAAa,IAAI,KAAK;EAC7C,cAAc,UAAU,aAAa,MAAM;EAC3C,WAAW,CAAC,CAAC,YACX,UACC,SAAS,KAAK,SAAS,yBAAyB,KAAK,SAAS,WAAW,WAAW,MAAM,cAAc,CAAC,CAAC,MACxG,cAAc,UAAU,UAAU,YAAY,KACjD,CACF;CACF,OAAO,IAAI,YAAY,SAAS,cAAc;EAC5C,MAAM,aAAa,YACjB,UACC,SAAS,KAAK,SAAS,wBAAwB,UAAU,MAAM,IAAI,CAAC,EAAE,UAAU,YAAY,KAC/F;EACA,IAAI,YAAY;GACd,cAAc,UAAU,YAAY,MAAM;GAC1C,WAAW,CAAC,CAAC,YACX,UACC,SAAS,KAAK,SAAS,yBAAyB,KAAK,SAAS,WAAW,WAAW,MAAM,cAAc,CAAC,CAAC,MACxG,cAAc,UAAU,UAAU,WAAW,KAChD,CACF;EACF;CACF;CACA,OAAO;EACL,IAAI,iBAAiB,EAAE;EACvB;EACA,OAAO,WAAW;EAClB,KAAK,WAAW;EAChB;EACA;CACF;AACF;AACA,SAAS,cAAc,SAAS,WAAW;CACzC,KAAK,MAAM,aAAa,WAAW,SAAS,MAAM,GAAG;EACnD,IAAI,UAAU,SAAS,qBAAqB;EAC5C,MAAM,SAAS,UAAU,WAAW,QAAQ;EAC5C,MAAM,cAAc,UAAU,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ;EAChF,IAAI,CAAC,aAAa;EAClB,KAAK,MAAM,aAAa,WAAW,WAAW,YAAY,GAAG;GAC3D,IAAI,eAAe,UAAU,WAAW,OAAO,CAAC,MAAM,WAAW;GACjE,IAAI,UAAU,SAAS,0BAA0B;IAC/C,OAAO;KAAE,QAAQ;KAAa,UAAU;IAAU;GACpD;GACA,IAAI,UAAU,SAAS,4BAA4B;IACjD,OAAO;KAAE,QAAQ;KAAa,UAAU;IAAI;GAC9C;GACA,MAAM,WAAW,UAAU,WAAW,UAAU;GAChD,MAAM,eAAe,eAAe,QAAQ,MAAM,OAAO,UAAU,UAAU,WAAW,SAAS,QAAQ;GACzG,OAAO,eAAe;IAAE,QAAQ;IAAa,UAAU;GAAa,IAAI;EAC1E;CACF;CACA,OAAO;AACT;AACA,SAAS,cAAc,MAAM;CAC3B,IAAI,CAAC,MAAM,OAAO,KAAK;CACvB,IAAI,KAAK,SAAS,eAAe,OAAO;CACxC,IAAI,KAAK,SAAS,aAAa,KAAK,KAAK,SAAS,SAAS,GAAG;EAC5D,MAAM,QAAQ,KAAK;EACnB,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,YAAY,OAAO,UAAU,aAAa,UAAU,MAAM;GAC1G,OAAO;EACT;CACF;CACA,OAAO,KAAK;AACd;AACA,SAAS,aAAa,IAAI,MAAM;CAC9B,MAAM,cAAc,cAAc,IAAI;CACtC,OAAO,gBAAgB,KAAK,IAAI,oBAAoB,IAAI,IAAI,IAAI;EAAE,MAAM;EAAU,OAAO;EAAa,MAAM,OAAO,IAAI,IAAI;CAAE;AAC/H;AACA,SAAS,iBAAiB,YAAY;CACpC,IAAI,CAAC,YAAY,OAAO;CACxB,OAAO;EACL,IAAI,WAAW;EACf,MAAM,WAAW;EACjB,MAAM;GACJ,IAAI,WAAW;GACf,OAAO,WAAW;GAClB,KAAK,WAAW;EAClB;EACA,aAAa,WAAW,cAAc,oBAAoB,WAAW,IAAI,WAAW,WAAW,IAAI;EACnG,UAAU,WAAW;CACvB;AACF;AACA,SAAS,kBAAkB,WAAW,IAAI,SAAS,SAAS,MAAM,UAAU;CAC1E,MAAM,UAAU,cAAc,IAAI;CAClC,IAAI,OAAO,YAAY,UAAU;EAC/B,OAAO;GACL,MAAM;GACN,MAAM;GACN,MAAM,OAAO,IAAI,IAAI;GACrB,aAAa;GACb,YAAY;GACZ,YAAY;EACd;CACF;CACA,KAAK,KAAK,SAAS,sBAAsB,KAAK,SAAS,0BAA0B,KAAK,aAAa,MAAM;EACvG,MAAM,aAAa,eAAe,UAAU,MAAM,QAAQ,CAAC;EAC3D,MAAM,aAAa,eAAe,UAAU,MAAM,UAAU,CAAC;EAC7D,MAAM,WAAW,aAAa,cAAc,SAAS,UAAU,IAAI;EACnE,IAAI,cAAc,UAAU,aAAa,QAAQ;GAC/C,MAAM,cAAc,qBAAqB,SAAS,SAAS,QAAQ,SAAS,QAAQ;GACpF,IAAI,aAAa;IACf,OAAO;KACL,MAAM;KACN,MAAM;KACN,MAAM,OAAO,IAAI,IAAI;KACrB,aAAa;KACb,YAAY;KACZ,YAAY;IACd;GACF;EACF;CACF;CACA,MAAM,OAAO,eAAe,IAAI;CAChC,IAAI,CAAC,MAAM;EACT,SAAS,KACP,aACE,kCACA,OAAO,IAAI,IAAI,GACf,kBAAkB,KAAK,KAAK,6CAC9B,CACF;EACA,OAAO;CACT;CACA,MAAM,YAAY,SAAS,KAAK,IAAI;CACpC,MAAM,UAAU,YAAY,OAAO,cAAc,SAAS,IAAI;CAC9D,MAAM,aAAa,UAAU,qBAAqB,SAAS,QAAQ,QAAQ,QAAQ,QAAQ,IAAI;CAC/F,MAAM,aAAa,YAAY,OAAO,iBAAiB,UAAU,aAAa,IAAI,IAAI,CAAC;CACvF,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,YAAY;EAC5C,SAAS,KACP,cACE,uCACA,OAAO,IAAI,IAAI,GACf,qBAAqB,KAAK,0BAC5B,CACF;CACF;CACA,OAAO;EACL,MAAM,YAAY,cAAc;EAChC;EACA,MAAM,OAAO,IAAI,IAAI;EACrB,aAAa;EACb;EACA;CACF;AACF;AACA,SAAS,iBAAiB,SAAS;CACjC,OAAO,UAAU,SAAS,MAAM;AAClC;AACA,SAAS,WAAW,IAAI,SAAS,SAAS,UAAU;CAClD,MAAM,UAAU,CAAC;CACjB,KAAK,MAAM,aAAa,WAAW,SAAS,YAAY,GAAG;EACzD,IAAI,UAAU,SAAS,sBAAsB;GAC3C,MAAM,WAAW,UAAU,WAAW,UAAU;GAChD,IAAI,UAAU;IACZ,QAAQ,KAAK;KACX,MAAM;KACN,MAAM,OAAO,IAAI,SAAS;KAC1B,OAAO,oBAAoB,IAAI,QAAQ;IACzC,CAAC;GACH;GACA;EACF;EACA,IAAI,UAAU,SAAS,gBAAgB;EACvC,MAAM,WAAW,UAAU,WAAW,MAAM;EAC5C,MAAM,OAAO,eAAe,QAAQ;EACpC,IAAI,CAAC,MAAM;GACT,SAAS,KACP,aACE,8BACA,OAAO,IAAI,SAAS,GACpB,wDACF,CACF;GACA;EACF;EACA,MAAM,WAAW,UAAU,WAAW,OAAO;EAC7C,IAAI;EACJ,IAAI,CAAC,UAAU;GACb,QAAQ;IAAE,MAAM;IAAU,OAAO;IAAM,MAAM,OAAO,IAAI,SAAS;GAAE;EACrE,OAAO,IAAI,SAAS,SAAS,0BAA0B;GACrD,MAAM,aAAa,UAAU,UAAU,YAAY;GACnD,IAAI,CAAC,cAAc,WAAW,SAAS,sBAAsB;IAC3D,SAAS,KACP,aACE,gCACA,OAAO,IAAI,QAAQ,GACnB,YAAY,KAAK,mBACnB,CACF;IACA;GACF;GACA,QAAQ,aAAa,IAAI,UAAU;EACrC,OAAO;GACL,QAAQ,aAAa,IAAI,QAAQ;EACnC;EACA,QAAQ,KAAK;GAAE,MAAM;GAAQ;GAAM,MAAM,OAAO,IAAI,SAAS;GAAG;EAAM,CAAC;CACzE;CACA,KAAK,MAAM,SAAS,WAAW,SAAS,UAAU,GAAG;EACnD,IAAI;EACJ,IAAI,MAAM,SAAS,WAAW;GAC5B,IAAI,OAAO,MAAM,UAAU,YAAY,MAAM,MAAM,KAAK,MAAM,IAAI;GAClE,QAAQ;IACN,MAAM;IACN,OAAO,MAAM;IACb,MAAM,OAAO,IAAI,KAAK;GACxB;EACF,OAAO,IAAI,MAAM,SAAS,0BAA0B;GAClD,MAAM,aAAa,UAAU,OAAO,YAAY;GAChD,QAAQ,CAAC,cAAc,WAAW,SAAS,uBAAuB;IAAE,MAAM;IAAS,MAAM,OAAO,IAAI,KAAK;GAAE,IAAI,aAAa,IAAI,UAAU;EAC5I,OAAO,IAAI,MAAM,SAAS,gBAAgB,MAAM,SAAS,eAAe;GACtE,QAAQ;IAAE,MAAM;IAAW,MAAM,OAAO,IAAI,KAAK;GAAE;EACrD,OAAO;GACL,SAAS,KACP,aACE,2BACA,OAAO,IAAI,KAAK,GAChB,aAAa,MAAM,KAAK,sBAC1B,CACF;GACA;EACF;EACA,QAAQ,KAAK;GAAE,MAAM;GAAS,MAAM,OAAO,IAAI,KAAK;GAAG;EAAM,CAAC;CAChE;CACA,OAAO,QAAQ,MAAM,MAAM,UAAU,KAAK,KAAK,QAAQ,MAAM,KAAK,KAAK;AACzE;AACA,SAAS,aAAa,UAAU;CAC9B,IAAI,SAAS,aAAa,MAAM,OAAO;CACvC,MAAM,MAAM,UAAU,UAAU,KAAK;CACrC,MAAM,OAAO,eAAe,GAAG;CAC/B,IAAI,MAAM,OAAO;CACjB,MAAM,UAAU,cAAc,GAAG;CACjC,OAAO,OAAO,YAAY,YAAY,OAAO,YAAY,WAAW,OAAO,OAAO,IAAI;AACxF;AACA,SAAS,oBAAoB,IAAI,SAAS,MAAM,UAAU;CACxD,MAAM,WAAW,KAAK,SAAS,oBAAoB,KAAK,WAAW;CACnE,IAAI,MAAM,QAAQ,QAAQ,KAAK,SAAS,MAAM,UAAU,UAAU,QAAQ,CAAC,UAAU,KAAK,CAAC,GAAG;EAC5F,SAAS,KACP,aACE,2BACA,OAAO,IAAI,IAAI,GACf,sEACF,CACF;EACA,OAAO,CAAC;CACV;CACA,MAAM,QAAQ,MAAM,QAAQ,QAAQ,IAAI,SAAS,OAAO,SAAS,IAAI,CAAC,IAAI;CAC1E,OAAO,MAAM,SAAS,UAAU;EAC9B,IAAI,MAAM,SAAS,iBAAiB;GAClC,SAAS,KACP,aACE,2BACA,OAAO,IAAI,KAAK,GAChB,8CACF,CACF;GACA,OAAO,CAAC;EACV;EACA,IAAI,MAAM,SAAS,oBAAoB,YAAY,SAAS,KAAK,GAAG;GAClE,OAAO,CACL;IACE,MAAM;IACN,MAAM,OAAO,IAAI,KAAK;IACtB,OAAO;KAAE,MAAM;KAAW,MAAM,OAAO,IAAI,KAAK;IAAE;GACpD,CACF;EACF;EACA,OAAO,CAAC;GAAE,MAAM;GAAS,MAAM,OAAO,IAAI,KAAK;GAAG,OAAO,aAAa,IAAI,KAAK;EAAE,CAAC;CACpF,CAAC;AACH;AACA,SAAS,cAAc,IAAI,SAAS,QAAQ,UAAU;CACpD,MAAM,UAAU,CAAC;CACjB,KAAK,MAAM,YAAY,WAAW,QAAQ,YAAY,GAAG;EACvD,IAAI,SAAS,SAAS,iBAAiB;GACrC,MAAM,WAAW,UAAU,UAAU,UAAU;GAC/C,IAAI,UAAU;IACZ,MAAM,SAAS;KACb,MAAM;KACN,MAAM,OAAO,IAAI,QAAQ;KACzB,OAAO,oBAAoB,IAAI,QAAQ;IACzC;IACA,QAAQ,KAAK,MAAM;GACrB;GACA;EACF;EACA,IAAI,SAAS,SAAS,cAAc,SAAS,SAAS,kBAAkB;GACtE,SAAS,KACP,aACE,8BACA,OAAO,IAAI,QAAQ,GACnB,uBAAuB,SAAS,KAAK,wBACvC,CACF;GACA;EACF;EACA,MAAM,OAAO,aAAa,QAAQ;EAClC,MAAM,YAAY,UAAU,UAAU,OAAO;EAC7C,IAAI,CAAC,QAAQ,CAAC,WAAW;GACvB,SAAS,KACP,aACE,8BACA,OAAO,IAAI,QAAQ,GACnB,yDACF,CACF;GACA;EACF;EACA,IAAI,SAAS,YAAY;GACvB,QAAQ,KAAK,GAAG,oBAAoB,IAAI,SAAS,WAAW,QAAQ,CAAC;GACrE;EACF;EACA,MAAM,OAAO;GACX,MAAM;GACN;GACA,MAAM,OAAO,IAAI,QAAQ;GACzB,OAAO,aAAa,IAAI,SAAS;EACnC;EACA,QAAQ,KAAK,IAAI;CACnB;CACA,OAAO;AACT;AACA,SAAS,YAAY,SAAS,MAAM;CAClC,MAAM,SAAS,UAAU,MAAM,QAAQ;CACvC,IAAI,CAAC,QAAQ,OAAO;CACpB,MAAM,aAAa,eAAe,MAAM;CACxC,IAAI,YAAY;EACd,MAAM,cAAc,cAAc,SAAS,UAAU;EACrD,IAAI,aAAa,WAAW,wBAAwB,YAAY,aAAa,SAAS,YAAY,aAAa,SAAS;GACtH,OAAO,EAAE,MAAM,cAAc;EAC/B;EACA,IAAI,aAAa,WAAW,WAAW,YAAY,aAAa,iBAAiB;GAC/E,OAAO,EAAE,MAAM,iBAAiB;EAClC;CACF;CACA,IAAI,OAAO,SAAS,sBAAsB,OAAO,aAAa,MAAM,OAAO;CAC3E,MAAM,aAAa,eAAe,UAAU,QAAQ,QAAQ,CAAC;CAC7D,MAAM,gBAAgB,eAAe,UAAU,QAAQ,UAAU,CAAC;CAClE,IAAI,kBAAkB,mBAAmB,CAAC,YAAY,OAAO;CAC7D,MAAM,aAAa,cAAc,SAAS,UAAU;CACpD,OAAO,YAAY,WAAW,YAAY,WAAW,aAAa,aAAa,WAAW,aAAa,OAAO,EAAE,MAAM,iBAAiB,IAAI;AAC7I;AACA,SAAS,wBAAwB,WAAW,IAAI,SAAS,SAAS,MAAM,SAAS,UAAU;CACzF,MAAM,eAAe,SAAS;CAC9B,MAAM,OAAO,WAAW,MAAM,WAAW;CACzC,MAAM,SAAS,KAAK;CACpB,IAAI,CAAC,QAAQ;EACX,SAAS,KACP,aACE,8BACA,OAAO,IAAI,IAAI,GACf,GAAG,QAAQ,KAAK,4BAClB,CACF;EACA,OAAO;CACT;CACA,MAAM,YAAY,kBAAkB,WAAW,IAAI,SAAS,SAAS,QAAQ,QAAQ;CACrF,IAAI,CAAC,WAAW,OAAO;CACvB,MAAM,UAAU,CAAC;CACjB,MAAM,QAAQ,KAAK;CACnB,IAAI,SAAS,cAAc,KAAK,MAAM,MAAM;EAC1C,IAAI,MAAM,SAAS,oBAAoB;GACrC,QAAQ,KAAK,GAAG,cAAc,IAAI,SAAS,OAAO,QAAQ,CAAC;EAC7D,OAAO;GACL,QAAQ,KAAK;IACX,MAAM;IACN,MAAM,OAAO,IAAI,KAAK;IACtB,OAAO,oBAAoB,IAAI,KAAK;GACtC,CAAC;EACH;CACF;CACA,IAAI,QAAQ,SAAS,kBAAkB;EACrC,KAAK,MAAM,SAAS,KAAK,MAAM,CAAC,GAAG;GACjC,QAAQ,KAAK,GAAG,oBAAoB,IAAI,SAAS,OAAO,QAAQ,CAAC;EACnE;CACF;CACA,OAAO,gBACL;EACE,MAAM;EACN,MAAM,QAAQ;EACd;EACA,MAAM,OAAO,IAAI,IAAI;EACrB,WAAW,QAAQ,OAAO,IAAI,KAAK,IAAI;EACvC;CACF,GACA,QAAQ,MAAM,MAAM,UAAU,KAAK,KAAK,QAAQ,MAAM,KAAK,KAAK,GAChE,SAAS,MAAM,YAAY,CAC7B;AACF;AACA,SAAS,kBAAkB,WAAW,IAAI,SAAS,SAAS,UAAU;CACpE,MAAM,cAAc,CAAC;CACrB,QAAQ,UAAU,SAAS;EACzB,IAAI,KAAK,SAAS,sBAAsB;EACxC,MAAM,aAAa,UAAU,MAAM,IAAI;EACvC,MAAM,OAAO,eAAe,UAAU;EACtC,MAAM,OAAO,UAAU,MAAM,MAAM;EACnC,IAAI,CAAC,QAAQ,CAAC,cAAc,MAAM,SAAS,kBAAkB;EAC7D,MAAM,SAAS,UAAU,MAAM,QAAQ;EACvC,MAAM,cAAc,UAAU,eAAe,MAAM;EACnD,IAAI,CAAC,aAAa;EAClB,MAAM,UAAU,cAAc,SAAS,WAAW;EAClD,IAAI,CAAC,WAAW,QAAQ,aAAa,UAAU;EAC/C,MAAM,UAAU,qBAAqB,SAAS,QAAQ,QAAQ,QAAQ,QAAQ;EAC9E,IAAI,CAAC,SAAS;EACd,MAAM,qBAAqB,CAAC;EAC5B,MAAM,OAAO,WAAW,MAAM,WAAW;EACzC,MAAM,WAAW,KAAK;EACtB,MAAM,aAAa,KAAK,EAAE,EAAE,SAAS;EACrC,MAAM,cAAc,aAAa,KAAK,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,KAAK;EAC7E,IAAI,CAAC,YAAY,CAAC,aAAa;GAC7B,mBAAmB,KACjB,aACE,uCACA,OAAO,IAAI,IAAI,GACf,qBAAqB,KAAK,wCAC5B,CACF;GACA,SAAS,KAAK,GAAG,kBAAkB;GACnC;EACF;EACA,MAAM,OAAO,kBACX,WACA,IACA,SACA,SACA,UACA,kBACF;EACA,IAAI,CAAC,MAAM;GACT,SAAS,KAAK,GAAG,kBAAkB;GACnC;EACF;EACA,MAAM,gBAAgB,aAAa,OAAO,KAAK,UAAU,IAAI,KAAK,KAAK;EACvE,MAAM,mBAAmB,cAAc,KAAK,UAAU,IAAI,KAAK,KAAK;EACpE,MAAM,iBAAiB;GACrB,MAAM;GACN;GACA;GACA,MAAM,OAAO,IAAI,IAAI;GACrB,gBAAgB,OAAO,IAAI,UAAU;GACrC;GACA;GACA,eAAe,gBAAgB,aAAa,IAAI,aAAa,IAAI;GACjE,SAAS,oBAAoB,IAAI,WAAW;GAC5C,cAAc,mBAAmB,oBAAoB,IAAI,gBAAgB,IAAI;EAC/E;EACA,YAAY,KACV,mBAAmB,WAAW,IAAI;GAAE,GAAG;GAAgB,UAAU;GAAM,UAAU,CAAC;EAAE,IAAI;GACtF,GAAG;GACH,UAAU;GACV,UAAU;EACZ,CACF;EACA,SAAS,KAAK,GAAG,kBAAkB;CACrC,CAAC;CACD,OAAO,YAAY,MAAM,MAAM,UAAU,KAAK,KAAK,QAAQ,MAAM,KAAK,KAAK;AAC7E;AACA,MAAM,sCAAsC,IAAI,IAAI;CAClD;CACA;CACA;AACF,CAAC;AACD,MAAM,kCAAkC,IAAI,IAAI;CAC9C,GAAG;CACH;CACA;CACA;AACF,CAAC;AACD,SAAS,oBAAoB,IAAI,SAAS,SAAS;CACjD,MAAM,cAAc,CAAC;CACrB,QAAQ,UAAU,SAAS;EACzB,IAAI,KAAK,SAAS,sBAAsB;EACxC,MAAM,aAAa,UAAU,MAAM,IAAI;EACvC,MAAM,OAAO,eAAe,UAAU;EACtC,MAAM,OAAO,UAAU,MAAM,MAAM;EACnC,IAAI,CAAC,QAAQ,CAAC,cAAc,MAAM,SAAS,kBAAkB;EAC7D,MAAM,SAAS,UAAU,MAAM,QAAQ;EACvC,MAAM,cAAc,UAAU,eAAe,MAAM;EACnD,IAAI,CAAC,aAAa;EAClB,MAAM,UAAU,cAAc,SAAS,WAAW;EAClD,IAAI,CAAC,WAAW,QAAQ,aAAa,WAAW,CAAC,gBAAgB,IAAI,QAAQ,MAAM,GAAG;GACpF;EACF;EACA,MAAM,UAAU,qBAAqB,SAAS,QAAQ,QAAQ,QAAQ,QAAQ;EAC9E,MAAM,QAAQ,WAAW,MAAM,WAAW,CAAC,CAAC;EAC5C,IAAI,CAAC,WAAW,CAAC,OAAO;EACxB,YAAY,KAAK;GACf,MAAM;GACN;GACA;GACA,MAAM,OAAO,IAAI,IAAI;GACrB,gBAAgB,OAAO,IAAI,UAAU;GACrC;GACA,OAAO,oBAAoB,IAAI,KAAK;EACtC,CAAC;CACH,CAAC;CACD,OAAO,YAAY,MAAM,MAAM,UAAU,KAAK,KAAK,QAAQ,MAAM,KAAK,KAAK;AAC7E;AACA,SAAS,iBAAiB,WAAW,IAAI,SAAS,MAAM;CACtD,IAAI,OAAO;CACX,IAAI,KAAK,SAAS,cAAc;EAC9B,MAAM,OAAO,eAAe,IAAI;EAChC,MAAM,aAAa,OAAO,UAAU,aAAa,IAAI,IAAI,IAAI;EAC7D,IAAI,CAAC,YAAY,YAAY,CAAC,WAAW,aAAa,OAAO;EAC7D,OAAO,WAAW;CACpB;CACA,IAAI,KAAK,SAAS,kBAAkB,OAAO;CAC3C,MAAM,SAAS,UAAU,MAAM,QAAQ;CACvC,MAAM,cAAc,UAAU,eAAe,MAAM;CACnD,IAAI,CAAC,aAAa,OAAO;CACzB,MAAM,UAAU,cAAc,SAAS,WAAW;CAClD,IAAI,CAAC,WAAW,QAAQ,aAAa,WAAW,CAAC,gBAAgB,IAAI,QAAQ,MAAM,GAAG;EACpF,OAAO;CACT;CACA,OAAO,WAAW,MAAM,WAAW,CAAC,CAAC,MAAM;AAC7C;AACA,SAAS,gBAAgB,WAAW,IAAI,SAAS,MAAM;CACrD,IAAI,KAAK,SAAS,qBAAqB,CAAC,MAAM,QAAQ,KAAK,QAAQ,GAAG;EACpE,MAAM,WAAW,iBAAiB,WAAW,IAAI,SAAS,IAAI;EAC9D,OAAO,WAAW;GAChB,MAAM;GACN,MAAM,OAAO,IAAI,IAAI;GACrB,OAAO,CAAC;IAAE,WAAW;IAAM,OAAO,oBAAoB,IAAI,QAAQ;GAAE,CAAC;EACvE,IAAI;CACN;CACA,MAAM,QAAQ,CAAC;CACf,KAAK,MAAM,WAAW,KAAK,UAAU;EACnC,IAAI,CAAC,UAAU,OAAO,GAAG,OAAO;EAChC,IAAI,OAAO;EACX,IAAI,YAAY;EAChB,IAAI,KAAK,SAAS,uBAAuB,KAAK,aAAa,MAAM;GAC/D,MAAM,OAAO,UAAU,MAAM,MAAM;GACnC,MAAM,QAAQ,UAAU,MAAM,OAAO;GACrC,IAAI,CAAC,QAAQ,CAAC,OAAO,OAAO;GAC5B,YAAY,oBAAoB,IAAI,IAAI;GACxC,OAAO;EACT;EACA,MAAM,WAAW,iBAAiB,WAAW,IAAI,SAAS,IAAI;EAC9D,IAAI,CAAC,UAAU;GACb,MAAM,cAAc,cAAc,IAAI;GACtC,IAAI,gBAAgB,SAAS,gBAAgB,MAAM;GACnD,OAAO;EACT;EACA,MAAM,KAAK;GAAE;GAAW,OAAO,oBAAoB,IAAI,QAAQ;EAAE,CAAC;CACpE;CACA,OAAO;EAAE,MAAM;EAAa,MAAM,OAAO,IAAI,IAAI;EAAG;CAAM;AAC5D;AACA,SAAS,kBAAkB,WAAW,OAAO,UAAU,CAAC,GAAG;CACzD,MAAM,KAAK,iBAAiB,KAAK;CACjC,MAAM,UAAU,UAAU,UAAU,EAAE;CACtC,MAAM,WAAW,CAAC;CAClB,MAAM,WAAW,CAAC;CAClB,QAAQ,UAAU,SAAS;EACzB,IAAI,KAAK,SAAS,cAAc;GAC9B,MAAM,eAAe,SAAS;GAC9B,MAAM,UAAU,UAAU,MAAM,gBAAgB;GAChD,MAAM,SAAS,WAAW,iBAAiB,OAAO;GAClD,IAAI,CAAC,WAAW,CAAC,QAAQ;GACzB,MAAM,YAAY,kBAChB,WACA,IACA,SACA,SACA,QACA,QACF;GACA,IAAI,CAAC,WAAW;GAChB,MAAM,iBAAiB,UAAU,MAAM,gBAAgB;GACvD,MAAM,cAAc,kBAAkB,UAAU,gBAAgB,MAAM;GACtE,IAAI,aAAa,UAAU,cAAc,OAAO,IAAI,WAAW;GAC/D,MAAM,UAAU,WAAW,IAAI,MAAM,SAAS,QAAQ;GACtD,KAAK,MAAM,SAAS,SAAS;IAC3B,IAAI,MAAM,SAAS,UAAU,MAAM,SAAS,SAAS;IACrD,MAAM,MAAM,MAAM,MAAM,SAAS,eAAe,WAAW,SAAS,MAAM,MAAM,OAAO,MAAM,MAAM,GAAG,IAAI;IAC1G,MAAM,eAAe,OAAO,gBAAgB,WAAW,IAAI,SAAS,GAAG;IACvE,MAAM,WAAW,OAAO,iBAAiB,WAAW,IAAI,SAAS,GAAG;IACpE,IAAI,cAAc,MAAM,QAAQ;SAC3B,IAAI,UAAU,MAAM,QAAQ,oBAAoB,IAAI,QAAQ;GACnE;GACA,SAAS,KACP,gBACE;IACE,MAAM;IACN,MAAM;IACN;IACA,MAAM,OAAO,IAAI,IAAI;IACrB,WAAW,OAAO,IAAI,OAAO;IAC7B;GACF,GACA,SACA,SAAS,MAAM,YAAY,CAC7B,CACF;GACA;EACF;EACA,IAAI,KAAK,SAAS,kBAAkB;EACpC,MAAM,UAAU,YAAY,SAAS,IAAI;EACzC,IAAI,CAAC,SAAS;EACd,MAAM,UAAU,wBACd,WACA,IACA,SACA,SACA,MACA,SACA,QACF;EACA,IAAI,SAAS;GACX,MAAM,UAAU,QAAQ,WAAW,QAAQ,UAAU,QAAQ;GAC7D,KAAK,MAAM,SAAS,SAAS;IAC3B,IAAI,MAAM,SAAS,UAAU,MAAM,SAAS,SAAS;IACrD,MAAM,MAAM,MAAM,MAAM,SAAS,eAAe,WAAW,SAAS,MAAM,MAAM,OAAO,MAAM,MAAM,GAAG,IAAI;IAC1G,MAAM,eAAe,OAAO,gBAAgB,WAAW,IAAI,SAAS,GAAG;IACvE,MAAM,WAAW,OAAO,iBAAiB,WAAW,IAAI,SAAS,GAAG;IACpE,IAAI,cAAc,MAAM,QAAQ;SAC3B,IAAI,UAAU,MAAM,QAAQ,oBAAoB,IAAI,QAAQ;GACnE;GACA,SAAS,KAAK,OAAO;EACvB;CACF,CAAC;CACD,OAAO;EACL,UAAU,SAAS,MAAM,MAAM,UAAU,KAAK,KAAK,QAAQ,MAAM,KAAK,KAAK;EAC3E,mBAAmB,kBAAkB,WAAW,IAAI,SAAS,SAAS,QAAQ;EAC9E,qBAAqB,oBAAoB,IAAI,SAAS,OAAO;EAC7D,UAAU,SAAS,MAAM,MAAM,UAAU,KAAK,KAAK,QAAQ,MAAM,KAAK,KAAK;CAC7E;AACF;AACA,SAAS,mBAAmB,SAAS,MAAM;CACzC,OAAO,YAAY,UAAU,SAAS;EACpC,IAAI,KAAK,SAAS,sBAAsB,OAAO;EAC/C,OAAO,eAAe,UAAU,MAAM,IAAI,CAAC,MAAM;CACnD,CAAC;AACH;AACA,SAAS,WAAW,SAAS,OAAO,KAAK;CACvC,OAAO,YAAY,UAAU,SAAS,KAAK,UAAU,SAAS,KAAK,QAAQ,GAAG;AAChF;AACA,SAAS,UAAU,OAAO,OAAO;CAC/B,IAAI,CAAC,UAAU,KAAK,GAAG,MAAM,IAAI,MAAM,GAAG,MAAM,oBAAoB;CACpE,OAAO;AACT"}
|
package/dist/esm/planCache.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { randomBytes } from "node:crypto";
|
|
1
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
2
|
+
import { readFileSync, statSync } from "node:fs";
|
|
2
3
|
import { mkdir, readFile, readdir, rename, stat, unlink, writeFile } from "node:fs/promises";
|
|
3
4
|
import { dirname, join } from "node:path";
|
|
4
5
|
import { contentHash, stableStringify } from "./hash.mjs";
|
|
@@ -13,10 +14,47 @@ function tamaguiCacheRoot(projectRoot) {
|
|
|
13
14
|
function defaultPlanCacheRoot(projectRoot, target) {
|
|
14
15
|
return join(tamaguiCacheRoot(projectRoot), "plans", target);
|
|
15
16
|
}
|
|
16
|
-
function moduleClosureNode(input) {
|
|
17
|
+
function moduleClosureNode(input, options) {
|
|
17
18
|
return {
|
|
18
19
|
contentHash: moduleContentHash(input),
|
|
19
|
-
dependencies: input.imports.filter(({ external }) => !external).map(({ resolvedId }) => resolvedId)
|
|
20
|
+
dependencies: input.imports.filter(({ external }) => options?.includeExternal || !external).map(({ resolvedId }) => resolvedId)
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function createExternalClosureLookup() {
|
|
24
|
+
const memo = /* @__PURE__ */ new Map();
|
|
25
|
+
return (id) => {
|
|
26
|
+
const file = id.split(/[?#]/, 1)[0];
|
|
27
|
+
if (!file.startsWith("/") && !/^[A-Za-z]:[\\/]/.test(file)) {
|
|
28
|
+
return {
|
|
29
|
+
contentHash: "external",
|
|
30
|
+
dependencies: []
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const stat2 = statSync(file);
|
|
35
|
+
const cached = memo.get(file);
|
|
36
|
+
if (cached && cached.size === stat2.size && cached.mtimeMs === stat2.mtimeMs) {
|
|
37
|
+
return {
|
|
38
|
+
contentHash: cached.contentHash,
|
|
39
|
+
dependencies: []
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const hash = createHash("sha256").update(readFileSync(file)).digest("hex");
|
|
43
|
+
memo.set(file, {
|
|
44
|
+
size: stat2.size,
|
|
45
|
+
mtimeMs: stat2.mtimeMs,
|
|
46
|
+
contentHash: hash
|
|
47
|
+
});
|
|
48
|
+
return {
|
|
49
|
+
contentHash: hash,
|
|
50
|
+
dependencies: []
|
|
51
|
+
};
|
|
52
|
+
} catch {
|
|
53
|
+
return {
|
|
54
|
+
contentHash: "external",
|
|
55
|
+
dependencies: []
|
|
56
|
+
};
|
|
57
|
+
}
|
|
20
58
|
};
|
|
21
59
|
}
|
|
22
60
|
function moduleClosureDigest(id, lookup, memo) {
|
|
@@ -190,5 +228,5 @@ var ModulePlanCache = class {
|
|
|
190
228
|
}
|
|
191
229
|
};
|
|
192
230
|
|
|
193
|
-
export { JsonFileCache, ModulePlanCache, PLAN_CACHE_MAX_ENTRIES, PLAN_CACHE_SCHEMA_VERSION, defaultPlanCacheRoot, moduleClosureDigest, moduleClosureNode, planCacheKey, tamaguiCacheRoot };
|
|
231
|
+
export { JsonFileCache, ModulePlanCache, PLAN_CACHE_MAX_ENTRIES, PLAN_CACHE_SCHEMA_VERSION, createExternalClosureLookup, defaultPlanCacheRoot, moduleClosureDigest, moduleClosureNode, planCacheKey, tamaguiCacheRoot };
|
|
194
232
|
//# sourceMappingURL=planCache.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planCache.js","names":["#hits","#misses","#writes","#path","#created","#writesSincePrune","#prunedThisProcess","#prune","#files"],"sources":["esm/planCache.js"],"sourcesContent":["import { randomBytes } from \"node:crypto\";\nimport {\n mkdir,\n readdir,\n readFile,\n rename,\n stat,\n unlink,\n writeFile\n} from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { contentHash, stableStringify } from \"./hash\";\nimport { LOWERED_MODULE_PLAN_VERSION } from \"./lower\";\nimport { moduleContentHash } from \"./graph\";\nconst PLAN_CACHE_SCHEMA_VERSION = 1;\nconst PLAN_CACHE_MAX_ENTRIES = 2e4;\nfunction tamaguiCacheRoot(projectRoot) {\n return join(projectRoot, \"node_modules\", \".cache\", \"tamagui\");\n}\nfunction defaultPlanCacheRoot(projectRoot, target) {\n return join(tamaguiCacheRoot(projectRoot), \"plans\", target);\n}\nfunction moduleClosureNode(input) {\n return {\n contentHash: moduleContentHash(input),\n dependencies: input.imports.filter(({ external }) => !external).map(({ resolvedId }) => resolvedId)\n };\n}\nfunction moduleClosureDigest(id, lookup, memo) {\n const cached = memo?.get(id);\n if (cached !== void 0) return cached;\n const reached = /* @__PURE__ */ new Map();\n const queue = [id];\n let complete = true;\n while (queue.length) {\n const current = queue.pop();\n if (reached.has(current)) continue;\n const node = lookup(current);\n if (!node) {\n complete = false;\n break;\n }\n reached.set(current, node.contentHash);\n for (const dependency of node.dependencies) queue.push(dependency);\n }\n const digest = complete ? contentHash(\n [...reached].sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).map(([current, hash]) => `${current}\\0${hash}`).join(\"\\0\")\n ) : null;\n memo?.set(id, digest);\n return digest;\n}\nfunction planCacheKey(identity, id, closureDigest) {\n return contentHash(\n stableStringify({\n schema: PLAN_CACHE_SCHEMA_VERSION,\n plan: LOWERED_MODULE_PLAN_VERSION,\n stamp: identity.stamp,\n target: identity.target,\n structuralPassHash: identity.structuralPassHash,\n id,\n closureDigest\n })\n );\n}\nclass JsonFileCache {\n constructor(root, schemaVersion, maxEntries = PLAN_CACHE_MAX_ENTRIES) {\n this.root = root;\n this.schemaVersion = schemaVersion;\n this.maxEntries = maxEntries;\n }\n root;\n schemaVersion;\n maxEntries;\n #hits = 0;\n #misses = 0;\n #writes = 0;\n #writesSincePrune = 0;\n #prunedThisProcess = false;\n #created = /* @__PURE__ */ new Set();\n get stats() {\n return { hits: this.#hits, misses: this.#misses, writes: this.#writes };\n }\n resetStats() {\n this.#hits = 0;\n this.#misses = 0;\n this.#writes = 0;\n }\n #path(key) {\n return join(this.root, `v${this.schemaVersion}`, key.slice(0, 2), `${key}.json`);\n }\n /**\n * Null on anything short of an entry `validate` fully accepts. A miss\n * recompiles; nothing here repairs or partially trusts an entry, and a later\n * successful compile overwrites the bad file.\n */\n async read(key, validate) {\n let parsed;\n try {\n parsed = JSON.parse(await readFile(this.#path(key), \"utf8\"));\n } catch {\n this.#misses++;\n return null;\n }\n const entry = validate(parsed);\n if (entry === null) {\n this.#misses++;\n return null;\n }\n this.#hits++;\n return entry;\n }\n async write(key, value) {\n const path = this.#path(key);\n const directory = dirname(path);\n if (!this.#created.has(directory)) {\n await mkdir(directory, { recursive: true });\n this.#created.add(directory);\n }\n const temporaryPath = `${path}.${process.pid}-${randomBytes(6).toString(\"hex\")}.tmp`;\n await writeFile(temporaryPath, `${stableStringify(value)}\n`, \"utf8\");\n await rename(temporaryPath, path);\n this.#writes++;\n this.#writesSincePrune++;\n const batch = Math.max(1, Math.floor(this.maxEntries / 4));\n if (!this.#prunedThisProcess || this.#writesSincePrune >= batch) {\n this.#prunedThisProcess = true;\n this.#writesSincePrune = 0;\n await this.#prune();\n }\n }\n /**\n * Drops the oldest entries once the store exceeds its cap, oldest by the later\n * of read and write time so an entry a build keeps hitting is not treated as\n * dead on filesystems that maintain access times.\n */\n async #prune() {\n const versionRoot = join(this.root, `v${this.schemaVersion}`);\n let shards;\n try {\n shards = await readdir(versionRoot);\n } catch {\n return;\n }\n const paths = [];\n for (const shard of shards) {\n const directory = join(versionRoot, shard);\n let files;\n try {\n files = await readdir(directory);\n } catch {\n continue;\n }\n for (const file of files) {\n if (file.endsWith(\".json\")) paths.push(join(directory, file));\n }\n }\n if (paths.length <= this.maxEntries) return;\n const entries = [];\n for (const path of paths) {\n try {\n const stats = await stat(path);\n entries.push({ path, usedAt: Math.max(stats.atimeMs, stats.mtimeMs) });\n } catch {\n }\n }\n entries.sort((left, right) => left.usedAt - right.usedAt);\n for (const entry of entries.slice(0, Math.max(0, entries.length - this.maxEntries))) {\n await unlink(entry.path).catch(() => {\n });\n }\n }\n}\nclass ModulePlanCache {\n constructor(root) {\n this.root = root;\n this.#files = new JsonFileCache(root, PLAN_CACHE_SCHEMA_VERSION);\n }\n root;\n #files;\n get stats() {\n return this.#files.stats;\n }\n resetStats() {\n this.#files.resetStats();\n }\n read(key, id, closureDigest) {\n return this.#files.read(key, (value) => {\n const entry = value;\n const plan = entry?.plan;\n return entry?.schemaVersion === PLAN_CACHE_SCHEMA_VERSION && entry.moduleId === id && entry.closureDigest === closureDigest && plan && plan.version === LOWERED_MODULE_PLAN_VERSION && plan.id === id && typeof plan.sourceHash === \"string\" && typeof plan.css === \"string\" && Array.isArray(plan.edits) && Array.isArray(plan.diagnostics) && Array.isArray(plan.dependencies) && !!plan.stats ? entry : null;\n });\n }\n write(key, entry) {\n return this.#files.write(key, entry);\n }\n}\nexport {\n JsonFileCache,\n ModulePlanCache,\n PLAN_CACHE_MAX_ENTRIES,\n PLAN_CACHE_SCHEMA_VERSION,\n defaultPlanCacheRoot,\n moduleClosureDigest,\n moduleClosureNode,\n planCacheKey,\n tamaguiCacheRoot\n};\n//# sourceMappingURL=planCache.js.map\n"],"mappings":";;;;;;;;AAcA,MAAM,4BAA4B;AAClC,MAAM,yBAAyB;AAC/B,SAAS,iBAAiB,aAAa;CACrC,OAAO,KAAK,aAAa,gBAAgB,UAAU,SAAS;AAC9D;AACA,SAAS,qBAAqB,aAAa,QAAQ;CACjD,OAAO,KAAK,iBAAiB,WAAW,GAAG,SAAS,MAAM;AAC5D;AACA,SAAS,kBAAkB,OAAO;CAChC,OAAO;EACL,aAAa,kBAAkB,KAAK;EACpC,cAAc,MAAM,QAAQ,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,iBAAiB,UAAU;CACpG;AACF;AACA,SAAS,oBAAoB,IAAI,QAAQ,MAAM;CAC7C,MAAM,SAAS,MAAM,IAAI,EAAE;CAC3B,IAAI,WAAW,KAAK,GAAG,OAAO;CAC9B,MAAM,0BAA0B,IAAI,IAAI;CACxC,MAAM,QAAQ,CAAC,EAAE;CACjB,IAAI,WAAW;CACf,OAAO,MAAM,QAAQ;EACnB,MAAM,UAAU,MAAM,IAAI;EAC1B,IAAI,QAAQ,IAAI,OAAO,GAAG;EAC1B,MAAM,OAAO,OAAO,OAAO;EAC3B,IAAI,CAAC,MAAM;GACT,WAAW;GACX;EACF;EACA,QAAQ,IAAI,SAAS,KAAK,WAAW;EACrC,KAAK,MAAM,cAAc,KAAK,cAAc,MAAM,KAAK,UAAU;CACnE;CACA,MAAM,SAAS,WAAW,YACxB,CAAC,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,OAAO,QAAQ,CAAC,IAAI,OAAO,QAAQ,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,UAAU,GAAG,QAAQ,IAAI,MAAM,CAAC,CAAC,KAAK,IAAI,CAC5I,IAAI;CACJ,MAAM,IAAI,IAAI,MAAM;CACpB,OAAO;AACT;AACA,SAAS,aAAa,UAAU,IAAI,eAAe;CACjD,OAAO,YACL,gBAAgB;EACd;EACA,MAAM;EACN,OAAO,SAAS;EAChB,QAAQ,SAAS;EACjB,oBAAoB,SAAS;EAC7B;EACA;CACF,CAAC,CACH;AACF;AACA,IAAM,gBAAN,MAAoB;CAClB,YAAY,MAAM,eAAe,aAAa,wBAAwB;EACpE,KAAK,OAAO;EACZ,KAAK,gBAAgB;EACrB,KAAK,aAAa;CACpB;CACA;CACA;CACA;CACA,QAAQ;CACR,UAAU;CACV,UAAU;CACV,oBAAoB;CACpB,qBAAqB;CACrB,2BAA2B,IAAI,IAAI;CACnC,IAAI,QAAQ;EACV,OAAO;GAAE,MAAM,KAAKA;GAAO,QAAQ,KAAKC;GAAS,QAAQ,KAAKC;EAAQ;CACxE;CACA,aAAa;EACX,KAAKF,QAAQ;EACb,KAAKC,UAAU;EACf,KAAKC,UAAU;CACjB;CACA,MAAM,KAAK;EACT,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,iBAAiB,IAAI,MAAM,GAAG,CAAC,GAAG,GAAG,IAAI,MAAM;CACjF;;;;;;CAMA,MAAM,KAAK,KAAK,UAAU;EACxB,IAAI;EACJ,IAAI;GACF,SAAS,KAAK,MAAM,MAAM,SAAS,KAAKC,MAAM,GAAG,GAAG,MAAM,CAAC;EAC7D,QAAQ;GACN,KAAKF;GACL,OAAO;EACT;EACA,MAAM,QAAQ,SAAS,MAAM;EAC7B,IAAI,UAAU,MAAM;GAClB,KAAKA;GACL,OAAO;EACT;EACA,KAAKD;EACL,OAAO;CACT;CACA,MAAM,MAAM,KAAK,OAAO;EACtB,MAAM,OAAO,KAAKG,MAAM,GAAG;EAC3B,MAAM,YAAY,QAAQ,IAAI;EAC9B,IAAI,CAAC,KAAKC,SAAS,IAAI,SAAS,GAAG;GACjC,MAAM,MAAM,WAAW,EAAE,WAAW,KAAK,CAAC;GAC1C,KAAKA,SAAS,IAAI,SAAS;EAC7B;EACA,MAAM,gBAAgB,GAAG,KAAK,GAAG,QAAQ,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,SAAS,KAAK,EAAE;EAC/E,MAAM,UAAU,eAAe,GAAG,gBAAgB,KAAK,EAAE;GAC1D,MAAM;EACL,MAAM,OAAO,eAAe,IAAI;EAChC,KAAKF;EACL,KAAKG;EACL,MAAM,QAAQ,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,aAAa,CAAC,CAAC;EACzD,IAAI,CAAC,KAAKC,sBAAsB,KAAKD,qBAAqB,OAAO;GAC/D,KAAKC,qBAAqB;GAC1B,KAAKD,oBAAoB;GACzB,MAAM,KAAKE,OAAO;EACpB;CACF;;;;;;CAMA,MAAMA,SAAS;EACb,MAAM,cAAc,KAAK,KAAK,MAAM,IAAI,KAAK,eAAe;EAC5D,IAAI;EACJ,IAAI;GACF,SAAS,MAAM,QAAQ,WAAW;EACpC,QAAQ;GACN;EACF;EACA,MAAM,QAAQ,CAAC;EACf,KAAK,MAAM,SAAS,QAAQ;GAC1B,MAAM,YAAY,KAAK,aAAa,KAAK;GACzC,IAAI;GACJ,IAAI;IACF,QAAQ,MAAM,QAAQ,SAAS;GACjC,QAAQ;IACN;GACF;GACA,KAAK,MAAM,QAAQ,OAAO;IACxB,IAAI,KAAK,SAAS,OAAO,GAAG,MAAM,KAAK,KAAK,WAAW,IAAI,CAAC;GAC9D;EACF;EACA,IAAI,MAAM,UAAU,KAAK,YAAY;EACrC,MAAM,UAAU,CAAC;EACjB,KAAK,MAAM,QAAQ,OAAO;GACxB,IAAI;IACF,MAAM,QAAQ,MAAM,KAAK,IAAI;IAC7B,QAAQ,KAAK;KAAE;KAAM,QAAQ,KAAK,IAAI,MAAM,SAAS,MAAM,OAAO;IAAE,CAAC;GACvE,QAAQ,CACR;EACF;EACA,QAAQ,MAAM,MAAM,UAAU,KAAK,SAAS,MAAM,MAAM;EACxD,KAAK,MAAM,SAAS,QAAQ,MAAM,GAAG,KAAK,IAAI,GAAG,QAAQ,SAAS,KAAK,UAAU,CAAC,GAAG;GACnF,MAAM,OAAO,MAAM,IAAI,CAAC,CAAC,YAAY,CACrC,CAAC;EACH;CACF;AACF;AACA,IAAM,kBAAN,MAAsB;CACpB,YAAY,MAAM;EAChB,KAAK,OAAO;EACZ,KAAKC,SAAS,IAAI,cAAc,OAA+B;CACjE;CACA;CACA;CACA,IAAI,QAAQ;EACV,OAAO,KAAKA,OAAO;CACrB;CACA,aAAa;EACX,KAAKA,OAAO,WAAW;CACzB;CACA,KAAK,KAAK,IAAI,eAAe;EAC3B,OAAO,KAAKA,OAAO,KAAK,MAAM,UAAU;GACtC,MAAM,QAAQ;GACd,MAAM,OAAO,OAAO;GACpB,OAAO,OAAO,uBAA+C,MAAM,aAAa,MAAM,MAAM,kBAAkB,iBAAiB,QAAQ,KAAK,YAAY,+BAA+B,KAAK,OAAO,MAAM,OAAO,KAAK,eAAe,YAAY,OAAO,KAAK,QAAQ,YAAY,MAAM,QAAQ,KAAK,KAAK,KAAK,MAAM,QAAQ,KAAK,WAAW,KAAK,MAAM,QAAQ,KAAK,YAAY,KAAK,CAAC,CAAC,KAAK,QAAQ,QAAQ;EAC7Y,CAAC;CACH;CACA,MAAM,KAAK,OAAO;EAChB,OAAO,KAAKA,OAAO,MAAM,KAAK,KAAK;CACrC;AACF"}
|
|
1
|
+
{"version":3,"file":"planCache.js","names":["#hits","#misses","#writes","#path","#created","#writesSincePrune","#prunedThisProcess","#prune","#files"],"sources":["esm/planCache.js"],"sourcesContent":["import { createHash, randomBytes } from \"node:crypto\";\nimport { readFileSync, statSync } from \"node:fs\";\nimport {\n mkdir,\n readdir,\n readFile,\n rename,\n stat,\n unlink,\n writeFile\n} from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { contentHash, stableStringify } from \"./hash\";\nimport { LOWERED_MODULE_PLAN_VERSION } from \"./lower\";\nimport { moduleContentHash } from \"./graph\";\nconst PLAN_CACHE_SCHEMA_VERSION = 1;\nconst PLAN_CACHE_MAX_ENTRIES = 2e4;\nfunction tamaguiCacheRoot(projectRoot) {\n return join(projectRoot, \"node_modules\", \".cache\", \"tamagui\");\n}\nfunction defaultPlanCacheRoot(projectRoot, target) {\n return join(tamaguiCacheRoot(projectRoot), \"plans\", target);\n}\nfunction moduleClosureNode(input, options) {\n return {\n contentHash: moduleContentHash(input),\n dependencies: input.imports.filter(({ external }) => options?.includeExternal || !external).map(({ resolvedId }) => resolvedId)\n };\n}\nfunction createExternalClosureLookup() {\n const memo = /* @__PURE__ */ new Map();\n return (id) => {\n const file = id.split(/[?#]/, 1)[0];\n if (!file.startsWith(\"/\") && !/^[A-Za-z]:[\\\\/]/.test(file)) {\n return { contentHash: \"external\", dependencies: [] };\n }\n try {\n const stat2 = statSync(file);\n const cached = memo.get(file);\n if (cached && cached.size === stat2.size && cached.mtimeMs === stat2.mtimeMs) {\n return { contentHash: cached.contentHash, dependencies: [] };\n }\n const hash = createHash(\"sha256\").update(readFileSync(file)).digest(\"hex\");\n memo.set(file, { size: stat2.size, mtimeMs: stat2.mtimeMs, contentHash: hash });\n return { contentHash: hash, dependencies: [] };\n } catch {\n return { contentHash: \"external\", dependencies: [] };\n }\n };\n}\nfunction moduleClosureDigest(id, lookup, memo) {\n const cached = memo?.get(id);\n if (cached !== void 0) return cached;\n const reached = /* @__PURE__ */ new Map();\n const queue = [id];\n let complete = true;\n while (queue.length) {\n const current = queue.pop();\n if (reached.has(current)) continue;\n const node = lookup(current);\n if (!node) {\n complete = false;\n break;\n }\n reached.set(current, node.contentHash);\n for (const dependency of node.dependencies) queue.push(dependency);\n }\n const digest = complete ? contentHash(\n [...reached].sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).map(([current, hash]) => `${current}\\0${hash}`).join(\"\\0\")\n ) : null;\n memo?.set(id, digest);\n return digest;\n}\nfunction planCacheKey(identity, id, closureDigest) {\n return contentHash(\n stableStringify({\n schema: PLAN_CACHE_SCHEMA_VERSION,\n plan: LOWERED_MODULE_PLAN_VERSION,\n stamp: identity.stamp,\n target: identity.target,\n structuralPassHash: identity.structuralPassHash,\n id,\n closureDigest\n })\n );\n}\nclass JsonFileCache {\n constructor(root, schemaVersion, maxEntries = PLAN_CACHE_MAX_ENTRIES) {\n this.root = root;\n this.schemaVersion = schemaVersion;\n this.maxEntries = maxEntries;\n }\n root;\n schemaVersion;\n maxEntries;\n #hits = 0;\n #misses = 0;\n #writes = 0;\n #writesSincePrune = 0;\n #prunedThisProcess = false;\n #created = /* @__PURE__ */ new Set();\n get stats() {\n return { hits: this.#hits, misses: this.#misses, writes: this.#writes };\n }\n resetStats() {\n this.#hits = 0;\n this.#misses = 0;\n this.#writes = 0;\n }\n #path(key) {\n return join(this.root, `v${this.schemaVersion}`, key.slice(0, 2), `${key}.json`);\n }\n /**\n * Null on anything short of an entry `validate` fully accepts. A miss\n * recompiles; nothing here repairs or partially trusts an entry, and a later\n * successful compile overwrites the bad file.\n */\n async read(key, validate) {\n let parsed;\n try {\n parsed = JSON.parse(await readFile(this.#path(key), \"utf8\"));\n } catch {\n this.#misses++;\n return null;\n }\n const entry = validate(parsed);\n if (entry === null) {\n this.#misses++;\n return null;\n }\n this.#hits++;\n return entry;\n }\n async write(key, value) {\n const path = this.#path(key);\n const directory = dirname(path);\n if (!this.#created.has(directory)) {\n await mkdir(directory, { recursive: true });\n this.#created.add(directory);\n }\n const temporaryPath = `${path}.${process.pid}-${randomBytes(6).toString(\"hex\")}.tmp`;\n await writeFile(temporaryPath, `${stableStringify(value)}\n`, \"utf8\");\n await rename(temporaryPath, path);\n this.#writes++;\n this.#writesSincePrune++;\n const batch = Math.max(1, Math.floor(this.maxEntries / 4));\n if (!this.#prunedThisProcess || this.#writesSincePrune >= batch) {\n this.#prunedThisProcess = true;\n this.#writesSincePrune = 0;\n await this.#prune();\n }\n }\n /**\n * Drops the oldest entries once the store exceeds its cap, oldest by the later\n * of read and write time so an entry a build keeps hitting is not treated as\n * dead on filesystems that maintain access times.\n */\n async #prune() {\n const versionRoot = join(this.root, `v${this.schemaVersion}`);\n let shards;\n try {\n shards = await readdir(versionRoot);\n } catch {\n return;\n }\n const paths = [];\n for (const shard of shards) {\n const directory = join(versionRoot, shard);\n let files;\n try {\n files = await readdir(directory);\n } catch {\n continue;\n }\n for (const file of files) {\n if (file.endsWith(\".json\")) paths.push(join(directory, file));\n }\n }\n if (paths.length <= this.maxEntries) return;\n const entries = [];\n for (const path of paths) {\n try {\n const stats = await stat(path);\n entries.push({ path, usedAt: Math.max(stats.atimeMs, stats.mtimeMs) });\n } catch {\n }\n }\n entries.sort((left, right) => left.usedAt - right.usedAt);\n for (const entry of entries.slice(0, Math.max(0, entries.length - this.maxEntries))) {\n await unlink(entry.path).catch(() => {\n });\n }\n }\n}\nclass ModulePlanCache {\n constructor(root) {\n this.root = root;\n this.#files = new JsonFileCache(root, PLAN_CACHE_SCHEMA_VERSION);\n }\n root;\n #files;\n get stats() {\n return this.#files.stats;\n }\n resetStats() {\n this.#files.resetStats();\n }\n read(key, id, closureDigest) {\n return this.#files.read(key, (value) => {\n const entry = value;\n const plan = entry?.plan;\n return entry?.schemaVersion === PLAN_CACHE_SCHEMA_VERSION && entry.moduleId === id && entry.closureDigest === closureDigest && plan && plan.version === LOWERED_MODULE_PLAN_VERSION && plan.id === id && typeof plan.sourceHash === \"string\" && typeof plan.css === \"string\" && Array.isArray(plan.edits) && Array.isArray(plan.diagnostics) && Array.isArray(plan.dependencies) && !!plan.stats ? entry : null;\n });\n }\n write(key, entry) {\n return this.#files.write(key, entry);\n }\n}\nexport {\n JsonFileCache,\n ModulePlanCache,\n PLAN_CACHE_MAX_ENTRIES,\n PLAN_CACHE_SCHEMA_VERSION,\n createExternalClosureLookup,\n defaultPlanCacheRoot,\n moduleClosureDigest,\n moduleClosureNode,\n planCacheKey,\n tamaguiCacheRoot\n};\n//# sourceMappingURL=planCache.js.map\n"],"mappings":"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"}
|
package/dist/esm/session.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { ProjectGraph } from "./graph.mjs";
|
|
|
2
2
|
import { lowerModule } from "./lower.mjs";
|
|
3
3
|
import { materializeModule } from "./materialize.mjs";
|
|
4
4
|
import { applyLoweredModule } from "./output.mjs";
|
|
5
|
-
import { PLAN_CACHE_SCHEMA_VERSION, moduleClosureDigest, planCacheKey } from "./planCache.mjs";
|
|
5
|
+
import { PLAN_CACHE_SCHEMA_VERSION, createExternalClosureLookup, moduleClosureDigest, planCacheKey } from "./planCache.mjs";
|
|
6
6
|
import { yukuFactory } from "./yuku.mjs";
|
|
7
7
|
|
|
8
8
|
function compareIds(left, right) {
|
|
@@ -10,6 +10,7 @@ function compareIds(left, right) {
|
|
|
10
10
|
}
|
|
11
11
|
var CompilerSession = class {
|
|
12
12
|
#graph = new ProjectGraph(yukuFactory, { modules: [] });
|
|
13
|
+
#externalClosure = createExternalClosureLookup();
|
|
13
14
|
#queue = Promise.resolve();
|
|
14
15
|
compile(input) {
|
|
15
16
|
const operation = this.#queue.then(() => this.#compile(input));
|
|
@@ -43,10 +44,13 @@ var CompilerSession = class {
|
|
|
43
44
|
const cache = adapter.planCache?.stamp ? adapter.planCache : null;
|
|
44
45
|
const closureDigest = cache ? moduleClosureDigest(module.id, (id) => {
|
|
45
46
|
const hash = graph.contentHash(id);
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
if (hash) {
|
|
48
|
+
return {
|
|
49
|
+
contentHash: hash,
|
|
50
|
+
dependencies: [...graph.dependenciesOf(id), ...graph.externalImportsOf(id)]
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return this.#externalClosure(id);
|
|
50
54
|
}) : null;
|
|
51
55
|
const entry = cache && closureDigest ? {
|
|
52
56
|
store: cache.store,
|
|
@@ -58,14 +62,19 @@ var CompilerSession = class {
|
|
|
58
62
|
}, module.id, closureDigest)
|
|
59
63
|
} : null;
|
|
60
64
|
const cached = entry ? await entry.store.read(entry.key, module.id, entry.digest) : null;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
65
|
+
let plan = cached?.plan;
|
|
66
|
+
if (!plan) {
|
|
67
|
+
const materialized = materializeModule(graph, module.id);
|
|
68
|
+
if (adapter.prepare) await adapter.prepare(materialized);
|
|
69
|
+
plan = lowerModule({
|
|
70
|
+
module: materialized,
|
|
71
|
+
source: module.source,
|
|
72
|
+
target: adapter.target,
|
|
73
|
+
host: adapter.host,
|
|
74
|
+
options: { projectGeneration: adapter.projectGeneration },
|
|
75
|
+
structuralPass
|
|
76
|
+
});
|
|
77
|
+
}
|
|
69
78
|
if (entry && !cached) {
|
|
70
79
|
await entry.store.write(entry.key, {
|
|
71
80
|
schemaVersion: PLAN_CACHE_SCHEMA_VERSION,
|
package/dist/esm/session.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","names":["#queue","#compile","#enqueue","#graph","#install"],"sources":["esm/session.js"],"sourcesContent":["import { ProjectGraph } from \"./graph\";\nimport { lowerModule } from \"./lower\";\nimport { materializeModule } from \"./materialize\";\nimport { applyLoweredModule } from \"./output\";\nimport {
|
|
1
|
+
{"version":3,"file":"session.js","names":["#queue","#compile","#enqueue","#graph","#install","#externalClosure"],"sources":["esm/session.js"],"sourcesContent":["import { ProjectGraph } from \"./graph\";\nimport { lowerModule } from \"./lower\";\nimport { materializeModule } from \"./materialize\";\nimport { applyLoweredModule } from \"./output\";\nimport {\n PLAN_CACHE_SCHEMA_VERSION,\n createExternalClosureLookup,\n moduleClosureDigest,\n planCacheKey\n} from \"./planCache\";\nimport { yukuFactory } from \"./yuku\";\nfunction compareIds(left, right) {\n return left < right ? -1 : left > right ? 1 : 0;\n}\nclass CompilerSession {\n #graph = new ProjectGraph(yukuFactory, { modules: [] });\n #externalClosure = createExternalClosureLookup();\n #queue = Promise.resolve();\n compile(input) {\n const operation = this.#queue.then(() => this.#compile(input));\n this.#queue = operation.catch(() => void 0);\n return operation;\n }\n update(module) {\n return this.#enqueue(() => this.#graph.updateModule(module).invalidatedIds);\n }\n has(id) {\n return this.#graph.contentHash(id) !== null;\n }\n dependentsOf(id) {\n return this.#graph.dependentsOf(id);\n }\n remove(id) {\n return this.#enqueue(() => this.#graph.removeModule(id));\n }\n parseCount(id) {\n return this.#graph.parseCount(id);\n }\n #enqueue(operation) {\n const queued = this.#queue.then(operation);\n this.#queue = queued.catch(() => void 0);\n return queued;\n }\n async #compile({\n module,\n adapter,\n structuralPass\n }) {\n const invalidated = /* @__PURE__ */ new Set();\n await this.#install(module, adapter, /* @__PURE__ */ new Set(), invalidated);\n const graph = this.#graph;\n const cache = adapter.planCache?.stamp ? adapter.planCache : null;\n const closureDigest = cache ? moduleClosureDigest(module.id, (id) => {\n const hash = graph.contentHash(id);\n if (hash) {\n return {\n contentHash: hash,\n dependencies: [...graph.dependenciesOf(id), ...graph.externalImportsOf(id)]\n };\n }\n return this.#externalClosure(id);\n }) : null;\n const entry = cache && closureDigest ? {\n store: cache.store,\n digest: closureDigest,\n key: planCacheKey(\n {\n stamp: cache.stamp,\n target: adapter.target,\n structuralPassHash: structuralPass?.versionHash ?? `${adapter.target}-noop-v1`\n },\n module.id,\n closureDigest\n )\n } : null;\n const cached = entry ? await entry.store.read(entry.key, module.id, entry.digest) : null;\n let plan = cached?.plan;\n if (!plan) {\n const materialized = materializeModule(graph, module.id);\n if (adapter.prepare) await adapter.prepare(materialized);\n plan = lowerModule({\n module: materialized,\n source: module.source,\n target: adapter.target,\n host: adapter.host,\n options: { projectGeneration: adapter.projectGeneration },\n structuralPass\n });\n }\n if (entry && !cached) {\n await entry.store.write(entry.key, {\n schemaVersion: PLAN_CACHE_SCHEMA_VERSION,\n moduleId: module.id,\n closureDigest: entry.digest,\n plan\n });\n }\n return {\n plan,\n output: applyLoweredModule(module.source, module.id, plan),\n invalidatedIds: [...invalidated].sort(compareIds)\n };\n }\n async #install(module, adapter, visited, invalidated) {\n if (visited.has(module.id)) return;\n visited.add(module.id);\n for (const dependency of module.imports) {\n if (dependency.external || this.has(dependency.resolvedId)) continue;\n const loaded = await adapter.load(dependency.resolvedId);\n if (loaded) {\n await this.#install(loaded, adapter, visited, invalidated);\n }\n }\n const update = this.#graph.updateModule(module);\n for (const id of update.invalidatedIds) invalidated.add(id);\n }\n}\nexport {\n CompilerSession\n};\n//# sourceMappingURL=session.js.map\n"],"mappings":"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"}
|