@codeperfect/eslint-plugin 2.3.0 → 2.4.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.
@@ -1,4 +1,4 @@
1
- export { assertActualExpectedNamesRule, barrelFilesExportsOnlyRule, consistentBarrelFilesRule, enforceAaaStructureRule, noImportExportAliasesRule, noImportExportExtensionsRule, noInterfaceMemberDocumentationRule, noMultipleDeclaratorsRule, noReexportsOutsideBarrelsRule, noUnusedExportsRule, preferInterfaceTypesRule, preferViMockedImportRule, requireActResultCaptureRule, requireExampleLanguageRule, requireTestCompanionRule, singleActStatementRule, singleLineJsdocRule, } from "../domain/index.js";
1
+ export { assertActualExpectedNamesRule, barrelFilesExportsOnlyRule, consistentBarrelFilesRule, enforceAaaStructureRule, noImportExportAliasesRule, noImportExportExtensionsRule, noInterfaceMemberDocumentationRule, noMultipleDeclaratorsRule, noReexportsOutsideBarrelsRule, noUnsafeVitestMockFactoryCastRule, noUnusedExportsRule, preferInterfaceTypesRule, preferViMockedImportRule, requireActResultCaptureRule, requireExampleLanguageRule, requireTestCompanionRule, singleActStatementRule, singleLineJsdocRule, } from "../domain/index.js";
2
2
  export { customRules } from "./custom-rules.js";
3
3
  export type { CustomRuleEntry } from "./custom-rules.js";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,4BAA4B,EAC5B,kCAAkC,EAClC,yBAAyB,EACzB,6BAA6B,EAC7B,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,yBAAyB,EACzB,uBAAuB,EACvB,yBAAyB,EACzB,4BAA4B,EAC5B,kCAAkC,EAClC,yBAAyB,EACzB,6BAA6B,EAC7B,iCAAiC,EACjC,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EACxB,2BAA2B,EAC3B,0BAA0B,EAC1B,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,3 +1,3 @@
1
- export { assertActualExpectedNamesRule, barrelFilesExportsOnlyRule, consistentBarrelFilesRule, enforceAaaStructureRule, noImportExportAliasesRule, noImportExportExtensionsRule, noInterfaceMemberDocumentationRule, noMultipleDeclaratorsRule, noReexportsOutsideBarrelsRule, noUnusedExportsRule, preferInterfaceTypesRule, preferViMockedImportRule, requireActResultCaptureRule, requireExampleLanguageRule, requireTestCompanionRule, singleActStatementRule, singleLineJsdocRule, } from "../domain/index.js";
1
+ export { assertActualExpectedNamesRule, barrelFilesExportsOnlyRule, consistentBarrelFilesRule, enforceAaaStructureRule, noImportExportAliasesRule, noImportExportExtensionsRule, noInterfaceMemberDocumentationRule, noMultipleDeclaratorsRule, noReexportsOutsideBarrelsRule, noUnsafeVitestMockFactoryCastRule, noUnusedExportsRule, preferInterfaceTypesRule, preferViMockedImportRule, requireActResultCaptureRule, requireExampleLanguageRule, requireTestCompanionRule, singleActStatementRule, singleLineJsdocRule, } from "../domain/index.js";
2
2
  export { customRules } from "./custom-rules.js";
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBwbGljYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLDZCQUE2QixFQUM3QiwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2Qix5QkFBeUIsRUFDekIsNEJBQTRCLEVBQzVCLGtDQUFrQyxFQUNsQyx5QkFBeUIsRUFDekIsNkJBQTZCLEVBQzdCLG1CQUFtQixFQUNuQix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLDJCQUEyQixFQUMzQiwwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixtQkFBbUIsR0FDcEIsTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcbiAgYXNzZXJ0QWN0dWFsRXhwZWN0ZWROYW1lc1J1bGUsXG4gIGJhcnJlbEZpbGVzRXhwb3J0c09ubHlSdWxlLFxuICBjb25zaXN0ZW50QmFycmVsRmlsZXNSdWxlLFxuICBlbmZvcmNlQWFhU3RydWN0dXJlUnVsZSxcbiAgbm9JbXBvcnRFeHBvcnRBbGlhc2VzUnVsZSxcbiAgbm9JbXBvcnRFeHBvcnRFeHRlbnNpb25zUnVsZSxcbiAgbm9JbnRlcmZhY2VNZW1iZXJEb2N1bWVudGF0aW9uUnVsZSxcbiAgbm9NdWx0aXBsZURlY2xhcmF0b3JzUnVsZSxcbiAgbm9SZWV4cG9ydHNPdXRzaWRlQmFycmVsc1J1bGUsXG4gIG5vVW51c2VkRXhwb3J0c1J1bGUsXG4gIHByZWZlckludGVyZmFjZVR5cGVzUnVsZSxcbiAgcHJlZmVyVmlNb2NrZWRJbXBvcnRSdWxlLFxuICByZXF1aXJlQWN0UmVzdWx0Q2FwdHVyZVJ1bGUsXG4gIHJlcXVpcmVFeGFtcGxlTGFuZ3VhZ2VSdWxlLFxuICByZXF1aXJlVGVzdENvbXBhbmlvblJ1bGUsXG4gIHNpbmdsZUFjdFN0YXRlbWVudFJ1bGUsXG4gIHNpbmdsZUxpbmVKc2RvY1J1bGUsXG59IGZyb20gXCIuLi9kb21haW5cIjtcbmV4cG9ydCB7IGN1c3RvbVJ1bGVzIH0gZnJvbSBcIi4vY3VzdG9tLXJ1bGVzXCI7XG5leHBvcnQgdHlwZSB7IEN1c3RvbVJ1bGVFbnRyeSB9IGZyb20gXCIuL2N1c3RvbS1ydWxlc1wiO1xuIl19
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBwbGljYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLDZCQUE2QixFQUM3QiwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLHVCQUF1QixFQUN2Qix5QkFBeUIsRUFDekIsNEJBQTRCLEVBQzVCLGtDQUFrQyxFQUNsQyx5QkFBeUIsRUFDekIsNkJBQTZCLEVBQzdCLGlDQUFpQyxFQUNqQyxtQkFBbUIsRUFDbkIsd0JBQXdCLEVBQ3hCLHdCQUF3QixFQUN4QiwyQkFBMkIsRUFDM0IsMEJBQTBCLEVBQzFCLHdCQUF3QixFQUN4QixzQkFBc0IsRUFDdEIsbUJBQW1CLEdBQ3BCLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIGFzc2VydEFjdHVhbEV4cGVjdGVkTmFtZXNSdWxlLFxuICBiYXJyZWxGaWxlc0V4cG9ydHNPbmx5UnVsZSxcbiAgY29uc2lzdGVudEJhcnJlbEZpbGVzUnVsZSxcbiAgZW5mb3JjZUFhYVN0cnVjdHVyZVJ1bGUsXG4gIG5vSW1wb3J0RXhwb3J0QWxpYXNlc1J1bGUsXG4gIG5vSW1wb3J0RXhwb3J0RXh0ZW5zaW9uc1J1bGUsXG4gIG5vSW50ZXJmYWNlTWVtYmVyRG9jdW1lbnRhdGlvblJ1bGUsXG4gIG5vTXVsdGlwbGVEZWNsYXJhdG9yc1J1bGUsXG4gIG5vUmVleHBvcnRzT3V0c2lkZUJhcnJlbHNSdWxlLFxuICBub1Vuc2FmZVZpdGVzdE1vY2tGYWN0b3J5Q2FzdFJ1bGUsXG4gIG5vVW51c2VkRXhwb3J0c1J1bGUsXG4gIHByZWZlckludGVyZmFjZVR5cGVzUnVsZSxcbiAgcHJlZmVyVmlNb2NrZWRJbXBvcnRSdWxlLFxuICByZXF1aXJlQWN0UmVzdWx0Q2FwdHVyZVJ1bGUsXG4gIHJlcXVpcmVFeGFtcGxlTGFuZ3VhZ2VSdWxlLFxuICByZXF1aXJlVGVzdENvbXBhbmlvblJ1bGUsXG4gIHNpbmdsZUFjdFN0YXRlbWVudFJ1bGUsXG4gIHNpbmdsZUxpbmVKc2RvY1J1bGUsXG59IGZyb20gXCIuLi9kb21haW5cIjtcbmV4cG9ydCB7IGN1c3RvbVJ1bGVzIH0gZnJvbSBcIi4vY3VzdG9tLXJ1bGVzXCI7XG5leHBvcnQgdHlwZSB7IEN1c3RvbVJ1bGVFbnRyeSB9IGZyb20gXCIuL2N1c3RvbS1ydWxlc1wiO1xuIl19
@@ -52,8 +52,8 @@ const noUnusedExportsRule = {
52
52
  url: "https://github.com/parloti/eslint-plugin/blob/main/docs/rules/no-unused-exports.md",
53
53
  },
54
54
  messages: {
55
- unusedExport: "Export '{{exportedName}}' is never consumed by any file in the project.",
56
- usedOnlyInTests: "Export '{{exportedName}}' is consumed only by test files.",
55
+ unusedExport: "Export '{{exportedName}}' is never consumed by any file in the project; make it private by removing the export.",
56
+ usedOnlyInTests: "Export '{{exportedName}}' is consumed only by test files; move it to the test file or a test utilities folder.",
57
57
  },
