fhirpath-ts 0.2.1 → 0.2.2

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.
Files changed (64) hide show
  1. package/README.md +12 -5
  2. package/dist/analyzer/analyze-dto.d.ts.map +1 -1
  3. package/dist/analyzer/analyze-dto.js +14 -8
  4. package/dist/analyzer/analyze-dto.js.map +1 -1
  5. package/dist/analyzer/analyze.d.ts +23 -12
  6. package/dist/analyzer/analyze.d.ts.map +1 -1
  7. package/dist/analyzer/analyze.js +138 -46
  8. package/dist/analyzer/analyze.js.map +1 -1
  9. package/dist/analyzer/declarations.d.ts +6 -0
  10. package/dist/analyzer/declarations.d.ts.map +1 -1
  11. package/dist/analyzer/declarations.js +7 -0
  12. package/dist/analyzer/declarations.js.map +1 -1
  13. package/dist/analyzer/expression-policy.d.ts +88 -14
  14. package/dist/analyzer/expression-policy.d.ts.map +1 -1
  15. package/dist/analyzer/expression-policy.js +296 -41
  16. package/dist/analyzer/expression-policy.js.map +1 -1
  17. package/dist/analyzer/operator-rules.d.ts.map +1 -1
  18. package/dist/analyzer/operator-rules.js +7 -6
  19. package/dist/analyzer/operator-rules.js.map +1 -1
  20. package/dist/analyzer/signatures.d.ts +49 -0
  21. package/dist/analyzer/signatures.d.ts.map +1 -1
  22. package/dist/analyzer/signatures.js +76 -31
  23. package/dist/analyzer/signatures.js.map +1 -1
  24. package/dist/analyzer/source-options.d.ts +17 -0
  25. package/dist/analyzer/source-options.d.ts.map +1 -0
  26. package/dist/analyzer/source-options.js +3 -0
  27. package/dist/analyzer/source-options.js.map +1 -0
  28. package/dist/api/dto.d.ts +9 -4
  29. package/dist/api/dto.d.ts.map +1 -1
  30. package/dist/api/dto.js +14 -3
  31. package/dist/api/dto.js.map +1 -1
  32. package/dist/api/strict.d.ts.map +1 -1
  33. package/dist/api/strict.js +8 -3
  34. package/dist/api/strict.js.map +1 -1
  35. package/dist/cli/dto-check.d.ts +9 -0
  36. package/dist/cli/dto-check.d.ts.map +1 -1
  37. package/dist/cli/dto-check.js +49 -6
  38. package/dist/cli/dto-check.js.map +1 -1
  39. package/dist/cli/fhirpath-check.js +161 -31
  40. package/dist/cli/fhirpath-check.js.map +1 -1
  41. package/dist/eslint/index.d.ts.map +1 -1
  42. package/dist/eslint/index.js +13 -8
  43. package/dist/eslint/index.js.map +1 -1
  44. package/dist/sites/index.d.ts +31 -2
  45. package/dist/sites/index.d.ts.map +1 -1
  46. package/dist/sites/index.js +351 -30
  47. package/dist/sites/index.js.map +1 -1
  48. package/dist/typed/infer.d.ts +2 -0
  49. package/dist/typed/infer.d.ts.map +1 -1
  50. package/package.json +1 -1
  51. package/src/analyzer/analyze-dto.ts +19 -9
  52. package/src/analyzer/analyze.ts +186 -54
  53. package/src/analyzer/declarations.ts +12 -0
  54. package/src/analyzer/expression-policy.ts +423 -47
  55. package/src/analyzer/operator-rules.ts +7 -6
  56. package/src/analyzer/signatures.ts +100 -36
  57. package/src/analyzer/source-options.ts +19 -0
  58. package/src/api/dto.ts +35 -9
  59. package/src/api/strict.ts +8 -3
  60. package/src/cli/dto-check.ts +56 -6
  61. package/src/cli/fhirpath-check.ts +180 -34
  62. package/src/eslint/index.ts +15 -12
  63. package/src/sites/index.ts +428 -40
  64. package/src/typed/infer.ts +2 -2
@@ -1,14 +1,17 @@
1
1
  import { readFileSync } from 'node:fs';
2
2
  import { analyzeSite } from "../analyzer/analyze.js";
