@codeperfect/eslint-plugin 3.1.0 → 3.2.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.
Files changed (60) hide show
  1. package/dist/adapters/angular/angular-template-block-usage-utilities.d.ts +4 -0
  2. package/dist/adapters/angular/angular-template-block-usage-utilities.d.ts.map +1 -0
  3. package/dist/adapters/angular/angular-template-block-usage-utilities.js +69 -0
  4. package/dist/adapters/angular/angular-template-expression-utilities.d.ts +5 -0
  5. package/dist/adapters/angular/angular-template-expression-utilities.d.ts.map +1 -0
  6. package/dist/adapters/angular/angular-template-expression-utilities.js +121 -0
  7. package/dist/adapters/angular/angular-template-node-usage-utilities.d.ts +4 -0
  8. package/dist/adapters/angular/angular-template-node-usage-utilities.d.ts.map +1 -0
  9. package/dist/adapters/angular/angular-template-node-usage-utilities.js +47 -0
  10. package/dist/adapters/angular/angular-template-usage-context.d.ts +26 -0
  11. package/dist/adapters/angular/angular-template-usage-context.d.ts.map +1 -0
  12. package/dist/adapters/angular/angular-template-usage-context.js +12 -0
  13. package/dist/adapters/angular/index.d.ts +2 -0
  14. package/dist/adapters/angular/index.d.ts.map +1 -0
  15. package/dist/adapters/angular/index.js +2 -0
  16. package/dist/adapters/angular/no-unused-public-members-template-adapter.d.ts +15 -0
  17. package/dist/adapters/angular/no-unused-public-members-template-adapter.d.ts.map +1 -0
  18. package/dist/adapters/angular/no-unused-public-members-template-adapter.js +126 -0
  19. package/dist/adapters/angular/plugin.d.ts +12 -0
  20. package/dist/adapters/angular/plugin.d.ts.map +1 -0
  21. package/dist/adapters/angular/plugin.js +14 -0
  22. package/dist/adapters/index.d.ts +2 -0
  23. package/dist/adapters/index.d.ts.map +1 -0
  24. package/dist/adapters/index.js +2 -0
  25. package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
  26. package/dist/domain/architecture/no-unused-public-members/member-public-api-utilities.d.ts.map +1 -1
  27. package/dist/domain/architecture/no-unused-public-members/member-public-api-utilities.js +7 -2
  28. package/dist/domain/architecture/no-unused-public-members/member-usage-expression-reference-utilities.d.ts +16 -0
  29. package/dist/domain/architecture/no-unused-public-members/member-usage-expression-reference-utilities.d.ts.map +1 -0
  30. package/dist/domain/architecture/no-unused-public-members/member-usage-expression-reference-utilities.js +77 -0
  31. package/dist/domain/architecture/no-unused-public-members/member-usage-handoff-utilities.d.ts +2 -2
  32. package/dist/domain/architecture/no-unused-public-members/member-usage-handoff-utilities.d.ts.map +1 -1
  33. package/dist/domain/architecture/no-unused-public-members/member-usage-handoff-utilities.js +69 -43
  34. package/dist/domain/architecture/no-unused-public-members/member-usage-local-flow-utilities.d.ts +16 -0
  35. package/dist/domain/architecture/no-unused-public-members/member-usage-local-flow-utilities.d.ts.map +1 -0
  36. package/dist/domain/architecture/no-unused-public-members/member-usage-local-flow-utilities.js +151 -0
  37. package/dist/domain/architecture/no-unused-public-members/member-usage-reference-utilities.d.ts.map +1 -1
  38. package/dist/domain/architecture/no-unused-public-members/member-usage-reference-utilities.js +12 -5
  39. package/dist/domain/architecture/no-unused-public-members/member-usage-serialization-utilities.d.ts +30 -0
  40. package/dist/domain/architecture/no-unused-public-members/member-usage-serialization-utilities.d.ts.map +1 -0
  41. package/dist/domain/architecture/no-unused-public-members/member-usage-serialization-utilities.js +107 -0
  42. package/dist/domain/architecture/no-unused-public-members/member-usage-type-utilities.d.ts +26 -4
  43. package/dist/domain/architecture/no-unused-public-members/member-usage-type-utilities.d.ts.map +1 -1
  44. package/dist/domain/architecture/no-unused-public-members/member-usage-type-utilities.js +77 -21
  45. package/dist/domain/architecture/no-unused-public-members/member-usage-utilities.d.ts +5 -1
  46. package/dist/domain/architecture/no-unused-public-members/member-usage-utilities.d.ts.map +1 -1
  47. package/dist/domain/architecture/no-unused-public-members/member-usage-utilities.js +11 -2
  48. package/dist/domain/architecture/no-unused-public-members/member-usage-value-utilities.d.ts +43 -0
  49. package/dist/domain/architecture/no-unused-public-members/member-usage-value-utilities.d.ts.map +1 -0
  50. package/dist/domain/architecture/no-unused-public-members/member-usage-value-utilities.js +126 -0
  51. package/dist/domain/architecture/no-unused-public-members/member-utilities.d.ts +3 -1
  52. package/dist/domain/architecture/no-unused-public-members/member-utilities.d.ts.map +1 -1
  53. package/dist/domain/architecture/no-unused-public-members/member-utilities.js +4 -3
  54. package/dist/domain/architecture/no-unused-public-members/rule.d.ts +12 -1
  55. package/dist/domain/architecture/no-unused-public-members/rule.d.ts.map +1 -1
  56. package/dist/domain/architecture/no-unused-public-members/rule.js +45 -35
  57. package/dist/index.d.ts +1 -0
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +2 -1
  60. package/package.json +13 -1
