@rushstack/eslint-plugin-packlets 0.2.2 → 0.3.3
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/CHANGELOG.json +53 -0
- package/CHANGELOG.md +29 -1
- package/README.md +1 -1
- package/lib/PackletAnalyzer.js +1 -1
- package/lib/Path.js +1 -1
- package/lib/circular-deps.d.ts.map +1 -1
- package/lib/circular-deps.js.map +1 -1
- package/lib/mechanics.js.map +1 -1
- package/lib/readme.d.ts +5 -3
- package/lib/readme.d.ts.map +1 -1
- package/lib/readme.js +1 -1
- package/lib/readme.js.map +1 -1
- package/package.json +16 -14
package/CHANGELOG.json
CHANGED
|
@@ -1,6 +1,59 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rushstack/eslint-plugin-packlets",
|
|
3
3
|
"entries": [
|
|
4
|
+
{
|
|
5
|
+
"version": "0.3.3",
|
|
6
|
+
"tag": "@rushstack/eslint-plugin-packlets_v0.3.3",
|
|
7
|
+
"date": "Wed, 27 Oct 2021 00:08:15 GMT",
|
|
8
|
+
"comments": {
|
|
9
|
+
"patch": [
|
|
10
|
+
{
|
|
11
|
+
"comment": "Update the package.json repository field to include the directory property."
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"dependency": [
|
|
15
|
+
{
|
|
16
|
+
"comment": "Updating dependency \"@rushstack/tree-pattern\" to `0.2.2`"
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"version": "0.3.2",
|
|
23
|
+
"tag": "@rushstack/eslint-plugin-packlets_v0.3.2",
|
|
24
|
+
"date": "Thu, 07 Oct 2021 07:13:35 GMT",
|
|
25
|
+
"comments": {
|
|
26
|
+
"patch": [
|
|
27
|
+
{
|
|
28
|
+
"comment": "Update typescript-eslint to add support for TypeScript 4.4."
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"version": "0.3.1",
|
|
35
|
+
"tag": "@rushstack/eslint-plugin-packlets_v0.3.1",
|
|
36
|
+
"date": "Thu, 23 Sep 2021 00:10:40 GMT",
|
|
37
|
+
"comments": {
|
|
38
|
+
"patch": [
|
|
39
|
+
{
|
|
40
|
+
"comment": "Upgrade the `@types/node` dependency to version to version 12."
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"version": "0.3.0",
|
|
47
|
+
"tag": "@rushstack/eslint-plugin-packlets_v0.3.0",
|
|
48
|
+
"date": "Mon, 12 Jul 2021 23:08:26 GMT",
|
|
49
|
+
"comments": {
|
|
50
|
+
"minor": [
|
|
51
|
+
{
|
|
52
|
+
"comment": "Upgrade @typescript-eslint/* packages to 4.28.0 (GitHub #2389)"
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
},
|
|
4
57
|
{
|
|
5
58
|
"version": "0.2.2",
|
|
6
59
|
"tag": "@rushstack/eslint-plugin-packlets_v0.2.2",
|
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,34 @@
|
|
|
1
1
|
# Change Log - @rushstack/eslint-plugin-packlets
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Wed, 27 Oct 2021 00:08:15 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 0.3.3
|
|
6
|
+
Wed, 27 Oct 2021 00:08:15 GMT
|
|
7
|
+
|
|
8
|
+
### Patches
|
|
9
|
+
|
|
10
|
+
- Update the package.json repository field to include the directory property.
|
|
11
|
+
|
|
12
|
+
## 0.3.2
|
|
13
|
+
Thu, 07 Oct 2021 07:13:35 GMT
|
|
14
|
+
|
|
15
|
+
### Patches
|
|
16
|
+
|
|
17
|
+
- Update typescript-eslint to add support for TypeScript 4.4.
|
|
18
|
+
|
|
19
|
+
## 0.3.1
|
|
20
|
+
Thu, 23 Sep 2021 00:10:40 GMT
|
|
21
|
+
|
|
22
|
+
### Patches
|
|
23
|
+
|
|
24
|
+
- Upgrade the `@types/node` dependency to version to version 12.
|
|
25
|
+
|
|
26
|
+
## 0.3.0
|
|
27
|
+
Mon, 12 Jul 2021 23:08:26 GMT
|
|
28
|
+
|
|
29
|
+
### Minor changes
|
|
30
|
+
|
|
31
|
+
- Upgrade @typescript-eslint/* packages to 4.28.0 (GitHub #2389)
|
|
4
32
|
|
|
5
33
|
## 0.2.2
|
|
6
34
|
Mon, 12 Apr 2021 15:10:28 GMT
|
package/README.md
CHANGED
|
@@ -33,7 +33,7 @@ With packlets, our folders would be reorganized as follows:
|
|
|
33
33
|
- `src/packlets/reports/*.ts` - the report engine
|
|
34
34
|
- `src/*.ts` - other arbitrary files such as startup code and the main application
|
|
35
35
|
|
|
36
|
-
The [packlets-tutorial](https://github.com/microsoft/rushstack/tree/
|
|
36
|
+
The [packlets-tutorial](https://github.com/microsoft/rushstack-samples/tree/main/other/packlets-tutorial) sample project illustrates this layout in full detail.
|
|
37
37
|
|
|
38
38
|
The basic design can be summarized in 5 rules:
|
|
39
39
|
|
package/lib/PackletAnalyzer.js
CHANGED
|
@@ -16,7 +16,7 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
16
16
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
17
17
|
if (mod && mod.__esModule) return mod;
|
|
18
18
|
var result = {};
|
|
19
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
19
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
20
20
|
__setModuleDefault(result, mod);
|
|
21
21
|
return result;
|
|
22
22
|
};
|
package/lib/Path.js
CHANGED
|
@@ -16,7 +16,7 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
16
16
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
17
17
|
if (mod && mod.__esModule) return mod;
|
|
18
18
|
var result = {};
|
|
19
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
19
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
20
20
|
__setModuleDefault(result, mod);
|
|
21
21
|
return result;
|
|
22
22
|
};
|
|
@@ -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,oBAAY,UAAU,GAAG,iBAAiB,CAAC;AAC3C,aAAK,OAAO,GAAG,EAAE,CAAC;AAElB,QAAA,MAAM,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,
|
|
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,oBAAY,UAAU,GAAG,iBAAiB,CAAC;AAC3C,aAAK,OAAO,GAAG,EAAE,CAAC;AAElB,QAAA,MAAM,YAAY,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAyE1D,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
package/lib/circular-deps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"circular-deps.js","sourceRoot":"","sources":["../src/circular-deps.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAM3D,8EAAoE;AAEpE,uDAAoD;AACpD,6DAA0E;AAC1E,iCAA8B;AAK9B,MAAM,YAAY,GAA6C;IAC7D,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,EAAE,iBAAiB,EAAE,0DAA0D,EAAE;QAC3F,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;aAC5B;SACF;QACD,IAAI,EAAE;YACJ,WAAW,EAAE,kDAAkD;YAC/D,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,MAAM;YACnB,GAAG,EAAE,iEAAiE;SACvE;KACF;IAED,MAAM,EAAE,CAAC,OAAkD,EAAE,EAAE;QAC7D,gEAAgE;QAChE,MAAM,aAAa,GAAW,OAAO,CAAC,WAAW,EAAE,CAAC;QAEpD,6CAA6C;QAC7C,MAAM,OAAO,GAAe,gCAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;QAC3E,MAAM,gBAAgB,GAAuB,OAAO,CAAC,kBAAkB,EAAE,CAAC,gBAAgB,CAAW,CAAC;QAEtG,MAAM,eAAe,GAAoB,iCAAe,CAAC,gBAAgB,CACvE,aAAa,EACb,gBAAgB,CACjB,CAAC;QACF,IAAI,eAAe,CAAC,WAAW,EAAE;YAC/B,OAAO,EAAE,CAAC;SACX;QAED,OAAO;YACL,mGAAmG;YACnG,yGAAyG;YACzG,gDAAgD;YAChD,OAAO,EAAE,CAAC,IAAmB,EAAQ,EAAE;gBACrC,IAAI,eAAe,CAAC,YAAY,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;oBAC1D,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"circular-deps.js","sourceRoot":"","sources":["../src/circular-deps.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAM3D,8EAAoE;AAEpE,uDAAoD;AACpD,6DAA0E;AAC1E,iCAA8B;AAK9B,MAAM,YAAY,GAA6C;IAC7D,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,EAAE,iBAAiB,EAAE,0DAA0D,EAAE;QAC3F,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;aAC5B;SACF;QACD,IAAI,EAAE;YACJ,WAAW,EAAE,kDAAkD;YAC/D,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,MAAM;YACnB,GAAG,EAAE,iEAAiE;SACvE;KACF;IAED,MAAM,EAAE,CAAC,OAAkD,EAAE,EAAE;QAC7D,gEAAgE;QAChE,MAAM,aAAa,GAAW,OAAO,CAAC,WAAW,EAAE,CAAC;QAEpD,6CAA6C;QAC7C,MAAM,OAAO,GAAe,gCAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;QAC3E,MAAM,gBAAgB,GAAuB,OAAO,CAAC,kBAAkB,EAAE,CAAC,gBAAgB,CAAW,CAAC;QAEtG,MAAM,eAAe,GAAoB,iCAAe,CAAC,gBAAgB,CACvE,aAAa,EACb,gBAAgB,CACjB,CAAC;QACF,IAAI,eAAe,CAAC,WAAW,EAAE;YAC/B,OAAO,EAAE,CAAC;SACX;QAED,OAAO;YACL,mGAAmG;YACnG,yGAAyG;YACzG,gDAAgD;YAChD,OAAO,EAAE,CAAC,IAAmB,EAAQ,EAAE;gBACrC,IAAI,eAAe,CAAC,YAAY,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;oBAC1D,MAAM,cAAc,GAClB,uCAAkB,CAAC,gCAAgC,CACjD,eAAe,CAAC,oBAAqB,EACrC,eAAe,EACf,OAAO,CACR,CAAC;oBAEJ,IAAI,cAAc,EAAE;wBAClB,MAAM,kBAAkB,GAAW,WAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;wBAElE,MAAM,oBAAoB,GAAa,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;wBAEhF,wGAAwG;wBACxG,4EAA4E;wBAC5E,oBAAoB,CAAC,IAAI,EAAE,CAAC;wBAC5B,IAAI,oBAAoB,CAAC,CAAC,CAAC,KAAK,eAAe,CAAC,oBAAoB,EAAE;4BACpE,IAAI,MAAM,GAAW,EAAE,CAAC;4BACxB,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE;gCAC1C,MAAM,QAAQ,GAAW,WAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;gCACvF,MAAM,IAAI,IAAI,aAAa,CAAC,WAAW,sBAAsB,QAAQ,IAAI,CAAC;6BAC3E;4BAED,OAAO,CAAC,MAAM,CAAC;gCACb,IAAI,EAAE,IAAI;gCACV,SAAS,EAAE,iBAAiB;gCAC5B,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE;6BACzB,CAAC,CAAC;yBACJ;qBACF;iBACF;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEO,oCAAY","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\r\n// See LICENSE in the project root for license information.\r\n\r\nimport type * as ts from 'typescript';\r\nimport * as path from 'path';\r\n\r\nimport type { ParserServices, TSESLint, TSESTree } from '@typescript-eslint/experimental-utils';\r\nimport { ESLintUtils } from '@typescript-eslint/experimental-utils';\r\n\r\nimport { PackletAnalyzer } from './PackletAnalyzer';\r\nimport { DependencyAnalyzer, IPackletImport } from './DependencyAnalyzer';\r\nimport { Path } from './Path';\r\n\r\nexport type MessageIds = 'circular-import';\r\ntype Options = [];\r\n\r\nconst circularDeps: TSESLint.RuleModule<MessageIds, Options> = {\r\n meta: {\r\n type: 'problem',\r\n messages: { 'circular-import': 'Packlet imports create a circular reference:\\n{{report}}' },\r\n schema: [\r\n {\r\n type: 'object',\r\n additionalProperties: false\r\n }\r\n ],\r\n docs: {\r\n description: 'Check for circular dependencies between packlets',\r\n category: 'Best Practices',\r\n recommended: 'warn',\r\n url: 'https://www.npmjs.com/package/@rushstack/eslint-plugin-packlets'\r\n }\r\n },\r\n\r\n create: (context: TSESLint.RuleContext<MessageIds, Options>) => {\r\n // Example: /path/to/my-project/src/packlets/my-packlet/index.ts\r\n const inputFilePath: string = context.getFilename();\r\n\r\n // Example: /path/to/my-project/tsconfig.json\r\n const program: ts.Program = ESLintUtils.getParserServices(context).program;\r\n const tsconfigFilePath: string | undefined = program.getCompilerOptions()['configFilePath'] as string;\r\n\r\n const packletAnalyzer: PackletAnalyzer = PackletAnalyzer.analyzeInputFile(\r\n inputFilePath,\r\n tsconfigFilePath\r\n );\r\n if (packletAnalyzer.nothingToDo) {\r\n return {};\r\n }\r\n\r\n return {\r\n // Match the first node in the source file. Ideally we should be matching \"Program > :first-child\"\r\n // so a warning doesn't highlight the whole file. But that's blocked behind a bug in the query selector:\r\n // https://github.com/estools/esquery/issues/114\r\n Program: (node: TSESTree.Node): void => {\r\n if (packletAnalyzer.isEntryPoint && !packletAnalyzer.error) {\r\n const packletImports: IPackletImport[] | undefined =\r\n DependencyAnalyzer.checkEntryPointForCircularImport(\r\n packletAnalyzer.inputFilePackletName!,\r\n packletAnalyzer,\r\n program\r\n );\r\n\r\n if (packletImports) {\r\n const tsconfigFileFolder: string = Path.dirname(tsconfigFilePath);\r\n\r\n const affectedPackletNames: string[] = packletImports.map((x) => x.packletName);\r\n\r\n // If 3 different packlets form a circular dependency, we don't need to report the same warning 3 times.\r\n // Instead, only report the warning for the alphabetically smallest packlet.\r\n affectedPackletNames.sort();\r\n if (affectedPackletNames[0] === packletAnalyzer.inputFilePackletName) {\r\n let report: string = '';\r\n for (const packletImport of packletImports) {\r\n const filePath: string = Path.relative(tsconfigFileFolder, packletImport.fromFilePath);\r\n report += `\"${packletImport.packletName}\" is referenced by ${filePath}\\n`;\r\n }\r\n\r\n context.report({\r\n node: node,\r\n messageId: 'circular-import',\r\n data: { report: report }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }\r\n};\r\n\r\nexport { circularDeps };\r\n"]}
|
package/lib/mechanics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mechanics.js","sourceRoot":"","sources":["../src/mechanics.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAG3D,8EAAoF;AAEpF,uDAA2G;AAK3G,MAAM,SAAS,GAA6C;IAC1D,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE;YACR,sBAAsB;YACtB,wBAAwB,EAAE,6DAA6D;YACvF,sBAAsB,EACpB,yCAAyC;gBACzC,4FAA4F;YAC9F,2BAA2B,EAAE,qEAAqE;YAClG,oBAAoB,EAAE,wDAAwD;YAC9E,kBAAkB,EAChB,4EAA4E;gBAC5E,uCAAuC;YACzC,qBAAqB,EAAE,oEAAoE;YAE3F,mBAAmB;YACnB,sBAAsB,EACpB,yFAAyF;YAC3F,sBAAsB,EAAE,2EAA2E;YACnG,gCAAgC,EAC9B,0CAA0C;gBAC1C,uEAAuE;SAC1E;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;aAC5B;SACF;QACD,IAAI,EAAE;YACJ,WAAW,EAAE,wFAAwF;YACrG,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,MAAM;YACnB,GAAG,EAAE,iEAAiE;SACvE;KACF;IAED,MAAM,EAAE,CAAC,OAAkD,EAAE,EAAE;QAC7D,gEAAgE;QAChE,MAAM,aAAa,GAAW,OAAO,CAAC,WAAW,EAAE,CAAC;QAEpD,6CAA6C;QAC7C,MAAM,gBAAgB,GAAuB,gCAAW,CAAC,iBAAiB,CACxE,OAAO,CACR,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,gBAAgB,CAAW,CAAC;QAE3D,MAAM,eAAe,GAAoB,iCAAe,CAAC,gBAAgB,CACvE,aAAa,EACb,gBAAgB,CACjB,CAAC;QACF,IAAI,eAAe,CAAC,WAAW,EAAE;YAC/B,OAAO,EAAE,CAAC;SACX;QAED,OAAO;YACL,mGAAmG;YACnG,yGAAyG;YACzG,gDAAgD;YAChD,OAAO,EAAE,CAAC,IAAmB,EAAQ,EAAE;gBACrC,IAAI,eAAe,CAAC,KAAK,EAAE;oBACzB,OAAO,CAAC,MAAM,CAAC;wBACb,IAAI,EAAE,IAAI;wBACV,SAAS,EAAE,eAAe,CAAC,KAAK,CAAC,SAAS;wBAC1C,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,IAAI;qBACjC,CAAC,CAAC;iBACJ;YACH,CAAC;YAED,yCAAyC;YACzC,sDAAsD;YACtD,kDAAkD;YAClD,8DAA8D;YAC9D,uDAAuD;YACvD,EAAE;YACF,8CAA8C;YAC9C,sDAAsD;YACtD,EAAE;YACF,4CAA4C;YAC5C,kDAAkD;YAClD,uDAAuD;YACvD,iEAAiE,EAAE,CACjE,IAAkG,EAC5F,EAAE;;gBACR,IAAI,
|
|
1
|
+
{"version":3,"file":"mechanics.js","sourceRoot":"","sources":["../src/mechanics.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\r\n// See LICENSE in the project root for license information.\r\n\r\nimport type { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils';\r\nimport { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/experimental-utils';\r\n\r\nimport { PackletAnalyzer, IAnalyzerError, InputFileMessageIds, ImportMessageIds } from './PackletAnalyzer';\r\n\r\nexport type MessageIds = InputFileMessageIds | ImportMessageIds;\r\ntype Options = [];\r\n\r\nconst mechanics: TSESLint.RuleModule<MessageIds, Options> = {\r\n meta: {\r\n type: 'problem',\r\n messages: {\r\n // InputFileMessageIds\r\n 'file-in-packets-folder': 'The \"packlets\" folder must not contain regular source files',\r\n 'invalid-packlet-name':\r\n 'Invalid packlet name \"{{packletName}}\".' +\r\n ' The name must be lowercase alphanumeric words separated by hyphens. Example: \"my-packlet\"',\r\n 'misplaced-packlets-folder': 'The packlets folder must be located at \"{{expectedPackletsFolder}}\"',\r\n 'missing-src-folder': 'Expecting to find a \"src\" folder at: {{srcFolderPath}}',\r\n 'missing-tsconfig':\r\n 'In order to use @rushstack/eslint-plugin-packlets, your ESLint config file' +\r\n ' must configure the TypeScript parser',\r\n 'packlet-folder-case': 'The packlets folder must be all lower case: {{packletsFolderPath}}',\r\n\r\n // ImportMessageIds\r\n 'bypassed-entry-point':\r\n 'The import statement does not use the packlet\\'s entry point \"{{entryPointModulePath}}\"',\r\n 'circular-entry-point': 'Files under a packlet folder must not import from their own index.ts file',\r\n 'packlet-importing-project-file':\r\n 'A local project file cannot be imported.' +\r\n \" A packlet's dependencies must be NPM packages and/or other packlets.\"\r\n },\r\n schema: [\r\n {\r\n type: 'object',\r\n additionalProperties: false\r\n }\r\n ],\r\n docs: {\r\n description: 'Check that file paths and imports follow the basic mechanics for the packlet formalism',\r\n category: 'Best Practices',\r\n recommended: 'warn',\r\n url: 'https://www.npmjs.com/package/@rushstack/eslint-plugin-packlets'\r\n }\r\n },\r\n\r\n create: (context: TSESLint.RuleContext<MessageIds, Options>) => {\r\n // Example: /path/to/my-project/src/packlets/my-packlet/index.ts\r\n const inputFilePath: string = context.getFilename();\r\n\r\n // Example: /path/to/my-project/tsconfig.json\r\n const tsconfigFilePath: string | undefined = ESLintUtils.getParserServices(\r\n context\r\n ).program.getCompilerOptions()['configFilePath'] as string;\r\n\r\n const packletAnalyzer: PackletAnalyzer = PackletAnalyzer.analyzeInputFile(\r\n inputFilePath,\r\n tsconfigFilePath\r\n );\r\n if (packletAnalyzer.nothingToDo) {\r\n return {};\r\n }\r\n\r\n return {\r\n // Match the first node in the source file. Ideally we should be matching \"Program > :first-child\"\r\n // so a warning doesn't highlight the whole file. But that's blocked behind a bug in the query selector:\r\n // https://github.com/estools/esquery/issues/114\r\n Program: (node: TSESTree.Node): void => {\r\n if (packletAnalyzer.error) {\r\n context.report({\r\n node: node,\r\n messageId: packletAnalyzer.error.messageId,\r\n data: packletAnalyzer.error.data\r\n });\r\n }\r\n },\r\n\r\n // ImportDeclaration matches these forms:\r\n // import { X } from '../../packlets/other-packlet';\r\n // import X from '../../packlets/other-packlet';\r\n // import type { X, Y } from '../../packlets/other-packlet';\r\n // import * as X from '../../packlets/other-packlet';\r\n //\r\n // ExportNamedDeclaration matches these forms:\r\n // export { X } from '../../packlets/other-packlet';\r\n //\r\n // ExportAllDeclaration matches these forms:\r\n // export * from '../../packlets/other-packlet';\r\n // export * as X from '../../packlets/other-packlet';\r\n 'ImportDeclaration, ExportNamedDeclaration, ExportAllDeclaration': (\r\n node: TSESTree.ImportDeclaration | TSESTree.ExportNamedDeclaration | TSESTree.ExportAllDeclaration\r\n ): void => {\r\n if (node.source?.type === AST_NODE_TYPES.Literal) {\r\n if (packletAnalyzer.projectUsesPacklets) {\r\n // Extract the import/export module path\r\n // Example: \"../../packlets/other-packlet\"\r\n const modulePath = node.source.value;\r\n if (typeof modulePath !== 'string') {\r\n return;\r\n }\r\n\r\n if (!(modulePath.startsWith('.') || modulePath.startsWith('..'))) {\r\n // It's not a local import.\r\n\r\n // Examples:\r\n // import { X } from \"npm-package\";\r\n // import { X } from \"raw-loader!./webpack-file.ts\";\r\n return;\r\n }\r\n\r\n const lint: IAnalyzerError | undefined = packletAnalyzer.analyzeImport(modulePath);\r\n if (lint) {\r\n context.report({\r\n node: node,\r\n messageId: lint.messageId,\r\n data: lint.data\r\n });\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }\r\n};\r\n\r\nexport { mechanics };\r\n"]}
|
package/lib/readme.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { TSESLint } from '@typescript-eslint/experimental-utils';
|
|
2
2
|
export declare type MessageIds = 'missing-readme' | 'error-reading-file' | 'readme-too-short';
|
|
3
|
-
declare type Options = [
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
declare type Options = [
|
|
4
|
+
{
|
|
5
|
+
minimumReadmeWords?: number;
|
|
6
|
+
}
|
|
7
|
+
];
|
|
6
8
|
declare const readme: TSESLint.RuleModule<MessageIds, Options>;
|
|
7
9
|
export { readme };
|
|
8
10
|
//# sourceMappingURL=readme.d.ts.map
|
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,oBAAY,UAAU,GAAG,gBAAgB,GAAG,oBAAoB,GAAG,kBAAkB,CAAC;AACtF,aAAK,OAAO,GAAG
|
|
1
|
+
{"version":3,"file":"readme.d.ts","sourceRoot":"","sources":["../src/readme.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,uCAAuC,CAAC;AAKhF,oBAAY,UAAU,GAAG,gBAAgB,GAAG,oBAAoB,GAAG,kBAAkB,CAAC;AACtF,aAAK,OAAO,GAAG;IACb;QACE,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B;CACF,CAAC;AAEF,QAAA,MAAM,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CA4FpD,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
package/lib/readme.js
CHANGED
|
@@ -16,7 +16,7 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
16
16
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
17
17
|
if (mod && mod.__esModule) return mod;
|
|
18
18
|
var result = {};
|
|
19
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
19
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
20
20
|
__setModuleDefault(result, mod);
|
|
21
21
|
return result;
|
|
22
22
|
};
|
package/lib/readme.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readme.js","sourceRoot":"","sources":["../src/readme.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;;;;;;;;;;;;;;;;;;;;AAE3D,2CAA6B;AAC7B,uCAAyB;AAEzB,8EAAoE;AAEpE,uDAAoD;AASpD,MAAM,MAAM,GAA6C;IACvD,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE;YACR,gBAAgB,EACd,wFAAwF;gBACxF,wCAAwC;YAC1C,kBAAkB,EAChB,iGAAiG;gBACjG,iCAAiC;YACnC,oBAAoB,EAAE,4DAA4D;SACnF;QACD,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACV,kBAAkB,EAAE;wBAClB,IAAI,EAAE,QAAQ;qBACf;iBACF;gBACD,oBAAoB,EAAE,KAAK;aAC5B;SACF;QAED,IAAI,EAAE;YACJ,WAAW,EAAE,wFAAwF;YACrG,QAAQ,EAAE,gBAAgB;YAC1B,4DAA4D;YAC5D,WAAW,EAAE,KAAK;YAClB,GAAG,EAAE,iEAAiE;SACvE;KACF;IAED,MAAM,EAAE,CAAC,OAAkD,EAAE,EAAE;;QAC7D,MAAM,kBAAkB,GAAW,
|
|
1
|
+
{"version":3,"file":"readme.js","sourceRoot":"","sources":["../src/readme.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\r\n// See LICENSE in the project root for license information.\r\n\r\nimport * as path from 'path';\r\nimport * as fs from 'fs';\r\nimport type { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils';\r\nimport { ESLintUtils } from '@typescript-eslint/experimental-utils';\r\n\r\nimport { PackletAnalyzer } from './PackletAnalyzer';\r\n\r\nexport type MessageIds = 'missing-readme' | 'error-reading-file' | 'readme-too-short';\r\ntype Options = [\r\n {\r\n minimumReadmeWords?: number;\r\n }\r\n];\r\n\r\nconst readme: TSESLint.RuleModule<MessageIds, Options> = {\r\n meta: {\r\n type: 'problem',\r\n messages: {\r\n 'missing-readme':\r\n 'The ESLint configuration requires each packlet to provide a README.md file summarizing' +\r\n ' its purpose and usage: {{readmePath}}',\r\n 'readme-too-short':\r\n 'The ESLint configuration requires at least {{minimumReadmeWords}} words of documentation in the' +\r\n ' README.md file: {{readmePath}}',\r\n 'error-reading-file': 'Error reading input file {{readmePath}}:\\n{{errorMessage}}'\r\n },\r\n schema: [\r\n {\r\n type: 'object',\r\n properties: {\r\n minimumReadmeWords: {\r\n type: 'number'\r\n }\r\n },\r\n additionalProperties: false\r\n }\r\n ],\r\n\r\n docs: {\r\n description: 'Require each packlet folder to have a README.md file summarizing its purpose and usage',\r\n category: 'Best Practices',\r\n // Too strict to be recommended in the default configuration\r\n recommended: false,\r\n url: 'https://www.npmjs.com/package/@rushstack/eslint-plugin-packlets'\r\n }\r\n },\r\n\r\n create: (context: TSESLint.RuleContext<MessageIds, Options>) => {\r\n const minimumReadmeWords: number = context.options[0]?.minimumReadmeWords || 10;\r\n\r\n // Example: /path/to/my-project/src/packlets/my-packlet/index.ts\r\n const inputFilePath: string = context.getFilename();\r\n\r\n // Example: /path/to/my-project/tsconfig.json\r\n const tsconfigFilePath: string | undefined = ESLintUtils.getParserServices(\r\n context\r\n ).program.getCompilerOptions()['configFilePath'] as string;\r\n\r\n const packletAnalyzer: PackletAnalyzer = PackletAnalyzer.analyzeInputFile(\r\n inputFilePath,\r\n tsconfigFilePath\r\n );\r\n\r\n if (!packletAnalyzer.nothingToDo && !packletAnalyzer.error) {\r\n if (packletAnalyzer.isEntryPoint) {\r\n return {\r\n Program: (node: TSESTree.Node): void => {\r\n const readmePath: string = path.join(\r\n packletAnalyzer.packletsFolderPath!,\r\n packletAnalyzer.inputFilePackletName!,\r\n 'README.md'\r\n );\r\n try {\r\n if (!fs.existsSync(readmePath)) {\r\n context.report({\r\n node: node,\r\n messageId: 'missing-readme',\r\n data: { readmePath }\r\n });\r\n } else {\r\n if (minimumReadmeWords > 0) {\r\n const readmeContent: string = fs.readFileSync(readmePath).toString();\r\n const words: string[] = readmeContent.split(/[^a-z'\"]+/i).filter((x) => x.length > 0);\r\n if (words.length < minimumReadmeWords) {\r\n context.report({\r\n node: node,\r\n messageId: 'readme-too-short',\r\n data: { readmePath, minimumReadmeWords }\r\n });\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n context.report({\r\n node: node,\r\n messageId: 'error-reading-file',\r\n data: { readmePath, errorMessage: (error as Error).toString() }\r\n });\r\n }\r\n }\r\n };\r\n }\r\n }\r\n\r\n return {};\r\n }\r\n};\r\n\r\nexport { readme };\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rushstack/eslint-plugin-packlets",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.3",
|
|
4
4
|
"description": "A lightweight alternative to NPM packages for organizing source files within a single project",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
|
-
"url": "https://github.com/microsoft/rushstack
|
|
7
|
+
"url": "https://github.com/microsoft/rushstack.git",
|
|
8
|
+
"type": "git",
|
|
9
|
+
"directory": "stack/eslint-plugin-packlets"
|
|
8
10
|
},
|
|
9
11
|
"homepage": "https://rushstack.io",
|
|
10
12
|
"keywords": [
|
|
@@ -15,26 +17,26 @@
|
|
|
15
17
|
],
|
|
16
18
|
"main": "lib/index.js",
|
|
17
19
|
"typings": "lib/index.d.ts",
|
|
18
|
-
"scripts": {
|
|
19
|
-
"build": "heft test --clean"
|
|
20
|
-
},
|
|
21
20
|
"dependencies": {
|
|
22
|
-
"@rushstack/tree-pattern": "0.2.
|
|
23
|
-
"@typescript-eslint/experimental-utils": "
|
|
21
|
+
"@rushstack/tree-pattern": "0.2.2",
|
|
22
|
+
"@typescript-eslint/experimental-utils": "~4.31.2"
|
|
24
23
|
},
|
|
25
24
|
"peerDependencies": {
|
|
26
25
|
"eslint": "^6.0.0 || ^7.0.0"
|
|
27
26
|
},
|
|
28
27
|
"devDependencies": {
|
|
29
|
-
"@rushstack/heft": "0.
|
|
30
|
-
"@rushstack/heft-node-rig": "1.
|
|
28
|
+
"@rushstack/heft": "0.41.6",
|
|
29
|
+
"@rushstack/heft-node-rig": "1.2.25",
|
|
31
30
|
"@types/eslint": "7.2.0",
|
|
32
31
|
"@types/estree": "0.0.44",
|
|
33
32
|
"@types/heft-jest": "1.0.1",
|
|
34
|
-
"@types/node": "
|
|
35
|
-
"@typescript-eslint/parser": "
|
|
36
|
-
"@typescript-eslint/typescript-estree": "
|
|
37
|
-
"eslint": "~7.
|
|
38
|
-
"typescript": "~
|
|
33
|
+
"@types/node": "12.20.24",
|
|
34
|
+
"@typescript-eslint/parser": "~4.31.2",
|
|
35
|
+
"@typescript-eslint/typescript-estree": "~4.31.2",
|
|
36
|
+
"eslint": "~7.30.0",
|
|
37
|
+
"typescript": "~4.4.2"
|
|
38
|
+
},
|
|
39
|
+
"scripts": {
|
|
40
|
+
"build": "heft test --clean"
|
|
39
41
|
}
|
|
40
42
|
}
|