3
- import { CALL_SITES, columnFunctionDeclaration, constructsEngine, declaredColumnOverloads, DTO_BASE_NAME, dtoRootsOf, expressionEntries, isCheckedCall, isCheckedTag, isForeignModule, rootOf, siteContext, TAG_NAME, } from "../analyzer/expression-policy.js";
3
+ import { CALL_SITES, callExpressionCandidates, columnFunctionDeclaration, constructsEngine, declaredColumnOverloads, DTO_BASE_NAME, dtoRootsOf, isCheckedCall, isCheckedTag, isForeignModule, rootOf, TAG_NAME, } from "../analyzer/expression-policy.js";
4
4
  import { r4Model } from "../r4/index.js";
5
5
  function isStringLiteral(node) {
6
6
  return node.type === 'Literal' && typeof node.value === 'string';
7
7
  }
8
- /** Statically-known property key (`path` in `{ path: ... }` or `{ 'path': ... }`), undefined when computed. */
8
+ /**
9
+ * Statically-known property key: `path` in `{ path: ... }`, `{ 'path': ... }`,
10
+ * or `{ ['path']: ... }`; undefined for other computed keys.
11
+ */
9
12
  function propertyKeyName(property) {
10
13
  if (property.computed) {
11
- return undefined;
14
+ return isStringLiteral(property.key) ? property.key.value : undefined;
12
15
  }
13
16
  if (property.key.type === 'Identifier') {
14
17
  return property.key.name;
@@ -20,7 +23,9 @@ const estreeAst = {
20
23
  string: node => (isStringLiteral(node) ? { node, expression: node.value } : undefined),
21
24
  boolean: node => (node.type === 'Literal' && typeof node.value === 'boolean' ? node.value : undefined),
22
25
  properties: node => node.type === 'ObjectExpression'
23
- ? node.properties.flatMap(property => property.type === 'Property' ? [{ name: propertyKeyName(property), value: property.value }] : [])
26
+ ? node.properties.map(property => property.type === 'Property'
27
+ ? { name: propertyKeyName(property), value: property.value }
28
+ : { name: undefined, value: property.argument, spread: true })
24
29
  : undefined,
25
30
  elements: node => (node.type === 'ArrayExpression' ? node.elements.filter(element => element !== null) : undefined),
26
31
  };
@@ -264,7 +269,6 @@ const noInvalidExpressions = {
264
269
  policy,
265
270
  name,
266
271
  receiverRoot: receiverRoot(callee),
267
- argument,
268
272
  node,
269
273
  enclosing: policy.rootFromClass === true ? enclosingClass(ancestors) : undefined,
270
274
  });
@@ -296,9 +300,10 @@ const noInvalidExpressions = {
296
300
  if (!isCheckedCall(call.policy, call.name, call.receiverRoot, bindings)) {
297
301
  continue;
298
302
  }
299
- const site = siteContext(call.policy, index => call.node.arguments[index], rootOf(call.enclosing, dtoRoots), estreeAst);
300
- for (const entry of expressionEntries(call.argument, call.policy.shape, estreeAst)) {
301
- checkAt(entry.node, entry.expression, site);
303
+ for (const candidate of callExpressionCandidates(call.policy, index => call.node.arguments[index], rootOf(call.enclosing, dtoRoots), estreeAst)) {
304
+ if (candidate.expression !== undefined) {
305
+ checkAt(candidate.node, candidate.expression, candidate.context);
306
+ }
302
307
  }
303
308
  }
304
309
  },
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eslint/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eslint/index.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * a separate ESTree walker that uses the same expression policy.
5
5
  */
6
6
  import type TS from 'typescript';
7
- import { type FileColumnFunction, type LocalModuleOptions } from '../analyzer/expression-policy.ts';
7
+ import { type FileColumnFunction, type LocalModuleOptions, type SiteContext } from '../analyzer/expression-policy.ts';
8
8
  /** The TypeScript namespace accepted by `createSiteFinder`. */
9
9
  export type TypeScriptApi = typeof TS;
10
10
  export interface ExpressionSite {
@@ -17,15 +17,44 @@ export interface ExpressionSite {
17
17
  inputType?: string;
18
18
  /** A DTO member site, which `analyzeSite` checks with source-only limits. */
19
19
  dto?: true;
20
+ /** Inline per-call environment and row-variable declarations visible to this expression. */
21
+ variables?: NonNullable<SiteContext['variables']>;
22
+ /** Ordered per-call vars, interpreted together with loaded engine defaults by analyzeSite. */
23
+ variablePlan?: NonNullable<SiteContext['variablePlan']>;
24
+ /** The call binds variables the source cannot name (a computed key or spread) — see `SiteContext`. */
25
+ openVariables?: true;
20
26
  /** Callable DTO columns declared in the same file. */
21
27
  functions?: Readonly<Record<string, FileColumnFunction>>;
22
28
  }
29
+ export interface SkippedExpressionSite {
30
+ /** Stable reason suitable for CLI/editor policy. */
31
+ reason: 'dynamic-expression' | 'unrecognized-receiver';
32
+ message: string;
33
+ line: number;
34
+ column: number;
35
+ }
36
+ export interface DtoSourceDeclaration {
37
+ name: string;
38
+ line: number;
39
+ column: number;
40
+ /** True when importing the module can enumerate this class, directly or through an exported subclass. */
41
+ loadable: boolean;
42
+ }
43
+ export interface SiteScanResult {
44
+ sites: ExpressionSite[];
45
+ skipped: SkippedExpressionSite[];
46
+ dtoDeclarations: DtoSourceDeclaration[];
47
+ }
23
48
  /** Finds every static FHIRPath expression in one source file. */
24
49
  export type SiteFinder = (sourceText: string, fileName: string, options?: LocalModuleOptions) => ExpressionSite[];
50
+ /** Scans expressions plus coverage gaps that a caller may choose to report. */
51
+ export type SiteScanner = (sourceText: string, fileName: string, options?: LocalModuleOptions) => SiteScanResult;
25
52
  /**
26
53
  * Creates a finder for the calls and tags in `CALL_SITES`. DTO fields include a
27
54
  * root type when the class declares one, and each column is exposed as a local
28
55
  * function declaration. Dynamic expressions are skipped.
29
56
  */
30
- export declare function createSiteFinder(ts: TypeScriptApi): SiteFinder;
57
+ export declare function createSiteScanner(ts: TypeScriptApi, program?: TS.Program): SiteScanner;
58
+ /** Creates the compatibility finder that returns only expressions successfully extracted. */
59
+ export declare function createSiteFinder(ts: TypeScriptApi, program?: TS.Program): SiteFinder;
31
60
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sites/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAA;AAEhC,OAAO,EAUL,KAAK,kBAAkB,EAIvB,KAAK,kBAAkB,EAMxB,MAAM,kCAAkC,CAAA;AAEzC,+DAA+D;AAC/D,MAAM,MAAM,aAAa,GAAG,OAAO,EAAE,CAAA;AAErC,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,IAAI,CAAA;IACV,sDAAsD;IACtD,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAA;CACzD;AAED,iEAAiE;AACjE,MAAM,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,cAAc,EAAE,CAAA;AAEjH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,aAAa,GAAG,UAAU,CAiO9D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sites/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,MAAM,YAAY,CAAA;AAEhC,OAAO,EAYL,KAAK,kBAAkB,EAIvB,KAAK,kBAAkB,EAEvB,KAAK,WAAW,EAGjB,MAAM,kCAAkC,CAAA;AAEzC,+DAA+D;AAC/D,MAAM,MAAM,aAAa,GAAG,OAAO,EAAE,CAAA;AAErC,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,IAAI,CAAA;IACV,4FAA4F;IAC5F,SAAS,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAA;IACjD,8FAA8F;IAC9F,YAAY,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAA;IACvD,sGAAsG;IACtG,aAAa,CAAC,EAAE,IAAI,CAAA;IACpB,sDAAsD;IACtD,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAA;CACzD;AAED,MAAM,WAAW,qBAAqB;IACpC,oDAAoD;IACpD,MAAM,EAAE,oBAAoB,GAAG,uBAAuB,CAAA;IACtD,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,yGAAyG;IACzG,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,OAAO,EAAE,qBAAqB,EAAE,CAAA;IAChC,eAAe,EAAE,oBAAoB,EAAE,CAAA;CACxC;AAED,iEAAiE;AACjE,MAAM,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,cAAc,EAAE,CAAA;AAEjH,+EAA+E;AAC/E,MAAM,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,KAAK,cAAc,CAAA;AAEhH;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,GAAG,WAAW,CA+jBtF;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,GAAG,UAAU,CAGpF"}
@@ -1,23 +1,43 @@
1
- import { CALL_SITES, columnFunctionDeclaration, constructsEngine, declaredColumnOverloads, DTO_BASE_NAME, dtoRootsOf, expressionEntries, isCheckedCall, isCheckedTag, isForeignModule, rootOf, siteContext, TAG_NAME, } from "../analyzer/expression-policy.js";
1
+ import { CALL_SITES, callExpressionCandidates, columnFunctionDeclaration, constructsEngine, declaredColumnOverloads, DTO_BASE_NAME, dtoRootsOf, ENGINE_CLASS_NAME, isCheckedCall, isCheckedTag, isForeignModule, rootOf, TAG_NAME, } from "../analyzer/expression-policy.js";
2
2
  /**
3
3
  * Creates a finder for the calls and tags in `CALL_SITES`. DTO fields include a
4
4
  * root type when the class declares one, and each column is exposed as a local
5
5
  * function declaration. Dynamic expressions are skipped.
6
6
  */
7
- export function createSiteFinder(ts) {
7
+ export function createSiteScanner(ts, program) {
8
+ const checker = program?.getTypeChecker();
9
+ const engineSymbolsByOptions = new Map();
8
10
  /** How the shared shape extractor reads TypeScript AST nodes. */
9
11
  const tsAst = {
10
12
  string: node => (ts.isStringLiteralLike(node) ? { node, expression: node.text } : undefined),
11
13
  boolean: node => node.kind === ts.SyntaxKind.TrueKeyword ? true : node.kind === ts.SyntaxKind.FalseKeyword ? false : undefined,
12
14
  properties: node => ts.isObjectLiteralExpression(node)
13
- ? node.properties
14
- .filter(ts.isPropertyAssignment)
15
- .map(property => ({ name: propertyKeyName(property.name), value: property.initializer }))
15
+ ? node.properties.flatMap(property => {
16
+ if (ts.isPropertyAssignment(property)) {
17
+ return [{ name: propertyKeyName(property.name), value: property.initializer }];
18
+ }
19
+ if (ts.isShorthandPropertyAssignment(property)) {
20
+ return [{ name: property.name.text, value: property.name }];
21
+ }
22
+ if (ts.isSpreadAssignment(property)) {
23
+ return [{ name: undefined, value: property.expression, spread: true }];
24
+ }
25
+ // Methods and accessors create enumerable own properties too. Their
26
+ // values are dynamic to source analysis, but their names still make
27
+ // env/vars scopes complete when every key is known.
28
+ return 'name' in property ? [{ name: propertyKeyName(property.name), value: property }] : [];
29
+ })
16
30
  : undefined,
17
31
  elements: node => (ts.isArrayLiteralExpression(node) ? [...node.elements] : undefined),
18
32
  };
19
- /** Statically-known property key (`path` in `{ path: ... }` or `{ 'path': ... }`), undefined when computed. */
33
+ /**
34
+ * Statically-known property key: `path` in `{ path: ... }`, `{ 'path': ... }`,
35
+ * or `{ ['path']: ... }`; undefined for other computed keys.
36
+ */
20
37
  function propertyKeyName(name) {
38
+ if (ts.isComputedPropertyName(name)) {
39
+ return ts.isStringLiteral(name.expression) ? name.expression.text : undefined;
40
+ }
21
41
  return ts.isIdentifier(name) || ts.isStringLiteral(name) ? name.text : undefined;
22
42
  }
23
43
  /** The name of the field a `@column(...)` decorator belongs to. */
@@ -56,7 +76,7 @@ export function createSiteFinder(ts) {
56
76
  return heritage;
57
77
  }
58
78
  /** Collects imports, engine locals, rebound names, and DTO class roots before extracting sites. */
59
- function collectFile(source, options) {
79
+ function collectFile(source, options, engineSymbols) {
60
80
  const foreign = new Set();
61
81
  const trusted = new Set();
62
82
  const rebound = new Set();
@@ -97,13 +117,23 @@ export function createSiteFinder(ts) {
97
117
  const set = constructsEngine(node.initializer.expression.text, bindings) ? trusted : rebound;
98
118
  set.add(node.name.text);
99
119
  }
120
+ else if (ts.isIdentifier(node.name) && isEngineExpression(node.name, engineSymbols)) {
121
+ trusted.add(node.name.text);
122
+ foreign.delete(node.name.text);
123
+ }
100
124
  else {
101
125
  // Catch clauses reach here too: `catch (r4)` is a VariableDeclaration.
102
126
  addBindingNames(node.name, rebound);
103
127
  }
104
128
  }
105
129
  else if (ts.isParameter(node)) {
106
- addBindingNames(node.name, rebound);
130
+ if (ts.isIdentifier(node.name) && isEngineExpression(node.name, engineSymbols)) {
131
+ trusted.add(node.name.text);
132
+ foreign.delete(node.name.text);
133
+ }
134
+ else {
135
+ addBindingNames(node.name, rebound);
136
+ }
107
137
  }
108
138
  else if ((ts.isFunctionDeclaration(node) ||
109
139
  ts.isFunctionExpression(node) ||
@@ -117,6 +147,108 @@ export function createSiteFinder(ts) {
117
147
  collectLocals(source);
118
148
  return { bindings, dtoRoots: dtoRootsOf([...heritage.values()]), heritage };
119
149
  }
150
+ /** Package engine declarations reached through a real `fhirpath-ts` import. */
151
+ function collectTrustedEngineSymbols(options) {
152
+ const symbols = new Set();
153
+ if (checker === undefined || program === undefined) {
154
+ return symbols;
155
+ }
156
+ const resolvedSymbol = (initial) => {
157
+ let symbol = initial;
158
+ const seen = new Set();
159
+ while (symbol !== undefined && (symbol.flags & ts.SymbolFlags.Alias) !== 0 && !seen.has(symbol)) {
160
+ seen.add(symbol);
161
+ symbol = checker.getAliasedSymbol(symbol);
162
+ }
163
+ return symbol;
164
+ };
165
+ const resolved = (node) => resolvedSymbol(checker.getSymbolAtLocation(node));
166
+ for (const source of program.getSourceFiles()) {
167
+ for (const statement of source.statements) {
168
+ if (!ts.isImportDeclaration(statement) ||
169
+ !ts.isStringLiteral(statement.moduleSpecifier) ||
170
+ isForeignModule(statement.moduleSpecifier.text, options)) {
171
+ continue;
172
+ }
173
+ const bindings = statement.importClause?.namedBindings;
174
+ if (bindings === undefined) {
175
+ continue;
176
+ }
177
+ if (ts.isNamedImports(bindings)) {
178
+ for (const element of bindings.elements) {
179
+ if ((element.propertyName ?? element.name).text === ENGINE_CLASS_NAME) {
180
+ const symbol = resolved(element.name);
181
+ if (symbol !== undefined) {
182
+ symbols.add(symbol);
183
+ }
184
+ }
185
+ }
186
+ continue;
187
+ }
188
+ const module = resolved(bindings.name);
189
+ const symbol = module === undefined
190
+ ? undefined
191
+ : checker.getExportsOfModule(module).find(entry => entry.name === ENGINE_CLASS_NAME);
192
+ if (symbol !== undefined) {
193
+ symbols.add(resolvedSymbol(symbol) ?? symbol);
194
+ }
195
+ }
196
+ }
197
+ return symbols;
198
+ }
199
+ function engineSymbolsFor(options) {
200
+ const key = JSON.stringify({ packages: options.packages, localImports: options.localImports === true });
201
+ const cached = engineSymbolsByOptions.get(key);
202
+ if (cached !== undefined) {
203
+ return cached;
204
+ }
205
+ const symbols = collectTrustedEngineSymbols(options);
206
+ engineSymbolsByOptions.set(key, symbols);
207
+ return symbols;
208
+ }
209
+ /** Whether TypeScript resolved an expression to this package's engine class. */
210
+ function isEngineExpression(node, engineSymbols) {
211
+ if (checker === undefined || engineSymbols.size === 0 || node.getSourceFile().isDeclarationFile) {
212
+ return false;
213
+ }
214
+ const hasEngineSymbol = (type, seen) => {
215
+ if (seen.has(type)) {
216
+ return false;
217
+ }
218
+ seen.add(type);
219
+ if (type.isUnion()) {
220
+ return type.types.length > 0 && type.types.every(member => hasEngineSymbol(member, new Set(seen)));
221
+ }
222
+ if (type.isIntersection()) {
223
+ return type.types.some(member => hasEngineSymbol(member, new Set(seen)));
224
+ }
225
+ const symbol = type.aliasSymbol ?? type.getSymbol();
226
+ if (symbol !== undefined && engineSymbols.has(symbol)) {
227
+ return true;
228
+ }
229
+ const constraint = checker.getBaseConstraintOfType(type);
230
+ if (constraint !== undefined && constraint !== type && hasEngineSymbol(constraint, seen)) {
231
+ return true;
232
+ }
233
+ if ((type.flags & ts.TypeFlags.Object) === 0) {
234
+ return false;
235
+ }
236
+ const object = type;
237
+ if ((object.objectFlags & (ts.ObjectFlags.Class | ts.ObjectFlags.Interface | ts.ObjectFlags.Reference)) === 0) {
238
+ return false;
239
+ }
240
+ return checker.getBaseTypes(type).some(base => hasEngineSymbol(base, seen));
241
+ };
242
+ return hasEngineSymbol(checker.getTypeAtLocation(node), new Set());
243
+ }
244
+ /** An unresolved receiver may still be an engine; a resolved non-engine is not our call site. */
245
+ function shouldReportUnrecognized(node) {
246
+ if (checker === undefined || node.getSourceFile().isDeclarationFile) {
247
+ return true;
248
+ }
249
+ const flags = checker.getTypeAtLocation(node).flags;
250
+ return (flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0;
251
+ }
120
252
  /** Add every identifier a binding name declares (`x`, `{ r4 }`, `[a, ...rest]`). */
121
253
  function addBindingNames(name, into) {
122
254
  if (ts.isIdentifier(name)) {
@@ -149,10 +281,116 @@ export function createSiteFinder(ts) {
149
281
  }
150
282
  return ts.isIdentifier(current) ? current.text : undefined;
151
283
  }
152
- return function findExpressionSites(sourceText, fileName, options = {}) {
153
- const source = ts.createSourceFile(fileName, sourceText, ts.ScriptTarget.Latest, true);
154
- const { bindings, dtoRoots, heritage } = collectFile(source, options);
284
+ /** Strips source wrappers that keep an expression's runtime identity. */
285
+ function unwrapped(node) {
286
+ let current = node;
287
+ while (current !== undefined &&
288
+ (ts.isParenthesizedExpression(current) ||
289
+ ts.isAsExpression(current) ||
290
+ ts.isSatisfiesExpression(current) ||
291
+ ts.isTypeAssertionExpression(current) ||
292
+ ts.isNonNullExpression(current))) {
293
+ current = current.expression;
294
+ }
295
+ return current;
296
+ }
297
+ /** Class bindings made reachable by one immutable initializer or default export. */
298
+ function bindingTargets(node) {
299
+ const target = unwrapped(node);
300
+ if (target === undefined) {
301
+ return [];
302
+ }
303
+ if (ts.isIdentifier(target)) {
304
+ return [target.text];
305
+ }
306
+ if (!ts.isClassExpression(target)) {
307
+ return [];
308
+ }
309
+ // A class expression's own name is scoped to its body, not a reference to a
310
+ // same-named top-level class. Only its base can expose another declaration.
311
+ const { baseName } = heritageOf(target);
312
+ return baseName === undefined ? [] : [baseName];
313
+ }
314
+ /**
315
+ * The module's exported names, plus what each top-level `const` binding stands
316
+ * for: `export const Row = ProblemRow` makes the loader enumerate `Row`, so
317
+ * `ProblemRow` is reachable through it — directly, through an alias chain, or
318
+ * as the base of an exported anonymous class expression.
319
+ */
320
+ function moduleBindings(source) {
321
+ const exported = new Set();
322
+ const aliases = new Map();
323
+ const addAlias = (from, to) => {
324
+ const edges = aliases.get(from);
325
+ if (edges === undefined) {
326
+ aliases.set(from, [to]);
327
+ }
328
+ else {
329
+ edges.push(to);
330
+ }
331
+ };
332
+ const isExported = (statement) => (ts.canHaveModifiers(statement) ? (ts.getModifiers(statement) ?? []) : []).some(modifier => modifier.kind === ts.SyntaxKind.ExportKeyword);
333
+ for (const statement of source.statements) {
334
+ if (ts.isClassDeclaration(statement) && isExported(statement)) {
335
+ if (statement.name !== undefined) {
336
+ exported.add(statement.name.text);
337
+ }
338
+ else {
339
+ // `export default class extends Base {}`: the loader gets the class,
340
+ // so its base is reachable even though neither has a bound name here.
341
+ const base = heritageOf(statement).baseName;
342
+ if (base !== undefined) {
343
+ exported.add(base);
344
+ }
345
+ }
346
+ }
347
+ else if (ts.isVariableStatement(statement)) {
348
+ const immutable = (statement.declarationList.flags & ts.NodeFlags.Const) !== 0;
349
+ for (const declaration of statement.declarationList.declarations) {
350
+ if (!ts.isIdentifier(declaration.name)) {
351
+ continue;
352
+ }
353
+ const name = declaration.name.text;
354
+ if (isExported(statement)) {
355
+ exported.add(name);
356
+ }
357
+ if (immutable) {
358
+ for (const target of bindingTargets(declaration.initializer)) {
359
+ addAlias(name, target);
360
+ }
361
+ }
362
+ }
363
+ }
364
+ else if (ts.isExportDeclaration(statement) &&
365
+ statement.moduleSpecifier === undefined &&
366
+ statement.isTypeOnly === false &&
367
+ statement.exportClause !== undefined) {
368
+ if (ts.isNamedExports(statement.exportClause)) {
369
+ for (const element of statement.exportClause.elements) {
370
+ if (!element.isTypeOnly) {
371
+ exported.add((element.propertyName ?? element.name).text);
372
+ }
373
+ }
374
+ }
375
+ }
376
+ else if (ts.isExportAssignment(statement)) {
377
+ for (const target of bindingTargets(statement.expression)) {
378
+ exported.add(target);
379
+ }
380
+ }
381
+ }
382
+ return { exported, aliases };
383
+ }
384
+ return function scanExpressionSites(sourceText, fileName, options = {}) {
385
+ const programSource = program?.getSourceFile(fileName);
386
+ const source = programSource !== undefined && programSource.text === sourceText
387
+ ? programSource
388
+ : ts.createSourceFile(fileName, sourceText, ts.ScriptTarget.Latest, true);
389
+ const engineSymbols = engineSymbolsFor(options);
390
+ const { bindings, dtoRoots, heritage } = collectFile(source, options, engineSymbols);
155
391
  const sites = [];
392
+ const skipped = [];
393
+ const decoratedClasses = new Set();
156
394
  const functions = {};
157
395
  // A site points at the first character inside the quote/backtick (node start
158
396
  // + 1), so fhirpath-check can add a diagnostic's span offsets directly. The
@@ -168,38 +406,121 @@ export function createSiteFinder(ts) {
168
406
  ...context,
169
407
  });
170
408
  };
171
- const visit = (node, classRoot) => {
172
- if (ts.isTaggedTemplateExpression(node) &&
173
- nameOf(node.tag) === TAG_NAME &&
174
- isCheckedTag(receiverRoot(node.tag), bindings)) {
175
- if (ts.isNoSubstitutionTemplateLiteral(node.template)) {
409
+ const skip = (node, reason, message) => {
410
+ const { line, character } = source.getLineAndCharacterOfPosition(node.getStart(source));
411
+ skipped.push({ reason, message, line: line + 1, column: character + 1 });
412
+ };
413
+ const visit = (node, classRoot, enclosingClass) => {
414
+ if (ts.isTaggedTemplateExpression(node) && nameOf(node.tag) === TAG_NAME) {
415
+ if (!isCheckedTag(receiverRoot(node.tag), bindings)) {
416
+ if (shouldReportUnrecognized(node.tag)) {
417
+ skip(node.tag, 'unrecognized-receiver', 'FHIRPath tag not analyzed: its binding is not from fhirpath-ts');
418
+ }
419
+ }
420
+ else if (ts.isNoSubstitutionTemplateLiteral(node.template)) {
176
421
  record(node.template.text, node.template);
177
422
  }
423
+ else {
424
+ skip(node.template, 'dynamic-expression', 'FHIRPath template not analyzed: substitutions make it dynamic');
425
+ }
178
426
  }
179
427
  else if (ts.isCallExpression(node)) {
180
428
  const callee = nameOf(node.expression);
181
429
  const policy = callee === undefined ? undefined : CALL_SITES.get(callee);
182
430
  const argument = policy && node.arguments[policy.argIndex];
183
- if (callee !== undefined &&
184
- policy !== undefined &&
185
- argument !== undefined &&
186
- isCheckedCall(policy, callee, receiverRoot(node.expression), bindings)) {
187
- const declares = policy.declaresField;
188
- const field = declares === undefined ? undefined : decoratedFieldName(node);
189
- if (declares !== undefined && field !== undefined) {
190
- functions[field] = declaredColumnOverloads(functions[field], columnFunctionDeclaration(declares, node.arguments[1], tsAst, classRoot));
431
+ if (callee !== undefined && policy !== undefined && argument !== undefined) {
432
+ const typedEngineReceiver = ts.isPropertyAccessExpression(node.expression) &&
433
+ isEngineExpression(node.expression.expression, engineSymbols);
434
+ const checked = isCheckedCall(policy, callee, receiverRoot(node.expression), bindings, {
435
+ ...(typedEngineReceiver && { engine: true }),
436
+ });
437
+ if (!checked) {
438
+ const receiver = receiverRoot(node.expression);
439
+ const receiverExpression = ts.isPropertyAccessExpression(node.expression)
440
+ ? node.expression.expression
441
+ : node.expression;
442
+ if (shouldReportUnrecognized(receiverExpression)) {
443
+ skip(node.expression, 'unrecognized-receiver', `${callee}(...) expression not analyzed: ${receiver === undefined
444
+ ? `binding '${callee}' is not recognized as fhirpath-ts`
445
+ : `receiver '${receiver}' is not recognized as a FhirPathEngine`}`);
446
+ }
191
447
  }
192
- const context = siteContext(policy, index => node.arguments[index], classRoot, tsAst);
193
- for (const entry of expressionEntries(argument, policy.shape, tsAst)) {
194
- record(entry.expression, entry.node, context);
448
+ else {
449
+ const declares = policy.declaresField;
450
+ const field = declares === undefined ? undefined : decoratedFieldName(node);
451
+ if (declares !== undefined && field !== undefined) {
452
+ if (enclosingClass !== undefined) {
453
+ decoratedClasses.add(enclosingClass);
454
+ }
455
+ functions[field] = declaredColumnOverloads(functions[field], columnFunctionDeclaration(declares, node.arguments[1], tsAst, classRoot));
456
+ }
457
+ for (const candidate of callExpressionCandidates(policy, index => node.arguments[index], classRoot, tsAst)) {
458
+ if (candidate.uncheckable === 'dynamic-vars') {
459
+ skip(candidate.node, 'dynamic-expression', `${callee}(...) var expressions not analyzed: their final names, values, or order are dynamic`);
460
+ }
461
+ else if (candidate.expression === undefined) {
462
+ skip(candidate.node, 'dynamic-expression', candidate.source === 'option-var'
463
+ ? `${callee}(...) var expression not analyzed: it is not a string literal`
464
+ : `${callee}(...) expression not analyzed: it is not a string literal`);
465
+ }
466
+ else {
467
+ record(candidate.expression, candidate.node, candidate.context);
468
+ }
469
+ }
195
470
  }
196
471
  }
197
472
  }
198
473
  const nested = ts.isClassLike(node) ? rootOf(heritage.get(node), dtoRoots) : classRoot;
199
- ts.forEachChild(node, child => visit(child, nested));
474
+ const nestedClass = ts.isClassLike(node) ? node : enclosingClass;
475
+ ts.forEachChild(node, child => visit(child, nested, nestedClass));
476
+ };
477
+ visit(source, undefined, undefined);
478
+ const { exported, aliases } = moduleBindings(source);
479
+ const classByName = new Map([...heritage.entries()].flatMap(([node, value]) => ts.isClassLike(node) && value.name !== undefined ? [[value.name, value]] : []));
480
+ // From every exported binding, follow alias and extends edges: what the
481
+ // loader enumerates under any name makes every class behind it analyzable.
482
+ const reachesExport = (name) => {
483
+ const seen = new Set();
484
+ const frontier = [...exported];
485
+ while (frontier.length > 0) {
486
+ const current = frontier.pop();
487
+ if (current === name) {
488
+ return true;
489
+ }
490
+ if (seen.has(current)) {
491
+ continue;
492
+ }
493
+ seen.add(current);
494
+ const base = classByName.get(current)?.baseName;
495
+ if (base !== undefined) {
496
+ frontier.push(base);
497
+ }
498
+ frontier.push(...(aliases.get(current) ?? []));
499
+ }
500
+ return false;
501
+ };
502
+ const dtoDeclarations = [...decoratedClasses].flatMap(node => {
503
+ const nameNode = node.name;
504
+ // Runtime module discovery can only miss top-level module-local classes.
505
+ // A class inside a factory is reached through whatever class the factory
506
+ // returns, rather than as a module export with its source name.
507
+ if (nameNode === undefined || node.parent !== source) {
508
+ return [];
509
+ }
510
+ const name = nameNode.text;
511
+ const { line, character } = source.getLineAndCharacterOfPosition(nameNode.getStart(source));
512
+ return [{ name, line: line + 1, column: character + 1, loadable: reachesExport(name) }];
513
+ });
514
+ return {
515
+ sites: Object.keys(functions).length === 0 ? sites : sites.map(site => ({ ...site, functions })),
516
+ skipped,
517
+ dtoDeclarations,
200
518
  };
201
- visit(source, undefined);
202
- return Object.keys(functions).length === 0 ? sites : sites.map(site => ({ ...site, functions }));
203
519
  };
204
520
  }
521
+ /** Creates the compatibility finder that returns only expressions successfully extracted. */
522
+ export function createSiteFinder(ts, program) {
523
+ const scan = createSiteScanner(ts, program);
524
+ return (sourceText, fileName, options) => scan(sourceText, fileName, options).sites;
525
+ }
205
526
  //# sourceMappingURL=index.js.map