@tamagui/compiler-core 3.0.17 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/graph.cjs +15 -8
- package/dist/esm/graph.mjs +15 -8
- package/dist/esm/graph.mjs.map +1 -1
- package/package.json +3 -3
- package/src/graph.ts +17 -8
- package/types/graph.d.ts.map +1 -1
package/dist/cjs/graph.cjs
CHANGED
|
@@ -64,6 +64,7 @@ var ProjectGraph = class {
|
|
|
64
64
|
#dependents = /* @__PURE__ */ new Map();
|
|
65
65
|
#elementCache = /* @__PURE__ */ new Map();
|
|
66
66
|
#candidate;
|
|
67
|
+
#linked = false;
|
|
67
68
|
constructor(factory, project) {
|
|
68
69
|
for (const input of project.modules) this.#installHostRecord(input);
|
|
69
70
|
const candidateProject = {
|
|
@@ -71,7 +72,13 @@ var ProjectGraph = class {
|
|
|
71
72
|
resolutions: this.#resolutions
|
|
72
73
|
};
|
|
73
74
|
this.#candidate = factory.create(candidateProject);
|
|
74
|
-
|
|
75
|
+
}
|
|
76
|
+
#linkedCandidate() {
|
|
77
|
+
if (!this.#linked) {
|
|
78
|
+
this.#candidate.link();
|
|
79
|
+
this.#linked = true;
|
|
80
|
+
}
|
|
81
|
+
return this.#candidate;
|
|
75
82
|
}
|
|
76
83
|
moduleIds() {
|
|
77
84
|
return [...this.#modules.keys()].sort(compareIds);
|
|
@@ -117,7 +124,7 @@ var ProjectGraph = class {
|
|
|
117
124
|
return this.#candidate.parseCount(id);
|
|
118
125
|
}
|
|
119
126
|
resolveBinding(id, localName) {
|
|
120
|
-
const definition = this.#
|
|
127
|
+
const definition = this.#linkedCandidate().definitionOf(id, localName);
|
|
121
128
|
if (!definition) return null;
|
|
122
129
|
return {
|
|
123
130
|
id: definition.id,
|
|
@@ -132,7 +139,7 @@ var ProjectGraph = class {
|
|
|
132
139
|
};
|
|
133
140
|
}
|
|
134
141
|
resolveReference(reference) {
|
|
135
|
-
const definition = this.#
|
|
142
|
+
const definition = this.#linkedCandidate().definitionAt(reference.id, reference.start, reference.end);
|
|
136
143
|
if (!definition) return null;
|
|
137
144
|
return {
|
|
138
145
|
id: definition.id,
|
|
@@ -148,7 +155,7 @@ var ProjectGraph = class {
|
|
|
148
155
|
}
|
|
149
156
|
expressionNode(reference) {
|
|
150
157
|
if (!this.#modules.has(reference.id)) return null;
|
|
151
|
-
return (0, import_normalize.nodeAtSpan)(this.#
|
|
158
|
+
return (0, import_normalize.nodeAtSpan)(this.#linkedCandidate().programOf(reference.id), reference.start, reference.end);
|
|
152
159
|
}
|
|
153
160
|
/**
|
|
154
161
|
* The members of a plain object literal, each as its own expression:
|
|
@@ -195,7 +202,7 @@ var ProjectGraph = class {
|
|
|
195
202
|
if (!record) throw new Error(`Unknown host module ${id}`);
|
|
196
203
|
const cached = this.#elementCache.get(id);
|
|
197
204
|
if (cached?.hash === record.hash) return cached.result;
|
|
198
|
-
const result = (0, import_normalize.normalizeElements)(this.#
|
|
205
|
+
const result = (0, import_normalize.normalizeElements)(this.#linkedCandidate(), id, record.input.imports);
|
|
199
206
|
this.#elementCache.set(id, {
|
|
200
207
|
hash: record.hash,
|
|
201
208
|
result
|
|
@@ -203,7 +210,7 @@ var ProjectGraph = class {
|
|
|
203
210
|
return result;
|
|
204
211
|
}
|
|
205
212
|
diagnostics() {
|
|
206
|
-
const diagnostics = this.#
|
|
213
|
+
const diagnostics = this.#linkedCandidate().diagnostics().map((diagnostic) => diagnostic.kind === "parse" ? (0, import_diagnostics.localBailout)("local/parse-error", {
|
|
207
214
|
id: diagnostic.id,
|
|
208
215
|
start: 0,
|
|
209
216
|
end: 0
|
|
@@ -245,7 +252,7 @@ var ProjectGraph = class {
|
|
|
245
252
|
if (previous) this.#candidate.removeFile(input.id);
|
|
246
253
|
this.#installHostRecord(input);
|
|
247
254
|
this.#candidate.addFile(input.id, input.source);
|
|
248
|
-
this.#
|
|
255
|
+
this.#linked = false;
|
|
249
256
|
for (const id of invalidatedIds) this.#elementCache.delete(id);
|
|
250
257
|
return {
|
|
251
258
|
changed: true,
|
|
@@ -272,7 +279,7 @@ var ProjectGraph = class {
|
|
|
272
279
|
this.#removeResolutions(id);
|
|
273
280
|
this.#modules.delete(id);
|
|
274
281
|
this.#files.delete(id);
|
|
275
|
-
this.#
|
|
282
|
+
this.#linked = false;
|
|
276
283
|
for (const invalidated of invalidatedIds) this.#elementCache.delete(invalidated);
|
|
277
284
|
return {
|
|
278
285
|
changed: true,
|
package/dist/esm/graph.mjs
CHANGED
|
@@ -39,6 +39,7 @@ var ProjectGraph = class {
|
|
|
39
39
|
#dependents = /* @__PURE__ */ new Map();
|
|
40
40
|
#elementCache = /* @__PURE__ */ new Map();
|
|
41
41
|
#candidate;
|
|
42
|
+
#linked = false;
|
|
42
43
|
constructor(factory, project) {
|
|
43
44
|
for (const input of project.modules) this.#installHostRecord(input);
|
|
44
45
|
const candidateProject = {
|
|
@@ -46,7 +47,13 @@ var ProjectGraph = class {
|
|
|
46
47
|
resolutions: this.#resolutions
|
|
47
48
|
};
|
|
48
49
|
this.#candidate = factory.create(candidateProject);
|
|
49
|
-
|
|
50
|
+
}
|
|
51
|
+
#linkedCandidate() {
|
|
52
|
+
if (!this.#linked) {
|
|
53
|
+
this.#candidate.link();
|
|
54
|
+
this.#linked = true;
|
|
55
|
+
}
|
|
56
|
+
return this.#candidate;
|
|
50
57
|
}
|
|
51
58
|
moduleIds() {
|
|
52
59
|
return [...this.#modules.keys()].sort(compareIds);
|
|
@@ -92,7 +99,7 @@ var ProjectGraph = class {
|
|
|
92
99
|
return this.#candidate.parseCount(id);
|
|
93
100
|
}
|
|
94
101
|
resolveBinding(id, localName) {
|
|
95
|
-
const definition = this.#
|
|
102
|
+
const definition = this.#linkedCandidate().definitionOf(id, localName);
|
|
96
103
|
if (!definition) return null;
|
|
97
104
|
return {
|
|
98
105
|
id: definition.id,
|
|
@@ -107,7 +114,7 @@ var ProjectGraph = class {
|
|
|
107
114
|
};
|
|
108
115
|
}
|
|
109
116
|
resolveReference(reference) {
|
|
110
|
-
const definition = this.#
|
|
117
|
+
const definition = this.#linkedCandidate().definitionAt(reference.id, reference.start, reference.end);
|
|
111
118
|
if (!definition) return null;
|
|
112
119
|
return {
|
|
113
120
|
id: definition.id,
|
|
@@ -123,7 +130,7 @@ var ProjectGraph = class {
|
|
|
123
130
|
}
|
|
124
131
|
expressionNode(reference) {
|
|
125
132
|
if (!this.#modules.has(reference.id)) return null;
|
|
126
|
-
return nodeAtSpan(this.#
|
|
133
|
+
return nodeAtSpan(this.#linkedCandidate().programOf(reference.id), reference.start, reference.end);
|
|
127
134
|
}
|
|
128
135
|
/**
|
|
129
136
|
* The members of a plain object literal, each as its own expression:
|
|
@@ -170,7 +177,7 @@ var ProjectGraph = class {
|
|
|
170
177
|
if (!record) throw new Error(`Unknown host module ${id}`);
|
|
171
178
|
const cached = this.#elementCache.get(id);
|
|
172
179
|
if (cached?.hash === record.hash) return cached.result;
|
|
173
|
-
const result = normalizeElements(this.#
|
|
180
|
+
const result = normalizeElements(this.#linkedCandidate(), id, record.input.imports);
|
|
174
181
|
this.#elementCache.set(id, {
|
|
175
182
|
hash: record.hash,
|
|
176
183
|
result
|
|
@@ -178,7 +185,7 @@ var ProjectGraph = class {
|
|
|
178
185
|
return result;
|
|
179
186
|
}
|
|
180
187
|
diagnostics() {
|
|
181
|
-
const diagnostics = this.#
|
|
188
|
+
const diagnostics = this.#linkedCandidate().diagnostics().map((diagnostic) => diagnostic.kind === "parse" ? localBailout("local/parse-error", {
|
|
182
189
|
id: diagnostic.id,
|
|
183
190
|
start: 0,
|
|
184
191
|
end: 0
|
|
@@ -220,7 +227,7 @@ var ProjectGraph = class {
|
|
|
220
227
|
if (previous) this.#candidate.removeFile(input.id);
|
|
221
228
|
this.#installHostRecord(input);
|
|
222
229
|
this.#candidate.addFile(input.id, input.source);
|
|
223
|
-
this.#
|
|
230
|
+
this.#linked = false;
|
|
224
231
|
for (const id of invalidatedIds) this.#elementCache.delete(id);
|
|
225
232
|
return {
|
|
226
233
|
changed: true,
|
|
@@ -247,7 +254,7 @@ var ProjectGraph = class {
|
|
|
247
254
|
this.#removeResolutions(id);
|
|
248
255
|
this.#modules.delete(id);
|
|
249
256
|
this.#files.delete(id);
|
|
250
|
-
this.#
|
|
257
|
+
this.#linked = false;
|
|
251
258
|
for (const invalidated of invalidatedIds) this.#elementCache.delete(invalidated);
|
|
252
259
|
return {
|
|
253
260
|
changed: true,
|
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, spanOf } from \"./contracts\";\nimport { childNode, childNodes, identifierName, unwrapExpression } from \"./ast\";\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 /**\n * The members of a plain object literal, each as its own expression:\n * `{ width: expr, height: 10 }`. Null for anything else, and for an object\n * that spreads, computes a key, or defines a method or accessor.\n */\n objectMembers(reference) {\n const node = this.expressionNode(reference);\n if (!node) return null;\n const object = unwrapExpression(node);\n if (object.type !== \"ObjectExpression\") return null;\n const members = [];\n for (const property of childNodes(object, \"properties\")) {\n if (property.type !== \"Property\" && property.type !== \"ObjectProperty\" || property.computed === true || property.method === true || property.kind !== void 0 && property.kind !== \"init\") {\n return null;\n }\n const key = childNode(property, \"key\");\n const value = childNode(property, \"value\");\n if (!key || !value) return null;\n const name = identifierName(key) ?? (typeof key.value === \"string\" ? key.value : null);\n if (name === null) return null;\n members.push({\n name,\n span: spanOf(reference.id, property),\n value: expressionReference(reference.id, value)\n });\n }\n return members;\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","#linked","#modules","#dependencies","#dependents","#linkedCandidate","#elementCache","#removeOutgoingEdges","#removeResolutions"],"sources":["esm/graph.js"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { expressionReference, resolutionKey, resolvedModuleId, spanOf } from \"./contracts\";\nimport { childNode, childNodes, identifierName, unwrapExpression } from \"./ast\";\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 // linking is whole-project, so edits mark the analyzer stale and the next query links once\n #linked = false;\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 }\n #linkedCandidate() {\n if (!this.#linked) {\n this.#candidate.link();\n this.#linked = true;\n }\n return this.#candidate;\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.#linkedCandidate().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.#linkedCandidate().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.#linkedCandidate().programOf(reference.id),\n reference.start,\n reference.end\n );\n }\n /**\n * The members of a plain object literal, each as its own expression:\n * `{ width: expr, height: 10 }`. Null for anything else, and for an object\n * that spreads, computes a key, or defines a method or accessor.\n */\n objectMembers(reference) {\n const node = this.expressionNode(reference);\n if (!node) return null;\n const object = unwrapExpression(node);\n if (object.type !== \"ObjectExpression\") return null;\n const members = [];\n for (const property of childNodes(object, \"properties\")) {\n if (property.type !== \"Property\" && property.type !== \"ObjectProperty\" || property.computed === true || property.method === true || property.kind !== void 0 && property.kind !== \"init\") {\n return null;\n }\n const key = childNode(property, \"key\");\n const value = childNode(property, \"value\");\n if (!key || !value) return null;\n const name = identifierName(key) ?? (typeof key.value === \"string\" ? key.value : null);\n if (name === null) return null;\n members.push({\n name,\n span: spanOf(reference.id, property),\n value: expressionReference(reference.id, value)\n });\n }\n return members;\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.#linkedCandidate(), id, record.input.imports);\n this.#elementCache.set(id, { hash: record.hash, result });\n return result;\n }\n diagnostics() {\n const diagnostics = this.#linkedCandidate().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.#linked = false;\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.#linked = false;\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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/compiler-core",
|
|
3
|
-
"version": "3.0
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Shared parser-independent Tamagui compiler graph and element IR",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"yuku-analyzer": "0.6.1"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@tamagui/build": "3.0
|
|
43
|
+
"@tamagui/build": "3.1.0",
|
|
44
44
|
"typescript": "7.0.2"
|
|
45
45
|
},
|
|
46
46
|
"repository": {
|
|
@@ -48,5 +48,5 @@
|
|
|
48
48
|
"url": "git+https://github.com/tamagui/tamagui.git",
|
|
49
49
|
"directory": "code/compiler/compiler-core"
|
|
50
50
|
},
|
|
51
|
-
"releaseSourceCommit": "
|
|
51
|
+
"releaseSourceCommit": "690ee7d9f451e684f0f197d160c261cdf37dd79f"
|
|
52
52
|
}
|
package/src/graph.ts
CHANGED
|
@@ -88,6 +88,8 @@ export class ProjectGraph implements SymbolResolver {
|
|
|
88
88
|
readonly #dependents = new Map<ResolvedModuleId, Set<ResolvedModuleId>>()
|
|
89
89
|
readonly #elementCache = new Map<ResolvedModuleId, CachedElements>()
|
|
90
90
|
readonly #candidate: AnalyzerCandidate
|
|
91
|
+
// linking is whole-project, so edits mark the analyzer stale and the next query links once
|
|
92
|
+
#linked = false
|
|
91
93
|
|
|
92
94
|
constructor(factory: CandidateFactory, project: HostResolvedProject) {
|
|
93
95
|
for (const input of project.modules) this.#installHostRecord(input)
|
|
@@ -96,7 +98,14 @@ export class ProjectGraph implements SymbolResolver {
|
|
|
96
98
|
resolutions: this.#resolutions,
|
|
97
99
|
}
|
|
98
100
|
this.#candidate = factory.create(candidateProject)
|
|
99
|
-
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
#linkedCandidate(): AnalyzerCandidate {
|
|
104
|
+
if (!this.#linked) {
|
|
105
|
+
this.#candidate.link()
|
|
106
|
+
this.#linked = true
|
|
107
|
+
}
|
|
108
|
+
return this.#candidate
|
|
100
109
|
}
|
|
101
110
|
|
|
102
111
|
moduleIds(): ResolvedModuleId[] {
|
|
@@ -151,7 +160,7 @@ export class ProjectGraph implements SymbolResolver {
|
|
|
151
160
|
}
|
|
152
161
|
|
|
153
162
|
resolveBinding(id: ResolvedModuleId, localName: string): SymbolDefinition | null {
|
|
154
|
-
const definition = this.#
|
|
163
|
+
const definition = this.#linkedCandidate().definitionOf(id, localName)
|
|
155
164
|
if (!definition) return null
|
|
156
165
|
return {
|
|
157
166
|
id: definition.id,
|
|
@@ -169,7 +178,7 @@ export class ProjectGraph implements SymbolResolver {
|
|
|
169
178
|
}
|
|
170
179
|
|
|
171
180
|
resolveReference(reference: ExpressionReference): SymbolDefinition | null {
|
|
172
|
-
const definition = this.#
|
|
181
|
+
const definition = this.#linkedCandidate().definitionAt(
|
|
173
182
|
reference.id,
|
|
174
183
|
reference.start,
|
|
175
184
|
reference.end
|
|
@@ -193,7 +202,7 @@ export class ProjectGraph implements SymbolResolver {
|
|
|
193
202
|
expressionNode(reference: ExpressionReference) {
|
|
194
203
|
if (!this.#modules.has(reference.id)) return null
|
|
195
204
|
return nodeAtSpan(
|
|
196
|
-
this.#
|
|
205
|
+
this.#linkedCandidate().programOf(reference.id),
|
|
197
206
|
reference.start,
|
|
198
207
|
reference.end
|
|
199
208
|
)
|
|
@@ -257,13 +266,13 @@ export class ProjectGraph implements SymbolResolver {
|
|
|
257
266
|
if (!record) throw new Error(`Unknown host module ${id}`)
|
|
258
267
|
const cached = this.#elementCache.get(id)
|
|
259
268
|
if (cached?.hash === record.hash) return cached.result
|
|
260
|
-
const result = normalizeElements(this.#
|
|
269
|
+
const result = normalizeElements(this.#linkedCandidate(), id, record.input.imports)
|
|
261
270
|
this.#elementCache.set(id, { hash: record.hash, result })
|
|
262
271
|
return result
|
|
263
272
|
}
|
|
264
273
|
|
|
265
274
|
diagnostics(): BailoutReason[] {
|
|
266
|
-
const diagnostics = this.#
|
|
275
|
+
const diagnostics = this.#linkedCandidate()
|
|
267
276
|
.diagnostics()
|
|
268
277
|
.map((diagnostic) =>
|
|
269
278
|
diagnostic.kind === 'parse'
|
|
@@ -320,7 +329,7 @@ export class ProjectGraph implements SymbolResolver {
|
|
|
320
329
|
if (previous) this.#candidate.removeFile(input.id)
|
|
321
330
|
this.#installHostRecord(input)
|
|
322
331
|
this.#candidate.addFile(input.id, input.source)
|
|
323
|
-
this.#
|
|
332
|
+
this.#linked = false
|
|
324
333
|
for (const id of invalidatedIds) this.#elementCache.delete(id)
|
|
325
334
|
|
|
326
335
|
return {
|
|
@@ -349,7 +358,7 @@ export class ProjectGraph implements SymbolResolver {
|
|
|
349
358
|
this.#removeResolutions(id)
|
|
350
359
|
this.#modules.delete(id)
|
|
351
360
|
this.#files.delete(id)
|
|
352
|
-
this.#
|
|
361
|
+
this.#linked = false
|
|
353
362
|
for (const invalidated of invalidatedIds) this.#elementCache.delete(invalidated)
|
|
354
363
|
return {
|
|
355
364
|
changed: true,
|
package/types/graph.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EAEf,mBAAmB,EAEnB,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,cAAc,EACf,MAAM,aAAa,CAAA;AAGpB,OAAO,EAA+B,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC/E,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;AAa3C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,EAAE,EAAE,gBAAgB,CAAA;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,cAAc,EAAE,gBAAgB,EAAE,CAAA;CACnC;AAiBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAahE;AAED;;;GAGG;AACH,qBAAa,YAAa,YAAW,cAAc;;
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EAEf,mBAAmB,EAEnB,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,cAAc,EACf,MAAM,aAAa,CAAA;AAGpB,OAAO,EAA+B,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC/E,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;AAa3C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,EAAE,EAAE,gBAAgB,CAAA;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,cAAc,EAAE,gBAAgB,EAAE,CAAA;CACnC;AAiBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAahE;AAED;;;GAGG;AACH,qBAAa,YAAa,YAAW,cAAc;;IAWjD,YAAY,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,mBAAmB,EAOlE;IAUD,SAAS,IAAI,gBAAgB,EAAE,CAE9B;IAED,WAAW,CAAC,EAAE,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAE/C;IAED,QAAQ,CAAC,EAAE,EAAE,gBAAgB,GAAG,MAAM,CAIrC;IAED,cAAc,CAAC,EAAE,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAEvD;IAED,YAAY,CAAC,EAAE,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAErD;IAED,kFAAkF;IAClF,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAQ1D;IAED,UAAU,CAAC,EAAE,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,CAYnD;IAED,UAAU,CAAC,EAAE,EAAE,gBAAgB,GAAG,MAAM,CAEvC;IAED,cAAc,CAAC,EAAE,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAgB/E;IAED,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,GAAG,gBAAgB,GAAG,IAAI,CAoBxE;IAED,cAAc,CAAC,SAAS,EAAE,mBAAmB,wCAO5C;IAED;;;;OAIG;IACH,aAAa,CACX,SAAS,EAAE,mBAAmB,GAC7B;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,mBAAmB,CAAA;KAAE,EAAE,GAAG,IAAI,CA4BzE;IAED,QAAQ,CAAC,SAAS,EAAE,mBAAmB,GAAG,gBAAgB,CAEzD;IAED,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,GAAG,kBAAkB,GAAG,IAAI,CAE1E;IAED,eAAe,CAAC,SAAS,EAAE,mBAAmB,GAAG,iBAAiB,GAAG,IAAI,CAExE;IAED,eAAe,CAAC,EAAE,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAEzE;IAED,UAAU,CAAC,EAAE,EAAE,gBAAgB,GAAG,eAAe,CAQhD;IAED,WAAW,IAAI,aAAa,EAAE,CAsC7B;IAED,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,iBAAiB,CA4BtD;IAED,YAAY,CAAC,EAAE,EAAE,gBAAgB,GAAG,iBAAiB,CA0BpD;CAgEF"}
|