@codeperfect/eslint-plugin 3.1.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) 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/package.json +38 -21
@@ -0,0 +1,4 @@
1
+ import type { AngularTemplateNode, TemplateLocals, TemplateNodeVisitor, TemplateUsageContext } from "./angular-template-usage-context.js";
2
+ declare const blockUsesMember: (node: AngularTemplateNode, locals: TemplateLocals, usage: TemplateUsageContext, visitNodes: TemplateNodeVisitor) => boolean;
3
+ export { blockUsesMember };
4
+ //# sourceMappingURL=angular-template-block-usage-utilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular-template-block-usage-utilities.d.ts","sourceRoot":"","sources":["../../../src/adapters/angular/angular-template-block-usage-utilities.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,kCAAkC,CAAC;AAK1C,QAAA,MAAM,eAAe,GACnB,MAAM,mBAAmB,EACzB,QAAQ,cAAc,EACtB,OAAO,oBAAoB,EAC3B,YAAY,mBAAmB,KAC9B,OAgHF,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,69 @@
1
+ import * as angular from "@angular/compiler";
2
+ import { expressionUsesMember } from "./angular-template-expression-utilities.js";
3
+ import { withAlias, withNames } from "./angular-template-usage-context.js";
4
+ const blockUsesMember = (node, locals, usage, visitNodes) => {
5
+ if (node instanceof angular.TmplAstIfBlock) {
6
+ return node.branches.some((branch) => {
7
+ const alias = branch.expressionAlias?.name;
8
+ const aliasValue = branch.expression ?? undefined;
9
+ const branchLocals = alias === undefined
10
+ ? locals
11
+ : aliasValue === undefined
12
+ ? withNames(locals, [alias])
13
+ : withAlias(locals, alias, aliasValue);
14
+ return (uses(branch.expression ?? undefined, locals) ||
15
+ visitNodes(branch.children, branchLocals, usage));
16
+ });
17
+ }
18
+ if (node instanceof angular.TmplAstForLoopBlock) {
19
+ const loopLocals = withNames(locals, [
20
+ node.item.name,
21
+ ...node.contextVariables.map(({ name }) => name),
22
+ ]);
23
+ return (uses(node.expression, locals) ||
24
+ uses(node.trackBy ?? undefined, loopLocals) ||
25
+ visitNodes(node.children, loopLocals, usage) ||
26
+ (node.empty !== null && visitNodes(node.empty.children, locals, usage)));
27
+ }
28
+ if (node instanceof angular.TmplAstSwitchBlock) {
29
+ return (uses(node.expression, locals) ||
30
+ node.groups.some((group) => group.cases.some((branch) => uses(branch.expression ?? undefined, locals)) || visitNodes(group.children, locals, usage)));
31
+ }
32
+ if (node instanceof angular.TmplAstDeferredBlock) {
33
+ const triggers = [
34
+ ...Object.values(node.triggers),
35
+ ...Object.values(node.prefetchTriggers),
36
+ ...Object.values(node.hydrateTriggers),
37
+ ];
38
+ return (triggers.some((trigger) => trigger instanceof angular.TmplAstBoundDeferredTrigger &&
39
+ uses(trigger.value, locals)) ||
40
+ visitNodes(node.children, locals, usage) ||
41
+ (node.placeholder !== null &&
42
+ visitNodes(node.placeholder.children, locals, usage)) ||
43
+ (node.loading !== null &&
44
+ visitNodes(node.loading.children, locals, usage)) ||
45
+ (node.error !== null && visitNodes(node.error.children, locals, usage)));
46
+ }
47
+ return ((node instanceof angular.TmplAstBoundaryBlock &&
48
+ (visitNodes(node.children, locals, usage) ||
49
+ node.errorBlocks.some((branch) => uses(branch.expression ?? undefined, locals) ||
50
+ visitNodes(branch.children, withNames(locals, branch.contextVariables.map(({ name }) => name)), usage)))) ||
51
+ (node instanceof angular.TmplAstContentBlock &&
52
+ visitNodes(node.children, withNames(locals, node.variables.map(({ name }) => name)), usage)));
53
+ /**
54
+ * Checks an Angular expression against the selected component member.
55
+ * @param expression Template expression to inspect.
56
+ * @param expressionLocals Template locals in scope for the expression.
57
+ * @returns Whether the expression reads the member.
58
+ * @example
59
+ * ```typescript
60
+ * const used = uses(templateExpression, locals);
61
+ * ```
62
+ */
63
+ function uses(expression, expressionLocals) {
64
+ return (expression !== undefined &&
65
+ expressionUsesMember(expression, expressionLocals, usage));
66
+ }
67
+ };
68
+ export { blockUsesMember };
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10ZW1wbGF0ZS1ibG9jay11c2FnZS11dGlsaXRpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRhcHRlcnMvYW5ndWxhci9hbmd1bGFyLXRlbXBsYXRlLWJsb2NrLXVzYWdlLXV0aWxpdGllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBUzdDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFeEUsTUFBTSxlQUFlLEdBQUcsQ0FDdEIsSUFBeUIsRUFDekIsTUFBc0IsRUFDdEIsS0FBMkIsRUFDM0IsVUFBK0IsRUFDdEIsRUFBRTtJQUNYLElBQUksSUFBSSxZQUFZLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMzQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbkMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUM7WUFDM0MsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUM7WUFDbEQsTUFBTSxZQUFZLEdBQ2hCLEtBQUssS0FBSyxTQUFTO2dCQUNqQixDQUFDLENBQUMsTUFBTTtnQkFDUixDQUFDLENBQUMsVUFBVSxLQUFLLFNBQVM7b0JBQ3hCLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzVCLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztZQUU3QyxPQUFPLENBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksU0FBUyxFQUFFLE1BQU0sQ0FBQztnQkFDNUMsVUFBVSxD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LENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7WUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ25CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDVCxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxTQUFTLEVBQUUsTUFBTSxDQUFDO2dCQUM1QyxVQUFVLENBQ1IsTUFBTSxDQUFDLFFBQVEsRUFDZixTQUFTLENBQ1AsTUFBTSxFQUNOLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FDaEQsRUFDRCxLQUFLLENBQ04sQ0FDSixDQUFDLENBQUM7UUFDUCxDQUFDLElBQUksWUFBWSxPQUFPLENBQUMsbUJBQW1CO1lBQzFDLFVBQVUsQ0FDUixJQUFJLENBQUMsUUFBUSxFQUNiLFNBQVMsQ0FDUCxNQUFNLEVBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FDdkMsRUFDRCxLQUFLLENBQ04sQ0FBQyxDQUNMLENBQUM7SUFFRjs7Ozs7Ozs7O09BU0c7SUFDSCxTQUFTLElBQUksQ0FDWCxVQUFtQyxFQUNuQyxnQkFBZ0M7UUFFaEMsT0FBTyxDQUNMLFVBQVUsS0FBSyxTQUFTO1lBQ3hCLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FDMUQsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUM7QUFFRixPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhbmd1bGFyIGZyb20gXCJAYW5ndWxhci9jb21waWxlclwiO1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFuZ3VsYXJUZW1wbGF0ZU5vZGUsXG4gIFRlbXBsYXRlTG9jYWxzLFxuICBUZW1wbGF0ZU5vZGVWaXNpdG9yLFxuICBUZW1wbGF0ZVVzYWdlQ29udGV4dCxcbn0gZnJvbSBcIi4vYW5ndWxhci10ZW1wbGF0ZS11c2FnZS1jb250ZXh0XCI7XG5cbmltcG9ydCB7IGV4cHJlc3Npb25Vc2VzTWVtYmVyIH0gZnJvbSBcIi4vYW5ndWxhci10ZW1wbGF0ZS1leHByZXNzaW9uLXV0aWxpdGllc1wiO1xuaW1wb3J0IHsgd2l0aEFsaWFzLCB3aXRoTmFtZXMgfSBmcm9tIFwiLi9hbmd1bGFyLXRlbXBsYXRlLXVzYWdlLWNvbnRleHRcIjtcblxuY29uc3QgYmxvY2tVc2VzTWVtYmVyID0gKFxuICBub2RlOiBBbmd1bGFyVGVtcGxhdGVOb2RlLFxuICBsb2NhbHM6IFRlbXBsYXRlTG9jYWxzLFxuICB1c2FnZTogVGVtcGxhdGVVc2FnZUNvbnRleHQsXG4gIHZpc2l0Tm9kZXM6IFRlbXBsYXRlTm9kZVZpc2l0b3IsXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBhbmd1bGFyLlRtcGxBc3RJZkJsb2NrKSB7XG4gICAgcmV0dXJuIG5vZGUuYnJhbmNoZXMuc29tZSgoYnJhbmNoKSA9PiB7XG4gICAgICBjb25zdCBhbGlhcyA9IGJyYW5jaC5leHByZXNzaW9uQWxpYXM/Lm5hbWU7XG4gICAgICBjb25zdCBhbGlhc1ZhbHVlID0gYnJhbmNoLmV4cHJlc3Npb24gPz8gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgYnJhbmNoTG9jYWxzID1cbiAgICAgICAgYWxpYXMgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gbG9jYWxzXG4gICAgICAgICAgOiBhbGlhc1ZhbHVlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gd2l0aE5hbWVzKGxvY2FscywgW2FsaWFzXSlcbiAgICAgICAgICAgIDogd2l0aEFsaWFzKGxvY2FscywgYWxpYXMsIGFsaWFzVmFsdWUpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICB1c2VzKGJyYW5jaC5leHByZXNzaW9uID8/IHVuZGVmaW5lZCwgbG9jYWxzKSB8fFxuICAgICAgICB2aXNpdE5vZGVzKGJyYW5jaC5jaGlsZHJlbiwgYnJhbmNoTG9jYWxzLCB1c2FnZSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIGFuZ3VsYXIuVG1wbEFzdEZvckxvb3BCbG9jaykge1xuICAgIGNvbnN0IGxvb3BMb2NhbHMgPSB3aXRoTmFtZXMobG9jYWxzLCBbXG4gICAgICBub2RlLml0ZW0ubmFtZSxcbiAgICAgIC4uLm5vZGUuY29udGV4dFZhcmlhYmxlcy5tYXAoKHsgbmFtZSB9KSA9PiBuYW1lKSxcbiAgICBdKTtcblxuICAgIHJldHVybiAoXG4gICAgICB1c2VzKG5vZGUuZXhwcmVzc2lvbiwgbG9jYWxzKSB8fFxuICAgICAgdXNlcyhub2RlLnRyYWNrQnkgPz8gdW5kZWZpbmVkLCBsb29wTG9jYWxzKSB8fFxuICAgICAgdmlzaXROb2Rlcyhub2RlLmNoaWxkcmVuLCBsb29wTG9jYWxzLCB1c2FnZSkgfHxcbiAgICAgIChub2RlLmVtcHR5ICE9PSBudWxsICYmIHZpc2l0Tm9kZXMobm9kZS5lbXB0eS5jaGlsZHJlbiwgbG9jYWxzLCB1c2FnZSkpXG4gICAgKTtcbiAgfVxuXG4gIGlmIChub2RlIGluc3RhbmNlb2YgYW5ndWxhci5UbXBsQXN0U3dpdGNoQmxvY2spIHtcbiAgICByZXR1cm4gKFxuICAgICAgdXNlcyhub2RlLmV4cHJlc3Npb24sIGxvY2FscykgfHxcbiAgICAgIG5vZGUuZ3JvdXBzLnNvbWUoXG4gICAgICAgIChncm91cCkgPT5cbiAgICAgICAgICBncm91cC5jYXNlcy5zb21lKChicmFuY2gpID0+XG4gICAgICAgICAgICB1c2VzKGJyYW5jaC5leHByZXNzaW9uID8/IHVuZGVmaW5lZCwgbG9jYWxzKSxcbiAgICAgICAgICApIHx8IHZpc2l0Tm9kZXMoZ3JvdXAuY2hpbGRyZW4sIGxvY2FscywgdXNhZ2UpLFxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIGFuZ3VsYXIuVG1wbEFzdERlZmVycmVkQmxvY2spIHtcbiAgICBjb25zdCB0cmlnZ2VycyA9IFtcbiAgICAgIC4uLk9iamVjdC52YWx1ZXMobm9kZS50cmlnZ2VycyksXG4gICAgICAuLi5PYmplY3QudmFsdWVzKG5vZGUucHJlZmV0Y2hUcmlnZ2VycyksXG4gICAgICAuLi5PYmplY3QudmFsdWVzKG5vZGUuaHlkcmF0ZVRyaWdnZXJzKSxcbiAgICBdO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHRyaWdnZXJzLnNvbWUoXG4gICAgICAgICh0cmlnZ2VyKSA9PlxuICAgICAgICAgIHRyaWdnZXIgaW5zdGFuY2VvZiBhbmd1bGFyLlRtcGxBc3RCb3VuZERlZmVycmVkVHJpZ2dlciAmJlxuICAgICAgICAgIHVzZXModHJpZ2dlci52YWx1ZSwgbG9jYWxzKSxcbiAgICAgICkgfHxcbiAgICAgIHZpc2l0Tm9kZXMobm9kZS5jaGlsZHJlbiwgbG9jYWxzLCB1c2FnZSkgfHxcbiAgICAgIChub2RlLnBsYWNlaG9sZGVyICE9PSBudWxsICYmXG4gICAgICAgIHZpc2l0Tm9kZXMobm9kZS5wbGFjZWhvbGRlci5jaGlsZHJlbiwgbG9jYWxzLCB1c2FnZSkpIHx8XG4gICAgICAobm9kZS5sb2FkaW5nICE9PSBudWxsICYmXG4gICAgICAgIHZpc2l0Tm9kZXMobm9kZS5sb2FkaW5nLmNoaWxkcmVuLCBsb2NhbHMsIHVzYWdlKSkgfHxcbiAgICAgIChub2RlLmVycm9yICE9PSBudWxsICYmIHZpc2l0Tm9kZXMobm9kZS5lcnJvci5jaGlsZHJlbiwgbG9jYWxzLCB1c2FnZSkpXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgKG5vZGUgaW5zdGFuY2VvZiBhbmd1bGFyLlRtcGxBc3RCb3VuZGFyeUJsb2NrICYmXG4gICAgICAodmlzaXROb2Rlcyhub2RlLmNoaWxkcmVuLCBsb2NhbHMsIHVzYWdlKSB8fFxuICAgICAgICBub2RlLmVycm9yQmxvY2tzLnNvbWUoXG4gICAgICAgICAgKGJyYW5jaCkgPT5cbiAgICAgICAgICAgIHVzZXMoYnJhbmNoLmV4cHJlc3Npb24gPz8gdW5kZWZpbmVkLCBsb2NhbHMpIHx8XG4gICAgICAgICAgICB2aXNpdE5vZGVzKFxuICAgICAgICAgICAgICBicmFuY2guY2hpbGRyZW4sXG4gICAgICAgICAgICAgIHdpdGhOYW1lcyhcbiAgICAgICAgICAgICAgICBsb2NhbHMsXG4gICAgICAgICAgICAgICAgYnJhbmNoLmNvbnRleHRWYXJpYWJsZXMubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIHVzYWdlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKSkpIHx8XG4gICAgKG5vZGUgaW5zdGFuY2VvZiBhbmd1bGFyLlRtcGxBc3RDb250ZW50QmxvY2sgJiZcbiAgICAgIHZpc2l0Tm9kZXMoXG4gICAgICAgIG5vZGUuY2hpbGRyZW4sXG4gICAgICAgIHdpdGhOYW1lcyhcbiAgICAgICAgICBsb2NhbHMsXG4gICAgICAgICAgbm9kZS52YXJpYWJsZXMubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSksXG4gICAgICAgICksXG4gICAgICAgIHVzYWdlLFxuICAgICAgKSlcbiAgKTtcblxuICAvKipcbiAgICogQ2hlY2tzIGFuIEFuZ3VsYXIgZXhwcmVzc2lvbiBhZ2FpbnN0IHRoZSBzZWxlY3RlZCBjb21wb25lbnQgbWVtYmVyLlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiBUZW1wbGF0ZSBleHByZXNzaW9uIHRvIGluc3BlY3QuXG4gICAqIEBwYXJhbSBleHByZXNzaW9uTG9jYWxzIFRlbXBsYXRlIGxvY2FscyBpbiBzY29wZSBmb3IgdGhlIGV4cHJlc3Npb24uXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGV4cHJlc3Npb24gcmVhZHMgdGhlIG1lbWJlci5cbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB1c2VkID0gdXNlcyh0ZW1wbGF0ZUV4cHJlc3Npb24sIGxvY2Fscyk7XG4gICAqIGBgYFxuICAgKi9cbiAgZnVuY3Rpb24gdXNlcyhcbiAgICBleHByZXNzaW9uOiBhbmd1bGFyLkFTVCB8IHVuZGVmaW5lZCxcbiAgICBleHByZXNzaW9uTG9jYWxzOiBUZW1wbGF0ZUxvY2FscyxcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGV4cHJlc3Npb24gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgZXhwcmVzc2lvblVzZXNNZW1iZXIoZXhwcmVzc2lvbiwgZXhwcmVzc2lvbkxvY2FscywgdXNhZ2UpXG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgYmxvY2tVc2VzTWVtYmVyIH07XG4iXX0=
@@ -0,0 +1,5 @@
1
+ import * as angular from "@angular/compiler";
2
+ import type { TemplateLocals, TemplateUsageContext } from "./angular-template-usage-context.js";
3
+ declare const expressionUsesMember: (expression: angular.AST, locals: TemplateLocals, usage: TemplateUsageContext) => boolean;
4
+ export { expressionUsesMember };
5
+ //# sourceMappingURL=angular-template-expression-utilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular-template-expression-utilities.d.ts","sourceRoot":"","sources":["../../../src/adapters/angular/angular-template-expression-utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAC;AAG7C,OAAO,KAAK,EACV,cAAc,EAEd,oBAAoB,EACrB,MAAM,kCAAkC,CAAC;AAI1C,QAAA,MAAM,oBAAoB,GACxB,YAAY,OAAO,CAAC,GAAG,EACvB,QAAQ,cAAc,EACtB,OAAO,oBAAoB,KAC1B,OA2BF,CAAC;AAqJF,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,121 @@
1
+ import * as angular from "@angular/compiler";
2
+ import * as ts from "typescript";
3
+ import { isSameSymbol } from "../../domain/architecture/no-unused-exports/no-unused-exports-symbol-utilities.js";
4
+ const expressionUsesMember = (expression, locals, usage) => {
5
+ class MemberReadVisitor extends angular.RecursiveAstVisitor {
6
+ found = false;
7
+ visitPropertyRead(ast) {
8
+ this.record(ast);
9
+ super.visitPropertyRead(ast, undefined);
10
+ }
11
+ visitSafePropertyRead(ast) {
12
+ this.record(ast);
13
+ super.visitSafePropertyRead(ast, undefined);
14
+ }
15
+ record(ast) {
16
+ if (ast.name === usage.member.memberName &&
17
+ resolveTemplatePath(getMemberPath(ast), locals, usage)) {
18
+ this.found = true;
19
+ }
20
+ }
21
+ }
22
+ const visitor = new MemberReadVisitor();
23
+ expression.visit(visitor);
24
+ return visitor.found;
25
+ };
26
+ const getMemberPath = (expression) => {
27
+ if (expression instanceof angular.ASTWithSource) {
28
+ const sourceAst = expression.ast;
29
+ return sourceAst instanceof angular.AST
30
+ ? getMemberPath(sourceAst)
31
+ : undefined;
32
+ }
33
+ if (expression instanceof angular.ImplicitReceiver) {
34
+ return { root: "implicit", segments: [] };
35
+ }
36
+ if (expression instanceof angular.ThisReceiver) {
37
+ return { root: "component", segments: [] };
38
+ }
39
+ if (expression instanceof angular.PropertyRead ||
40
+ expression instanceof angular.SafePropertyRead) {
41
+ const parentPath = getMemberPath(expression.receiver);
42
+ return parentPath === undefined
43
+ ? undefined
44
+ : {
45
+ ...parentPath,
46
+ segments: [...parentPath.segments, { name: expression.name }],
47
+ };
48
+ }
49
+ if (expression instanceof angular.Call ||
50
+ expression instanceof angular.SafeCall) {
51
+ if (expression.args.length > 0) {
52
+ return undefined;
53
+ }
54
+ const calleePath = getMemberPath(expression.receiver);
55
+ return calleePath === undefined
56
+ ? undefined
57
+ : { ...calleePath, segments: [...calleePath.segments, { call: true }] };
58
+ }
59
+ if (expression instanceof angular.ParenthesizedExpression) {
60
+ return getMemberPath(expression.expression);
61
+ }
62
+ return expression instanceof angular.NonNullAssert
63
+ ? getMemberPath(expression.expression)
64
+ : undefined;
65
+ };
66
+ const resolveTemplatePath = (templatePath, locals, usage) => {
67
+ const resolvedPath = expandTemplateLocals(templatePath, locals);
68
+ if (resolvedPath === undefined || resolvedPath.segments.length === 0) {
69
+ return false;
70
+ }
71
+ const { segments } = resolvedPath;
72
+ const [firstSegment] = segments;
73
+ if (firstSegment === undefined || !("name" in firstSegment)) {
74
+ return false;
75
+ }
76
+ let currentType = usage.checker.getDeclaredTypeOfSymbol(usage.componentSymbol);
77
+ for (const [index, segment] of segments.entries()) {
78
+ if ("call" in segment) {
79
+ const [signature] = usage.checker.getSignaturesOfType(currentType, ts.SignatureKind.Call);
80
+ if (signature === undefined) {
81
+ return false;
82
+ }
83
+ currentType = usage.checker.getReturnTypeOfSignature(signature);
84
+ continue;
85
+ }
86
+ const property = usage.checker.getPropertyOfType(usage.checker.getNonNullableType(currentType), segment.name);
87
+ if (property === undefined) {
88
+ return false;
89
+ }
90
+ if (index === segments.length - 1) {
91
+ return isSameSymbol(property, usage.member.memberSymbol);
92
+ }
93
+ currentType = usage.checker.getTypeOfSymbolAtLocation(property, usage.component);
94
+ }
95
+ return false;
96
+ };
97
+ const expandTemplateLocals = (templatePath, locals, visitedLocals = new Set()) => {
98
+ if (templatePath?.root !== "implicit") {
99
+ return templatePath;
100
+ }
101
+ const [firstSegment] = templatePath.segments;
102
+ if (firstSegment === undefined ||
103
+ !("name" in firstSegment) ||
104
+ !locals.has(firstSegment.name)) {
105
+ return templatePath;
106
+ }
107
+ const localName = firstSegment.name;
108
+ const localValue = locals.get(localName);
109
+ if (localValue === undefined || visitedLocals.has(localName)) {
110
+ return undefined;
111
+ }
112
+ const localPath = getMemberPath(localValue);
113
+ return expandTemplateLocals(localPath === undefined
114
+ ? undefined
115
+ : {
116
+ ...localPath,
117
+ segments: [...localPath.segments, ...templatePath.segments.slice(1)],
118
+ }, locals, new Set([...visitedLocals, localName]));
119
+ };
120
+ export { expressionUsesMember };
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10ZW1wbGF0ZS1leHByZXNzaW9uLXV0aWxpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hZGFwdGVycy9hbmd1bGFyL2FuZ3VsYXItdGVtcGxhdGUtZXhwcmVzc2lvbi11dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxtQkFBbUIsQ0FBQztBQUM3QyxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQVFqQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0ZBQWdGLENBQUM7QUFFOUcsTUFBTSxvQkFBb0IsR0FBRyxDQUMzQixVQUF1QixFQUN2QixNQUFzQixFQUN0QixLQUEyQixFQUNsQixFQUFFO0lBQ1gsTUFBTSxpQkFBa0IsU0FBUSxPQUFPLENBQUMsbUJBQW1CO1FBQ3pELEtBQUssR0FBRyxLQUFLLENBQUM7UUFFTCxpQkFBaUIsQ0FBQyxHQUF5QjtZQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVRLHFCQUFxQixDQUFDLEdBQTZCO1lBQzFELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakIsS0FBSyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRU8sTUFBTSxDQUFDLEdBQW9EO1lBQ2pFLElBQ0UsR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVU7Z0JBQ3BDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQ3RELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDcEIsQ0FBQztRQUNILENB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Q0FBQyxRQUFRLEVBQUUsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyRSxFQUNMLE1BQU0sRUFDTixJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQ3ZDLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFuZ3VsYXIgZnJvbSBcIkBhbmd1bGFyL2NvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuXG5pbXBvcnQgdHlwZSB7XG4gIFRlbXBsYXRlTG9jYWxzLFxuICBUZW1wbGF0ZU1lbWJlclBhdGgsXG4gIFRlbXBsYXRlVXNhZ2VDb250ZXh0LFxufSBmcm9tIFwiLi9hbmd1bGFyLXRlbXBsYXRlLXVzYWdlLWNvbnRleHRcIjtcblxuaW1wb3J0IHsgaXNTYW1lU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9hcmNoaXRlY3R1cmUvbm8tdW51c2VkLWV4cG9ydHMvbm8tdW51c2VkLWV4cG9ydHMtc3ltYm9sLXV0aWxpdGllc1wiO1xuXG5jb25zdCBleHByZXNzaW9uVXNlc01lbWJlciA9IChcbiAgZXhwcmVzc2lvbjogYW5ndWxhci5BU1QsXG4gIGxvY2FsczogVGVtcGxhdGVMb2NhbHMsXG4gIHVzYWdlOiBUZW1wbGF0ZVVzYWdlQ29udGV4dCxcbik6IGJvb2xlYW4gPT4ge1xuICBjbGFzcyBNZW1iZXJSZWFkVmlzaXRvciBleHRlbmRzIGFuZ3VsYXIuUmVjdXJzaXZlQXN0VmlzaXRvciB7XG4gICAgZm91bmQgPSBmYWxzZTtcblxuICAgIG92ZXJyaWRlIHZpc2l0UHJvcGVydHlSZWFkKGFzdDogYW5ndWxhci5Qcm9wZXJ0eVJlYWQpOiB2b2lkIHtcbiAgICAgIHRoaXMucmVjb3JkKGFzdCk7XG4gICAgICBzdXBlci52aXNpdFByb3BlcnR5UmVhZChhc3QsIHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgdmlzaXRTYWZlUHJvcGVydHlSZWFkKGFzdDogYW5ndWxhci5TYWZlUHJvcGVydHlSZWFkKTogdm9pZCB7XG4gICAgICB0aGlzLnJlY29yZChhc3QpO1xuICAgICAgc3VwZXIudmlzaXRTYWZlUHJvcGVydHlSZWFkKGFzdCwgdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlY29yZChhc3Q6IGFuZ3VsYXIuUHJvcGVydHlSZWFkIHwgYW5ndWxhci5TYWZlUHJvcGVydHlSZWFkKTogdm9pZCB7XG4gICAgICBpZiAoXG4gICAgICAgIGFzdC5uYW1lID09PSB1c2FnZS5tZW1iZXIubWVtYmVyTmFtZSAmJlxuICAgICAgICByZXNvbHZlVGVtcGxhdGVQYXRoKGdldE1lbWJlclBhdGgoYXN0KSwgbG9jYWxzLCB1c2FnZSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCB2aXNpdG9yID0gbmV3IE1lbWJlclJlYWRWaXNpdG9yKCk7XG4gIGV4cHJlc3Npb24udmlzaXQodmlzaXRvcik7XG4gIHJldHVybiB2aXNpdG9yLmZvdW5kO1xufTtcblxuY29uc3QgZ2V0TWVtYmVyUGF0aCA9IChcbiAgZXhwcmVzc2lvbjogYW5ndWxhci5BU1QsXG4pOiBUZW1wbGF0ZU1lbWJlclBhdGggfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoZXhwcmVzc2lvbiBpbnN0YW5jZW9mIGFuZ3VsYXIuQVNUV2l0aFNvdXJjZSkge1xuICAgIGNvbnN0IHNvdXJjZUFzdDogdW5rbm93biA9IGV4cHJlc3Npb24uYXN0O1xuICAgIHJldHVybiBzb3VyY2VBc3QgaW5zdGFuY2VvZiBhbmd1bGFyLkFTVFxuICAgICAgPyBnZXRNZW1iZXJQYXRoKHNvdXJjZUFzdClcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBhbmd1bGFyLkltcGxpY2l0UmVjZWl2ZXIpIHtcbiAgICByZXR1cm4geyByb290OiBcImltcGxpY2l0XCIsIHNlZ21lbnRzOiBbXSB9O1xuICB9XG5cbiAgaWYgKGV4cHJlc3Npb24gaW5zdGFuY2VvZiBhbmd1bGFyLlRoaXNSZWNlaXZlcikge1xuICAgIHJldHVybiB7IHJvb3Q6IFwiY29tcG9uZW50XCIsIHNlZ21lbnRzOiBbXSB9O1xuICB9XG5cbiAgaWYgKFxuICAgIGV4cHJlc3Npb24gaW5zdGFuY2VvZiBhbmd1bGFyLlByb3BlcnR5UmVhZCB8fFxuICAgIGV4cHJlc3Npb24gaW5zdGFuY2VvZiBhbmd1bGFyLlNhZmVQcm9wZXJ0eVJlYWRcbiAgKSB7XG4gICAgY29uc3QgcGFyZW50UGF0aCA9IGdldE1lbWJlclBhdGgoZXhwcmVzc2lvbi5yZWNlaXZlcik7XG4gICAgcmV0dXJuIHBhcmVudFBhdGggPT09IHVuZGVmaW5lZFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDoge1xuICAgICAgICAgIC4uLnBhcmVudFBhdGgsXG4gICAgICAgICAgc2VnbWVudHM6IFsuLi5wYXJlbnRQYXRoLnNlZ21lbnRzLCB7IG5hbWU6IGV4cHJlc3Npb24ubmFtZSB9XSxcbiAgICAgICAgfTtcbiAgfVxuXG4gIGlmIChcbiAgICBleHByZXNzaW9uIGluc3RhbmNlb2YgYW5ndWxhci5DYWxsIHx8XG4gICAgZXhwcmVzc2lvbiBpbnN0YW5jZW9mIGFuZ3VsYXIuU2FmZUNhbGxcbiAgKSB7XG4gICAgaWYgKGV4cHJlc3Npb24uYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNhbGxlZVBhdGggPSBnZXRNZW1iZXJQYXRoKGV4cHJlc3Npb24ucmVjZWl2ZXIpO1xuICAgIHJldHVybiBjYWxsZWVQYXRoID09PSB1bmRlZmluZWRcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHsgLi4uY2FsbGVlUGF0aCwgc2VnbWVudHM6IFsuLi5jYWxsZWVQYXRoLnNlZ21lbnRzLCB7IGNhbGw6IHRydWUgfV0gfTtcbiAgfVxuXG4gIGlmIChleHByZXNzaW9uIGluc3RhbmNlb2YgYW5ndWxhci5QYXJlbnRoZXNpemVkRXhwcmVzc2lvbikge1xuICAgIHJldHVybiBnZXRNZW1iZXJQYXRoKGV4cHJlc3Npb24uZXhwcmVzc2lvbik7XG4gIH1cblxuICByZXR1cm4gZXhwcmVzc2lvbiBpbnN0YW5jZW9mIGFuZ3VsYXIuTm9uTnVsbEFzc2VydFxuICAgID8gZ2V0TWVtYmVyUGF0aChleHByZXNzaW9uLmV4cHJlc3Npb24pXG4gICAgOiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCByZXNvbHZlVGVtcGxhdGVQYXRoID0gKFxuICB0ZW1wbGF0ZVBhdGg6IFRlbXBsYXRlTWVtYmVyUGF0aCB8IHVuZGVmaW5lZCxcbiAgbG9jYWxzOiBUZW1wbGF0ZUxvY2FscyxcbiAgdXNhZ2U6IFRlbXBsYXRlVXNhZ2VDb250ZXh0LFxuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IHJlc29sdmVkUGF0aCA9IGV4cGFuZFRlbXBsYXRlTG9jYWxzKHRlbXBsYXRlUGF0aCwgbG9jYWxzKTtcbiAgaWYgKHJlc29sdmVkUGF0aCA9PT0gdW5kZWZpbmVkIHx8IHJlc29sdmVkUGF0aC5zZWdtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB7IHNlZ21lbnRzIH0gPSByZXNvbHZlZFBhdGg7XG4gIGNvbnN0IFtmaXJzdFNlZ21lbnRdID0gc2VnbWVudHM7XG5cbiAgaWYgKGZpcnN0U2VnbWVudCA9PT0gdW5kZWZpbmVkIHx8ICEoXCJuYW1lXCIgaW4gZmlyc3RTZWdtZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCBjdXJyZW50VHlwZSA9IHVzYWdlLmNoZWNrZXIuZ2V0RGVjbGFyZWRUeXBlT2ZTeW1ib2woXG4gICAgdXNhZ2UuY29tcG9uZW50U3ltYm9sLFxuICApO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBzZWdtZW50XSBvZiBzZWdtZW50cy5lbnRyaWVzKCkpIHtcbiAgICBpZiAoXCJjYWxsXCIgaW4gc2VnbWVudCkge1xuICAgICAgY29uc3QgW3NpZ25hdHVyZV0gPSB1c2FnZS5jaGVja2VyLmdldFNpZ25hdHVyZXNPZlR5cGUoXG4gICAgICAgIGN1cnJlbnRUeXBlLFxuICAgICAgICB0cy5TaWduYXR1cmVLaW5kLkNhbGwsXG4gICAgICApO1xuICAgICAgaWYgKHNpZ25hdHVyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY3VycmVudFR5cGUgPSB1c2FnZS5jaGVja2VyLmdldFJldHVyblR5cGVPZlNpZ25hdHVyZShzaWduYXR1cmUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcGVydHkgPSB1c2FnZS5jaGVja2VyLmdldFByb3BlcnR5T2ZUeXBlKFxuICAgICAgdXNhZ2UuY2hlY2tlci5nZXROb25OdWxsYWJsZVR5cGUoY3VycmVudFR5cGUpLFxuICAgICAgc2VnbWVudC5uYW1lLFxuICAgICk7XG4gICAgaWYgKHByb3BlcnR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPT09IHNlZ21lbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHJldHVybiBpc1NhbWVTeW1ib2wocHJvcGVydHksIHVzYWdlLm1lbWJlci5tZW1iZXJTeW1ib2wpO1xuICAgIH1cblxuICAgIGN1cnJlbnRUeXBlID0gdXNhZ2UuY2hlY2tlci5nZXRUeXBlT2ZTeW1ib2xBdExvY2F0aW9uKFxuICAgICAgcHJvcGVydHksXG4gICAgICB1c2FnZS5jb21wb25lbnQsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IGV4cGFuZFRlbXBsYXRlTG9jYWxzID0gKFxuICB0ZW1wbGF0ZVBhdGg6IFRlbXBsYXRlTWVtYmVyUGF0aCB8IHVuZGVmaW5lZCxcbiAgbG9jYWxzOiBUZW1wbGF0ZUxvY2FscyxcbiAgdmlzaXRlZExvY2FsczogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKSxcbik6IFRlbXBsYXRlTWVtYmVyUGF0aCB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICh0ZW1wbGF0ZVBhdGg/LnJvb3QgIT09IFwiaW1wbGljaXRcIikge1xuICAgIHJldHVybiB0ZW1wbGF0ZVBhdGg7XG4gIH1cblxuICBjb25zdCBbZmlyc3RTZWdtZW50XSA9IHRlbXBsYXRlUGF0aC5zZWdtZW50cztcbiAgaWYgKFxuICAgIGZpcnN0U2VnbWVudCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgIShcIm5hbWVcIiBpbiBmaXJzdFNlZ21lbnQpIHx8XG4gICAgIWxvY2Fscy5oYXMoZmlyc3RTZWdtZW50Lm5hbWUpXG4gICkge1xuICAgIHJldHVybiB0ZW1wbGF0ZVBhdGg7XG4gIH1cblxuICBjb25zdCBsb2NhbE5hbWUgPSBmaXJzdFNlZ21lbnQubmFtZTtcbiAgY29uc3QgbG9jYWxWYWx1ZSA9IGxvY2Fscy5nZXQobG9jYWxOYW1lKTtcbiAgaWYgKGxvY2FsVmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2aXNpdGVkTG9jYWxzLmhhcyhsb2NhbE5hbWUpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGxvY2FsUGF0aCA9IGdldE1lbWJlclBhdGgobG9jYWxWYWx1ZSk7XG4gIHJldHVybiBleHBhbmRUZW1wbGF0ZUxvY2FscyhcbiAgICBsb2NhbFBhdGggPT09IHVuZGVmaW5lZFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDoge1xuICAgICAgICAgIC4uLmxvY2FsUGF0aCxcbiAgICAgICAgICBzZWdtZW50czogWy4uLmxvY2FsUGF0aC5zZWdtZW50cywgLi4udGVtcGxhdGVQYXRoLnNlZ21lbnRzLnNsaWNlKDEpXSxcbiAgICAgICAgfSxcbiAgICBsb2NhbHMsXG4gICAgbmV3IFNldChbLi4udmlzaXRlZExvY2FscywgbG9jYWxOYW1lXSksXG4gICk7XG59O1xuXG5leHBvcnQgeyBleHByZXNzaW9uVXNlc01lbWJlciB9O1xuIl19
@@ -0,0 +1,4 @@
1
+ import type { AngularTemplateNode, TemplateLocals, TemplateUsageContext } from "./angular-template-usage-context.js";
2
+ declare const templateNodesUseMember: (nodes: AngularTemplateNode[], inheritedLocals: TemplateLocals, usage: TemplateUsageContext) => boolean;
3
+ export { templateNodesUseMember };
4
+ //# sourceMappingURL=angular-template-node-usage-utilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular-template-node-usage-utilities.d.ts","sourceRoot":"","sources":["../../../src/adapters/angular/angular-template-node-usage-utilities.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACrB,MAAM,kCAAkC,CAAC;AAM1C,QAAA,MAAM,sBAAsB,GAC1B,OAAO,mBAAmB,EAAE,EAC5B,iBAAiB,cAAc,EAC/B,OAAO,oBAAoB,KAC1B,OAgBF,CAAC;AAmEF,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,47 @@
1
+ import * as angular from "@angular/compiler";
2
+ import { blockUsesMember } from "./angular-template-block-usage-utilities.js";
3
+ import { expressionUsesMember } from "./angular-template-expression-utilities.js";
4
+ import { withNames } from "./angular-template-usage-context.js";
5
+ const templateNodesUseMember = (nodes, inheritedLocals, usage) => {
6
+ const locals = new Map(inheritedLocals);
7
+ for (const node of nodes) {
8
+ if (node instanceof angular.TmplAstLetDeclaration) {
9
+ if (expressionUsesMember(node.value, locals, usage)) {
10
+ return true;
11
+ }
12
+ locals.set(node.name, node.value);
13
+ }
14
+ else if (nodeUsesMember(node, locals, usage)) {
15
+ return true;
16
+ }
17
+ }
18
+ return false;
19
+ };
20
+ const nodeUsesMember = (node, locals, usage) => {
21
+ if (node instanceof angular.TmplAstBoundText) {
22
+ return expressionUsesMember(node.value, locals, usage);
23
+ }
24
+ if (node instanceof angular.TmplAstElement) {
25
+ return (inputsUseMember(node.inputs, locals, usage) ||
26
+ eventsUseMember(node.outputs, locals, usage) ||
27
+ templateNodesUseMember(node.children, withNames(locals, node.references.map(({ name }) => name)), usage));
28
+ }
29
+ if (node instanceof angular.TmplAstTemplate) {
30
+ const templateLocals = withNames(locals, [...node.variables, ...node.references].map(({ name }) => name));
31
+ return (inputsUseMember(node.inputs, locals, usage) ||
32
+ eventsUseMember(node.outputs, locals, usage) ||
33
+ node.templateAttrs.some((attribute) => attribute instanceof angular.TmplAstBoundAttribute &&
34
+ expressionUsesMember(attribute.value, locals, usage)) ||
35
+ templateNodesUseMember(node.children, templateLocals, usage));
36
+ }
37
+ return node instanceof angular.TmplAstContent
38
+ ? templateNodesUseMember(node.children, locals, usage)
39
+ : blockUsesMember(node, locals, usage, templateNodesUseMember);
40
+ };
41
+ const inputsUseMember = (inputs, locals, usage) => inputs.some((input) => expressionUsesMember(input.value, locals, usage));
42
+ const eventsUseMember = (events, locals, usage) => {
43
+ const eventLocals = withNames(locals, ["$event"]);
44
+ return events.some((event) => expressionUsesMember(event.handler, eventLocals, usage));
45
+ };
46
+ export { templateNodesUseMember };
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10ZW1wbGF0ZS1ub2RlLXVzYWdlLXV0aWxpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hZGFwdGVycy9hbmd1bGFyL2FuZ3VsYXItdGVtcGxhdGUtbm9kZS11c2FnZS11dGlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxtQkFBbUIsQ0FBQztBQVE3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDL0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTdELE1BQU0sc0JBQXNCLEdBQUcsQ0FDN0IsS0FBNEIsRUFDNUIsZUFBK0IsRUFDL0IsS0FBMkIsRUFDbEIsRUFBRTtJQUNYLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRXhDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxJQUFJLFlBQVksT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDbEQsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFFRCxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUM7YUFBTSxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0MsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsTUFBTSxjQUFj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b20gXCJAYW5ndWxhci9jb21waWxlclwiO1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFuZ3VsYXJUZW1wbGF0ZU5vZGUsXG4gIFRlbXBsYXRlTG9jYWxzLFxuICBUZW1wbGF0ZVVzYWdlQ29udGV4dCxcbn0gZnJvbSBcIi4vYW5ndWxhci10ZW1wbGF0ZS11c2FnZS1jb250ZXh0XCI7XG5cbmltcG9ydCB7IGJsb2NrVXNlc01lbWJlciB9IGZyb20gXCIuL2FuZ3VsYXItdGVtcGxhdGUtYmxvY2stdXNhZ2UtdXRpbGl0aWVzXCI7XG5pbXBvcnQgeyBleHByZXNzaW9uVXNlc01lbWJlciB9IGZyb20gXCIuL2FuZ3VsYXItdGVtcGxhdGUtZXhwcmVzc2lvbi11dGlsaXRpZXNcIjtcbmltcG9ydCB7IHdpdGhOYW1lcyB9IGZyb20gXCIuL2FuZ3VsYXItdGVtcGxhdGUtdXNhZ2UtY29udGV4dFwiO1xuXG5jb25zdCB0ZW1wbGF0ZU5vZGVzVXNlTWVtYmVyID0gKFxuICBub2RlczogQW5ndWxhclRlbXBsYXRlTm9kZVtdLFxuICBpbmhlcml0ZWRMb2NhbHM6IFRlbXBsYXRlTG9jYWxzLFxuICB1c2FnZTogVGVtcGxhdGVVc2FnZUNvbnRleHQsXG4pOiBib29sZWFuID0+IHtcbiAgY29uc3QgbG9jYWxzID0gbmV3IE1hcChpbmhlcml0ZWRMb2NhbHMpO1xuXG4gIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgIGlmIChub2RlIGluc3RhbmNlb2YgYW5ndWxhci5UbXBsQXN0TGV0RGVjbGFyYXRpb24pIHtcbiAgICAgIGlmIChleHByZXNzaW9uVXNlc01lbWJlcihub2RlLnZhbHVlLCBsb2NhbHMsIHVzYWdlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbG9jYWxzLnNldChub2RlLm5hbWUsIG5vZGUudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAobm9kZVVzZXNNZW1iZXIobm9kZSwgbG9jYWxzLCB1c2FnZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmNvbnN0IG5vZGVVc2VzTWVtYmVyID0gKFxuICBub2RlOiBBbmd1bGFyVGVtcGxhdGVOb2RlLFxuICBsb2NhbHM6IFRlbXBsYXRlTG9jYWxzLFxuICB1c2FnZTogVGVtcGxhdGVVc2FnZUNvbnRleHQsXG4pOiBib29sZWFuID0+IHtcbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBhbmd1bGFyLlRtcGxBc3RCb3VuZFRleHQpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvblVzZXNNZW1iZXIobm9kZS52YWx1ZSwgbG9jYWxzLCB1c2FnZSk7XG4gIH1cblxuICBpZiAobm9kZSBpbnN0YW5jZW9mIGFuZ3VsYXIuVG1wbEFzdEVsZW1lbnQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgaW5wdXRzVXNlTWVtYmVyKG5vZGUuaW5wdXRzLCBsb2NhbHMsIHVzYWdlKSB8fFxuICAgICAgZXZlbnRzVXNlTWVtYmVyKG5vZGUub3V0cHV0cywgbG9jYWxzLCB1c2FnZSkgfHxcbiAgICAgIHRlbXBsYXRlTm9kZXNVc2VNZW1iZXIoXG4gICAgICAgIG5vZGUuY2hpbGRyZW4sXG4gICAgICAgIHdpdGhOYW1lcyhcbiAgICAgICAgICBsb2NhbHMsXG4gICAgICAgICAgbm9kZS5yZWZlcmVuY2VzLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpLFxuICAgICAgICApLFxuICAgICAgICB1c2FnZSxcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgaWYgKG5vZGUgaW5zdGFuY2VvZiBhbmd1bGFyLlRtcGxBc3RUZW1wbGF0ZSkge1xuICAgIGNvbnN0IHRlbXBsYXRlTG9jYWxzID0gd2l0aE5hbWVzKFxuICAgICAgbG9jYWxzLFxuICAgICAgWy4uLm5vZGUudmFyaWFibGVzLCAuLi5ub2RlLnJlZmVyZW5jZXNdLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpLFxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgaW5wdXRzVXNlTWVtYmVyKG5vZGUuaW5wdXRzLCBsb2NhbHMsIHVzYWdlKSB8fFxuICAgICAgZXZlbnRzVXNlTWVtYmVyKG5vZGUub3V0cHV0cywgbG9jYWxzLCB1c2FnZSkgfHxcbiAgICAgIG5vZGUudGVtcGxhdGVBdHRycy5zb21lKFxuICAgICAgICAoYXR0cmlidXRlKSA9PlxuICAgICAgICAgIGF0dHJpYnV0ZSBpbnN0YW5jZW9mIGFuZ3VsYXIuVG1wbEFzdEJvdW5kQXR0cmlidXRlICYmXG4gICAgICAgICAgZXhwcmVzc2lvblVzZXNNZW1iZXIoYXR0cmlidXRlLnZhbHVlLCBsb2NhbHMsIHVzYWdlKSxcbiAgICAgICkgfHxcbiAgICAgIHRlbXBsYXRlTm9kZXNVc2VNZW1iZXIobm9kZS5jaGlsZHJlbiwgdGVtcGxhdGVMb2NhbHMsIHVzYWdlKVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIGFuZ3VsYXIuVG1wbEFzdENvbnRlbnRcbiAgICA/IHRlbXBsYXRlTm9kZXNVc2VNZW1iZXIobm9kZS5jaGlsZHJlbiwgbG9jYWxzLCB1c2FnZSlcbiAgICA6IGJsb2NrVXNlc01lbWJlcihub2RlLCBsb2NhbHMsIHVzYWdlLCB0ZW1wbGF0ZU5vZGVzVXNlTWVtYmVyKTtcbn07XG5cbmNvbnN0IGlucHV0c1VzZU1lbWJlciA9IChcbiAgaW5wdXRzOiByZWFkb25seSBhbmd1bGFyLlRtcGxBc3RCb3VuZEF0dHJpYnV0ZVtdLFxuICBsb2NhbHM6IFRlbXBsYXRlTG9jYWxzLFxuICB1c2FnZTogVGVtcGxhdGVVc2FnZUNvbnRleHQsXG4pOiBib29sZWFuID0+XG4gIGlucHV0cy5zb21lKChpbnB1dCkgPT4gZXhwcmVzc2lvblVzZXNNZW1iZXIoaW5wdXQudmFsdWUsIGxvY2FscywgdXNhZ2UpKTtcblxuY29uc3QgZXZlbnRzVXNlTWVtYmVyID0gKFxuICBldmVudHM6IHJlYWRvbmx5IGFuZ3VsYXIuVG1wbEFzdEJvdW5kRXZlbnRbXSxcbiAgbG9jYWxzOiBUZW1wbGF0ZUxvY2FscyxcbiAgdXNhZ2U6IFRlbXBsYXRlVXNhZ2VDb250ZXh0LFxuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGV2ZW50TG9jYWxzID0gd2l0aE5hbWVzKGxvY2FscywgW1wiJGV2ZW50XCJdKTtcbiAgcmV0dXJuIGV2ZW50cy5zb21lKChldmVudCkgPT5cbiAgICBleHByZXNzaW9uVXNlc01lbWJlcihldmVudC5oYW5kbGVyLCBldmVudExvY2FscywgdXNhZ2UpLFxuICApO1xufTtcblxuZXhwb3J0IHsgdGVtcGxhdGVOb2Rlc1VzZU1lbWJlciB9O1xuIl19
@@ -0,0 +1,26 @@
1
+ import * as angular from "@angular/compiler";
2
+ import * as ts from "typescript";
3
+ import type { PublicMember } from "../../domain/architecture/no-unused-public-members/member-declaration-utilities.js";
4
+ type AngularTemplateNode = ReturnType<typeof angular.parseTemplate>["nodes"][number];
5
+ type MemberPathSegment = {
6
+ call: true;
7
+ } | {
8
+ name: string;
9
+ };
10
+ type TemplateLocals = ReadonlyMap<string, angular.AST | undefined>;
11
+ interface TemplateMemberPath {
12
+ root: "component" | "implicit";
13
+ segments: MemberPathSegment[];
14
+ }
15
+ type TemplateNodeVisitor = (nodes: AngularTemplateNode[], locals: TemplateLocals, usage: TemplateUsageContext) => boolean;
16
+ interface TemplateUsageContext {
17
+ checker: ts.TypeChecker;
18
+ component: ts.ClassDeclaration;
19
+ componentSymbol: ts.Symbol;
20
+ member: PublicMember;
21
+ }
22
+ declare const withNames: (locals: TemplateLocals, names: readonly string[]) => TemplateLocals;
23
+ declare const withAlias: (locals: TemplateLocals, name: string, value: angular.AST) => TemplateLocals;
24
+ export type { AngularTemplateNode, TemplateLocals, TemplateMemberPath, TemplateNodeVisitor, TemplateUsageContext, };
25
+ export { withAlias, withNames };
26
+ //# sourceMappingURL=angular-template-usage-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular-template-usage-context.d.ts","sourceRoot":"","sources":["../../../src/adapters/angular/angular-template-usage-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iFAAiF,CAAC;AAEpH,KAAK,mBAAmB,GAAG,UAAU,CACnC,OAAO,OAAO,CAAC,aAAa,CAC7B,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnB,KAAK,iBAAiB,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,KAAK,cAAc,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;AAEnE,UAAU,kBAAkB;IAC1B,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC;IAC/B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED,KAAK,mBAAmB,GAAG,CACzB,KAAK,EAAE,mBAAmB,EAAE,EAC5B,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,oBAAoB,KACxB,OAAO,CAAC;AAEb,UAAU,oBAAoB;IAC5B,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC;IACxB,SAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC;IAC/B,eAAe,EAAE,EAAE,CAAC,MAAM,CAAC;IAC3B,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,QAAA,MAAM,SAAS,GACb,QAAQ,cAAc,EACtB,OAAO,SAAS,MAAM,EAAE,KACvB,cAMF,CAAC;AAEF,QAAA,MAAM,SAAS,GACb,QAAQ,cAAc,EACtB,MAAM,MAAM,EACZ,OAAO,OAAO,CAAC,GAAG,KACjB,cAAqD,CAAC;AAEzD,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,CAAC;AACF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import * as angular from "@angular/compiler";
2
+ import * as ts from "typescript";
3
+ const withNames = (locals, names) => {
4
+ const extended = new Map(locals);
5
+ for (const name of names) {
6
+ extended.set(name, undefined);
7
+ }
8
+ return extended;
9
+ };
10
+ const withAlias = (locals, name, value) => new Map([...locals, [name, value]]);
11
+ export { withAlias, withNames };
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10ZW1wbGF0ZS11c2FnZS1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FkYXB0ZXJzL2FuZ3VsYXIvYW5ndWxhci10ZW1wbGF0ZS11c2FnZS1jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUE4QmpDLE1BQU0sU0FBUyxHQUFHLENBQ2hCLE1BQXNCLEVBQ3RCLEtBQXdCLEVBQ1IsRUFBRTtJQUNsQixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBRyxDQUNoQixNQUFzQixFQUN0QixJQUFZLEVBQ1osS0FBa0IsRUFDRixFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFTekQsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFuZ3VsYXIgZnJvbSBcIkBhbmd1bGFyL2NvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuXG5pbXBvcnQgdHlwZSB7IFB1YmxpY01lbWJlciB9IGZyb20gXCIuLi8uLi9kb21haW4vYXJjaGl0ZWN0dXJlL25vLXVudXNlZC1wdWJsaWMtbWVtYmVycy9tZW1iZXItZGVjbGFyYXRpb24tdXRpbGl0aWVzXCI7XG5cbnR5cGUgQW5ndWxhclRlbXBsYXRlTm9kZSA9IFJldHVyblR5cGU8XG4gIHR5cGVvZiBhbmd1bGFyLnBhcnNlVGVtcGxhdGVcbj5bXCJub2Rlc1wiXVtudW1iZXJdO1xuXG50eXBlIE1lbWJlclBhdGhTZWdtZW50ID0geyBjYWxsOiB0cnVlIH0gfCB7IG5hbWU6IHN0cmluZyB9O1xuXG50eXBlIFRlbXBsYXRlTG9jYWxzID0gUmVhZG9ubHlNYXA8c3RyaW5nLCBhbmd1bGFyLkFTVCB8IHVuZGVmaW5lZD47XG5cbmludGVyZmFjZSBUZW1wbGF0ZU1lbWJlclBhdGgge1xuICByb290OiBcImNvbXBvbmVudFwiIHwgXCJpbXBsaWNpdFwiO1xuICBzZWdtZW50czogTWVtYmVyUGF0aFNlZ21lbnRbXTtcbn1cblxudHlwZSBUZW1wbGF0ZU5vZGVWaXNpdG9yID0gKFxuICBub2RlczogQW5ndWxhclRlbXBsYXRlTm9kZVtdLFxuICBsb2NhbHM6IFRlbXBsYXRlTG9jYWxzLFxuICB1c2FnZTogVGVtcGxhdGVVc2FnZUNvbnRleHQsXG4pID0+IGJvb2xlYW47XG5cbmludGVyZmFjZSBUZW1wbGF0ZVVzYWdlQ29udGV4dCB7XG4gIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyO1xuICBjb21wb25lbnQ6IHRzLkNsYXNzRGVjbGFyYXRpb247XG4gIGNvbXBvbmVudFN5bWJvbDogdHMuU3ltYm9sO1xuICBtZW1iZXI6IFB1YmxpY01lbWJlcjtcbn1cblxuY29uc3Qgd2l0aE5hbWVzID0gKFxuICBsb2NhbHM6IFRlbXBsYXRlTG9jYWxzLFxuICBuYW1lczogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiBUZW1wbGF0ZUxvY2FscyA9PiB7XG4gIGNvbnN0IGV4dGVuZGVkID0gbmV3IE1hcChsb2NhbHMpO1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXMpIHtcbiAgICBleHRlbmRlZC5zZXQobmFtZSwgdW5kZWZpbmVkKTtcbiAgfVxuICByZXR1cm4gZXh0ZW5kZWQ7XG59O1xuXG5jb25zdCB3aXRoQWxpYXMgPSAoXG4gIGxvY2FsczogVGVtcGxhdGVMb2NhbHMsXG4gIG5hbWU6IHN0cmluZyxcbiAgdmFsdWU6IGFuZ3VsYXIuQVNULFxuKTogVGVtcGxhdGVMb2NhbHMgPT4gbmV3IE1hcChbLi4ubG9jYWxzLCBbbmFtZSwgdmFsdWVdXSk7XG5cbmV4cG9ydCB0eXBlIHtcbiAgQW5ndWxhclRlbXBsYXRlTm9kZSxcbiAgVGVtcGxhdGVMb2NhbHMsXG4gIFRlbXBsYXRlTWVtYmVyUGF0aCxcbiAgVGVtcGxhdGVOb2RlVmlzaXRvcixcbiAgVGVtcGxhdGVVc2FnZUNvbnRleHQsXG59O1xuZXhwb3J0IHsgd2l0aEFsaWFzLCB3aXRoTmFtZXMgfTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export { codeperfectAngularPlugin } from "./plugin.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/angular/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { codeperfectAngularPlugin } from "./plugin.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRhcHRlcnMvYW5ndWxhci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBjb2RlcGVyZmVjdEFuZ3VsYXJQbHVnaW4gfSBmcm9tIFwiLi9wbHVnaW5cIjtcbiJdfQ==
@@ -0,0 +1,15 @@
1
+ import type { MemberUsageAdapter } from "../../domain/architecture/no-unused-public-members/member-usage-utilities.js";
2
+ /**
3
+ * Resolves public-member usage in statically declared Angular templates.
4
+ * @param sourceFile TypeScript source file being inspected.
5
+ * @param checker TypeScript checker for the project.
6
+ * @param member Public member whose template usage is being checked.
7
+ * @returns Whether an Angular template references the member.
8
+ * @example
9
+ * ```typescript
10
+ * const used = angularTemplateUsageAdapter(sourceFile, checker, member);
11
+ * ```
12
+ */
13
+ declare const angularTemplateUsageAdapter: MemberUsageAdapter;
14
+ export { angularTemplateUsageAdapter };
15
+ //# sourceMappingURL=no-unused-public-members-template-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-unused-public-members-template-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/angular/no-unused-public-members-template-adapter.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAC;AAsBpH;;;;;;;;;;GAUG;AACH,QAAA,MAAM,2BAA2B,EAAE,kBAqB/B,CAAC;AA8IL,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
@@ -0,0 +1,126 @@
1
+ import * as angular from "@angular/compiler";
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import path from "node:path";
4
+ import * as ts from "typescript";
5
+ import { templateNodesUseMember } from "./angular-template-node-usage-utilities.js";
6
+ const componentTemplateCache = new WeakMap();
7
+ const parsedTemplateCache = new WeakMap();
8
+ /**
9
+ * Resolves public-member usage in statically declared Angular templates.
10
+ * @param sourceFile TypeScript source file being inspected.
11
+ * @param checker TypeScript checker for the project.
12
+ * @param member Public member whose template usage is being checked.
13
+ * @returns Whether an Angular template references the member.
14
+ * @example
15
+ * ```typescript
16
+ * const used = angularTemplateUsageAdapter(sourceFile, checker, member);
17
+ * ```
18
+ */
19
+ const angularTemplateUsageAdapter = (sourceFile, checker, member) => sourceFile.statements.some((statement) => {
20
+ if (!ts.isClassDeclaration(statement)) {
21
+ return false;
22
+ }
23
+ const template = getComponentTemplate(statement, sourceFile, checker);
24
+ const componentSymbol = statement.name === undefined
25
+ ? undefined
26
+ : checker.getSymbolAtLocation(statement.name);
27
+ return (template !== undefined &&
28
+ componentSymbol !== undefined &&
29
+ templateUsesMember(template, statement, componentSymbol, checker, member));
30
+ });
31
+ const getComponentTemplate = (declaration, sourceFile, checker) => {
32
+ if (componentTemplateCache.has(declaration)) {
33
+ return componentTemplateCache.get(declaration);
34
+ }
35
+ const decorators = ts.canHaveDecorators(declaration)
36
+ ? (ts.getDecorators(declaration) ?? [])
37
+ : [];
38
+ for (const decorator of decorators) {
39
+ if (!ts.isCallExpression(decorator.expression) ||
40
+ !ts.isIdentifier(decorator.expression.expression) ||
41
+ !isAngularComponentImport(decorator.expression.expression, checker)) {
42
+ continue;
43
+ }
44
+ const [metadata] = decorator.expression.arguments;
45
+ if (metadata === undefined || !ts.isObjectLiteralExpression(metadata)) {
46
+ continue;
47
+ }
48
+ for (const property of metadata.properties) {
49
+ if (!ts.isPropertyAssignment(property) ||
50
+ (!ts.isIdentifier(property.name) &&
51
+ !ts.isStringLiteralLike(property.name))) {
52
+ continue;
53
+ }
54
+ if (property.name.text === "template" &&
55
+ ts.isStringLiteralLike(property.initializer)) {
56
+ const template = {
57
+ content: property.initializer.text,
58
+ filePath: sourceFile.fileName,
59
+ };
60
+ componentTemplateCache.set(declaration, template);
61
+ return template;
62
+ }
63
+ if (property.name.text === "templateUrl" &&
64
+ ts.isStringLiteralLike(property.initializer)) {
65
+ const filePath = path.resolve(path.dirname(sourceFile.fileName), property.initializer.text);
66
+ const template = readTemplateFile(filePath);
67
+ componentTemplateCache.set(declaration, template);
68
+ return template;
69
+ }
70
+ }
71
+ }
72
+ componentTemplateCache.set(declaration, undefined);
73
+ return undefined;
74
+ };
75
+ const isAngularComponentImport = (identifier, checker) => checker.getSymbolAtLocation(identifier)?.declarations?.some((declaration) => {
76
+ if (!ts.isImportSpecifier(declaration)) {
77
+ return false;
78
+ }
79
+ const importClause = declaration.parent.parent;
80
+ if (!ts.isImportClause(importClause)) {
81
+ return false;
82
+ }
83
+ const importDeclaration = importClause.parent;
84
+ return (ts.isImportDeclaration(importDeclaration) &&
85
+ ts.isStringLiteral(importDeclaration.moduleSpecifier) &&
86
+ importDeclaration.moduleSpecifier.text === "@angular/core" &&
87
+ (declaration.propertyName?.text ?? declaration.name.text) === "Component");
88
+ }) ?? false;
89
+ const readTemplateFile = (filePath) => {
90
+ if (!existsSync(filePath)) {
91
+ return undefined;
92
+ }
93
+ try {
94
+ return { content: readFileSync(filePath, "utf8"), filePath };
95
+ }
96
+ catch {
97
+ return undefined;
98
+ }
99
+ };
100
+ const templateUsesMember = (template, component, componentSymbol, checker, member) => {
101
+ const nodes = getParsedTemplateNodes(template, component);
102
+ if (nodes === undefined) {
103
+ return false;
104
+ }
105
+ const usage = {
106
+ checker,
107
+ component,
108
+ componentSymbol,
109
+ member,
110
+ };
111
+ return templateNodesUseMember(nodes, new Map(), usage);
112
+ };
113
+ const getParsedTemplateNodes = (template, component) => {
114
+ if (parsedTemplateCache.has(component)) {
115
+ return parsedTemplateCache.get(component);
116
+ }
117
+ const parsed = angular.parseTemplate(template.content, template.filePath, {
118
+ enableBlockSyntax: true,
119
+ enableLetSyntax: true,
120
+ });
121
+ const nodes = parsed.errors === null ? parsed.nodes : undefined;
122
+ parsedTemplateCache.set(component, nodes);
123
+ return nodes;
124
+ };
125
+ export { angularTemplateUsageAdapter };
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tdW51c2VkLXB1YmxpYy1tZW1iZXJzLXRlbXBsYXRlLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWRhcHRlcnMvYW5ndWxhci9uby11bnVzZWQtcHVibGljLW1lbWJlcnMtdGVtcGxhdGUtYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ25ELE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQVNqQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQU9qRixNQUFNLHNCQUFzQixHQUFHLElBQUksT0FBTyxFQUd2QyxDQUFDO0FBQ0osTUFBTSxtQkFBbUIsR0FBRyxJQUFJLE9BQU8sRUFHcEMsQ0FBQztBQUVKOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLDJCQUEyQixHQUF1QixDQUN0RCxVQUFVLEVBQ1YsT0FBTyxFQUNQLE1BQU0sRUFDTixFQUFFLENBQ0YsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtJQUN2QyxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDdEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RSxNQUFNLGVBQWUsR0FDbkIsU0FBUyxDQUFDLElBQUksS0FBSyxTQUFTO1FBQzFCLENBQUMsQ0FBQyxTQUFTO1FBQ1gsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFD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LE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoRSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFDLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhbmd1bGFyIGZyb20gXCJAYW5ndWxhci9jb21waWxlclwiO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCAqIGFzIHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbmltcG9ydCB0eXBlIHsgUHVibGljTWVtYmVyIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9hcmNoaXRlY3R1cmUvbm8tdW51c2VkLXB1YmxpYy1tZW1iZXJzL21lbWJlci1kZWNsYXJhdGlvbi11dGlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHsgTWVtYmVyVXNhZ2VBZGFwdGVyIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9hcmNoaXRlY3R1cmUvbm8tdW51c2VkLXB1YmxpYy1tZW1iZXJzL21lbWJlci11c2FnZS11dGlsaXRpZXNcIjtcbmltcG9ydCB0eXBlIHtcbiAgQW5ndWxhclRlbXBsYXRlTm9kZSxcbiAgVGVtcGxhdGVVc2FnZUNvbnRleHQsXG59IGZyb20gXCIuL2FuZ3VsYXItdGVtcGxhdGUtdXNhZ2UtY29udGV4dFwiO1xuXG5pbXBvcnQgeyB0ZW1wbGF0ZU5vZGVzVXNlTWVtYmVyIH0gZnJvbSBcIi4vYW5ndWxhci10ZW1wbGF0ZS1ub2RlLXVzYWdlLXV0aWxpdGllc1wiO1xuXG5pbnRlcmZhY2UgQ29tcG9uZW50VGVtcGxhdGUge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGZpbGVQYXRoOiBzdHJpbmc7XG59XG5cbmNvbnN0IGNvbXBvbmVudFRlbXBsYXRlQ2FjaGUgPSBuZXcgV2Vha01hcDxcbiAgdHMuQ2xhc3NEZWNsYXJhdGlvbixcbiAgQ29tcG9uZW50VGVtcGxhdGUgfCB1bmRlZmluZWRcbj4oKTtcbmNvbnN0IHBhcnNlZFRlbXBsYXRlQ2FjaGUgPSBuZXcgV2Vha01hcDxcbiAgdHMuQ2xhc3NEZWNsYXJhdGlvbixcbiAgQW5ndWxhclRlbXBsYXRlTm9kZVtdIHwgdW5kZWZpbmVkXG4+KCk7XG5cbi8qKlxuICogUmVzb2x2ZXMgcHVibGljLW1lbWJlciB1c2FnZSBpbiBzdGF0aWNhbGx5IGRlY2xhcmVkIEFuZ3VsYXIgdGVtcGxhdGVzLlxuICogQHBhcmFtIHNvdXJjZUZpbGUgVHlwZVNjcmlwdCBzb3VyY2UgZmlsZSBiZWluZyBpbnNwZWN0ZWQuXG4gKiBAcGFyYW0gY2hlY2tlciBUeXBlU2NyaXB0IGNoZWNrZXIgZm9yIHRoZSBwcm9qZWN0LlxuICogQHBhcmFtIG1lbWJlciBQdWJsaWMgbWVtYmVyIHdob3NlIHRlbXBsYXRlIHVzYWdlIGlzIGJlaW5nIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBXaGV0aGVyIGFuIEFuZ3VsYXIgdGVtcGxhdGUgcmVmZXJlbmNlcyB0aGUgbWVtYmVyLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHVzZWQgPSBhbmd1bGFyVGVtcGxhdGVVc2FnZUFkYXB0ZXIoc291cmNlRmlsZSwgY2hlY2tlciwgbWVtYmVyKTtcbiAqIGBgYFxuICovXG5jb25zdCBhbmd1bGFyVGVtcGxhdGVVc2FnZUFkYXB0ZXI6IE1lbWJlclVzYWdlQWRhcHRlciA9IChcbiAgc291cmNlRmlsZSxcbiAgY2hlY2tlcixcbiAgbWVtYmVyLFxuKSA9PlxuICBzb3VyY2VGaWxlLnN0YXRlbWVudHMuc29tZSgoc3RhdGVtZW50KSA9PiB7XG4gICAgaWYgKCF0cy5pc0NsYXNzRGVjbGFyYXRpb24oc3RhdGVtZW50KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHRlbXBsYXRlID0gZ2V0Q29tcG9uZW50VGVtcGxhdGUoc3RhdGVtZW50LCBzb3VyY2VGaWxlLCBjaGVja2VyKTtcbiAgICBjb25zdCBjb21wb25lbnRTeW1ib2wgPVxuICAgICAgc3RhdGVtZW50Lm5hbWUgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihzdGF0ZW1lbnQubmFtZSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgdGVtcGxhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgY29tcG9uZW50U3ltYm9sICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRlbXBsYXRlVXNlc01lbWJlcih0ZW1wbGF0ZSwgc3RhdGVtZW50LCBjb21wb25lbnRTeW1ib2wsIGNoZWNrZXIsIG1lbWJlcilcbiAgICApO1xuICB9KTtcblxuY29uc3QgZ2V0Q29tcG9uZW50VGVtcGxhdGUgPSAoXG4gIGRlY2xhcmF0aW9uOiB0cy5DbGFzc0RlY2xhcmF0aW9uLFxuICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLFxuICBjaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbik6IENvbXBvbmVudFRlbXBsYXRlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKGNvbXBvbmVudFRlbXBsYXRlQ2FjaGUuaGFzKGRlY2xhcmF0aW9uKSkge1xuICAgIHJldHVybiBjb21wb25lbnRUZW1wbGF0ZUNhY2hlLmdldChkZWNsYXJhdGlvbik7XG4gIH1cblxuICBjb25zdCBkZWNvcmF0b3JzID0gdHMuY2FuSGF2ZURlY29yYXRvcnMoZGVjbGFyYXRpb24pXG4gICAgPyAodHMuZ2V0RGVjb3JhdG9ycyhkZWNsYXJhdGlvbikgPz8gW10pXG4gICAgOiBbXTtcblxuICBmb3IgKGNvbnN0IGRlY29yYXRvciBvZiBkZWNvcmF0b3JzKSB7XG4gICAgaWYgKFxuICAgICAgIXRzLmlzQ2FsbEV4cHJlc3Npb24oZGVjb3JhdG9yLmV4cHJlc3Npb24pIHx8XG4gICAgICAhdHMuaXNJZGVudGlmaWVyKGRlY29yYXRvci5leHByZXNzaW9uLmV4cHJlc3Npb24pIHx8XG4gICAgICAhaXNBbmd1bGFyQ29tcG9uZW50SW1wb3J0KGRlY29yYXRvci5leHByZXNzaW9uLmV4cHJlc3Npb24sIGNoZWNrZXIpXG4gICAgKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBbbWV0YWRhdGFdID0gZGVjb3JhdG9yLmV4cHJlc3Npb24uYXJndW1lbnRzO1xuICAgIGlmIChtZXRhZGF0YSA9PT0gdW5kZWZpbmVkIHx8ICF0cy5pc09iamVjdExpdGVyYWxFeHByZXNzaW9uKG1ldGFkYXRhKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBtZXRhZGF0YS5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoXG4gICAgICAgICF0cy5pc1Byb3BlcnR5QXNzaWdubWVudChwcm9wZXJ0eSkgfHxcbiAgICAgICAgKCF0cy5pc0lkZW50aWZpZXIocHJvcGVydHkubmFtZSkgJiZcbiAgICAgICAgICAhdHMuaXNTdHJpbmdMaXRlcmFsTGlrZShwcm9wZXJ0eS5uYW1lKSlcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwcm9wZXJ0eS5uYW1lLnRleHQgPT09IFwidGVtcGxhdGVcIiAmJlxuICAgICAgICB0cy5pc1N0cmluZ0xpdGVyYWxMaWtlKHByb3BlcnR5LmluaXRpYWxpemVyKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0ge1xuICAgICAgICAgIGNvbnRlbnQ6IHByb3BlcnR5LmluaXRpYWxpemVyLnRleHQsXG4gICAgICAgICAgZmlsZVBhdGg6IHNvdXJjZUZpbGUuZmlsZU5hbWUsXG4gICAgICAgIH07XG4gICAgICAgIGNvbXBvbmVudFRlbXBsYXRlQ2FjaGUuc2V0KGRlY2xhcmF0aW9uLCB0ZW1wbGF0ZSk7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBwcm9wZXJ0eS5uYW1lLnRleHQgPT09IFwidGVtcGxhdGVVcmxcIiAmJlxuICAgICAgICB0cy5pc1N0cmluZ0xpdGVyYWxMaWtlKHByb3BlcnR5LmluaXRpYWxpemVyKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKFxuICAgICAgICAgIHBhdGguZGlybmFtZShzb3VyY2VGaWxlLmZpbGVOYW1lKSxcbiAgICAgICAgICBwcm9wZXJ0eS5pbml0aWFsaXplci50ZXh0LFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHJlYWRUZW1wbGF0ZUZpbGUoZmlsZVBhdGgpO1xuICAgICAgICBjb21wb25lbnRUZW1wbGF0ZUNhY2hlLnNldChkZWNsYXJhdGlvbiwgdGVtcGxhdGUpO1xuICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50VGVtcGxhdGVDYWNoZS5zZXQoZGVjbGFyYXRpb24sIHVuZGVmaW5lZCk7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBpc0FuZ3VsYXJDb21wb25lbnRJbXBvcnQgPSAoXG4gIGlkZW50aWZpZXI6IHRzLklkZW50aWZpZXIsXG4gIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLFxuKTogYm9vbGVhbiA9PlxuICBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oaWRlbnRpZmllcik/LmRlY2xhcmF0aW9ucz8uc29tZSgoZGVjbGFyYXRpb24pID0+IHtcbiAgICBpZiAoIXRzLmlzSW1wb3J0U3BlY2lmaWVyKGRlY2xhcmF0aW9uKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGltcG9ydENsYXVzZSA9IGRlY2xhcmF0aW9uLnBhcmVudC5wYXJlbnQ7XG4gICAgaWYgKCF0cy5pc0ltcG9ydENsYXVzZShpbXBvcnRDbGF1c2UpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgaW1wb3J0RGVjbGFyYXRpb24gPSBpbXBvcnRDbGF1c2UucGFyZW50O1xuICAgIHJldHVybiAoXG4gICAgICB0cy5pc0ltcG9ydERlY2xhcmF0aW9uKGltcG9ydERlY2xhcmF0aW9uKSAmJlxuICAgICAgdHMuaXNTdHJpbmdMaXRlcmFsKGltcG9ydERlY2xhcmF0aW9uLm1vZHVsZVNwZWNpZmllcikgJiZcbiAgICAgIGltcG9ydERlY2xhcmF0aW9uLm1vZHVsZVNwZWNpZmllci50ZXh0ID09PSBcIkBhbmd1bGFyL2NvcmVcIiAmJlxuICAgICAgKGRlY2xhcmF0aW9uLnByb3BlcnR5TmFtZT8udGV4dCA/PyBkZWNsYXJhdGlvbi5uYW1lLnRleHQpID09PSBcIkNvbXBvbmVudFwiXG4gICAgKTtcbiAgfSkgPz8gZmFsc2U7XG5cbmNvbnN0IHJlYWRUZW1wbGF0ZUZpbGUgPSAoZmlsZVBhdGg6IHN0cmluZyk6IENvbXBvbmVudFRlbXBsYXRlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFleGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiB7IGNvbnRlbnQ6IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgXCJ1dGY4XCIpLCBmaWxlUGF0aCB9O1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59O1xuXG5jb25zdCB0ZW1wbGF0ZVVzZXNNZW1iZXIgPSAoXG4gIHRlbXBsYXRlOiBDb21wb25lbnRUZW1wbGF0ZSxcbiAgY29tcG9uZW50OiB0cy5DbGFzc0RlY2xhcmF0aW9uLFxuICBjb21wb25lbnRTeW1ib2w6IHRzLlN5bWJvbCxcbiAgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gIG1lbWJlcjogUHVibGljTWVtYmVyLFxuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IG5vZGVzID0gZ2V0UGFyc2VkVGVtcGxhdGVOb2Rlcyh0ZW1wbGF0ZSwgY29tcG9uZW50KTtcbiAgaWYgKG5vZGVzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB1c2FnZTogVGVtcGxhdGVVc2FnZUNvbnRleHQgPSB7XG4gICAgY2hlY2tlcixcbiAgICBjb21wb25lbnQsXG4gICAgY29tcG9uZW50U3ltYm9sLFxuICAgIG1lbWJlcixcbiAgfTtcbiAgcmV0dXJuIHRlbXBsYXRlTm9kZXNVc2VNZW1iZXIobm9kZXMsIG5ldyBNYXAoKSwgdXNhZ2UpO1xufTtcblxuY29uc3QgZ2V0UGFyc2VkVGVtcGxhdGVOb2RlcyA9IChcbiAgdGVtcGxhdGU6IENvbXBvbmVudFRlbXBsYXRlLFxuICBjb21wb25lbnQ6IHRzLkNsYXNzRGVjbGFyYXRpb24sXG4pOiBBbmd1bGFyVGVtcGxhdGVOb2RlW10gfCB1bmRlZmluZWQgPT4ge1xuICBpZiAocGFyc2VkVGVtcGxhdGVDYWNoZS5oYXMoY29tcG9uZW50KSkge1xuICAgIHJldHVybiBwYXJzZWRUZW1wbGF0ZUNhY2hlLmdldChjb21wb25lbnQpO1xuICB9XG5cbiAgY29uc3QgcGFyc2VkID0gYW5ndWxhci5wYXJzZVRlbXBsYXRlKHRlbXBsYXRlLmNvbnRlbnQsIHRlbXBsYXRlLmZpbGVQYXRoLCB7XG4gICAgZW5hYmxlQmxvY2tTeW50YXg6IHRydWUsXG4gICAgZW5hYmxlTGV0U3ludGF4OiB0cnVlLFxuICB9KTtcbiAgY29uc3Qgbm9kZXMgPSBwYXJzZWQuZXJyb3JzID09PSBudWxsID8gcGFyc2VkLm5vZGVzIDogdW5kZWZpbmVkO1xuICBwYXJzZWRUZW1wbGF0ZUNhY2hlLnNldChjb21wb25lbnQsIG5vZGVzKTtcbiAgcmV0dXJuIG5vZGVzO1xufTtcblxuZXhwb3J0IHsgYW5ndWxhclRlbXBsYXRlVXNhZ2VBZGFwdGVyIH07XG4iXX0=
@@ -0,0 +1,12 @@
1
+ import type { Rule } from "eslint";
2
+ /** Plugin namespace used by Angular-specific ESLint configuration. */
3
+ declare const codeperfectAngularPlugin: {
4
+ meta: {
5
+ name: string;
6
+ };
7
+ rules: {
8
+ "no-unused-public-members": Rule.RuleModule;
9
+ };
10
+ };
11
+ export { codeperfectAngularPlugin };
12
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/adapters/angular/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,IAAI,EAAE,MAAM,QAAQ,CAAC;AAc3C,sEAAsE;AACtE,QAAA,MAAM,wBAAwB;;;;;;;CAG2B,CAAC;AAE1D,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { createNoUnusedPublicMembersListener, noUnusedPublicMembersRule, } from "../../domain/architecture/no-unused-public-members/rule.js";
2
+ import { angularTemplateUsageAdapter } from "./no-unused-public-members-template-adapter.js";
3
+ /** Rule variant that includes the opt-in Angular template usage adapter. */
4
+ const angularNoUnusedPublicMembersRule = {
5
+ ...noUnusedPublicMembersRule,
6
+ create: createNoUnusedPublicMembersListener([angularTemplateUsageAdapter]),
7
+ };
8
+ /** Plugin namespace used by Angular-specific ESLint configuration. */
9
+ const codeperfectAngularPlugin = {
10
+ meta: { name: "@codeperfect/eslint-plugin/angular" },
11
+ rules: { "no-unused-public-members": angularNoUnusedPublicMembersRule },
12
+ };
13
+ export { codeperfectAngularPlugin };
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FkYXB0ZXJzL2FuZ3VsYXIvcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFDTCxtQ0FBbUMsRUFDbkMseUJBQXlCLEdBQzFCLE1BQU0seURBQXlELENBQUM7QUFDakUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFMUYsNEVBQTRFO0FBQzVFLE1BQU0sZ0NBQWdDLEdBQW9CO0lBQ3hELEdBQUcseUJBQXlCO0lBQzVCLE1BQU0sRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLENBQUM7Q0FDM0UsQ0FBQztBQUVGLHNFQUFzRTtBQUN0RSxNQUFNLHdCQUF3QixHQUFHO0lBQy9CLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxvQ0FBb0MsRUFBRTtJQUNwRCxLQUFLLEVBQUUsRUFBRSwwQkFBMEIsRUFBRSxnQ0FBZ0MsRUFBRTtDQUNoQixDQUFDO0FBRTFELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMaW50ZXIsIFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5cbmltcG9ydCB7XG4gIGNyZWF0ZU5vVW51c2VkUHVibGljTWVtYmVyc0xpc3RlbmVyLFxuICBub1VudXNlZFB1YmxpY01lbWJlcnNSdWxlLFxufSBmcm9tIFwiLi4vLi4vZG9tYWluL2FyY2hpdGVjdHVyZS9uby11bnVzZWQtcHVibGljLW1lbWJlcnMvcnVsZVwiO1xuaW1wb3J0IHsgYW5ndWxhclRlbXBsYXRlVXNhZ2VBZGFwdGVyIH0gZnJvbSBcIi4vbm8tdW51c2VkLXB1YmxpYy1tZW1iZXJzLXRlbXBsYXRlLWFkYXB0ZXJcIjtcblxuLyoqIFJ1bGUgdmFyaWFudCB0aGF0IGluY2x1ZGVzIHRoZSBvcHQtaW4gQW5ndWxhciB0ZW1wbGF0ZSB1c2FnZSBhZGFwdGVyLiAqL1xuY29uc3QgYW5ndWxhck5vVW51c2VkUHVibGljTWVtYmVyc1J1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgLi4ubm9VbnVzZWRQdWJsaWNNZW1iZXJzUnVsZSxcbiAgY3JlYXRlOiBjcmVhdGVOb1VudXNlZFB1YmxpY01lbWJlcnNMaXN0ZW5lcihbYW5ndWxhclRlbXBsYXRlVXNhZ2VBZGFwdGVyXSksXG59O1xuXG4vKiogUGx1Z2luIG5hbWVzcGFjZSB1c2VkIGJ5IEFuZ3VsYXItc3BlY2lmaWMgRVNMaW50IGNvbmZpZ3VyYXRpb24uICovXG5jb25zdCBjb2RlcGVyZmVjdEFuZ3VsYXJQbHVnaW4gPSB7XG4gIG1ldGE6IHsgbmFtZTogXCJAY29kZXBlcmZlY3QvZXNsaW50LXBsdWdpbi9hbmd1bGFyXCIgfSxcbiAgcnVsZXM6IHsgXCJuby11bnVzZWQtcHVibGljLW1lbWJlcnNcIjogYW5ndWxhck5vVW51c2VkUHVibGljTWVtYmVyc1J1bGUgfSxcbn0gc2F0aXNmaWVzIE5vbk51bGxhYmxlPExpbnRlci5Db25maWdbXCJwbHVnaW5zXCJdPltzdHJpbmddO1xuXG5leHBvcnQgeyBjb2RlcGVyZmVjdEFuZ3VsYXJQbHVnaW4gfTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export { codeperfectAngularPlugin } from "./angular/index.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { codeperfectAngularPlugin } from "./angular/index.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRhcHRlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sV0FBVyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgY29kZXBlcmZlY3RBbmd1bGFyUGx1Z2luIH0gZnJvbSBcIi4vYW5ndWxhclwiO1xuIl19