@codeperfect/eslint-plugin 2.6.0 → 2.7.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 (47) hide show
  1. package/README.md +1 -0
  2. package/dist/codeperfect-eslint-plugin-1.0.0.tgz +0 -0
  3. package/dist/domain/architecture/consistent-barrel-files/index.d.ts +0 -1
  4. package/dist/domain/architecture/consistent-barrel-files/index.d.ts.map +1 -1
  5. package/dist/domain/architecture/consistent-barrel-files/index.js +1 -2
  6. package/dist/domain/architecture/index.d.ts +2 -1
  7. package/dist/domain/architecture/index.d.ts.map +1 -1
  8. package/dist/domain/architecture/index.js +3 -2
  9. package/dist/domain/architecture/no-import-export-extensions/index.d.ts +2 -0
  10. package/dist/domain/architecture/no-import-export-extensions/index.d.ts.map +1 -0
  11. package/dist/domain/architecture/no-import-export-extensions/index.js +2 -0
  12. package/dist/domain/architecture/no-import-export-extensions/no-import-export-extensions-rule.d.ts.map +1 -0
  13. package/dist/domain/architecture/no-import-export-extensions/no-import-export-extensions-rule.js +178 -0
  14. package/dist/domain/core/no-multiple-declarators/rule.d.ts.map +1 -1
  15. package/dist/domain/core/no-multiple-declarators/rule.js +6 -1
  16. package/dist/domain/core/no-useless-delegation/rule.d.ts.map +1 -1
  17. package/dist/domain/core/no-useless-delegation/rule.js +12 -8
  18. package/dist/domain/docs/no-interface-member-docs/rule.d.ts.map +1 -1
  19. package/dist/domain/docs/no-interface-member-docs/rule.js +6 -2
  20. package/dist/domain/docs/require-example-language/reporting.d.ts.map +1 -1
  21. package/dist/domain/docs/require-example-language/reporting.js +38 -3
  22. package/dist/domain/docs/require-example-language/rule.d.ts.map +1 -1
  23. package/dist/domain/docs/require-example-language/rule.js +6 -1
  24. package/dist/domain/docs/single-line-jsdoc/rule.d.ts.map +1 -1
  25. package/dist/domain/docs/single-line-jsdoc/rule.js +5 -3
  26. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.d.ts.map +1 -1
  27. package/dist/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.js +4 -2
  28. package/dist/domain/testing/aaa/index.d.ts +1 -1
  29. package/dist/domain/testing/aaa/index.d.ts.map +1 -1
  30. package/dist/domain/testing/aaa/index.js +1 -1
  31. package/dist/domain/testing/aaa/types.d.ts +7 -9
  32. package/dist/domain/testing/aaa/types.d.ts.map +1 -1
  33. package/dist/domain/testing/aaa/types.js +1 -1
  34. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.d.ts.map +1 -1
  35. package/dist/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.js +2 -18
  36. package/dist/domain/testing/enforce-aaa-structure/rule-section-reporting.d.ts.map +1 -1
  37. package/dist/domain/testing/enforce-aaa-structure/rule-section-reporting.js +49 -58
  38. package/dist/domain/testing/enforce-aaa-structure/rule.d.ts.map +1 -1
  39. package/dist/domain/testing/enforce-aaa-structure/rule.js +4 -1
  40. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule.d.ts.map +1 -1
  41. package/dist/domain/testing/no-unsafe-vitest-mock-factory-cast/rule.js +10 -4
  42. package/dist/domain/testing/prefer-vi-mocked-import/rule.d.ts.map +1 -1
  43. package/dist/domain/testing/prefer-vi-mocked-import/rule.js +10 -4
  44. package/package.json +15 -15
  45. package/dist/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.d.ts.map +0 -1
  46. package/dist/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.js +0 -134
  47. /package/dist/domain/architecture/{consistent-barrel-files → no-import-export-extensions}/no-import-export-extensions-rule.d.ts +0 -0