58
58
  schema: [
59
59
  {
@@ -79,4 +79,4 @@ const noUnusedExportsRule = {
79
79
  },
80
80
  };
81
81
  export { noUnusedExportsRule };
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vYXJjaGl0ZWN0dXJlL25vLXVudXNlZC1leHBvcnRzL3J1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBRTdCLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsMEJBQTBCLEVBQzFCLFVBQVUsRUFDVixrQkFBa0IsRUFDbEIsZUFBZSxHQUNoQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixvQkFBb0IsR0FDckIsTUFBTSwrQkFBK0IsQ0FBQztBQUV2Qyw4REFBOEQ7QUFDOUQsTUFBTSxtQkFBbUIsR0FBb0I7SUFDM0MsTUFBTSxDQUFDLE9BQXlCO1FBQzlCLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUVsQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU5QyxJQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUVoRSxJQUFJLGVBQWUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsT0FBTztZQUNMLE9BQU8sQ0FBQyxJQUFJO2dCQUNWLE1BQU0sZ0JBQWdCLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUU1RCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDbEMsT0FBTztnQkFDVCxDQUFDO2dCQUVELEtBQUssTUFBTSxPQUFPLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztvQkFDdkMsTUFBTSxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FDN0Msc0JBQXNCLENBQ3BCLE9BQU8sRUFDUCxRQUFRLEVBQ1IsS0FBSyxFQUNMLFdBQVcsRUFDWCxPQUFPLENBQ1IsQ0FDRixDQUFDO29CQUVGLElBQUksbUJBQW1CLEtBQUssWUFBWSxFQUFFLENBQUM7d0JBQ3pDLFNBQVM7b0JBQ1gsQ0FBQztvQkFFRCxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNiLElBQUksRUFBRSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFO3dCQUM1QyxTQUFTLEVBQ1AsbUJBQW1CLEtBQUssV0FBVzs0QkFDakMsQ0FBQyxDQUFDLGlCQUFpQjs0QkFDbkIsQ0FBQyxDQUFDLGNBQWM7d0JBQ3BCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtxQkFDbkIsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLEVBQUU7UUFDSixjQUFjLEVBQUU7WUFDZDtnQkFDRSxjQUFjLEVBQUUsQ0FBQyxHQUFHLHdCQUF3QixDQUFDO2dCQUM3QyxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7YUFDbEQ7U0FDRjtRQUNELElBQUksRUFBRTtZQUNKLFdBQVcsRUFDVCxrRUFBa0U7WUFDcEUsV0FBVyxFQUFFLEtBQUs7WUFDbEIsR0FBRyxFQUFFLG9GQUFvRjtTQUMxRjtRQUNELFFBQVEsRUFBRTtZQUNSLFlBQVksRUFDVix5RUFBeUU7WUFDM0UsZUFBZSxFQUNiLDJEQUEyRDtTQUM5RDtRQUNELE1BQU0sRUFBRTtZQUNOO2dCQUNFLG9CQUFvQixFQUFFLEtBQUs7Z0JBQzNCLFVBQVUsRUFBRTtvQkFDVixjQUFjLEVBQUU7d0JBQ2QsV0FBVyxFQUFFLG9EQUFvRDt3QkFDakUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTt3QkFDekIsUUFBUSxFQUFFLENBQUM7d0JBQ1gsSUFBSSxFQUFFLE9BQU87cUJBQ2Q7b0JBQ0QsZ0JBQWdCLEVBQUU7d0JBQ2hCLFdBQVcsRUFDVCxnRUFBZ0U7d0JBQ2xFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7d0JBQ3pCLFFBQVEsRUFBRSxDQUFDO3dCQUNYLElBQUksRUFBRSxPQUFPO3FCQUNkO2lCQUNGO2dCQUNELElBQUksRUFBRSxRQUFRO2FBQ2Y7U0FDRjtRQUNELElBQUksRUFBRSxTQUFTO0tBQ2hCO0NBQ0YsQ0FBQztBQUVGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmltcG9ydCB7XG4gIERFRkFVTFRfUFVCTElDX0FQSV9GSUxFUyxcbiAgREVGQVVMVF9URVNUX0ZJTEVfUEFUVEVSTlMsXG4gIGdldE9wdGlvbnMsXG4gIGlzTGludGFibGVGaWxlbmFtZSxcbiAgaXNQdWJsaWNBcGlGaWxlLFxufSBmcm9tIFwiLi9uby11bnVzZWQtZXhwb3J0cy1vcHRpb25zXCI7XG5pbXBvcnQge1xuICBjbGFzc2lmeUV4cG9ydFVzYWdlLFxuICBjb2xsZWN0Q3Jvc3NGaWxlVXNhZ2VzLFxuICBjb2xsZWN0RXhwb3J0ZWRFbGVtZW50cyxcbiAgZ2V0VHlwZVNjcmlwdFByb2dyYW0sXG59IGZyb20gXCIuL25vLXVudXNlZC1leHBvcnRzLXV0aWxpdGllc1wiO1xuXG4vKiogRVNMaW50IHJ1bGUgZmxhZ2dpbmcgZXhwb3J0cyB1bnVzZWQgaW4gcHJvZHVjdGlvbiBjb2RlLiAqL1xuY29uc3Qgbm9VbnVzZWRFeHBvcnRzUnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFJ1bGUuUnVsZUxpc3RlbmVyIHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldE9wdGlvbnMoY29udGV4dC5vcHRpb25zKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGNvbnRleHQuZmlsZW5hbWU7XG5cbiAgICBpZiAoIWlzTGludGFibGVGaWxlbmFtZShmaWxlbmFtZSkpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ncmFtID0gZ2V0VHlwZVNjcmlwdFByb2dyYW0oY29udGV4dCk7XG5cbiAgICBpZiAocHJvZ3JhbSA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBwYXRoLnJlc29sdmUocHJvZ3JhbS5nZXRDdXJyZW50RGlyZWN0b3J5KCkpO1xuXG4gICAgaWYgKGlzUHVibGljQXBpRmlsZShmaWxlbmFtZSwgc3RhdGUsIHByb2plY3RSb290KSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXhwb3J0ZWRFbGVtZW50cyA9IGNvbGxlY3RFeHBvcnRlZEVsZW1lbnRzKG5vZGUuYm9keSk7XG5cbiAgICAgICAgaWYgKGV4cG9ydGVkRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGV4cG9ydGVkRWxlbWVudHMpIHtcbiAgICAgICAgICBjb25zdCB1c2FnZUNsYXNzaWZpY2F0aW9uID0gY2xhc3NpZnlFeHBvcnRVc2FnZShcbiAgICAgICAgICAgIGNvbGxlY3RDcm9zc0ZpbGVVc2FnZXMoXG4gICAgICAgICAgICAgIHByb2dyYW0sXG4gICAgICAgICAgICAgIGZpbGVuYW1lLFxuICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgcHJvamVjdFJvb3QsXG4gICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodXNhZ2VDbGFzc2lmaWNhdGlvbiA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIGRhdGE6IHsgZXhwb3J0ZWROYW1lOiBlbGVtZW50LmV4cG9ydGVkTmFtZSB9LFxuICAgICAgICAgICAgbWVzc2FnZUlkOlxuICAgICAgICAgICAgICB1c2FnZUNsYXNzaWZpY2F0aW9uID09PSBcInRlc3Qtb25seVwiXG4gICAgICAgICAgICAgICAgPyBcInVzZWRPbmx5SW5UZXN0c1wiXG4gICAgICAgICAgICAgICAgOiBcInVudXNlZEV4cG9ydFwiLFxuICAgICAgICAgICAgbm9kZTogZWxlbWVudC5ub2RlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkZWZhdWx0T3B0aW9uczogW1xuICAgICAge1xuICAgICAgICBwdWJsaWNBcGlGaWxlczogWy4uLkRFRkFVTFRfUFVCTElDX0FQSV9GSUxFU10sXG4gICAgICAgIHRlc3RGaWxlUGF0dGVybnM6IFsuLi5ERUZBVUxUX1RFU1RfRklMRV9QQVRURVJOU10sXG4gICAgICB9LFxuICAgIF0sXG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRGlzYWxsb3cgZXhwb3J0cyB0aGF0IGFyZSB1bnVzZWQgb3IgY29uc3VtZWQgb25seSBieSB0ZXN0IGZpbGVzLlwiLFxuICAgICAgcmVjb21tZW5kZWQ6IGZhbHNlLFxuICAgICAgdXJsOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9wYXJsb3RpL2VzbGludC1wbHVnaW4vYmxvYi9tYWluL2RvY3MvcnVsZXMvbm8tdW51c2VkLWV4cG9ydHMubWRcIixcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICB1bnVzZWRFeHBvcnQ6XG4gICAgICAgIFwiRXhwb3J0ICd7e2V4cG9ydGVkTmFtZX19JyBpcyBuZXZlciBjb25zdW1lZCBieSBhbnkgZmlsZSBpbiB0aGUgcHJvamVjdC5cIixcbiAgICAgIHVzZWRPbmx5SW5UZXN0czpcbiAgICAgICAgXCJFeHBvcnQgJ3t7ZXhwb3J0ZWROYW1lfX0nIGlzIGNvbnN1bWVkIG9ubHkgYnkgdGVzdCBmaWxlcy5cIixcbiAgICB9LFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBwdWJsaWNBcGlGaWxlczoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRmlsZSBnbG9icyB0aGF0IGRlZmluZSBwdWJsaWMgQVBJIGV4cG9ydCBzdXJmYWNlcy5cIixcbiAgICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGVzdEZpbGVQYXR0ZXJuczoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgIFwiRmlsZSBnbG9icyB0cmVhdGVkIGFzIHRlc3RzIHdoZW4gY2xhc3NpZnlpbmcgZXhwb3J0IGNvbnN1bWVycy5cIixcbiAgICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdHlwZTogXCJwcm9ibGVtXCIsXG4gIH0sXG59O1xuXG5leHBvcnQgeyBub1VudXNlZEV4cG9ydHNSdWxlIH07XG4iXX0=
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vYXJjaGl0ZWN0dXJlL25vLXVudXNlZC1leHBvcnRzL3J1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBRTdCLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsMEJBQTBCLEVBQzFCLFVBQVUsRUFDVixrQkFBa0IsRUFDbEIsZUFBZSxHQUNoQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixvQkFBb0IsR0FDckIsTUFBTSwrQkFBK0IsQ0FBQztBQUV2Qyw4REFBOEQ7QUFDOUQsTUFBTSxtQkFBbUIsR0FBb0I7SUFDM0MsTUFBTSxDQUFDLE9BQXlCO1FBQzlCLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUVsQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNsQyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU5QyxJQUFJLE9BQU8sS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUVoRSxJQUFJLGVBQWUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbEQsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsT0FBTztZQUNMLE9BQU8sQ0FBQyxJQUFJO2dCQUNWLE1BQU0sZ0JBQWdCLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUU1RCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDbEMsT0FBTztnQkFDVCxDQUFDO2dCQUVELEtBQUssTUFBTSxPQUFPLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztvQkFDdkMsTUFBTSxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FDN0Msc0JBQXNCLENBQ3BCLE9BQU8sRUFDUCxRQUFRLEVBQ1IsS0FBSyxFQUNMLFdBQVcsRUFDWCxPQUFPLENBQ1IsQ0FDRixDQUFDO29CQUVGLElBQUksbUJBQW1CLEtBQUssWUFBWSxFQUFFLENBQUM7d0JBQ3pDLFNBQVM7b0JBQ1gsQ0FBQztvQkFFRCxPQUFPLENBQUMsTUFBTSxDQUFDO3dCQUNiLElBQUksRUFBRSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFO3dCQUM1QyxTQUFTLEVBQ1AsbUJBQW1CLEtBQUssV0FBVzs0QkFDakMsQ0FBQyxDQUFDLGlCQUFpQjs0QkFDbkIsQ0FBQyxDQUFDLGNBQWM7d0JBQ3BCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtxQkFDbkIsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLEVBQUU7UUFDSixjQUFjLEVBQUU7WUFDZDtnQkFDRSxjQUFjLEVBQUUsQ0FBQyxHQUFHLHdCQUF3QixDQUFDO2dCQUM3QyxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7YUFDbEQ7U0FDRjtRQUNELElBQUksRUFBRTtZQUNKLFdBQVcsRUFDVCxrRUFBa0U7WUFDcEUsV0FBVyxFQUFFLEtBQUs7WUFDbEIsR0FBRyxFQUFFLG9GQUFvRjtTQUMxRjtRQUNELFFBQVEsRUFBRTtZQUNSLFlBQVksRUFDVixpSEFBaUg7WUFDbkgsZUFBZSxFQUNiLGdIQUFnSDtTQUNuSDtRQUNELE1BQU0sRUFBRTtZQUNOO2dCQUNFLG9CQUFvQixFQUFFLEtBQUs7Z0JBQzNCLFVBQVUsRUFBRTtvQkFDVixjQUFjLEVBQUU7d0JBQ2QsV0FBVyxFQUFFLG9EQUFvRDt3QkFDakUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTt3QkFDekIsUUFBUSxFQUFFLENBQUM7d0JBQ1gsSUFBSSxFQUFFLE9BQU87cUJBQ2Q7b0JBQ0QsZ0JBQWdCLEVBQUU7d0JBQ2hCLFdBQVcsRUFDVCxnRUFBZ0U7d0JBQ2xFLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7d0JBQ3pCLFFBQVEsRUFBRSxDQUFDO3dCQUNYLElBQUksRUFBRSxPQUFPO3FCQUNkO2lCQUNGO2dCQUNELElBQUksRUFBRSxRQUFRO2FBQ2Y7U0FDRjtRQUNELElBQUksRUFBRSxTQUFTO0tBQ2hCO0NBQ0YsQ0FBQztBQUVGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmltcG9ydCB7XG4gIERFRkFVTFRfUFVCTElDX0FQSV9GSUxFUyxcbiAgREVGQVVMVF9URVNUX0ZJTEVfUEFUVEVSTlMsXG4gIGdldE9wdGlvbnMsXG4gIGlzTGludGFibGVGaWxlbmFtZSxcbiAgaXNQdWJsaWNBcGlGaWxlLFxufSBmcm9tIFwiLi9uby11bnVzZWQtZXhwb3J0cy1vcHRpb25zXCI7XG5pbXBvcnQge1xuICBjbGFzc2lmeUV4cG9ydFVzYWdlLFxuICBjb2xsZWN0Q3Jvc3NGaWxlVXNhZ2VzLFxuICBjb2xsZWN0RXhwb3J0ZWRFbGVtZW50cyxcbiAgZ2V0VHlwZVNjcmlwdFByb2dyYW0sXG59IGZyb20gXCIuL25vLXVudXNlZC1leHBvcnRzLXV0aWxpdGllc1wiO1xuXG4vKiogRVNMaW50IHJ1bGUgZmxhZ2dpbmcgZXhwb3J0cyB1bnVzZWQgaW4gcHJvZHVjdGlvbiBjb2RlLiAqL1xuY29uc3Qgbm9VbnVzZWRFeHBvcnRzUnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFJ1bGUuUnVsZUxpc3RlbmVyIHtcbiAgICBjb25zdCBzdGF0ZSA9IGdldE9wdGlvbnMoY29udGV4dC5vcHRpb25zKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGNvbnRleHQuZmlsZW5hbWU7XG5cbiAgICBpZiAoIWlzTGludGFibGVGaWxlbmFtZShmaWxlbmFtZSkpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ncmFtID0gZ2V0VHlwZVNjcmlwdFByb2dyYW0oY29udGV4dCk7XG5cbiAgICBpZiAocHJvZ3JhbSA9PT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgY29uc3QgcHJvamVjdFJvb3QgPSBwYXRoLnJlc29sdmUocHJvZ3JhbS5nZXRDdXJyZW50RGlyZWN0b3J5KCkpO1xuXG4gICAgaWYgKGlzUHVibGljQXBpRmlsZShmaWxlbmFtZSwgc3RhdGUsIHByb2plY3RSb290KSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXhwb3J0ZWRFbGVtZW50cyA9IGNvbGxlY3RFeHBvcnRlZEVsZW1lbnRzKG5vZGUuYm9keSk7XG5cbiAgICAgICAgaWYgKGV4cG9ydGVkRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGV4cG9ydGVkRWxlbWVudHMpIHtcbiAgICAgICAgICBjb25zdCB1c2FnZUNsYXNzaWZpY2F0aW9uID0gY2xhc3NpZnlFeHBvcnRVc2FnZShcbiAgICAgICAgICAgIGNvbGxlY3RDcm9zc0ZpbGVVc2FnZXMoXG4gICAgICAgICAgICAgIHByb2dyYW0sXG4gICAgICAgICAgICAgIGZpbGVuYW1lLFxuICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgcHJvamVjdFJvb3QsXG4gICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAodXNhZ2VDbGFzc2lmaWNhdGlvbiA9PT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIGRhdGE6IHsgZXhwb3J0ZWROYW1lOiBlbGVtZW50LmV4cG9ydGVkTmFtZSB9LFxuICAgICAgICAgICAgbWVzc2FnZUlkOlxuICAgICAgICAgICAgICB1c2FnZUNsYXNzaWZpY2F0aW9uID09PSBcInRlc3Qtb25seVwiXG4gICAgICAgICAgICAgICAgPyBcInVzZWRPbmx5SW5UZXN0c1wiXG4gICAgICAgICAgICAgICAgOiBcInVudXNlZEV4cG9ydFwiLFxuICAgICAgICAgICAgbm9kZTogZWxlbWVudC5ub2RlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkZWZhdWx0T3B0aW9uczogW1xuICAgICAge1xuICAgICAgICBwdWJsaWNBcGlGaWxlczogWy4uLkRFRkFVTFRfUFVCTElDX0FQSV9GSUxFU10sXG4gICAgICAgIHRlc3RGaWxlUGF0dGVybnM6IFsuLi5ERUZBVUxUX1RFU1RfRklMRV9QQVRURVJOU10sXG4gICAgICB9LFxuICAgIF0sXG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRGlzYWxsb3cgZXhwb3J0cyB0aGF0IGFyZSB1bnVzZWQgb3IgY29uc3VtZWQgb25seSBieSB0ZXN0IGZpbGVzLlwiLFxuICAgICAgcmVjb21tZW5kZWQ6IGZhbHNlLFxuICAgICAgdXJsOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9wYXJsb3RpL2VzbGludC1wbHVnaW4vYmxvYi9tYWluL2RvY3MvcnVsZXMvbm8tdW51c2VkLWV4cG9ydHMubWRcIixcbiAgICB9LFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICB1bnVzZWRFeHBvcnQ6XG4gICAgICAgIFwiRXhwb3J0ICd7e2V4cG9ydGVkTmFtZX19JyBpcyBuZXZlciBjb25zdW1lZCBieSBhbnkgZmlsZSBpbiB0aGUgcHJvamVjdDsgbWFrZSBpdCBwcml2YXRlIGJ5IHJlbW92aW5nIHRoZSBleHBvcnQuXCIsXG4gICAgICB1c2VkT25seUluVGVzdHM6XG4gICAgICAgIFwiRXhwb3J0ICd7e2V4cG9ydGVkTmFtZX19JyBpcyBjb25zdW1lZCBvbmx5IGJ5IHRlc3QgZmlsZXM7IG1vdmUgaXQgdG8gdGhlIHRlc3QgZmlsZSBvciBhIHRlc3QgdXRpbGl0aWVzIGZvbGRlci5cIixcbiAgICB9LFxuICAgIHNjaGVtYTogW1xuICAgICAge1xuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBwdWJsaWNBcGlGaWxlczoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRmlsZSBnbG9icyB0aGF0IGRlZmluZSBwdWJsaWMgQVBJIGV4cG9ydCBzdXJmYWNlcy5cIixcbiAgICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGVzdEZpbGVQYXR0ZXJuczoge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgICAgIFwiRmlsZSBnbG9icyB0cmVhdGVkIGFzIHRlc3RzIHdoZW4gY2xhc3NpZnlpbmcgZXhwb3J0IGNvbnN1bWVycy5cIixcbiAgICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdHlwZTogXCJwcm9ibGVtXCIsXG4gIH0sXG59O1xuXG5leHBvcnQgeyBub1VudXNlZEV4cG9ydHNSdWxlIH07XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  export { barrelFilesExportsOnlyRule, consistentBarrelFilesRule, noImportExportAliasesRule, noImportExportExtensionsRule, noReexportsOutsideBarrelsRule, noUnusedExportsRule, } from "./architecture/index.js";
2
2
  export { noMultipleDeclaratorsRule, preferInterfaceTypesRule } from "./core/index.js";
3
3
  export { noInterfaceMemberDocumentationRule, requireExampleLanguageRule, singleLineJsdocRule, } from "./docs/index.js";
4
- export { assertActualExpectedNamesRule, enforceAaaStructureRule, preferViMockedImportRule, requireActResultCaptureRule, requireTestCompanionRule, singleActStatementRule, } from "./testing/index.js";
4
+ export { assertActualExpectedNamesRule, enforceAaaStructureRule, noUnsafeVitestMockFactoryCastRule, preferViMockedImportRule, requireActResultCaptureRule, requireTestCompanionRule, singleActStatementRule, } from "./testing/index.js";
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,4BAA4B,EAC5B,6BAA6B,EAC7B,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAC7E,OAAO,EACL,kCAAkC,EAClC,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/domain/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,4BAA4B,EAC5B,6BAA6B,EAC7B,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAC7E,OAAO,EACL,kCAAkC,EAClC,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,6BAA6B,EAC7B,uBAAuB,EACvB,iCAAiC,EACjC,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,WAAW,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export { barrelFilesExportsOnlyRule, consistentBarrelFilesRule, noImportExportAliasesRule, noImportExportExtensionsRule, noReexportsOutsideBarrelsRule, noUnusedExportsRule, } from "./architecture/index.js";
2
2
  export { noMultipleDeclaratorsRule, preferInterfaceTypesRule } from "./core/index.js";
3
3
  export { noInterfaceMemberDocumentationRule, requireExampleLanguageRule, singleLineJsdocRule, } from "./docs/index.js";
4
- export { assertActualExpectedNamesRule, enforceAaaStructureRule, preferViMockedImportRule, requireActResultCaptureRule, requireTestCompanionRule, singleActStatementRule, } from "./testing/index.js";
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG9tYWluL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsNkJBQTZCLEVBQzdCLG1CQUFtQixHQUNwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM3RSxPQUFPLEVBQ0wsa0NBQWtDLEVBQ2xDLDBCQUEwQixFQUMxQixtQkFBbUIsR0FDcEIsTUFBTSxRQUFRLENBQUM7QUFDaEIsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qix1QkFBdUIsRUFDdkIsd0JBQXdCLEVBQ3hCLDJCQUEyQixFQUMzQix3QkFBd0IsRUFDeEIsc0JBQXNCLEdBQ3ZCLE1BQU0sV0FBVyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHtcclxuICBiYXJyZWxGaWxlc0V4cG9ydHNPbmx5UnVsZSxcclxuICBjb25zaXN0ZW50QmFycmVsRmlsZXNSdWxlLFxyXG4gIG5vSW1wb3J0RXhwb3J0QWxpYXNlc1J1bGUsXHJcbiAgbm9JbXBvcnRFeHBvcnRFeHRlbnNpb25zUnVsZSxcclxuICBub1JlZXhwb3J0c091dHNpZGVCYXJyZWxzUnVsZSxcclxuICBub1VudXNlZEV4cG9ydHNSdWxlLFxyXG59IGZyb20gXCIuL2FyY2hpdGVjdHVyZVwiO1xyXG5leHBvcnQgeyBub011bHRpcGxlRGVjbGFyYXRvcnNSdWxlLCBwcmVmZXJJbnRlcmZhY2VUeXBlc1J1bGUgfSBmcm9tIFwiLi9jb3JlXCI7XHJcbmV4cG9ydCB7XHJcbiAgbm9JbnRlcmZhY2VNZW1iZXJEb2N1bWVudGF0aW9uUnVsZSxcclxuICByZXF1aXJlRXhhbXBsZUxhbmd1YWdlUnVsZSxcclxuICBzaW5nbGVMaW5lSnNkb2NSdWxlLFxyXG59IGZyb20gXCIuL2RvY3NcIjtcclxuZXhwb3J0IHtcclxuICBhc3NlcnRBY3R1YWxFeHBlY3RlZE5hbWVzUnVsZSxcclxuICBlbmZvcmNlQWFhU3RydWN0dXJlUnVsZSxcclxuICBwcmVmZXJWaU1vY2tlZEltcG9ydFJ1bGUsXHJcbiAgcmVxdWlyZUFjdFJlc3VsdENhcHR1cmVSdWxlLFxyXG4gIHJlcXVpcmVUZXN0Q29tcGFuaW9uUnVsZSxcclxuICBzaW5nbGVBY3RTdGF0ZW1lbnRSdWxlLFxyXG59IGZyb20gXCIuL3Rlc3RpbmdcIjtcclxuIl19
4
+ export { assertActualExpectedNamesRule, enforceAaaStructureRule, noUnsafeVitestMockFactoryCastRule, preferViMockedImportRule, requireActResultCaptureRule, requireTestCompanionRule, singleActStatementRule, } from "./testing/index.js";
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZG9tYWluL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsNkJBQTZCLEVBQzdCLG1CQUFtQixHQUNwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM3RSxPQUFPLEVBQ0wsa0NBQWtDLEVBQ2xDLDBCQUEwQixFQUMxQixtQkFBbUIsR0FDcEIsTUFBTSxRQUFRLENBQUM7QUFDaEIsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qix1QkFBdUIsRUFDdkIsaUNBQWlDLEVBQ2pDLHdCQUF3QixFQUN4QiwyQkFBMkIsRUFDM0Isd0JBQXdCLEVBQ3hCLHNCQUFzQixHQUN2QixNQUFNLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XHJcbiAgYmFycmVsRmlsZXNFeHBvcnRzT25seVJ1bGUsXHJcbiAgY29uc2lzdGVudEJhcnJlbEZpbGVzUnVsZSxcclxuICBub0ltcG9ydEV4cG9ydEFsaWFzZXNSdWxlLFxyXG4gIG5vSW1wb3J0RXhwb3J0RXh0ZW5zaW9uc1J1bGUsXHJcbiAgbm9SZWV4cG9ydHNPdXRzaWRlQmFycmVsc1J1bGUsXHJcbiAgbm9VbnVzZWRFeHBvcnRzUnVsZSxcclxufSBmcm9tIFwiLi9hcmNoaXRlY3R1cmVcIjtcclxuZXhwb3J0IHsgbm9NdWx0aXBsZURlY2xhcmF0b3JzUnVsZSwgcHJlZmVySW50ZXJmYWNlVHlwZXNSdWxlIH0gZnJvbSBcIi4vY29yZVwiO1xyXG5leHBvcnQge1xyXG4gIG5vSW50ZXJmYWNlTWVtYmVyRG9jdW1lbnRhdGlvblJ1bGUsXHJcbiAgcmVxdWlyZUV4YW1wbGVMYW5ndWFnZVJ1bGUsXHJcbiAgc2luZ2xlTGluZUpzZG9jUnVsZSxcclxufSBmcm9tIFwiLi9kb2NzXCI7XHJcbmV4cG9ydCB7XHJcbiAgYXNzZXJ0QWN0dWFsRXhwZWN0ZWROYW1lc1J1bGUsXHJcbiAgZW5mb3JjZUFhYVN0cnVjdHVyZVJ1bGUsXHJcbiAgbm9VbnNhZmVWaXRlc3RNb2NrRmFjdG9yeUNhc3RSdWxlLFxyXG4gIHByZWZlclZpTW9ja2VkSW1wb3J0UnVsZSxcclxuICByZXF1aXJlQWN0UmVzdWx0Q2FwdHVyZVJ1bGUsXHJcbiAgcmVxdWlyZVRlc3RDb21wYW5pb25SdWxlLFxyXG4gIHNpbmdsZUFjdFN0YXRlbWVudFJ1bGUsXHJcbn0gZnJvbSBcIi4vdGVzdGluZ1wiO1xyXG4iXX0=
@@ -1,5 +1,6 @@
1
1
  export { assertActualExpectedNamesRule } from "./assert-actual-expected-names/index.js";
2
2
  export { enforceAaaStructureRule } from "./enforce-aaa-structure/index.js";
3
+ export { noUnsafeVitestMockFactoryCastRule } from "./no-unsafe-vitest-mock-factory-cast/index.js";
3
4
  export { preferViMockedImportRule } from "./prefer-vi-mocked-import/index.js";
4
5
  export { requireActResultCaptureRule } from "./require-act-result-capture/index.js";
5
6
  export { requireTestCompanionRule } from "./require-test-companion/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,iCAAiC,EAAE,MAAM,sCAAsC,CAAC;AACzF,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -1,7 +1,8 @@
1
1
  export { assertActualExpectedNamesRule } from "./assert-actual-expected-names/index.js";
2
2
  export { enforceAaaStructureRule } from "./enforce-aaa-structure/index.js";
3
+ export { noUnsafeVitestMockFactoryCastRule } from "./no-unsafe-vitest-mock-factory-cast/index.js";
3
4
  export { preferViMockedImportRule } from "./prefer-vi-mocked-import/index.js";
4
5
  export { requireActResultCaptureRule } from "./require-act-result-capture/index.js";
5
6
  export { requireTestCompanionRule } from "./require-test-companion/index.js";
6
7
  export { singleActStatementRule } from "./single-act-statement/index.js";
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBhc3NlcnRBY3R1YWxFeHBlY3RlZE5hbWVzUnVsZSB9IGZyb20gXCIuL2Fzc2VydC1hY3R1YWwtZXhwZWN0ZWQtbmFtZXNcIjtcbmV4cG9ydCB7IGVuZm9yY2VBYWFTdHJ1Y3R1cmVSdWxlIH0gZnJvbSBcIi4vZW5mb3JjZS1hYWEtc3RydWN0dXJlXCI7XG5leHBvcnQgeyBwcmVmZXJWaU1vY2tlZEltcG9ydFJ1bGUgfSBmcm9tIFwiLi9wcmVmZXItdmktbW9ja2VkLWltcG9ydFwiO1xuZXhwb3J0IHsgcmVxdWlyZUFjdFJlc3VsdENhcHR1cmVSdWxlIH0gZnJvbSBcIi4vcmVxdWlyZS1hY3QtcmVzdWx0LWNhcHR1cmVcIjtcbmV4cG9ydCB7IHJlcXVpcmVUZXN0Q29tcGFuaW9uUnVsZSB9IGZyb20gXCIuL3JlcXVpcmUtdGVzdC1jb21wYW5pb25cIjtcbmV4cG9ydCB7IHNpbmdsZUFjdFN0YXRlbWVudFJ1bGUgfSBmcm9tIFwiLi9zaW5nbGUtYWN0LXN0YXRlbWVudFwiO1xuIl19
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3RpbmcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDekYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDcEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBhc3NlcnRBY3R1YWxFeHBlY3RlZE5hbWVzUnVsZSB9IGZyb20gXCIuL2Fzc2VydC1hY3R1YWwtZXhwZWN0ZWQtbmFtZXNcIjtcbmV4cG9ydCB7IGVuZm9yY2VBYWFTdHJ1Y3R1cmVSdWxlIH0gZnJvbSBcIi4vZW5mb3JjZS1hYWEtc3RydWN0dXJlXCI7XG5leHBvcnQgeyBub1Vuc2FmZVZpdGVzdE1vY2tGYWN0b3J5Q2FzdFJ1bGUgfSBmcm9tIFwiLi9uby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0XCI7XG5leHBvcnQgeyBwcmVmZXJWaU1vY2tlZEltcG9ydFJ1bGUgfSBmcm9tIFwiLi9wcmVmZXItdmktbW9ja2VkLWltcG9ydFwiO1xuZXhwb3J0IHsgcmVxdWlyZUFjdFJlc3VsdENhcHR1cmVSdWxlIH0gZnJvbSBcIi4vcmVxdWlyZS1hY3QtcmVzdWx0LWNhcHR1cmVcIjtcbmV4cG9ydCB7IHJlcXVpcmVUZXN0Q29tcGFuaW9uUnVsZSB9IGZyb20gXCIuL3JlcXVpcmUtdGVzdC1jb21wYW5pb25cIjtcbmV4cG9ydCB7IHNpbmdsZUFjdFN0YXRlbWVudFJ1bGUgfSBmcm9tIFwiLi9zaW5nbGUtYWN0LXN0YXRlbWVudFwiO1xuIl19
@@ -0,0 +1,2 @@
1
+ export { noUnsafeVitestMockFactoryCastRule } from "./rule.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/no-unsafe-vitest-mock-factory-cast/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { noUnsafeVitestMockFactoryCastRule } from "./rule.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZG9tYWluL3Rlc3Rpbmcvbm8tdW5zYWZlLXZpdGVzdC1tb2NrLWZhY3RvcnktY2FzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBub1Vuc2FmZVZpdGVzdE1vY2tGYWN0b3J5Q2FzdFJ1bGUgfSBmcm9tIFwiLi9ydWxlXCI7XG4iXX0=
@@ -0,0 +1,5 @@
1
+ import type { Rule } from "eslint";
2
+ /** Disallows casted `vi.mock` and `vi.doMock` factories. */
3
+ declare const noUnsafeVitestMockFactoryCastRule: Rule.RuleModule;
4
+ export { noUnsafeVitestMockFactoryCastRule };
5
+ //# sourceMappingURL=rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rule.d.ts","sourceRoot":"","sources":["../../../../src/domain/testing/no-unsafe-vitest-mock-factory-cast/rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAuDnC,4DAA4D;AAC5D,QAAA,MAAM,iCAAiC,EAAE,IAAI,CAAC,UAkC7C,CAAC;AAyjBF,OAAO,EAAE,iCAAiC,EAAE,CAAC"}
@@ -0,0 +1,467 @@
1
+ import { AST_NODE_TYPES } from "@typescript-eslint/utils";
2
+ /** Supported `vi` mock method names. */
3
+ const supportedMockNames = new Set(["doMock", "mock"]);
4
+ /** Default suffix for generated namespace imports. */
5
+ const moduleTypeSuffix = "Module";
6
+ /** Disallows casted `vi.mock` and `vi.doMock` factories. */
7
+ const noUnsafeVitestMockFactoryCastRule = {
8
+ create(context) {
9
+ return {
10
+ CallExpression(node) {
11
+ const match = getMockFactoryMatch(node);
12
+ if (match === void 0) {
13
+ return;
14
+ }
15
+ context.report({
16
+ fix: match.canAutofix
17
+ ? (fixer) => buildFixes(context, fixer, match)
18
+ : void 0,
19
+ messageId: "noUnsafeVitestMockFactoryCast",
20
+ node: match.node,
21
+ });
22
+ },
23
+ };
24
+ },
25
+ meta: {
26
+ docs: {
27
+ description: "Disallow casted vi.mock and vi.doMock factories and prefer createMockProxy(...) for partial module mocks.",
28
+ recommended: true,
29
+ url: "https://github.com/parloti/eslint-plugin/blob/main/docs/rules/no-unsafe-vitest-mock-factory-cast.md",
30
+ },
31
+ fixable: "code",
32
+ messages: {
33
+ noUnsafeVitestMockFactoryCast: "Avoid casting vi.mock/vi.doMock factory results; use createMockProxy(...) with a type-only module import instead.",
34
+ },
35
+ schema: [],
36
+ type: "problem",
37
+ },
38
+ };
39
+ /**
40
+ * Builds all fixes for one unsafe mock factory.
41
+ * @param context Rule context.
42
+ * @param fixer ESLint fixer.
43
+ * @param match Unsafe mock factory details.
44
+ * @returns All fixer operations.
45
+ * @example
46
+ * ```ts
47
+ * // Internal helper for no-unsafe-vitest-mock-factory-cast.
48
+ * ```
49
+ */
50
+ function buildFixes(context, fixer, match) {
51
+ const sourceCode = context.sourceCode;
52
+ const moduleTypeImport = resolveModuleTypeImport(sourceCode, match.moduleSpecifier);
53
+ const factoryText = `createMockProxy<typeof ${moduleTypeImport.namespaceName}>(${sourceCode.getText(match.mockExpression)})`;
54
+ const fixes = [
55
+ fixer.replaceTextRange(match.mockFactoryNode.range, factoryText),
56
+ ];
57
+ if (!moduleTypeImport.isExisting) {
58
+ const importText = `import type * as ${moduleTypeImport.namespaceName} from ${JSON.stringify(match.moduleSpecifier)};`;
59
+ const insertionRange = getImportInsertionRange(sourceCode);
60
+ fixes.push(insertionRange === void 0
61
+ ? fixer.insertTextBeforeRange([0, 0], `${importText}\n\n`)
62
+ : fixer.insertTextAfterRange(insertionRange, `\n${importText}`));
63
+ }
64
+ return fixes;
65
+ }
66
+ /**
67
+ * Collects declaration identifiers from top-level declarations.
68
+ * @param declaration Declaration node.
69
+ * @param names Output name set.
70
+ * @example
71
+ * ```ts
72
+ * // Internal helper for no-unsafe-vitest-mock-factory-cast.
73
+ * ```
74
+ */
75
+ function collectDeclarationNames(declaration, names) {
76
+ if (declaration.type === AST_NODE_TYPES.FunctionDeclaration ||
77
+ declaration.type === AST_NODE_TYPES.ClassDeclaration) {
78
+ if (declaration.id !== null) {
79
+ names.add(declaration.id.name);
80
+ }
81
+ return;
82
+ }
83
+ if (declaration.type === AST_NODE_TYPES.VariableDeclaration) {
84
+ for (const variableDeclaration of declaration.declarations) {
85
+ collectPatternNames(variableDeclaration.id, names);
86
+ }
87
+ return;
88
+ }
89
+ if (declaration.type === AST_NODE_TYPES.TSTypeAliasDeclaration ||
90
+ declaration.type === AST_NODE_TYPES.TSInterfaceDeclaration ||
91
+ declaration.type === AST_NODE_TYPES.TSEnumDeclaration) {
92
+ names.add(declaration.id.name);
93
+ return;
94
+ }
95
+ if (declaration.id.type === AST_NODE_TYPES.Identifier) {
96
+ names.add(declaration.id.name);
97
+ }
98
+ }
99
+ /**
100
+ * Collects identifiers from a binding pattern.
101
+ * @param pattern Binding pattern.
102
+ * @param names Output name set.
103
+ * @example
104
+ * ```ts
105
+ * // Internal helper for no-unsafe-vitest-mock-factory-cast.
106
+ * ```
107
+ */
108
+ function collectPatternNames(pattern, names) {
109
+ if (pattern.type === AST_NODE_TYPES.Identifier) {
110
+ names.add(pattern.name);
111
+ return;
112
+ }
113
+ if (pattern.type === AST_NODE_TYPES.AssignmentPattern) {
114
+ collectPatternNames(pattern.left, names);
115
+ return;
116
+ }
117
+ if (pattern.type === AST_NODE_TYPES.RestElement) {
118
+ collectPatternNames(pattern.argument, names);
119
+ return;
120
+ }
121
+ if (pattern.type === AST_NODE_TYPES.ArrayPattern) {
122
+ for (const element of pattern.elements) {
123
+ if (element !== null) {
124
+ collectPatternNames(element, names);
125
+ }
126
+ }
127
+ }
128
+ if (pattern.type === AST_NODE_TYPES.ObjectPattern) {
129
+ for (const property of pattern.properties) {
130
+ if (property.type === AST_NODE_TYPES.Property) {
131
+ collectPatternNames(property.value, names);
132
+ }
133
+ if (property.type === AST_NODE_TYPES.RestElement) {
134
+ collectPatternNames(property.argument, names);
135
+ }
136
+ }
137
+ }
138
+ }
139
+ /**
140
+ * Collects top-level binding names to avoid collisions with inserted imports.
141
+ * @param statements Program statements.
142
+ * @returns All top-level names in the file.
143
+ * @example
144
+ * ```ts
145
+ * // Internal helper for no-unsafe-vitest-mock-factory-cast.
146
+ * ```
147
+ */
148
+ function collectTopLevelNames(statements) {
149
+ const names = new Set();
150
+ for (const statement of statements) {
151
+ if (statement.type === AST_NODE_TYPES.ImportDeclaration) {
152
+ for (const specifier of statement.specifiers) {
153
+ names.add(specifier.local.name);
154
+ }
155
+ continue;
156
+ }
157
+ if (statement.type === AST_NODE_TYPES.ExportNamedDeclaration) {
158
+ if (statement.declaration !== null &&
159
+ isNamedDeclaration(statement.declaration)) {
160
+ collectDeclarationNames(statement.declaration, names);
161
+ }
162
+ continue;
163
+ }
164
+ if (statement.type === AST_NODE_TYPES.ExportDefaultDeclaration) {
165
+ if (isNamedDeclaration(statement.declaration)) {
166
+ collectDeclarationNames(statement.declaration, names);
167
+ }
168
+ continue;
169
+ }
170
+ if (isNamedDeclaration(statement)) {
171
+ collectDeclarationNames(statement, names);
172
+ }
173
+ }
174
+ return names;
175
+ }
176
+ /**
177
+ * Creates a namespace import name from a module specifier.
178
+ * @param moduleSpecifier Module path.
179
+ * @returns PascalCase namespace name.
180
+ * @example
181
+ * ```ts
182
+ * // Internal helper for no-unsafe-vitest-mock-factory-cast.
183
+ * ```
184
+ */
185
+ function createNamespaceName(moduleSpecifier) {
186
+ const baseName = moduleSpecifier
187
+ .split("/")
188
+ .findLast((segment) => segment.length > 0 && segment !== ".")
189
+ ?.replace(/\.[^./\\]+$/, "") ?? "Module";
190
+ const pascalName = baseName
191
+ .replaceAll(/[^\dA-Za-z]+/g, " ")
192
+ .split(" ")
193
+ .filter((segment) => segment.length > 0)
194
+ .map((segment) => segment.slice(0, 1).toUpperCase() + segment.slice(1))
195
+ .join("");
196
+ return pascalName.endsWith(moduleTypeSuffix)
197
+ ? pascalName
198
+ : `${pascalName}${moduleTypeSuffix}`;
199
+ }
200
+ /**
201
+ * Returns the casted expression only when the factory is safe to autofix.
202
+ * @param node Factory expression to inspect.
203
+ * @returns Cast-free expression when the factory can be safely replaced.
204
+ * @example
205
+ * ```ts
206
+ * // Internal helper for no-unsafe-vitest-mock-factory-cast.
207
+ * ```
208
+ */
209
+ function getAutofixableMockExpression(node) {
210
+ if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) {
211
+ if (node.async || node.params.length > 0) {
212
+ return void 0;
213
+ }
214
+ if (node.body.type === AST_NODE_TYPES.BlockStatement) {
215
+ return getAutofixableReturnedCastedExpression(node.body.body);
216
+ }
217
+ return getCastedExpression(node.body);
218
+ }
219
+ if (node.async || node.generator || node.params.length > 0) {
220
+ return void 0;
221
+ }
222
+ return getAutofixableReturnedCastedExpression(node.body.body);
223
+ }
224
+ /**
225
+ * Finds a casted return value from a single-return factory body.
226
+ * @param statements Function body statements.
227
+ * @returns Returned expression when the factory has exactly one return statement.
228
+ * @example
229
+ * ```ts
230
+ * // Internal helper for no-unsafe-vitest-mock-factory-cast.
231
+ * ```
232
+ */
233
+ function getAutofixableReturnedCastedExpression(statements) {
234
+ if (statements.length !== 1) {
235
+ return void 0;
236
+ }
237
+ const [statement] = statements;
238
+ if (statement.argument === null) {
239
+ return void 0;
240
+ }
241
+ return getCastedExpression(statement.argument);
242
+ }
243
+ /**
244
+ * Returns the inner expression if the input is a cast expression.
245
+ * @param expression Expression to inspect.
246
+ * @returns Inner expression when the input contains a cast.
247
+ * @example
248
+ * ```ts
249
+ * // Internal helper for no-unsafe-vitest-mock-factory-cast.
250
+ * ```
251
+ */
252
+ function getCastedExpression(expression) {
253
+ if (expression.type === AST_NODE_TYPES.TSAsExpression) {
254
+ return stripCastExpressions(expression.expression);
255
+ }
256
+ if (expression.type === AST_NODE_TYPES.TSTypeAssertion) {
257
+ const innerExpression = expression.expression;
258
+ return stripCastExpressions(innerExpression);
259
+ }
260
+ return void 0;
261
+ }
262
+ /**
263
+ * Returns the partial mock expression after removing a cast wrapper.
264
+ * @param node Factory expression to inspect.
265
+ * @returns Cast-free expression when the factory is unsafe.
266
+ * @example
267
+ * ```ts
268
+ * // Internal helper for no-unsafe-vitest-mock-factory-cast.
269
+ * ```
270
+ */
271
+ function getCastedMockExpression(node) {
272
+ if (node.type === AST_NODE_TYPES.ArrowFunctionExpression) {
273
+ if (node.body.type === AST_NODE_TYPES.BlockStatement) {
274
+ return getReturnedCastedExpression(node.body.body);
275
+ }
276
+ return getCastedExpression(node.body);
277
+ }
278
+ return getReturnedCastedExpression(node.body.body);
279
+ }
280
+ /**
281
+ * Returns the range after the final import declaration.
282
+ * @param sourceCode Source code to inspect.
283
+ * @returns Range of the last import statement when present.
284
+ * @example
285
+ * ```ts
286
+ * // Internal helper for no-unsafe-vitest-mock-factory-cast.
287
+ * ```
288
+ */
289
+ function getImportInsertionRange(sourceCode) {
290
+ let lastImportRange;
291
+ for (const statement of sourceCode.ast.body) {
292
+ if (statement.type === AST_NODE_TYPES.ImportDeclaration &&
293
+ statement.range !== void 0) {
294
+ lastImportRange = statement.range;
295
+ }
296
+ }
297
+ return lastImportRange;
298
+ }
299
+ /**
300
+ * Collects the most appropriate mock-factory match from a `CallExpression`.
301
+ * @param node Call expression to inspect.
302
+ * @returns Unsafe mock factory details when the factory uses a cast.
303
+ * @example
304
+ * ```ts
305
+ * // Internal helper for no-unsafe-vitest-mock-factory-cast.
306
+ * ```
307
+ */
308
+ function getMockFactoryMatch(node) {
309
+ if (!isVitestMockCall(node) || node.arguments.length < 2) {
310
+ return void 0;
311
+ }
312
+ const [mockSpecifierNode, mockFactoryNode] = node.arguments;
313
+ if (mockSpecifierNode.type === AST_NODE_TYPES.SpreadElement ||
314
+ mockFactoryNode.type === AST_NODE_TYPES.SpreadElement) {
315
+ return void 0;
316
+ }
317
+ if (mockFactoryNode.type !== AST_NODE_TYPES.ArrowFunctionExpression &&
318
+ mockFactoryNode.type !== AST_NODE_TYPES.FunctionExpression) {
319
+ return void 0;
320
+ }
321
+ const moduleSpecifier = getModuleSpecifier(mockSpecifierNode);
322
+ if (moduleSpecifier === void 0) {
323
+ return void 0;
324
+ }
325
+ const mockExpression = getCastedMockExpression(mockFactoryNode);
326
+ if (mockExpression === void 0) {
327
+ return void 0;
328
+ }
329
+ const autofixableExpression = getAutofixableMockExpression(mockFactoryNode);
330
+ return {
331
+ canAutofix: autofixableExpression !== void 0,
332
+ mockExpression: autofixableExpression ?? mockExpression,
333
+ mockFactoryNode,
334
+ mockSpecifierNode,
335
+ moduleSpecifier,
336
+ node,
337
+ };
338
+ }
339
+ /**
340
+ * Extracts a string module specifier from the first mock argument.
341
+ * @param node First mock argument.
342
+ * @returns Module specifier when statically known.
343
+ * @example
344
+ * ```ts
345
+ * // Internal helper for no-unsafe-vitest-mock-factory-cast.
346
+ * ```
347
+ */
348
+ function getModuleSpecifier(node) {
349
+ if (node.type === AST_NODE_TYPES.Literal && typeof node.value === "string") {
350
+ return node.value;
351
+ }
352
+ if (node.type === AST_NODE_TYPES.ImportExpression &&
353
+ node.source.type === AST_NODE_TYPES.Literal &&
354
+ typeof node.source.value === "string") {
355
+ return node.source.value;
356
+ }
357
+ return void 0;
358
+ }
359
+ /**
360
+ * Finds the casted return value inside a function body.
361
+ * @param statements Function body statements.
362
+ * @returns Returned expression when it is casted.
363
+ * @example
364
+ * ```ts
365
+ * // Internal helper for no-unsafe-vitest-mock-factory-cast.
366
+ * ```
367
+ */
368
+ function getReturnedCastedExpression(statements) {
369
+ for (const statement of statements) {
370
+ if (statement.type !== AST_NODE_TYPES.ReturnStatement) {
371
+ continue;
372
+ }
373
+ return statement.argument === null
374
+ ? void 0
375
+ : getCastedExpression(statement.argument);
376
+ }
377
+ return void 0;
378
+ }
379
+ /**
380
+ * Checks whether a node is a declaration that introduces top-level names.
381
+ * @param node Node to inspect.
382
+ * @returns True when the node is a supported declaration.
383
+ * @example
384
+ * ```ts
385
+ * // Internal helper for no-unsafe-vitest-mock-factory-cast.
386
+ * ```
387
+ */
388
+ function isNamedDeclaration(node) {
389
+ return (node.type === AST_NODE_TYPES.FunctionDeclaration ||
390
+ node.type === AST_NODE_TYPES.ClassDeclaration ||
391
+ node.type === AST_NODE_TYPES.VariableDeclaration ||
392
+ node.type === AST_NODE_TYPES.TSTypeAliasDeclaration ||
393
+ node.type === AST_NODE_TYPES.TSInterfaceDeclaration ||
394
+ node.type === AST_NODE_TYPES.TSEnumDeclaration ||
395
+ node.type === AST_NODE_TYPES.TSModuleDeclaration);
396
+ }
397
+ /**
398
+ * Checks whether a call targets `vi.mock` or `vi.doMock`.
399
+ * @param node Call expression to inspect.
400
+ * @returns True when the callee is a supported Vitest mock method.
401
+ * @example
402
+ * ```ts
403
+ * // Internal helper for no-unsafe-vitest-mock-factory-cast.
404
+ * ```
405
+ */
406
+ function isVitestMockCall(node) {
407
+ if (node.callee.type !== AST_NODE_TYPES.MemberExpression ||
408
+ node.callee.object.type !== AST_NODE_TYPES.Identifier ||
409
+ node.callee.object.name !== "vi" ||
410
+ node.callee.property.type !== AST_NODE_TYPES.Identifier) {
411
+ return false;
412
+ }
413
+ return supportedMockNames.has(node.callee.property.name);
414
+ }
415
+ /**
416
+ * Resolves the namespace import to use for `typeof Namespace`.
417
+ * @param sourceCode Source code for import inspection.
418
+ * @param moduleSpecifier Module path being mocked.
419
+ * @returns Existing or generated namespace import details.
420
+ * @example
421
+ * ```ts
422
+ * // Internal helper for no-unsafe-vitest-mock-factory-cast.
423
+ * ```
424
+ */
425
+ function resolveModuleTypeImport(sourceCode, moduleSpecifier) {
426
+ const statements = sourceCode.ast.body;
427
+ const preferredName = createNamespaceName(moduleSpecifier);
428
+ for (const statement of statements) {
429
+ if (statement.type !== AST_NODE_TYPES.ImportDeclaration ||
430
+ statement.source.value !== moduleSpecifier) {
431
+ continue;
432
+ }
433
+ for (const specifier of statement.specifiers) {
434
+ if (specifier.type === AST_NODE_TYPES.ImportNamespaceSpecifier) {
435
+ return { isExisting: true, namespaceName: specifier.local.name };
436
+ }
437
+ }
438
+ }
439
+ const usedNames = collectTopLevelNames(statements);
440
+ let namespaceName = preferredName;
441
+ let suffix = 1;
442
+ while (usedNames.has(namespaceName)) {
443
+ namespaceName = `${preferredName}${suffix.toFixed(0)}`;
444
+ suffix += 1;
445
+ }
446
+ return { isExisting: false, namespaceName };
447
+ }
448
+ /**
449
+ * Removes nested cast wrappers from an expression.
450
+ * @param expression Expression to normalize.
451
+ * @returns Expression without any surrounding casts.
452
+ * @example
453
+ * ```ts
454
+ * // Internal helper for no-unsafe-vitest-mock-factory-cast.
455
+ * ```
456
+ */
457
+ function stripCastExpressions(expression) {
458
+ if (expression.type === AST_NODE_TYPES.TSAsExpression) {
459
+ return stripCastExpressions(expression.expression);
460
+ }
461
+ if (expression.type === AST_NODE_TYPES.TSTypeAssertion) {
462
+ return stripCastExpressions(expression.expression);
463
+ }
464
+ return expression;
465
+ }
466
+ export { noUnsafeVitestMockFactoryCastRule };
467
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb21haW4vdGVzdGluZy9uby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0L3J1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGNBQWMsRUFBaUIsTUFBTSwwQkFBMEIsQ0FBQztBQStDekUsd0NBQXdDO0FBQ3hDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUV2RCxzREFBc0Q7QUFDdEQsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7QUFFbEMsNERBQTREO0FBQzVELE1BQU0saUNBQWlDLEdBQW9CO0lBQ3pELE1BQU0sQ0FBQyxPQUF5QjtRQUM5QixPQUFPO1lBQ0wsY0FBYyxDQUFDLElBQUk7Z0JBQ2pCLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLElBQStCLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxLQUFLLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDckIsT0FBTztnQkFDVCxDQUFDO2dCQUVELE9BQU8sQ0FBQyxNQUFNLENBQUM7b0JBQ2IsR0FBRyxFQUFFLEtBQUssQ0FBQyxVQUFVO3dCQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQWMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQzt3QkFDMUQsQ0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDVixTQUFTLEVBQUUsK0JBQStCO29CQUMxQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7aUJBQ2pCLENBQUMsQ0FBQztZQUNMLENBQUM7U0FDMEIsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFO1lBQ0osV0FBVyxFQUNULDJHQUEyRztZQUM3RyxXQUFXLEVBQUUsSUFBSTtZQUNqQixHQUFHLEVBQUUscUdB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QUFDLElBQUksS0FBSyxjQUFjLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkQsT0FBTyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHsgQVNUX05PREVfVFlQRVMsIHR5cGUgVFNFU1RyZWUgfSBmcm9tIFwiQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzXCI7XG5cbi8qKiBVbnNhZmUgbW9jay1mYWN0b3J5IG1hdGNoIGRldGFpbHMuICovXG5pbnRlcmZhY2UgTW9ja0ZhY3RvcnlNYXRjaCB7XG4gIC8qKiBXaGV0aGVyIHRoZSBtYXRjaCBjYW4gYmUgc2FmZWx5IGF1dG9maXhlZC4gKi9cbiAgY2FuQXV0b2ZpeDogYm9vbGVhbjtcblxuICAvKiogQ2FzdC1mcmVlIHBhcnRpYWwgbW9jayBleHByZXNzaW9uLiAqL1xuICBtb2NrRXhwcmVzc2lvbjogVFNFU1RyZWUuRXhwcmVzc2lvbjtcblxuICAvKiogU2Vjb25kIGFyZ3VtZW50IHRvIHRoZSBWaXRlc3QgbW9jayBjYWxsLiAqL1xuICBtb2NrRmFjdG9yeU5vZGU6XG4gICAgfCBUU0VTVHJlZS5BcnJvd0Z1bmN0aW9uRXhwcmVzc2lvblxuICAgIHwgVFNFU1RyZWUuRnVuY3Rpb25FeHByZXNzaW9uO1xuXG4gIC8qKiBGaXJzdCBhcmd1bWVudCB0byB0aGUgVml0ZXN0IG1vY2sgY2FsbC4gKi9cbiAgbW9ja1NwZWNpZmllck5vZGU6IFRTRVNUcmVlLkV4cHJlc3Npb247XG5cbiAgLyoqIE1vY2tlZCBtb2R1bGUgc3BlY2lmaWVyLiAqL1xuICBtb2R1bGVTcGVjaWZpZXI6IHN0cmluZztcblxuICAvKiogUmVwb3J0IG5vZGUuICovXG4gIG5vZGU6IFRTRVNUcmVlLk5vZGU7XG59XG5cbi8qKiBOYW1lc3BhY2UgaW1wb3J0IGRldGFpbHMgZm9yIHRoZSBtb2NrZWQgbW9kdWxlLiAqL1xuaW50ZXJmYWNlIE1vZHVsZVR5cGVJbXBvcnQge1xuICAvKiogV2hldGhlciB0aGUgbmFtZXNwYWNlIGltcG9ydCBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgZmlsZS4gKi9cbiAgaXNFeGlzdGluZzogYm9vbGVhbjtcblxuICAvKiogTmFtZXNwYWNlIGlkZW50aWZpZXIgdXNlZCBpbiBgdHlwZW9mIE5hbWVzcGFjZWAuICovXG4gIG5hbWVzcGFjZU5hbWU6IHN0cmluZztcbn1cblxuLyoqIFN1cHBvcnRlZCBkZWNsYXJhdGlvbiBzaGFwZXMgdGhhdCBjYW4gaW50cm9kdWNlIHRvcC1sZXZlbCBuYW1lcy4gKi9cbnR5cGUgTmFtZWREZWNsYXJhdGlvbiA9XG4gIHwgVFNFU1RyZWUuQ2xhc3NEZWNsYXJhdGlvblxuICB8IFRTRVNUcmVlLkZ1bmN0aW9uRGVjbGFyYXRpb25cbiAgfCBUU0VTVHJlZS5UU0VudW1EZWNsYXJhdGlvblxuICB8IFRTRVNUcmVlLlRTSW50ZXJmYWNlRGVjbGFyYXRpb25cbiAgfCBUU0VTVHJlZS5UU01vZHVsZURlY2xhcmF0aW9uXG4gIHwgVFNFU1RyZWUuVFNUeXBlQWxpYXNEZWNsYXJhdGlvblxuICB8IFRTRVNUcmVlLlZhcmlhYmxlRGVjbGFyYXRpb247XG5cbi8qKiBNaW5pbWFsIHNvdXJjZS1jb2RlIHN1cmZhY2UgdXNlZCBieSB0aGUgcnVsZS4gKi9cbnR5cGUgU291cmNlQ29kZUxpa2UgPSBQaWNrPFJ1bGUuUnVsZUNvbnRleHRbXCJzb3VyY2VDb2RlXCJdLCBcImFzdFwiIHwgXCJnZXRUZXh0XCI+O1xuXG4vKiogU3VwcG9ydGVkIGB2aWAgbW9jayBtZXRob2QgbmFtZXMuICovXG5jb25zdCBzdXBwb3J0ZWRNb2NrTmFtZXMgPSBuZXcgU2V0KFtcImRvTW9ja1wiLCBcIm1vY2tcIl0pO1xuXG4vKiogRGVmYXVsdCBzdWZmaXggZm9yIGdlbmVyYXRlZCBuYW1lc3BhY2UgaW1wb3J0cy4gKi9cbmNvbnN0IG1vZHVsZVR5cGVTdWZmaXggPSBcIk1vZHVsZVwiO1xuXG4vKiogRGlzYWxsb3dzIGNhc3RlZCBgdmkubW9ja2AgYW5kIGB2aS5kb01vY2tgIGZhY3Rvcmllcy4gKi9cbmNvbnN0IG5vVW5zYWZlVml0ZXN0TW9ja0ZhY3RvcnlDYXN0UnVsZTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dDogUnVsZS5SdWxlQ29udGV4dCk6IFJ1bGUuUnVsZUxpc3RlbmVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgQ2FsbEV4cHJlc3Npb24obm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBtYXRjaCA9IGdldE1vY2tGYWN0b3J5TWF0Y2gobm9kZSBhcyBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbik7XG4gICAgICAgIGlmIChtYXRjaCA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIGZpeDogbWF0Y2guY2FuQXV0b2ZpeFxuICAgICAgICAgICAgPyAoZml4ZXIpOiBSdWxlLkZpeFtdID0+IGJ1aWxkRml4ZXMoY29udGV4dCwgZml4ZXIsIG1hdGNoKVxuICAgICAgICAgICAgOiB2b2lkIDAsXG4gICAgICAgICAgbWVzc2FnZUlkOiBcIm5vVW5zYWZlVml0ZXN0TW9ja0ZhY3RvcnlDYXN0XCIsXG4gICAgICAgICAgbm9kZTogbWF0Y2gubm9kZSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0gc2F0aXNmaWVzIFJ1bGUuUnVsZUxpc3RlbmVyO1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiRGlzYWxsb3cgY2FzdGVkIHZpLm1vY2sgYW5kIHZpLmRvTW9jayBmYWN0b3JpZXMgYW5kIHByZWZlciBjcmVhdGVNb2NrUHJveHkoLi4uKSBmb3IgcGFydGlhbCBtb2R1bGUgbW9ja3MuXCIsXG4gICAgICByZWNvbW1lbmRlZDogdHJ1ZSxcbiAgICAgIHVybDogXCJodHRwczovL2dpdGh1Yi5jb20vcGFybG90aS9lc2xpbnQtcGx1Z2luL2Jsb2IvbWFpbi9kb2NzL3J1bGVzL25vLXVuc2FmZS12aXRlc3QtbW9jay1mYWN0b3J5LWNhc3QubWRcIixcbiAgICB9LFxuICAgIGZpeGFibGU6IFwiY29kZVwiLFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBub1Vuc2FmZVZpdGVzdE1vY2tGYWN0b3J5Q2FzdDpcbiAgICAgICAgXCJBdm9pZCBjYXN0aW5nIHZpLm1vY2svdmkuZG9Nb2NrIGZhY3RvcnkgcmVzdWx0czsgdXNlIGNyZWF0ZU1vY2tQcm94eSguLi4pIHdpdGggYSB0eXBlLW9ubHkgbW9kdWxlIGltcG9ydCBpbnN0ZWFkLlwiLFxuICAgIH0sXG4gICAgc2NoZW1hOiBbXSxcbiAgICB0eXBlOiBcInByb2JsZW1cIixcbiAgfSxcbn07XG5cbi8qKiBDYWxsRXhwcmVzc2lvbiBhcmd1bWVudCB0aGF0IGlzIG5vdCBhIHNwcmVhZCBlbGVtZW50LiAqL1xudHlwZSBOb25TcHJlYWRDYWxsRXhwcmVzc2lvbkFyZ3VtZW50ID0gRXhjbHVkZTxcbiAgVFNFU1RyZWUuQ2FsbEV4cHJlc3Npb25Bcmd1bWVudCxcbiAgVFNFU1RyZWUuU3ByZWFkRWxlbWVudFxuPjtcblxuLyoqXG4gKiBCdWlsZHMgYWxsIGZpeGVzIGZvciBvbmUgdW5zYWZlIG1vY2sgZmFjdG9yeS5cbiAqIEBwYXJhbSBjb250ZXh0IFJ1bGUgY29udGV4dC5cbiAqIEBwYXJhbSBmaXhlciBFU0xpbnQgZml4ZXIuXG4gKiBAcGFyYW0gbWF0Y2ggVW5zYWZlIG1vY2sgZmFjdG9yeSBkZXRhaWxzLlxuICogQHJldHVybnMgQWxsIGZpeGVyIG9wZXJhdGlvbnMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEludGVybmFsIGhlbHBlciBmb3Igbm8tdW5zYWZlLXZpdGVzdC1tb2NrLWZhY3RvcnktY2FzdC5cbiAqIGBgYFxuICovXG5mdW5jdGlvbiBidWlsZEZpeGVzKFxuICBjb250ZXh0OiBSdWxlLlJ1bGVDb250ZXh0LFxuICBmaXhlcjogUnVsZS5SdWxlRml4ZXIsXG4gIG1hdGNoOiBNb2NrRmFjdG9yeU1hdGNoLFxuKTogUnVsZS5GaXhbXSB7XG4gIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LnNvdXJjZUNvZGU7XG4gIGNvbnN0IG1vZHVsZVR5cGVJbXBvcnQgPSByZXNvbHZlTW9kdWxlVHlwZUltcG9ydChcbiAgICBzb3VyY2VDb2RlLFxuICAgIG1hdGNoLm1vZHVsZVNwZWNpZmllcixcbiAgKTtcbiAgY29uc3QgZmFjdG9yeVRleHQgPSBgY3JlYXRlTW9ja1Byb3h5PHR5cGVvZiAke21vZHVsZVR5cGVJbXBvcnQubmFtZXNwYWNlTmFtZX0+KCR7c291cmNlQ29kZS5nZXRUZXh0KG1hdGNoLm1vY2tFeHByZXNzaW9uIGFzIG5ldmVyKX0pYDtcbiAgY29uc3QgZml4ZXM6IFJ1bGUuRml4W10gPSBbXG4gICAgZml4ZXIucmVwbGFjZVRleHRSYW5nZShtYXRjaC5tb2NrRmFjdG9yeU5vZGUucmFuZ2UsIGZhY3RvcnlUZXh0KSxcbiAgXTtcblxuICBpZiAoIW1vZHVsZVR5cGVJbXBvcnQuaXNFeGlzdGluZykge1xuICAgIGNvbnN0IGltcG9ydFRleHQgPSBgaW1wb3J0IHR5cGUgKiBhcyAke21vZHVsZVR5cGVJbXBvcnQubmFtZXNwYWNlTmFtZX0gZnJvbSAke0pTT04uc3RyaW5naWZ5KG1hdGNoLm1vZHVsZVNwZWNpZmllcil9O2A7XG4gICAgY29uc3QgaW5zZXJ0aW9uUmFuZ2UgPSBnZXRJbXBvcnRJbnNlcnRpb25SYW5nZShzb3VyY2VDb2RlKTtcblxuICAgIGZpeGVzLnB1c2goXG4gICAgICBpbnNlcnRpb25SYW5nZSA9PT0gdm9pZCAwXG4gICAgICAgID8gZml4ZXIuaW5zZXJ0VGV4dEJlZm9yZVJhbmdlKFswLCAwXSwgYCR7aW1wb3J0VGV4dH1cXG5cXG5gKVxuICAgICAgICA6IGZpeGVyLmluc2VydFRleHRBZnRlclJhbmdlKGluc2VydGlvblJhbmdlLCBgXFxuJHtpbXBvcnRUZXh0fWApLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZml4ZXM7XG59XG5cbi8qKlxuICogQ29sbGVjdHMgZGVjbGFyYXRpb24gaWRlbnRpZmllcnMgZnJvbSB0b3AtbGV2ZWwgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIGRlY2xhcmF0aW9uIERlY2xhcmF0aW9uIG5vZGUuXG4gKiBAcGFyYW0gbmFtZXMgT3V0cHV0IG5hbWUgc2V0LlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBJbnRlcm5hbCBoZWxwZXIgZm9yIG5vLXVuc2FmZS12aXRlc3QtbW9jay1mYWN0b3J5LWNhc3QuXG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gY29sbGVjdERlY2xhcmF0aW9uTmFtZXMoXG4gIGRlY2xhcmF0aW9uOiBOYW1lZERlY2xhcmF0aW9uLFxuICBuYW1lczogU2V0PHN0cmluZz4sXG4pOiB2b2lkIHtcbiAgaWYgKFxuICAgIGRlY2xhcmF0aW9uLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkZ1bmN0aW9uRGVjbGFyYXRpb24gfHxcbiAgICBkZWNsYXJhdGlvbi50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5DbGFzc0RlY2xhcmF0aW9uXG4gICkge1xuICAgIGlmIChkZWNsYXJhdGlvbi5pZCAhPT0gbnVsbCkge1xuICAgICAgbmFtZXMuYWRkKGRlY2xhcmF0aW9uLmlkLm5hbWUpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZGVjbGFyYXRpb24udHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVmFyaWFibGVEZWNsYXJhdGlvbikge1xuICAgIGZvciAoY29uc3QgdmFyaWFibGVEZWNsYXJhdGlvbiBvZiBkZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMpIHtcbiAgICAgIGNvbGxlY3RQYXR0ZXJuTmFtZXModmFyaWFibGVEZWNsYXJhdGlvbi5pZCwgbmFtZXMpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoXG4gICAgZGVjbGFyYXRpb24udHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVFNUeXBlQWxpYXNEZWNsYXJhdGlvbiB8fFxuICAgIGRlY2xhcmF0aW9uLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLlRTSW50ZXJmYWNlRGVjbGFyYXRpb24gfHxcbiAgICBkZWNsYXJhdGlvbi50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5UU0VudW1EZWNsYXJhdGlvblxuICApIHtcbiAgICBuYW1lcy5hZGQoZGVjbGFyYXRpb24uaWQubmFtZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGRlY2xhcmF0aW9uLmlkLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLklkZW50aWZpZXIpIHtcbiAgICBuYW1lcy5hZGQoZGVjbGFyYXRpb24uaWQubmFtZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb2xsZWN0cyBpZGVudGlmaWVycyBmcm9tIGEgYmluZGluZyBwYXR0ZXJuLlxuICogQHBhcmFtIHBhdHRlcm4gQmluZGluZyBwYXR0ZXJuLlxuICogQHBhcmFtIG5hbWVzIE91dHB1dCBuYW1lIHNldC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gSW50ZXJuYWwgaGVscGVyIGZvciBuby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0LlxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RQYXR0ZXJuTmFtZXMocGF0dGVybjogVFNFU1RyZWUuTm9kZSwgbmFtZXM6IFNldDxzdHJpbmc+KTogdm9pZCB7XG4gIGlmIChwYXR0ZXJuLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLklkZW50aWZpZXIpIHtcbiAgICBuYW1lcy5hZGQocGF0dGVybi5uYW1lKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocGF0dGVybi50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5Bc3NpZ25tZW50UGF0dGVybikge1xuICAgIGNvbGxlY3RQYXR0ZXJuTmFtZXMocGF0dGVybi5sZWZ0LCBuYW1lcyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHBhdHRlcm4udHlwZSA9PT0gQVNUX05PREVfVFlQRVMuUmVzdEVsZW1lbnQpIHtcbiAgICBjb2xsZWN0UGF0dGVybk5hbWVzKHBhdHRlcm4uYXJndW1lbnQsIG5hbWVzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocGF0dGVybi50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5BcnJheVBhdHRlcm4pIHtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGF0dGVybi5lbGVtZW50cykge1xuICAgICAgaWYgKGVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgY29sbGVjdFBhdHRlcm5OYW1lcyhlbGVtZW50LCBuYW1lcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhdHRlcm4udHlwZSA9PT0gQVNUX05PREVfVFlQRVMuT2JqZWN0UGF0dGVybikge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcGF0dGVybi5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAocHJvcGVydHkudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuUHJvcGVydHkpIHtcbiAgICAgICAgY29sbGVjdFBhdHRlcm5OYW1lcyhwcm9wZXJ0eS52YWx1ZSwgbmFtZXMpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydHkudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuUmVzdEVsZW1lbnQpIHtcbiAgICAgICAgY29sbGVjdFBhdHRlcm5OYW1lcyhwcm9wZXJ0eS5hcmd1bWVudCwgbmFtZXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENvbGxlY3RzIHRvcC1sZXZlbCBiaW5kaW5nIG5hbWVzIHRvIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBpbnNlcnRlZCBpbXBvcnRzLlxuICogQHBhcmFtIHN0YXRlbWVudHMgUHJvZ3JhbSBzdGF0ZW1lbnRzLlxuICogQHJldHVybnMgQWxsIHRvcC1sZXZlbCBuYW1lcyBpbiB0aGUgZmlsZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gSW50ZXJuYWwgaGVscGVyIGZvciBuby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0LlxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RUb3BMZXZlbE5hbWVzKHN0YXRlbWVudHM6IHJlYWRvbmx5IHVua25vd25bXSk6IFNldDxzdHJpbmc+IHtcbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzIGFzIFRTRVNUcmVlLlByb2dyYW1TdGF0ZW1lbnRbXSkge1xuICAgIGlmIChzdGF0ZW1lbnQudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuSW1wb3J0RGVjbGFyYXRpb24pIHtcbiAgICAgIGZvciAoY29uc3Qgc3BlY2lmaWVyIG9mIHN0YXRlbWVudC5zcGVjaWZpZXJzKSB7XG4gICAgICAgIG5hbWVzLmFkZChzcGVjaWZpZXIubG9jYWwubmFtZSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50LnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkV4cG9ydE5hbWVkRGVjbGFyYXRpb24pIHtcbiAgICAgIGlmIChcbiAgICAgICAgc3RhdGVtZW50LmRlY2xhcmF0aW9uICE9PSBudWxsICYmXG4gICAgICAgIGlzTmFtZWREZWNsYXJhdGlvbihzdGF0ZW1lbnQuZGVjbGFyYXRpb24pXG4gICAgICApIHtcbiAgICAgICAgY29sbGVjdERlY2xhcmF0aW9uTmFtZXMoc3RhdGVtZW50LmRlY2xhcmF0aW9uLCBuYW1lcyk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50LnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkV4cG9ydERlZmF1bHREZWNsYXJhdGlvbikge1xuICAgICAgaWYgKGlzTmFtZWREZWNsYXJhdGlvbihzdGF0ZW1lbnQuZGVjbGFyYXRpb24pKSB7XG4gICAgICAgIGNvbGxlY3REZWNsYXJhdGlvbk5hbWVzKHN0YXRlbWVudC5kZWNsYXJhdGlvbiwgbmFtZXMpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGlzTmFtZWREZWNsYXJhdGlvbihzdGF0ZW1lbnQpKSB7XG4gICAgICBjb2xsZWN0RGVjbGFyYXRpb25OYW1lcyhzdGF0ZW1lbnQsIG5hbWVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmFtZXM7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5hbWVzcGFjZSBpbXBvcnQgbmFtZSBmcm9tIGEgbW9kdWxlIHNwZWNpZmllci5cbiAqIEBwYXJhbSBtb2R1bGVTcGVjaWZpZXIgTW9kdWxlIHBhdGguXG4gKiBAcmV0dXJucyBQYXNjYWxDYXNlIG5hbWVzcGFjZSBuYW1lLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBJbnRlcm5hbCBoZWxwZXIgZm9yIG5vLXVuc2FmZS12aXRlc3QtbW9jay1mYWN0b3J5LWNhc3QuXG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gY3JlYXRlTmFtZXNwYWNlTmFtZShtb2R1bGVTcGVjaWZpZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGJhc2VOYW1lID1cbiAgICBtb2R1bGVTcGVjaWZpZXJcbiAgICAgIC5zcGxpdChcIi9cIilcbiAgICAgIC5maW5kTGFzdCgoc2VnbWVudCkgPT4gc2VnbWVudC5sZW5ndGggPiAwICYmIHNlZ21lbnQgIT09IFwiLlwiKVxuICAgICAgPy5yZXBsYWNlKC9cXC5bXi4vXFxcXF0rJC8sIFwiXCIpID8/IFwiTW9kdWxlXCI7XG5cbiAgY29uc3QgcGFzY2FsTmFtZSA9IGJhc2VOYW1lXG4gICAgLnJlcGxhY2VBbGwoL1teXFxkQS1aYS16XSsvZywgXCIgXCIpXG4gICAgLnNwbGl0KFwiIFwiKVxuICAgIC5maWx0ZXIoKHNlZ21lbnQpID0+IHNlZ21lbnQubGVuZ3RoID4gMClcbiAgICAubWFwKChzZWdtZW50KSA9PiBzZWdtZW50LnNsaWNlKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBzZWdtZW50LnNsaWNlKDEpKVxuICAgIC5qb2luKFwiXCIpO1xuXG4gIHJldHVybiBwYXNjYWxOYW1lLmVuZHNXaXRoKG1vZHVsZVR5cGVTdWZmaXgpXG4gICAgPyBwYXNjYWxOYW1lXG4gICAgOiBgJHtwYXNjYWxOYW1lfSR7bW9kdWxlVHlwZVN1ZmZpeH1gO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGNhc3RlZCBleHByZXNzaW9uIG9ubHkgd2hlbiB0aGUgZmFjdG9yeSBpcyBzYWZlIHRvIGF1dG9maXguXG4gKiBAcGFyYW0gbm9kZSBGYWN0b3J5IGV4cHJlc3Npb24gdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIENhc3QtZnJlZSBleHByZXNzaW9uIHdoZW4gdGhlIGZhY3RvcnkgY2FuIGJlIHNhZmVseSByZXBsYWNlZC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gSW50ZXJuYWwgaGVscGVyIGZvciBuby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0LlxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGdldEF1dG9maXhhYmxlTW9ja0V4cHJlc3Npb24oXG4gIG5vZGU6IFRTRVNUcmVlLkFycm93RnVuY3Rpb25FeHByZXNzaW9uIHwgVFNFU1RyZWUuRnVuY3Rpb25FeHByZXNzaW9uLFxuKTogVFNFU1RyZWUuRXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChub2RlLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkFycm93RnVuY3Rpb25FeHByZXNzaW9uKSB7XG4gICAgaWYgKG5vZGUuYXN5bmMgfHwgbm9kZS5wYXJhbXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5ib2R5LnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkJsb2NrU3RhdGVtZW50KSB7XG4gICAgICByZXR1cm4gZ2V0QXV0b2ZpeGFibGVSZXR1cm5lZENhc3RlZEV4cHJlc3Npb24obm9kZS5ib2R5LmJvZHkpO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRDYXN0ZWRFeHByZXNzaW9uKG5vZGUuYm9keSk7XG4gIH1cblxuICBpZiAobm9kZS5hc3luYyB8fCBub2RlLmdlbmVyYXRvciB8fCBub2RlLnBhcmFtcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIHJldHVybiBnZXRBdXRvZml4YWJsZVJldHVybmVkQ2FzdGVkRXhwcmVzc2lvbihub2RlLmJvZHkuYm9keSk7XG59XG5cbi8qKlxuICogRmluZHMgYSBjYXN0ZWQgcmV0dXJuIHZhbHVlIGZyb20gYSBzaW5nbGUtcmV0dXJuIGZhY3RvcnkgYm9keS5cbiAqIEBwYXJhbSBzdGF0ZW1lbnRzIEZ1bmN0aW9uIGJvZHkgc3RhdGVtZW50cy5cbiAqIEByZXR1cm5zIFJldHVybmVkIGV4cHJlc3Npb24gd2hlbiB0aGUgZmFjdG9yeSBoYXMgZXhhY3RseSBvbmUgcmV0dXJuIHN0YXRlbWVudC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gSW50ZXJuYWwgaGVscGVyIGZvciBuby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0LlxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGdldEF1dG9maXhhYmxlUmV0dXJuZWRDYXN0ZWRFeHByZXNzaW9uKFxuICBzdGF0ZW1lbnRzOiBUU0VTVHJlZS5TdGF0ZW1lbnRbXSxcbik6IFRTRVNUcmVlLkV4cHJlc3Npb24gfCB1bmRlZmluZWQge1xuICBpZiAoc3RhdGVtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgY29uc3QgW3N0YXRlbWVudF0gPSBzdGF0ZW1lbnRzIGFzIFtUU0VTVHJlZS5SZXR1cm5TdGF0ZW1lbnRdO1xuICBpZiAoc3RhdGVtZW50LmFyZ3VtZW50ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIHJldHVybiBnZXRDYXN0ZWRFeHByZXNzaW9uKHN0YXRlbWVudC5hcmd1bWVudCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgaW5uZXIgZXhwcmVzc2lvbiBpZiB0aGUgaW5wdXQgaXMgYSBjYXN0IGV4cHJlc3Npb24uXG4gKiBAcGFyYW0gZXhwcmVzc2lvbiBFeHByZXNzaW9uIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBJbm5lciBleHByZXNzaW9uIHdoZW4gdGhlIGlucHV0IGNvbnRhaW5zIGEgY2FzdC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gSW50ZXJuYWwgaGVscGVyIGZvciBuby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0LlxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGdldENhc3RlZEV4cHJlc3Npb24oXG4gIGV4cHJlc3Npb246IFRTRVNUcmVlLkV4cHJlc3Npb24sXG4pOiBUU0VTVHJlZS5FeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGV4cHJlc3Npb24udHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVFNBc0V4cHJlc3Npb24pIHtcbiAgICByZXR1cm4gc3RyaXBDYXN0RXhwcmVzc2lvbnMoZXhwcmVzc2lvbi5leHByZXNzaW9uKTtcbiAgfVxuXG4gIGlmIChleHByZXNzaW9uLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLlRTVHlwZUFzc2VydGlvbikge1xuICAgIGNvbnN0IGlubmVyRXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uZXhwcmVzc2lvbjtcbiAgICByZXR1cm4gc3RyaXBDYXN0RXhwcmVzc2lvbnMoaW5uZXJFeHByZXNzaW9uKTtcbiAgfVxuXG4gIHJldHVybiB2b2lkIDA7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGFydGlhbCBtb2NrIGV4cHJlc3Npb24gYWZ0ZXIgcmVtb3ZpbmcgYSBjYXN0IHdyYXBwZXIuXG4gKiBAcGFyYW0gbm9kZSBGYWN0b3J5IGV4cHJlc3Npb24gdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIENhc3QtZnJlZSBleHByZXNzaW9uIHdoZW4gdGhlIGZhY3RvcnkgaXMgdW5zYWZlLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBJbnRlcm5hbCBoZWxwZXIgZm9yIG5vLXVuc2FmZS12aXRlc3QtbW9jay1mYWN0b3J5LWNhc3QuXG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gZ2V0Q2FzdGVkTW9ja0V4cHJlc3Npb24oXG4gIG5vZGU6IFRTRVNUcmVlLkFycm93RnVuY3Rpb25FeHByZXNzaW9uIHwgVFNFU1RyZWUuRnVuY3Rpb25FeHByZXNzaW9uLFxuKTogVFNFU1RyZWUuRXhwcmVzc2lvbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChub2RlLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkFycm93RnVuY3Rpb25FeHByZXNzaW9uKSB7XG4gICAgaWYgKG5vZGUuYm9keS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5CbG9ja1N0YXRlbWVudCkge1xuICAgICAgcmV0dXJuIGdldFJldHVybmVkQ2FzdGVkRXhwcmVzc2lvbihub2RlLmJvZHkuYm9keSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldENhc3RlZEV4cHJlc3Npb24obm9kZS5ib2R5KTtcbiAgfVxuXG4gIHJldHVybiBnZXRSZXR1cm5lZENhc3RlZEV4cHJlc3Npb24obm9kZS5ib2R5LmJvZHkpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHJhbmdlIGFmdGVyIHRoZSBmaW5hbCBpbXBvcnQgZGVjbGFyYXRpb24uXG4gKiBAcGFyYW0gc291cmNlQ29kZSBTb3VyY2UgY29kZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMgUmFuZ2Ugb2YgdGhlIGxhc3QgaW1wb3J0IHN0YXRlbWVudCB3aGVuIHByZXNlbnQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEludGVybmFsIGhlbHBlciBmb3Igbm8tdW5zYWZlLXZpdGVzdC1tb2NrLWZhY3RvcnktY2FzdC5cbiAqIGBgYFxuICovXG5mdW5jdGlvbiBnZXRJbXBvcnRJbnNlcnRpb25SYW5nZShcbiAgc291cmNlQ29kZTogU291cmNlQ29kZUxpa2UsXG4pOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkIHtcbiAgbGV0IGxhc3RJbXBvcnRSYW5nZTogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZDtcblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzb3VyY2VDb2RlLmFzdC5ib2R5IGFzIHVua25vd24gYXMge1xuICAgIC8qKiBTdGF0ZW1lbnQgcmFuZ2Ugd2hlbiBwcm92aWRlZCBieSBwYXJzZXIgb3B0aW9ucy4gKi9cbiAgICByYW5nZT86IFtudW1iZXIsIG51bWJlcl07XG5cbiAgICAvKiogVG9wLWxldmVsIHN0YXRlbWVudCBub2RlIHR5cGUuICovXG4gICAgdHlwZTogVFNFU1RyZWUuUHJvZ3JhbVN0YXRlbWVudFtcInR5cGVcIl07XG4gIH1bXSkge1xuICAgIGlmIChcbiAgICAgIHN0YXRlbWVudC50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5JbXBvcnREZWNsYXJhdGlvbiAmJlxuICAgICAgc3RhdGVtZW50LnJhbmdlICE9PSB2b2lkIDBcbiAgICApIHtcbiAgICAgIGxhc3RJbXBvcnRSYW5nZSA9IHN0YXRlbWVudC5yYW5nZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGFzdEltcG9ydFJhbmdlO1xufVxuXG4vKipcbiAqIENvbGxlY3RzIHRoZSBtb3N0IGFwcHJvcHJpYXRlIG1vY2stZmFjdG9yeSBtYXRjaCBmcm9tIGEgYENhbGxFeHByZXNzaW9uYC5cbiAqIEBwYXJhbSBub2RlIENhbGwgZXhwcmVzc2lvbiB0byBpbnNwZWN0LlxuICogQHJldHVybnMgVW5zYWZlIG1vY2sgZmFjdG9yeSBkZXRhaWxzIHdoZW4gdGhlIGZhY3RvcnkgdXNlcyBhIGNhc3QuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEludGVybmFsIGhlbHBlciBmb3Igbm8tdW5zYWZlLXZpdGVzdC1tb2NrLWZhY3RvcnktY2FzdC5cbiAqIGBgYFxuICovXG5mdW5jdGlvbiBnZXRNb2NrRmFjdG9yeU1hdGNoKFxuICBub2RlOiBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbixcbik6IE1vY2tGYWN0b3J5TWF0Y2ggfCB1bmRlZmluZWQge1xuICBpZiAoIWlzVml0ZXN0TW9ja0NhbGwobm9kZSkgfHwgbm9kZS5hcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICBjb25zdCBbbW9ja1NwZWNpZmllck5vZGUsIG1vY2tGYWN0b3J5Tm9kZV0gPSBub2RlLmFyZ3VtZW50cyBhcyBbXG4gICAgVFNFU1RyZWUuQ2FsbEV4cHJlc3Npb25Bcmd1bWVudCxcbiAgICBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbkFyZ3VtZW50LFxuICAgIC4uLlRTRVNUcmVlLkNhbGxFeHByZXNzaW9uQXJndW1lbnRbXSxcbiAgXTtcblxuICBpZiAoXG4gICAgbW9ja1NwZWNpZmllck5vZGUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuU3ByZWFkRWxlbWVudCB8fFxuICAgIG1vY2tGYWN0b3J5Tm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5TcHJlYWRFbGVtZW50XG4gICkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cblxuICBpZiAoXG4gICAgbW9ja0ZhY3RvcnlOb2RlLnR5cGUgIT09IEFTVF9OT0RFX1RZUEVTLkFycm93RnVuY3Rpb25FeHByZXNzaW9uICYmXG4gICAgbW9ja0ZhY3RvcnlOb2RlLnR5cGUgIT09IEFTVF9OT0RFX1RZUEVTLkZ1bmN0aW9uRXhwcmVzc2lvblxuICApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgY29uc3QgbW9kdWxlU3BlY2lmaWVyID0gZ2V0TW9kdWxlU3BlY2lmaWVyKG1vY2tTcGVjaWZpZXJOb2RlKTtcbiAgaWYgKG1vZHVsZVNwZWNpZmllciA9PT0gdm9pZCAwKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuXG4gIGNvbnN0IG1vY2tFeHByZXNzaW9uID0gZ2V0Q2FzdGVkTW9ja0V4cHJlc3Npb24obW9ja0ZhY3RvcnlOb2RlKTtcbiAgaWYgKG1vY2tFeHByZXNzaW9uID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gdm9pZCAwO1xuICB9XG5cbiAgY29uc3QgYXV0b2ZpeGFibGVFeHByZXNzaW9uID0gZ2V0QXV0b2ZpeGFibGVNb2NrRXhwcmVzc2lvbihtb2NrRmFjdG9yeU5vZGUpO1xuXG4gIHJldHVybiB7XG4gICAgY2FuQXV0b2ZpeDogYXV0b2ZpeGFibGVFeHByZXNzaW9uICE9PSB2b2lkIDAsXG4gICAgbW9ja0V4cHJlc3Npb246IGF1dG9maXhhYmxlRXhwcmVzc2lvbiA/PyBtb2NrRXhwcmVzc2lvbixcbiAgICBtb2NrRmFjdG9yeU5vZGUsXG4gICAgbW9ja1NwZWNpZmllck5vZGUsXG4gICAgbW9kdWxlU3BlY2lmaWVyLFxuICAgIG5vZGUsXG4gIH07XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBzdHJpbmcgbW9kdWxlIHNwZWNpZmllciBmcm9tIHRoZSBmaXJzdCBtb2NrIGFyZ3VtZW50LlxuICogQHBhcmFtIG5vZGUgRmlyc3QgbW9jayBhcmd1bWVudC5cbiAqIEByZXR1cm5zIE1vZHVsZSBzcGVjaWZpZXIgd2hlbiBzdGF0aWNhbGx5IGtub3duLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBJbnRlcm5hbCBoZWxwZXIgZm9yIG5vLXVuc2FmZS12aXRlc3QtbW9jay1mYWN0b3J5LWNhc3QuXG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gZ2V0TW9kdWxlU3BlY2lmaWVyKFxuICBub2RlOiBOb25TcHJlYWRDYWxsRXhwcmVzc2lvbkFyZ3VtZW50LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKG5vZGUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuTGl0ZXJhbCAmJiB0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBub2RlLnZhbHVlO1xuICB9XG5cbiAgaWYgKFxuICAgIG5vZGUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuSW1wb3J0RXhwcmVzc2lvbiAmJlxuICAgIG5vZGUuc291cmNlLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkxpdGVyYWwgJiZcbiAgICB0eXBlb2Ygbm9kZS5zb3VyY2UudmFsdWUgPT09IFwic3RyaW5nXCJcbiAgKSB7XG4gICAgcmV0dXJuIG5vZGUuc291cmNlLnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZvaWQgMDtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgY2FzdGVkIHJldHVybiB2YWx1ZSBpbnNpZGUgYSBmdW5jdGlvbiBib2R5LlxuICogQHBhcmFtIHN0YXRlbWVudHMgRnVuY3Rpb24gYm9keSBzdGF0ZW1lbnRzLlxuICogQHJldHVybnMgUmV0dXJuZWQgZXhwcmVzc2lvbiB3aGVuIGl0IGlzIGNhc3RlZC5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gSW50ZXJuYWwgaGVscGVyIGZvciBuby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0LlxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGdldFJldHVybmVkQ2FzdGVkRXhwcmVzc2lvbihcbiAgc3RhdGVtZW50czogVFNFU1RyZWUuU3RhdGVtZW50W10sXG4pOiBUU0VTVHJlZS5FeHByZXNzaW9uIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2Ygc3RhdGVtZW50cykge1xuICAgIGlmIChzdGF0ZW1lbnQudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuUmV0dXJuU3RhdGVtZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50LmFyZ3VtZW50ID09PSBudWxsXG4gICAgICA/IHZvaWQgMFxuICAgICAgOiBnZXRDYXN0ZWRFeHByZXNzaW9uKHN0YXRlbWVudC5hcmd1bWVudCk7XG4gIH1cblxuICByZXR1cm4gdm9pZCAwO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbm9kZSBpcyBhIGRlY2xhcmF0aW9uIHRoYXQgaW50cm9kdWNlcyB0b3AtbGV2ZWwgbmFtZXMuXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyBUcnVlIHdoZW4gdGhlIG5vZGUgaXMgYSBzdXBwb3J0ZWQgZGVjbGFyYXRpb24uXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEludGVybmFsIGhlbHBlciBmb3Igbm8tdW5zYWZlLXZpdGVzdC1tb2NrLWZhY3RvcnktY2FzdC5cbiAqIGBgYFxuICovXG5mdW5jdGlvbiBpc05hbWVkRGVjbGFyYXRpb24oXG4gIG5vZGU6XG4gICAgfCBUU0VTVHJlZS5FeHBvcnREZWZhdWx0RGVjbGFyYXRpb25bXCJkZWNsYXJhdGlvblwiXVxuICAgIHwgVFNFU1RyZWUuUHJvZ3JhbVN0YXRlbWVudCxcbik6IG5vZGUgaXMgTmFtZWREZWNsYXJhdGlvbiB7XG4gIHJldHVybiAoXG4gICAgbm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5GdW5jdGlvbkRlY2xhcmF0aW9uIHx8XG4gICAgbm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5DbGFzc0RlY2xhcmF0aW9uIHx8XG4gICAgbm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5WYXJpYWJsZURlY2xhcmF0aW9uIHx8XG4gICAgbm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5UU1R5cGVBbGlhc0RlY2xhcmF0aW9uIHx8XG4gICAgbm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5UU0ludGVyZmFjZURlY2xhcmF0aW9uIHx8XG4gICAgbm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5UU0VudW1EZWNsYXJhdGlvbiB8fFxuICAgIG5vZGUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVFNNb2R1bGVEZWNsYXJhdGlvblxuICApO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgY2FsbCB0YXJnZXRzIGB2aS5tb2NrYCBvciBgdmkuZG9Nb2NrYC5cbiAqIEBwYXJhbSBub2RlIENhbGwgZXhwcmVzc2lvbiB0byBpbnNwZWN0LlxuICogQHJldHVybnMgVHJ1ZSB3aGVuIHRoZSBjYWxsZWUgaXMgYSBzdXBwb3J0ZWQgVml0ZXN0IG1vY2sgbWV0aG9kLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBJbnRlcm5hbCBoZWxwZXIgZm9yIG5vLXVuc2FmZS12aXRlc3QtbW9jay1mYWN0b3J5LWNhc3QuXG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gaXNWaXRlc3RNb2NrQ2FsbChub2RlOiBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbik6IGJvb2xlYW4ge1xuICBpZiAoXG4gICAgbm9kZS5jYWxsZWUudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuTWVtYmVyRXhwcmVzc2lvbiB8fFxuICAgIG5vZGUuY2FsbGVlLm9iamVjdC50eXBlICE9PSBBU1RfTk9ERV9UWVBFUy5JZGVudGlmaWVyIHx8XG4gICAgbm9kZS5jYWxsZWUub2JqZWN0Lm5hbWUgIT09IFwidmlcIiB8fFxuICAgIG5vZGUuY2FsbGVlLnByb3BlcnR5LnR5cGUgIT09IEFTVF9OT0RFX1RZUEVTLklkZW50aWZpZXJcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHN1cHBvcnRlZE1vY2tOYW1lcy5oYXMobm9kZS5jYWxsZWUucHJvcGVydHkubmFtZSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIG5hbWVzcGFjZSBpbXBvcnQgdG8gdXNlIGZvciBgdHlwZW9mIE5hbWVzcGFjZWAuXG4gKiBAcGFyYW0gc291cmNlQ29kZSBTb3VyY2UgY29kZSBmb3IgaW1wb3J0IGluc3BlY3Rpb24uXG4gKiBAcGFyYW0gbW9kdWxlU3BlY2lmaWVyIE1vZHVsZSBwYXRoIGJlaW5nIG1vY2tlZC5cbiAqIEByZXR1cm5zIEV4aXN0aW5nIG9yIGdlbmVyYXRlZCBuYW1lc3BhY2UgaW1wb3J0IGRldGFpbHMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIC8vIEludGVybmFsIGhlbHBlciBmb3Igbm8tdW5zYWZlLXZpdGVzdC1tb2NrLWZhY3RvcnktY2FzdC5cbiAqIGBgYFxuICovXG5mdW5jdGlvbiByZXNvbHZlTW9kdWxlVHlwZUltcG9ydChcbiAgc291cmNlQ29kZTogU291cmNlQ29kZUxpa2UsXG4gIG1vZHVsZVNwZWNpZmllcjogc3RyaW5nLFxuKTogTW9kdWxlVHlwZUltcG9ydCB7XG4gIGNvbnN0IHN0YXRlbWVudHMgPSBzb3VyY2VDb2RlLmFzdC5ib2R5O1xuICBjb25zdCBwcmVmZXJyZWROYW1lID0gY3JlYXRlTmFtZXNwYWNlTmFtZShtb2R1bGVTcGVjaWZpZXIpO1xuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMgYXMgVFNFU1RyZWUuUHJvZ3JhbVN0YXRlbWVudFtdKSB7XG4gICAgaWYgKFxuICAgICAgc3RhdGVtZW50LnR5cGUgIT09IEFTVF9OT0RFX1RZUEVTLkltcG9ydERlY2xhcmF0aW9uIHx8XG4gICAgICBzdGF0ZW1lbnQuc291cmNlLnZhbHVlICE9PSBtb2R1bGVTcGVjaWZpZXJcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3BlY2lmaWVyIG9mIHN0YXRlbWVudC5zcGVjaWZpZXJzKSB7XG4gICAgICBpZiAoc3BlY2lmaWVyLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkltcG9ydE5hbWVzcGFjZVNwZWNpZmllcikge1xuICAgICAgICByZXR1cm4geyBpc0V4aXN0aW5nOiB0cnVlLCBuYW1lc3BhY2VOYW1lOiBzcGVjaWZpZXIubG9jYWwubmFtZSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHVzZWROYW1lcyA9IGNvbGxlY3RUb3BMZXZlbE5hbWVzKHN0YXRlbWVudHMpO1xuICBsZXQgbmFtZXNwYWNlTmFtZSA9IHByZWZlcnJlZE5hbWU7XG4gIGxldCBzdWZmaXggPSAxO1xuXG4gIHdoaWxlICh1c2VkTmFtZXMuaGFzKG5hbWVzcGFjZU5hbWUpKSB7XG4gICAgbmFtZXNwYWNlTmFtZSA9IGAke3ByZWZlcnJlZE5hbWV9JHtzdWZmaXgudG9GaXhlZCgwKX1gO1xuICAgIHN1ZmZpeCArPSAxO1xuICB9XG5cbiAgcmV0dXJuIHsgaXNFeGlzdGluZzogZmFsc2UsIG5hbWVzcGFjZU5hbWUgfTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIG5lc3RlZCBjYXN0IHdyYXBwZXJzIGZyb20gYW4gZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSBleHByZXNzaW9uIEV4cHJlc3Npb24gdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgRXhwcmVzc2lvbiB3aXRob3V0IGFueSBzdXJyb3VuZGluZyBjYXN0cy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gSW50ZXJuYWwgaGVscGVyIGZvciBuby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0LlxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHN0cmlwQ2FzdEV4cHJlc3Npb25zKFxuICBleHByZXNzaW9uOiBUU0VTVHJlZS5FeHByZXNzaW9uLFxuKTogVFNFU1RyZWUuRXhwcmVzc2lvbiB7XG4gIGlmIChleHByZXNzaW9uLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLlRTQXNFeHByZXNzaW9uKSB7XG4gICAgcmV0dXJuIHN0cmlwQ2FzdEV4cHJlc3Npb25zKGV4cHJlc3Npb24uZXhwcmVzc2lvbik7XG4gIH1cblxuICBpZiAoZXhwcmVzc2lvbi50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5UU1R5cGVBc3NlcnRpb24pIHtcbiAgICByZXR1cm4gc3RyaXBDYXN0RXhwcmVzc2lvbnMoZXhwcmVzc2lvbi5leHByZXNzaW9uKTtcbiAgfVxuXG4gIHJldHVybiBleHByZXNzaW9uO1xufVxuXG5leHBvcnQgeyBub1Vuc2FmZVZpdGVzdE1vY2tGYWN0b3J5Q2FzdFJ1bGUgfTtcbiJdfQ==
@@ -10,6 +10,7 @@ declare const codeperfectRules: {
10
10
  readonly "no-interface-member-docs": Rule.RuleModule;
11
11
  readonly "no-multiple-declarators": Rule.RuleModule;
12
12
  readonly "no-reexports-outside-barrels": Rule.RuleModule;
13
+ readonly "no-unsafe-vitest-mock-factory-cast": Rule.RuleModule;
13
14
  readonly "no-unused-exports": Rule.RuleModule;
14
15
  readonly "prefer-interface-types": Rule.RuleModule;
15
16
  readonly "prefer-vi-mocked-import": Rule.RuleModule;
@@ -34,6 +35,7 @@ declare const codeperfectPlugin: {
34
35
  readonly "no-interface-member-docs": Rule.RuleModule;
35
36
  readonly "no-multiple-declarators": Rule.RuleModule;
36
37
  readonly "no-reexports-outside-barrels": Rule.RuleModule;
38
+ readonly "no-unsafe-vitest-mock-factory-cast": Rule.RuleModule;
37
39
  readonly "no-unused-exports": Rule.RuleModule;
38
40
  readonly "prefer-interface-types": Rule.RuleModule;
39
41
  readonly "prefer-vi-mocked-import": Rule.RuleModule;
@@ -1 +1 @@
1
- {"version":3,"file":"codeperfect-plugin.d.ts","sourceRoot":"","sources":["../../src/infrastructure/codeperfect-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,IAAI,EAAE,MAAM,QAAQ,CAAC;AAsB3C,mDAAmD;AACnD,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;CAkB8B,CAAC;AAErD,oDAAoD;AACpD,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;CAKkC,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"codeperfect-plugin.d.ts","sourceRoot":"","sources":["../../src/infrastructure/codeperfect-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAU,IAAI,EAAE,MAAM,QAAQ,CAAC;AAuB3C,mDAAmD;AACnD,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;CAmB8B,CAAC;AAErD,oDAAoD;AACpD,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;CAKkC,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC"}
@@ -1,4 +1,4 @@
1
- import { assertActualExpectedNamesRule, barrelFilesExportsOnlyRule, consistentBarrelFilesRule, enforceAaaStructureRule, noImportExportAliasesRule, noImportExportExtensionsRule, noInterfaceMemberDocumentationRule, noMultipleDeclaratorsRule, noReexportsOutsideBarrelsRule, noUnusedExportsRule, preferInterfaceTypesRule, preferViMockedImportRule, requireActResultCaptureRule, requireExampleLanguageRule, requireTestCompanionRule, singleActStatementRule, singleLineJsdocRule, } from "../application/index.js";
1
+ import { assertActualExpectedNamesRule, barrelFilesExportsOnlyRule, consistentBarrelFilesRule, enforceAaaStructureRule, noImportExportAliasesRule, noImportExportExtensionsRule, noInterfaceMemberDocumentationRule, noMultipleDeclaratorsRule, noReexportsOutsideBarrelsRule, noUnsafeVitestMockFactoryCastRule, noUnusedExportsRule, preferInterfaceTypesRule, preferViMockedImportRule, requireActResultCaptureRule, requireExampleLanguageRule, requireTestCompanionRule, singleActStatementRule, singleLineJsdocRule, } from "../application/index.js";
2
2
  /** Rule registry exposed by the package plugin. */
3
3
  const codeperfectRules = {
4
4
  "assert-actual-expected-names": assertActualExpectedNamesRule,
@@ -10,6 +10,7 @@ const codeperfectRules = {
10
10
  "no-interface-member-docs": noInterfaceMemberDocumentationRule,
11
11
  "no-multiple-declarators": noMultipleDeclaratorsRule,
12
12
  "no-reexports-outside-barrels": noReexportsOutsideBarrelsRule,
13
+ "no-unsafe-vitest-mock-factory-cast": noUnsafeVitestMockFactoryCastRule,
13
14
  "no-unused-exports": noUnusedExportsRule,
14
15
  "prefer-interface-types": preferInterfaceTypesRule,
15
16
  "prefer-vi-mocked-import": preferViMockedImportRule,
@@ -27,4 +28,4 @@ const codeperfectPlugin = {
27
28
  rules: codeperfectRules,
28
29
  };
29
30
  export { codeperfectPlugin, codeperfectRules };
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXBlcmZlY3QtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luZnJhc3RydWN0dXJlL2NvZGVwZXJmZWN0LXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsa0NBQWtDLEVBQ2xDLHlCQUF5QixFQUN6Qiw2QkFBNkIsRUFDN0IsbUJBQW1CLEVBQ25CLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsMkJBQTJCLEVBQzNCLDBCQUEwQixFQUMxQix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLG1CQUFtQixHQUNwQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLG1EQUFtRDtBQUNuRCxNQUFNLGdCQUFnQixHQUFHO0lBQ3ZCLDhCQUE4QixFQUFFLDZCQUE2QjtJQUM3RCwyQkFBMkIsRUFBRSwwQkFBMEI7SUFDdkQseUJBQXlCLEVBQUUseUJBQXlCO0lBQ3BELHVCQUF1QixFQUFFLHVCQUF1QjtJQUNoRCwwQkFBMEIsRUFBRSx5QkFBeUI7SUFDckQsNkJBQTZCLEVBQUUsNEJBQTRCO0lBQzNELDBCQUEwQixFQUFFLGtDQUFrQztJQUM5RCx5QkFBeUIsRUFBRSx5QkFBeUI7SUFDcEQsOEJBQThCLEVBQUUsNkJBQTZCO0lBQzdELG1CQUFtQixFQUFFLG1CQUFtQjtJQUN4Qyx3QkFBd0IsRUFBRSx3QkFBd0I7SUFDbEQseUJBQXlCLEVBQUUsd0JBQXdCO0lBQ25ELDRCQUE0QixFQUFFLDJCQUEyQjtJQUN6RCwwQkFBMEIsRUFBRSwwQkFBMEI7SUFDdEQsd0JBQXdCLEVBQUUsd0JBQXdCO0lBQ2xELHNCQUFzQixFQUFFLHNCQUFzQjtJQUM5QyxtQkFBbUIsRUFBRSxtQkFBbUI7Q0FDVSxDQUFDO0FBRXJELG9EQUFvRDtBQUNwRCxNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLElBQUksRUFBRTtRQUNKLElBQUksRUFBRSw0QkFBNEI7S0FDbkM7SUFDRCxLQUFLLEVBQUUsZ0JBQWdCO0NBQ2dDLENBQUM7QUFFMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExpbnRlciwgUnVsZSB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHtcbiAgYXNzZXJ0QWN0dWFsRXhwZWN0ZWROYW1lc1J1bGUsXG4gIGJhcnJlbEZpbGVzRXhwb3J0c09ubHlSdWxlLFxuICBjb25zaXN0ZW50QmFycmVsRmlsZXNSdWxlLFxuICBlbmZvcmNlQWFhU3RydWN0dXJlUnVsZSxcbiAgbm9JbXBvcnRFeHBvcnRBbGlhc2VzUnVsZSxcbiAgbm9JbXBvcnRFeHBvcnRFeHRlbnNpb25zUnVsZSxcbiAgbm9JbnRlcmZhY2VNZW1iZXJEb2N1bWVudGF0aW9uUnVsZSxcbiAgbm9NdWx0aXBsZURlY2xhcmF0b3JzUnVsZSxcbiAgbm9SZWV4cG9ydHNPdXRzaWRlQmFycmVsc1J1bGUsXG4gIG5vVW51c2VkRXhwb3J0c1J1bGUsXG4gIHByZWZlckludGVyZmFjZVR5cGVzUnVsZSxcbiAgcHJlZmVyVmlNb2NrZWRJbXBvcnRSdWxlLFxuICByZXF1aXJlQWN0UmVzdWx0Q2FwdHVyZVJ1bGUsXG4gIHJlcXVpcmVFeGFtcGxlTGFuZ3VhZ2VSdWxlLFxuICByZXF1aXJlVGVzdENvbXBhbmlvblJ1bGUsXG4gIHNpbmdsZUFjdFN0YXRlbWVudFJ1bGUsXG4gIHNpbmdsZUxpbmVKc2RvY1J1bGUsXG59IGZyb20gXCIuLi9hcHBsaWNhdGlvblwiO1xuXG4vKiogUnVsZSByZWdpc3RyeSBleHBvc2VkIGJ5IHRoZSBwYWNrYWdlIHBsdWdpbi4gKi9cbmNvbnN0IGNvZGVwZXJmZWN0UnVsZXMgPSB7XG4gIFwiYXNzZXJ0LWFjdHVhbC1leHBlY3RlZC1uYW1lc1wiOiBhc3NlcnRBY3R1YWxFeHBlY3RlZE5hbWVzUnVsZSxcbiAgXCJiYXJyZWwtZmlsZXMtZXhwb3J0cy1vbmx5XCI6IGJhcnJlbEZpbGVzRXhwb3J0c09ubHlSdWxlLFxuICBcImNvbnNpc3RlbnQtYmFycmVsLWZpbGVzXCI6IGNvbnNpc3RlbnRCYXJyZWxGaWxlc1J1bGUsXG4gIFwiZW5mb3JjZS1hYWEtc3RydWN0dXJlXCI6IGVuZm9yY2VBYWFTdHJ1Y3R1cmVSdWxlLFxuICBcIm5vLWltcG9ydC1leHBvcnQtYWxpYXNlc1wiOiBub0ltcG9ydEV4cG9ydEFsaWFzZXNSdWxlLFxuICBcIm5vLWltcG9ydC1leHBvcnQtZXh0ZW5zaW9uc1wiOiBub0ltcG9ydEV4cG9ydEV4dGVuc2lvbnNSdWxlLFxuICBcIm5vLWludGVyZmFjZS1tZW1iZXItZG9jc1wiOiBub0ludGVyZmFjZU1lbWJlckRvY3VtZW50YXRpb25SdWxlLFxuICBcIm5vLW11bHRpcGxlLWRlY2xhcmF0b3JzXCI6IG5vTXVsdGlwbGVEZWNsYXJhdG9yc1J1bGUsXG4gIFwibm8tcmVleHBvcnRzLW91dHNpZGUtYmFycmVsc1wiOiBub1JlZXhwb3J0c091dHNpZGVCYXJyZWxzUnVsZSxcbiAgXCJuby11bnVzZWQtZXhwb3J0c1wiOiBub1VudXNlZEV4cG9ydHNSdWxlLFxuICBcInByZWZlci1pbnRlcmZhY2UtdHlwZXNcIjogcHJlZmVySW50ZXJmYWNlVHlwZXNSdWxlLFxuICBcInByZWZlci12aS1tb2NrZWQtaW1wb3J0XCI6IHByZWZlclZpTW9ja2VkSW1wb3J0UnVsZSxcbiAgXCJyZXF1aXJlLWFjdC1yZXN1bHQtY2FwdHVyZVwiOiByZXF1aXJlQWN0UmVzdWx0Q2FwdHVyZVJ1bGUsXG4gIFwicmVxdWlyZS1leGFtcGxlLWxhbmd1YWdlXCI6IHJlcXVpcmVFeGFtcGxlTGFuZ3VhZ2VSdWxlLFxuICBcInJlcXVpcmUtdGVzdC1jb21wYW5pb25cIjogcmVxdWlyZVRlc3RDb21wYW5pb25SdWxlLFxuICBcInNpbmdsZS1hY3Qtc3RhdGVtZW50XCI6IHNpbmdsZUFjdFN0YXRlbWVudFJ1bGUsXG4gIFwic2luZ2xlLWxpbmUtanNkb2NcIjogc2luZ2xlTGluZUpzZG9jUnVsZSxcbn0gYXMgY29uc3Qgc2F0aXNmaWVzIFJlY29yZDxzdHJpbmcsIFJ1bGUuUnVsZU1vZHVsZT47XG5cbi8qKiBFU0xpbnQgcGx1Z2luIG9iamVjdCBleHBvcnRlZCBieSB0aGUgcGFja2FnZS4gKi9cbmNvbnN0IGNvZGVwZXJmZWN0UGx1Z2luID0ge1xuICBtZXRhOiB7XG4gICAgbmFtZTogXCJAY29kZXBlcmZlY3QvZXNsaW50LXBsdWdpblwiLFxuICB9LFxuICBydWxlczogY29kZXBlcmZlY3RSdWxlcyxcbn0gc2F0aXNmaWVzIE5vbk51bGxhYmxlPExpbnRlci5Db25maWdbXCJwbHVnaW5zXCJdPltzdHJpbmddO1xuXG5leHBvcnQgeyBjb2RlcGVyZmVjdFBsdWdpbiwgY29kZXBlcmZlY3RSdWxlcyB9O1xuIl19
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZXBlcmZlY3QtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2luZnJhc3RydWN0dXJlL2NvZGVwZXJmZWN0LXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQ0wsNkJBQTZCLEVBQzdCLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsa0NBQWtDLEVBQ2xDLHlCQUF5QixFQUN6Qiw2QkFBNkIsRUFDN0IsaUNBQWlDLEVBQ2pDLG1CQUFtQixFQUNuQix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLDJCQUEyQixFQUMzQiwwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixtQkFBbUIsR0FDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixtREFBbUQ7QUFDbkQsTUFBTSxnQkFBZ0IsR0FBRztJQUN2Qiw4QkFBOEIsRUFBRSw2QkFBNkI7SUFDN0QsMkJBQTJCLEVBQUUsMEJBQTBCO0lBQ3ZELHlCQUF5QixFQUFFLHlCQUF5QjtJQUNwRCx1QkFBdUIsRUFBRSx1QkFBdUI7SUFDaEQsMEJBQTBCLEVBQUUseUJBQXlCO0lBQ3JELDZCQUE2QixFQUFFLDRCQUE0QjtJQUMzRCwwQkFBMEIsRUFBRSxrQ0FBa0M7SUFDOUQseUJBQXlCLEVBQUUseUJBQXlCO0lBQ3BELDhCQUE4QixFQUFFLDZCQUE2QjtJQUM3RCxvQ0FBb0MsRUFBRSxpQ0FBaUM7SUFDdkUsbUJBQW1CLEVBQUUsbUJBQW1CO0lBQ3hDLHdCQUF3QixFQUFFLHdCQUF3QjtJQUNsRCx5QkFBeUIsRUFBRSx3QkFBd0I7SUFDbkQsNEJBQTRCLEVBQUUsMkJBQTJCO0lBQ3pELDBCQUEwQixFQUFFLDBCQUEwQjtJQUN0RCx3QkFBd0IsRUFBRSx3QkFBd0I7SUFDbEQsc0JBQXNCLEVBQUUsc0JBQXNCO0lBQzlDLG1CQUFtQixFQUFFLG1CQUFtQjtDQUNVLENBQUM7QUFFckQsb0RBQW9EO0FBQ3BELE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFLDRCQUE0QjtLQUNuQztJQUNELEtBQUssRUFBRSxnQkFBZ0I7Q0FDZ0MsQ0FBQztBQUUxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTGludGVyLCBSdWxlIH0gZnJvbSBcImVzbGludFwiO1xuXG5pbXBvcnQge1xuICBhc3NlcnRBY3R1YWxFeHBlY3RlZE5hbWVzUnVsZSxcbiAgYmFycmVsRmlsZXNFeHBvcnRzT25seVJ1bGUsXG4gIGNvbnNpc3RlbnRCYXJyZWxGaWxlc1J1bGUsXG4gIGVuZm9yY2VBYWFTdHJ1Y3R1cmVSdWxlLFxuICBub0ltcG9ydEV4cG9ydEFsaWFzZXNSdWxlLFxuICBub0ltcG9ydEV4cG9ydEV4dGVuc2lvbnNSdWxlLFxuICBub0ludGVyZmFjZU1lbWJlckRvY3VtZW50YXRpb25SdWxlLFxuICBub011bHRpcGxlRGVjbGFyYXRvcnNSdWxlLFxuICBub1JlZXhwb3J0c091dHNpZGVCYXJyZWxzUnVsZSxcbiAgbm9VbnNhZmVWaXRlc3RNb2NrRmFjdG9yeUNhc3RSdWxlLFxuICBub1VudXNlZEV4cG9ydHNSdWxlLFxuICBwcmVmZXJJbnRlcmZhY2VUeXBlc1J1bGUsXG4gIHByZWZlclZpTW9ja2VkSW1wb3J0UnVsZSxcbiAgcmVxdWlyZUFjdFJlc3VsdENhcHR1cmVSdWxlLFxuICByZXF1aXJlRXhhbXBsZUxhbmd1YWdlUnVsZSxcbiAgcmVxdWlyZVRlc3RDb21wYW5pb25SdWxlLFxuICBzaW5nbGVBY3RTdGF0ZW1lbnRSdWxlLFxuICBzaW5nbGVMaW5lSnNkb2NSdWxlLFxufSBmcm9tIFwiLi4vYXBwbGljYXRpb25cIjtcblxuLyoqIFJ1bGUgcmVnaXN0cnkgZXhwb3NlZCBieSB0aGUgcGFja2FnZSBwbHVnaW4uICovXG5jb25zdCBjb2RlcGVyZmVjdFJ1bGVzID0ge1xuICBcImFzc2VydC1hY3R1YWwtZXhwZWN0ZWQtbmFtZXNcIjogYXNzZXJ0QWN0dWFsRXhwZWN0ZWROYW1lc1J1bGUsXG4gIFwiYmFycmVsLWZpbGVzLWV4cG9ydHMtb25seVwiOiBiYXJyZWxGaWxlc0V4cG9ydHNPbmx5UnVsZSxcbiAgXCJjb25zaXN0ZW50LWJhcnJlbC1maWxlc1wiOiBjb25zaXN0ZW50QmFycmVsRmlsZXNSdWxlLFxuICBcImVuZm9yY2UtYWFhLXN0cnVjdHVyZVwiOiBlbmZvcmNlQWFhU3RydWN0dXJlUnVsZSxcbiAgXCJuby1pbXBvcnQtZXhwb3J0LWFsaWFzZXNcIjogbm9JbXBvcnRFeHBvcnRBbGlhc2VzUnVsZSxcbiAgXCJuby1pbXBvcnQtZXhwb3J0LWV4dGVuc2lvbnNcIjogbm9JbXBvcnRFeHBvcnRFeHRlbnNpb25zUnVsZSxcbiAgXCJuby1pbnRlcmZhY2UtbWVtYmVyLWRvY3NcIjogbm9JbnRlcmZhY2VNZW1iZXJEb2N1bWVudGF0aW9uUnVsZSxcbiAgXCJuby1tdWx0aXBsZS1kZWNsYXJhdG9yc1wiOiBub011bHRpcGxlRGVjbGFyYXRvcnNSdWxlLFxuICBcIm5vLXJlZXhwb3J0cy1vdXRzaWRlLWJhcnJlbHNcIjogbm9SZWV4cG9ydHNPdXRzaWRlQmFycmVsc1J1bGUsXG4gIFwibm8tdW5zYWZlLXZpdGVzdC1tb2NrLWZhY3RvcnktY2FzdFwiOiBub1Vuc2FmZVZpdGVzdE1vY2tGYWN0b3J5Q2FzdFJ1bGUsXG4gIFwibm8tdW51c2VkLWV4cG9ydHNcIjogbm9VbnVzZWRFeHBvcnRzUnVsZSxcbiAgXCJwcmVmZXItaW50ZXJmYWNlLXR5cGVzXCI6IHByZWZlckludGVyZmFjZVR5cGVzUnVsZSxcbiAgXCJwcmVmZXItdmktbW9ja2VkLWltcG9ydFwiOiBwcmVmZXJWaU1vY2tlZEltcG9ydFJ1bGUsXG4gIFwicmVxdWlyZS1hY3QtcmVzdWx0LWNhcHR1cmVcIjogcmVxdWlyZUFjdFJlc3VsdENhcHR1cmVSdWxlLFxuICBcInJlcXVpcmUtZXhhbXBsZS1sYW5ndWFnZVwiOiByZXF1aXJlRXhhbXBsZUxhbmd1YWdlUnVsZSxcbiAgXCJyZXF1aXJlLXRlc3QtY29tcGFuaW9uXCI6IHJlcXVpcmVUZXN0Q29tcGFuaW9uUnVsZSxcbiAgXCJzaW5nbGUtYWN0LXN0YXRlbWVudFwiOiBzaW5nbGVBY3RTdGF0ZW1lbnRSdWxlLFxuICBcInNpbmdsZS1saW5lLWpzZG9jXCI6IHNpbmdsZUxpbmVKc2RvY1J1bGUsXG59IGFzIGNvbnN0IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBSdWxlLlJ1bGVNb2R1bGU+O1xuXG4vKiogRVNMaW50IHBsdWdpbiBvYmplY3QgZXhwb3J0ZWQgYnkgdGhlIHBhY2thZ2UuICovXG5jb25zdCBjb2RlcGVyZmVjdFBsdWdpbiA9IHtcbiAgbWV0YToge1xuICAgIG5hbWU6IFwiQGNvZGVwZXJmZWN0L2VzbGludC1wbHVnaW5cIixcbiAgfSxcbiAgcnVsZXM6IGNvZGVwZXJmZWN0UnVsZXMsXG59IHNhdGlzZmllcyBOb25OdWxsYWJsZTxMaW50ZXIuQ29uZmlnW1wicGx1Z2luc1wiXT5bc3RyaW5nXTtcblxuZXhwb3J0IHsgY29kZXBlcmZlY3RQbHVnaW4sIGNvZGVwZXJmZWN0UnVsZXMgfTtcbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/infrastructure/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC,gEAAgE;AAChE,KAAK,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC;AA6GlE,oDAAoD;AACpD,QAAA,MAAM,GAAG,mBAA6B,CAAC;AAEvC,sDAAsD;AACtD,QAAA,MAAM,YAAY,mBAAsC,CAAC;AAEzD,sCAAsC;AACtC,QAAA,MAAM,IAAI,mBAA8B,CAAC;AAEzC,+CAA+C;AAC/C,QAAA,MAAM,aAAa,mBAAuC,CAAC;AAE3D,yCAAyC;AACzC,QAAA,MAAM,OAAO,mBAAiC,CAAC;AAE/C,sDAAsD;AACtD,QAAA,MAAM,GAAG,mBAA6B,CAAC;AAEvC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/infrastructure/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIrC,gEAAgE;AAChE,KAAK,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC;AA+GlE,oDAAoD;AACpD,QAAA,MAAM,GAAG,mBAA6B,CAAC;AAEvC,sDAAsD;AACtD,QAAA,MAAM,YAAY,mBAAsC,CAAC;AAEzD,sCAAsC;AACtC,QAAA,MAAM,IAAI,mBAA8B,CAAC;AAEzC,+CAA+C;AAC/C,QAAA,MAAM,aAAa,mBAAuC,CAAC;AAE3D,yCAAyC;AACzC,QAAA,MAAM,OAAO,mBAAiC,CAAC;AAE/C,sDAAsD;AACtD,QAAA,MAAM,GAAG,mBAA6B,CAAC;AAEvC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC;AAChE,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
@@ -27,6 +27,7 @@ const aaaRuleNames = [
27
27
  const testingRuleNames = [
28
28
  "assert-actual-expected-names",
29
29
  "enforce-aaa-structure",
30
+ "no-unsafe-vitest-mock-factory-cast",
30
31
  "prefer-vi-mocked-import",
31
32
  "require-act-result-capture",
32
33
  "require-test-companion",
@@ -44,6 +45,7 @@ const allRuleNames = [
44
45
  "no-multiple-declarators",
45
46
  "no-reexports-outside-barrels",
46
47
  "no-unused-exports",
48
+ "no-unsafe-vitest-mock-factory-cast",
47
49
  "prefer-interface-types",
48
50
  "prefer-vi-mocked-import",
49
51
  "require-act-result-capture",
@@ -94,4 +96,4 @@ const testing = createPreset(testingRuleNames);
94
96
  /** Preset that enables AAA-specific testing rules. */
95
97
  const aaa = createPreset(aaaRuleNames);
96
98
  export { aaa, all, architecture, core, documentation, testing };
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmZyYXN0cnVjdHVyZS9wcmVzZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBZ0IzRSx1REFBdUQ7QUFDdkQsTUFBTSxxQkFBcUIsR0FBRztJQUM1QiwyQkFBMkI7SUFDM0IseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUMxQiw2QkFBNkI7SUFDN0IsbUJBQW1CO0lBQ25CLDhCQUE4QjtDQUNtQixDQUFDO0FBRXBELCtDQUErQztBQUMvQyxNQUFNLGFBQWEsR0FBRztJQUNwQix5QkFBeUI7SUFDekIsd0JBQXdCO0NBQ3lCLENBQUM7QUFFcEQsd0RBQXdEO0FBQ3hELE1BQU0sc0JBQXNCLEdBQUc7SUFDN0IsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQixtQkFBbUI7Q0FDOEIsQ0FBQztBQUVwRCxzREFBc0Q7QUFDdEQsTUFBTSxZQUFZLEdBQUc7SUFDbkIsdUJBQXVCO0NBQzBCLENBQUM7QUFFcEQsMERBQTBEO0FBQzFELE1BQU0sZ0JBQWdCLEdBQUc7SUFDdkIsOEJBQThCO0lBQzlCLHVCQUF1QjtJQUN2Qix5QkFBeUI7SUFDekIsNEJBQTRCO0lBQzVCLHdCQUF3QjtJQUN4QixzQkFBc0I7Q0FDMkIsQ0FBQztBQUVwRCwrQ0FBK0M7QUFDL0MsTUFBTSxZQUFZLEdBQUc7SUFDbkIsOEJBQThCO0lBQzlCLDJCQUEyQjtJQUMzQix5QkFBeUI7SUFDekIsdUJBQXVCO0lBQ3ZCLDBCQUEwQjtJQUMxQiw2QkFBNkI7SUFDN0IsMEJBQTBCO0lBQzFCLHlCQUF5QjtJQUN6Qiw4QkFBOEI7SUFDOUIsbUJBQW1CO0lBQ25CLHdCQUF3QjtJQUN4Qix5QkFBeUI7SUFDekIsNEJBQTRCO0lBQzVCLDBCQUEwQjtJQUMxQix3QkFBd0I7SUFDeEIsc0JBQXNCO0lBQ3RCLG1CQUFtQjtDQUM4QixDQUFDO0FBRXBEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxZQUFZLENBQ25CLFNBQXlDO0lBRXpDLE9BQU87UUFDTCxPQUFPLEVBQUU7WUFDUCxXQUFXLEVBQUUsaUJBQWlCO1NBQy9CO1FBQ0QsS0FBSyxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUM7S0FDOUIsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMsV0FBVyxDQUNsQixTQUF5QztJQUV6QyxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsZUFBZSxRQUFRLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUNsRSxDQUFDO0FBQ0osQ0FBQztBQUVELG9EQUFvRDtBQUNwRCxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFdkMsc0RBQXNEO0FBQ3RELE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRXpELHNDQUFzQztBQUN0QyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7QUFFekMsK0NBQStDO0FBQy9DLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBRTNELHlDQUF5QztBQUN6QyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUUvQyxzREFBc0Q7QUFDdEQsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBRXZDLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMaW50ZXIgfSBmcm9tIFwiZXNsaW50XCI7XG5cbmltcG9ydCB7IGNvZGVwZXJmZWN0UGx1Z2luLCBjb2RlcGVyZmVjdFJ1bGVzIH0gZnJvbSBcIi4vY29kZXBlcmZlY3QtcGx1Z2luXCI7XG5cbi8qKiBSZXByZXNlbnRzIGEgcmVhZHktdG8tdXNlIHByZXNldCBleHBvcnRlZCBieSB0aGUgcGFja2FnZS4gKi9cbnR5cGUgQ29kZXBlcmZlY3RQcmVzZXQgPSBQaWNrPExpbnRlci5Db25maWcsIFwicGx1Z2luc1wiIHwgXCJydWxlc1wiPjtcblxuLyoqIFJlcHJlc2VudHMgdGhlIGVuYWJsZWQgcnVsZSBlbnRyaWVzIGluc2lkZSBhIHByZXNldC4gKi9cbnR5cGUgQ29kZXBlcmZlY3RSdWxlRW50cmllcyA9IFBhcnRpYWw8XG4gIFJlY29yZDxDb2RlcGVyZmVjdFJ1bGVLZXksIExpbnRlci5SdWxlRW50cnk+XG4+O1xuXG4vKiogTmFtZXNwYWNlcyBhIHBhY2thZ2Utb3duZWQgcnVsZSB1bmRlciB0aGUgYGNvZGVwZXJmZWN0L2AgcHJlZml4LiAqL1xudHlwZSBDb2RlcGVyZmVjdFJ1bGVLZXkgPSBgY29kZXBlcmZlY3QvJHtDb2RlcGVyZmVjdFJ1bGVOYW1lfWA7XG5cbi8qKiBFbnVtZXJhdGVzIHRoZSBwYWNrYWdlLW93bmVkIHJ1bGUgbmFtZXMuICovXG50eXBlIENvZGVwZXJmZWN0UnVsZU5hbWUgPSBrZXlvZiB0eXBlb2YgY29kZXBlcmZlY3RSdWxlcztcblxuLyoqIFJ1bGUgbmFtZXMgZ3JvdXBlZCBpbnRvIHRoZSBhcmNoaXRlY3R1cmUgcHJlc2V0LiAqL1xuY29uc3QgYXJjaGl0ZWN0dXJlUnVsZU5hbWVzID0gW1xuICBcImJhcnJlbC1maWxlcy1leHBvcnRzLW9ubHlcIixcbiAgXCJjb25zaXN0ZW50LWJhcnJlbC1maWxlc1wiLFxuICBcIm5vLWltcG9ydC1leHBvcnQtYWxpYXNlc1wiLFxuICBcIm5vLWltcG9ydC1leHBvcnQtZXh0ZW5zaW9uc1wiLFxuICBcIm5vLXVudXNlZC1leHBvcnRzXCIsXG4gIFwibm8tcmVleHBvcnRzLW91dHNpZGUtYmFycmVsc1wiLFxuXSBhcyBjb25zdCBzYXRpc2ZpZXMgcmVhZG9ubHkgQ29kZXBlcmZlY3RSdWxlTmFtZVtdO1xuXG4vKiogUnVsZSBuYW1lcyBncm91cGVkIGludG8gdGhlIGNvcmUgcHJlc2V0LiAqL1xuY29uc3QgY29yZVJ1bGVOYW1lcyA9IFtcbiAgXCJuby1tdWx0aXBsZS1kZWNsYXJhdG9yc1wiLFxuICBcInByZWZlci1pbnRlcmZhY2UtdHlwZXNcIixcbl0gYXMgY29uc3Qgc2F0aXNmaWVzIHJlYWRvbmx5IENvZGVwZXJmZWN0UnVsZU5hbWVbXTtcblxuLyoqIFJ1bGUgbmFtZXMgZ3JvdXBlZCBpbnRvIHRoZSBkb2N1bWVudGF0aW9uIHByZXNldC4gKi9cbmNvbnN0IGRvY3VtZW50YXRpb25SdWxlTmFtZXMgPSBbXG4gIFwibm8taW50ZXJmYWNlLW1lbWJlci1kb2NzXCIsXG4gIFwicmVxdWlyZS1leGFtcGxlLWxhbmd1YWdlXCIsXG4gIFwic2luZ2xlLWxpbmUtanNkb2NcIixcbl0gYXMgY29uc3Qgc2F0aXNmaWVzIHJlYWRvbmx5IENvZGVwZXJmZWN0UnVsZU5hbWVbXTtcblxuLyoqIFJ1bGUgbmFtZXMgZ3JvdXBlZCBpbnRvIHRoZSBBQUEtZm9jdXNlZCBwcmVzZXQuICovXG5jb25zdCBhYWFSdWxlTmFtZXMgPSBbXG4gIFwiZW5mb3JjZS1hYWEtc3RydWN0dXJlXCIsXG5dIGFzIGNvbnN0IHNhdGlzZmllcyByZWFkb25seSBDb2RlcGVyZmVjdFJ1bGVOYW1lW107XG5cbi8qKiBSdWxlIG5hbWVzIGdyb3VwZWQgaW50byB0aGUgYnJvYWRlciB0ZXN0aW5nIHByZXNldC4gKi9cbmNvbnN0IHRlc3RpbmdSdWxlTmFtZXMgPSBbXG4gIFwiYXNzZXJ0LWFjdHVhbC1leHBlY3RlZC1uYW1lc1wiLFxuICBcImVuZm9yY2UtYWFhLXN0cnVjdHVyZVwiLFxuICBcInByZWZlci12aS1tb2NrZWQtaW1wb3J0XCIsXG4gIFwicmVxdWlyZS1hY3QtcmVzdWx0LWNhcHR1cmVcIixcbiAgXCJyZXF1aXJlLXRlc3QtY29tcGFuaW9uXCIsXG4gIFwic2luZ2xlLWFjdC1zdGF0ZW1lbnRcIixcbl0gYXMgY29uc3Qgc2F0aXNmaWVzIHJlYWRvbmx5IENvZGVwZXJmZWN0UnVsZU5hbWVbXTtcblxuLyoqIFJ1bGUgbmFtZXMgdXNlZCBieSB0aGUgYWxsLXJ1bGVzIHByZXNldC4gKi9cbmNvbnN0IGFsbFJ1bGVOYW1lcyA9IFtcbiAgXCJhc3NlcnQtYWN0dWFsLWV4cGVjdGVkLW5hbWVzXCIsXG4gIFwiYmFycmVsLWZpbGVzLWV4cG9ydHMtb25seVwiLFxuICBcImNvbnNpc3RlbnQtYmFycmVsLWZpbGVzXCIsXG4gIFwiZW5mb3JjZS1hYWEtc3RydWN0dXJlXCIsXG4gIFwibm8taW1wb3J0LWV4cG9ydC1hbGlhc2VzXCIsXG4gIFwibm8taW1wb3J0LWV4cG9ydC1leHRlbnNpb25zXCIsXG4gIFwibm8taW50ZXJmYWNlLW1lbWJlci1kb2NzXCIsXG4gIFwibm8tbXVsdGlwbGUtZGVjbGFyYXRvcnNcIixcbiAgXCJuby1yZWV4cG9ydHMtb3V0c2lkZS1iYXJyZWxzXCIsXG4gIFwibm8tdW51c2VkLWV4cG9ydHNcIixcbiAgXCJwcmVmZXItaW50ZXJmYWNlLXR5cGVzXCIsXG4gIFwicHJlZmVyLXZpLW1vY2tlZC1pbXBvcnRcIixcbiAgXCJyZXF1aXJlLWFjdC1yZXN1bHQtY2FwdHVyZVwiLFxuICBcInJlcXVpcmUtZXhhbXBsZS1sYW5ndWFnZVwiLFxuICBcInJlcXVpcmUtdGVzdC1jb21wYW5pb25cIixcbiAgXCJzaW5nbGUtYWN0LXN0YXRlbWVudFwiLFxuICBcInNpbmdsZS1saW5lLWpzZG9jXCIsXG5dIGFzIGNvbnN0IHNhdGlzZmllcyByZWFkb25seSBDb2RlcGVyZmVjdFJ1bGVOYW1lW107XG5cbi8qKlxuICogQ3JlYXRlcyBhIHByZXNldCBmb3IgdGhlIHByb3ZpZGVkIHJ1bGUgbmFtZXMuXG4gKiBAcGFyYW0gcnVsZU5hbWVzIFJ1bGUgbmFtZXMgdG8gZW5hYmxlLlxuICogQHJldHVybnMgRVNMaW50IHByZXNldCBjb250YWluaW5nIHRoZSBwYWNrYWdlIHBsdWdpbiBhbmQgZW5hYmxlZCBydWxlcy5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBwcmVzZXQgPSBjcmVhdGVQcmVzZXQoW1wibm8tbXVsdGlwbGUtZGVjbGFyYXRvcnNcIl0pO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVByZXNldChcbiAgcnVsZU5hbWVzOiByZWFkb25seSBDb2RlcGVyZmVjdFJ1bGVOYW1lW10sXG4pOiBDb2RlcGVyZmVjdFByZXNldCB7XG4gIHJldHVybiB7XG4gICAgcGx1Z2luczoge1xuICAgICAgY29kZXBlcmZlY3Q6IGNvZGVwZXJmZWN0UGx1Z2luLFxuICAgIH0sXG4gICAgcnVsZXM6IGNyZWF0ZVJ1bGVzKHJ1bGVOYW1lcyksXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgcnVsZSBlbnRyeSBtYXAgZm9yIGEgcHJlc2V0LlxuICogQHBhcmFtIHJ1bGVOYW1lcyBSdWxlIG5hbWVzIHRvIGVuYWJsZS5cbiAqIEByZXR1cm5zIFJ1bGUgZW50cnkgbWFwIGtleWVkIGJ5IGBjb2RlcGVyZmVjdC9gIHJ1bGUgbmFtZS5cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBydWxlcyA9IGNyZWF0ZVJ1bGVzKFtcInByZWZlci1pbnRlcmZhY2UtdHlwZXNcIl0pO1xuICogYGBgXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJ1bGVzKFxuICBydWxlTmFtZXM6IHJlYWRvbmx5IENvZGVwZXJmZWN0UnVsZU5hbWVbXSxcbik6IENvZGVwZXJmZWN0UnVsZUVudHJpZXMge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIHJ1bGVOYW1lcy5tYXAoKHJ1bGVOYW1lKSA9PiBbYGNvZGVwZXJmZWN0LyR7cnVsZU5hbWV9YCwgXCJlcnJvclwiXSksXG4gICk7XG59XG5cbi8qKiBQcmVzZXQgdGhhdCBlbmFibGVzIGV2ZXJ5IHBhY2thZ2Utb3duZWQgcnVsZS4gKi9cbmNvbnN0IGFsbCA9IGNyZWF0ZVByZXNldChhbGxSdWxlTmFtZXMpO1xuXG4vKiogUHJlc2V0IHRoYXQgZW5hYmxlcyBhcmNoaXRlY3R1cmUtZm9jdXNlZCBydWxlcy4gKi9cbmNvbnN0IGFyY2hpdGVjdHVyZSA9IGNyZWF0ZVByZXNldChhcmNoaXRlY3R1cmVSdWxlTmFtZXMpO1xuXG4vKiogUHJlc2V0IHRoYXQgZW5hYmxlcyBjb3JlIHJ1bGVzLiAqL1xuY29uc3QgY29yZSA9IGNyZWF0ZVByZXNldChjb3JlUnVsZU5hbWVzKTtcblxuLyoqIFByZXNldCB0aGF0IGVuYWJsZXMgZG9jdW1lbnRhdGlvbiBydWxlcy4gKi9cbmNvbnN0IGRvY3VtZW50YXRpb24gPSBjcmVhdGVQcmVzZXQoZG9jdW1lbnRhdGlvblJ1bGVOYW1lcyk7XG5cbi8qKiBQcmVzZXQgdGhhdCBlbmFibGVzIHRlc3RpbmcgcnVsZXMuICovXG5jb25zdCB0ZXN0aW5nID0gY3JlYXRlUHJlc2V0KHRlc3RpbmdSdWxlTmFtZXMpO1xuXG4vKiogUHJlc2V0IHRoYXQgZW5hYmxlcyBBQUEtc3BlY2lmaWMgdGVzdGluZyBydWxlcy4gKi9cbmNvbnN0IGFhYSA9IGNyZWF0ZVByZXNldChhYWFSdWxlTmFtZXMpO1xuXG5leHBvcnQgeyBhYWEsIGFsbCwgYXJjaGl0ZWN0dXJlLCBjb3JlLCBkb2N1bWVudGF0aW9uLCB0ZXN0aW5nIH07XG5leHBvcnQgdHlwZSB7IENvZGVwZXJmZWN0UHJlc2V0IH07XG4iXX0=
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2V0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbmZyYXN0cnVjdHVyZS9wcmVzZXRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBZ0IzRSx1REFBdUQ7QUFDdkQsTUFBTSxxQkFBcUIsR0FBRztJQUM1QiwyQkFBMkI7SUFDM0IseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUMxQiw2QkFBNkI7SUFDN0IsbUJBQW1CO0lBQ25CLDhCQUE4QjtDQUNtQixDQUFDO0FBRXBELCtDQUErQztBQUMvQyxNQUFNLGFBQWEsR0FBRztJQUNwQix5QkFBeUI7SUFDekIsd0JBQXdCO0NBQ3lCLENBQUM7QUFFcEQsd0RBQXdEO0FBQ3hELE1BQU0sc0JBQXNCLEdBQUc7SUFDN0IsMEJBQTBCO0lBQzFCLDBCQUEwQjtJQUMxQixtQkFBbUI7Q0FDOEIsQ0FBQztBQUVwRCxzREFBc0Q7QUFDdEQsTUFBTSxZQUFZLEdBQUc7SUFDbkIsdUJBQXVCO0NBQzBCLENBQUM7QUFFcEQsMERBQTBEO0FBQzFELE1BQU0sZ0JBQWdCLEdBQUc7SUFDdkIsOEJBQThCO0lBQzlCLHVCQUF1QjtJQUN2QixvQ0FBb0M7SUFDcEMseUJBQXlCO0lBQ3pCLDRCQUE0QjtJQUM1Qix3QkFBd0I7SUFDeEIsc0JBQXNCO0NBQzJCLENBQUM7QUFFcEQsK0NBQStDO0FBQy9DLE1BQU0sWUFBWSxHQUFHO0lBQ25CLDhCQUE4QjtJQUM5QiwyQkFBMkI7SUFDM0IseUJBQXlCO0lBQ3pCLHVCQUF1QjtJQUN2QiwwQkFBMEI7SUFDMUIsNkJBQTZCO0lBQzdCLDBCQUEwQjtJQUMxQix5QkFBeUI7SUFDekIsOEJBQThCO0lBQzlCLG1CQUFtQjtJQUNuQixvQ0FBb0M7SUFDcEMsd0JBQXdCO0lBQ3hCLHlCQUF5QjtJQUN6Qiw0QkFBNEI7SUFDNUIsMEJBQTBCO0lBQzFCLHdCQUF3QjtJQUN4QixzQkFBc0I7SUFDdEIsbUJBQW1CO0NBQzhCLENBQUM7QUFFcEQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFTLFlBQVksQ0FDbkIsU0FBeUM7SUFFekMsT0FBTztRQUNMLE9BQU8sRUFBRTtZQUNQLFdBQVcsRUFBRSxpQkFBaUI7U0FDL0I7UUFDRCxLQUFLLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQztLQUM5QixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxXQUFXLENBQ2xCLFNBQXlDO0lBRXpDLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FDdkIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxlQUFlLFFBQVEsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQ2xFLENBQUM7QUFDSixDQUFDO0FBRUQsb0RBQW9EO0FBQ3BELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUV2QyxzREFBc0Q7QUFDdEQsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFekQsc0NBQXNDO0FBQ3RDLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUV6QywrQ0FBK0M7QUFDL0MsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFFM0QseUNBQXlDO0FBQ3pDLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBRS9DLHNEQUFzRDtBQUN0RCxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFdkMsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExpbnRlciB9IGZyb20gXCJlc2xpbnRcIjtcblxuaW1wb3J0IHsgY29kZXBlcmZlY3RQbHVnaW4sIGNvZGVwZXJmZWN0UnVsZXMgfSBmcm9tIFwiLi9jb2RlcGVyZmVjdC1wbHVnaW5cIjtcblxuLyoqIFJlcHJlc2VudHMgYSByZWFkeS10by11c2UgcHJlc2V0IGV4cG9ydGVkIGJ5IHRoZSBwYWNrYWdlLiAqL1xudHlwZSBDb2RlcGVyZmVjdFByZXNldCA9IFBpY2s8TGludGVyLkNvbmZpZywgXCJwbHVnaW5zXCIgfCBcInJ1bGVzXCI+O1xuXG4vKiogUmVwcmVzZW50cyB0aGUgZW5hYmxlZCBydWxlIGVudHJpZXMgaW5zaWRlIGEgcHJlc2V0LiAqL1xudHlwZSBDb2RlcGVyZmVjdFJ1bGVFbnRyaWVzID0gUGFydGlhbDxcbiAgUmVjb3JkPENvZGVwZXJmZWN0UnVsZUtleSwgTGludGVyLlJ1bGVFbnRyeT5cbj47XG5cbi8qKiBOYW1lc3BhY2VzIGEgcGFja2FnZS1vd25lZCBydWxlIHVuZGVyIHRoZSBgY29kZXBlcmZlY3QvYCBwcmVmaXguICovXG50eXBlIENvZGVwZXJmZWN0UnVsZUtleSA9IGBjb2RlcGVyZmVjdC8ke0NvZGVwZXJmZWN0UnVsZU5hbWV9YDtcblxuLyoqIEVudW1lcmF0ZXMgdGhlIHBhY2thZ2Utb3duZWQgcnVsZSBuYW1lcy4gKi9cbnR5cGUgQ29kZXBlcmZlY3RSdWxlTmFtZSA9IGtleW9mIHR5cGVvZiBjb2RlcGVyZmVjdFJ1bGVzO1xuXG4vKiogUnVsZSBuYW1lcyBncm91cGVkIGludG8gdGhlIGFyY2hpdGVjdHVyZSBwcmVzZXQuICovXG5jb25zdCBhcmNoaXRlY3R1cmVSdWxlTmFtZXMgPSBbXG4gIFwiYmFycmVsLWZpbGVzLWV4cG9ydHMtb25seVwiLFxuICBcImNvbnNpc3RlbnQtYmFycmVsLWZpbGVzXCIsXG4gIFwibm8taW1wb3J0LWV4cG9ydC1hbGlhc2VzXCIsXG4gIFwibm8taW1wb3J0LWV4cG9ydC1leHRlbnNpb25zXCIsXG4gIFwibm8tdW51c2VkLWV4cG9ydHNcIixcbiAgXCJuby1yZWV4cG9ydHMtb3V0c2lkZS1iYXJyZWxzXCIsXG5dIGFzIGNvbnN0IHNhdGlzZmllcyByZWFkb25seSBDb2RlcGVyZmVjdFJ1bGVOYW1lW107XG5cbi8qKiBSdWxlIG5hbWVzIGdyb3VwZWQgaW50byB0aGUgY29yZSBwcmVzZXQuICovXG5jb25zdCBjb3JlUnVsZU5hbWVzID0gW1xuICBcIm5vLW11bHRpcGxlLWRlY2xhcmF0b3JzXCIsXG4gIFwicHJlZmVyLWludGVyZmFjZS10eXBlc1wiLFxuXSBhcyBjb25zdCBzYXRpc2ZpZXMgcmVhZG9ubHkgQ29kZXBlcmZlY3RSdWxlTmFtZVtdO1xuXG4vKiogUnVsZSBuYW1lcyBncm91cGVkIGludG8gdGhlIGRvY3VtZW50YXRpb24gcHJlc2V0LiAqL1xuY29uc3QgZG9jdW1lbnRhdGlvblJ1bGVOYW1lcyA9IFtcbiAgXCJuby1pbnRlcmZhY2UtbWVtYmVyLWRvY3NcIixcbiAgXCJyZXF1aXJlLWV4YW1wbGUtbGFuZ3VhZ2VcIixcbiAgXCJzaW5nbGUtbGluZS1qc2RvY1wiLFxuXSBhcyBjb25zdCBzYXRpc2ZpZXMgcmVhZG9ubHkgQ29kZXBlcmZlY3RSdWxlTmFtZVtdO1xuXG4vKiogUnVsZSBuYW1lcyBncm91cGVkIGludG8gdGhlIEFBQS1mb2N1c2VkIHByZXNldC4gKi9cbmNvbnN0IGFhYVJ1bGVOYW1lcyA9IFtcbiAgXCJlbmZvcmNlLWFhYS1zdHJ1Y3R1cmVcIixcbl0gYXMgY29uc3Qgc2F0aXNmaWVzIHJlYWRvbmx5IENvZGVwZXJmZWN0UnVsZU5hbWVbXTtcblxuLyoqIFJ1bGUgbmFtZXMgZ3JvdXBlZCBpbnRvIHRoZSBicm9hZGVyIHRlc3RpbmcgcHJlc2V0LiAqL1xuY29uc3QgdGVzdGluZ1J1bGVOYW1lcyA9IFtcbiAgXCJhc3NlcnQtYWN0dWFsLWV4cGVjdGVkLW5hbWVzXCIsXG4gIFwiZW5mb3JjZS1hYWEtc3RydWN0dXJlXCIsXG4gIFwibm8tdW5zYWZlLXZpdGVzdC1tb2NrLWZhY3RvcnktY2FzdFwiLFxuICBcInByZWZlci12aS1tb2NrZWQtaW1wb3J0XCIsXG4gIFwicmVxdWlyZS1hY3QtcmVzdWx0LWNhcHR1cmVcIixcbiAgXCJyZXF1aXJlLXRlc3QtY29tcGFuaW9uXCIsXG4gIFwic2luZ2xlLWFjdC1zdGF0ZW1lbnRcIixcbl0gYXMgY29uc3Qgc2F0aXNmaWVzIHJlYWRvbmx5IENvZGVwZXJmZWN0UnVsZU5hbWVbXTtcblxuLyoqIFJ1bGUgbmFtZXMgdXNlZCBieSB0aGUgYWxsLXJ1bGVzIHByZXNldC4gKi9cbmNvbnN0IGFsbFJ1bGVOYW1lcyA9IFtcbiAgXCJhc3NlcnQtYWN0dWFsLWV4cGVjdGVkLW5hbWVzXCIsXG4gIFwiYmFycmVsLWZpbGVzLWV4cG9ydHMtb25seVwiLFxuICBcImNvbnNpc3RlbnQtYmFycmVsLWZpbGVzXCIsXG4gIFwiZW5mb3JjZS1hYWEtc3RydWN0dXJlXCIsXG4gIFwibm8taW1wb3J0LWV4cG9ydC1hbGlhc2VzXCIsXG4gIFwibm8taW1wb3J0LWV4cG9ydC1leHRlbnNpb25zXCIsXG4gIFwibm8taW50ZXJmYWNlLW1lbWJlci1kb2NzXCIsXG4gIFwibm8tbXVsdGlwbGUtZGVjbGFyYXRvcnNcIixcbiAgXCJuby1yZWV4cG9ydHMtb3V0c2lkZS1iYXJyZWxzXCIsXG4gIFwibm8tdW51c2VkLWV4cG9ydHNcIixcbiAgXCJuby11bnNhZmUtdml0ZXN0LW1vY2stZmFjdG9yeS1jYXN0XCIsXG4gIFwicHJlZmVyLWludGVyZmFjZS10eXBlc1wiLFxuICBcInByZWZlci12aS1tb2NrZWQtaW1wb3J0XCIsXG4gIFwicmVxdWlyZS1hY3QtcmVzdWx0LWNhcHR1cmVcIixcbiAgXCJyZXF1aXJlLWV4YW1wbGUtbGFuZ3VhZ2VcIixcbiAgXCJyZXF1aXJlLXRlc3QtY29tcGFuaW9uXCIsXG4gIFwic2luZ2xlLWFjdC1zdGF0ZW1lbnRcIixcbiAgXCJzaW5nbGUtbGluZS1qc2RvY1wiLFxuXSBhcyBjb25zdCBzYXRpc2ZpZXMgcmVhZG9ubHkgQ29kZXBlcmZlY3RSdWxlTmFtZVtdO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBwcmVzZXQgZm9yIHRoZSBwcm92aWRlZCBydWxlIG5hbWVzLlxuICogQHBhcmFtIHJ1bGVOYW1lcyBSdWxlIG5hbWVzIHRvIGVuYWJsZS5cbiAqIEByZXR1cm5zIEVTTGludCBwcmVzZXQgY29udGFpbmluZyB0aGUgcGFja2FnZSBwbHVnaW4gYW5kIGVuYWJsZWQgcnVsZXMuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcHJlc2V0ID0gY3JlYXRlUHJlc2V0KFtcIm5vLW11bHRpcGxlLWRlY2xhcmF0b3JzXCJdKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBjcmVhdGVQcmVzZXQoXG4gIHJ1bGVOYW1lczogcmVhZG9ubHkgQ29kZXBlcmZlY3RSdWxlTmFtZVtdLFxuKTogQ29kZXBlcmZlY3RQcmVzZXQge1xuICByZXR1cm4ge1xuICAgIHBsdWdpbnM6IHtcbiAgICAgIGNvZGVwZXJmZWN0OiBjb2RlcGVyZmVjdFBsdWdpbixcbiAgICB9LFxuICAgIHJ1bGVzOiBjcmVhdGVSdWxlcyhydWxlTmFtZXMpLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHJ1bGUgZW50cnkgbWFwIGZvciBhIHByZXNldC5cbiAqIEBwYXJhbSBydWxlTmFtZXMgUnVsZSBuYW1lcyB0byBlbmFibGUuXG4gKiBAcmV0dXJucyBSdWxlIGVudHJ5IG1hcCBrZXllZCBieSBgY29kZXBlcmZlY3QvYCBydWxlIG5hbWUuXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcnVsZXMgPSBjcmVhdGVSdWxlcyhbXCJwcmVmZXItaW50ZXJmYWNlLXR5cGVzXCJdKTtcbiAqIGBgYFxuICovXG5mdW5jdGlvbiBjcmVhdGVSdWxlcyhcbiAgcnVsZU5hbWVzOiByZWFkb25seSBDb2RlcGVyZmVjdFJ1bGVOYW1lW10sXG4pOiBDb2RlcGVyZmVjdFJ1bGVFbnRyaWVzIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBydWxlTmFtZXMubWFwKChydWxlTmFtZSkgPT4gW2Bjb2RlcGVyZmVjdC8ke3J1bGVOYW1lfWAsIFwiZXJyb3JcIl0pLFxuICApO1xufVxuXG4vKiogUHJlc2V0IHRoYXQgZW5hYmxlcyBldmVyeSBwYWNrYWdlLW93bmVkIHJ1bGUuICovXG5jb25zdCBhbGwgPSBjcmVhdGVQcmVzZXQoYWxsUnVsZU5hbWVzKTtcblxuLyoqIFByZXNldCB0aGF0IGVuYWJsZXMgYXJjaGl0ZWN0dXJlLWZvY3VzZWQgcnVsZXMuICovXG5jb25zdCBhcmNoaXRlY3R1cmUgPSBjcmVhdGVQcmVzZXQoYXJjaGl0ZWN0dXJlUnVsZU5hbWVzKTtcblxuLyoqIFByZXNldCB0aGF0IGVuYWJsZXMgY29yZSBydWxlcy4gKi9cbmNvbnN0IGNvcmUgPSBjcmVhdGVQcmVzZXQoY29yZVJ1bGVOYW1lcyk7XG5cbi8qKiBQcmVzZXQgdGhhdCBlbmFibGVzIGRvY3VtZW50YXRpb24gcnVsZXMuICovXG5jb25zdCBkb2N1bWVudGF0aW9uID0gY3JlYXRlUHJlc2V0KGRvY3VtZW50YXRpb25SdWxlTmFtZXMpO1xuXG4vKiogUHJlc2V0IHRoYXQgZW5hYmxlcyB0ZXN0aW5nIHJ1bGVzLiAqL1xuY29uc3QgdGVzdGluZyA9IGNyZWF0ZVByZXNldCh0ZXN0aW5nUnVsZU5hbWVzKTtcblxuLyoqIFByZXNldCB0aGF0IGVuYWJsZXMgQUFBLXNwZWNpZmljIHRlc3RpbmcgcnVsZXMuICovXG5jb25zdCBhYWEgPSBjcmVhdGVQcmVzZXQoYWFhUnVsZU5hbWVzKTtcblxuZXhwb3J0IHsgYWFhLCBhbGwsIGFyY2hpdGVjdHVyZSwgY29yZSwgZG9jdW1lbnRhdGlvbiwgdGVzdGluZyB9O1xuZXhwb3J0IHR5cGUgeyBDb2RlcGVyZmVjdFByZXNldCB9O1xuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codeperfect/eslint-plugin",
3
- "version": "2.3.0",
3
+ "version": "2.4.0",
4
4
  "description": "Custom ESLint rules for TypeScript repositories",
5
5
  "keywords": [
6
6
  "eslint",
@@ -34,56 +34,59 @@
34
34
  "dist"
35
35
  ],
36
36
  "scripts": {
37
- "\n# --------------- SCM --------------- #": "",
37
+ "\n# ---------------- GENERAL ---------------- #": "",
38
+ "postinstall": "patch-package",
39
+ "\n# ------------------ SCM ------------------ #": "",
38
40
  "commit": "npx --yes git-cz",
39
41
  "prepare": "husky",
40
- "\n# --------------- BUILDING --------------- #": "",
42
+ "\n# ---------------- BUILDING ---------------- #": "",
41
43
  "build": "npm run clean && npm run compile && npm run resolve-paths",
42
44
  "clean": "npx --yes rimraf dist",
43
- "compile": "tsc --build --force ./tsconfig.build.json",
45
+ "\n • ---------- compilation ---------- •": "",
44
46
  "pack": "npm pack --pack-destination dist",
47
+ "compile": "tsc --build --force ./tsconfig.build.json",
45
48
  "resolve-paths": "tsc-alias --project ./tsconfig.build.json --resolve-full-paths",
46
- "\n# --------------- LINTING --------------- #": "",
47
- "\t• --------------- checking --------------- •": "",
49
+ "\n# ---------------- LINTING ---------------- #": "",
50
+ "\n • ------------ checking ------------ •": "",
48
51
  "eslint": "npx --yes eslint --max-warnings=0",
49
52
  "lint": "npm run lint:run",
50
53
  "lint:run": "npm run prettier && npm run eslint",
51
- "lint:staged": "npx --yes tsx scripts/lint-staged.ts",
52
54
  "prettier": "npx --yes prettier --ignore-unknown --check .",
53
- "\n\t• --------------- fixing --------------- •": "",
55
+ "\n • ------------- fixing ------------- •": "",
54
56
  "eslint:fix": "npm run check:rules && npm run eslint -- --fix",
55
57
  "lint:fix": "npm run prettier:write && npm run eslint:fix",
58
+ "lint:staged": "npx --yes tsx scripts/lint-staged.ts",
56
59
  "prettier:write": "npm run prettier -- --write",
57
- "\n\t• --------------- helpers --------------- •": "",
60
+ "\n • ------------ helpers ------------ •": "",
58
61
  "check:rules": "npx --yes eslint-config-prettier eslint.config.ts",
59
62
  "eslint:inspect": "npx --yes @eslint/config-inspector",
60
- "\n# --------------- TESTING --------------- #": "",
63
+ "\n# ---------------- TESTING ---------------- #": "",
64
+ "e2e": "npx --yes vitest run --config vitest.config.e2e.ts",
65
+ "mutation": "npx --yes stryker run",
66
+ "test:all": "npm run test --if-present && npm run e2e --if-present && npm run mutation --if-present",
61
67
  "typecheck": "tsc --noEmit",
62
68
  "typecheck:spec": "tsc -p tsconfig.spec.json --noEmit",
63
- "validate": "npm run lint && npm run typecheck && npm run typecheck:spec && npm run test && npm run build && npm run pack",
64
- "\n\t• --------------- unit --------------- •": "",
65
- "mutation": "npx --yes stryker run",
66
- "tdd": "npx --yes vitest run --watch --silent=true --coverage.enabled=false",
67
- "test": "npm run unit && npm run mutation",
68
- "unit": "npx --yes vitest run",
69
- "\n# --------------- DOCS --------------- #": "",
70
- "docs:api": "npx --yes typedoc --options typedoc.json",
71
- "docs:clean": "npx --yes rimraf docs/api",
69
+ "validate": "npm run lint && npm run typecheck && npm run typecheck:spec && npm run test:all && npm run build --if-present && npm run pack --if-present",
70
+ "\n • -------------- unit -------------- •": "",
71
+ "test": "npx --yes vitest run",
72
+ "tdd": "npm run test -- --watch --silent=true --coverage.enabled=false",
73
+ "\n# ------------------ DOCS ------------------ #": "",
72
74
  "docs": "npm run docs:clean && npm run docs:api",
73
- "postinstall": "patch-package"
75
+ "docs:api": "npx --yes typedoc --options typedoc.json",
76
+ "docs:clean": "npx --yes rimraf docs/api"
74
77
  },
75
78
  "dependencies": {
76
79
  "@typescript-eslint/utils": "^8.60.0",
77
80
  "minimatch": "^10.2.5"
78
81
  },
79
82
  "peerDependencies": {
80
- "eslint": ">=10.4.0"
83
+ "eslint": ">=10.4.1"
81
84
  },
82
85
  "devDependencies": {
83
86
  "@codeperfect/commitlint-config-emoji": "^1.0.0",
84
- "@codeperfect/eslint-config": "^1.10.0",
85
- "@commitlint/cz-commitlint": "^21.0.1",
86
- "@eslint-community/eslint-plugin-eslint-comments": "^4.7.1",
87
+ "@codeperfect/eslint-config": "^1.11.0",
88
+ "@commitlint/cz-commitlint": "^21.0.2",
89
+ "@eslint-community/eslint-plugin-eslint-comments": "^4.7.2",
87
90
  "@eslint/js": "^10.0.1",
88
91
  "@stryker-mutator/core": "^9.6.1",
89
92
  "@stryker-mutator/typescript-checker": "^9.6.1",
@@ -94,9 +97,9 @@
94
97
  "@types/signale": "^1.4.7",
95
98
  "@typescript-eslint/rule-tester": "^8.60.0",
96
99
  "@vitest/coverage-v8": "^4.1.7",
97
- "@vitest/eslint-plugin": "^1.6.18",
100
+ "@vitest/eslint-plugin": "^1.6.19",
98
101
  "chalk": "^5.6.2",
99
- "eslint": "^10.4.0",
102
+ "eslint": "^10.4.1",
100
103
  "eslint-config-prettier": "^10.1.8",
101
104
  "eslint-import-resolver-typescript": "^4.4.4",
102
105
  "eslint-plugin-boundaries": "^6.0.2",
@@ -106,13 +109,13 @@
106
109
  "eslint-plugin-jest": "^29.15.2",
107
110
  "eslint-plugin-jsdoc": "^63.0.0",
108
111
  "eslint-plugin-perfectionist": "^5.9.0",
109
- "eslint-plugin-prettier": "^5.5.5",
112
+ "eslint-plugin-prettier": "^5.5.6",
110
113
  "eslint-plugin-rxjs-x": "^1.0.2",
111
114
  "eslint-plugin-unicorn": "^64.0.0",
112
115
  "globals": "^17.6.0",
113
116
  "husky": "^9.1.7",
114
117
  "jiti": "^2.7.0",
115
- "lint-staged": "^17.0.5",
118
+ "lint-staged": "^17.0.7",
116
119
  "lodash-es": "^4.18.1",
117
120
  "patch-package": "^8.0.1",
118
121
  "prettier": "^3.8.3",
package/dist/.tsbuildinfo DELETED
@@ -1 +0,0 @@
1
- {"root":["../src/index.ts","../src/application/custom-rules.ts","../src/application/index.ts","../src/domain/custom-rule-documentation.ts","../src/domain/index.ts","../src/domain/architecture/index.ts","../src/domain/architecture/consistent-barrel-files/barrel-file-utilities.ts","../src/domain/architecture/consistent-barrel-files/consistent-barrel-files-listeners.ts","../src/domain/architecture/consistent-barrel-files/consistent-barrel-files-options.ts","../src/domain/architecture/consistent-barrel-files/exports-only-rule.ts","../src/domain/architecture/consistent-barrel-files/index.ts","../src/domain/architecture/consistent-barrel-files/no-import-export-aliases-rule.ts","../src/domain/architecture/consistent-barrel-files/no-import-export-extensions-rule.ts","../src/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-rule.ts","../src/domain/architecture/consistent-barrel-files/no-reexports-outside-barrels-utilities.ts","../src/domain/architecture/consistent-barrel-files/rule.ts","../src/domain/architecture/consistent-barrel-files/types.ts","../src/domain/architecture/no-unused-exports/index.ts","../src/domain/architecture/no-unused-exports/no-unused-exports-options.ts","../src/domain/architecture/no-unused-exports/no-unused-exports-utilities.ts","../src/domain/architecture/no-unused-exports/rule.ts","../src/domain/architecture/no-unused-exports/types.ts","../src/domain/core/index.ts","../src/domain/core/no-multiple-declarators/index.ts","../src/domain/core/no-multiple-declarators/rule.ts","../src/domain/core/no-multiple-declarators/types.ts","../src/domain/core/prefer-interface-types/index.ts","../src/domain/core/prefer-interface-types/rule.ts","../src/domain/docs/index.ts","../src/domain/docs/no-interface-member-docs/comment-utilities.ts","../src/domain/docs/no-interface-member-docs/index.ts","../src/domain/docs/no-interface-member-docs/parameter-tags.ts","../src/domain/docs/no-interface-member-docs/parameter-utilities.ts","../src/domain/docs/no-interface-member-docs/rule.ts","../src/domain/docs/no-interface-member-docs/types.ts","../src/domain/docs/require-example-language/empty-fence-fixes.ts","../src/domain/docs/require-example-language/example-utilities.ts","../src/domain/docs/require-example-language/examples.ts","../src/domain/docs/require-example-language/fixes.ts","../src/domain/docs/require-example-language/index.ts","../src/domain/docs/require-example-language/reporting.ts","../src/domain/docs/require-example-language/rule.ts","../src/domain/docs/require-example-language/types.ts","../src/domain/docs/single-line-jsdoc/index.ts","../src/domain/docs/single-line-jsdoc/rule.ts","../src/domain/docs/single-line-jsdoc/single-line-jsdoc-content.ts","../src/domain/docs/single-line-jsdoc/single-line-jsdoc-utilities.ts","../src/domain/testing/index.ts","../src/domain/testing/aaa/analyzer.analysis.helpers.ts","../src/domain/testing/aaa/analyzer.analysis.ts","../src/domain/testing/aaa/analyzer.assertions.helpers.ts","../src/domain/testing/aaa/analyzer.assertions.operands.ts","../src/domain/testing/aaa/analyzer.assertions.ts","../src/domain/testing/aaa/analyzer.classification.helpers.ts","../src/domain/testing/aaa/analyzer.classification.traversal.ts","../src/domain/testing/aaa/analyzer.classification.ts","../src/domain/testing/aaa/analyzer.super.helpers.ts","../src/domain/testing/aaa/analyzer.super.ts","../src/domain/testing/aaa/index.ts","../src/domain/testing/aaa/types.ts","../src/domain/testing/assert-actual-expected-names/index.ts","../src/domain/testing/assert-actual-expected-names/rule.ts","../src/domain/testing/enforce-aaa-phase-purity/index.ts","../src/domain/testing/enforce-aaa-phase-purity/pattern-identifiers.ts","../src/domain/testing/enforce-aaa-phase-purity/phase-purity-identifiers.ts","../src/domain/testing/enforce-aaa-phase-purity/phase-purity-reporting.ts","../src/domain/testing/enforce-aaa-structure/index.ts","../src/domain/testing/enforce-aaa-structure/missing-section-fixes.ts","../src/domain/testing/enforce-aaa-structure/rule.ts","../src/domain/testing/prefer-vi-mocked-import/fix-import-statements.ts","../src/domain/testing/prefer-vi-mocked-import/fix-import-updates.ts","../src/domain/testing/prefer-vi-mocked-import/fix-imports.ts","../src/domain/testing/prefer-vi-mocked-import/fix.ts","../src/domain/testing/prefer-vi-mocked-import/index.ts","../src/domain/testing/prefer-vi-mocked-import/match-bindings.ts","../src/domain/testing/prefer-vi-mocked-import/match-declarations.ts","../src/domain/testing/prefer-vi-mocked-import/match-helpers.ts","../src/domain/testing/prefer-vi-mocked-import/match-imports.ts","../src/domain/testing/prefer-vi-mocked-import/match-rewrites.ts","../src/domain/testing/prefer-vi-mocked-import/match-walk.ts","../src/domain/testing/prefer-vi-mocked-import/match.ts","../src/domain/testing/prefer-vi-mocked-import/rule.ts","../src/domain/testing/prefer-vi-mocked-import/types.ts","../src/domain/testing/require-act-result-capture/index.ts","../src/domain/testing/require-act-result-capture/rule.ts","../src/domain/testing/require-test-companion/index.ts","../src/domain/testing/require-test-companion/require-test-companion-listeners.ts","../src/domain/testing/require-test-companion/require-test-companion-options.ts","../src/domain/testing/require-test-companion/rule.ts","../src/domain/testing/require-test-companion/types.ts","../src/domain/testing/single-act-statement/index.ts","../src/domain/testing/single-act-statement/rule.ts","../src/infrastructure/codeperfect-plugin.ts","../src/infrastructure/index.ts","../src/infrastructure/presets.ts"],"version":"6.0.3"}