@@ -1 +1 @@
1
- {"version":3,"file":"member-public-api-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-public-members/member-public-api-utilities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AA2DvE;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,iBAAiB,GACrB,SAAS,EAAE,CAAC,OAAO,EACnB,OAAO,oBAAoB,EAC3B,UAAU,MAAM,EAChB,cAAc,EAAE,CAAC,MAAM,KACtB,OA6CF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,eAAe,GACnB,SAAS,EAAE,CAAC,OAAO,EACnB,OAAO,oBAAoB,EAC3B,UAAU,MAAM,EAChB,YAAY,EAAE,CAAC,MAAM,GAAG,SAAS,KAChC,OAsBF,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"member-public-api-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-public-members/member-public-api-utilities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAwEvE;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,iBAAiB,GACrB,SAAS,EAAE,CAAC,OAAO,EACnB,OAAO,oBAAoB,EAC3B,UAAU,MAAM,EAChB,cAAc,EAAE,CAAC,MAAM,KACtB,OAsDF,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,eAAe,GACnB,SAAS,EAAE,CAAC,OAAO,EACnB,OAAO,oBAAoB,EAC3B,UAAU,MAAM,EAChB,YAAY,EAAE,CAAC,MAAM,GAAG,SAAS,KAChC,OAsBF,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC"}
@@ -21,6 +21,9 @@ const typeContainsSymbol = (type, targetSymbol, checker, location, visitedTypes,
21
21
  return false;
22
22
  }
23
23
  visitedTypes.add(type);
24
+ if (type.isUnionOrIntersection()) {
25
+ return type.types.some((constituent) => typeContainsSymbol(constituent, targetSymbol, checker, location, visitedTypes, depth));
26
+ }
24
27
  for (const property of checker.getPropertiesOfType(type)) {
25
28
  if (isSameSymbol(resolveCanonicalSymbol(property, checker), targetSymbol) ||
26
29
  typeContainsSymbol(checker.getTypeOfSymbolAtLocation(property, location), targetSymbol, checker, location, visitedTypes, depth - 1)) {
@@ -61,7 +64,9 @@ const isPublicApiMember = (program, state, repoRoot, memberSymbol) => {
61
64
  for (const exportedSymbol of checker.getExportsOfModule(moduleSymbol)) {
62
65
  const canonicalExport = resolveCanonicalSymbol(exportedSymbol, checker);
63
66
  if (isSameSymbol(canonicalExport, targetSymbol) ||
64
- typeContainsSymbol(checker.getTypeOfSymbolAtLocation(canonicalExport, sourceFile), targetSymbol, checker, sourceFile, new Set(), 3)) {
67
+ typeContainsSymbol(checker.getTypeOfSymbolAtLocation(canonicalExport, sourceFile), targetSymbol, checker, sourceFile, new Set(), 3) ||
68
+ ((canonicalExport.flags & ts.SymbolFlags.Type) !== 0 &&
69
+ typeContainsSymbol(checker.getDeclaredTypeOfSymbol(canonicalExport), targetSymbol, checker, sourceFile, new Set(), 3))) {
65
70
  return true;
66
71
  }
67
72
  }
@@ -98,4 +103,4 @@ const isPublicApiHost = (program, state, repoRoot, hostSymbol) => {
98
103
  });
99
104
  };
100
105
  export { isPublicApiHost, isPublicApiMember };
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYmVyLXB1YmxpYy1hcGktdXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi9hcmNoaXRlY3R1cmUvbm8tdW51c2VkLXB1YmxpYy1tZW1iZXJzL21lbWJlci1wdWJsaWMtYXBpLXV0aWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFJakMsT0FBTyxFQUNMLGVBQWUsRUFDZixVQUFVLEdBQ1gsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLHNCQUFzQixFQUN0Qix1QkFBdUIsR0FDeEIsTUFBTSx5REFBeUQsQ0FBQztBQUVqRTs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxDQUN6QixJQUFhLEVBQ2IsWUFBdUIsRUFDdkIsT0FBdUIsRUFDdkIsUUFBaUIsRUFDakIsWUFBMEIsRUFDMUIsS0FBYSxFQUNKLEVBQUU7SUFDWCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFdkIsS0FBSyxNQUFNLFFBQVEsSUFBSSxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6RCxJQUNFLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsWUFBWSxDQUFDO1lBQ3JFLGtCQUFrQixDQUNoQixPQUFPLENBQUMseUJBQXlCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUNyRCxZQUFZLEVBQ1osT0FBTyxFQUNQLFFBQVEsRUFDUixZQUFZLEVBQ1osS0FBSyxH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LEVBQUUsY0FBYyxDQUFDO1lBQzVDLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQzVELENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE9BQU8sRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCAqIGFzIHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbmltcG9ydCB0eXBlIHsgTm9VbnVzZWRFeHBvcnRzU3RhdGUgfSBmcm9tIFwiLi4vbm8tdW51c2VkLWV4cG9ydHMvdHlwZXNcIjtcblxuaW1wb3J0IHtcbiAgaXNQdWJsaWNBcGlGaWxlLFxuICBpc1Rlc3RGaWxlLFxufSBmcm9tIFwiLi4vbm8tdW51c2VkLWV4cG9ydHMvbm8tdW51c2VkLWV4cG9ydHMtb3B0aW9uc1wiO1xuaW1wb3J0IHtcbiAgaXNTYW1lU3ltYm9sLFxuICByZXNvbHZlQ2Fub25pY2FsU3ltYm9sLFxuICBzb3VyY2VGaWxlRXhwb3J0c1N5bWJvbCxcbn0gZnJvbSBcIi4uL25vLXVudXNlZC1leHBvcnRzL25vLXVudXNlZC1leHBvcnRzLXN5bWJvbC11dGlsaXRpZXNcIjtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHN5bWJvbCBpcyBuZXN0ZWQgd2l0aGluIGFuIGV4cG9ydGVkIEFQSSB0eXBlLlxuICogQHBhcmFtIHR5cGUgVHlwZSBzaGFwZSBvZiBhbiBleHBvcnRlZCB2YWx1ZSBvciB0eXBlLlxuICogQHBhcmFtIHRhcmdldFN5bWJvbCBTeW1ib2wgYmVpbmcgc2VhcmNoZWQgZm9yLlxuICogQHBhcmFtIGNoZWNrZXIgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gKiBAcGFyYW0gbG9jYXRpb24gTm9kZSB1c2VkIHRvIHJlc29sdmUgcHJvcGVydHkgdHlwZXMuXG4gKiBAcGFyYW0gdmlzaXRlZFR5cGVzIFR5cGVzIGFscmVhZHkgY2hlY2tlZCBvbiB0aGlzIHNlYXJjaCBwYXRoLlxuICogQHBhcmFtIGRlcHRoIFJlbWFpbmluZyBuZXN0ZWQgcHJvcGVydHkgZGVwdGguXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIHRhcmdldCBvY2N1cnMgaW4gdGhlIGV4cG9ydGVkIHR5cGUgc2hhcGUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZXhwb3NlZCA9IHR5cGVDb250YWluc1N5bWJvbCh0eXBlLCBtZW1iZXIsIGNoZWNrZXIsIHNvdXJjZUZpbGUsIG5ldyBTZXQoKSwgMik7XG4gKiBgYGBcbiAqL1xuY29uc3QgdHlwZUNvbnRhaW5zU3ltYm9sID0gKFxuICB0eXBlOiB0cy5UeXBlLFxuICB0YXJnZXRTeW1ib2w6IHRzLlN5bWJvbCxcbiAgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gIGxvY2F0aW9uOiB0cy5Ob2RlLFxuICB2aXNpdGVkVHlwZXM6IFNldDx0cy5UeXBlPixcbiAgZGVwdGg6IG51bWJlcixcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoZGVwdGggPCAwIHx8IHZpc2l0ZWRUeXBlcy5oYXModHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2aXNpdGVkVHlwZXMuYWRkKHR5cGUpO1xuXG4gIGZvciAoY29uc3QgcHJvcGVydHkgb2YgY2hlY2tlci5nZXRQcm9wZXJ0aWVzT2ZUeXBlKHR5cGUpKSB7XG4gICAgaWYgKFxuICAgICAgaXNTYW1lU3ltYm9sKHJlc29sdmVDYW5vbmljYWxTeW1ib2wocHJvcGVydHksIGNoZWNrZXIpLCB0YXJnZXRTeW1ib2wpIHx8XG4gICAgICB0eXBlQ29udGFpbnNTeW1ib2woXG4gICAgICAgIGNoZWNrZXIuZ2V0VHlwZU9mU3ltYm9sQXRMb2NhdGlvbihwcm9wZXJ0eSwgbG9jYXRpb24pLFxuICAgICAgICB0YXJnZXRTeW1ib2wsXG4gICAgICAgIGNoZWNrZXIsXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICB2aXNpdGVkVHlwZXMsXG4gICAgICAgIGRlcHRoIC0gMSxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBtZW1iZXIgaXMgcmVhY2hhYmxlIGZyb20gYSBjb25maWd1cmVkIHB1YmxpYyBBUEkgZXhwb3J0LlxuICogQHBhcmFtIHByb2dyYW0gVHlwZVNjcmlwdCBwcm9qZWN0IHByb2dyYW0uXG4gKiBAcGFyYW0gc3RhdGUgTm9ybWFsaXplZCBwdWJsaWMgQVBJIGFuZCB0ZXN0IHBhdHRlcm5zLlxuICogQHBhcmFtIHJlcG9Sb290IFJvb3QgZGlyZWN0b3J5IHVzZWQgZm9yIGdsb2IgbWF0Y2hpbmcuXG4gKiBAcGFyYW0gbWVtYmVyU3ltYm9sIE1lbWJlciBzeW1ib2wgYmVpbmcgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiBhbiBBUEkgZXhwb3J0IGV4cG9zZXMgdGhlIG1lbWJlci5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBleHBvc2VkID0gaXNQdWJsaWNBcGlNZW1iZXIocHJvZ3JhbSwgc3RhdGUsIHJlcG9Sb290LCBtZW1iZXJTeW1ib2wpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzUHVibGljQXBpTWVtYmVyID0gKFxuICBwcm9ncmFtOiB0cy5Qcm9ncmFtLFxuICBzdGF0ZTogTm9VbnVzZWRFeHBvcnRzU3RhdGUsXG4gIHJlcG9Sb290OiBzdHJpbmcsXG4gIG1lbWJlclN5bWJvbDogdHMuU3ltYm9sLFxuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gIGNvbnN0IHRhcmdldFN5bWJvbCA9IHJlc29sdmVDYW5vbmljYWxTeW1ib2wobWVtYmVyU3ltYm9sLCBjaGVja2VyKTtcbiAgY29uc3Qgbm9ybWFsaXplZFJvb3QgPSBwYXRoLnJlc29sdmUocmVwb1Jvb3QpO1xuXG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICBpZiAoc291cmNlRmlsZS5pc0RlY2xhcmF0aW9uRmlsZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZW5hbWUgPSBwYXRoLnJlc29sdmUoc291cmNlRmlsZS5maWxlTmFtZSk7XG5cbiAgICBpZiAoXG4gICAgICAhaXNQdWJsaWNBcGlGaWxlKGZpbGVuYW1lLCBzdGF0ZSwgbm9ybWFsaXplZFJvb3QpIHx8XG4gICAgICBpc1Rlc3RGaWxlKGZpbGVuYW1lLCBzdGF0ZSwgbm9ybWFsaXplZFJvb3QpXG4gICAgKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBtb2R1bGVTeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oc291cmNlRmlsZSk7XG5cbiAgICBpZiAobW9kdWxlU3ltYm9sID09PSB2b2lkIDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZXhwb3J0ZWRTeW1ib2wgb2YgY2hlY2tlci5nZXRFeHBvcnRzT2ZNb2R1bGUobW9kdWxlU3ltYm9sKSkge1xuICAgICAgY29uc3QgY2Fub25pY2FsRXhwb3J0ID0gcmVzb2x2ZUNhbm9uaWNhbFN5bWJvbChleHBvcnRlZFN5bWJvbCwgY2hlY2tlcik7XG5cbiAgICAgIGlmIChcbiAgICAgICAgaXNTYW1lU3ltYm9sKGNhbm9uaWNhbEV4cG9ydCwgdGFyZ2V0U3ltYm9sKSB8fFxuICAgICAgICB0eXBlQ29udGFpbnNTeW1ib2woXG4gICAgICAgICAgY2hlY2tlci5nZXRUeXBlT2ZTeW1ib2xBdExvY2F0aW9uKGNhbm9uaWNhbEV4cG9ydCwgc291cmNlRmlsZSksXG4gICAgICAgICAgdGFyZ2V0U3ltYm9sLFxuICAgICAgICAgIGNoZWNrZXIsXG4gICAgICAgICAgc291cmNlRmlsZSxcbiAgICAgICAgICBuZXcgU2V0KCksXG4gICAgICAgICAgMyxcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBob3N0IGlzIGV4cG9ydGVkIGZyb20gYSBjb25maWd1cmVkIHB1YmxpYyBBUEkgZmlsZS5cbiAqIEBwYXJhbSBwcm9ncmFtIFR5cGVTY3JpcHQgcHJvamVjdCBwcm9ncmFtLlxuICogQHBhcmFtIHN0YXRlIE5vcm1hbGl6ZWQgcHVibGljIEFQSSBhbmQgdGVzdCBwYXR0ZXJucy5cbiAqIEBwYXJhbSByZXBvUm9vdCBSb290IGRpcmVjdG9yeSB1c2VkIGZvciBnbG9iIG1hdGNoaW5nLlxuICogQHBhcmFtIGhvc3RTeW1ib2wgSG9zdCBkZWNsYXJhdGlvbiBzeW1ib2wuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIGhvc3QgaXMgZXhwb3NlZCBieSBhIG5vbi10ZXN0IEFQSSBmaWxlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGlzUHVibGljID0gaXNQdWJsaWNBcGlIb3N0KHByb2dyYW0sIHN0YXRlLCByZXBvUm9vdCwgaG9zdFN5bWJvbCk7XG4gKiBgYGBcbiAqL1xuY29uc3QgaXNQdWJsaWNBcGlIb3N0ID0gKFxuICBwcm9ncmFtOiB0cy5Qcm9ncmFtLFxuICBzdGF0ZTogTm9VbnVzZWRFeHBvcnRzU3RhdGUsXG4gIHJlcG9Sb290OiBzdHJpbmcsXG4gIGhvc3RTeW1ib2w6IHRzLlN5bWJvbCB8IHVuZGVmaW5lZCxcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoaG9zdFN5bWJvbCA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY2hlY2tlciA9IHByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcbiAgY29uc3Qgbm9ybWFsaXplZFJvb3QgPSBwYXRoLnJlc29sdmUocmVwb1Jvb3QpO1xuICBjb25zdCBjYW5vbmljYWxIb3N0ID0gcmVzb2x2ZUNhbm9uaWNhbFN5bWJvbChob3N0U3ltYm9sLCBjaGVja2VyKTtcblxuICByZXR1cm4gcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpLnNvbWUoKHNvdXJjZUZpbGUpID0+IHtcbiAgICBpZiAoc291cmNlRmlsZS5pc0RlY2xhcmF0aW9uRmlsZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVuYW1lID0gcGF0aC5yZXNvbHZlKHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGlzUHVibGljQXBpRmlsZShmaWxlbmFtZSwgc3RhdGUsIG5vcm1hbGl6ZWRSb290KSAmJlxuICAgICAgIWlzVGVzdEZpbGUoZmlsZW5hbWUsIHN0YXRlLCBub3JtYWxpemVkUm9vdCkgJiZcbiAgICAgIHNvdXJjZUZpbGVFeHBvcnRzU3ltYm9sKHNvdXJjZUZpbGUsIGNoZWNrZXIsIGNhbm9uaWNhbEhvc3QpXG4gICAgKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgeyBpc1B1YmxpY0FwaUhvc3QsIGlzUHVibGljQXBpTWVtYmVyIH07XG4iXX0=
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYmVyLXB1YmxpYy1hcGktdXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi9hcmNoaXRlY3R1cmUvbm8tdW51c2VkLXB1YmxpYy1tZW1iZXJzL21lbWJlci1wdWJsaWMtYXBpLXV0aWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFJakMsT0FBTyxFQUNMLGVBQWUsRUFDZixVQUFVLEdBQ1gsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLHNCQUFzQixFQUN0Qix1QkFBdUIsR0FDeEIsTUFBTSx5REFBeUQsQ0FBQztBQUVqRTs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxDQUN6QixJQUFhLEVBQ2IsWUFBdUIsRUFDdkIsT0FBdUIsRUFDdkIsUUFBaUIsRUFDakIsWUFBMEIsRUFDMUIsS0FBYSxFQUNKLEVBQUU7SUFDWCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3hDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFdkIsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUNyQyxrQkFBa0IsQ0FDaEIsV0FBVyxFQUNYLFlBQVksRUFDWixPQUFPLEVBQ1AsUUFBUSxFQUNSLFlBQVksRUFDWixLQUFLLENBQ04sQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssTUFBTSxRQUFRLElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFD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QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sYUFBYSxHQUFHLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVsRSxPQUFPLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtRQUNsRCxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRW5ELE9BQU8sQ0FDTCxlQUFlLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUM7WUFDaEQsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxjQUFjLENBQUM7WUFDNUMsdUJBQXVCLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FDNUQsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0ICogYXMgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcblxuaW1wb3J0IHR5cGUgeyBOb1VudXNlZEV4cG9ydHNTdGF0ZSB9IGZyb20gXCIuLi9uby11bnVzZWQtZXhwb3J0cy90eXBlc1wiO1xuXG5pbXBvcnQge1xuICBpc1B1YmxpY0FwaUZpbGUsXG4gIGlzVGVzdEZpbGUsXG59IGZyb20gXCIuLi9uby11bnVzZWQtZXhwb3J0cy9uby11bnVzZWQtZXhwb3J0cy1vcHRpb25zXCI7XG5pbXBvcnQge1xuICBpc1NhbWVTeW1ib2wsXG4gIHJlc29sdmVDYW5vbmljYWxTeW1ib2wsXG4gIHNvdXJjZUZpbGVFeHBvcnRzU3ltYm9sLFxufSBmcm9tIFwiLi4vbm8tdW51c2VkLWV4cG9ydHMvbm8tdW51c2VkLWV4cG9ydHMtc3ltYm9sLXV0aWxpdGllc1wiO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgc3ltYm9sIGlzIG5lc3RlZCB3aXRoaW4gYW4gZXhwb3J0ZWQgQVBJIHR5cGUuXG4gKiBAcGFyYW0gdHlwZSBUeXBlIHNoYXBlIG9mIGFuIGV4cG9ydGVkIHZhbHVlIG9yIHR5cGUuXG4gKiBAcGFyYW0gdGFyZ2V0U3ltYm9sIFN5bWJvbCBiZWluZyBzZWFyY2hlZCBmb3IuXG4gKiBAcGFyYW0gY2hlY2tlciBUeXBlU2NyaXB0IHR5cGUgY2hlY2tlci5cbiAqIEBwYXJhbSBsb2NhdGlvbiBOb2RlIHVzZWQgdG8gcmVzb2x2ZSBwcm9wZXJ0eSB0eXBlcy5cbiAqIEBwYXJhbSB2aXNpdGVkVHlwZXMgVHlwZXMgYWxyZWFkeSBjaGVja2VkIG9uIHRoaXMgc2VhcmNoIHBhdGguXG4gKiBAcGFyYW0gZGVwdGggUmVtYWluaW5nIG5lc3RlZCBwcm9wZXJ0eSBkZXB0aC5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgdGFyZ2V0IG9jY3VycyBpbiB0aGUgZXhwb3J0ZWQgdHlwZSBzaGFwZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBleHBvc2VkID0gdHlwZUNvbnRhaW5zU3ltYm9sKHR5cGUsIG1lbWJlciwgY2hlY2tlciwgc291cmNlRmlsZSwgbmV3IFNldCgpLCAyKTtcbiAqIGBgYFxuICovXG5jb25zdCB0eXBlQ29udGFpbnNTeW1ib2wgPSAoXG4gIHR5cGU6IHRzLlR5cGUsXG4gIHRhcmdldFN5bWJvbDogdHMuU3ltYm9sLFxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgbG9jYXRpb246IHRzLk5vZGUsXG4gIHZpc2l0ZWRUeXBlczogU2V0PHRzLlR5cGU+LFxuICBkZXB0aDogbnVtYmVyLFxuKTogYm9vbGVhbiA9PiB7XG4gIGlmIChkZXB0aCA8IDAgfHwgdmlzaXRlZFR5cGVzLmhhcyh0eXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZpc2l0ZWRUeXBlcy5hZGQodHlwZSk7XG5cbiAgaWYgKHR5cGUuaXNVbmlvbk9ySW50ZXJzZWN0aW9uKCkpIHtcbiAgICByZXR1cm4gdHlwZS50eXBlcy5zb21lKChjb25zdGl0dWVudCkgPT5cbiAgICAgIHR5cGVDb250YWluc1N5bWJvbChcbiAgICAgICAgY29uc3RpdHVlbnQsXG4gICAgICAgIHRhcmdldFN5bWJvbCxcbiAgICAgICAgY2hlY2tlcixcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHZpc2l0ZWRUeXBlcyxcbiAgICAgICAgZGVwdGgsXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIGNoZWNrZXIuZ2V0UHJvcGVydGllc09mVHlwZSh0eXBlKSkge1xuICAgIGlmIChcbiAgICAgIGlzU2FtZVN5bWJvbChyZXNvbHZlQ2Fub25pY2FsU3ltYm9sKHByb3BlcnR5LCBjaGVja2VyKSwgdGFyZ2V0U3ltYm9sKSB8fFxuICAgICAgdHlwZUNvbnRhaW5zU3ltYm9sKFxuICAgICAgICBjaGVja2VyLmdldFR5cGVPZlN5bWJvbEF0TG9jYXRpb24ocHJvcGVydHksIGxvY2F0aW9uKSxcbiAgICAgICAgdGFyZ2V0U3ltYm9sLFxuICAgICAgICBjaGVja2VyLFxuICAgICAgICBsb2NhdGlvbixcbiAgICAgICAgdmlzaXRlZFR5cGVzLFxuICAgICAgICBkZXB0aCAtIDEsXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbWVtYmVyIGlzIHJlYWNoYWJsZSBmcm9tIGEgY29uZmlndXJlZCBwdWJsaWMgQVBJIGV4cG9ydC5cbiAqIEBwYXJhbSBwcm9ncmFtIFR5cGVTY3JpcHQgcHJvamVjdCBwcm9ncmFtLlxuICogQHBhcmFtIHN0YXRlIE5vcm1hbGl6ZWQgcHVibGljIEFQSSBhbmQgdGVzdCBwYXR0ZXJucy5cbiAqIEBwYXJhbSByZXBvUm9vdCBSb290IGRpcmVjdG9yeSB1c2VkIGZvciBnbG9iIG1hdGNoaW5nLlxuICogQHBhcmFtIG1lbWJlclN5bWJvbCBNZW1iZXIgc3ltYm9sIGJlaW5nIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gYW4gQVBJIGV4cG9ydCBleHBvc2VzIHRoZSBtZW1iZXIuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZXhwb3NlZCA9IGlzUHVibGljQXBpTWVtYmVyKHByb2dyYW0sIHN0YXRlLCByZXBvUm9vdCwgbWVtYmVyU3ltYm9sKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc1B1YmxpY0FwaU1lbWJlciA9IChcbiAgcHJvZ3JhbTogdHMuUHJvZ3JhbSxcbiAgc3RhdGU6IE5vVW51c2VkRXhwb3J0c1N0YXRlLFxuICByZXBvUm9vdDogc3RyaW5nLFxuICBtZW1iZXJTeW1ib2w6IHRzLlN5bWJvbCxcbik6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBjaGVja2VyID0gcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCB0YXJnZXRTeW1ib2wgPSByZXNvbHZlQ2Fub25pY2FsU3ltYm9sKG1lbWJlclN5bWJvbCwgY2hlY2tlcik7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSb290ID0gcGF0aC5yZXNvbHZlKHJlcG9Sb290KTtcblxuICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2YgcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgaWYgKHNvdXJjZUZpbGUuaXNEZWNsYXJhdGlvbkZpbGUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVuYW1lID0gcGF0aC5yZXNvbHZlKHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuXG4gICAgaWYgKFxuICAgICAgIWlzUHVibGljQXBpRmlsZShmaWxlbmFtZSwgc3RhdGUsIG5vcm1hbGl6ZWRSb290KSB8fFxuICAgICAgaXNUZXN0RmlsZShmaWxlbmFtZSwgc3RhdGUsIG5vcm1hbGl6ZWRSb290KVxuICAgICkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbW9kdWxlU3ltYm9sID0gY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKHNvdXJjZUZpbGUpO1xuXG4gICAgaWYgKG1vZHVsZVN5bWJvbCA9PT0gdm9pZCAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGV4cG9ydGVkU3ltYm9sIG9mIGNoZWNrZXIuZ2V0RXhwb3J0c09mTW9kdWxlKG1vZHVsZVN5bWJvbCkpIHtcbiAgICAgIGNvbnN0IGNhbm9uaWNhbEV4cG9ydCA9IHJlc29sdmVDYW5vbmljYWxTeW1ib2woZXhwb3J0ZWRTeW1ib2wsIGNoZWNrZXIpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIGlzU2FtZVN5bWJvbChjYW5vbmljYWxFeHBvcnQsIHRhcmdldFN5bWJvbCkgfHxcbiAgICAgICAgdHlwZUNvbnRhaW5zU3ltYm9sKFxuICAgICAgICAgIGNoZWNrZXIuZ2V0VHlwZU9mU3ltYm9sQXRMb2NhdGlvbihjYW5vbmljYWxFeHBvcnQsIHNvdXJjZUZpbGUpLFxuICAgICAgICAgIHRhcmdldFN5bWJvbCxcbiAgICAgICAgICBjaGVja2VyLFxuICAgICAgICAgIHNvdXJjZUZpbGUsXG4gICAgICAgICAgbmV3IFNldCgpLFxuICAgICAgICAgIDMsXG4gICAgICAgICkgfHxcbiAgICAgICAgKChjYW5vbmljYWxFeHBvcnQuZmxhZ3MgJiB0cy5TeW1ib2xGbGFncy5UeXBlKSAhPT0gMCAmJlxuICAgICAgICAgIHR5cGVDb250YWluc1N5bWJvbChcbiAgICAgICAgICAgIGNoZWNrZXIuZ2V0RGVjbGFyZWRUeXBlT2ZTeW1ib2woY2Fub25pY2FsRXhwb3J0KSxcbiAgICAgICAgICAgIHRhcmdldFN5bWJvbCxcbiAgICAgICAgICAgIGNoZWNrZXIsXG4gICAgICAgICAgICBzb3VyY2VGaWxlLFxuICAgICAgICAgICAgbmV3IFNldCgpLFxuICAgICAgICAgICAgMyxcbiAgICAgICAgICApKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBob3N0IGlzIGV4cG9ydGVkIGZyb20gYSBjb25maWd1cmVkIHB1YmxpYyBBUEkgZmlsZS5cbiAqIEBwYXJhbSBwcm9ncmFtIFR5cGVTY3JpcHQgcHJvamVjdCBwcm9ncmFtLlxuICogQHBhcmFtIHN0YXRlIE5vcm1hbGl6ZWQgcHVibGljIEFQSSBhbmQgdGVzdCBwYXR0ZXJucy5cbiAqIEBwYXJhbSByZXBvUm9vdCBSb290IGRpcmVjdG9yeSB1c2VkIGZvciBnbG9iIG1hdGNoaW5nLlxuICogQHBhcmFtIGhvc3RTeW1ib2wgSG9zdCBkZWNsYXJhdGlvbiBzeW1ib2wuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIGhvc3QgaXMgZXhwb3NlZCBieSBhIG5vbi10ZXN0IEFQSSBmaWxlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGlzUHVibGljID0gaXNQdWJsaWNBcGlIb3N0KHByb2dyYW0sIHN0YXRlLCByZXBvUm9vdCwgaG9zdFN5bWJvbCk7XG4gKiBgYGBcbiAqL1xuY29uc3QgaXNQdWJsaWNBcGlIb3N0ID0gKFxuICBwcm9ncmFtOiB0cy5Qcm9ncmFtLFxuICBzdGF0ZTogTm9VbnVzZWRFeHBvcnRzU3RhdGUsXG4gIHJlcG9Sb290OiBzdHJpbmcsXG4gIGhvc3RTeW1ib2w6IHRzLlN5bWJvbCB8IHVuZGVmaW5lZCxcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAoaG9zdFN5bWJvbCA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY2hlY2tlciA9IHByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcbiAgY29uc3Qgbm9ybWFsaXplZFJvb3QgPSBwYXRoLnJlc29sdmUocmVwb1Jvb3QpO1xuICBjb25zdCBjYW5vbmljYWxIb3N0ID0gcmVzb2x2ZUNhbm9uaWNhbFN5bWJvbChob3N0U3ltYm9sLCBjaGVja2VyKTtcblxuICByZXR1cm4gcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpLnNvbWUoKHNvdXJjZUZpbGUpID0+IHtcbiAgICBpZiAoc291cmNlRmlsZS5pc0RlY2xhcmF0aW9uRmlsZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVuYW1lID0gcGF0aC5yZXNvbHZlKHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIGlzUHVibGljQXBpRmlsZShmaWxlbmFtZSwgc3RhdGUsIG5vcm1hbGl6ZWRSb290KSAmJlxuICAgICAgIWlzVGVzdEZpbGUoZmlsZW5hbWUsIHN0YXRlLCBub3JtYWxpemVkUm9vdCkgJiZcbiAgICAgIHNvdXJjZUZpbGVFeHBvcnRzU3ltYm9sKHNvdXJjZUZpbGUsIGNoZWNrZXIsIGNhbm9uaWNhbEhvc3QpXG4gICAgKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgeyBpc1B1YmxpY0FwaUhvc3QsIGlzUHVibGljQXBpTWVtYmVyIH07XG4iXX0=
@@ -0,0 +1,16 @@
1
+ import * as ts from "typescript";
2
+ /**
3
+ * Checks whether an expression can be traced back to a symbol.
4
+ * @param expression Expression to inspect.
5
+ * @param targetSymbol Symbol whose value flow is followed.
6
+ * @param checker TypeScript type checker.
7
+ * @param visitedExpressions Expressions already inspected.
8
+ * @returns True when the expression derives from the target symbol.
9
+ * @example
10
+ * ```typescript
11
+ * const forwarded = expressionReferencesSymbol(value, symbol, checker);
12
+ * ```
13
+ */
14
+ declare const expressionReferencesSymbol: (expression: ts.Expression, targetSymbol: ts.Symbol, checker: ts.TypeChecker, visitedExpressions?: Set<ts.Node>) => boolean;
15
+ export { expressionReferencesSymbol };
16
+ //# sourceMappingURL=member-usage-expression-reference-utilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"member-usage-expression-reference-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-public-members/member-usage-expression-reference-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAOjC;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,0BAA0B,GAC9B,YAAY,EAAE,CAAC,UAAU,EACzB,cAAc,EAAE,CAAC,MAAM,EACvB,SAAS,EAAE,CAAC,WAAW,EACvB,qBAAoB,GAAG,CAAC,EAAE,CAAC,IAAI,CAAa,KAC3C,OAyJF,CAAC;AAEF,OAAO,EAAE,0BAA0B,EAAE,CAAC"}
@@ -0,0 +1,77 @@
1
+ import * as ts from "typescript";
2
+ import { isSameSymbol, resolveCanonicalSymbol, } from "../no-unused-exports/no-unused-exports-symbol-utilities.js";
3
+ /**
4
+ * Checks whether an expression can be traced back to a symbol.
5
+ * @param expression Expression to inspect.
6
+ * @param targetSymbol Symbol whose value flow is followed.
7
+ * @param checker TypeScript type checker.
8
+ * @param visitedExpressions Expressions already inspected.
9
+ * @returns True when the expression derives from the target symbol.
10
+ * @example
11
+ * ```typescript
12
+ * const forwarded = expressionReferencesSymbol(value, symbol, checker);
13
+ * ```
14
+ */
15
+ const expressionReferencesSymbol = (expression, targetSymbol, checker, visitedExpressions = new Set()) => {
16
+ if (visitedExpressions.has(expression)) {
17
+ return false;
18
+ }
19
+ visitedExpressions.add(expression);
20
+ if (ts.isIdentifier(expression)) {
21
+ const symbol = ts.isShorthandPropertyAssignment(expression.parent)
22
+ ? checker.getShorthandAssignmentValueSymbol(expression.parent)
23
+ : checker.getSymbolAtLocation(expression);
24
+ if (symbol !== void 0 &&
25
+ isSameSymbol(resolveCanonicalSymbol(symbol, checker), resolveCanonicalSymbol(targetSymbol, checker))) {
26
+ return true;
27
+ }
28
+ const declaration = symbol?.valueDeclaration;
29
+ if (declaration !== void 0 && ts.isVariableDeclaration(declaration)) {
30
+ return (declaration.initializer !== void 0 &&
31
+ expressionReferencesSymbol(declaration.initializer, targetSymbol, checker, visitedExpressions));
32
+ }
33
+ if (declaration !== void 0 &&
34
+ ts.isBindingElement(declaration) &&
35
+ ts.isObjectBindingPattern(declaration.parent)) {
36
+ const owner = declaration.parent.parent;
37
+ return (ts.isVariableDeclaration(owner) &&
38
+ owner.initializer !== void 0 &&
39
+ expressionReferencesSymbol(owner.initializer, targetSymbol, checker, visitedExpressions));
40
+ }
41
+ return false;
42
+ }
43
+ if (ts.isAsExpression(expression) ||
44
+ ts.isNonNullExpression(expression) ||
45
+ ts.isParenthesizedExpression(expression) ||
46
+ ts.isSatisfiesExpression(expression) ||
47
+ ts.isTypeAssertionExpression(expression)) {
48
+ return expressionReferencesSymbol(expression.expression, targetSymbol, checker, visitedExpressions);
49
+ }
50
+ if (ts.isPropertyAccessExpression(expression)) {
51
+ return expressionReferencesSymbol(expression.expression, targetSymbol, checker, visitedExpressions);
52
+ }
53
+ if (ts.isElementAccessExpression(expression)) {
54
+ return expressionReferencesSymbol(expression.expression, targetSymbol, checker, visitedExpressions);
55
+ }
56
+ if (ts.isCallExpression(expression)) {
57
+ return expression.arguments.some((argument) => expressionReferencesSymbol(argument, targetSymbol, checker, visitedExpressions));
58
+ }
59
+ if (ts.isConditionalExpression(expression)) {
60
+ return (expressionReferencesSymbol(expression.whenTrue, targetSymbol, checker, visitedExpressions) ||
61
+ expressionReferencesSymbol(expression.whenFalse, targetSymbol, checker, visitedExpressions));
62
+ }
63
+ if (ts.isObjectLiteralExpression(expression)) {
64
+ return expression.properties.some((property) => {
65
+ return ts.isSpreadAssignment(property)
66
+ ? expressionReferencesSymbol(property.expression, targetSymbol, checker, visitedExpressions)
67
+ : (ts.isPropertyAssignment(property) &&
68
+ expressionReferencesSymbol(property.initializer, targetSymbol, checker, visitedExpressions)) ||
69
+ (ts.isShorthandPropertyAssignment(property) &&
70
+ expressionReferencesSymbol(property.name, targetSymbol, checker, visitedExpressions));
71
+ });
72
+ }
73
+ return (ts.isArrayLiteralExpression(expression) &&
74
+ expression.elements.some((element) => expressionReferencesSymbol(element, targetSymbol, checker, visitedExpressions)));
75
+ };
76
+ export { expressionReferencesSymbol };
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYmVyLXVzYWdlLWV4cHJlc3Npb24tcmVmZXJlbmNlLXV0aWxpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vYXJjaGl0ZWN0dXJlL25vLXVudXNlZC1wdWJsaWMtbWVtYmVycy9tZW1iZXItdXNhZ2UtZXhwcmVzc2lvbi1yZWZlcmVuY2UtdXRpbGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpDLE9BQU8sRUFDTCxZQUFZLEVBQ1osc0JBQXNCLEdBQ3ZCLE1BQU0seURBQXlELENBQUM7QUFFakU7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLDBCQUEwQixHQUFHLENBQ2pDLFVBQXlCLEVBQ3pCLFlBQXVCLEVBQ3ZCLE9BQXVCLEVBQ3ZCLHFCQUFtQyxJQUFJLEdBQUcsRUFBRSxFQUNuQyxFQUFFO0lBQ1gsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUN2QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFbkMsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDaEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLDZCQUE2QixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDaEUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQzlELENBQUMsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFNUMsSUFDRSxNQUFNLEtBQUssS0FBSyxDQUFDO1lBQ2pCLFlBQVksQ0FDVixzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQ3ZDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxPQUFP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QUMsUUFBUSxFQUFFLEVBQUU7WUFDN0MsT0FBTyxFQUFFLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDO2dCQUNwQyxDQUFDLENBQUMsMEJBQTBCLENBQ3hCLFFBQVEsQ0FBQyxVQUFVLEVBQ25CLFlBQVksRUFDWixPQUFPLEVBQ1Asa0JBQWtCLENBQ25CO2dCQUNILENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUM7b0JBQ2hDLDBCQUEwQixDQUN4QixRQUFRLENBQUMsV0FBVyxFQUNwQixZQUFZLEVBQ1osT0FBTyxFQUNQLGtCQUFrQixDQUNuQixDQUFDO29CQUNGLENBQUMsRUFBRSxDQUFDLDZCQUE2QixDQUFDLFFBQVEsQ0FBQzt3QkFDekMsMEJBQTBCLENBQ3hCLFFBQVEsQ0FBQyxJQUFJLEVBQ2IsWUFBWSxFQUNaLE9BQU8sRUFDUCxrQkFBa0IsQ0FDbkIsQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxDQUNMLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUM7UUFDdkMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNuQywwQkFBMEIsQ0FDeEIsT0FBTyxFQUNQLFlBQVksRUFDWixPQUFPLEVBQ1Asa0JBQWtCLENBQ25CLENBQ0YsQ0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuXG5pbXBvcnQge1xuICBpc1NhbWVTeW1ib2wsXG4gIHJlc29sdmVDYW5vbmljYWxTeW1ib2wsXG59IGZyb20gXCIuLi9uby11bnVzZWQtZXhwb3J0cy9uby11bnVzZWQtZXhwb3J0cy1zeW1ib2wtdXRpbGl0aWVzXCI7XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gZXhwcmVzc2lvbiBjYW4gYmUgdHJhY2VkIGJhY2sgdG8gYSBzeW1ib2wuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBFeHByZXNzaW9uIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gdGFyZ2V0U3ltYm9sIFN5bWJvbCB3aG9zZSB2YWx1ZSBmbG93IGlzIGZvbGxvd2VkLlxuICogQHBhcmFtIGNoZWNrZXIgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gKiBAcGFyYW0gdmlzaXRlZEV4cHJlc3Npb25zIEV4cHJlc3Npb25zIGFscmVhZHkgaW5zcGVjdGVkLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBleHByZXNzaW9uIGRlcml2ZXMgZnJvbSB0aGUgdGFyZ2V0IHN5bWJvbC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBmb3J3YXJkZWQgPSBleHByZXNzaW9uUmVmZXJlbmNlc1N5bWJvbCh2YWx1ZSwgc3ltYm9sLCBjaGVja2VyKTtcbiAqIGBgYFxuICovXG5jb25zdCBleHByZXNzaW9uUmVmZXJlbmNlc1N5bWJvbCA9IChcbiAgZXhwcmVzc2lvbjogdHMuRXhwcmVzc2lvbixcbiAgdGFyZ2V0U3ltYm9sOiB0cy5TeW1ib2wsXG4gIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLFxuICB2aXNpdGVkRXhwcmVzc2lvbnM6IFNldDx0cy5Ob2RlPiA9IG5ldyBTZXQoKSxcbik6IGJvb2xlYW4gPT4ge1xuICBpZiAodmlzaXRlZEV4cHJlc3Npb25zLmhhcyhleHByZXNzaW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2aXNpdGVkRXhwcmVzc2lvbnMuYWRkKGV4cHJlc3Npb24pO1xuXG4gIGlmICh0cy5pc0lkZW50aWZpZXIoZXhwcmVzc2lvbikpIHtcbiAgICBjb25zdCBzeW1ib2wgPSB0cy5pc1Nob3J0aGFuZFByb3BlcnR5QXNzaWdubWVudChleHByZXNzaW9uLnBhcmVudClcbiAgICAgID8gY2hlY2tlci5nZXRTaG9ydGhhbmRBc3NpZ25tZW50VmFsdWVTeW1ib2woZXhwcmVzc2lvbi5wYXJlbnQpXG4gICAgICA6IGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihleHByZXNzaW9uKTtcblxuICAgIGlmIChcbiAgICAgIHN5bWJvbCAhPT0gdm9pZCAwICYmXG4gICAgICBpc1NhbWVTeW1ib2woXG4gICAgICAgIHJlc29sdmVDYW5vbmljYWxTeW1ib2woc3ltYm9sLCBjaGVja2VyKSxcbiAgICAgICAgcmVzb2x2ZUNhbm9uaWNhbFN5bWJvbCh0YXJnZXRTeW1ib2wsIGNoZWNrZXIpLFxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBzeW1ib2w/LnZhbHVlRGVjbGFyYXRpb247XG4gICAgaWYgKGRlY2xhcmF0aW9uICE9PSB2b2lkIDAgJiYgdHMuaXNWYXJpYWJsZURlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgZGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIgIT09IHZvaWQgMCAmJlxuICAgICAgICBleHByZXNzaW9uUmVmZXJlbmNlc1N5bWJvbChcbiAgICAgICAgICBkZWNsYXJhdGlvbi5pbml0aWFsaXplcixcbiAgICAgICAgICB0YXJnZXRTeW1ib2wsXG4gICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICB2aXNpdGVkRXhwcmVzc2lvbnMsXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGRlY2xhcmF0aW9uICE9PSB2b2lkIDAgJiZcbiAgICAgIHRzLmlzQmluZGluZ0VsZW1lbnQoZGVjbGFyYXRpb24pICYmXG4gICAgICB0cy5pc09iamVjdEJpbmRpbmdQYXR0ZXJuKGRlY2xhcmF0aW9uLnBhcmVudClcbiAgICApIHtcbiAgICAgIGNvbnN0IG93bmVyID0gZGVjbGFyYXRpb24ucGFyZW50LnBhcmVudDtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdHMuaXNWYXJpYWJsZURlY2xhcmF0aW9uKG93bmVyKSAmJlxuICAgICAgICBvd25lci5pbml0aWFsaXplciAhPT0gdm9pZCAwICYmXG4gICAgICAgIGV4cHJlc3Npb25SZWZlcmVuY2VzU3ltYm9sKFxuICAgICAgICAgIG93bmVyLmluaXRpYWxpemVyLFxuICAgICAgICAgIHRhcmdldFN5bWJvbCxcbiAgICAgICAgICBjaGVja2VyLFxuICAgICAgICAgIHZpc2l0ZWRFeHByZXNzaW9ucyxcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgdHMuaXNBc0V4cHJlc3Npb24oZXhwcmVzc2lvbikgfHxcbiAgICB0cy5pc05vbk51bGxFeHByZXNzaW9uKGV4cHJlc3Npb24pIHx8XG4gICAgdHMuaXNQYXJlbnRoZXNpemVkRXhwcmVzc2lvbihleHByZXNzaW9uKSB8fFxuICAgIHRzLmlzU2F0aXNmaWVzRXhwcmVzc2lvbihleHByZXNzaW9uKSB8fFxuICAgIHRzLmlzVHlwZUFzc2VydGlvbkV4cHJlc3Npb24oZXhwcmVzc2lvbilcbiAgKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25SZWZlcmVuY2VzU3ltYm9sKFxuICAgICAgZXhwcmVzc2lvbi5leHByZXNzaW9uLFxuICAgICAgdGFyZ2V0U3ltYm9sLFxuICAgICAgY2hlY2tlcixcbiAgICAgIHZpc2l0ZWRFeHByZXNzaW9ucyxcbiAgICApO1xuICB9XG5cbiAgaWYgKHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKGV4cHJlc3Npb24pKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25SZWZlcmVuY2VzU3ltYm9sKFxuICAgICAgZXhwcmVzc2lvbi5leHByZXNzaW9uLFxuICAgICAgdGFyZ2V0U3ltYm9sLFxuICAgICAgY2hlY2tlcixcbiAgICAgIHZpc2l0ZWRFeHByZXNzaW9ucyxcbiAgICApO1xuICB9XG5cbiAgaWYgKHRzLmlzRWxlbWVudEFjY2Vzc0V4cHJlc3Npb24oZXhwcmVzc2lvbikpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvblJlZmVyZW5jZXNTeW1ib2woXG4gICAgICBleHByZXNzaW9uLmV4cHJlc3Npb24sXG4gICAgICB0YXJnZXRTeW1ib2wsXG4gICAgICBjaGVja2VyLFxuICAgICAgdmlzaXRlZEV4cHJlc3Npb25zLFxuICAgICk7XG4gIH1cblxuICBpZiAodHMuaXNDYWxsRXhwcmVzc2lvbihleHByZXNzaW9uKSkge1xuICAgIHJldHVybiBleHByZXNzaW9uLmFyZ3VtZW50cy5zb21lKChhcmd1bWVudCkgPT5cbiAgICAgIGV4cHJlc3Npb25SZWZlcmVuY2VzU3ltYm9sKFxuICAgICAgICBhcmd1bWVudCxcbiAgICAgICAgdGFyZ2V0U3ltYm9sLFxuICAgICAgICBjaGVja2VyLFxuICAgICAgICB2aXNpdGVkRXhwcmVzc2lvbnMsXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBpZiAodHMuaXNDb25kaXRpb25hbEV4cHJlc3Npb24oZXhwcmVzc2lvbikpIHtcbiAgICByZXR1cm4gKFxuICAgICAgZXhwcmVzc2lvblJlZmVyZW5jZXNTeW1ib2woXG4gICAgICAgIGV4cHJlc3Npb24ud2hlblRydWUsXG4gICAgICAgIHRhcmdldFN5bWJvbCxcbiAgICAgICAgY2hlY2tlcixcbiAgICAgICAgdmlzaXRlZEV4cHJlc3Npb25zLFxuICAgICAgKSB8fFxuICAgICAgZXhwcmVzc2lvblJlZmVyZW5jZXNTeW1ib2woXG4gICAgICAgIGV4cHJlc3Npb24ud2hlbkZhbHNlLFxuICAgICAgICB0YXJnZXRTeW1ib2wsXG4gICAgICAgIGNoZWNrZXIsXG4gICAgICAgIHZpc2l0ZWRFeHByZXNzaW9ucyxcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgaWYgKHRzLmlzT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24oZXhwcmVzc2lvbikpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5wcm9wZXJ0aWVzLnNvbWUoKHByb3BlcnR5KSA9PiB7XG4gICAgICByZXR1cm4gdHMuaXNTcHJlYWRBc3NpZ25tZW50KHByb3BlcnR5KVxuICAgICAgICA/IGV4cHJlc3Npb25SZWZlcmVuY2VzU3ltYm9sKFxuICAgICAgICAgICAgcHJvcGVydHkuZXhwcmVzc2lvbixcbiAgICAgICAgICAgIHRhcmdldFN5bWJvbCxcbiAgICAgICAgICAgIGNoZWNrZXIsXG4gICAgICAgICAgICB2aXNpdGVkRXhwcmVzc2lvbnMsXG4gICAgICAgICAgKVxuICAgICAgICA6ICh0cy5pc1Byb3BlcnR5QXNzaWdubWVudChwcm9wZXJ0eSkgJiZcbiAgICAgICAgICAgIGV4cHJlc3Npb25SZWZlcmVuY2VzU3ltYm9sKFxuICAgICAgICAgICAgICBwcm9wZXJ0eS5pbml0aWFsaXplcixcbiAgICAgICAgICAgICAgdGFyZ2V0U3ltYm9sLFxuICAgICAgICAgICAgICBjaGVja2VyLFxuICAgICAgICAgICAgICB2aXNpdGVkRXhwcmVzc2lvbnMsXG4gICAgICAgICAgICApKSB8fFxuICAgICAgICAgICAgKHRzLmlzU2hvcnRoYW5kUHJvcGVydHlBc3NpZ25tZW50KHByb3BlcnR5KSAmJlxuICAgICAgICAgICAgICBleHByZXNzaW9uUmVmZXJlbmNlc1N5bWJvbChcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eS5uYW1lLFxuICAgICAgICAgICAgICAgIHRhcmdldFN5bWJvbCxcbiAgICAgICAgICAgICAgICBjaGVja2VyLFxuICAgICAgICAgICAgICAgIHZpc2l0ZWRFeHByZXNzaW9ucyxcbiAgICAgICAgICAgICAgKSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIHRzLmlzQXJyYXlMaXRlcmFsRXhwcmVzc2lvbihleHByZXNzaW9uKSAmJlxuICAgIGV4cHJlc3Npb24uZWxlbWVudHMuc29tZSgoZWxlbWVudCkgPT5cbiAgICAgIGV4cHJlc3Npb25SZWZlcmVuY2VzU3ltYm9sKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICB0YXJnZXRTeW1ib2wsXG4gICAgICAgIGNoZWNrZXIsXG4gICAgICAgIHZpc2l0ZWRFeHByZXNzaW9ucyxcbiAgICAgICksXG4gICAgKVxuICApO1xufTtcblxuZXhwb3J0IHsgZXhwcmVzc2lvblJlZmVyZW5jZXNTeW1ib2wgfTtcbiJdfQ==
@@ -1,8 +1,8 @@
1
1
  import * as ts from "typescript";
2
2
  import type { PublicMember } from "./member-declaration-utilities.js";
3
3
  /**
4
- * Checks whether an object property is supplied to a typed call boundary.
5
- * @param node Candidate property assignment.
4
+ * Checks whether a value is supplied to a typed external call boundary.
5
+ * @param node Candidate call expression.
6
6
  * @param checker TypeScript type checker.
7
7
  * @param member Member whose usage is being checked.
8
8
  * @returns True when an external call contract accepts the member shape.
@@ -1 +1 @@
1
- {"version":3,"file":"member-usage-handoff-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-public-members/member-usage-handoff-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AA0FnE;;;;;;;;;;GAUG;AACH,QAAA,MAAM,oBAAoB,GACxB,MAAM,EAAE,CAAC,IAAI,EACb,SAAS,EAAE,CAAC,WAAW,EACvB,QAAQ,YAAY,KACnB,OA8BF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,QAAA,MAAM,uBAAuB,GAC3B,MAAM,EAAE,CAAC,IAAI,EACb,SAAS,EAAE,CAAC,WAAW,EACvB,QAAQ,YAAY,KACnB,OAkDF,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"member-usage-handoff-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-public-members/member-usage-handoff-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AA2HnE;;;;;;;;;;GAUG;AACH,QAAA,MAAM,oBAAoB,GACxB,MAAM,EAAE,CAAC,IAAI,EACb,SAAS,EAAE,CAAC,WAAW,EACvB,QAAQ,YAAY,KACnB,OA0BF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,QAAA,MAAM,uBAAuB,GAC3B,MAAM,EAAE,CAAC,IAAI,EACb,SAAS,EAAE,CAAC,WAAW,EACvB,QAAQ,YAAY,KACnB,OA0EF,CAAC;AAEF,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,CAAC"}
@@ -1,28 +1,6 @@
1
1
  import * as ts from "typescript";
2
- import { getContextualPropertyType, isMemberHandoff, } from "./member-usage-type-utilities.js";
3
- /**
4
- * Finds a call argument's resolved parameter type.
5
- * @param call Call expression containing the argument.
6
- * @param argument Argument expression to inspect.
7
- * @param checker TypeScript type checker.
8
- * @returns Parameter type when TypeScript resolves the call.
9
- * @example
10
- * ```typescript
11
- * const parameterType = getCallArgumentType(call, argument, checker);
12
- * ```
13
- */
14
- const getCallArgumentType = (call, argument, checker) => {
15
- const contextualType = checker.getContextualType(argument);
16
- if (contextualType !== void 0) {
17
- return contextualType;
18
- }
19
- const argumentIndex = call.arguments.indexOf(argument);
20
- const signature = checker.getResolvedSignature(call);
21
- const parameter = signature === void 0 ? void 0 : signature.parameters[argumentIndex];
22
- return parameter === void 0
23
- ? void 0
24
- : checker.getTypeOfSymbolAtLocation(parameter, call);
25
- };
2
+ import { getCallArgumentType, getContextualPropertyType, isDeclarationOnlyMethod, isMemberHandoff, } from "./member-usage-type-utilities.js";
3
+ import { expressionCarriesMemberValue } from "./member-usage-value-utilities.js";
26
4
  /**
27
5
  * Checks whether a contextual property comes from an external declaration.
28
6
  * @param objectType Contextual type of the containing object literal.
@@ -57,8 +35,49 @@ const hasCallImplementation = (call, checker) => {
57
35
  declaration.body !== void 0);
58
36
  };
59
37
  /**
60
- * Checks whether an object property is supplied to a typed call boundary.
61
- * @param node Candidate property assignment.
38
+ * Checks whether an opaque value property is passed to a method contract.
39
+ * @param objectLiteral Object literal passed to the method.
40
+ * @param propertyName Property carrying the value.
41
+ * @param valueExpression Value assigned to the property.
42
+ * @param objectType Contextual type of the object literal.
43
+ * @param checker TypeScript type checker.
44
+ * @param member Member whose value is being handed off.
45
+ * @returns True when a declaration-only method receives the member as opaque data.
46
+ * @example
47
+ * ```typescript
48
+ * const handedOff = isOpaqueMethodContractHandoff(
49
+ * objectLiteral,
50
+ * "payload",
51
+ * value,
52
+ * type,
53
+ * checker,
54
+ * member,
55
+ * );
56
+ * ```
57
+ */
58
+ const isOpaqueMethodContractHandoff = (objectLiteral, propertyName, valueExpression, objectType, checker, member) => {
59
+ const call = objectLiteral.parent;
60
+ const declaration = ts.isCallExpression(call)
61
+ ? checker.getResolvedSignature(call)?.getDeclaration()
62
+ : void 0;
63
+ if (!ts.isCallExpression(call) ||
64
+ !call.arguments.includes(objectLiteral) ||
65
+ declaration === void 0 ||
66
+ !isDeclarationOnlyMethod(declaration)) {
67
+ return false;
68
+ }
69
+ const targetType = getContextualPropertyType(objectType, propertyName, objectLiteral, checker);
70
+ const isHttpRequestBody = propertyName === "body" &&
71
+ ts.isPropertyAccessExpression(call.expression) &&
72
+ call.expression.name.text === "request";
73
+ return (targetType !== void 0 &&
74
+ ((targetType.flags & ts.TypeFlags.Unknown) !== 0 ||
75
+ (isHttpRequestBody && (targetType.flags & ts.TypeFlags.Any) !== 0)) &&
76
+ expressionCarriesMemberValue(valueExpression, checker, member));
77
+ };
78
+ /**
79
+ * Checks whether a value is supplied to a typed external call boundary.
80
+ * @param node Candidate call expression.
62
81
  * @param checker TypeScript type checker.
63
82
  * @param member Member whose usage is being checked.
64
83
  * @returns True when an external call contract accepts the member shape.
@@ -68,20 +87,23 @@ const hasCallImplementation = (call, checker) => {
68
87
  * ```
69
88
  */
70
89
  const isCallArgumentMember = (node, checker, member) => {
71
- if (!ts.isPropertyAssignment(node) ||
72
- (!ts.isIdentifier(node.name) && !ts.isStringLiteralLike(node.name)) ||
73
- !ts.isObjectLiteralExpression(node.parent)) {
90
+ if (!ts.isCallExpression(node) || hasCallImplementation(node, checker)) {
74
91
  return false;
75
92
  }
76
- const call = node.parent.parent;
77
- if (!ts.isCallExpression(call) ||
78
- hasCallImplementation(call, checker) ||
79
- !call.arguments.some((argument) => argument === node.parent)) {
80
- return false;
81
- }
82
- const targetType = getCallArgumentType(call, node.parent, checker);
83
- return (node.name.text === member.memberName &&
84
- isMemberHandoff(checker.getTypeAtLocation(node.parent), targetType, member, checker));
93
+ const declaration = checker.getResolvedSignature(node)?.getDeclaration();
94
+ return (declaration !== void 0 &&
95
+ node.arguments.some((argument) => {
96
+ const argumentType = getCallArgumentType(node, argument, checker);
97
+ const isOpaqueJsonBody = isDeclarationOnlyMethod(declaration) &&
98
+ ts.isPropertyAccessExpression(node.expression) &&
99
+ node.expression.name.text === "json" &&
100
+ node.arguments[0] === argument &&
101
+ argumentType !== void 0 &&
102
+ (argumentType.flags & (ts.TypeFlags.Any | ts.TypeFlags.Unknown)) !== 0;
103
+ return ((isOpaqueJsonBody &&
104
+ expressionCarriesMemberValue(argument, checker, member)) ||
105
+ isMemberHandoff(argument, argumentType, member, checker));
106
+ }));
85
107
  };
86
108
  /**
87
109
  * Checks whether a property value is forwarded into an external object contract.
@@ -102,24 +124,28 @@ const isObjectContractHandoff = (node, checker, member) => {
102
124
  return false;
103
125
  }
104
126
  const objectType = checker.getContextualType(node.parent);
127
+ if (isOpaqueMethodContractHandoff(node.parent, name.text, node.initializer, objectType, checker, member)) {
128
+ return true;
129
+ }
105
130
  if (!isExternalPropertyContract(objectType, name.text, checker)) {
106
131
  return false;
107
132
  }
108
- const sourceType = checker.getTypeAtLocation(node.initializer);
109
133
  const targetType = getContextualPropertyType(objectType, name.text, node, checker);
110
- return isMemberHandoff(sourceType, targetType, member, checker);
134
+ return isMemberHandoff(node.initializer, targetType, member, checker);
111
135
  }
112
136
  if (ts.isShorthandPropertyAssignment(node) &&
113
137
  ts.isObjectLiteralExpression(node.parent)) {
114
138
  const objectType = checker.getContextualType(node.parent);
139
+ if (isOpaqueMethodContractHandoff(node.parent, node.name.text, node.name, objectType, checker, member)) {
140
+ return true;
141
+ }
115
142
  if (!isExternalPropertyContract(objectType, node.name.text, checker)) {
116
143
  return false;
117
144
  }
118
- const sourceType = checker.getTypeAtLocation(node.name);
119
145
  const targetType = getContextualPropertyType(objectType, node.name.text, node, checker);
120
- return isMemberHandoff(sourceType, targetType, member, checker);
146
+ return isMemberHandoff(node.name, targetType, member, checker);
121
147
  }
122
148
  return false;
123
149
  };
124
150
  export { isCallArgumentMember, isObjectContractHandoff };
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYmVyLXVzYWdlLWhhbmRvZmYtdXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi9hcmNoaXRlY3R1cmUvbm8tdW51c2VkLXB1YmxpYy1tZW1iZXJzL21lbWJlci11c2FnZS1oYW5kb2ZmLXV0aWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUlqQyxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLGVBQWUsR0FDaEIsTUFBTSwrQkFBK0IsQ0FBQztBQUV2Qzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxDQUMxQixJQUF1QixFQUN2QixRQUF1QixFQUN2QixPQUF1QixFQUNGLEVBQUU7SUFDdkIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTNELElBQUksY0FBYyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDOUIsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRCxNQUFNLFNBQVMsR0FDYixTQUFTLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRXRFLE9BQU8sU0FBUyxLQUFLLEtBQUssQ0FBQztRQUN6QixDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ1IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekQsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7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QUVGLE9BQU8sZUFBZSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcblxuaW1wb3J0IHR5cGUgeyBQdWJsaWNNZW1iZXIgfSBmcm9tIFwiLi9tZW1iZXItZGVjbGFyYXRpb24tdXRpbGl0aWVzXCI7XG5cbmltcG9ydCB7XG4gIGdldENvbnRleHR1YWxQcm9wZXJ0eVR5cGUsXG4gIGlzTWVtYmVySGFuZG9mZixcbn0gZnJvbSBcIi4vbWVtYmVyLXVzYWdlLXR5cGUtdXRpbGl0aWVzXCI7XG5cbi8qKlxuICogRmluZHMgYSBjYWxsIGFyZ3VtZW50J3MgcmVzb2x2ZWQgcGFyYW1ldGVyIHR5cGUuXG4gKiBAcGFyYW0gY2FsbCBDYWxsIGV4cHJlc3Npb24gY29udGFpbmluZyB0aGUgYXJndW1lbnQuXG4gKiBAcGFyYW0gYXJndW1lbnQgQXJndW1lbnQgZXhwcmVzc2lvbiB0byBpbnNwZWN0LlxuICogQHBhcmFtIGNoZWNrZXIgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gKiBAcmV0dXJucyBQYXJhbWV0ZXIgdHlwZSB3aGVuIFR5cGVTY3JpcHQgcmVzb2x2ZXMgdGhlIGNhbGwuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcGFyYW1ldGVyVHlwZSA9IGdldENhbGxBcmd1bWVudFR5cGUoY2FsbCwgYXJndW1lbnQsIGNoZWNrZXIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGdldENhbGxBcmd1bWVudFR5cGUgPSAoXG4gIGNhbGw6IHRzLkNhbGxFeHByZXNzaW9uLFxuICBhcmd1bWVudDogdHMuRXhwcmVzc2lvbixcbiAgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4pOiB0cy5UeXBlIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3QgY29udGV4dHVhbFR5cGUgPSBjaGVja2VyLmdldENvbnRleHR1YWxUeXBlKGFyZ3VtZW50KTtcblxuICBpZiAoY29udGV4dHVhbFR5cGUgIT09IHZvaWQgMCkge1xuICAgIHJldHVybiBjb250ZXh0dWFsVHlwZTtcbiAgfVxuXG4gIGNvbnN0IGFyZ3VtZW50SW5kZXggPSBjYWxsLmFyZ3VtZW50cy5pbmRleE9mKGFyZ3VtZW50KTtcbiAgY29uc3Qgc2lnbmF0dXJlID0gY2hlY2tlci5nZXRSZXNvbHZlZFNpZ25hdHVyZShjYWxsKTtcbiAgY29uc3QgcGFyYW1ldGVyID1cbiAgICBzaWduYXR1cmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzW2FyZ3VtZW50SW5kZXhdO1xuXG4gIHJldHVybiBwYXJhbWV0ZXIgPT09IHZvaWQgMFxuICAgID8gdm9pZCAwXG4gICAgOiBjaGVja2VyLmdldFR5cGVPZlN5bWJvbEF0TG9jYXRpb24ocGFyYW1ldGVyLCBjYWxsKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBjb250ZXh0dWFsIHByb3BlcnR5IGNvbWVzIGZyb20gYW4gZXh0ZXJuYWwgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0gb2JqZWN0VHlwZSBDb250ZXh0dWFsIHR5cGUgb2YgdGhlIGNvbnRhaW5pbmcgb2JqZWN0IGxpdGVyYWwuXG4gKiBAcGFyYW0gcHJvcGVydHlOYW1lIFByb3BlcnR5IG5hbWUgaW4gdGhlIG9iamVjdCBsaXRlcmFsLlxuICogQHBhcmFtIGNoZWNrZXIgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIGNvbnRyYWN0IGlzIGRlY2xhcmVkIG91dHNpZGUgdGhlIHByb2plY3Qgc291cmNlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGV4dGVybmFsID0gaXNFeHRlcm5hbFByb3BlcnR5Q29udHJhY3Qob2JqZWN0VHlwZSwgXCJkb2NzXCIsIGNoZWNrZXIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzRXh0ZXJuYWxQcm9wZXJ0eUNvbnRyYWN0ID0gKFxuICBvYmplY3RUeXBlOiB0cy5UeXBlIHwgdW5kZWZpbmVkLFxuICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4pOiBib29sZWFuID0+IHtcbiAgY29uc3QgcHJvcGVydHkgPVxuICAgIG9iamVjdFR5cGUgPT09IHZvaWQgMFxuICAgICAgPyB2b2lkIDBcbiAgICAgIDogY2hlY2tlci5nZXRQcm9wZXJ0eU9mVHlwZShvYmplY3RUeXBlLCBwcm9wZXJ0eU5hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgcHJvcGVydHk/LmRlY2xhcmF0aW9ucz8uc29tZShcbiAgICAgIChkZWNsYXJhdGlvbikgPT4gZGVjbGFyYXRpb24uZ2V0U291cmNlRmlsZSgpLmlzRGVjbGFyYXRpb25GaWxlLFxuICAgICkgPz8gZmFsc2VcbiAgKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBjYWxsIHJlc29sdmVzIHRvIGEgZGVjbGFyYXRpb24gd2l0aCBhIGxvY2FsIGltcGxlbWVudGF0aW9uLlxuICogQHBhcmFtIGNhbGwgQ2FsbCBleHByZXNzaW9uIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0gY2hlY2tlciBUeXBlU2NyaXB0IHR5cGUgY2hlY2tlci5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiB0aGUgcmVzb2x2ZWQgZGVjbGFyYXRpb24gaGFzIGEgYm9keS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBpbXBsZW1lbnRlZCA9IGhhc0NhbGxJbXBsZW1lbnRhdGlvbihjYWxsLCBjaGVja2VyKTtcbiAqIGBgYFxuICovXG5jb25zdCBoYXNDYWxsSW1wbGVtZW50YXRpb24gPSAoXG4gIGNhbGw6IHRzLkNhbGxFeHByZXNzaW9uLFxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbik6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBkZWNsYXJhdGlvbiA9IGNoZWNrZXIuZ2V0UmVzb2x2ZWRTaWduYXR1cmUoY2FsbCk/LmdldERlY2xhcmF0aW9uKCk7XG5cbiAgcmV0dXJuIChcbiAgICBkZWNsYXJhdGlvbiAhPT0gdm9pZCAwICYmXG4gICAgXCJib2R5XCIgaW4gZGVjbGFyYXRpb24gJiZcbiAgICBkZWNsYXJhdGlvbi5ib2R5ICE9PSB2b2lkIDBcbiAgKTtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gb2JqZWN0IHByb3BlcnR5IGlzIHN1cHBsaWVkIHRvIGEgdHlwZWQgY2FsbCBib3VuZGFyeS5cbiAqIEBwYXJhbSBub2RlIENhbmRpZGF0ZSBwcm9wZXJ0eSBhc3NpZ25tZW50LlxuICogQHBhcmFtIGNoZWNrZXIgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gKiBAcGFyYW0gbWVtYmVyIE1lbWJlciB3aG9zZSB1c2FnZSBpcyBiZWluZyBjaGVja2VkLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIGFuIGV4dGVybmFsIGNhbGwgY29udHJhY3QgYWNjZXB0cyB0aGUgbWVtYmVyIHNoYXBlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHVzZWQgPSBpc0NhbGxBcmd1bWVudE1lbWJlcihub2RlLCBjaGVja2VyLCBtZW1iZXIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzQ2FsbEFyZ3VtZW50TWVtYmVyID0gKFxuICBub2RlOiB0cy5Ob2RlLFxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgbWVtYmVyOiBQdWJsaWNNZW1iZXIsXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKFxuICAgICF0cy5pc1Byb3BlcnR5QXNzaWdubWVudChub2RlKSB8fFxuICAgICghdHMuaXNJZGVudGlmaWVyKG5vZGUubmFtZSkgJiYgIXRzLmlzU3RyaW5nTGl0ZXJhbExpa2Uobm9kZS5uYW1lKSkgfHxcbiAgICAhdHMuaXNPYmplY3RMaXRlcmFsRXhwcmVzc2lvbihub2RlLnBhcmVudClcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgY2FsbCA9IG5vZGUucGFyZW50LnBhcmVudDtcblxuICBpZiAoXG4gICAgIXRzLmlzQ2FsbEV4cHJlc3Npb24oY2FsbCkgfHxcbiAgICBoYXNDYWxsSW1wbGVtZW50YXRpb24oY2FsbCwgY2hlY2tlcikgfHxcbiAgICAhY2FsbC5hcmd1bWVudHMuc29tZSgoYXJndW1lbnQpID0+IGFyZ3VtZW50ID09PSBub2RlLnBhcmVudClcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgdGFyZ2V0VHlwZSA9IGdldENhbGxBcmd1bWVudFR5cGUoY2FsbCwgbm9kZS5wYXJlbnQsIGNoZWNrZXIpO1xuXG4gIHJldHVybiAoXG4gICAgbm9kZS5uYW1lLnRleHQgPT09IG1lbWJlci5tZW1iZXJOYW1lICYmXG4gICAgaXNNZW1iZXJIYW5kb2ZmKFxuICAgICAgY2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihub2RlLnBhcmVudCksXG4gICAgICB0YXJnZXRUeXBlLFxuICAgICAgbWVtYmVyLFxuICAgICAgY2hlY2tlcixcbiAgICApXG4gICk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgcHJvcGVydHkgdmFsdWUgaXMgZm9yd2FyZGVkIGludG8gYW4gZXh0ZXJuYWwgb2JqZWN0IGNvbnRyYWN0LlxuICogQHBhcmFtIG5vZGUgQ2FuZGlkYXRlIG91dGVyIG9iamVjdCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBjaGVja2VyIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyLlxuICogQHBhcmFtIG1lbWJlciBNZW1iZXIgd2hvc2UgaG9zdCB2YWx1ZSBpcyBiZWluZyBmb3J3YXJkZWQuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIHJlY2VpdmluZyBwcm9wZXJ0eSBhY2NlcHRzIHRoZSBob3N0IHNoYXBlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHVzZWQgPSBpc09iamVjdENvbnRyYWN0SGFuZG9mZihub2RlLCBjaGVja2VyLCBtZW1iZXIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzT2JqZWN0Q29udHJhY3RIYW5kb2ZmID0gKFxuICBub2RlOiB0cy5Ob2RlLFxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgbWVtYmVyOiBQdWJsaWNNZW1iZXIsXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKFxuICAgIHRzLmlzUHJvcGVydHlBc3NpZ25tZW50KG5vZGUpICYmXG4gICAgdHMuaXNPYmplY3RMaXRlcmFsRXhwcmVzc2lvbihub2RlLnBhcmVudClcbiAgKSB7XG4gICAgY29uc3QgbmFtZSA9IG5vZGUubmFtZTtcblxuICAgIGlmICghdHMuaXNJZGVudGlmaWVyKG5hbWUpICYmICF0cy5pc1N0cmluZ0xpdGVyYWxMaWtlKG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgb2JqZWN0VHlwZSA9IGNoZWNrZXIuZ2V0Q29udGV4dHVhbFR5cGUobm9kZS5wYXJlbnQpO1xuXG4gICAgaWYgKCFpc0V4dGVybmFsUHJvcGVydHlDb250cmFjdChvYmplY3RUeXBlLCBuYW1lLnRleHQsIGNoZWNrZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlVHlwZSA9IGNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24obm9kZS5pbml0aWFsaXplcik7XG4gICAgY29uc3QgdGFyZ2V0VHlwZSA9IGdldENvbnRleHR1YWxQcm9wZXJ0eVR5cGUoXG4gICAgICBvYmplY3RUeXBlLFxuICAgICAgbmFtZS50ZXh0LFxuICAgICAgbm9kZSxcbiAgICAgIGNoZWNrZXIsXG4gICAgKTtcblxuICAgIHJldHVybiBpc01lbWJlckhhbmRvZmYoc291cmNlVHlwZSwgdGFyZ2V0VHlwZSwgbWVtYmVyLCBjaGVja2VyKTtcbiAgfVxuXG4gIGlmIChcbiAgICB0cy5pc1Nob3J0aGFuZFByb3BlcnR5QXNzaWdubWVudChub2RlKSAmJlxuICAgIHRzLmlzT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24obm9kZS5wYXJlbnQpXG4gICkge1xuICAgIGNvbnN0IG9iamVjdFR5cGUgPSBjaGVja2VyLmdldENvbnRleHR1YWxUeXBlKG5vZGUucGFyZW50KTtcblxuICAgIGlmICghaXNFeHRlcm5hbFByb3BlcnR5Q29udHJhY3Qob2JqZWN0VHlwZSwgbm9kZS5uYW1lLnRleHQsIGNoZWNrZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlVHlwZSA9IGNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24obm9kZS5uYW1lKTtcbiAgICBjb25zdCB0YXJnZXRUeXBlID0gZ2V0Q29udGV4dHVhbFByb3BlcnR5VHlwZShcbiAgICAgIG9iamVjdFR5cGUsXG4gICAgICBub2RlLm5hbWUudGV4dCxcbiAgICAgIG5vZGUsXG4gICAgICBjaGVja2VyLFxuICAgICk7XG5cbiAgICByZXR1cm4gaXNNZW1iZXJIYW5kb2ZmKHNvdXJjZVR5cGUsIHRhcmdldFR5cGUsIG1lbWJlciwgY2hlY2tlcik7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgeyBpc0NhbGxBcmd1bWVudE1lbWJlciwgaXNPYmplY3RDb250cmFjdEhhbmRvZmYgfTtcbiJdfQ==
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYmVyLXVzYWdlLWhhbmRvZmYtdXRpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2RvbWFpbi9hcmNoaXRlY3R1cmUvbm8tdW51c2VkLXB1YmxpYy1tZW1iZXJzL21lbWJlci11c2FnZS1oYW5kb2ZmLXV0aWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUlqQyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLHlCQUF5QixFQUN6Qix1QkFBdUIsRUFDdkIsZUFBZSxHQUNoQixNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTlFOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLDBCQUEwQixHQUFHLENBQ2pDLFVBQStCLEVBQy9CLFlBQW9CLEVBQ3BCLE9BQXVCLEVBQ2QsRUFBRTtJQUNYLE1BQU0sUUFBUSxHQUNaLFVBQVUsS0FBSyxLQUFLLENBQUM7UUFDbkIsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNSLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRTFELE9BQU8sQ0FDTCxRQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FDMUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxpQkFBaUIsQ0FDL0QsSUFBSSxLQUFLLENBQ1gsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0scUJBQXFCLEdBQUcsQ0FDNUIsSUFBdUIsRUFDdkIsT0FBdUIsRUFDZCxFQUFFO0lBQ1gsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDO0lBRXpFLE9BQU8sQ0FDTCxXQUFXLEtBQUss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Q2YsQ0FBQyxDQUFDO0FBRUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuXG5pbXBvcnQgdHlwZSB7IFB1YmxpY01lbWJlciB9IGZyb20gXCIuL21lbWJlci1kZWNsYXJhdGlvbi11dGlsaXRpZXNcIjtcblxuaW1wb3J0IHtcbiAgZ2V0Q2FsbEFyZ3VtZW50VHlwZSxcbiAgZ2V0Q29udGV4dHVhbFByb3BlcnR5VHlwZSxcbiAgaXNEZWNsYXJhdGlvbk9ubHlNZXRob2QsXG4gIGlzTWVtYmVySGFuZG9mZixcbn0gZnJvbSBcIi4vbWVtYmVyLXVzYWdlLXR5cGUtdXRpbGl0aWVzXCI7XG5pbXBvcnQgeyBleHByZXNzaW9uQ2Fycmllc01lbWJlclZhbHVlIH0gZnJvbSBcIi4vbWVtYmVyLXVzYWdlLXZhbHVlLXV0aWxpdGllc1wiO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgY29udGV4dHVhbCBwcm9wZXJ0eSBjb21lcyBmcm9tIGFuIGV4dGVybmFsIGRlY2xhcmF0aW9uLlxuICogQHBhcmFtIG9iamVjdFR5cGUgQ29udGV4dHVhbCB0eXBlIG9mIHRoZSBjb250YWluaW5nIG9iamVjdCBsaXRlcmFsLlxuICogQHBhcmFtIHByb3BlcnR5TmFtZSBQcm9wZXJ0eSBuYW1lIGluIHRoZSBvYmplY3QgbGl0ZXJhbC5cbiAqIEBwYXJhbSBjaGVja2VyIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBjb250cmFjdCBpcyBkZWNsYXJlZCBvdXRzaWRlIHRoZSBwcm9qZWN0IHNvdXJjZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBleHRlcm5hbCA9IGlzRXh0ZXJuYWxQcm9wZXJ0eUNvbnRyYWN0KG9iamVjdFR5cGUsIFwiZG9jc1wiLCBjaGVja2VyKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc0V4dGVybmFsUHJvcGVydHlDb250cmFjdCA9IChcbiAgb2JqZWN0VHlwZTogdHMuVHlwZSB8IHVuZGVmaW5lZCxcbiAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLFxuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHByb3BlcnR5ID1cbiAgICBvYmplY3RUeXBlID09PSB2b2lkIDBcbiAgICAgID8gdm9pZCAwXG4gICAgICA6IGNoZWNrZXIuZ2V0UHJvcGVydHlPZlR5cGUob2JqZWN0VHlwZSwgcHJvcGVydHlOYW1lKTtcblxuICByZXR1cm4gKFxuICAgIHByb3BlcnR5Py5kZWNsYXJhdGlvbnM/LnNvbWUoXG4gICAgICAoZGVjbGFyYXRpb24pID0+IGRlY2xhcmF0aW9uLmdldFNvdXJjZUZpbGUoKS5pc0RlY2xhcmF0aW9uRmlsZSxcbiAgICApID8/IGZhbHNlXG4gICk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgY2FsbCByZXNvbHZlcyB0byBhIGRlY2xhcmF0aW9uIHdpdGggYSBsb2NhbCBpbXBsZW1lbnRhdGlvbi5cbiAqIEBwYXJhbSBjYWxsIENhbGwgZXhwcmVzc2lvbiB0byBpbnNwZWN0LlxuICogQHBhcmFtIGNoZWNrZXIgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIHJlc29sdmVkIGRlY2xhcmF0aW9uIGhhcyBhIGJvZHkuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgaW1wbGVtZW50ZWQgPSBoYXNDYWxsSW1wbGVtZW50YXRpb24oY2FsbCwgY2hlY2tlcik7XG4gKiBgYGBcbiAqL1xuY29uc3QgaGFzQ2FsbEltcGxlbWVudGF0aW9uID0gKFxuICBjYWxsOiB0cy5DYWxsRXhwcmVzc2lvbixcbiAgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4pOiBib29sZWFuID0+IHtcbiAgY29uc3QgZGVjbGFyYXRpb24gPSBjaGVja2VyLmdldFJlc29sdmVkU2lnbmF0dXJlKGNhbGwpPy5nZXREZWNsYXJhdGlvbigpO1xuXG4gIHJldHVybiAoXG4gICAgZGVjbGFyYXRpb24gIT09IHZvaWQgMCAmJlxuICAgIFwiYm9keVwiIGluIGRlY2xhcmF0aW9uICYmXG4gICAgZGVjbGFyYXRpb24uYm9keSAhPT0gdm9pZCAwXG4gICk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFuIG9wYXF1ZSB2YWx1ZSBwcm9wZXJ0eSBpcyBwYXNzZWQgdG8gYSBtZXRob2QgY29udHJhY3QuXG4gKiBAcGFyYW0gb2JqZWN0TGl0ZXJhbCBPYmplY3QgbGl0ZXJhbCBwYXNzZWQgdG8gdGhlIG1ldGhvZC5cbiAqIEBwYXJhbSBwcm9wZXJ0eU5hbWUgUHJvcGVydHkgY2FycnlpbmcgdGhlIHZhbHVlLlxuICogQHBhcmFtIHZhbHVlRXhwcmVzc2lvbiBWYWx1ZSBhc3NpZ25lZCB0byB0aGUgcHJvcGVydHkuXG4gKiBAcGFyYW0gb2JqZWN0VHlwZSBDb250ZXh0dWFsIHR5cGUgb2YgdGhlIG9iamVjdCBsaXRlcmFsLlxuICogQHBhcmFtIGNoZWNrZXIgVHlwZVNjcmlwdCB0eXBlIGNoZWNrZXIuXG4gKiBAcGFyYW0gbWVtYmVyIE1lbWJlciB3aG9zZSB2YWx1ZSBpcyBiZWluZyBoYW5kZWQgb2ZmLlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIGEgZGVjbGFyYXRpb24tb25seSBtZXRob2QgcmVjZWl2ZXMgdGhlIG1lbWJlciBhcyBvcGFxdWUgZGF0YS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBoYW5kZWRPZmYgPSBpc09wYXF1ZU1ldGhvZENvbnRyYWN0SGFuZG9mZihcbiAqICAgb2JqZWN0TGl0ZXJhbCxcbiAqICAgXCJwYXlsb2FkXCIsXG4gKiAgIHZhbHVlLFxuICogICB0eXBlLFxuICogICBjaGVja2VyLFxuICogICBtZW1iZXIsXG4gKiApO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzT3BhcXVlTWV0aG9kQ29udHJhY3RIYW5kb2ZmID0gKFxuICBvYmplY3RMaXRlcmFsOiB0cy5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbixcbiAgcHJvcGVydHlOYW1lOiBzdHJpbmcsXG4gIHZhbHVlRXhwcmVzc2lvbjogdHMuRXhwcmVzc2lvbixcbiAgb2JqZWN0VHlwZTogdHMuVHlwZSB8IHVuZGVmaW5lZCxcbiAgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gIG1lbWJlcjogUHVibGljTWVtYmVyLFxuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGNhbGwgPSBvYmplY3RMaXRlcmFsLnBhcmVudDtcbiAgY29uc3QgZGVjbGFyYXRpb24gPSB0cy5pc0NhbGxFeHByZXNzaW9uKGNhbGwpXG4gICAgPyBjaGVja2VyLmdldFJlc29sdmVkU2lnbmF0dXJlKGNhbGwpPy5nZXREZWNsYXJhdGlvbigpXG4gICAgOiB2b2lkIDA7XG5cbiAgaWYgKFxuICAgICF0cy5pc0NhbGxFeHByZXNzaW9uKGNhbGwpIHx8XG4gICAgIWNhbGwuYXJndW1lbnRzLmluY2x1ZGVzKG9iamVjdExpdGVyYWwpIHx8XG4gICAgZGVjbGFyYXRpb24gPT09IHZvaWQgMCB8fFxuICAgICFpc0RlY2xhcmF0aW9uT25seU1ldGhvZChkZWNsYXJhdGlvbilcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgdGFyZ2V0VHlwZSA9IGdldENvbnRleHR1YWxQcm9wZXJ0eVR5cGUoXG4gICAgb2JqZWN0VHlwZSxcbiAgICBwcm9wZXJ0eU5hbWUsXG4gICAgb2JqZWN0TGl0ZXJhbCxcbiAgICBjaGVja2VyLFxuICApO1xuICBjb25zdCBpc0h0dHBSZXF1ZXN0Qm9keSA9XG4gICAgcHJvcGVydHlOYW1lID09PSBcImJvZHlcIiAmJlxuICAgIHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKGNhbGwuZXhwcmVzc2lvbikgJiZcbiAgICBjYWxsLmV4cHJlc3Npb24ubmFtZS50ZXh0ID09PSBcInJlcXVlc3RcIjtcblxuICByZXR1cm4gKFxuICAgIHRhcmdldFR5cGUgIT09IHZvaWQgMCAmJlxuICAgICgodGFyZ2V0VHlwZS5mbGFncyAmIHRzLlR5cGVGbGFncy5Vbmtub3duKSAhPT0gMCB8fFxuICAgICAgKGlzSHR0cFJlcXVlc3RCb2R5ICYmICh0YXJnZXRUeXBlLmZsYWdzICYgdHMuVHlwZUZsYWdzLkFueSkgIT09IDApKSAmJlxuICAgIGV4cHJlc3Npb25DYXJyaWVzTWVtYmVyVmFsdWUodmFsdWVFeHByZXNzaW9uLCBjaGVja2VyLCBtZW1iZXIpXG4gICk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgdmFsdWUgaXMgc3VwcGxpZWQgdG8gYSB0eXBlZCBleHRlcm5hbCBjYWxsIGJvdW5kYXJ5LlxuICogQHBhcmFtIG5vZGUgQ2FuZGlkYXRlIGNhbGwgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBjaGVja2VyIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyLlxuICogQHBhcmFtIG1lbWJlciBNZW1iZXIgd2hvc2UgdXNhZ2UgaXMgYmVpbmcgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFRydWUgd2hlbiBhbiBleHRlcm5hbCBjYWxsIGNvbnRyYWN0IGFjY2VwdHMgdGhlIG1lbWJlciBzaGFwZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB1c2VkID0gaXNDYWxsQXJndW1lbnRNZW1iZXIobm9kZSwgY2hlY2tlciwgbWVtYmVyKTtcbiAqIGBgYFxuICovXG5jb25zdCBpc0NhbGxBcmd1bWVudE1lbWJlciA9IChcbiAgbm9kZTogdHMuTm9kZSxcbiAgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gIG1lbWJlcjogUHVibGljTWVtYmVyLFxuKTogYm9vbGVhbiA9PiB7XG4gIGlmICghdHMuaXNDYWxsRXhwcmVzc2lvbihub2RlKSB8fCBoYXNDYWxsSW1wbGVtZW50YXRpb24obm9kZSwgY2hlY2tlcikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBkZWNsYXJhdGlvbiA9IGNoZWNrZXIuZ2V0UmVzb2x2ZWRTaWduYXR1cmUobm9kZSk/LmdldERlY2xhcmF0aW9uKCk7XG5cbiAgcmV0dXJuIChcbiAgICBkZWNsYXJhdGlvbiAhPT0gdm9pZCAwICYmXG4gICAgbm9kZS5hcmd1bWVudHMuc29tZSgoYXJndW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGFyZ3VtZW50VHlwZSA9IGdldENhbGxBcmd1bWVudFR5cGUobm9kZSwgYXJndW1lbnQsIGNoZWNrZXIpO1xuICAgICAgY29uc3QgaXNPcGFxdWVKc29uQm9keSA9XG4gICAgICAgIGlzRGVjbGFyYXRpb25Pbmx5TWV0aG9kKGRlY2xhcmF0aW9uKSAmJlxuICAgICAgICB0cy5pc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24pICYmXG4gICAgICAgIG5vZGUuZXhwcmVzc2lvbi5uYW1lLnRleHQgPT09IFwianNvblwiICYmXG4gICAgICAgIG5vZGUuYXJndW1lbnRzWzBdID09PSBhcmd1bWVudCAmJlxuICAgICAgICBhcmd1bWVudFR5cGUgIT09IHZvaWQgMCAmJlxuICAgICAgICAoYXJndW1lbnRUeXBlLmZsYWdzICYgKHRzLlR5cGVGbGFncy5BbnkgfCB0cy5UeXBlRmxhZ3MuVW5rbm93bikpICE9PSAwO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICAoaXNPcGFxdWVKc29uQm9keSAmJlxuICAgICAgICAgIGV4cHJlc3Npb25DYXJyaWVzTWVtYmVyVmFsdWUoYXJndW1lbnQsIGNoZWNrZXIsIG1lbWJlcikpIHx8XG4gICAgICAgIGlzTWVtYmVySGFuZG9mZihhcmd1bWVudCwgYXJndW1lbnRUeXBlLCBtZW1iZXIsIGNoZWNrZXIpXG4gICAgICApO1xuICAgIH0pXG4gICk7XG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgcHJvcGVydHkgdmFsdWUgaXMgZm9yd2FyZGVkIGludG8gYW4gZXh0ZXJuYWwgb2JqZWN0IGNvbnRyYWN0LlxuICogQHBhcmFtIG5vZGUgQ2FuZGlkYXRlIG91dGVyIG9iamVjdCBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBjaGVja2VyIFR5cGVTY3JpcHQgdHlwZSBjaGVja2VyLlxuICogQHBhcmFtIG1lbWJlciBNZW1iZXIgd2hvc2UgaG9zdCB2YWx1ZSBpcyBiZWluZyBmb3J3YXJkZWQuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIHJlY2VpdmluZyBwcm9wZXJ0eSBhY2NlcHRzIHRoZSBob3N0IHNoYXBlLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHVzZWQgPSBpc09iamVjdENvbnRyYWN0SGFuZG9mZihub2RlLCBjaGVja2VyLCBtZW1iZXIpO1xuICogYGBgXG4gKi9cbmNvbnN0IGlzT2JqZWN0Q29udHJhY3RIYW5kb2ZmID0gKFxuICBub2RlOiB0cy5Ob2RlLFxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgbWVtYmVyOiBQdWJsaWNNZW1iZXIsXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKFxuICAgIHRzLmlzUHJvcGVydHlBc3NpZ25tZW50KG5vZGUpICYmXG4gICAgdHMuaXNPYmplY3RMaXRlcmFsRXhwcmVzc2lvbihub2RlLnBhcmVudClcbiAgKSB7XG4gICAgY29uc3QgbmFtZSA9IG5vZGUubmFtZTtcblxuICAgIGlmICghdHMuaXNJZGVudGlmaWVyKG5hbWUpICYmICF0cy5pc1N0cmluZ0xpdGVyYWxMaWtlKG5hbWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgb2JqZWN0VHlwZSA9IGNoZWNrZXIuZ2V0Q29udGV4dHVhbFR5cGUobm9kZS5wYXJlbnQpO1xuXG4gICAgaWYgKFxuICAgICAgaXNPcGFxdWVNZXRob2RDb250cmFjdEhhbmRvZmYoXG4gICAgICAgIG5vZGUucGFyZW50LFxuICAgICAgICBuYW1lLnRleHQsXG4gICAgICAgIG5vZGUuaW5pdGlhbGl6ZXIsXG4gICAgICAgIG9iamVjdFR5cGUsXG4gICAgICAgIGNoZWNrZXIsXG4gICAgICAgIG1lbWJlcixcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghaXNFeHRlcm5hbFByb3BlcnR5Q29udHJhY3Qob2JqZWN0VHlwZSwgbmFtZS50ZXh0LCBjaGVja2VyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldFR5cGUgPSBnZXRDb250ZXh0dWFsUHJvcGVydHlUeXBlKFxuICAgICAgb2JqZWN0VHlwZSxcbiAgICAgIG5hbWUudGV4dCxcbiAgICAgIG5vZGUsXG4gICAgICBjaGVja2VyLFxuICAgICk7XG5cbiAgICByZXR1cm4gaXNNZW1iZXJIYW5kb2ZmKG5vZGUuaW5pdGlhbGl6ZXIsIHRhcmdldFR5cGUsIG1lbWJlciwgY2hlY2tlcik7XG4gIH1cblxuICBpZiAoXG4gICAgdHMuaXNTaG9ydGhhbmRQcm9wZXJ0eUFzc2lnbm1lbnQobm9kZSkgJiZcbiAgICB0cy5pc09iamVjdExpdGVyYWxFeHByZXNzaW9uKG5vZGUucGFyZW50KVxuICApIHtcbiAgICBjb25zdCBvYmplY3RUeXBlID0gY2hlY2tlci5nZXRDb250ZXh0dWFsVHlwZShub2RlLnBhcmVudCk7XG5cbiAgICBpZiAoXG4gICAgICBpc09wYXF1ZU1ldGhvZENvbnRyYWN0SGFuZG9mZihcbiAgICAgICAgbm9kZS5wYXJlbnQsXG4gICAgICAgIG5vZGUubmFtZS50ZXh0LFxuICAgICAgICBub2RlLm5hbWUsXG4gICAgICAgIG9iamVjdFR5cGUsXG4gICAgICAgIGNoZWNrZXIsXG4gICAgICAgIG1lbWJlcixcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghaXNFeHRlcm5hbFByb3BlcnR5Q29udHJhY3Qob2JqZWN0VHlwZSwgbm9kZS5uYW1lLnRleHQsIGNoZWNrZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0VHlwZSA9IGdldENvbnRleHR1YWxQcm9wZXJ0eVR5cGUoXG4gICAgICBvYmplY3RUeXBlLFxuICAgICAgbm9kZS5uYW1lLnRleHQsXG4gICAgICBub2RlLFxuICAgICAgY2hlY2tlcixcbiAgICApO1xuXG4gICAgcmV0dXJuIGlzTWVtYmVySGFuZG9mZihub2RlLm5hbWUsIHRhcmdldFR5cGUsIG1lbWJlciwgY2hlY2tlcik7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgeyBpc0NhbGxBcmd1bWVudE1lbWJlciwgaXNPYmplY3RDb250cmFjdEhhbmRvZmYgfTtcbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import * as ts from "typescript";
2
+ import type { PublicMember } from "./member-declaration-utilities.js";
3
+ /**
4
+ * Checks whether a local call forwards a member-bearing value to an HTTP body.
5
+ * @param node Candidate local call expression.
6
+ * @param checker TypeScript type checker.
7
+ * @param member Member whose value is being transmitted.
8
+ * @returns True when the argument reaches an opaque request body contract.
9
+ * @example
10
+ * ```typescript
11
+ * const transmitted = isLocalCallArgumentTransmitted(call, checker, member);
12
+ * ```
13
+ */
14
+ declare const isLocalCallArgumentTransmitted: (node: ts.Node, checker: ts.TypeChecker, member: PublicMember) => boolean;
15
+ export { isLocalCallArgumentTransmitted };
16
+ //# sourceMappingURL=member-usage-local-flow-utilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"member-usage-local-flow-utilities.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/no-unused-public-members/member-usage-local-flow-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAMnE;;;;;;;;;;GAUG;AACH,QAAA,MAAM,8BAA8B,GAClC,MAAM,EAAE,CAAC,IAAI,EACb,SAAS,EAAE,CAAC,WAAW,EACvB,QAAQ,YAAY,KACnB,OA+BF,CAAC;AAwKF,OAAO,EAAE,8BAA8B,EAAE,CAAC"}