@@ -13,15 +13,23 @@ import { buildMissingSectionFixes } from "./missing-section-fixes.js";
13
13
  function reportBlankLineSeparators(context, analysis) {
14
14
  const firstSectionComment = analysis.sectionComments[0]?.comment;
15
15
  for (const sectionComment of getPhaseBoundaryComments(analysis)) {
16
- if (sectionComment.comment !== firstSectionComment &&
17
- !hasBlankLineBeforeComment(analysis.sourceText, sectionComment.comment)) {
18
- context.report({
19
- data: { section: sectionComment.phases.join(" & ") },
20
- fix: (fixer) => fixer.insertTextBeforeRange(getLineStartRange(analysis.sourceText, sectionComment.comment.loc.start.line), analysis.newline),
21
- messageId: "blankLineBeforeSection",
22
- node: sectionComment.comment,
23
- });
16
+ if (sectionComment.comment === firstSectionComment ||
17
+ hasBlankLineBeforeComment(analysis.sourceText, sectionComment.comment)) {
18
+ continue;
24
19
  }
20
+ const fix = (fixer) => fixer.insertTextBeforeRange(getLineStartRange(analysis.sourceText, sectionComment.comment.loc.start.line), analysis.newline);
21
+ context.report({
22
+ data: { section: sectionComment.phases.join(" & ") },
23
+ fix,
24
+ messageId: "blankLineBeforeSection",
25
+ node: sectionComment.comment,
26
+ suggest: [
27
+ {
28
+ fix,
29
+ messageId: "addBlankLineBeforeSection",
30
+ },
31
+ ],
32
+ });
25
33
  }
26
34
  }
27
35
  /**
@@ -73,27 +81,6 @@ function reportEmptySections(context, analysis) {
73
81
  }
74
82
  }
75
83
  }
76
- /**
77
- * Reports a single out-of-order section pair.
78
- * @param context ESLint rule context.
79
- * @param previous Previous section comment.
80
- * @param current Current section comment.
81
- * @example
82
- * ```typescript
83
- * reportIfOutOfOrder({ report() {} } as never, { comment: {} as never, phases: [] }, { comment: {} as never, phases: [] });
84
- * ```
85
- */
86
- function reportIfOutOfOrder(context, previous, current) {
87
- const maxPreviousOrder = Math.max(...previous.phases.map((phase) => aaaPhaseOrder[phase]));
88
- const minCurrentOrder = Math.min(...current.phases.map((phase) => aaaPhaseOrder[phase]));
89
- if (minCurrentOrder <= maxPreviousOrder) {
90
- context.report({
91
- data: { section: current.phases.join(" & ") },
92
- messageId: "outOfOrderSection",
93
- node: current.comment,
94
- });
95
- }
96
- }
97
84
  /**
98
85
  * Reports any AAA section markers that are missing from a supported test block.
99
86
  * @param context ESLint rule context.
@@ -111,13 +98,17 @@ function reportMissingSections(context, analysis) {
111
98
  if (missingSections.length === 0) {
112
99
  return;
113
100
  }
101
+ const fix = analysis.bodyLineCount >= 3
102
+ ? (fixer) => buildMissingSectionFixes(analysis, missingSections, fixer)
103
+ : void 0;
114
104
  context.report({
115
105
  data: { sections: missingSections.join(", ") },
116
- fix: analysis.bodyLineCount >= 3
117
- ? (fixer) => buildMissingSectionFixes(analysis, missingSections, fixer)
118
- : void 0,
106
+ ...(fix !== void 0 && { fix }),
119
107
  messageId: "missingSections",
120
108
  node: analysis.callExpression,
109
+ ...(fix !== void 0 && {
110
+ suggest: [{ fix, messageId: "addMissingSections" }],
111
+ }),
121
112
  });
122
113
  }
123
114
  /**
@@ -130,31 +121,23 @@ function reportMissingSections(context, analysis) {
130
121
  * ```
131
122
  */
132
123
  function reportOutOfOrderSections(context, analysis) {
133
- const comments = analysis.sectionComments;
134
- const lastIndex = comments.length - 1;
135
- for (let index = 0; index < lastIndex; index += 1) {
136
- const previous = comments[index];
137
- const current = comments[index + 1];
138
- if (previous && current)
139
- reportIfOutOfOrder(context, previous, current);
124
+ for (let index = 0; index < analysis.sectionComments.length - 1; index += 1) {
125
+ const previous = analysis.sectionComments[index];
126
+ const current = analysis.sectionComments[index + 1];
127
+ if (previous === void 0 || current === void 0) {
128
+ continue;
129
+ }
130
+ const maxPreviousOrder = Math.max(...previous.phases.map((phase) => aaaPhaseOrder[phase]));
131
+ const minCurrentOrder = Math.min(...current.phases.map((phase) => aaaPhaseOrder[phase]));
132
+ if (minCurrentOrder <= maxPreviousOrder) {
133
+ context.report({
134
+ data: { section: current.phases.join(" & ") },
135
+ messageId: "outOfOrderSection",
136
+ node: current.comment,
137
+ });
138
+ }
140
139
  }
141
140
  }
142
- /**
143
- * Reports a duplicate or out-of-order AAA section comment.
144
- * @param input Composite reporting input for the current section.
145
- * @example
146
- * ```typescript
147
- * reportSectionIssue({ context: {} as Rule.RuleContext, messageId: "duplicateSection", section: {} as never });
148
- * ```
149
- */
150
- const reportSectionIssue = (input) => {
151
- const { context, messageId, section } = input;
152
- context.report({
153
- data: { section: section.phase },
154
- messageId,
155
- node: section.comment,
156
- });
157
- };
158
141
  /**
159
142
  * Tracks the current AAA ordering state for one flattened section.
160
143
  * @param input Composite ordering state for the current section.
@@ -167,15 +150,23 @@ const reportSectionIssue = (input) => {
167
150
  const updateSectionOrder = (input) => {
168
151
  const { context, lastPhaseOrder, section, seenPhases } = input;
169
152
  if (seenPhases.has(section.phase)) {
170
- reportSectionIssue({ context, messageId: "duplicateSection", section });
153
+ context.report({
154
+ data: { section: section.phase },
155
+ messageId: "duplicateSection",
156
+ node: section.comment,
157
+ });
171
158
  return lastPhaseOrder;
172
159
  }
173
160
  const currentPhaseOrder = aaaPhaseOrder[section.phase];
174
161
  if (currentPhaseOrder < lastPhaseOrder) {
175
- reportSectionIssue({ context, messageId: "invalidOrder", section });
162
+ context.report({
163
+ data: { section: section.phase },
164
+ messageId: "invalidOrder",
165
+ node: section.comment,
166
+ });
176
167
  }
177
168
  seenPhases.add(section.phase);
178
169
  return Math.max(lastPhaseOrder, currentPhaseOrder);
179
170
  };
180
171
  export { reportBlankLineSeparators, reportCodeBeforeArrange, reportEmptySections, reportMissingSections, reportOutOfOrderSections, updateSectionOrder, };
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS1zZWN0aW9uLXJlcG9ydGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9lbmZvcmNlLWFhYS1zdHJ1Y3R1cmUvcnVsZS1zZWN0aW9uLXJlcG9ydGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQ0wsYUFBYSxFQUNiLGlCQUFpQixFQUNqQix3QkFBd0IsR0FDekIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQW1DbkU7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLHlCQUF5QixDQUNoQyxPQUF5QixFQUN6QixRQUEyQjtJQUUzQixNQUFNLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBRWpFLEtBQUssTUFBTSxjQUFjLElBQUksd0JBQXdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNoRSxJQUNFLGNBQWMsQ0FBQyxPQUFPLEtBQUssbUJBQW1CO1lBQzlDLENBQUMseUJBQXlCLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQ3ZFLENBQUM7WUFDRCxPQUFPLENBQUMsTUFBTSxDQUFDO2dCQUNiLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDcEQsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDYixLQUFLLENBQUMscUJBQXFCLENBQ3pCLGlCQUFpQixDQUNmLFFBQVEsQ0FBQyxVQUFVLEVBQ25CLGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ3RDLEVBQ0QsUUFBUSxDQUFD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UUFDVCxJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU87S0FDdEIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBOEIsRUFBVSxFQUFFO0lBQ3BFLE1BQU0sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFL0QsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xDLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxNQUFNLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkQsSUFBSSxpQkFBaUIsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUN2QyxrQkFBa0IsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUM7QUFHRixPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2QixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN4QixrQkFBa0IsR0FDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHR5cGUgeyBnZXRGbGF0dGVuZWRTZWN0aW9ucyB9IGZyb20gXCIuLi9hYWEvYW5hbHl6ZXIuYW5hbHlzaXMuaGVscGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBTZWN0aW9uQ29tbWVudCwgVGVzdEJsb2NrQW5hbHlzaXMgfSBmcm9tIFwiLi4vYWFhL3R5cGVzXCI7XG5cbmltcG9ydCB7XG4gIGFhYVBoYXNlT3JkZXIsXG4gIGdldExpbmVTdGFydFJhbmdlLFxuICBnZXRQaGFzZUJvdW5kYXJ5Q29tbWVudHMsXG59IGZyb20gXCIuLi9hYWEvYW5hbHl6ZXIuYW5hbHlzaXMuaGVscGVyc1wiO1xuaW1wb3J0IHsgaGFzQmxhbmtMaW5lQmVmb3JlQ29tbWVudCB9IGZyb20gXCIuLi9hYWEvYW5hbHl6ZXIuY2xhc3NpZmljYXRpb24uaGVscGVyc1wiO1xuaW1wb3J0IHsgYnVpbGRNaXNzaW5nU2VjdGlvbkZpeGVzIH0gZnJvbSBcIi4vbWlzc2luZy1zZWN0aW9uLWZpeGVzXCI7XG5cbi8qKiBGbGF0dGVuZWQgc2VjdGlvbiBlbnRyeSBlbWl0dGVkIGJ5IHRoZSBBQUEgYW5hbHl6ZXIgaGVscGVyLiAqL1xudHlwZSBGbGF0dGVuZWRTZWN0aW9uID0gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RmxhdHRlbmVkU2VjdGlvbnM+W251bWJlcl07XG5cbi8qKiBVbmlvbiBvZiB2YWxpZCBBQUEgcGhhc2UgbGFiZWxzIGVtaXR0ZWQgZm9yIGZsYXR0ZW5lZCBzZWN0aW9ucy4gKi9cbnR5cGUgRmxhdHRlbmVkU2VjdGlvblBoYXNlID0gRmxhdHRlbmVkU2VjdGlvbltcInBoYXNlXCJdO1xuXG4vKiogQ29tcG9zaXRlIGlucHV0IGZvciByZXBvcnRpbmcgb25lIEFBQSBzZWN0aW9uIGlzc3VlLiAqL1xuaW50ZXJmYWNlIFJlcG9ydFNlY3Rpb25Jc3N1ZUlucHV0IHtcbiAgLyoqIEFjdGl2ZSBFU0xpbnQgcnVsZSBjb250ZXh0LiAqL1xuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0O1xuXG4gIC8qKiBNZXNzYWdlIGlkZW50aWZpZXIgdG8gcmVwb3J0IGZvciB0aGUgc2VjdGlvbi4gKi9cbiAgbWVzc2FnZUlkOiBcImR1cGxpY2F0ZVNlY3Rpb25cIiB8IFwiaW52YWxpZE9yZGVyXCI7XG5cbiAgLyoqIFNlY3Rpb24gY29tbWVudCBhbmQgcGhhc2UgbWV0YWRhdGEgdW5kZXIgaW5zcGVjdGlvbi4gKi9cbiAgc2VjdGlvbjogRmxhdHRlbmVkU2VjdGlvbjtcbn1cblxuLyoqIENvbXBvc2l0ZSBpbnB1dCBmb3IgYWR2YW5jaW5nIHRoZSBBQUEgc2VjdGlvbiBvcmRlcmluZyBzdGF0ZS4gKi9cbmludGVyZmFjZSBVcGRhdGVTZWN0aW9uT3JkZXJJbnB1dCB7XG4gIC8qKiBBY3RpdmUgRVNMaW50IHJ1bGUgY29udGV4dC4gKi9cbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dDtcblxuICAvKiogSGlnaGVzdCBwaGFzZSBvcmRlciBzZWVuIHNvIGZhci4gKi9cbiAgbGFzdFBoYXNlT3JkZXI6IG51bWJlcjtcblxuICAvKiogU2VjdGlvbiBjb21tZW50IGFuZCBwaGFzZSBtZXRhZGF0YSB1bmRlciBpbnNwZWN0aW9uLiAqL1xuICBzZWN0aW9uOiBGbGF0dGVuZWRTZWN0aW9uO1xuXG4gIC8qKiBTZXQgb2YgcGhhc2VzIGFscmVhZHkgc2VlbiBpbiB0aGUgY3VycmVudCB0ZXN0IGJsb2NrLiAqL1xuICBzZWVuUGhhc2VzOiBTZXQ8RmxhdHRlbmVkU2VjdGlvblBoYXNlPjtcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHNlY3Rpb24gY29tbWVudHMgdGhhdCBhcmUgbWlzc2luZyBhIGJsYW5rIGxpbmUgYWJvdmUgdGhlbS5cbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXG4gKiBAcGFyYW0gYW5hbHlzaXMgUGFyc2VkIHRlc3QtYmxvY2sgYW5hbHlzaXMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcmVwb3J0QmxhbmtMaW5lU2VwYXJhdG9ycyh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgc2VjdGlvbkNvbW1lbnRzOiBbXSwgc291cmNlVGV4dDogXCJcIiB9IGFzIG5ldmVyKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiByZXBvcnRCbGFua0xpbmVTZXBhcmF0b3JzKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBhbmFseXNpczogVGVzdEJsb2NrQW5hbHlzaXMsXG4pOiB2b2lkIHtcbiAgY29uc3QgZmlyc3RTZWN0aW9uQ29tbWVudCA9IGFuYWx5c2lzLnNlY3Rpb25Db21tZW50c1swXT8uY29tbWVudDtcblxuICBmb3IgKGNvbnN0IHNlY3Rpb25Db21tZW50IG9mIGdldFBoYXNlQm91bmRhcnlDb21tZW50cyhhbmFseXNpcykpIHtcbiAgICBpZiAoXG4gICAgICBzZWN0aW9uQ29tbWVudC5jb21tZW50ICE9PSBmaXJzdFNlY3Rpb25Db21tZW50ICYmXG4gICAgICAhaGFzQmxhbmtMaW5lQmVmb3JlQ29tbWVudChhbmFseXNpcy5zb3VyY2VUZXh0LCBzZWN0aW9uQ29tbWVudC5jb21tZW50KVxuICAgICkge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBkYXRhOiB7IHNlY3Rpb246IHNlY3Rpb25Db21tZW50LnBoYXNlcy5qb2luKFwiICYgXCIpIH0sXG4gICAgICAgIGZpeDogKGZpeGVyKSA9PlxuICAgICAgICAgIGZpeGVyLmluc2VydFRleHRCZWZvcmVSYW5nZShcbiAgICAgICAgICAgIGdldExpbmVTdGFydFJhbmdlKFxuICAgICAgICAgICAgICBhbmFseXNpcy5zb3VyY2VUZXh0LFxuICAgICAgICAgICAgICBzZWN0aW9uQ29tbWVudC5jb21tZW50LmxvYy5zdGFydC5saW5lLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGFuYWx5c2lzLm5ld2xpbmUsXG4gICAgICAgICAgKSxcbiAgICAgICAgbWVzc2FnZUlkOiBcImJsYW5rTGluZUJlZm9yZVNlY3Rpb25cIixcbiAgICAgICAgbm9kZTogc2VjdGlvbkNvbW1lbnQuY29tbWVudCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgZXhlY3V0YWJsZSBzdGF0ZW1lbnRzIHRoYXQgYXBwZWFyIGJlZm9yZSB0aGUgZmlyc3QgQXJyYW5nZSBzZWN0aW9uLlxuICogQHBhcmFtIGNvbnRleHQgRVNMaW50IHJ1bGUgY29udGV4dC5cbiAqIEBwYXJhbSBhbmFseXNpcyBQYXJzZWQgdGVzdC1ibG9jayBhbmFseXNpcy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiByZXBvcnRDb2RlQmVmb3JlQXJyYW5nZSh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgc2VjdGlvbkNvbW1lbnRzOiBbXSwgc3RhdGVtZW50czogW10gfSBhcyBuZXZlcik7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gcmVwb3J0Q29kZUJlZm9yZUFycmFuZ2UoXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcyxcbik6IHZvaWQge1xuICBjb25zdCBmaXJzdEFycmFuZ2VMaW5lID0gYW5hbHlzaXMuc2VjdGlvbkNvbW1lbnRzLmZpbmQoKHNlY3Rpb25Db21tZW50KSA9PlxuICAgIHNlY3Rpb25Db21tZW50LnBoYXNlcy5pbmNsdWRlcyhcIkFycmFuZ2VcIiksXG4gICk/LmNvbW1lbnQubG9jLnN0YXJ0LmxpbmU7XG4gIGlmIChmaXJzdEFycmFuZ2VMaW5lID09PSB2b2lkIDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzdGF0ZW1lbnRCZWZvcmVBcnJhbmdlID0gYW5hbHlzaXMuc3RhdGVtZW50cy5maW5kKFxuICAgIChzdGF0ZW1lbnQpID0+IHN0YXRlbWVudC5ub2RlLmxvYy5zdGFydC5saW5lIDwgZmlyc3RBcnJhbmdlTGluZSxcbiAgKTtcbiAgaWYgKHN0YXRlbWVudEJlZm9yZUFycmFuZ2UgPT09IHZvaWQgMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnRleHQucmVwb3J0KHtcbiAgICBtZXNzYWdlSWQ6IFwiY29kZUJlZm9yZUFycmFuZ2VcIixcbiAgICBub2RlOiBzdGF0ZW1lbnRCZWZvcmVBcnJhbmdlLm5vZGUsXG4gIH0pO1xufVxuXG4vKipcbiAqIFJlcG9ydHMgc2VjdGlvbnMgdGhhdCBjb250YWluIG9ubHkgY29tbWVudHMgb3Igd2hpdGVzcGFjZS5cbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXG4gKiBAcGFyYW0gYW5hbHlzaXMgUGFyc2VkIHRlc3QtYmxvY2sgYW5hbHlzaXMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcmVwb3J0RW1wdHlTZWN0aW9ucyh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgc2VjdGlvbkNvbW1lbnRzOiBbXSwgc3RhdGVtZW50czogW10gfSBhcyBuZXZlcik7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gcmVwb3J0RW1wdHlTZWN0aW9ucyhcbiAgY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCxcbiAgYW5hbHlzaXM6IFRlc3RCbG9ja0FuYWx5c2lzLFxuKTogdm9pZCB7XG4gIGZvciAoY29uc3QgW2luZGV4LCBzZWN0aW9uQ29tbWVudF0gb2YgYW5hbHlzaXMuc2VjdGlvbkNvbW1lbnRzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IG5leHRTZWN0aW9uTGluZSA9XG4gICAgICBhbmFseXNpcy5zZWN0aW9uQ29tbWVudHNbaW5kZXggKyAxXT8uY29tbWVudC5sb2Muc3RhcnQubGluZTtcbiAgICBjb25zdCBoYXNDb2RlSW5TZWN0aW9uID0gYW5hbHlzaXMuc3RhdGVtZW50cy5zb21lKChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudExpbmUgPSBzdGF0ZW1lbnQubm9kZS5sb2Muc3RhcnQubGluZTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgc3RhdGVtZW50TGluZSA+IHNlY3Rpb25Db21tZW50LmNvbW1lbnQubG9jLnN0YXJ0LmxpbmUgJiZcbiAgICAgICAgKG5leHRTZWN0aW9uTGluZSA9PT0gdm9pZCAwIHx8IHN0YXRlbWVudExpbmUgPCBuZXh0U2VjdGlvbkxpbmUpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaWYgKCFoYXNDb2RlSW5TZWN0aW9uKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgIGRhdGE6IHsgc2VjdGlvbjogc2VjdGlvbkNvbW1lbnQucGhhc2VzLmpvaW4oXCIgJiBcIikgfSxcbiAgICAgICAgbWVzc2FnZUlkOiBcImVtcHR5U2VjdGlvblwiLFxuICAgICAgICBub2RlOiBzZWN0aW9uQ29tbWVudC5jb21tZW50LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwb3J0cyBhIHNpbmdsZSBvdXQtb2Ytb3JkZXIgc2VjdGlvbiBwYWlyLlxuICogQHBhcmFtIGNvbnRleHQgRVNMaW50IHJ1bGUgY29udGV4dC5cbiAqIEBwYXJhbSBwcmV2aW91cyBQcmV2aW91cyBzZWN0aW9uIGNvbW1lbnQuXG4gKiBAcGFyYW0gY3VycmVudCBDdXJyZW50IHNlY3Rpb24gY29tbWVudC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiByZXBvcnRJZk91dE9mT3JkZXIoeyByZXBvcnQoKSB7fSB9IGFzIG5ldmVyLCB7IGNvbW1lbnQ6IHt9IGFzIG5ldmVyLCBwaGFzZXM6IFtdIH0sIHsgY29tbWVudDoge30gYXMgbmV2ZXIsIHBoYXNlczogW10gfSk7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gcmVwb3J0SWZPdXRPZk9yZGVyKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBwcmV2aW91czogU2VjdGlvbkNvbW1lbnQsXG4gIGN1cnJlbnQ6IFNlY3Rpb25Db21tZW50LFxuKTogdm9pZCB7XG4gIGNvbnN0IG1heFByZXZpb3VzT3JkZXIgPSBNYXRoLm1heChcbiAgICAuLi5wcmV2aW91cy5waGFzZXMubWFwKChwaGFzZSkgPT4gYWFhUGhhc2VPcmRlcltwaGFzZV0pLFxuICApO1xuICBjb25zdCBtaW5DdXJyZW50T3JkZXIgPSBNYXRoLm1pbihcbiAgICAuLi5jdXJyZW50LnBoYXNlcy5tYXAoKHBoYXNlKSA9PiBhYWFQaGFzZU9yZGVyW3BoYXNlXSksXG4gICk7XG5cbiAgaWYgKG1pbkN1cnJlbnRPcmRlciA8PSBtYXhQcmV2aW91c09yZGVyKSB7XG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgZGF0YTogeyBzZWN0aW9uOiBjdXJyZW50LnBoYXNlcy5qb2luKFwiICYgXCIpIH0sXG4gICAgICBtZXNzYWdlSWQ6IFwib3V0T2ZPcmRlclNlY3Rpb25cIixcbiAgICAgIG5vZGU6IGN1cnJlbnQuY29tbWVudCxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgYW55IEFBQSBzZWN0aW9uIG1hcmtlcnMgdGhhdCBhcmUgbWlzc2luZyBmcm9tIGEgc3VwcG9ydGVkIHRlc3QgYmxvY2suXG4gKiBAcGFyYW0gY29udGV4dCBFU0xpbnQgcnVsZSBjb250ZXh0LlxuICogQHBhcmFtIGFuYWx5c2lzIFBhcnNlZCB0ZXN0LWJsb2NrIGFuYWx5c2lzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJlcG9ydE1pc3NpbmdTZWN0aW9ucyh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgc2VjdGlvbkNvbW1lbnRzOiBbXSB9IGFzIG5ldmVyKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiByZXBvcnRNaXNzaW5nU2VjdGlvbnMoXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcyxcbik6IHZvaWQge1xuICBjb25zdCBwcmVzZW50U2VjdGlvbnMgPSBuZXcgU2V0KFxuICAgIGFuYWx5c2lzLnNlY3Rpb25Db21tZW50cy5mbGF0TWFwKChzZWN0aW9uQ29tbWVudCkgPT4gc2VjdGlvbkNvbW1lbnQucGhhc2VzKSxcbiAgKTtcbiAgY29uc3QgaGFzUHJlU2VjdGlvblN0YXRlbWVudHMgPSBhbmFseXNpcy5zdGF0ZW1lbnRzLnNvbWUoXG4gICAgKHN0YXRlbWVudCkgPT4gc3RhdGVtZW50LnBoYXNlcy5sZW5ndGggPT09IDAsXG4gICk7XG4gIGNvbnN0IG1pc3NpbmdTZWN0aW9ucyA9IChbXCJBcnJhbmdlXCIsIFwiQWN0XCIsIFwiQXNzZXJ0XCJdIGFzIGNvbnN0KS5maWx0ZXIoXG4gICAgKHBoYXNlKSA9PlxuICAgICAgIXByZXNlbnRTZWN0aW9ucy5oYXMocGhhc2UpICYmXG4gICAgICAocGhhc2UgIT09IFwiQXJyYW5nZVwiIHx8IGhhc1ByZVNlY3Rpb25TdGF0ZW1lbnRzKSxcbiAgKTtcblxuICBpZiAobWlzc2luZ1NlY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnRleHQucmVwb3J0KHtcbiAgICBkYXRhOiB7IHNlY3Rpb25zOiBtaXNzaW5nU2VjdGlvbnMuam9pbihcIiwgXCIpIH0sXG4gICAgZml4OlxuICAgICAgYW5hbHlzaXMuYm9keUxpbmVDb3VudCA+PSAzXG4gICAgICAgID8gKGZpeGVyOiBSdWxlLlJ1bGVGaXhlcik6IFJ1bGUuRml4W10gPT5cbiAgICAgICAgICAgIGJ1aWxkTWlzc2luZ1NlY3Rpb25GaXhlcyhhbmFseXNpcywgbWlzc2luZ1NlY3Rpb25zLCBmaXhlcilcbiAgICAgICAgOiB2b2lkIDAsXG4gICAgbWVzc2FnZUlkOiBcIm1pc3NpbmdTZWN0aW9uc1wiLFxuICAgIG5vZGU6IGFuYWx5c2lzLmNhbGxFeHByZXNzaW9uLFxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHNlY3Rpb24gY29tbWVudHMgdGhhdCBhcHBlYXIgb3V0IG9mIGNhbm9uaWNhbCBBcnJhbmdlIC0+IEFjdCAtPiBBc3NlcnQgb3JkZXIuXG4gKiBAcGFyYW0gY29udGV4dCBFU0xpbnQgcnVsZSBjb250ZXh0LlxuICogQHBhcmFtIGFuYWx5c2lzIFBhcnNlZCB0ZXN0LWJsb2NrIGFuYWx5c2lzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJlcG9ydE91dE9mT3JkZXJTZWN0aW9ucyh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgc2VjdGlvbkNvbW1lbnRzOiBbXSB9IGFzIG5ldmVyKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiByZXBvcnRPdXRPZk9yZGVyU2VjdGlvbnMoXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcyxcbik6IHZvaWQge1xuICBjb25zdCBjb21tZW50cyA9IGFuYWx5c2lzLnNlY3Rpb25Db21tZW50cztcbiAgY29uc3QgbGFzdEluZGV4ID0gY29tbWVudHMubGVuZ3RoIC0gMTtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGFzdEluZGV4OyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgcHJldmlvdXMgPSBjb21tZW50c1tpbmRleF07XG4gICAgY29uc3QgY3VycmVudCA9IGNvbW1lbnRzW2luZGV4ICsgMV07XG5cbiAgICBpZiAocHJldmlvdXMgJiYgY3VycmVudCkgcmVwb3J0SWZPdXRPZk9yZGVyKGNvbnRleHQsIHByZXZpb3VzLCBjdXJyZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgYSBkdXBsaWNhdGUgb3Igb3V0LW9mLW9yZGVyIEFBQSBzZWN0aW9uIGNvbW1lbnQuXG4gKiBAcGFyYW0gaW5wdXQgQ29tcG9zaXRlIHJlcG9ydGluZyBpbnB1dCBmb3IgdGhlIGN1cnJlbnQgc2VjdGlvbi5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiByZXBvcnRTZWN0aW9uSXNzdWUoeyBjb250ZXh0OiB7fSBhcyBSdWxlLlJ1bGVDb250ZXh0LCBtZXNzYWdlSWQ6IFwiZHVwbGljYXRlU2VjdGlvblwiLCBzZWN0aW9uOiB7fSBhcyBuZXZlciB9KTtcbiAqIGBgYFxuICovXG5jb25zdCByZXBvcnRTZWN0aW9uSXNzdWUgPSAoaW5wdXQ6IFJlcG9ydFNlY3Rpb25Jc3N1ZUlucHV0KTogdm9pZCA9PiB7XG4gIGNvbnN0IHsgY29udGV4dCwgbWVzc2FnZUlkLCBzZWN0aW9uIH0gPSBpbnB1dDtcblxuICBjb250ZXh0LnJlcG9ydCh7XG4gICAgZGF0YTogeyBzZWN0aW9uOiBzZWN0aW9uLnBoYXNlIH0sXG4gICAgbWVzc2FnZUlkLFxuICAgIG5vZGU6IHNlY3Rpb24uY29tbWVudCxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFRyYWNrcyB0aGUgY3VycmVudCBBQUEgb3JkZXJpbmcgc3RhdGUgZm9yIG9uZSBmbGF0dGVuZWQgc2VjdGlvbi5cbiAqIEBwYXJhbSBpbnB1dCBDb21wb3NpdGUgb3JkZXJpbmcgc3RhdGUgZm9yIHRoZSBjdXJyZW50IHNlY3Rpb24uXG4gKiBAcmV0dXJucyBVcGRhdGVkIHBoYXNlIG9yZGVyIHdhdGVybWFyay5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBuZXh0T3JkZXIgPSB1cGRhdGVTZWN0aW9uT3JkZXIoeyBjb250ZXh0OiB7fSBhcyBSdWxlLlJ1bGVDb250ZXh0LCBsYXN0UGhhc2VPcmRlcjogLTEsIHNlY3Rpb246IHt9IGFzIG5ldmVyLCBzZWVuUGhhc2VzOiBuZXcgU2V0KCkgfSk7XG4gKiBgYGBcbiAqL1xuY29uc3QgdXBkYXRlU2VjdGlvbk9yZGVyID0gKGlucHV0OiBVcGRhdGVTZWN0aW9uT3JkZXJJbnB1dCk6IG51bWJlciA9PiB7XG4gIGNvbnN0IHsgY29udGV4dCwgbGFzdFBoYXNlT3JkZXIsIHNlY3Rpb24sIHNlZW5QaGFzZXMgfSA9IGlucHV0O1xuXG4gIGlmIChzZWVuUGhhc2VzLmhhcyhzZWN0aW9uLnBoYXNlKSkge1xuICAgIHJlcG9ydFNlY3Rpb25Jc3N1ZSh7IGNvbnRleHQsIG1lc3NhZ2VJZDogXCJkdXBsaWNhdGVTZWN0aW9uXCIsIHNlY3Rpb24gfSk7XG4gICAgcmV0dXJuIGxhc3RQaGFzZU9yZGVyO1xuICB9XG5cbiAgY29uc3QgY3VycmVudFBoYXNlT3JkZXIgPSBhYWFQaGFzZU9yZGVyW3NlY3Rpb24ucGhhc2VdO1xuICBpZiAoY3VycmVudFBoYXNlT3JkZXIgPCBsYXN0UGhhc2VPcmRlcikge1xuICAgIHJlcG9ydFNlY3Rpb25Jc3N1ZSh7IGNvbnRleHQsIG1lc3NhZ2VJZDogXCJpbnZhbGlkT3JkZXJcIiwgc2VjdGlvbiB9KTtcbiAgfVxuXG4gIHNlZW5QaGFzZXMuYWRkKHNlY3Rpb24ucGhhc2UpO1xuICByZXR1cm4gTWF0aC5tYXgobGFzdFBoYXNlT3JkZXIsIGN1cnJlbnRQaGFzZU9yZGVyKTtcbn07XG5cbmV4cG9ydCB0eXBlIHsgRmxhdHRlbmVkU2VjdGlvblBoYXNlIH07XG5leHBvcnQge1xuICByZXBvcnRCbGFua0xpbmVTZXBhcmF0b3JzLFxuICByZXBvcnRDb2RlQmVmb3JlQXJyYW5nZSxcbiAgcmVwb3J0RW1wdHlTZWN0aW9ucyxcbiAgcmVwb3J0TWlzc2luZ1NlY3Rpb25zLFxuICByZXBvcnRPdXRPZk9yZGVyU2VjdGlvbnMsXG4gIHVwZGF0ZVNlY3Rpb25PcmRlcixcbn07XG4iXX0=
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS1zZWN0aW9uLXJlcG9ydGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9lbmZvcmNlLWFhYS1zdHJ1Y3R1cmUvcnVsZS1zZWN0aW9uLXJlcG9ydGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQ0wsYUFBYSxFQUNiLGlCQUFpQixFQUNqQix3QkFBd0IsR0FDekIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNuRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQXVCbkU7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLHlCQUF5QixDQUNoQyxPQUF5QixFQUN6QixRQUEyQjtJQUUzQixNQUFNLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBRWpFLEtBQUssTUFBTSxjQUFjLElBQUksd0JBQXdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNoRSxJQUNFLGNBQWMsQ0FBQyxPQUFPLEtBQUssbUJBQW1CO1lBQzlDLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUN0RSxDQUFDO1lBQ0QsU0FBUztRQUNYLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQXFCLEVBQVksRUFBRSxDQUM5QyxLQUFLLENBQUMscUJBQXFCLENBQ3pCLGlCQUFpQixDQUNmLFFBQVEsQ0FBQyxVQUFVLEVBQ25CLGNBQWMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ3RDLEVBQ0QsUUFBUSxDQUFDLE9BQU8sQ0FDakIsQ0FBQztRQUVKLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDYixJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsY0FBYyxDQUFD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QUE4QixFQUFVLEVBQUU7SUFDcEUsTUFBTSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUUvRCxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNiLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFO1lBQ2hDLFNBQVMsRUFBRSxrQkFBa0I7WUFDN0IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPO1NBQ3RCLENBQUMsQ0FBQztRQUNILE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxNQUFNLGlCQUFpQixHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkQsSUFBSSxpQkFBaUIsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUN2QyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ2IsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDaEMsU0FBUyxFQUFFLGNBQWM7WUFDekIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPO1NBQ3RCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDO0FBR0YsT0FBTyxFQUNMLHlCQUF5QixFQUN6Qix1QkFBdUIsRUFDdkIsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQix3QkFBd0IsRUFDeEIsa0JBQWtCLEdBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5cbmltcG9ydCB0eXBlIHsgZ2V0RmxhdHRlbmVkU2VjdGlvbnMgfSBmcm9tIFwiLi4vYWFhL2FuYWx5emVyLmFuYWx5c2lzLmhlbHBlcnNcIjtcbmltcG9ydCB0eXBlIHsgVGVzdEJsb2NrQW5hbHlzaXMgfSBmcm9tIFwiLi4vYWFhL3R5cGVzXCI7XG5cbmltcG9ydCB7XG4gIGFhYVBoYXNlT3JkZXIsXG4gIGdldExpbmVTdGFydFJhbmdlLFxuICBnZXRQaGFzZUJvdW5kYXJ5Q29tbWVudHMsXG59IGZyb20gXCIuLi9hYWEvYW5hbHl6ZXIuYW5hbHlzaXMuaGVscGVyc1wiO1xuaW1wb3J0IHsgaGFzQmxhbmtMaW5lQmVmb3JlQ29tbWVudCB9IGZyb20gXCIuLi9hYWEvYW5hbHl6ZXIuY2xhc3NpZmljYXRpb24uaGVscGVyc1wiO1xuaW1wb3J0IHsgYnVpbGRNaXNzaW5nU2VjdGlvbkZpeGVzIH0gZnJvbSBcIi4vbWlzc2luZy1zZWN0aW9uLWZpeGVzXCI7XG5cbi8qKiBGbGF0dGVuZWQgc2VjdGlvbiBlbnRyeSBlbWl0dGVkIGJ5IHRoZSBBQUEgYW5hbHl6ZXIgaGVscGVyLiAqL1xudHlwZSBGbGF0dGVuZWRTZWN0aW9uID0gUmV0dXJuVHlwZTx0eXBlb2YgZ2V0RmxhdHRlbmVkU2VjdGlvbnM+W251bWJlcl07XG5cbi8qKiBVbmlvbiBvZiB2YWxpZCBBQUEgcGhhc2UgbGFiZWxzIGVtaXR0ZWQgZm9yIGZsYXR0ZW5lZCBzZWN0aW9ucy4gKi9cbnR5cGUgRmxhdHRlbmVkU2VjdGlvblBoYXNlID0gRmxhdHRlbmVkU2VjdGlvbltcInBoYXNlXCJdO1xuXG4vKiogQ29tcG9zaXRlIGlucHV0IGZvciBhZHZhbmNpbmcgdGhlIEFBQSBzZWN0aW9uIG9yZGVyaW5nIHN0YXRlLiAqL1xuaW50ZXJmYWNlIFVwZGF0ZVNlY3Rpb25PcmRlcklucHV0IHtcbiAgLyoqIEFjdGl2ZSBFU0xpbnQgcnVsZSBjb250ZXh0LiAqL1xuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0O1xuXG4gIC8qKiBIaWdoZXN0IHBoYXNlIG9yZGVyIHNlZW4gc28gZmFyLiAqL1xuICBsYXN0UGhhc2VPcmRlcjogbnVtYmVyO1xuXG4gIC8qKiBTZWN0aW9uIGNvbW1lbnQgYW5kIHBoYXNlIG1ldGFkYXRhIHVuZGVyIGluc3BlY3Rpb24uICovXG4gIHNlY3Rpb246IEZsYXR0ZW5lZFNlY3Rpb247XG5cbiAgLyoqIFNldCBvZiBwaGFzZXMgYWxyZWFkeSBzZWVuIGluIHRoZSBjdXJyZW50IHRlc3QgYmxvY2suICovXG4gIHNlZW5QaGFzZXM6IFNldDxGbGF0dGVuZWRTZWN0aW9uUGhhc2U+O1xufVxuXG4vKipcbiAqIFJlcG9ydHMgc2VjdGlvbiBjb21tZW50cyB0aGF0IGFyZSBtaXNzaW5nIGEgYmxhbmsgbGluZSBhYm92ZSB0aGVtLlxuICogQHBhcmFtIGNvbnRleHQgRVNMaW50IHJ1bGUgY29udGV4dC5cbiAqIEBwYXJhbSBhbmFseXNpcyBQYXJzZWQgdGVzdC1ibG9jayBhbmFseXNpcy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiByZXBvcnRCbGFua0xpbmVTZXBhcmF0b3JzKHsgcmVwb3J0KCkge30gfSBhcyBuZXZlciwgeyBzZWN0aW9uQ29tbWVudHM6IFtdLCBzb3VyY2VUZXh0OiBcIlwiIH0gYXMgbmV2ZXIpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHJlcG9ydEJsYW5rTGluZVNlcGFyYXRvcnMoXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcyxcbik6IHZvaWQge1xuICBjb25zdCBmaXJzdFNlY3Rpb25Db21tZW50ID0gYW5hbHlzaXMuc2VjdGlvbkNvbW1lbnRzWzBdPy5jb21tZW50O1xuXG4gIGZvciAoY29uc3Qgc2VjdGlvbkNvbW1lbnQgb2YgZ2V0UGhhc2VCb3VuZGFyeUNvbW1lbnRzKGFuYWx5c2lzKSkge1xuICAgIGlmIChcbiAgICAgIHNlY3Rpb25Db21tZW50LmNvbW1lbnQgPT09IGZpcnN0U2VjdGlvbkNvbW1lbnQgfHxcbiAgICAgIGhhc0JsYW5rTGluZUJlZm9yZUNvbW1lbnQoYW5hbHlzaXMuc291cmNlVGV4dCwgc2VjdGlvbkNvbW1lbnQuY29tbWVudClcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGZpeCA9IChmaXhlcjogUnVsZS5SdWxlRml4ZXIpOiBSdWxlLkZpeCA9PlxuICAgICAgZml4ZXIuaW5zZXJ0VGV4dEJlZm9yZVJhbmdlKFxuICAgICAgICBnZXRMaW5lU3RhcnRSYW5nZShcbiAgICAgICAgICBhbmFseXNpcy5zb3VyY2VUZXh0LFxuICAgICAgICAgIHNlY3Rpb25Db21tZW50LmNvbW1lbnQubG9jLnN0YXJ0LmxpbmUsXG4gICAgICAgICksXG4gICAgICAgIGFuYWx5c2lzLm5ld2xpbmUsXG4gICAgICApO1xuXG4gICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgZGF0YTogeyBzZWN0aW9uOiBzZWN0aW9uQ29tbWVudC5waGFzZXMuam9pbihcIiAmIFwiKSB9LFxuICAgICAgZml4LFxuICAgICAgbWVzc2FnZUlkOiBcImJsYW5rTGluZUJlZm9yZVNlY3Rpb25cIixcbiAgICAgIG5vZGU6IHNlY3Rpb25Db21tZW50LmNvbW1lbnQsXG4gICAgICBzdWdnZXN0OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmaXgsXG4gICAgICAgICAgbWVzc2FnZUlkOiBcImFkZEJsYW5rTGluZUJlZm9yZVNlY3Rpb25cIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXBvcnRzIGV4ZWN1dGFibGUgc3RhdGVtZW50cyB0aGF0IGFwcGVhciBiZWZvcmUgdGhlIGZpcnN0IEFycmFuZ2Ugc2VjdGlvbi5cbiAqIEBwYXJhbSBjb250ZXh0IEVTTGludCBydWxlIGNvbnRleHQuXG4gKiBAcGFyYW0gYW5hbHlzaXMgUGFyc2VkIHRlc3QtYmxvY2sgYW5hbHlzaXMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogcmVwb3J0Q29kZUJlZm9yZUFycmFuZ2UoeyByZXBvcnQoKSB7fSB9IGFzIG5ldmVyLCB7IHNlY3Rpb25Db21tZW50czogW10sIHN0YXRlbWVudHM6IFtdIH0gYXMgbmV2ZXIpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHJlcG9ydENvZGVCZWZvcmVBcnJhbmdlKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBhbmFseXNpczogVGVzdEJsb2NrQW5hbHlzaXMsXG4pOiB2b2lkIHtcbiAgY29uc3QgZmlyc3RBcnJhbmdlTGluZSA9IGFuYWx5c2lzLnNlY3Rpb25Db21tZW50cy5maW5kKChzZWN0aW9uQ29tbWVudCkgPT5cbiAgICBzZWN0aW9uQ29tbWVudC5waGFzZXMuaW5jbHVkZXMoXCJBcnJhbmdlXCIpLFxuICApPy5jb21tZW50LmxvYy5zdGFydC5saW5lO1xuICBpZiAoZmlyc3RBcnJhbmdlTGluZSA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50QmVmb3JlQXJyYW5nZSA9IGFuYWx5c2lzLnN0YXRlbWVudHMuZmluZChcbiAgICAoc3RhdGVtZW50KSA9PiBzdGF0ZW1lbnQubm9kZS5sb2Muc3RhcnQubGluZSA8IGZpcnN0QXJyYW5nZUxpbmUsXG4gICk7XG4gIGlmIChzdGF0ZW1lbnRCZWZvcmVBcnJhbmdlID09PSB2b2lkIDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb250ZXh0LnJlcG9ydCh7XG4gICAgbWVzc2FnZUlkOiBcImNvZGVCZWZvcmVBcnJhbmdlXCIsXG4gICAgbm9kZTogc3RhdGVtZW50QmVmb3JlQXJyYW5nZS5ub2RlLFxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHNlY3Rpb25zIHRoYXQgY29udGFpbiBvbmx5IGNvbW1lbnRzIG9yIHdoaXRlc3BhY2UuXG4gKiBAcGFyYW0gY29udGV4dCBFU0xpbnQgcnVsZSBjb250ZXh0LlxuICogQHBhcmFtIGFuYWx5c2lzIFBhcnNlZCB0ZXN0LWJsb2NrIGFuYWx5c2lzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJlcG9ydEVtcHR5U2VjdGlvbnMoeyByZXBvcnQoKSB7fSB9IGFzIG5ldmVyLCB7IHNlY3Rpb25Db21tZW50czogW10sIHN0YXRlbWVudHM6IFtdIH0gYXMgbmV2ZXIpO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHJlcG9ydEVtcHR5U2VjdGlvbnMoXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcyxcbik6IHZvaWQge1xuICBmb3IgKGNvbnN0IFtpbmRleCwgc2VjdGlvbkNvbW1lbnRdIG9mIGFuYWx5c2lzLnNlY3Rpb25Db21tZW50cy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBuZXh0U2VjdGlvbkxpbmUgPVxuICAgICAgYW5hbHlzaXMuc2VjdGlvbkNvbW1lbnRzW2luZGV4ICsgMV0/LmNvbW1lbnQubG9jLnN0YXJ0LmxpbmU7XG4gICAgY29uc3QgaGFzQ29kZUluU2VjdGlvbiA9IGFuYWx5c2lzLnN0YXRlbWVudHMuc29tZSgoc3RhdGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRMaW5lID0gc3RhdGVtZW50Lm5vZGUubG9jLnN0YXJ0LmxpbmU7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIHN0YXRlbWVudExpbmUgPiBzZWN0aW9uQ29tbWVudC5jb21tZW50LmxvYy5zdGFydC5saW5lICYmXG4gICAgICAgIChuZXh0U2VjdGlvbkxpbmUgPT09IHZvaWQgMCB8fCBzdGF0ZW1lbnRMaW5lIDwgbmV4dFNlY3Rpb25MaW5lKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGlmICghaGFzQ29kZUluU2VjdGlvbikge1xuICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICBkYXRhOiB7IHNlY3Rpb246IHNlY3Rpb25Db21tZW50LnBoYXNlcy5qb2luKFwiICYgXCIpIH0sXG4gICAgICAgIG1lc3NhZ2VJZDogXCJlbXB0eVNlY3Rpb25cIixcbiAgICAgICAgbm9kZTogc2VjdGlvbkNvbW1lbnQuY29tbWVudCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgYW55IEFBQSBzZWN0aW9uIG1hcmtlcnMgdGhhdCBhcmUgbWlzc2luZyBmcm9tIGEgc3VwcG9ydGVkIHRlc3QgYmxvY2suXG4gKiBAcGFyYW0gY29udGV4dCBFU0xpbnQgcnVsZSBjb250ZXh0LlxuICogQHBhcmFtIGFuYWx5c2lzIFBhcnNlZCB0ZXN0LWJsb2NrIGFuYWx5c2lzLlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHJlcG9ydE1pc3NpbmdTZWN0aW9ucyh7IHJlcG9ydCgpIHt9IH0gYXMgbmV2ZXIsIHsgc2VjdGlvbkNvbW1lbnRzOiBbXSB9IGFzIG5ldmVyKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiByZXBvcnRNaXNzaW5nU2VjdGlvbnMoXG4gIGNvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQsXG4gIGFuYWx5c2lzOiBUZXN0QmxvY2tBbmFseXNpcyxcbik6IHZvaWQge1xuICBjb25zdCBwcmVzZW50U2VjdGlvbnMgPSBuZXcgU2V0KFxuICAgIGFuYWx5c2lzLnNlY3Rpb25Db21tZW50cy5mbGF0TWFwKChzZWN0aW9uQ29tbWVudCkgPT4gc2VjdGlvbkNvbW1lbnQucGhhc2VzKSxcbiAgKTtcbiAgY29uc3QgaGFzUHJlU2VjdGlvblN0YXRlbWVudHMgPSBhbmFseXNpcy5zdGF0ZW1lbnRzLnNvbWUoXG4gICAgKHN0YXRlbWVudCkgPT4gc3RhdGVtZW50LnBoYXNlcy5sZW5ndGggPT09IDAsXG4gICk7XG4gIGNvbnN0IG1pc3NpbmdTZWN0aW9ucyA9IChbXCJBcnJhbmdlXCIsIFwiQWN0XCIsIFwiQXNzZXJ0XCJdIGFzIGNvbnN0KS5maWx0ZXIoXG4gICAgKHBoYXNlKSA9PlxuICAgICAgIXByZXNlbnRTZWN0aW9ucy5oYXMocGhhc2UpICYmXG4gICAgICAocGhhc2UgIT09IFwiQXJyYW5nZVwiIHx8IGhhc1ByZVNlY3Rpb25TdGF0ZW1lbnRzKSxcbiAgKTtcblxuICBpZiAobWlzc2luZ1NlY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGZpeCA9XG4gICAgYW5hbHlzaXMuYm9keUxpbmVDb3VudCA+PSAzXG4gICAgICA/IChmaXhlcjogUnVsZS5SdWxlRml4ZXIpOiBSdWxlLkZpeFtdID0+XG4gICAgICAgICAgYnVpbGRNaXNzaW5nU2VjdGlvbkZpeGVzKGFuYWx5c2lzLCBtaXNzaW5nU2VjdGlvbnMsIGZpeGVyKVxuICAgICAgOiB2b2lkIDA7XG5cbiAgY29udGV4dC5yZXBvcnQoe1xuICAgIGRhdGE6IHsgc2VjdGlvbnM6IG1pc3NpbmdTZWN0aW9ucy5qb2luKFwiLCBcIikgfSxcbiAgICAuLi4oZml4ICE9PSB2b2lkIDAgJiYgeyBmaXggfSksXG4gICAgbWVzc2FnZUlkOiBcIm1pc3NpbmdTZWN0aW9uc1wiLFxuICAgIG5vZGU6IGFuYWx5c2lzLmNhbGxFeHByZXNzaW9uLFxuICAgIC4uLihmaXggIT09IHZvaWQgMCAmJiB7XG4gICAgICBzdWdnZXN0OiBbeyBmaXgsIG1lc3NhZ2VJZDogXCJhZGRNaXNzaW5nU2VjdGlvbnNcIiB9XSxcbiAgICB9KSxcbiAgfSk7XG59XG5cbi8qKlxuICogUmVwb3J0cyBzZWN0aW9uIGNvbW1lbnRzIHRoYXQgYXBwZWFyIG91dCBvZiBjYW5vbmljYWwgQXJyYW5nZSAtPiBBY3QgLT4gQXNzZXJ0IG9yZGVyLlxuICogQHBhcmFtIGNvbnRleHQgRVNMaW50IHJ1bGUgY29udGV4dC5cbiAqIEBwYXJhbSBhbmFseXNpcyBQYXJzZWQgdGVzdC1ibG9jayBhbmFseXNpcy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiByZXBvcnRPdXRPZk9yZGVyU2VjdGlvbnMoeyByZXBvcnQoKSB7fSB9IGFzIG5ldmVyLCB7IHNlY3Rpb25Db21tZW50czogW10gfSBhcyBuZXZlcik7XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gcmVwb3J0T3V0T2ZPcmRlclNlY3Rpb25zKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBhbmFseXNpczogVGVzdEJsb2NrQW5hbHlzaXMsXG4pOiB2b2lkIHtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFuYWx5c2lzLnNlY3Rpb25Db21tZW50cy5sZW5ndGggLSAxOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgcHJldmlvdXMgPSBhbmFseXNpcy5zZWN0aW9uQ29tbWVudHNbaW5kZXhdO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBhbmFseXNpcy5zZWN0aW9uQ29tbWVudHNbaW5kZXggKyAxXTtcblxuICAgIGlmIChwcmV2aW91cyA9PT0gdm9pZCAwIHx8IGN1cnJlbnQgPT09IHZvaWQgMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbWF4UHJldmlvdXNPcmRlciA9IE1hdGgubWF4KFxuICAgICAgLi4ucHJldmlvdXMucGhhc2VzLm1hcCgocGhhc2UpID0+IGFhYVBoYXNlT3JkZXJbcGhhc2VdKSxcbiAgICApO1xuICAgIGNvbnN0IG1pbkN1cnJlbnRPcmRlciA9IE1hdGgubWluKFxuICAgICAgLi4uY3VycmVudC5waGFzZXMubWFwKChwaGFzZSkgPT4gYWFhUGhhc2VPcmRlcltwaGFzZV0pLFxuICAgICk7XG5cbiAgICBpZiAobWluQ3VycmVudE9yZGVyIDw9IG1heFByZXZpb3VzT3JkZXIpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgZGF0YTogeyBzZWN0aW9uOiBjdXJyZW50LnBoYXNlcy5qb2luKFwiICYgXCIpIH0sXG4gICAgICAgIG1lc3NhZ2VJZDogXCJvdXRPZk9yZGVyU2VjdGlvblwiLFxuICAgICAgICBub2RlOiBjdXJyZW50LmNvbW1lbnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFja3MgdGhlIGN1cnJlbnQgQUFBIG9yZGVyaW5nIHN0YXRlIGZvciBvbmUgZmxhdHRlbmVkIHNlY3Rpb24uXG4gKiBAcGFyYW0gaW5wdXQgQ29tcG9zaXRlIG9yZGVyaW5nIHN0YXRlIGZvciB0aGUgY3VycmVudCBzZWN0aW9uLlxuICogQHJldHVybnMgVXBkYXRlZCBwaGFzZSBvcmRlciB3YXRlcm1hcmsuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgbmV4dE9yZGVyID0gdXBkYXRlU2VjdGlvbk9yZGVyKHsgY29udGV4dDoge30gYXMgUnVsZS5SdWxlQ29udGV4dCwgbGFzdFBoYXNlT3JkZXI6IC0xLCBzZWN0aW9uOiB7fSBhcyBuZXZlciwgc2VlblBoYXNlczogbmV3IFNldCgpIH0pO1xuICogYGBgXG4gKi9cbmNvbnN0IHVwZGF0ZVNlY3Rpb25PcmRlciA9IChpbnB1dDogVXBkYXRlU2VjdGlvbk9yZGVySW5wdXQpOiBudW1iZXIgPT4ge1xuICBjb25zdCB7IGNvbnRleHQsIGxhc3RQaGFzZU9yZGVyLCBzZWN0aW9uLCBzZWVuUGhhc2VzIH0gPSBpbnB1dDtcblxuICBpZiAoc2VlblBoYXNlcy5oYXMoc2VjdGlvbi5waGFzZSkpIHtcbiAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICBkYXRhOiB7IHNlY3Rpb246IHNlY3Rpb24ucGhhc2UgfSxcbiAgICAgIG1lc3NhZ2VJZDogXCJkdXBsaWNhdGVTZWN0aW9uXCIsXG4gICAgICBub2RlOiBzZWN0aW9uLmNvbW1lbnQsXG4gICAgfSk7XG4gICAgcmV0dXJuIGxhc3RQaGFzZU9yZGVyO1xuICB9XG5cbiAgY29uc3QgY3VycmVudFBoYXNlT3JkZXIgPSBhYWFQaGFzZU9yZGVyW3NlY3Rpb24ucGhhc2VdO1xuICBpZiAoY3VycmVudFBoYXNlT3JkZXIgPCBsYXN0UGhhc2VPcmRlcikge1xuICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgIGRhdGE6IHsgc2VjdGlvbjogc2VjdGlvbi5waGFzZSB9LFxuICAgICAgbWVzc2FnZUlkOiBcImludmFsaWRPcmRlclwiLFxuICAgICAgbm9kZTogc2VjdGlvbi5jb21tZW50LFxuICAgIH0pO1xuICB9XG5cbiAgc2VlblBoYXNlcy5hZGQoc2VjdGlvbi5waGFzZSk7XG4gIHJldHVybiBNYXRoLm1heChsYXN0UGhhc2VPcmRlciwgY3VycmVudFBoYXNlT3JkZXIpO1xufTtcblxuZXhwb3J0IHR5cGUgeyBGbGF0dGVuZWRTZWN0aW9uUGhhc2UgfTtcbmV4cG9ydCB7XG4gIHJlcG9ydEJsYW5rTGluZVNlcGFyYXRvcnMsXG4gIHJlcG9ydENvZGVCZWZvcmVBcnJhbmdlLFxuICByZXBvcnRFbXB0eVNlY3Rpb25zLFxuICByZXBvcnRNaXNzaW5nU2VjdGlvbnMsXG4gIHJlcG9ydE91dE9mT3JkZXJTZWN0aW9ucyxcbiAgdXBkYXRlU2VjdGlvbk9yZGVyLFxufTtcbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/enforce-aaa-structure/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAiBnC,kFAAkF;AAClF,QAAA,MAAM,uBAAuB,EAAE,IAAI,CAAC,UAoEnC,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
1
+ {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/enforce-aaa-structure/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAiBnC,kFAAkF;AAClF,QAAA,MAAM,uBAAuB,EAAE,IAAI,CAAC,UAwEnC,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
@@ -33,8 +33,11 @@ const enforceAaaStructureRule = {
33
33
  meta: {
34
34
  docs: createRuleDocumentation("enforce-aaa-structure", "Require explicit AAA markers, enforce section order and uniqueness, and keep setup, action, and assertions in their intended phases."),
35
35
  fixable: "code",
36
+ hasSuggestions: true,
36
37
  messages: {
37
38
  actionInArrange: "Keep the function under test out of Arrange; reserve Arrange for setup only.",
39
+ addBlankLineBeforeSection: "Insert a blank line before the // {{section}} section comment.",
40
+ addMissingSections: "Add the missing AAA section comments: {{sections}}.",
38
41
  assertionOutsideAssert: "Move assertions into the // Assert section so test logic does not leak earlier.",
39
42
  asyncInArrange: "Do not trigger async behavior in Arrange.",
40
43
  awaitOutsideAct: "Use await only inside the // Act section.",
@@ -55,4 +58,4 @@ const enforceAaaStructureRule = {
55
58
  },
56
59
  };
57
60
  export { enforceAaaStructureRule };
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9lbmZvcmNlLWFhYS1zdHJ1Y3R1cmUvcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNqRyxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2QixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN4QixrQkFBa0IsR0FDbkIsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxrRkFBa0Y7QUFDbEYsTUFBTSx1QkFBdUIsR0FBb0I7SUFDL0MsTUFBTSxFQUFFLENBQUMsT0FBeUIsRUFBcUIsRUFBRSxDQUN2RCxDQUFDO1FBQ0MsY0FBYyxDQUFDLElBQUk7WUFDakIsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2pELElBQUksUUFBUSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLE9BQU87WUFDVCxDQUFDO1lBRUQsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6RCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztZQUNwRCxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUV4QixLQUFLLE1BQU0sT0FBTyxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3hDLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQztvQkFDbEMsT0FBTztvQkFDUCxjQUFjO29CQUNkLE9BQU87b0JBQ1AsVUFBVTtpQkFDWCxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQscUJBQXFCLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN2Qyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDNUMsdUJBQXVCLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM3QywyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakQsQ0FBQztLQUNGLENBQTZCO0lBQ2hDLElBQUksRUFBRTtRQUNKLElBQUksRUFBRSx1QkFBdUIsQ0FDM0IsdUJBQXVCLEVBQ3ZCLHNJQUFzSSxDQUN2STtRQUNELE9BQU8sRUFBRSxNQUFNO1FBQ2YsUUFBUSxFQUFFO1lBQ1IsZUFBZSxFQUNiLDhFQUE4RTtZQUNoRixzQkFBc0IsRUFDcEIsaUZBQWlGO1lBQ25GLGNBQWMsRUFBRSwyQ0FBMkM7WUFDM0QsZUFBZSxFQUFFLDJDQUEyQztZQUM1RCxzQkFBc0IsRUFDcEIsZ0VBQWdFO1lBQ2xFLGlCQUFpQixFQUNmLG1FQUFtRTtZQUNyRSxnQkFBZ0IsRUFDZCw0REFBNEQ7WUFDOUQsWUFBWSxFQUNWLDRFQUE0RTtZQUM5RSxZQUFZLEVBQ1YsMkZBQTJGO1lBQzdGLG9CQUFvQixFQUNsQixnR0FBZ0c7WUFDbEcsZUFBZSxFQUFFLHFEQUFxRDtZQUN0RSxnQkFBZ0IsRUFDZCwyREFBMkQ7WUFDN0Qsb0JBQW9CLEVBQ2xCLDhFQUE4RTtZQUNoRixpQkFBaUIsRUFDZiwwREFBMEQ7WUFDNUQsYUFBYSxFQUNYLDJFQUEyRTtTQUM5RTtRQUNELE1BQU0sRUFBRSxFQUFFO1FBQ1YsSUFBSSxFQUFFLFNBQVM7S0FDaEI7Q0FDRixDQUFDO0FBRUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5cbmltcG9ydCB0eXBlIHsgRmxhdHRlbmVkU2VjdGlvblBoYXNlIH0gZnJvbSBcIi4vcnVsZS1zZWN0aW9uLXJlcG9ydGluZ1wiO1xuXG5pbXBvcnQgeyBjcmVhdGVSdWxlRG9jdW1lbnRhdGlvbiB9IGZyb20gXCIuLi8uLi9jdXN0b20tcnVsZS1kb2N1bWVudGF0aW9uXCI7XG5pbXBvcnQgeyBhbmFseXplVGVzdEJsb2NrIH0gZnJvbSBcIi4uL2FhYS9hbmFseXplci5hbmFseXNpc1wiO1xuaW1wb3J0IHsgZ2V0RmxhdHRlbmVkU2VjdGlvbnMgfSBmcm9tIFwiLi4vYWFhL2FuYWx5emVyLmFuYWx5c2lzLmhlbHBlcnNcIjtcbmltcG9ydCB7IHJlcG9ydFBoYXNlUHVyaXR5VmlvbGF0aW9ucyB9IGZyb20gXCIuLi9lbmZvcmNlLWFhYS1waGFzZS1wdXJpdHkvcGhhc2UtcHVyaXR5LXJlcG9ydGluZ1wiO1xuaW1wb3J0IHtcbiAgcmVwb3J0QmxhbmtMaW5lU2VwYXJhdG9ycyxcbiAgcmVwb3J0Q29kZUJlZm9yZUFycmFuZ2UsXG4gIHJlcG9ydEVtcHR5U2VjdGlvbnMsXG4gIHJlcG9ydE1pc3NpbmdTZWN0aW9ucyxcbiAgcmVwb3J0T3V0T2ZPcmRlclNlY3Rpb25zLFxuICB1cGRhdGVTZWN0aW9uT3JkZXIsXG59IGZyb20gXCIuL3J1bGUtc2VjdGlvbi1yZXBvcnRpbmdcIjtcblxuLyoqIEVuZm9yY2VzIGEgc2luZ2xlIEFycmFuZ2UvQWN0L0Fzc2VydCBzZXF1ZW5jZSBpbnNpZGUgc3VwcG9ydGVkIHRlc3QgYmxvY2tzLiAqL1xuY29uc3QgZW5mb3JjZUFhYVN0cnVjdHVyZVJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlOiAoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFJ1bGUuUnVsZUxpc3RlbmVyID0+XG4gICAgKHtcbiAgICAgIENhbGxFeHByZXNzaW9uKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYW5hbHlzaXMgPSBhbmFseXplVGVzdEJsb2NrKGNvbnRleHQsIG5vZGUpO1xuICAgICAgICBpZiAoYW5hbHlzaXMgPT09IHZvaWQgMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZsYXR0ZW5lZFNlY3Rpb25zID0gZ2V0RmxhdHRlbmVkU2VjdGlvbnMoYW5hbHlzaXMpO1xuICAgICAgICBjb25zdCBzZWVuUGhhc2VzID0gbmV3IFNldDxGbGF0dGVuZWRTZWN0aW9uUGhhc2U+KCk7XG4gICAgICAgIGxldCBsYXN0UGhhc2VPcmRlciA9IC0xO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBmbGF0dGVuZWRTZWN0aW9ucykge1xuICAgICAgICAgIGxhc3RQaGFzZU9yZGVyID0gdXBkYXRlU2VjdGlvbk9yZGVyKHtcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBsYXN0UGhhc2VPcmRlcixcbiAgICAgICAgICAgIHNlY3Rpb24sXG4gICAgICAgICAgICBzZWVuUGhhc2VzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVwb3J0TWlzc2luZ1NlY3Rpb25zKGNvbnRleHQsIGFuYWx5c2lzKTtcbiAgICAgICAgcmVwb3J0RW1wdHlTZWN0aW9ucyhjb250ZXh0LCBhbmFseXNpcyk7XG4gICAgICAgIHJlcG9ydE91dE9mT3JkZXJTZWN0aW9ucyhjb250ZXh0LCBhbmFseXNpcyk7XG4gICAgICAgIHJlcG9ydENvZGVCZWZvcmVBcnJhbmdlKGNvbnRleHQsIGFuYWx5c2lzKTtcbiAgICAgICAgcmVwb3J0QmxhbmtMaW5lU2VwYXJhdG9ycyhjb250ZXh0LCBhbmFseXNpcyk7XG4gICAgICAgIHJlcG9ydFBoYXNlUHVyaXR5VmlvbGF0aW9ucyhjb250ZXh0LCBhbmFseXNpcyk7XG4gICAgICB9LFxuICAgIH0pIHNhdGlzZmllcyBSdWxlLlJ1bGVMaXN0ZW5lcixcbiAgbWV0YToge1xuICAgIGRvY3M6IGNyZWF0ZVJ1bGVEb2N1bWVudGF0aW9uKFxuICAgICAgXCJlbmZvcmNlLWFhYS1zdHJ1Y3R1cmVcIixcbiAgICAgIFwiUmVxdWlyZSBleHBsaWNpdCBBQUEgbWFya2VycywgZW5mb3JjZSBzZWN0aW9uIG9yZGVyIGFuZCB1bmlxdWVuZXNzLCBhbmQga2VlcCBzZXR1cCwgYWN0aW9uLCBhbmQgYXNzZXJ0aW9ucyBpbiB0aGVpciBpbnRlbmRlZCBwaGFzZXMuXCIsXG4gICAgKSxcbiAgICBmaXhhYmxlOiBcImNvZGVcIixcbiAgICBtZXNzYWdlczoge1xuICAgICAgYWN0aW9uSW5BcnJhbmdlOlxuICAgICAgICBcIktlZXAgdGhlIGZ1bmN0aW9uIHVuZGVyIHRlc3Qgb3V0IG9mIEFycmFuZ2U7IHJlc2VydmUgQXJyYW5nZSBmb3Igc2V0dXAgb25seS5cIixcbiAgICAgIGFzc2VydGlvbk91dHNpZGVBc3NlcnQ6XG4gICAgICAgIFwiTW92ZSBhc3NlcnRpb25zIGludG8gdGhlIC8vIEFzc2VydCBzZWN0aW9uIHNvIHRlc3QgbG9naWMgZG9lcyBub3QgbGVhayBlYXJsaWVyLlwiLFxuICAgICAgYXN5bmNJbkFycmFuZ2U6IFwiRG8gbm90IHRyaWdnZXIgYXN5bmMgYmVoYXZpb3IgaW4gQXJyYW5nZS5cIixcbiAgICAgIGF3YWl0T3V0c2lkZUFjdDogXCJVc2UgYXdhaXQgb25seSBpbnNpZGUgdGhlIC8vIEFjdCBzZWN0aW9uLlwiLFxuICAgICAgYmxhbmtMaW5lQmVmb3JlU2VjdGlvbjpcbiAgICAgICAgXCJJbnNlcnQgYSBibGFuayBsaW5lIGJlZm9yZSB0aGUgLy8ge3tzZWN0aW9ufX0gc2VjdGlvbiBjb21tZW50LlwiLFxuICAgICAgY29kZUJlZm9yZUFycmFuZ2U6XG4gICAgICAgIFwiTW92ZSBzZXR1cCBzdGF0ZW1lbnRzIGJlbG93IHRoZSBmaXJzdCAvLyBBcnJhbmdlIHNlY3Rpb24gY29tbWVudC5cIixcbiAgICAgIGR1cGxpY2F0ZVNlY3Rpb246XG4gICAgICAgIFwiVXNlIHRoZSAvLyB7e3NlY3Rpb259fSBzZWN0aW9uIGNvbW1lbnQgb25seSBvbmNlIHBlciB0ZXN0LlwiLFxuICAgICAgZW1wdHlTZWN0aW9uOlxuICAgICAgICBcIlRoZSAvLyB7e3NlY3Rpb259fSBzZWN0aW9uIG11c3QgY29udGFpbiBjb2RlOyBjb21tZW50cyBhbG9uZSBkbyBub3QgY291bnQuXCIsXG4gICAgICBpbnZhbGlkT3JkZXI6XG4gICAgICAgIFwiTW92ZSB0aGUgLy8ge3tzZWN0aW9ufX0gc2VjdGlvbiBjb21tZW50IHNvIEFBQSBwaGFzZXMgc3RheSBpbiBBcnJhbmdlLCBBY3QsIEFzc2VydCBvcmRlci5cIixcbiAgICAgIG1pc3NpbmdNZWFuaW5nZnVsQWN0OlxuICAgICAgICBcIlRoZSAvLyBBY3Qgc2VjdGlvbiBtdXN0IGNvbnRhaW4gYSBtZWFuaW5nZnVsIFNVVCBpbnRlcmFjdGlvbiwgbm90IG9ubHkgdXRpbGl0eSBvciBzZXR1cCBjYWxscy5cIixcbiAgICAgIG1pc3NpbmdTZWN0aW9uczogXCJBZGQgdGhlIG1pc3NpbmcgQUFBIHNlY3Rpb24gY29tbWVudHM6IHt7c2VjdGlvbnN9fS5cIixcbiAgICAgIG11dGF0aW9uQWZ0ZXJBY3Q6XG4gICAgICAgIFwiRG8gbm90IG11dGF0ZSB0ZXN0IGRhdGEgYWZ0ZXIgdGhlIC8vIEFjdCBzZWN0aW9uIGhhcyBydW4uXCIsXG4gICAgICBub25Bc3NlcnRpb25JbkFzc2VydDpcbiAgICAgICAgXCJLZWVwIHRoZSAvLyBBc3NlcnQgc2VjdGlvbiBmb2N1c2VkIG9uIGFzc2VydGlvbnMgYW5kIGFzc2VydGlvbi1sb2NhbCB2YWx1ZXMuXCIsXG4gICAgICBvdXRPZk9yZGVyU2VjdGlvbjpcbiAgICAgICAgXCJUaGUgLy8ge3tzZWN0aW9ufX0gc2VjdGlvbiBjb21tZW50IGFwcGVhcnMgb3V0IG9mIG9yZGVyLlwiLFxuICAgICAgc2V0dXBBZnRlckFjdDpcbiAgICAgICAgXCJEbyBub3QgY29udGludWUgYXJyYW5naW5nIHRlc3QgZGF0YSBhZnRlciB0aGUgLy8gQWN0IHNlY3Rpb24gaGFzIHN0YXJ0ZWQuXCIsXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6IFwicHJvYmxlbVwiLFxuICB9LFxufTtcblxuZXhwb3J0IHsgZW5mb3JjZUFhYVN0cnVjdHVyZVJ1bGUgfTtcbiJdfQ==
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9lbmZvcmNlLWFhYS1zdHJ1Y3R1cmUvcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNqRyxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2QixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN4QixrQkFBa0IsR0FDbkIsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxrRkFBa0Y7QUFDbEYsTUFBTSx1QkFBdUIsR0FBb0I7SUFDL0MsTUFBTSxFQUFFLENBQUMsT0FBeUIsRUFBcUIsRUFBRSxDQUN2RCxDQUFDO1FBQ0MsY0FBYyxDQUFDLElBQUk7WUFDakIsTUFBTSxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2pELElBQUksUUFBUSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3hCLE9BQU87WUFDVCxDQUFDO1lBRUQsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN6RCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztZQUNwRCxJQUFJLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUV4QixLQUFLLE1BQU0sT0FBTyxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3hDLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQztvQkFDbEMsT0FBTztvQkFDUCxjQUFjO29CQUNkLE9BQU87b0JBQ1AsVUFBVTtpQkFDWCxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQscUJBQXFCLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN2Qyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDNUMsdUJBQXVCLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM3QywyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDakQsQ0FBQztLQUNGLENBQTZCO0lBQ2hDLElBQUksRUFBRTtRQUNKLElBQUksRUFBRSx1QkFBdUIsQ0FDM0IsdUJBQXVCLEVBQ3ZCLHNJQUFzSSxDQUN2STtRQUNELE9BQU8sRUFBRSxNQUFNO1FBQ2YsY0FBYyxFQUFFLElBQUk7UUFDcEIsUUFBUSxFQUFFO1lBQ1IsZUFBZSxFQUNiLDhFQUE4RTtZQUNoRix5QkFBeUIsRUFDdkIsZ0VBQWdFO1lBQ2xFLGtCQUFrQixFQUFFLHFEQUFxRDtZQUN6RSxzQkFBc0IsRUFDcEIsaUZBQWlGO1lBQ25GLGNBQWMsRUFBRSwyQ0FBMkM7WUFDM0QsZUFBZSxFQUFFLDJDQUEyQztZQUM1RCxzQkFBc0IsRUFDcEIsZ0VBQWdFO1lBQ2xFLGlCQUFpQixFQUNmLG1FQUFtRTtZQUNyRSxnQkFBZ0IsRUFDZCw0REFBNEQ7WUFDOUQsWUFBWSxFQUNWLDRFQUE0RTtZQUM5RSxZQUFZLEVBQ1YsMkZBQTJGO1lBQzdGLG9CQUFvQixFQUNsQixnR0FBZ0c7WUFDbEcsZUFBZSxFQUFFLHFEQUFxRDtZQUN0RSxnQkFBZ0IsRUFDZCwyREFBMkQ7WUFDN0Qsb0JBQW9CLEVBQ2xCLDhFQUE4RTtZQUNoRixpQkFBaUIsRUFDZiwwREFBMEQ7WUFDNUQsYUFBYSxFQUNYLDJFQUEyRTtTQUM5RTtRQUNELE1BQU0sRUFBRSxFQUFFO1FBQ1YsSUFBSSxFQUFFLFNBQVM7S0FDaEI7Q0FDRixDQUFDO0FBRUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5cbmltcG9ydCB0eXBlIHsgRmxhdHRlbmVkU2VjdGlvblBoYXNlIH0gZnJvbSBcIi4vcnVsZS1zZWN0aW9uLXJlcG9ydGluZ1wiO1xuXG5pbXBvcnQgeyBjcmVhdGVSdWxlRG9jdW1lbnRhdGlvbiB9IGZyb20gXCIuLi8uLi9jdXN0b20tcnVsZS1kb2N1bWVudGF0aW9uXCI7XG5pbXBvcnQgeyBhbmFseXplVGVzdEJsb2NrIH0gZnJvbSBcIi4uL2FhYS9hbmFseXplci5hbmFseXNpc1wiO1xuaW1wb3J0IHsgZ2V0RmxhdHRlbmVkU2VjdGlvbnMgfSBmcm9tIFwiLi4vYWFhL2FuYWx5emVyLmFuYWx5c2lzLmhlbHBlcnNcIjtcbmltcG9ydCB7IHJlcG9ydFBoYXNlUHVyaXR5VmlvbGF0aW9ucyB9IGZyb20gXCIuLi9lbmZvcmNlLWFhYS1waGFzZS1wdXJpdHkvcGhhc2UtcHVyaXR5LXJlcG9ydGluZ1wiO1xuaW1wb3J0IHtcbiAgcmVwb3J0QmxhbmtMaW5lU2VwYXJhdG9ycyxcbiAgcmVwb3J0Q29kZUJlZm9yZUFycmFuZ2UsXG4gIHJlcG9ydEVtcHR5U2VjdGlvbnMsXG4gIHJlcG9ydE1pc3NpbmdTZWN0aW9ucyxcbiAgcmVwb3J0T3V0T2ZPcmRlclNlY3Rpb25zLFxuICB1cGRhdGVTZWN0aW9uT3JkZXIsXG59IGZyb20gXCIuL3J1bGUtc2VjdGlvbi1yZXBvcnRpbmdcIjtcblxuLyoqIEVuZm9yY2VzIGEgc2luZ2xlIEFycmFuZ2UvQWN0L0Fzc2VydCBzZXF1ZW5jZSBpbnNpZGUgc3VwcG9ydGVkIHRlc3QgYmxvY2tzLiAqL1xuY29uc3QgZW5mb3JjZUFhYVN0cnVjdHVyZVJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlOiAoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFJ1bGUuUnVsZUxpc3RlbmVyID0+XG4gICAgKHtcbiAgICAgIENhbGxFeHByZXNzaW9uKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYW5hbHlzaXMgPSBhbmFseXplVGVzdEJsb2NrKGNvbnRleHQsIG5vZGUpO1xuICAgICAgICBpZiAoYW5hbHlzaXMgPT09IHZvaWQgMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZsYXR0ZW5lZFNlY3Rpb25zID0gZ2V0RmxhdHRlbmVkU2VjdGlvbnMoYW5hbHlzaXMpO1xuICAgICAgICBjb25zdCBzZWVuUGhhc2VzID0gbmV3IFNldDxGbGF0dGVuZWRTZWN0aW9uUGhhc2U+KCk7XG4gICAgICAgIGxldCBsYXN0UGhhc2VPcmRlciA9IC0xO1xuXG4gICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBmbGF0dGVuZWRTZWN0aW9ucykge1xuICAgICAgICAgIGxhc3RQaGFzZU9yZGVyID0gdXBkYXRlU2VjdGlvbk9yZGVyKHtcbiAgICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgICBsYXN0UGhhc2VPcmRlcixcbiAgICAgICAgICAgIHNlY3Rpb24sXG4gICAgICAgICAgICBzZWVuUGhhc2VzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVwb3J0TWlzc2luZ1NlY3Rpb25zKGNvbnRleHQsIGFuYWx5c2lzKTtcbiAgICAgICAgcmVwb3J0RW1wdHlTZWN0aW9ucyhjb250ZXh0LCBhbmFseXNpcyk7XG4gICAgICAgIHJlcG9ydE91dE9mT3JkZXJTZWN0aW9ucyhjb250ZXh0LCBhbmFseXNpcyk7XG4gICAgICAgIHJlcG9ydENvZGVCZWZvcmVBcnJhbmdlKGNvbnRleHQsIGFuYWx5c2lzKTtcbiAgICAgICAgcmVwb3J0QmxhbmtMaW5lU2VwYXJhdG9ycyhjb250ZXh0LCBhbmFseXNpcyk7XG4gICAgICAgIHJlcG9ydFBoYXNlUHVyaXR5VmlvbGF0aW9ucyhjb250ZXh0LCBhbmFseXNpcyk7XG4gICAgICB9LFxuICAgIH0pIHNhdGlzZmllcyBSdWxlLlJ1bGVMaXN0ZW5lcixcbiAgbWV0YToge1xuICAgIGRvY3M6IGNyZWF0ZVJ1bGVEb2N1bWVudGF0aW9uKFxuICAgICAgXCJlbmZvcmNlLWFhYS1zdHJ1Y3R1cmVcIixcbiAgICAgIFwiUmVxdWlyZSBleHBsaWNpdCBBQUEgbWFya2VycywgZW5mb3JjZSBzZWN0aW9uIG9yZGVyIGFuZCB1bmlxdWVuZXNzLCBhbmQga2VlcCBzZXR1cCwgYWN0aW9uLCBhbmQgYXNzZXJ0aW9ucyBpbiB0aGVpciBpbnRlbmRlZCBwaGFzZXMuXCIsXG4gICAgKSxcbiAgICBmaXhhYmxlOiBcImNvZGVcIixcbiAgICBoYXNTdWdnZXN0aW9uczogdHJ1ZSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgYWN0aW9uSW5BcnJhbmdlOlxuICAgICAgICBcIktlZXAgdGhlIGZ1bmN0aW9uIHVuZGVyIHRlc3Qgb3V0IG9mIEFycmFuZ2U7IHJlc2VydmUgQXJyYW5nZSBmb3Igc2V0dXAgb25seS5cIixcbiAgICAgIGFkZEJsYW5rTGluZUJlZm9yZVNlY3Rpb246XG4gICAgICAgIFwiSW5zZXJ0IGEgYmxhbmsgbGluZSBiZWZvcmUgdGhlIC8vIHt7c2VjdGlvbn19IHNlY3Rpb24gY29tbWVudC5cIixcbiAgICAgIGFkZE1pc3NpbmdTZWN0aW9uczogXCJBZGQgdGhlIG1pc3NpbmcgQUFBIHNlY3Rpb24gY29tbWVudHM6IHt7c2VjdGlvbnN9fS5cIixcbiAgICAgIGFzc2VydGlvbk91dHNpZGVBc3NlcnQ6XG4gICAgICAgIFwiTW92ZSBhc3NlcnRpb25zIGludG8gdGhlIC8vIEFzc2VydCBzZWN0aW9uIHNvIHRlc3QgbG9naWMgZG9lcyBub3QgbGVhayBlYXJsaWVyLlwiLFxuICAgICAgYXN5bmNJbkFycmFuZ2U6IFwiRG8gbm90IHRyaWdnZXIgYXN5bmMgYmVoYXZpb3IgaW4gQXJyYW5nZS5cIixcbiAgICAgIGF3YWl0T3V0c2lkZUFjdDogXCJVc2UgYXdhaXQgb25seSBpbnNpZGUgdGhlIC8vIEFjdCBzZWN0aW9uLlwiLFxuICAgICAgYmxhbmtMaW5lQmVmb3JlU2VjdGlvbjpcbiAgICAgICAgXCJJbnNlcnQgYSBibGFuayBsaW5lIGJlZm9yZSB0aGUgLy8ge3tzZWN0aW9ufX0gc2VjdGlvbiBjb21tZW50LlwiLFxuICAgICAgY29kZUJlZm9yZUFycmFuZ2U6XG4gICAgICAgIFwiTW92ZSBzZXR1cCBzdGF0ZW1lbnRzIGJlbG93IHRoZSBmaXJzdCAvLyBBcnJhbmdlIHNlY3Rpb24gY29tbWVudC5cIixcbiAgICAgIGR1cGxpY2F0ZVNlY3Rpb246XG4gICAgICAgIFwiVXNlIHRoZSAvLyB7e3NlY3Rpb259fSBzZWN0aW9uIGNvbW1lbnQgb25seSBvbmNlIHBlciB0ZXN0LlwiLFxuICAgICAgZW1wdHlTZWN0aW9uOlxuICAgICAgICBcIlRoZSAvLyB7e3NlY3Rpb259fSBzZWN0aW9uIG11c3QgY29udGFpbiBjb2RlOyBjb21tZW50cyBhbG9uZSBkbyBub3QgY291bnQuXCIsXG4gICAgICBpbnZhbGlkT3JkZXI6XG4gICAgICAgIFwiTW92ZSB0aGUgLy8ge3tzZWN0aW9ufX0gc2VjdGlvbiBjb21tZW50IHNvIEFBQSBwaGFzZXMgc3RheSBpbiBBcnJhbmdlLCBBY3QsIEFzc2VydCBvcmRlci5cIixcbiAgICAgIG1pc3NpbmdNZWFuaW5nZnVsQWN0OlxuICAgICAgICBcIlRoZSAvLyBBY3Qgc2VjdGlvbiBtdXN0IGNvbnRhaW4gYSBtZWFuaW5nZnVsIFNVVCBpbnRlcmFjdGlvbiwgbm90IG9ubHkgdXRpbGl0eSBvciBzZXR1cCBjYWxscy5cIixcbiAgICAgIG1pc3NpbmdTZWN0aW9uczogXCJBZGQgdGhlIG1pc3NpbmcgQUFBIHNlY3Rpb24gY29tbWVudHM6IHt7c2VjdGlvbnN9fS5cIixcbiAgICAgIG11dGF0aW9uQWZ0ZXJBY3Q6XG4gICAgICAgIFwiRG8gbm90IG11dGF0ZSB0ZXN0IGRhdGEgYWZ0ZXIgdGhlIC8vIEFjdCBzZWN0aW9uIGhhcyBydW4uXCIsXG4gICAgICBub25Bc3NlcnRpb25JbkFzc2VydDpcbiAgICAgICAgXCJLZWVwIHRoZSAvLyBBc3NlcnQgc2VjdGlvbiBmb2N1c2VkIG9uIGFzc2VydGlvbnMgYW5kIGFzc2VydGlvbi1sb2NhbCB2YWx1ZXMuXCIsXG4gICAgICBvdXRPZk9yZGVyU2VjdGlvbjpcbiAgICAgICAgXCJUaGUgLy8ge3tzZWN0aW9ufX0gc2VjdGlvbiBjb21tZW50IGFwcGVhcnMgb3V0IG9mIG9yZGVyLlwiLFxuICAgICAgc2V0dXBBZnRlckFjdDpcbiAgICAgICAgXCJEbyBub3QgY29udGludWUgYXJyYW5naW5nIHRlc3QgZGF0YSBhZnRlciB0aGUgLy8gQWN0IHNlY3Rpb24gaGFzIHN0YXJ0ZWQuXCIsXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6IFwicHJvYmxlbVwiLFxuICB9LFxufTtcblxuZXhwb3J0IHsgZW5mb3JjZUFhYVN0cnVjdHVyZVJ1bGUgfTtcbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/no-unsafe-vitest-mock-factory-cast/rule.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAKnC,4DAA4D;AAC5D,QAAA,MAAM,iCAAiC,EAAE,IAAI,CAAC,UAiC7C,CAAC;AAEF,OAAO,EAAE,iCAAiC,EAAE,CAAC"}
1
+ {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/no-unsafe-vitest-mock-factory-cast/rule.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAKnC,4DAA4D;AAC5D,QAAA,MAAM,iCAAiC,EAAE,IAAI,CAAC,UA0C7C,CAAC;AAEF,OAAO,EAAE,iCAAiC,EAAE,CAAC"}
@@ -8,12 +8,16 @@ const noUnsafeVitestMockFactoryCastRule = {
8
8
  if (match === void 0) {
9
9
  return;
10
10
  }
11
+ const fix = match.canAutofix
12
+ ? (fixer) => buildFixes(context, fixer, match)
13
+ : void 0;
11
14
  context.report({
12
- fix: match.canAutofix
13
- ? (fixer) => buildFixes(context, fixer, match)
14
- : void 0,
15
+ ...(fix !== void 0 && { fix }),
15
16
  messageId: "noUnsafeVitestMockFactoryCast",
16
17
  node: match.node,
18
+ ...(fix !== void 0 && {
19
+ suggest: [{ fix, messageId: "replaceWithCreateMockProxy" }],
20
+ }),
17
21
  });
18
22
  },
19
23
  }),
@@ -24,12 +28,14 @@ const noUnsafeVitestMockFactoryCastRule = {
24
28
  url: "https://github.com/parloti/eslint-plugin/blob/main/docs/rules/no-unsafe-vitest-mock-factory-cast.md",
25
29
  },
26
30
  fixable: "code",
31
+ hasSuggestions: true,
27
32
  messages: {
28
33
  noUnsafeVitestMockFactoryCast: "Avoid casting vi.mock/vi.doMock factory results; use createMockProxy(...) with a type-only module import instead.",
34
+ replaceWithCreateMockProxy: "Replace the casted factory with createMockProxy(...).",
29
35
  },
30
36
  schema: [],
31
37
  type: "problem",
32
38
  },
33
39
  };
34
40
  export { noUnsafeVitestMockFactoryCastRule };
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9uby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0L3J1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlDLDREQUE0RDtBQUM1RCxNQUFNLGlDQUFpQyxHQUFvQjtJQUN6RCxNQUFNLEVBQUUsQ0FBQyxPQUF5QixFQUFxQixFQUFFLENBQ3ZELENBQUM7UUFDQyxjQUFjLENBQUMsSUFBSTtZQUNqQixNQUFNLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxJQUErQixDQUFDLENBQUM7WUFDbkUsSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDckIsT0FBTztZQUNULENBQUM7WUFFRCxPQUFPLENBQUMsTUFBTSxDQUFDO2dCQUNiLEdBQUcsRUFBRSxLQUFLLENBQUMsVUFBVTtvQkFDbkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFjLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUM7b0JBQzFELENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ1YsU0FBUyxFQUFFLCtCQUErQjtnQkFDMUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO2FBQ2pCLENBQUMsQ0FBQztRQUNMLENBQUM7S0FDRixDQUE2QjtJQUNoQyxJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUU7WUFDSixXQUFXLEVBQ1QsMkdBQTJHO1lBQzdHLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLEdBQUcsRUFBRSxxR0FBcUc7U0FDM0c7UUFDRCxPQUFPLEVBQUUsTUFBTTtRQUNmLFFBQVEsRUFBRTtZQUNSLDZCQUE2QixFQUMzQixtSEFBbUg7U0FDdEg7UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLElBQUksRUFBRSxTQUFTO0tBQ2hCO0NBQ0YsQ0FBQztBQUVGLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBUU0VTVHJlZSB9IGZyb20gXCJAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHsgZ2V0TW9ja0ZhY3RvcnlNYXRjaCB9IGZyb20gXCIuL3J1bGUtZGV0ZWN0aW9uXCI7XG5pbXBvcnQgeyBidWlsZEZpeGVzIH0gZnJvbSBcIi4vcnVsZS1yZXBvcnRpbmdcIjtcblxuLyoqIERpc2FsbG93cyBjYXN0ZWQgYHZpLm1vY2tgIGFuZCBgdmkuZG9Nb2NrYCBmYWN0b3JpZXMuICovXG5jb25zdCBub1Vuc2FmZVZpdGVzdE1vY2tGYWN0b3J5Q2FzdFJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlOiAoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFJ1bGUuUnVsZUxpc3RlbmVyID0+XG4gICAgKHtcbiAgICAgIENhbGxFeHByZXNzaW9uKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBnZXRNb2NrRmFjdG9yeU1hdGNoKG5vZGUgYXMgVFNFU1RyZWUuQ2FsbEV4cHJlc3Npb24pO1xuICAgICAgICBpZiAobWF0Y2ggPT09IHZvaWQgMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBmaXg6IG1hdGNoLmNhbkF1dG9maXhcbiAgICAgICAgICAgID8gKGZpeGVyKTogUnVsZS5GaXhbXSA9PiBidWlsZEZpeGVzKGNvbnRleHQsIGZpeGVyLCBtYXRjaClcbiAgICAgICAgICAgIDogdm9pZCAwLFxuICAgICAgICAgIG1lc3NhZ2VJZDogXCJub1Vuc2FmZVZpdGVzdE1vY2tGYWN0b3J5Q2FzdFwiLFxuICAgICAgICAgIG5vZGU6IG1hdGNoLm5vZGUsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KSBzYXRpc2ZpZXMgUnVsZS5SdWxlTGlzdGVuZXIsXG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJEaXNhbGxvdyBjYXN0ZWQgdmkubW9jayBhbmQgdmkuZG9Nb2NrIGZhY3RvcmllcyBhbmQgcHJlZmVyIGNyZWF0ZU1vY2tQcm94eSguLi4pIGZvciBwYXJ0aWFsIG1vZHVsZSBtb2Nrcy5cIixcbiAgICAgIHJlY29tbWVuZGVkOiB0cnVlLFxuICAgICAgdXJsOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9wYXJsb3RpL2VzbGludC1wbHVnaW4vYmxvYi9tYWluL2RvY3MvcnVsZXMvbm8tdW5zYWZlLXZpdGVzdC1tb2NrLWZhY3RvcnktY2FzdC5tZFwiLFxuICAgIH0sXG4gICAgZml4YWJsZTogXCJjb2RlXCIsXG4gICAgbWVzc2FnZXM6IHtcbiAgICAgIG5vVW5zYWZlVml0ZXN0TW9ja0ZhY3RvcnlDYXN0OlxuICAgICAgICBcIkF2b2lkIGNhc3RpbmcgdmkubW9jay92aS5kb01vY2sgZmFjdG9yeSByZXN1bHRzOyB1c2UgY3JlYXRlTW9ja1Byb3h5KC4uLikgd2l0aCBhIHR5cGUtb25seSBtb2R1bGUgaW1wb3J0IGluc3RlYWQuXCIsXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6IFwicHJvYmxlbVwiLFxuICB9LFxufTtcblxuZXhwb3J0IHsgbm9VbnNhZmVWaXRlc3RNb2NrRmFjdG9yeUNhc3RSdWxlIH07XG4iXX0=
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9uby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0L3J1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlDLDREQUE0RDtBQUM1RCxNQUFNLGlDQUFpQyxHQUFvQjtJQUN6RCxNQUFNLEVBQUUsQ0FBQyxPQUF5QixFQUFxQixFQUFFLENBQ3ZELENBQUM7UUFDQyxjQUFjLENBQUMsSUFBSTtZQUNqQixNQUFNLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxJQUErQixDQUFDLENBQUM7WUFDbkUsSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDckIsT0FBTztZQUNULENBQUM7WUFFRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsVUFBVTtnQkFDMUIsQ0FBQyxDQUFDLENBQUMsS0FBcUIsRUFBYyxFQUFFLENBQ3BDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztnQkFDckMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRVgsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDYixHQUFHLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQzlCLFNBQVMsRUFBRSwrQkFBK0I7Z0JBQzFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtnQkFDaEIsR0FBRyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsSUFBSTtvQkFDcEIsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLDRCQUE0QixFQUFFLENBQUM7aUJBQzVELENBQUM7YUFDSCxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQ0YsQ0FBNkI7SUFDaEMsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFO1lBQ0osV0FBVyxFQUNULDJHQUEyRztZQUM3RyxXQUFXLEVBQUUsSUFBSTtZQUNqQixHQUFHLEVBQUUscUdBQXFHO1NBQzNHO1FBQ0QsT0FBTyxFQUFFLE1BQU07UUFDZixjQUFjLEVBQUUsSUFBSTtRQUNwQixRQUFRLEVBQUU7WUFDUiw2QkFBNkIsRUFDM0IsbUhBQW1IO1lBQ3JILDBCQUEwQixFQUN4Qix1REFBdUQ7U0FDMUQ7UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLElBQUksRUFBRSxTQUFTO0tBQ2hCO0NBQ0YsQ0FBQztBQUVGLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBUU0VTVHJlZSB9IGZyb20gXCJAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHsgZ2V0TW9ja0ZhY3RvcnlNYXRjaCB9IGZyb20gXCIuL3J1bGUtZGV0ZWN0aW9uXCI7XG5pbXBvcnQgeyBidWlsZEZpeGVzIH0gZnJvbSBcIi4vcnVsZS1yZXBvcnRpbmdcIjtcblxuLyoqIERpc2FsbG93cyBjYXN0ZWQgYHZpLm1vY2tgIGFuZCBgdmkuZG9Nb2NrYCBmYWN0b3JpZXMuICovXG5jb25zdCBub1Vuc2FmZVZpdGVzdE1vY2tGYWN0b3J5Q2FzdFJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlOiAoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFJ1bGUuUnVsZUxpc3RlbmVyID0+XG4gICAgKHtcbiAgICAgIENhbGxFeHByZXNzaW9uKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBnZXRNb2NrRmFjdG9yeU1hdGNoKG5vZGUgYXMgVFNFU1RyZWUuQ2FsbEV4cHJlc3Npb24pO1xuICAgICAgICBpZiAobWF0Y2ggPT09IHZvaWQgMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpeCA9IG1hdGNoLmNhbkF1dG9maXhcbiAgICAgICAgICA/IChmaXhlcjogUnVsZS5SdWxlRml4ZXIpOiBSdWxlLkZpeFtdID0+XG4gICAgICAgICAgICAgIGJ1aWxkRml4ZXMoY29udGV4dCwgZml4ZXIsIG1hdGNoKVxuICAgICAgICAgIDogdm9pZCAwO1xuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAuLi4oZml4ICE9PSB2b2lkIDAgJiYgeyBmaXggfSksXG4gICAgICAgICAgbWVzc2FnZUlkOiBcIm5vVW5zYWZlVml0ZXN0TW9ja0ZhY3RvcnlDYXN0XCIsXG4gICAgICAgICAgbm9kZTogbWF0Y2gubm9kZSxcbiAgICAgICAgICAuLi4oZml4ICE9PSB2b2lkIDAgJiYge1xuICAgICAgICAgICAgc3VnZ2VzdDogW3sgZml4LCBtZXNzYWdlSWQ6IFwicmVwbGFjZVdpdGhDcmVhdGVNb2NrUHJveHlcIiB9XSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0pIHNhdGlzZmllcyBSdWxlLlJ1bGVMaXN0ZW5lcixcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkRpc2FsbG93IGNhc3RlZCB2aS5tb2NrIGFuZCB2aS5kb01vY2sgZmFjdG9yaWVzIGFuZCBwcmVmZXIgY3JlYXRlTW9ja1Byb3h5KC4uLikgZm9yIHBhcnRpYWwgbW9kdWxlIG1vY2tzLlwiLFxuICAgICAgcmVjb21tZW5kZWQ6IHRydWUsXG4gICAgICB1cmw6IFwiaHR0cHM6Ly9naXRodWIuY29tL3BhcmxvdGkvZXNsaW50LXBsdWdpbi9ibG9iL21haW4vZG9jcy9ydWxlcy9uby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0Lm1kXCIsXG4gICAgfSxcbiAgICBmaXhhYmxlOiBcImNvZGVcIixcbiAgICBoYXNTdWdnZXN0aW9uczogdHJ1ZSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgbm9VbnNhZmVWaXRlc3RNb2NrRmFjdG9yeUNhc3Q6XG4gICAgICAgIFwiQXZvaWQgY2FzdGluZyB2aS5tb2NrL3ZpLmRvTW9jayBmYWN0b3J5IHJlc3VsdHM7IHVzZSBjcmVhdGVNb2NrUHJveHkoLi4uKSB3aXRoIGEgdHlwZS1vbmx5IG1vZHVsZSBpbXBvcnQgaW5zdGVhZC5cIixcbiAgICAgIHJlcGxhY2VXaXRoQ3JlYXRlTW9ja1Byb3h5OlxuICAgICAgICBcIlJlcGxhY2UgdGhlIGNhc3RlZCBmYWN0b3J5IHdpdGggY3JlYXRlTW9ja1Byb3h5KC4uLikuXCIsXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6IFwicHJvYmxlbVwiLFxuICB9LFxufTtcblxuZXhwb3J0IHsgbm9VbnNhZmVWaXRlc3RNb2NrRmFjdG9yeUNhc3RSdWxlIH07XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vi-mocked-import/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAKnC,6EAA6E;AAC7E,QAAA,MAAM,wBAAwB,EAAE,IAAI,CAAC,UAsCpC,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
1
+ {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/prefer-vi-mocked-import/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAKnC,6EAA6E;AAC7E,QAAA,MAAM,wBAAwB,EAAE,IAAI,CAAC,UA8CpC,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -9,12 +9,16 @@ const preferViMockedImportRule = {
9
9
  return;
10
10
  }
11
11
  for (const [index, match] of matches.entries()) {
12
+ const fix = index === 0
13
+ ? (fixer) => buildFixes(matches, fixer)
14
+ : void 0;
12
15
  context.report({
13
- fix: index === 0
14
- ? (fixer) => buildFixes(matches, fixer)
15
- : void 0,
16
+ ...(fix !== void 0 && { fix }),
16
17
  messageId: "preferViMockedImport",
17
18
  node: match.node,
19
+ ...(fix !== void 0 && {
20
+ suggest: [{ fix, messageId: "inlineViMockedImport" }],
21
+ }),
18
22
  });
19
23
  }
20
24
  },
@@ -26,7 +30,9 @@ const preferViMockedImportRule = {
26
30
  url: "https://github.com/parloti/eslint-plugin/blob/main/docs/rules/prefer-vi-mocked-import.md",
27
31
  },
28
32
  fixable: "code",
33
+ hasSuggestions: true,
29
34
  messages: {
35
+ inlineViMockedImport: "Inline the vi.fn mocks and use vi.mocked(...) for calls.",
30
36
  preferViMockedImport: "Inline vi.fn mocks in the vi.mock/vi.doMock factory and use vi.mocked(...) for calls.",
31
37
  },
32
38
  schema: [],
@@ -34,4 +40,4 @@ const preferViMockedImportRule = {
34
40
  },
35
41
  };
36
42
  export { preferViMockedImportRule };
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9wcmVmZXItdmktbW9ja2VkLWltcG9ydC9ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV6Qyw2RUFBNkU7QUFDN0UsTUFBTSx3QkFBd0IsR0FBb0I7SUFDaEQsTUFBTSxFQUFFLENBQUMsT0FBeUIsRUFBcUIsRUFBRSxDQUN2RCxDQUFDO1FBQ0MsT0FBTyxFQUFFLEdBQVMsRUFBRTtZQUNsQixNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFeEMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN6QixPQUFPO1lBQ1QsQ0FBQztZQUVELEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDL0MsT0FBTyxDQUFDLE1BQU0sQ0FBQztvQkFDYixHQUFHLEVBQ0QsS0FBSyxLQUFLLENBQUM7d0JBQ1QsQ0FBQyxDQUFDLENBQUMsS0FBcUIsRUFBYyxFQUFFLENBQ3BDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO3dCQUM5QixDQUFDLENBQUMsS0FBSyxDQUFDO29CQUNaLFNBQVMsRUFBRSxzQkFBc0I7b0JBQ2pDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtpQkFDakIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7S0FDRixDQUE2QjtJQUNoQyxJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUU7WUFDSixXQUFXLEVBQ1Qsc0ZBQXNGO1lBQ3hGLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLEdBQUcsRUFBRSwwRkFBMEY7U0FDaEc7UUFDRCxPQUFPLEVBQUUsTUFBTTtRQUNmLFFBQVEsRUFBRTtZQUNSLG9CQUFvQixFQUNsQix1RkFBdUY7U0FDMUY7UUFDRCxNQUFNLEVBQUUsRUFBRTtRQUNWLElBQUksRUFBRSxZQUFZO0tBQ25CO0NBQ0YsQ0FBQztBQUVGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQgeyBidWlsZEZpeGVzIH0gZnJvbSBcIi4vZml4XCI7XG5pbXBvcnQgeyBjb2xsZWN0TWF0Y2hlcyB9IGZyb20gXCIuL21hdGNoXCI7XG5cbi8qKiBFbmZvcmNlIGlubGluZSBgdmkuZm4oKWAgbW9ja3MgaW5zaWRlIGB2aS5tb2NrYC9gdmkuZG9Nb2NrYCBmYWN0b3JpZXMuICovXG5jb25zdCBwcmVmZXJWaU1vY2tlZEltcG9ydFJ1bGU6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlOiAoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFJ1bGUuUnVsZUxpc3RlbmVyID0+XG4gICAgKHtcbiAgICAgIFByb2dyYW06ICgpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGNvbGxlY3RNYXRjaGVzKGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBtYXRjaF0gb2YgbWF0Y2hlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh7XG4gICAgICAgICAgICBmaXg6XG4gICAgICAgICAgICAgIGluZGV4ID09PSAwXG4gICAgICAgICAgICAgICAgPyAoZml4ZXI6IFJ1bGUuUnVsZUZpeGVyKTogUnVsZS5GaXhbXSA9PlxuICAgICAgICAgICAgICAgICAgICBidWlsZEZpeGVzKG1hdGNoZXMsIGZpeGVyKVxuICAgICAgICAgICAgICAgIDogdm9pZCAwLFxuICAgICAgICAgICAgbWVzc2FnZUlkOiBcInByZWZlclZpTW9ja2VkSW1wb3J0XCIsXG4gICAgICAgICAgICBub2RlOiBtYXRjaC5ub2RlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pIHNhdGlzZmllcyBSdWxlLlJ1bGVMaXN0ZW5lcixcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlByZWZlciBpbmxpbmluZyB2aS5mbiBtb2NrcyBpbiB2aS5tb2NrL3ZpLmRvTW9jayBmYWN0b3JpZXMgYW5kIHVzaW5nIHZpLm1vY2tlZCguLi4pLlwiLFxuICAgICAgcmVjb21tZW5kZWQ6IGZhbHNlLFxuICAgICAgdXJsOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9wYXJsb3RpL2VzbGludC1wbHVnaW4vYmxvYi9tYWluL2RvY3MvcnVsZXMvcHJlZmVyLXZpLW1vY2tlZC1pbXBvcnQubWRcIixcbiAgICB9LFxuICAgIGZpeGFibGU6IFwiY29kZVwiLFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBwcmVmZXJWaU1vY2tlZEltcG9ydDpcbiAgICAgICAgXCJJbmxpbmUgdmkuZm4gbW9ja3MgaW4gdGhlIHZpLm1vY2svdmkuZG9Nb2NrIGZhY3RvcnkgYW5kIHVzZSB2aS5tb2NrZWQoLi4uKSBmb3IgY2FsbHMuXCIsXG4gICAgfSxcbiAgICBzY2hlbWE6IFtdLFxuICAgIHR5cGU6IFwic3VnZ2VzdGlvblwiLFxuICB9LFxufTtcblxuZXhwb3J0IHsgcHJlZmVyVmlNb2NrZWRJbXBvcnRSdWxlIH07XG4iXX0=
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9wcmVmZXItdmktbW9ja2VkLWltcG9ydC9ydWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV6Qyw2RUFBNkU7QUFDN0UsTUFBTSx3QkFBd0IsR0FBb0I7SUFDaEQsTUFBTSxFQUFFLENBQUMsT0FBeUIsRUFBcUIsRUFBRSxDQUN2RCxDQUFDO1FBQ0MsT0FBTyxFQUFFLEdBQVMsRUFBRTtZQUNsQixNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFeEMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN6QixPQUFPO1lBQ1QsQ0FBQztZQUVELEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDL0MsTUFBTSxHQUFHLEdBQ1AsS0FBSyxLQUFLLENBQUM7b0JBQ1QsQ0FBQyxDQUFDLENBQUMsS0FBcUIsRUFBYyxFQUFFLENBQ3BDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO29CQUM5QixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRWIsT0FBTyxDQUFDLE1BQU0sQ0FBQztvQkFDYixHQUFHLENBQUMsR0FBRyxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7b0JBQzlCLFNBQVMsRUFBRSxzQkFBc0I7b0JBQ2pDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtvQkFDaEIsR0FBRyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsSUFBSTt3QkFDcEIsT0FBTyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLHNCQUFzQixFQUFFLENBQUM7cUJBQ3RELENBQUM7aUJBQ0gsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7S0FDRixDQUE2QjtJQUNoQyxJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUU7WUFDSixXQUFXLEVBQ1Qsc0ZBQXNGO1lBQ3hGLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLEdBQUcsRUFBRSwwRkFBMEY7U0FDaEc7UUFDRCxPQUFPLEVBQUUsTUFBTTtRQUNmLGNBQWMsRUFBRSxJQUFJO1FBQ3BCLFFBQVEsRUFBRTtZQUNSLG9CQUFvQixFQUNsQiwwREFBMEQ7WUFDNUQsb0JBQW9CLEVBQ2xCLHVGQUF1RjtTQUMxRjtRQUNELE1BQU0sRUFBRSxFQUFFO1FBQ1YsSUFBSSxFQUFFLFlBQVk7S0FDbkI7Q0FDRixDQUFDO0FBRUYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tIFwiZXNsaW50XCI7XG5cbmltcG9ydCB7IGJ1aWxkRml4ZXMgfSBmcm9tIFwiLi9maXhcIjtcbmltcG9ydCB7IGNvbGxlY3RNYXRjaGVzIH0gZnJvbSBcIi4vbWF0Y2hcIjtcblxuLyoqIEVuZm9yY2UgaW5saW5lIGB2aS5mbigpYCBtb2NrcyBpbnNpZGUgYHZpLm1vY2tgL2B2aS5kb01vY2tgIGZhY3Rvcmllcy4gKi9cbmNvbnN0IHByZWZlclZpTW9ja2VkSW1wb3J0UnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGU6IChjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0KTogUnVsZS5SdWxlTGlzdGVuZXIgPT5cbiAgICAoe1xuICAgICAgUHJvZ3JhbTogKCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gY29sbGVjdE1hdGNoZXMoY29udGV4dCk7XG5cbiAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIG1hdGNoXSBvZiBtYXRjaGVzLmVudHJpZXMoKSkge1xuICAgICAgICAgIGNvbnN0IGZpeCA9XG4gICAgICAgICAgICBpbmRleCA9PT0gMFxuICAgICAgICAgICAgICA/IChmaXhlcjogUnVsZS5SdWxlRml4ZXIpOiBSdWxlLkZpeFtdID0+XG4gICAgICAgICAgICAgICAgICBidWlsZEZpeGVzKG1hdGNoZXMsIGZpeGVyKVxuICAgICAgICAgICAgICA6IHZvaWQgMDtcblxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIC4uLihmaXggIT09IHZvaWQgMCAmJiB7IGZpeCB9KSxcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogXCJwcmVmZXJWaU1vY2tlZEltcG9ydFwiLFxuICAgICAgICAgICAgbm9kZTogbWF0Y2gubm9kZSxcbiAgICAgICAgICAgIC4uLihmaXggIT09IHZvaWQgMCAmJiB7XG4gICAgICAgICAgICAgIHN1Z2dlc3Q6IFt7IGZpeCwgbWVzc2FnZUlkOiBcImlubGluZVZpTW9ja2VkSW1wb3J0XCIgfV0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KSBzYXRpc2ZpZXMgUnVsZS5SdWxlTGlzdGVuZXIsXG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJQcmVmZXIgaW5saW5pbmcgdmkuZm4gbW9ja3MgaW4gdmkubW9jay92aS5kb01vY2sgZmFjdG9yaWVzIGFuZCB1c2luZyB2aS5tb2NrZWQoLi4uKS5cIixcbiAgICAgIHJlY29tbWVuZGVkOiBmYWxzZSxcbiAgICAgIHVybDogXCJodHRwczovL2dpdGh1Yi5jb20vcGFybG90aS9lc2xpbnQtcGx1Z2luL2Jsb2IvbWFpbi9kb2NzL3J1bGVzL3ByZWZlci12aS1tb2NrZWQtaW1wb3J0Lm1kXCIsXG4gICAgfSxcbiAgICBmaXhhYmxlOiBcImNvZGVcIixcbiAgICBoYXNTdWdnZXN0aW9uczogdHJ1ZSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgaW5saW5lVmlNb2NrZWRJbXBvcnQ6XG4gICAgICAgIFwiSW5saW5lIHRoZSB2aS5mbiBtb2NrcyBhbmQgdXNlIHZpLm1vY2tlZCguLi4pIGZvciBjYWxscy5cIixcbiAgICAgIHByZWZlclZpTW9ja2VkSW1wb3J0OlxuICAgICAgICBcIklubGluZSB2aS5mbiBtb2NrcyBpbiB0aGUgdmkubW9jay92aS5kb01vY2sgZmFjdG9yeSBhbmQgdXNlIHZpLm1vY2tlZCguLi4pIGZvciBjYWxscy5cIixcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogXCJzdWdnZXN0aW9uXCIsXG4gIH0sXG59O1xuXG5leHBvcnQgeyBwcmVmZXJWaU1vY2tlZEltcG9ydFJ1bGUgfTtcbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codeperfect/eslint-plugin",
3
- "version": "2.6.0",
3
+ "version": "2.7.0",
4
4
  "description": "Custom ESLint rules for TypeScript repositories",
5
5
  "license": "MIT",
6
6
  "repository": "github:parloti/eslint-plugin",
@@ -42,9 +42,9 @@
42
42
  "prettier": "npx --yes prettier --ignore-unknown --check .",
43
43
  "\n • ------------- fixing ------------- •": "",
44
44
  "eslint:fix": "npm run check:rules && npm run eslint -- --fix",
45
- "lint:fix": "npm run prettier:write && npm run eslint:fix",
45
+ "lint:fix": "npm run fmt && npm run eslint:fix",
46
46
  "lint:staged": "npx --yes tsx scripts/lint-staged.ts",
47
- "prettier:write": "npx --yes prettier --ignore-unknown --write .",
47
+ "fmt": "npm run prettier -- --write",
48
48
  "\n • ------------ helpers ------------ •": "",
49
49
  "check:rules": "npx --yes eslint-config-prettier eslint.config.ts",
50
50
  "eslint:inspect": "npx --yes @eslint/config-inspector",
@@ -79,7 +79,7 @@
79
79
  },
80
80
  "devDependencies": {
81
81
  "@codeperfect/commitlint-config-emoji": "^1.0.0",
82
- "@codeperfect/eslint-config": "^1.14.0",
82
+ "@codeperfect/eslint-config": "^1.15.0",
83
83
  "@commitlint/cz-commitlint": "^21.2.2",
84
84
  "@eslint-community/eslint-plugin-eslint-comments": "^4.7.2",
85
85
  "@eslint/js": "^10.0.1",
@@ -89,40 +89,40 @@
89
89
  "@stylistic/eslint-plugin": "^5.10.0",
90
90
  "@types/lodash-es": "^4.17.12",
91
91
  "@types/node": "^26.4.0",
92
- "@typescript-eslint/rule-tester": "^8.68.0",
92
+ "@typescript-eslint/rule-tester": "^8.69.0",
93
93
  "@vitest/coverage-v8": "^4.1.11",
94
94
  "@vitest/eslint-plugin": "^1.6.27",
95
95
  "chalk": "^6.0.0",
96
- "eslint": "^10.9.1",
96
+ "eslint": "^10.10.0",
97
97
  "eslint-config-prettier": "^10.1.8",
98
98
  "eslint-import-resolver-typescript": "^4.4.5",
99
99
  "eslint-plugin-boundaries": "^7.2.0",
100
100
  "eslint-plugin-eslint-plugin": "^7.6.2",
101
101
  "eslint-plugin-import-x": "^4.17.1",
102
102
  "eslint-plugin-jasmine": "^4.2.2",
103
- "eslint-plugin-jest": "^29.16.5",
104
- "eslint-plugin-jsdoc": "^64.2.1",
105
- "eslint-plugin-perfectionist": "^5.10.1",
103
+ "eslint-plugin-jest": "^29.16.6",
104
+ "eslint-plugin-jsdoc": "^64.3.5",
105
+ "eslint-plugin-perfectionist": "^5.11.0",
106
106
  "eslint-plugin-prettier": "^5.5.6",
107
107
  "eslint-plugin-rxjs-x": "^1.0.6",
108
- "eslint-plugin-unicorn": "^73.0.0",
109
- "globals": "^17.11.0",
108
+ "eslint-plugin-unicorn": "^74.0.0",
109
+ "globals": "^17.12.0",
110
110
  "husky": "^9.1.7",
111
111
  "jiti": "^2.7.0",
112
- "lint-staged": "^17.4.1",
112
+ "lint-staged": "^17.5.0",
113
113
  "lodash-es": "^4.18.1",
114
114
  "patch-package": "^8.0.1",
115
115
  "prettier": "^3.9.6",
116
116
  "rimraf": "^6.1.3",
117
117
  "semantic-release": "^25.0.9",
118
- "tsc-alias": "^1.9.2",
118
+ "tsc-alias": "^1.9.4",
119
119
  "typedoc": "^0.28.20",
120
120
  "typedoc-plugin-markdown": "^4.13.0",
121
121
  "typescript": "^6.0.3",
122
- "typescript-eslint": "^8.68.0",
122
+ "typescript-eslint": "^8.69.0",
123
123
  "vitest": "^4.1.11"
124
124
  },
125
125
  "peerDependencies": {
126
- "eslint": ">=10.9.1"
126
+ "eslint": ">=10.10.0"
127
127
  }
128
128
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-import-export-extensions-rule.d.ts","sourceRoot":"","sources":["../../../../src/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAgJnC,8FAA8F;AAC9F,QAAA,MAAM,4BAA4B,EAAE,IAAI,CAAC,UA0BxC,CAAC;AAEF,OAAO,EAAE,4BAA4B,EAAE,CAAC"}