@tamagui/compiler-core 3.0.17 → 3.0.18

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.
@@ -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
- this.#candidate.link();
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.#candidate.definitionOf(id, localName);
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.#candidate.definitionAt(reference.id, reference.start, reference.end);
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.#candidate.programOf(reference.id), reference.start, reference.end);
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.#candidate, id, record.input.imports);
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.#candidate.diagnostics().map((diagnostic) => diagnostic.kind === "parse" ? (0, import_diagnostics.localBailout)("local/parse-error", {
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.#candidate.link();
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.#candidate.link();
282
+ this.#linked = false;
276
283
  for (const invalidated of invalidatedIds) this.#elementCache.delete(invalidated);
277
284
  return {
278
285
  changed: true,
@@ -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
- this.#candidate.link();
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.#candidate.definitionOf(id, localName);
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.#candidate.definitionAt(reference.id, reference.start, reference.end);
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.#candidate.programOf(reference.id), reference.start, reference.end);
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.#candidate, id, record.input.imports);
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.#candidate.diagnostics().map((diagnostic) => diagnostic.kind === "parse" ? localBailout("local/parse-error", {
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.#candidate.link();
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.#candidate.link();
257
+ this.#linked = false;
251
258
  for (const invalidated of invalidatedIds) this.#elementCache.delete(invalidated);
252
259
  return {
253
260
  changed: true,
@@ -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":";;;;;;;;AAWA,SAAS,WAAW,MAAM,OAAO;CAC/B,OAAO,iBAAiB,MAAM,KAAK;AACrC;AACA,SAAS,iBAAiB,MAAM,OAAO;CACrC,OAAO,OAAO,QAAQ,CAAC,IAAI,OAAO,QAAQ,IAAI;AAChD;AACA,SAAS,cAAc,SAAS;CAC9B,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,MAAM,MAAM,UAAU;EACxC,MAAM,cAAc,iBAAiB,KAAK,WAAW,MAAM,SAAS;EACpE,OAAO,eAAe,iBAAiB,KAAK,YAAY,MAAM,UAAU;CAC1E,CAAC;AACH;AACA,SAAS,kBAAkB,OAAO;CAChC,MAAM,OAAO,WAAW,QAAQ;CAChC,KAAK,OAAO,MAAM,MAAM;CACxB,KAAK,OAAO,IAAI;CAChB,KAAK,MAAM,cAAc,cAAc,MAAM,OAAO,GAAG;EACrD,KAAK,OAAO,WAAW,SAAS;EAChC,KAAK,OAAO,IAAI;EAChB,KAAK,OAAO,WAAW,UAAU;EACjC,KAAK,OAAO,IAAI;EAChB,KAAK,OAAO,WAAW,WAAW,aAAa,UAAU;EACzD,KAAK,OAAO,IAAI;CAClB;CACA,OAAO,KAAK,OAAO,KAAK;AAC1B;AACA,IAAM,eAAN,MAAmB;CACjB,yBAAyB,IAAI,IAAI;CACjC,+BAA+B,IAAI,IAAI;CACvC,2BAA2B,IAAI,IAAI;CACnC,gCAAgC,IAAI,IAAI;CACxC,8BAA8B,IAAI,IAAI;CACtC,gCAAgC,IAAI,IAAI;CACxC;CAEA,UAAU;CACV,YAAY,SAAS,SAAS;EAC5B,KAAK,MAAM,SAAS,QAAQ,SAAS,KAAKA,mBAAmB,KAAK;EAClE,MAAM,mBAAmB;GACvB,OAAO,KAAKC;GACZ,aAAa,KAAKC;EACpB;EACA,KAAKC,aAAa,QAAQ,OAAO,gBAAgB;CACnD;CACA,mBAAmB;EACjB,IAAI,CAAC,KAAKC,SAAS;GACjB,KAAKD,WAAW,KAAK;GACrB,KAAKC,UAAU;EACjB;EACA,OAAO,KAAKD;CACd;CACA,YAAY;EACV,OAAO,CAAC,GAAG,KAAKE,SAAS,KAAK,CAAC,CAAC,CAAC,KAAK,UAAU;CAClD;CACA,YAAY,IAAI;EACd,OAAO,KAAKA,SAAS,IAAI,EAAE,CAAC,EAAE,QAAQ;CACxC;CACA,SAAS,IAAI;EACX,MAAM,SAAS,KAAKA,SAAS,IAAI,EAAE,CAAC,EAAE,MAAM;EAC5C,IAAI,WAAW,KAAK,GAAG,MAAM,IAAI,MAAM,uBAAuB,IAAI;EAClE,OAAO;CACT;CACA,eAAe,IAAI;EACjB,OAAO,CAAC,GAAG,KAAKC,cAAc,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU;CAC9D;CACA,aAAa,IAAI;EACf,OAAO,CAAC,GAAG,KAAKC,YAAY,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU;CAC5D;;CAEA,kBAAkB,IAAI;EACpB,MAAM,SAAS,KAAKF,SAAS,IAAI,EAAE;EACnC,IAAI,CAAC,QAAQ,OAAO,CAAC;EACrB,MAAM,sBAAsB,IAAI,IAAI;EACpC,KAAK,MAAM,cAAc,OAAO,MAAM,SAAS;GAC7C,IAAI,WAAW,UAAU,IAAI,IAAI,WAAW,UAAU;EACxD;EACA,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,UAAU;CACjC;CACA,WAAW,IAAI;EACb,MAAM,2BAA2B,IAAI,IAAI,CAAC,EAAE,CAAC;EAC7C,MAAM,QAAQ,CAAC,EAAE;EACjB,OAAO,MAAM,QAAQ;GACnB,MAAM,UAAU,MAAM,MAAM;GAC5B,KAAK,MAAM,aAAa,KAAKE,YAAY,IAAI,OAAO,KAAK,CAAC,GAAG;IAC3D,IAAI,SAAS,IAAI,SAAS,GAAG;IAC7B,SAAS,IAAI,SAAS;IACtB,MAAM,KAAK,SAAS;GACtB;EACF;EACA,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,KAAK,UAAU;CACtC;CACA,WAAW,IAAI;EACb,OAAO,KAAKJ,WAAW,WAAW,EAAE;CACtC;CACA,eAAe,IAAI,WAAW;EAC5B,MAAM,aAAa,KAAKK,iBAAiB,CAAC,CAAC,aAAa,IAAI,SAAS;EACrE,IAAI,CAAC,YAAY,OAAO;EACxB,OAAO;GACL,IAAI,WAAW;GACf,MAAM,WAAW;GACjB,MAAM;IACJ,IAAI,WAAW;IACf,OAAO,WAAW;IAClB,KAAK,WAAW;GAClB;GACA,aAAa,WAAW,cAAc,oBAAoB,WAAW,IAAI,WAAW,WAAW,IAAI;GACnG,UAAU,WAAW;EACvB;CACF;CACA,iBAAiB,WAAW;EAC1B,MAAM,aAAa,KAAKA,iBAAiB,CAAC,CAAC,aACzC,UAAU,IACV,UAAU,OACV,UAAU,GACZ;EACA,IAAI,CAAC,YAAY,OAAO;EACxB,OAAO;GACL,IAAI,WAAW;GACf,MAAM,WAAW;GACjB,MAAM;IACJ,IAAI,WAAW;IACf,OAAO,WAAW;IAClB,KAAK,WAAW;GAClB;GACA,aAAa,WAAW,cAAc,oBAAoB,WAAW,IAAI,WAAW,WAAW,IAAI;GACnG,UAAU,WAAW;EACvB;CACF;CACA,eAAe,WAAW;EACxB,IAAI,CAAC,KAAKH,SAAS,IAAI,UAAU,EAAE,GAAG,OAAO;EAC7C,OAAO,WACL,KAAKG,iBAAiB,CAAC,CAAC,UAAU,UAAU,EAAE,GAC9C,UAAU,OACV,UAAU,GACZ;CACF;;;;;;CAMA,cAAc,WAAW;EACvB,MAAM,OAAO,KAAK,eAAe,SAAS;EAC1C,IAAI,CAAC,MAAM,OAAO;EAClB,MAAM,SAAS,iBAAiB,IAAI;EACpC,IAAI,OAAO,SAAS,oBAAoB,OAAO;EAC/C,MAAM,UAAU,CAAC;EACjB,KAAK,MAAM,YAAY,WAAW,QAAQ,YAAY,GAAG;GACvD,IAAI,SAAS,SAAS,cAAc,SAAS,SAAS,oBAAoB,SAAS,aAAa,QAAQ,SAAS,WAAW,QAAQ,SAAS,SAAS,KAAK,KAAK,SAAS,SAAS,QAAQ;IACxL,OAAO;GACT;GACA,MAAM,MAAM,UAAU,UAAU,KAAK;GACrC,MAAM,QAAQ,UAAU,UAAU,OAAO;GACzC,IAAI,CAAC,OAAO,CAAC,OAAO,OAAO;GAC3B,MAAM,OAAO,eAAe,GAAG,MAAM,OAAO,IAAI,UAAU,WAAW,IAAI,QAAQ;GACjF,IAAI,SAAS,MAAM,OAAO;GAC1B,QAAQ,KAAK;IACX;IACA,MAAM,OAAO,UAAU,IAAI,QAAQ;IACnC,OAAO,oBAAoB,UAAU,IAAI,KAAK;GAChD,CAAC;EACH;EACA,OAAO;CACT;CACA,SAAS,WAAW;EAClB,OAAO,mBAAmB,MAAM,SAAS;CAC3C;CACA,iBAAiB,WAAW;EAC1B,OAAO,iBAAiB,MAAM,SAAS;CACzC;CACA,gBAAgB,WAAW;EACzB,OAAO,0BAA0B,MAAM,SAAS;CAClD;CACA,gBAAgB,IAAI,WAAW;EAC7B,OAAO,gBAAgB,MAAM,IAAI,SAAS;CAC5C;CACA,WAAW,IAAI;EACb,MAAM,SAAS,KAAKH,SAAS,IAAI,EAAE;EACnC,IAAI,CAAC,QAAQ,MAAM,IAAI,MAAM,uBAAuB,IAAI;EACxD,MAAM,SAAS,KAAKI,cAAc,IAAI,EAAE;EACxC,IAAI,QAAQ,SAAS,OAAO,MAAM,OAAO,OAAO;EAChD,MAAM,SAAS,kBAAkB,KAAKD,iBAAiB,GAAG,IAAI,OAAO,MAAM,OAAO;EAClF,KAAKC,cAAc,IAAI,IAAI;GAAE,MAAM,OAAO;GAAM;EAAO,CAAC;EACxD,OAAO;CACT;CACA,cAAc;EACZ,MAAM,cAAc,KAAKD,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC,KACvD,eAAe,WAAW,SAAS,UAAU,aAC5C,qBACA;GAAE,IAAI,WAAW;GAAI,OAAO;GAAG,KAAK;EAAE,GACtC,WAAW,OACb,IAAI,cACF,6BACA;GAAE,IAAI,WAAW;GAAI,OAAO;GAAG,KAAK;EAAE,GACtC,WAAW,OACb,CACF;EACA,KAAK,MAAM,CAAC,IAAI,WAAW,KAAKH,UAAU;GACxC,KAAK,MAAM,cAAc,OAAO,MAAM,SAAS;IAC7C,IAAI,WAAW,UAAU;IACzB,IAAI,KAAKA,SAAS,IAAI,WAAW,UAAU,GAAG;IAC9C,YAAY,KACV,cACE,4BACA;KAAE;KAAI,OAAO;KAAG,KAAK;IAAE,GACvB,wBAAwB,WAAW,UAAU,oCAC7C,WAAW,UACb,CACF;GACF;EACF;EACA,OAAO,YAAY,MAAM,MAAM,UAAU;GACvC,MAAM,OAAO,iBAAiB,KAAK,KAAK,IAAI,MAAM,KAAK,EAAE;GACzD,OAAO,QAAQ,KAAK,KAAK,QAAQ,MAAM,KAAK,SAAS,iBAAiB,KAAK,MAAM,MAAM,IAAI;EAC7F,CAAC;CACH;CACA,aAAa,OAAO;EAClB,MAAM,WAAW,KAAKA,SAAS,IAAI,MAAM,EAAE;EAC3C,MAAM,WAAW,kBAAkB,KAAK;EACxC,IAAI,UAAU,SAAS,UAAU;GAC/B,OAAO;IACL,SAAS;IACT,IAAI,MAAM;IACV,cAAc,SAAS;IACvB,aAAa,SAAS;IACtB,gBAAgB,CAAC;GACnB;EACF;EACA,MAAM,iBAAiB,KAAK,WAAW,MAAM,EAAE;EAC/C,MAAM,eAAe,UAAU,QAAQ;EACvC,IAAI,UAAU,KAAKF,WAAW,WAAW,MAAM,EAAE;EACjD,KAAKH,mBAAmB,KAAK;EAC7B,KAAKG,WAAW,QAAQ,MAAM,IAAI,MAAM,MAAM;EAC9C,KAAKC,UAAU;EACf,KAAK,MAAM,MAAM,gBAAgB,KAAKK,cAAc,OAAO,EAAE;EAC7D,OAAO;GACL,SAAS;GACT,IAAI,MAAM;GACV;GACA,aAAa;GACb;EACF;CACF;CACA,aAAa,IAAI;EACf,MAAM,WAAW,KAAKJ,SAAS,IAAI,EAAE;EACrC,IAAI,CAAC,UAAU;GACb,OAAO;IACL,SAAS;IACT;IACA,cAAc;IACd,aAAa;IACb,gBAAgB,CAAC;GACnB;EACF;EACA,MAAM,iBAAiB,KAAK,WAAW,EAAE;EACzC,KAAKF,WAAW,WAAW,EAAE;EAC7B,KAAKO,qBAAqB,EAAE;EAC5B,KAAKC,mBAAmB,EAAE;EAC1B,KAAKN,SAAS,OAAO,EAAE;EACvB,KAAKJ,OAAO,OAAO,EAAE;EACrB,KAAKG,UAAU;EACf,KAAK,MAAM,eAAe,gBAAgB,KAAKK,cAAc,OAAO,WAAW;EAC/E,OAAO;GACL,SAAS;GACT;GACA,cAAc,SAAS;GACvB,aAAa;GACb;EACF;CACF;CACA,mBAAmB,OAAO;EACxB,iBAAiB,MAAM,EAAE;EACzB,MAAM,iCAAiC,IAAI,IAAI;EAC/C,KAAK,MAAM,cAAc,MAAM,SAAS;GACtC,iBAAiB,WAAW,UAAU;GACtC,IAAI,eAAe,IAAI,WAAW,SAAS,GAAG;IAC5C,MAAM,IAAI,MACR,iCAAiC,MAAM,GAAG,GAAG,WAAW,WAC1D;GACF;GACA,eAAe,IAAI,WAAW,SAAS;EACzC;EACA,KAAKC,qBAAqB,MAAM,EAAE;EAClC,KAAKC,mBAAmB,MAAM,EAAE;EAChC,MAAM,eAAe,IAAI,IACvB,MAAM,QAAQ,QAAQ,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,iBAAiB,UAAU,CACtF;EACA,KAAKL,cAAc,IAAI,MAAM,IAAI,YAAY;EAC7C,KAAK,MAAM,cAAc,cAAc;GACrC,IAAI,UAAU,KAAKC,YAAY,IAAI,UAAU;GAC7C,IAAI,CAAC,SAAS;IACZ,0BAA0B,IAAI,IAAI;IAClC,KAAKA,YAAY,IAAI,YAAY,OAAO;GAC1C;GACA,QAAQ,IAAI,MAAM,EAAE;EACtB;EACA,KAAK,MAAM,cAAc,MAAM,SAAS;GACtC,IAAI,WAAW,UAAU;GACzB,KAAKL,aAAa,IAChB,cAAc,MAAM,IAAI,WAAW,SAAS,GAC5C,WAAW,UACb;EACF;EACA,MAAM,iBAAiB;GACrB,GAAG;GACH,SAAS,MAAM,QAAQ,KAAK,gBAAgB,EAAE,GAAG,WAAW,EAAE;EAChE;EACA,KAAKD,OAAO,IAAI,eAAe,IAAI,eAAe,MAAM;EACxD,KAAKI,SAAS,IAAI,eAAe,IAAI;GACnC,OAAO;GACP,MAAM,kBAAkB,cAAc;EACxC,CAAC;CACH;CACA,qBAAqB,IAAI;EACvB,KAAK,MAAM,cAAc,KAAKC,cAAc,IAAI,EAAE,KAAK,CAAC,GAAG;GACzD,MAAM,UAAU,KAAKC,YAAY,IAAI,UAAU;GAC/C,SAAS,OAAO,EAAE;GAClB,IAAI,SAAS,SAAS,GAAG,KAAKA,YAAY,OAAO,UAAU;EAC7D;EACA,KAAKD,cAAc,OAAO,EAAE;CAC9B;CACA,mBAAmB,IAAI;EACrB,MAAM,SAAS,GAAG,GAAG;EACrB,KAAK,MAAM,OAAO,KAAKJ,aAAa,KAAK,GAAG;GAC1C,IAAI,IAAI,WAAW,MAAM,GAAG,KAAKA,aAAa,OAAO,GAAG;EAC1D;CACF;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/compiler-core",
3
- "version": "3.0.17",
3
+ "version": "3.0.18",
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.17",
43
+ "@tamagui/build": "3.0.18",
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": "b46117022739022f739389298a311f5a3fecf60a"
51
+ "releaseSourceCommit": "e7ebeed9d446eee3e0eda4b0dd5e55dd8ec46bf7"
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
- this.#candidate.link()
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.#candidate.definitionOf(id, localName)
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.#candidate.definitionAt(
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.#candidate.programOf(reference.id),
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.#candidate, id, record.input.imports)
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.#candidate
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.#candidate.link()
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.#candidate.link()
361
+ this.#linked = false
353
362
  for (const invalidated of invalidatedIds) this.#elementCache.delete(invalidated)
354
363
  return {
355
364
  changed: true,
@@ -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;;IASjD,YAAY,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,mBAAmB,EAQlE;IAED,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"}
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"}