@rushstack/eslint-plugin-packlets 0.6.1 → 0.8.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.
- package/lib/PackletAnalyzer.d.ts +2 -2
- package/lib/PackletAnalyzer.d.ts.map +1 -1
- package/lib/PackletAnalyzer.js +1 -1
- package/lib/PackletAnalyzer.js.map +1 -1
- package/lib/Path.d.ts +1 -1
- package/lib/Path.d.ts.map +1 -1
- package/lib/Path.js +1 -1
- package/lib/Path.js.map +1 -1
- package/lib/circular-deps.d.ts +2 -2
- package/lib/circular-deps.d.ts.map +1 -1
- package/lib/mechanics.d.ts +2 -2
- package/lib/mechanics.d.ts.map +1 -1
- package/lib/readme.d.ts +2 -2
- package/lib/readme.d.ts.map +1 -1
- package/package.json +11 -11
package/lib/PackletAnalyzer.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export type InputFileMessageIds = 'file-in-packets-folder' | 'invalid-packlet-name' | 'misplaced-packlets-folder' | 'missing-src-folder' | 'missing-tsconfig' | 'packlet-folder-case';
|
|
2
|
+
export type ImportMessageIds = 'bypassed-entry-point' | 'circular-entry-point' | 'packlet-importing-project-file';
|
|
3
3
|
export interface IAnalyzerError {
|
|
4
4
|
messageId: InputFileMessageIds | ImportMessageIds;
|
|
5
5
|
data?: Readonly<Record<string, unknown>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PackletAnalyzer.d.ts","sourceRoot":"","sources":["../src/PackletAnalyzer.ts"],"names":[],"mappings":"AAMA,
|
|
1
|
+
{"version":3,"file":"PackletAnalyzer.d.ts","sourceRoot":"","sources":["../src/PackletAnalyzer.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,mBAAmB,GAC3B,wBAAwB,GACxB,sBAAsB,GACtB,2BAA2B,GAC3B,oBAAoB,GACpB,kBAAkB,GAClB,qBAAqB,CAAC;AAE1B,MAAM,MAAM,gBAAgB,GACxB,sBAAsB,GACtB,sBAAsB,GACtB,gCAAgC,CAAC;AAErC,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,mBAAmB,GAAG,gBAAgB,CAAC;IAClD,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC1C;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAsC;IAEtE;;;;OAIG;IACH,SAAgB,aAAa,EAAE,MAAM,CAAC;IAEtC;;OAEG;IACH,SAAgB,KAAK,EAAE,cAAc,GAAG,SAAS,CAAC;IAElD;;;;OAIG;IACH,SAAgB,WAAW,EAAE,OAAO,CAAC;IAErC;;OAEG;IACH,SAAgB,mBAAmB,EAAE,OAAO,CAAC;IAE7C;;OAEG;IACH,SAAgB,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAC;IAEvD;;OAEG;IACH,SAAgB,oBAAoB,EAAE,MAAM,GAAG,SAAS,CAAC;IAEzD;;OAEG;IACH,SAAgB,YAAY,EAAE,OAAO,CAAC;IAEtC,OAAO;WAoGO,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,SAAS;IAInF,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;CAmFrE"}
|
package/lib/PackletAnalyzer.js
CHANGED
|
@@ -183,6 +183,6 @@ class PackletAnalyzer {
|
|
|
183
183
|
return undefined;
|
|
184
184
|
}
|
|
185
185
|
}
|
|
186
|
-
exports.PackletAnalyzer = PackletAnalyzer;
|
|
187
186
|
PackletAnalyzer._validPackletName = /^[a-z0-9]+(-[a-z0-9]+)*$/;
|
|
187
|
+
exports.PackletAnalyzer = PackletAnalyzer;
|
|
188
188
|
//# sourceMappingURL=PackletAnalyzer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PackletAnalyzer.js","sourceRoot":"","sources":["../src/PackletAnalyzer.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport * as fs from 'fs';\nimport { Path } from './Path';\n\nexport type InputFileMessageIds =\n | 'file-in-packets-folder'\n | 'invalid-packlet-name'\n | 'misplaced-packlets-folder'\n | 'missing-src-folder'\n | 'missing-tsconfig'\n | 'packlet-folder-case';\n\nexport type ImportMessageIds =\n | 'bypassed-entry-point'\n | 'circular-entry-point'\n | 'packlet-importing-project-file';\n\nexport interface IAnalyzerError {\n messageId: InputFileMessageIds | ImportMessageIds;\n data?: Readonly<Record<string, unknown>>;\n}\n\nexport class PackletAnalyzer {\n private static _validPackletName: RegExp = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n\n /**\n * The input file being linted.\n *\n * Example: \"/path/to/my-project/src/file.ts\"\n */\n public readonly inputFilePath: string;\n\n /**\n * An error that occurred while analyzing the inputFilePath.\n */\n public readonly error: IAnalyzerError | undefined;\n\n /**\n * Returned to indicate that the linter can ignore this file. Possible reasons:\n * - It's outside the \"src\" folder\n * - The project doesn't define any packlets\n */\n public readonly nothingToDo: boolean;\n\n /**\n * If true, then the \"src/packlets\" folder exists.\n */\n public readonly projectUsesPacklets: boolean;\n\n /**\n * The absolute path of the \"src/packlets\" folder.\n */\n public readonly packletsFolderPath: string | undefined;\n\n /**\n * The packlet that the inputFilePath is under, if any.\n */\n public readonly inputFilePackletName: string | undefined;\n\n /**\n * Returns true if inputFilePath belongs to a packlet and is the entry point index.ts.\n */\n public readonly isEntryPoint: boolean;\n\n private constructor(inputFilePath: string, tsconfigFilePath: string | undefined) {\n this.inputFilePath = inputFilePath;\n this.error = undefined;\n this.nothingToDo = false;\n this.projectUsesPacklets = false;\n this.packletsFolderPath = undefined;\n this.inputFilePackletName = undefined;\n this.isEntryPoint = false;\n\n // Example: /path/to/my-project/src\n let srcFolderPath: string | undefined;\n\n if (!tsconfigFilePath) {\n this.error = { messageId: 'missing-tsconfig' };\n return;\n }\n\n srcFolderPath = Path.join(Path.dirname(tsconfigFilePath), 'src');\n\n if (!fs.existsSync(srcFolderPath)) {\n this.error = { messageId: 'missing-src-folder', data: { srcFolderPath } };\n return;\n }\n\n if (!Path.isUnder(inputFilePath, srcFolderPath)) {\n // Ignore files outside the \"src\" folder\n this.nothingToDo = true;\n return;\n }\n\n // Example: packlets/my-packlet/index.ts\n const inputFilePathRelativeToSrc: string = Path.relative(srcFolderPath, inputFilePath);\n\n // Example: [ 'packlets', 'my-packlet', 'index.ts' ]\n const pathParts: string[] = inputFilePathRelativeToSrc.split(/[\\/\\\\]+/);\n\n let underPackletsFolder: boolean = false;\n\n const expectedPackletsFolder: string = Path.join(srcFolderPath, 'packlets');\n\n for (let i = 0; i < pathParts.length; ++i) {\n const pathPart: string = pathParts[i];\n if (pathPart.toUpperCase() === 'PACKLETS') {\n if (pathPart !== 'packlets') {\n // Example: /path/to/my-project/src/PACKLETS\n const packletsFolderPath: string = Path.join(srcFolderPath, ...pathParts.slice(0, i + 1));\n this.error = { messageId: 'packlet-folder-case', data: { packletsFolderPath } };\n return;\n }\n\n if (i !== 0) {\n this.error = { messageId: 'misplaced-packlets-folder', data: { expectedPackletsFolder } };\n return;\n }\n\n underPackletsFolder = true;\n }\n }\n\n if (underPackletsFolder || fs.existsSync(expectedPackletsFolder)) {\n // packletsAbsolutePath\n this.projectUsesPacklets = true;\n this.packletsFolderPath = expectedPackletsFolder;\n }\n\n if (underPackletsFolder) {\n if (pathParts.length === 2) {\n // Example: src/packlets/SomeFile.ts\n this.error = { messageId: 'file-in-packets-folder' };\n return;\n }\n if (pathParts.length >= 2) {\n // Example: 'my-packlet'\n const packletName: string = pathParts[1];\n this.inputFilePackletName = packletName;\n\n if (pathParts.length === 3) {\n // Example: 'index.ts' or 'index.tsx'\n const thirdPart: string = pathParts[2];\n\n // Example: 'index'\n const thirdPartWithoutExtension: string = Path.parse(thirdPart).name;\n\n if (thirdPartWithoutExtension.toUpperCase() === 'INDEX') {\n if (!PackletAnalyzer._validPackletName.test(packletName)) {\n this.error = { messageId: 'invalid-packlet-name', data: { packletName } };\n return;\n }\n\n this.isEntryPoint = true;\n }\n }\n }\n }\n\n if (this.error === undefined && !this.projectUsesPacklets) {\n this.nothingToDo = true;\n }\n }\n\n public static analyzeInputFile(inputFilePath: string, tsconfigFilePath: string | undefined) {\n return new PackletAnalyzer(inputFilePath, tsconfigFilePath);\n }\n\n public analyzeImport(modulePath: string): IAnalyzerError | undefined {\n if (!this.packletsFolderPath) {\n // The caller should ensure this can never happen\n throw new Error('Internal error: packletsFolderPath is not defined');\n }\n\n // Example: /path/to/my-project/src/packlets/my-packlet\n const inputFileFolder: string = Path.dirname(this.inputFilePath);\n\n // Example: /path/to/my-project/src/other-packlet/index\n const importedPath: string = Path.resolve(inputFileFolder, modulePath);\n\n // Is the imported path referring to a file under the src/packlets folder?\n if (Path.isUnder(importedPath, this.packletsFolderPath)) {\n // Example: other-packlet/index\n const importedPathRelativeToPackletsFolder: string = Path.relative(\n this.packletsFolderPath,\n importedPath\n );\n // Example: [ 'other-packlet', 'index' ]\n const importedPathParts: string[] = importedPathRelativeToPackletsFolder.split(/[\\/\\\\]+/);\n if (importedPathParts.length > 0) {\n // Example: 'other-packlet'\n const importedPackletName: string = importedPathParts[0];\n\n // We are importing from a packlet. Is the input file part of the same packlet?\n if (this.inputFilePackletName && importedPackletName === this.inputFilePackletName) {\n // Yes. Then our import must NOT use the packlet entry point.\n\n // Example: 'index'\n //\n // We discard the file extension to handle a degenerate case like:\n // import { X } from \"../index.js\";\n const lastPart: string = Path.parse(importedPathParts[importedPathParts.length - 1]).name;\n let pathToCompare: string;\n if (lastPart.toUpperCase() === 'INDEX') {\n // Example:\n // importedPath = /path/to/my-project/src/other-packlet/index\n // pathToCompare = /path/to/my-project/src/other-packlet\n pathToCompare = Path.dirname(importedPath);\n } else {\n pathToCompare = importedPath;\n }\n\n // Example: /path/to/my-project/src/other-packlet\n const entryPointPath: string = Path.join(this.packletsFolderPath, importedPackletName);\n\n if (Path.isEqual(pathToCompare, entryPointPath)) {\n return {\n messageId: 'circular-entry-point'\n };\n }\n } else {\n // No. If we are not part of the same packlet, then the module path must refer\n // to the index.ts entry point.\n\n // Example: /path/to/my-project/src/other-packlet\n const entryPointPath: string = Path.join(this.packletsFolderPath, importedPackletName);\n\n if (!Path.isEqual(importedPath, entryPointPath)) {\n // Example: \"../packlets/other-packlet\"\n const entryPointModulePath: string = Path.convertToSlashes(\n Path.relative(inputFileFolder, entryPointPath)\n );\n\n return {\n messageId: 'bypassed-entry-point',\n data: { entryPointModulePath }\n };\n }\n }\n }\n } else {\n // The imported path does NOT refer to a file under the src/packlets folder\n if (this.inputFilePackletName) {\n return {\n messageId: 'packlet-importing-project-file'\n };\n }\n }\n\n return undefined;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"PackletAnalyzer.js","sourceRoot":"","sources":["../src/PackletAnalyzer.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport * as fs from 'fs';\nimport { Path } from './Path';\n\nexport type InputFileMessageIds =\n | 'file-in-packets-folder'\n | 'invalid-packlet-name'\n | 'misplaced-packlets-folder'\n | 'missing-src-folder'\n | 'missing-tsconfig'\n | 'packlet-folder-case';\n\nexport type ImportMessageIds =\n | 'bypassed-entry-point'\n | 'circular-entry-point'\n | 'packlet-importing-project-file';\n\nexport interface IAnalyzerError {\n messageId: InputFileMessageIds | ImportMessageIds;\n data?: Readonly<Record<string, unknown>>;\n}\n\nexport class PackletAnalyzer {\n private static _validPackletName: RegExp = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n\n /**\n * The input file being linted.\n *\n * Example: \"/path/to/my-project/src/file.ts\"\n */\n public readonly inputFilePath: string;\n\n /**\n * An error that occurred while analyzing the inputFilePath.\n */\n public readonly error: IAnalyzerError | undefined;\n\n /**\n * Returned to indicate that the linter can ignore this file. Possible reasons:\n * - It's outside the \"src\" folder\n * - The project doesn't define any packlets\n */\n public readonly nothingToDo: boolean;\n\n /**\n * If true, then the \"src/packlets\" folder exists.\n */\n public readonly projectUsesPacklets: boolean;\n\n /**\n * The absolute path of the \"src/packlets\" folder.\n */\n public readonly packletsFolderPath: string | undefined;\n\n /**\n * The packlet that the inputFilePath is under, if any.\n */\n public readonly inputFilePackletName: string | undefined;\n\n /**\n * Returns true if inputFilePath belongs to a packlet and is the entry point index.ts.\n */\n public readonly isEntryPoint: boolean;\n\n private constructor(inputFilePath: string, tsconfigFilePath: string | undefined) {\n this.inputFilePath = inputFilePath;\n this.error = undefined;\n this.nothingToDo = false;\n this.projectUsesPacklets = false;\n this.packletsFolderPath = undefined;\n this.inputFilePackletName = undefined;\n this.isEntryPoint = false;\n\n // Example: /path/to/my-project/src\n let srcFolderPath: string | undefined;\n\n if (!tsconfigFilePath) {\n this.error = { messageId: 'missing-tsconfig' };\n return;\n }\n\n srcFolderPath = Path.join(Path.dirname(tsconfigFilePath), 'src');\n\n if (!fs.existsSync(srcFolderPath)) {\n this.error = { messageId: 'missing-src-folder', data: { srcFolderPath } };\n return;\n }\n\n if (!Path.isUnder(inputFilePath, srcFolderPath)) {\n // Ignore files outside the \"src\" folder\n this.nothingToDo = true;\n return;\n }\n\n // Example: packlets/my-packlet/index.ts\n const inputFilePathRelativeToSrc: string = Path.relative(srcFolderPath, inputFilePath);\n\n // Example: [ 'packlets', 'my-packlet', 'index.ts' ]\n const pathParts: string[] = inputFilePathRelativeToSrc.split(/[\\/\\\\]+/);\n\n let underPackletsFolder: boolean = false;\n\n const expectedPackletsFolder: string = Path.join(srcFolderPath, 'packlets');\n\n for (let i = 0; i < pathParts.length; ++i) {\n const pathPart: string = pathParts[i];\n if (pathPart.toUpperCase() === 'PACKLETS') {\n if (pathPart !== 'packlets') {\n // Example: /path/to/my-project/src/PACKLETS\n const packletsFolderPath: string = Path.join(srcFolderPath, ...pathParts.slice(0, i + 1));\n this.error = { messageId: 'packlet-folder-case', data: { packletsFolderPath } };\n return;\n }\n\n if (i !== 0) {\n this.error = { messageId: 'misplaced-packlets-folder', data: { expectedPackletsFolder } };\n return;\n }\n\n underPackletsFolder = true;\n }\n }\n\n if (underPackletsFolder || fs.existsSync(expectedPackletsFolder)) {\n // packletsAbsolutePath\n this.projectUsesPacklets = true;\n this.packletsFolderPath = expectedPackletsFolder;\n }\n\n if (underPackletsFolder) {\n if (pathParts.length === 2) {\n // Example: src/packlets/SomeFile.ts\n this.error = { messageId: 'file-in-packets-folder' };\n return;\n }\n if (pathParts.length >= 2) {\n // Example: 'my-packlet'\n const packletName: string = pathParts[1];\n this.inputFilePackletName = packletName;\n\n if (pathParts.length === 3) {\n // Example: 'index.ts' or 'index.tsx'\n const thirdPart: string = pathParts[2];\n\n // Example: 'index'\n const thirdPartWithoutExtension: string = Path.parse(thirdPart).name;\n\n if (thirdPartWithoutExtension.toUpperCase() === 'INDEX') {\n if (!PackletAnalyzer._validPackletName.test(packletName)) {\n this.error = { messageId: 'invalid-packlet-name', data: { packletName } };\n return;\n }\n\n this.isEntryPoint = true;\n }\n }\n }\n }\n\n if (this.error === undefined && !this.projectUsesPacklets) {\n this.nothingToDo = true;\n }\n }\n\n public static analyzeInputFile(inputFilePath: string, tsconfigFilePath: string | undefined) {\n return new PackletAnalyzer(inputFilePath, tsconfigFilePath);\n }\n\n public analyzeImport(modulePath: string): IAnalyzerError | undefined {\n if (!this.packletsFolderPath) {\n // The caller should ensure this can never happen\n throw new Error('Internal error: packletsFolderPath is not defined');\n }\n\n // Example: /path/to/my-project/src/packlets/my-packlet\n const inputFileFolder: string = Path.dirname(this.inputFilePath);\n\n // Example: /path/to/my-project/src/other-packlet/index\n const importedPath: string = Path.resolve(inputFileFolder, modulePath);\n\n // Is the imported path referring to a file under the src/packlets folder?\n if (Path.isUnder(importedPath, this.packletsFolderPath)) {\n // Example: other-packlet/index\n const importedPathRelativeToPackletsFolder: string = Path.relative(\n this.packletsFolderPath,\n importedPath\n );\n // Example: [ 'other-packlet', 'index' ]\n const importedPathParts: string[] = importedPathRelativeToPackletsFolder.split(/[\\/\\\\]+/);\n if (importedPathParts.length > 0) {\n // Example: 'other-packlet'\n const importedPackletName: string = importedPathParts[0];\n\n // We are importing from a packlet. Is the input file part of the same packlet?\n if (this.inputFilePackletName && importedPackletName === this.inputFilePackletName) {\n // Yes. Then our import must NOT use the packlet entry point.\n\n // Example: 'index'\n //\n // We discard the file extension to handle a degenerate case like:\n // import { X } from \"../index.js\";\n const lastPart: string = Path.parse(importedPathParts[importedPathParts.length - 1]).name;\n let pathToCompare: string;\n if (lastPart.toUpperCase() === 'INDEX') {\n // Example:\n // importedPath = /path/to/my-project/src/other-packlet/index\n // pathToCompare = /path/to/my-project/src/other-packlet\n pathToCompare = Path.dirname(importedPath);\n } else {\n pathToCompare = importedPath;\n }\n\n // Example: /path/to/my-project/src/other-packlet\n const entryPointPath: string = Path.join(this.packletsFolderPath, importedPackletName);\n\n if (Path.isEqual(pathToCompare, entryPointPath)) {\n return {\n messageId: 'circular-entry-point'\n };\n }\n } else {\n // No. If we are not part of the same packlet, then the module path must refer\n // to the index.ts entry point.\n\n // Example: /path/to/my-project/src/other-packlet\n const entryPointPath: string = Path.join(this.packletsFolderPath, importedPackletName);\n\n if (!Path.isEqual(importedPath, entryPointPath)) {\n // Example: \"../packlets/other-packlet\"\n const entryPointModulePath: string = Path.convertToSlashes(\n Path.relative(inputFileFolder, entryPointPath)\n );\n\n return {\n messageId: 'bypassed-entry-point',\n data: { entryPointModulePath }\n };\n }\n }\n }\n } else {\n // The imported path does NOT refer to a file under the src/packlets folder\n if (this.inputFilePackletName) {\n return {\n messageId: 'packlet-importing-project-file'\n };\n }\n }\n\n return undefined;\n }\n}\n"]}
|
package/lib/Path.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import * as path from 'path';
|
|
3
|
-
export
|
|
3
|
+
export type ParsedPath = path.ParsedPath;
|
|
4
4
|
export declare class Path {
|
|
5
5
|
/**
|
|
6
6
|
* Whether the filesystem is assumed to be case sensitive for Path operations.
|
package/lib/Path.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Path.d.ts","sourceRoot":"","sources":["../src/Path.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,
|
|
1
|
+
{"version":3,"file":"Path.d.ts","sourceRoot":"","sources":["../src/Path.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AAEzC,qBAAa,IAAI;IACf;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAc,kBAAkB,EAAE,OAAO,CAA+B;IAExE,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAMnC,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAQnC,OAAO,CAAC,MAAM,CAAC,wBAAwB;WAqDzB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;WAU1C,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;WAI1B,IAAI,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;WAIhC,OAAO,CAAC,GAAG,YAAY,EAAE,MAAM,EAAE,GAAG,MAAM;WAI1C,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU;IAOnD,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAwB;IAEzD;;;;;;;;;OASG;WACW,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO;IAK3E;;;;;;OAMG;WACW,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAI5D;;;;;OAKG;WACW,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAG1D"}
|
package/lib/Path.js
CHANGED
|
@@ -140,7 +140,6 @@ class Path {
|
|
|
140
140
|
return inputPath.split('\\').join('/');
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
|
-
exports.Path = Path;
|
|
144
143
|
/**
|
|
145
144
|
* Whether the filesystem is assumed to be case sensitive for Path operations.
|
|
146
145
|
*
|
|
@@ -166,4 +165,5 @@ Path.usingCaseSensitive = Path._detectCaseSensitive();
|
|
|
166
165
|
// --------------------------------------------------------------------------------------------------------
|
|
167
166
|
// The operations below are borrowed from @rushstack/node-core-library
|
|
168
167
|
Path._relativePathRegex = /^[.\/\\]+$/;
|
|
168
|
+
exports.Path = Path;
|
|
169
169
|
//# sourceMappingURL=Path.js.map
|
package/lib/Path.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Path.js","sourceRoot":"","sources":["../src/Path.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Path.js","sourceRoot":"","sources":["../src/Path.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport * as path from 'path';\nimport * as fs from 'fs';\n\nexport type ParsedPath = path.ParsedPath;\n\nexport class Path {\n /**\n * Whether the filesystem is assumed to be case sensitive for Path operations.\n *\n * @remarks\n * Regardless of operating system, a given file system's paths may be case-sensitive or case-insensitive.\n * If a volume is mounted under a subfolder, then different parts of a path can even have different\n * case-sensitivity. The Node.js \"path\" API naively assumes that all Windows paths are case-insensitive,\n * and that all other OS's are case-sensitive. This is way off, for example a modern MacBook has a\n * case-insensitive filesystem by default. There isn't an easy workaround because Node.js does not expose\n * the native OS APIs that would give accurate answers.\n *\n * The TypeScript compiler does somewhat better: it performs an empirical test of its own bundle path to see\n * whether it can be read using different case. If so, it normalizes all paths to lowercase (sometimes with\n * no API for retrieving the real path). This caused our Path.isUnder() to return incorrect answers because\n * it relies on Node.js path.relative().\n *\n * To solve that problem, Path.ts performs an empirical test similar to what the TypeScript compiler does,\n * and then we adjust path.relative() to be case insensitive if appropriate.\n *\n * @see {@link https://nodejs.org/en/docs/guides/working-with-different-filesystems/}\n */\n public static usingCaseSensitive: boolean = Path._detectCaseSensitive();\n\n private static _detectCaseSensitive(): boolean {\n // Can our own file be accessed using a path with different case? If so, then the filesystem is case-insensitive.\n return !fs.existsSync(__filename.toUpperCase());\n }\n\n // Removes redundant trailing slashes from a path.\n private static _trimTrailingSlashes(inputPath: string): string {\n // Examples:\n // \"/a/b///\\\\\" --> \"/a/b\"\n // \"/\" --> \"/\"\n return inputPath.replace(/(?<=[^\\/\\\\])[\\/\\\\]+$/, '');\n }\n\n // An implementation of path.relative() that is case-insensitive.\n private static _relativeCaseInsensitive(from: string, to: string): string {\n // path.relative() apples path.normalize() and also trims any trailing slashes.\n // Since we'll be matching toNormalized against result, we need to do that for our string as well.\n const normalizedTo: string = Path._trimTrailingSlashes(path.normalize(to));\n\n // We start by converting everything to uppercase and call path.relative()\n const uppercasedFrom: string = from.toUpperCase();\n const uppercasedTo: string = normalizedTo.toUpperCase();\n\n // The result will be all uppercase because its inputs were uppercased\n const uppercasedResult: string = path.relative(uppercasedFrom, uppercasedTo);\n\n // Are there any cased characters in the result?\n if (uppercasedResult.toLowerCase() === uppercasedResult) {\n // No cased characters\n // Example: \"../..\"\n return uppercasedResult;\n }\n\n // Example:\n // from=\"/a/b/c\"\n // to=\"/a/b/d/e\"\n //\n // fromNormalized=\"/A/B/C\"\n // toNormalized=\"/A/B/D/E\"\n //\n // result=\"../D/E\"\n //\n // Scan backwards comparing uppercasedResult versus uppercasedTo, stopping at the first place where they differ.\n let resultIndex: number = uppercasedResult.length;\n let toIndex: number = normalizedTo.length;\n for (;;) {\n if (resultIndex === 0 || toIndex === 0) {\n // Stop if we reach the start of the string\n break;\n }\n\n if (uppercasedResult.charCodeAt(resultIndex - 1) !== uppercasedTo.charCodeAt(toIndex - 1)) {\n // Stop before we reach a character that is different\n break;\n }\n\n --resultIndex;\n --toIndex;\n }\n\n // Replace the matching part with the properly cased substring from the \"normalizedTo\" input\n //\n // Example:\n // \"..\" + \"/d/e\" = \"../d/e\"\n return uppercasedResult.substring(0, resultIndex) + normalizedTo.substring(toIndex);\n }\n\n public static relative(from: string, to: string): string {\n if (!Path.usingCaseSensitive) {\n return Path._relativeCaseInsensitive(from, to);\n }\n return path.relative(from, to);\n }\n\n // --------------------------------------------------------------------------------------------------------\n // The operations below don't care about case sensitivity\n\n public static dirname(p: string): string {\n return path.dirname(p);\n }\n\n public static join(...paths: string[]): string {\n return path.join(...paths);\n }\n\n public static resolve(...pathSegments: string[]): string {\n return path.resolve(...pathSegments);\n }\n\n public static parse(pathString: string): ParsedPath {\n return path.parse(pathString);\n }\n\n // --------------------------------------------------------------------------------------------------------\n // The operations below are borrowed from @rushstack/node-core-library\n\n private static _relativePathRegex: RegExp = /^[.\\/\\\\]+$/;\n\n /**\n * Returns true if \"childPath\" is located inside the \"parentFolderPath\" folder\n * or one of its child folders. Note that \"parentFolderPath\" is not considered to be\n * under itself. The \"childPath\" can refer to any type of file system object.\n *\n * @remarks\n * The indicated file/folder objects are not required to actually exist on disk.\n * For example, \"parentFolderPath\" is interpreted as a folder name even if it refers to a file.\n * If the paths are relative, they will first be resolved using path.resolve().\n */\n public static isUnder(childPath: string, parentFolderPath: string): boolean {\n const relativePath: string = Path.relative(childPath, parentFolderPath);\n return Path._relativePathRegex.test(relativePath);\n }\n\n /**\n * Returns true if `path1` and `path2` refer to the same underlying path.\n *\n * @remarks\n *\n * The comparison is performed using `path.relative()`.\n */\n public static isEqual(path1: string, path2: string): boolean {\n return Path.relative(path1, path2) === '';\n }\n\n /**\n * Replaces Windows-style backslashes with POSIX-style slashes.\n *\n * @remarks\n * POSIX is a registered trademark of the Institute of Electrical and Electronic Engineers, Inc.\n */\n public static convertToSlashes(inputPath: string): string {\n return inputPath.split('\\\\').join('/');\n }\n}\n"]}
|
package/lib/circular-deps.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TSESLint } from '@typescript-eslint/experimental-utils';
|
|
2
|
-
export
|
|
3
|
-
|
|
2
|
+
export type MessageIds = 'circular-import';
|
|
3
|
+
type Options = [];
|
|
4
4
|
declare const circularDeps: TSESLint.RuleModule<MessageIds, Options>;
|
|
5
5
|
export { circularDeps };
|
|
6
6
|
//# sourceMappingURL=circular-deps.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circular-deps.d.ts","sourceRoot":"","sources":["../src/circular-deps.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAkB,QAAQ,EAAY,MAAM,uCAAuC,CAAC;AAOhG,
|
|
1
|
+
{"version":3,"file":"circular-deps.d.ts","sourceRoot":"","sources":["../src/circular-deps.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAkB,QAAQ,EAAY,MAAM,uCAAuC,CAAC;AAOhG,MAAM,MAAM,UAAU,GAAG,iBAAiB,CAAC;AAC3C,KAAK,OAAO,GAAG,EAAE,CAAC;AAElB,QAAA,MAAM,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CA2E1D,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
package/lib/mechanics.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { TSESLint } from '@typescript-eslint/experimental-utils';
|
|
2
2
|
import { InputFileMessageIds, ImportMessageIds } from './PackletAnalyzer';
|
|
3
|
-
export
|
|
4
|
-
|
|
3
|
+
export type MessageIds = InputFileMessageIds | ImportMessageIds;
|
|
4
|
+
type Options = [];
|
|
5
5
|
declare const mechanics: TSESLint.RuleModule<MessageIds, Options>;
|
|
6
6
|
export { mechanics };
|
|
7
7
|
//# sourceMappingURL=mechanics.d.ts.map
|
package/lib/mechanics.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mechanics.d.ts","sourceRoot":"","sources":["../src/mechanics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,uCAAuC,CAAC;AAGhF,OAAO,EAAmC,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE3G,
|
|
1
|
+
{"version":3,"file":"mechanics.d.ts","sourceRoot":"","sources":["../src/mechanics.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,uCAAuC,CAAC;AAGhF,OAAO,EAAmC,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE3G,MAAM,MAAM,UAAU,GAAG,mBAAmB,GAAG,gBAAgB,CAAC;AAChE,KAAK,OAAO,GAAG,EAAE,CAAC;AAElB,QAAA,MAAM,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAqHvD,CAAC;AAEF,OAAO,EAAE,SAAS,EAAE,CAAC"}
|
package/lib/readme.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TSESLint } from '@typescript-eslint/experimental-utils';
|
|
2
|
-
export
|
|
3
|
-
|
|
2
|
+
export type MessageIds = 'missing-readme' | 'error-reading-file' | 'readme-too-short';
|
|
3
|
+
type Options = [
|
|
4
4
|
{
|
|
5
5
|
minimumReadmeWords?: number;
|
|
6
6
|
}
|
package/lib/readme.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readme.d.ts","sourceRoot":"","sources":["../src/readme.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,uCAAuC,CAAC;AAKhF,
|
|
1
|
+
{"version":3,"file":"readme.d.ts","sourceRoot":"","sources":["../src/readme.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,uCAAuC,CAAC;AAKhF,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,oBAAoB,GAAG,kBAAkB,CAAC;AACtF,KAAK,OAAO,GAAG;IACb;QACE,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B;CACF,CAAC;AAEF,QAAA,MAAM,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CA8FpD,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rushstack/eslint-plugin-packlets",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "A lightweight alternative to NPM packages for organizing source files within a single project",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -18,27 +18,27 @@
|
|
|
18
18
|
"main": "lib/index.js",
|
|
19
19
|
"typings": "lib/index.d.ts",
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@
|
|
22
|
-
"@
|
|
21
|
+
"@typescript-eslint/experimental-utils": "~5.59.2",
|
|
22
|
+
"@rushstack/tree-pattern": "0.3.0"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
25
|
"eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@rushstack/heft": "0.
|
|
29
|
-
"@rushstack/heft-node-rig": "
|
|
28
|
+
"@rushstack/heft": "0.54.0",
|
|
29
|
+
"@rushstack/heft-node-rig": "2.2.6",
|
|
30
30
|
"@types/eslint": "8.2.0",
|
|
31
31
|
"@types/estree": "0.0.50",
|
|
32
32
|
"@types/heft-jest": "1.0.1",
|
|
33
|
-
"@types/node": "
|
|
34
|
-
"@typescript-eslint/parser": "~5.
|
|
35
|
-
"@typescript-eslint/typescript-estree": "~5.
|
|
33
|
+
"@types/node": "18.17.15",
|
|
34
|
+
"@typescript-eslint/parser": "~5.59.2",
|
|
35
|
+
"@typescript-eslint/typescript-estree": "~5.59.2",
|
|
36
36
|
"eslint": "~8.7.0",
|
|
37
|
-
"typescript": "~
|
|
37
|
+
"typescript": "~5.0.4"
|
|
38
38
|
},
|
|
39
39
|
"scripts": {
|
|
40
40
|
"build": "heft build --clean",
|
|
41
|
-
"_phase:build": "heft build --clean",
|
|
42
|
-
"_phase:test": "heft test --
|
|
41
|
+
"_phase:build": "heft run --only build -- --clean",
|
|
42
|
+
"_phase:test": "heft run --only test -- --clean"
|
|
43
43
|
}
|
|
44
44
|
}
|