@baseplate-dev/core-generators 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +390 -0
- package/dist/constants/core-packages.d.ts +21 -0
- package/dist/constants/core-packages.d.ts.map +1 -0
- package/dist/constants/core-packages.js +26 -0
- package/dist/constants/core-packages.js.map +1 -0
- package/dist/constants/index.d.ts +2 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +2 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/node.d.ts +3 -0
- package/dist/constants/node.d.ts.map +1 -0
- package/dist/constants/node.js +3 -0
- package/dist/constants/node.js.map +1 -0
- package/dist/generators/docker/docker-compose/docker-compose.generator.d.ts +17 -0
- package/dist/generators/docker/docker-compose/docker-compose.generator.d.ts.map +1 -0
- package/dist/generators/docker/docker-compose/docker-compose.generator.js +83 -0
- package/dist/generators/docker/docker-compose/docker-compose.generator.js.map +1 -0
- package/dist/generators/docker/docker-compose/postgres.d.ts +8 -0
- package/dist/generators/docker/docker-compose/postgres.d.ts.map +1 -0
- package/dist/generators/docker/docker-compose/postgres.js +22 -0
- package/dist/generators/docker/docker-compose/postgres.js.map +1 -0
- package/dist/generators/docker/docker-compose/redis.d.ts +8 -0
- package/dist/generators/docker/docker-compose/redis.d.ts.map +1 -0
- package/dist/generators/docker/docker-compose/redis.js +21 -0
- package/dist/generators/docker/docker-compose/redis.js.map +1 -0
- package/dist/generators/docker/docker-compose/types.d.ts +5 -0
- package/dist/generators/docker/docker-compose/types.d.ts.map +1 -0
- package/dist/generators/docker/docker-compose/types.js +2 -0
- package/dist/generators/docker/docker-compose/types.js.map +1 -0
- package/dist/generators/docker/index.d.ts +2 -0
- package/dist/generators/docker/index.d.ts.map +1 -0
- package/dist/generators/docker/index.js +2 -0
- package/dist/generators/docker/index.js.map +1 -0
- package/dist/generators/index.d.ts +3 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +3 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/node/_composers/index.d.ts +2 -0
- package/dist/generators/node/_composers/index.d.ts.map +1 -0
- package/dist/generators/node/_composers/index.js +2 -0
- package/dist/generators/node/_composers/index.js.map +1 -0
- package/dist/generators/node/_composers/node.d.ts +4 -0
- package/dist/generators/node/_composers/node.d.ts.map +1 -0
- package/dist/generators/node/_composers/node.js +18 -0
- package/dist/generators/node/_composers/node.js.map +1 -0
- package/dist/generators/node/eslint/eslint.generator.d.ts +33 -0
- package/dist/generators/node/eslint/eslint.generator.d.ts.map +1 -0
- package/dist/generators/node/eslint/eslint.generator.js +110 -0
- package/dist/generators/node/eslint/eslint.generator.js.map +1 -0
- package/dist/generators/node/eslint/generated/ts-templates.d.ts +9 -0
- package/dist/generators/node/eslint/generated/ts-templates.d.ts.map +1 -0
- package/dist/generators/node/eslint/generated/ts-templates.js +14 -0
- package/dist/generators/node/eslint/generated/ts-templates.js.map +1 -0
- package/dist/generators/node/eslint/react-rules.d.ts +2 -0
- package/dist/generators/node/eslint/react-rules.d.ts.map +1 -0
- package/dist/generators/node/eslint/react-rules.js +59 -0
- package/dist/generators/node/eslint/react-rules.js.map +1 -0
- package/dist/generators/node/eslint/templates/eslint.config.js +219 -0
- package/dist/generators/node/eslint/vitest-rules.d.ts +2 -0
- package/dist/generators/node/eslint/vitest-rules.d.ts.map +1 -0
- package/dist/generators/node/eslint/vitest-rules.js +17 -0
- package/dist/generators/node/eslint/vitest-rules.js.map +1 -0
- package/dist/generators/node/index.d.ts +9 -0
- package/dist/generators/node/index.d.ts.map +1 -0
- package/dist/generators/node/index.js +9 -0
- package/dist/generators/node/index.js.map +1 -0
- package/dist/generators/node/node/node.generator.d.ts +72 -0
- package/dist/generators/node/node/node.generator.d.ts.map +1 -0
- package/dist/generators/node/node/node.generator.js +149 -0
- package/dist/generators/node/node/node.generator.js.map +1 -0
- package/dist/generators/node/node/package-dependencies-container.d.ts +41 -0
- package/dist/generators/node/node/package-dependencies-container.d.ts.map +1 -0
- package/dist/generators/node/node/package-dependencies-container.js +104 -0
- package/dist/generators/node/node/package-dependencies-container.js.map +1 -0
- package/dist/generators/node/node-git-ignore/node-git-ignore.generator.d.ts +15 -0
- package/dist/generators/node/node-git-ignore/node-git-ignore.generator.d.ts.map +1 -0
- package/dist/generators/node/node-git-ignore/node-git-ignore.generator.js +75 -0
- package/dist/generators/node/node-git-ignore/node-git-ignore.generator.js.map +1 -0
- package/dist/generators/node/prettier/prettier.generator.d.ts +33 -0
- package/dist/generators/node/prettier/prettier.generator.d.ts.map +1 -0
- package/dist/generators/node/prettier/prettier.generator.js +191 -0
- package/dist/generators/node/prettier/prettier.generator.js.map +1 -0
- package/dist/generators/node/ts-utils/generated/ts-import-maps.d.ts +21 -0
- package/dist/generators/node/ts-utils/generated/ts-import-maps.d.ts.map +1 -0
- package/dist/generators/node/ts-utils/generated/ts-import-maps.js +22 -0
- package/dist/generators/node/ts-utils/generated/ts-import-maps.js.map +1 -0
- package/dist/generators/node/ts-utils/generated/ts-templates.d.ts +7 -0
- package/dist/generators/node/ts-utils/generated/ts-templates.d.ts.map +1 -0
- package/dist/generators/node/ts-utils/generated/ts-templates.js +32 -0
- package/dist/generators/node/ts-utils/generated/ts-templates.js.map +1 -0
- package/dist/generators/node/ts-utils/templates/arrays.ts +13 -0
- package/dist/generators/node/ts-utils/templates/normalize-types.ts +12 -0
- package/dist/generators/node/ts-utils/templates/nulls.ts +33 -0
- package/dist/generators/node/ts-utils/templates/string.ts +11 -0
- package/dist/generators/node/ts-utils/ts-utils.generator.d.ts +17 -0
- package/dist/generators/node/ts-utils/ts-utils.generator.d.ts.map +1 -0
- package/dist/generators/node/ts-utils/ts-utils.generator.js +48 -0
- package/dist/generators/node/ts-utils/ts-utils.generator.js.map +1 -0
- package/dist/generators/node/typescript/compiler-types.d.ts +178 -0
- package/dist/generators/node/typescript/compiler-types.d.ts.map +1 -0
- package/dist/generators/node/typescript/compiler-types.js +70 -0
- package/dist/generators/node/typescript/compiler-types.js.map +1 -0
- package/dist/generators/node/typescript/typescript.generator.d.ts +117 -0
- package/dist/generators/node/typescript/typescript.generator.d.ts.map +1 -0
- package/dist/generators/node/typescript/typescript.generator.js +198 -0
- package/dist/generators/node/typescript/typescript.generator.js.map +1 -0
- package/dist/generators/node/vitest/generated/ts-templates.d.ts +9 -0
- package/dist/generators/node/vitest/generated/ts-templates.d.ts.map +1 -0
- package/dist/generators/node/vitest/generated/ts-templates.js +15 -0
- package/dist/generators/node/vitest/generated/ts-templates.js.map +1 -0
- package/dist/generators/node/vitest/templates/global-setup.ts +5 -0
- package/dist/generators/node/vitest/templates/vitest.config.ts +5 -0
- package/dist/generators/node/vitest/vitest.generator.d.ts +26 -0
- package/dist/generators/node/vitest/vitest.generator.d.ts.map +1 -0
- package/dist/generators/node/vitest/vitest.generator.js +93 -0
- package/dist/generators/node/vitest/vitest.generator.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/index.d.ts +3 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +3 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/project.d.ts +5 -0
- package/dist/providers/project.d.ts.map +1 -0
- package/dist/providers/project.js +3 -0
- package/dist/providers/project.js.map +1 -0
- package/dist/providers/scopes.d.ts +3 -0
- package/dist/providers/scopes.d.ts.map +1 -0
- package/dist/providers/scopes.js +4 -0
- package/dist/providers/scopes.js.map +1 -0
- package/dist/renderers/index.d.ts +2 -0
- package/dist/renderers/index.d.ts.map +1 -0
- package/dist/renderers/index.js +2 -0
- package/dist/renderers/index.js.map +1 -0
- package/dist/renderers/typescript/actions/index.d.ts +4 -0
- package/dist/renderers/typescript/actions/index.d.ts.map +1 -0
- package/dist/renderers/typescript/actions/index.js +4 -0
- package/dist/renderers/typescript/actions/index.js.map +1 -0
- package/dist/renderers/typescript/actions/render-ts-fragment-action.d.ts +12 -0
- package/dist/renderers/typescript/actions/render-ts-fragment-action.d.ts.map +1 -0
- package/dist/renderers/typescript/actions/render-ts-fragment-action.js +25 -0
- package/dist/renderers/typescript/actions/render-ts-fragment-action.js.map +1 -0
- package/dist/renderers/typescript/actions/render-ts-template-file-action.d.ts +32 -0
- package/dist/renderers/typescript/actions/render-ts-template-file-action.d.ts.map +1 -0
- package/dist/renderers/typescript/actions/render-ts-template-file-action.js +65 -0
- package/dist/renderers/typescript/actions/render-ts-template-file-action.js.map +1 -0
- package/dist/renderers/typescript/actions/render-ts-template-group-action.d.ts +58 -0
- package/dist/renderers/typescript/actions/render-ts-template-group-action.d.ts.map +1 -0
- package/dist/renderers/typescript/actions/render-ts-template-group-action.js +69 -0
- package/dist/renderers/typescript/actions/render-ts-template-group-action.js.map +1 -0
- package/dist/renderers/typescript/extractor/extract-ts-template-variables.d.ts +18 -0
- package/dist/renderers/typescript/extractor/extract-ts-template-variables.d.ts.map +1 -0
- package/dist/renderers/typescript/extractor/extract-ts-template-variables.js +38 -0
- package/dist/renderers/typescript/extractor/extract-ts-template-variables.js.map +1 -0
- package/dist/renderers/typescript/extractor/index.d.ts +2 -0
- package/dist/renderers/typescript/extractor/index.d.ts.map +1 -0
- package/dist/renderers/typescript/extractor/index.js +2 -0
- package/dist/renderers/typescript/extractor/index.js.map +1 -0
- package/dist/renderers/typescript/extractor/organize-ts-template-imports.d.ts +26 -0
- package/dist/renderers/typescript/extractor/organize-ts-template-imports.d.ts.map +1 -0
- package/dist/renderers/typescript/extractor/organize-ts-template-imports.js +175 -0
- package/dist/renderers/typescript/extractor/organize-ts-template-imports.js.map +1 -0
- package/dist/renderers/typescript/extractor/preprocess-code-for-extraction-hack.d.ts +17 -0
- package/dist/renderers/typescript/extractor/preprocess-code-for-extraction-hack.d.ts.map +1 -0
- package/dist/renderers/typescript/extractor/preprocess-code-for-extraction-hack.js +46 -0
- package/dist/renderers/typescript/extractor/preprocess-code-for-extraction-hack.js.map +1 -0
- package/dist/renderers/typescript/extractor/templates/imports-file.d.ts +2 -0
- package/dist/renderers/typescript/extractor/templates/imports-file.d.ts.map +1 -0
- package/dist/renderers/typescript/extractor/templates/imports-file.js +35 -0
- package/dist/renderers/typescript/extractor/templates/imports-file.js.map +1 -0
- package/dist/renderers/typescript/extractor/ts-template-file-extractor.d.ts +167 -0
- package/dist/renderers/typescript/extractor/ts-template-file-extractor.d.ts.map +1 -0
- package/dist/renderers/typescript/extractor/ts-template-file-extractor.js +279 -0
- package/dist/renderers/typescript/extractor/ts-template-file-extractor.js.map +1 -0
- package/dist/renderers/typescript/extractor/write-ts-project-exports.d.ts +96 -0
- package/dist/renderers/typescript/extractor/write-ts-project-exports.d.ts.map +1 -0
- package/dist/renderers/typescript/extractor/write-ts-project-exports.js +139 -0
- package/dist/renderers/typescript/extractor/write-ts-project-exports.js.map +1 -0
- package/dist/renderers/typescript/fragments/creators.d.ts +29 -0
- package/dist/renderers/typescript/fragments/creators.d.ts.map +1 -0
- package/dist/renderers/typescript/fragments/creators.js +53 -0
- package/dist/renderers/typescript/fragments/creators.js.map +1 -0
- package/dist/renderers/typescript/fragments/index.d.ts +4 -0
- package/dist/renderers/typescript/fragments/index.d.ts.map +1 -0
- package/dist/renderers/typescript/fragments/index.js +3 -0
- package/dist/renderers/typescript/fragments/index.js.map +1 -0
- package/dist/renderers/typescript/fragments/types.d.ts +65 -0
- package/dist/renderers/typescript/fragments/types.d.ts.map +1 -0
- package/dist/renderers/typescript/fragments/types.js +2 -0
- package/dist/renderers/typescript/fragments/types.js.map +1 -0
- package/dist/renderers/typescript/fragments/utils.d.ts +51 -0
- package/dist/renderers/typescript/fragments/utils.d.ts.map +1 -0
- package/dist/renderers/typescript/fragments/utils.js +134 -0
- package/dist/renderers/typescript/fragments/utils.js.map +1 -0
- package/dist/renderers/typescript/import-maps/index.d.ts +4 -0
- package/dist/renderers/typescript/import-maps/index.d.ts.map +1 -0
- package/dist/renderers/typescript/import-maps/index.js +3 -0
- package/dist/renderers/typescript/import-maps/index.js.map +1 -0
- package/dist/renderers/typescript/import-maps/transform-ts-imports-with-map.d.ts +19 -0
- package/dist/renderers/typescript/import-maps/transform-ts-imports-with-map.d.ts.map +1 -0
- package/dist/renderers/typescript/import-maps/transform-ts-imports-with-map.js +54 -0
- package/dist/renderers/typescript/import-maps/transform-ts-imports-with-map.js.map +1 -0
- package/dist/renderers/typescript/import-maps/ts-import-map.d.ts +10 -0
- package/dist/renderers/typescript/import-maps/ts-import-map.d.ts.map +1 -0
- package/dist/renderers/typescript/import-maps/ts-import-map.js +39 -0
- package/dist/renderers/typescript/import-maps/ts-import-map.js.map +1 -0
- package/dist/renderers/typescript/import-maps/types.d.ts +28 -0
- package/dist/renderers/typescript/import-maps/types.d.ts.map +1 -0
- package/dist/renderers/typescript/import-maps/types.js +2 -0
- package/dist/renderers/typescript/import-maps/types.js.map +1 -0
- package/dist/renderers/typescript/imports/builder.d.ts +49 -0
- package/dist/renderers/typescript/imports/builder.d.ts.map +1 -0
- package/dist/renderers/typescript/imports/builder.js +47 -0
- package/dist/renderers/typescript/imports/builder.js.map +1 -0
- package/dist/renderers/typescript/imports/index.d.ts +8 -0
- package/dist/renderers/typescript/imports/index.d.ts.map +1 -0
- package/dist/renderers/typescript/imports/index.js +7 -0
- package/dist/renderers/typescript/imports/index.js.map +1 -0
- package/dist/renderers/typescript/imports/merge-ts-import-declarations.d.ts +20 -0
- package/dist/renderers/typescript/imports/merge-ts-import-declarations.d.ts.map +1 -0
- package/dist/renderers/typescript/imports/merge-ts-import-declarations.js +114 -0
- package/dist/renderers/typescript/imports/merge-ts-import-declarations.js.map +1 -0
- package/dist/renderers/typescript/imports/normalize-module-specifier.d.ts +40 -0
- package/dist/renderers/typescript/imports/normalize-module-specifier.d.ts.map +1 -0
- package/dist/renderers/typescript/imports/normalize-module-specifier.js +133 -0
- package/dist/renderers/typescript/imports/normalize-module-specifier.js.map +1 -0
- package/dist/renderers/typescript/imports/sort-imports/get-import-sort-group.d.ts +31 -0
- package/dist/renderers/typescript/imports/sort-imports/get-import-sort-group.d.ts.map +1 -0
- package/dist/renderers/typescript/imports/sort-imports/get-import-sort-group.js +169 -0
- package/dist/renderers/typescript/imports/sort-imports/get-import-sort-group.js.map +1 -0
- package/dist/renderers/typescript/imports/sort-imports/index.d.ts +2 -0
- package/dist/renderers/typescript/imports/sort-imports/index.d.ts.map +1 -0
- package/dist/renderers/typescript/imports/sort-imports/index.js +2 -0
- package/dist/renderers/typescript/imports/sort-imports/index.js.map +1 -0
- package/dist/renderers/typescript/imports/sort-imports/sort-import-declarations.d.ts +32 -0
- package/dist/renderers/typescript/imports/sort-imports/sort-import-declarations.d.ts.map +1 -0
- package/dist/renderers/typescript/imports/sort-imports/sort-import-declarations.js +72 -0
- package/dist/renderers/typescript/imports/sort-imports/sort-import-declarations.js.map +1 -0
- package/dist/renderers/typescript/imports/ts-morph-operations.d.ts +42 -0
- package/dist/renderers/typescript/imports/ts-morph-operations.d.ts.map +1 -0
- package/dist/renderers/typescript/imports/ts-morph-operations.js +145 -0
- package/dist/renderers/typescript/imports/ts-morph-operations.js.map +1 -0
- package/dist/renderers/typescript/imports/ts-path-maps.d.ts +18 -0
- package/dist/renderers/typescript/imports/ts-path-maps.d.ts.map +1 -0
- package/dist/renderers/typescript/imports/ts-path-maps.js +39 -0
- package/dist/renderers/typescript/imports/ts-path-maps.js.map +1 -0
- package/dist/renderers/typescript/imports/types.d.ts +73 -0
- package/dist/renderers/typescript/imports/types.d.ts.map +1 -0
- package/dist/renderers/typescript/imports/types.js +2 -0
- package/dist/renderers/typescript/imports/types.js.map +1 -0
- package/dist/renderers/typescript/index.d.ts +9 -0
- package/dist/renderers/typescript/index.d.ts.map +1 -0
- package/dist/renderers/typescript/index.js +9 -0
- package/dist/renderers/typescript/index.js.map +1 -0
- package/dist/renderers/typescript/renderers/file.d.ts +18 -0
- package/dist/renderers/typescript/renderers/file.d.ts.map +1 -0
- package/dist/renderers/typescript/renderers/file.js +91 -0
- package/dist/renderers/typescript/renderers/file.js.map +1 -0
- package/dist/renderers/typescript/renderers/index.d.ts +3 -0
- package/dist/renderers/typescript/renderers/index.d.ts.map +1 -0
- package/dist/renderers/typescript/renderers/index.js +3 -0
- package/dist/renderers/typescript/renderers/index.js.map +1 -0
- package/dist/renderers/typescript/renderers/template.d.ts +21 -0
- package/dist/renderers/typescript/renderers/template.d.ts.map +1 -0
- package/dist/renderers/typescript/renderers/template.js +132 -0
- package/dist/renderers/typescript/renderers/template.js.map +1 -0
- package/dist/renderers/typescript/templates/creators.d.ts +10 -0
- package/dist/renderers/typescript/templates/creators.d.ts.map +1 -0
- package/dist/renderers/typescript/templates/creators.js +9 -0
- package/dist/renderers/typescript/templates/creators.js.map +1 -0
- package/dist/renderers/typescript/templates/index.d.ts +3 -0
- package/dist/renderers/typescript/templates/index.d.ts.map +1 -0
- package/dist/renderers/typescript/templates/index.js +3 -0
- package/dist/renderers/typescript/templates/index.js.map +1 -0
- package/dist/renderers/typescript/templates/types.d.ts +119 -0
- package/dist/renderers/typescript/templates/types.d.ts.map +1 -0
- package/dist/renderers/typescript/templates/types.js +43 -0
- package/dist/renderers/typescript/templates/types.js.map +1 -0
- package/dist/renderers/typescript/utils/index.d.ts +2 -0
- package/dist/renderers/typescript/utils/index.d.ts.map +1 -0
- package/dist/renderers/typescript/utils/index.js +2 -0
- package/dist/renderers/typescript/utils/index.js.map +1 -0
- package/dist/renderers/typescript/utils/ts-code-utils.d.ts +200 -0
- package/dist/renderers/typescript/utils/ts-code-utils.d.ts.map +1 -0
- package/dist/renderers/typescript/utils/ts-code-utils.js +431 -0
- package/dist/renderers/typescript/utils/ts-code-utils.js.map +1 -0
- package/dist/utils/extract-packages.d.ts +8 -0
- package/dist/utils/extract-packages.d.ts.map +1 -0
- package/dist/utils/extract-packages.js +10 -0
- package/dist/utils/extract-packages.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/writers/index.d.ts +2 -0
- package/dist/writers/index.d.ts.map +1 -0
- package/dist/writers/index.js +2 -0
- package/dist/writers/index.js.map +1 -0
- package/dist/writers/json.d.ts +21 -0
- package/dist/writers/json.d.ts.map +1 -0
- package/dist/writers/json.js +14 -0
- package/dist/writers/json.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { TsImportDeclaration } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Error thrown when conflicting import declarations cannot be resolved.
|
|
4
|
+
*/
|
|
5
|
+
export declare class ImportConflictError extends Error {
|
|
6
|
+
constructor(message: string);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Merges multiple TypeScript import declarations to create optimized imports.
|
|
10
|
+
*
|
|
11
|
+
* This function resolves conflicts and merges imports with the same moduleSpecifier,
|
|
12
|
+
* handling both regular and type-only imports appropriately. It also supports
|
|
13
|
+
* individual named imports marked as type-only.
|
|
14
|
+
*
|
|
15
|
+
* @param declarations - Array of import declarations to merge
|
|
16
|
+
* @returns Merged array of import declarations
|
|
17
|
+
* @throws {ImportConflictError} When conflicting imports are detected
|
|
18
|
+
*/
|
|
19
|
+
export declare function mergeTsImportDeclarations(declarations: TsImportDeclaration[]): TsImportDeclaration[];
|
|
20
|
+
//# sourceMappingURL=merge-ts-import-declarations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-ts-import-declarations.d.ts","sourceRoot":"","sources":["../../../../src/renderers/typescript/imports/merge-ts-import-declarations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAyGD;;;;;;;;;;GAUG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,mBAAmB,EAAE,GAClC,mBAAmB,EAAE,CAiCvB"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { mapGroupBy } from '@baseplate-dev/utils';
|
|
2
|
+
import { uniqBy } from 'es-toolkit';
|
|
3
|
+
/**
|
|
4
|
+
* Error thrown when conflicting import declarations cannot be resolved.
|
|
5
|
+
*/
|
|
6
|
+
export class ImportConflictError extends Error {
|
|
7
|
+
constructor(message) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = 'ImportConflictError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const DEFAULT_SYMBOL = Symbol('default');
|
|
13
|
+
const NAMESPACE_SYMBOL = Symbol('namespace');
|
|
14
|
+
function convertToNamedImportEntries(imports) {
|
|
15
|
+
return imports.flatMap((i) => [
|
|
16
|
+
i.defaultImport === undefined
|
|
17
|
+
? undefined
|
|
18
|
+
: {
|
|
19
|
+
moduleSpecifier: i.moduleSpecifier,
|
|
20
|
+
name: DEFAULT_SYMBOL,
|
|
21
|
+
alias: i.defaultImport,
|
|
22
|
+
isTypeOnly: i.isTypeOnly ?? false,
|
|
23
|
+
},
|
|
24
|
+
i.namespaceImport === undefined
|
|
25
|
+
? undefined
|
|
26
|
+
: {
|
|
27
|
+
moduleSpecifier: i.moduleSpecifier,
|
|
28
|
+
name: NAMESPACE_SYMBOL,
|
|
29
|
+
alias: i.namespaceImport,
|
|
30
|
+
isTypeOnly: i.isTypeOnly ?? false,
|
|
31
|
+
},
|
|
32
|
+
...(i.namedImports ?? []).map((namedImport) => ({
|
|
33
|
+
moduleSpecifier: i.moduleSpecifier,
|
|
34
|
+
name: namedImport.name,
|
|
35
|
+
alias: namedImport.alias ?? namedImport.name,
|
|
36
|
+
isTypeOnly: i.isTypeOnly ? true : (namedImport.isTypeOnly ?? false),
|
|
37
|
+
})),
|
|
38
|
+
].filter((x) => x !== undefined));
|
|
39
|
+
}
|
|
40
|
+
function assertNoConflictingImportEntries(entries) {
|
|
41
|
+
const groupedByName = mapGroupBy(entries, (e) => e.name);
|
|
42
|
+
for (const [name, entries] of groupedByName.entries()) {
|
|
43
|
+
const nameSet = new Set(entries.map((e) => e.alias));
|
|
44
|
+
if (nameSet.size !== 1) {
|
|
45
|
+
throw new ImportConflictError(`Conflicting aliases for named import "${name.toString()}" from "${entries[0].moduleSpecifier}" (${entries.map((e) => e.alias).join(', ')})`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function convertToImportDeclarations(moduleSpecifier, isTypeOnly, entries) {
|
|
50
|
+
const defaultEntry = entries.find((e) => e.name === DEFAULT_SYMBOL);
|
|
51
|
+
const namespaceEntry = entries.find((e) => e.name === NAMESPACE_SYMBOL);
|
|
52
|
+
const namedImportEntries = entries
|
|
53
|
+
.filter((e) => typeof e.name === 'string')
|
|
54
|
+
.map((e) => ({
|
|
55
|
+
name: e.name,
|
|
56
|
+
alias: e.alias === e.name ? undefined : e.alias,
|
|
57
|
+
}))
|
|
58
|
+
.toSorted((a, b) => (a.alias ?? a.name).localeCompare(b.alias ?? b.name));
|
|
59
|
+
const importDeclarations = [];
|
|
60
|
+
const addDeclaration = (declaration) => {
|
|
61
|
+
importDeclarations.push({
|
|
62
|
+
moduleSpecifier,
|
|
63
|
+
isTypeOnly: isTypeOnly ? true : undefined,
|
|
64
|
+
...declaration,
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
if (namespaceEntry) {
|
|
68
|
+
addDeclaration({ namespaceImport: namespaceEntry.alias });
|
|
69
|
+
}
|
|
70
|
+
// Type-only imports must split out default and named imports
|
|
71
|
+
if (isTypeOnly) {
|
|
72
|
+
if (defaultEntry) {
|
|
73
|
+
addDeclaration({ defaultImport: defaultEntry.alias });
|
|
74
|
+
}
|
|
75
|
+
if (namedImportEntries.length > 0) {
|
|
76
|
+
addDeclaration({ namedImports: namedImportEntries });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else if (defaultEntry || namedImportEntries.length > 0) {
|
|
80
|
+
addDeclaration({
|
|
81
|
+
defaultImport: defaultEntry?.alias,
|
|
82
|
+
namedImports: namedImportEntries.length > 0 ? namedImportEntries : undefined,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return importDeclarations;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Merges multiple TypeScript import declarations to create optimized imports.
|
|
89
|
+
*
|
|
90
|
+
* This function resolves conflicts and merges imports with the same moduleSpecifier,
|
|
91
|
+
* handling both regular and type-only imports appropriately. It also supports
|
|
92
|
+
* individual named imports marked as type-only.
|
|
93
|
+
*
|
|
94
|
+
* @param declarations - Array of import declarations to merge
|
|
95
|
+
* @returns Merged array of import declarations
|
|
96
|
+
* @throws {ImportConflictError} When conflicting imports are detected
|
|
97
|
+
*/
|
|
98
|
+
export function mergeTsImportDeclarations(declarations) {
|
|
99
|
+
const namedImportEntries = convertToNamedImportEntries(declarations);
|
|
100
|
+
const importGroups = mapGroupBy(namedImportEntries, (e) => e.moduleSpecifier);
|
|
101
|
+
const result = [];
|
|
102
|
+
// Process each module specifier's imports
|
|
103
|
+
for (const [moduleSpecifier, entries] of importGroups.entries()) {
|
|
104
|
+
// Remove type-only imports that conflict with regular imports
|
|
105
|
+
assertNoConflictingImportEntries(entries);
|
|
106
|
+
const regularEntries = entries.filter((e) => !e.isTypeOnly);
|
|
107
|
+
const typeOnlyEntries = entries.filter((e) => e.isTypeOnly && !regularEntries.some((re) => re.name === e.name));
|
|
108
|
+
const uniqueRegularEntries = uniqBy(regularEntries, (e) => e.name);
|
|
109
|
+
const uniqueTypeOnlyEntries = uniqBy(typeOnlyEntries, (e) => e.name);
|
|
110
|
+
result.push(...convertToImportDeclarations(moduleSpecifier, false, uniqueRegularEntries), ...convertToImportDeclarations(moduleSpecifier, true, uniqueTypeOnlyEntries));
|
|
111
|
+
}
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=merge-ts-import-declarations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-ts-import-declarations.js","sourceRoot":"","sources":["../../../../src/renderers/typescript/imports/merge-ts-import-declarations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ts } from 'ts-morph';
|
|
2
|
+
import type { TsPathMapEntry } from './types.js';
|
|
3
|
+
type ModuleResolutionKind = `${ts.server.protocol.ModuleResolutionKind}`;
|
|
4
|
+
/**
|
|
5
|
+
* Options for resolving module paths
|
|
6
|
+
*/
|
|
7
|
+
interface ResolveModuleOptions {
|
|
8
|
+
/**
|
|
9
|
+
* The path map entries
|
|
10
|
+
*/
|
|
11
|
+
pathMapEntries?: TsPathMapEntry[];
|
|
12
|
+
/**
|
|
13
|
+
* The module resolution kind
|
|
14
|
+
*/
|
|
15
|
+
moduleResolution: ModuleResolutionKind;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Gets the project relative path from a module specifier
|
|
19
|
+
*
|
|
20
|
+
* @param moduleSpecifier The module specifier to get the project relative path from
|
|
21
|
+
* @param directory The directory we need to resolve the module specifier from
|
|
22
|
+
* @returns The project relative path if the module specifier is internal, otherwise undefined
|
|
23
|
+
*/
|
|
24
|
+
export declare function getProjectRelativePathFromModuleSpecifier(moduleSpecifier: string, directory: string): string | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Normalizes the module specifier to pick the best import path based on the following rules:
|
|
27
|
+
*
|
|
28
|
+
* 1) If the import is an external module (e.g. axios), keep the module specifier as-is.
|
|
29
|
+
* 2) Otherwise if the module is a relative module (./) or absolute internal path (@/),
|
|
30
|
+
* identify the shortest way to refer to the module (either relative path or using
|
|
31
|
+
* a path alias) and use that as the module specifier.
|
|
32
|
+
*
|
|
33
|
+
* @param moduleSpecifier The module specifier to resolve
|
|
34
|
+
* @param directory The directory we need to resolve the module specifier from
|
|
35
|
+
* @param options Options for resolving the modules
|
|
36
|
+
* @returns The normalized module specifier
|
|
37
|
+
*/
|
|
38
|
+
export declare function normalizeModuleSpecifier(moduleSpecifier: string, directory: string, options: ResolveModuleOptions): string;
|
|
39
|
+
export {};
|
|
40
|
+
//# sourceMappingURL=normalize-module-specifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-module-specifier.d.ts","sourceRoot":"","sources":["../../../../src/renderers/typescript/imports/normalize-module-specifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAKnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA8EjD,KAAK,oBAAoB,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;AAEzE;;GAEG;AACH,UAAU,oBAAoB;IAC5B;;OAEG;IACH,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC;IAClC;;OAEG;IACH,gBAAgB,EAAE,oBAAoB,CAAC;CACxC;AAqCD;;;;;;GAMG;AACH,wBAAgB,yCAAyC,CACvD,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,SAAS,CAUpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACtC,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,oBAAoB,GAC5B,MAAM,CA2BR"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { minBy } from 'es-toolkit';
|
|
2
|
+
import pathPosix from 'node:path/posix';
|
|
3
|
+
/**
|
|
4
|
+
* Strips the relative prefix from a project relative path
|
|
5
|
+
* @param path
|
|
6
|
+
* @returns
|
|
7
|
+
*/
|
|
8
|
+
function stripRelativePrefixFromProjectRelativePath(path) {
|
|
9
|
+
if (path.startsWith('./')) {
|
|
10
|
+
return path.slice(2);
|
|
11
|
+
}
|
|
12
|
+
if (path.startsWith('../')) {
|
|
13
|
+
throw new Error(`Expected project relative path, but got relative path ${path}`);
|
|
14
|
+
}
|
|
15
|
+
return path;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Attempts to resolve the aliased path from a project relative path
|
|
19
|
+
*
|
|
20
|
+
* @param projectPath The project relative path to resolve from
|
|
21
|
+
* @param TsPathMapEntry The path map entry to use
|
|
22
|
+
* @returns The aliased path if the path map matches, otherwise undefined
|
|
23
|
+
*/
|
|
24
|
+
function getAliasedPathFromTsPathMapEntry(projectPath, entry) {
|
|
25
|
+
const strippedProjectPath = stripRelativePrefixFromProjectRelativePath(projectPath);
|
|
26
|
+
const strippedToPath = stripRelativePrefixFromProjectRelativePath(entry.to);
|
|
27
|
+
const fromPath = entry.from;
|
|
28
|
+
// return the from, if it's an exact match
|
|
29
|
+
if (strippedProjectPath === strippedToPath)
|
|
30
|
+
return fromPath;
|
|
31
|
+
if (strippedToPath.includes('*')) {
|
|
32
|
+
// validate from and to path
|
|
33
|
+
if (!strippedToPath.endsWith('/*')) {
|
|
34
|
+
throw new Error(`Path map entry 'to' path (${entry.to}) must end with /* for wildcard support`);
|
|
35
|
+
}
|
|
36
|
+
const isFromPathWildcard = fromPath.includes('*');
|
|
37
|
+
if (isFromPathWildcard && !fromPath.endsWith('/*')) {
|
|
38
|
+
throw new Error(`Path map entry 'from' path (${fromPath}) must end with /* for wildcard support`);
|
|
39
|
+
}
|
|
40
|
+
const toPathPrefix = strippedToPath.slice(0, -1);
|
|
41
|
+
if (!strippedProjectPath.startsWith(toPathPrefix))
|
|
42
|
+
return undefined;
|
|
43
|
+
return isFromPathWildcard
|
|
44
|
+
? fromPath.slice(0, -1) + strippedProjectPath.slice(toPathPrefix.length)
|
|
45
|
+
: fromPath;
|
|
46
|
+
}
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Checks if an import is an internal import
|
|
51
|
+
*
|
|
52
|
+
* @param name - The name of the import
|
|
53
|
+
* @param pathmapEntries - The path map entries
|
|
54
|
+
* @returns `true` if the import is internal, `false` otherwise
|
|
55
|
+
*/
|
|
56
|
+
function isInternalImport(name, pathmapEntries) {
|
|
57
|
+
return (name.startsWith('.') ||
|
|
58
|
+
pathmapEntries.some((entry) => !!getAliasedPathFromTsPathMapEntry(name, entry)));
|
|
59
|
+
}
|
|
60
|
+
const TS_FILE_EXTENSION_REGEX = /\.[tj]sx?$/;
|
|
61
|
+
/**
|
|
62
|
+
* Normalizes the path for the given module resolution kind
|
|
63
|
+
*
|
|
64
|
+
* Specifically, for Node16, it will ensure the path has a .js extension
|
|
65
|
+
* and for other module resolution kinds, it will remove the .js extension
|
|
66
|
+
* and the /index suffix
|
|
67
|
+
*
|
|
68
|
+
* @param path - The path to normalize
|
|
69
|
+
* @param moduleResolution - The module resolution kind
|
|
70
|
+
* @returns The normalized path
|
|
71
|
+
*/
|
|
72
|
+
function normalizePathForResolutionKind(path, { moduleResolution, pathMapEntries }) {
|
|
73
|
+
const isNode16 = moduleResolution === 'node16' || moduleResolution === 'nodenext';
|
|
74
|
+
if (isNode16 &&
|
|
75
|
+
isInternalImport(path, pathMapEntries ?? []) &&
|
|
76
|
+
!TS_FILE_EXTENSION_REGEX.test(path)) {
|
|
77
|
+
throw new Error(`Invalid Node 16 import discovered ${path}. Make sure to use .js extension for Node16 imports.`);
|
|
78
|
+
}
|
|
79
|
+
return isNode16
|
|
80
|
+
? // normalize the extension to .js
|
|
81
|
+
path.replace(TS_FILE_EXTENSION_REGEX, '.js')
|
|
82
|
+
: path.replace(/(\/index)?\.(j|t)sx?$/, '');
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Gets the project relative path from a module specifier
|
|
86
|
+
*
|
|
87
|
+
* @param moduleSpecifier The module specifier to get the project relative path from
|
|
88
|
+
* @param directory The directory we need to resolve the module specifier from
|
|
89
|
+
* @returns The project relative path if the module specifier is internal, otherwise undefined
|
|
90
|
+
*/
|
|
91
|
+
export function getProjectRelativePathFromModuleSpecifier(moduleSpecifier, directory) {
|
|
92
|
+
// if not an internal import, just return undefined
|
|
93
|
+
if (!moduleSpecifier.startsWith('@/') && !moduleSpecifier.startsWith('.')) {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
const projectRelativePath = moduleSpecifier.startsWith('@/')
|
|
97
|
+
? moduleSpecifier.slice(2)
|
|
98
|
+
: pathPosix.join(directory, moduleSpecifier);
|
|
99
|
+
return projectRelativePath;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Normalizes the module specifier to pick the best import path based on the following rules:
|
|
103
|
+
*
|
|
104
|
+
* 1) If the import is an external module (e.g. axios), keep the module specifier as-is.
|
|
105
|
+
* 2) Otherwise if the module is a relative module (./) or absolute internal path (@/),
|
|
106
|
+
* identify the shortest way to refer to the module (either relative path or using
|
|
107
|
+
* a path alias) and use that as the module specifier.
|
|
108
|
+
*
|
|
109
|
+
* @param moduleSpecifier The module specifier to resolve
|
|
110
|
+
* @param directory The directory we need to resolve the module specifier from
|
|
111
|
+
* @param options Options for resolving the modules
|
|
112
|
+
* @returns The normalized module specifier
|
|
113
|
+
*/
|
|
114
|
+
export function normalizeModuleSpecifier(moduleSpecifier, directory, options) {
|
|
115
|
+
const { pathMapEntries } = options;
|
|
116
|
+
// if not an internal import, just return directly
|
|
117
|
+
if (!moduleSpecifier.startsWith('@/') && !moduleSpecifier.startsWith('.')) {
|
|
118
|
+
return moduleSpecifier;
|
|
119
|
+
}
|
|
120
|
+
// figure out the shortest way to resolve the module
|
|
121
|
+
const projectRelativePath = moduleSpecifier.startsWith('@/')
|
|
122
|
+
? moduleSpecifier.slice(2)
|
|
123
|
+
: pathPosix.join(directory, moduleSpecifier);
|
|
124
|
+
const relativePath = pathPosix.relative(directory, projectRelativePath);
|
|
125
|
+
const relativePathImport = relativePath.startsWith('.')
|
|
126
|
+
? relativePath
|
|
127
|
+
: `./${relativePath}`;
|
|
128
|
+
const typescriptPathImports = pathMapEntries
|
|
129
|
+
?.map((entry) => getAliasedPathFromTsPathMapEntry(projectRelativePath, entry))
|
|
130
|
+
.filter((x) => x !== undefined) ?? [];
|
|
131
|
+
return normalizePathForResolutionKind(minBy([relativePathImport, ...typescriptPathImports], (x) => x.length), options);
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=normalize-module-specifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize-module-specifier.js","sourceRoot":"","sources":["../../../../src/renderers/typescript/imports/normalize-module-specifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { TsImportDeclaration } from '../types.js';
|
|
2
|
+
declare const IMPORT_SORT_GROUPS: readonly ["builtin", "external", "internal", "parent", "sibling", "side-effect", "side-effect-style", "type", "index", "style", "external-type", "builtin-type", "internal-type", "parent-type", "sibling-type", "index-type", "unknown"];
|
|
3
|
+
/**
|
|
4
|
+
* Represents the various import sorting groups
|
|
5
|
+
*/
|
|
6
|
+
export type ImportSortGroup = (typeof IMPORT_SORT_GROUPS)[number];
|
|
7
|
+
/**
|
|
8
|
+
* Options for classifying imports
|
|
9
|
+
*/
|
|
10
|
+
interface GetImportSortGroupOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Patterns that identify internal modules
|
|
13
|
+
*/
|
|
14
|
+
internalPatterns?: RegExp[];
|
|
15
|
+
/**
|
|
16
|
+
* File extensions that are considered style imports
|
|
17
|
+
*
|
|
18
|
+
* @default ['.less', '.scss', '.sass', '.styl', '.pcss', '.css', '.sss']
|
|
19
|
+
*/
|
|
20
|
+
styleExtensions?: string[];
|
|
21
|
+
/**
|
|
22
|
+
* The sort groups that are allowed to be set. Unknown will always be present.
|
|
23
|
+
*/
|
|
24
|
+
allowedSortGroups: readonly ImportSortGroup[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Classifies an import into its appropriate sorting group
|
|
28
|
+
*/
|
|
29
|
+
export declare function getImportSortGroup(importDecl: TsImportDeclaration, options?: Partial<GetImportSortGroupOptions>): ImportSortGroup;
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=get-import-sort-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-import-sort-group.d.ts","sourceRoot":"","sources":["../../../../../src/renderers/typescript/imports/sort-imports/get-import-sort-group.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIvD,QAAA,MAAM,kBAAkB,2OAkBd,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAClE;;GAEG;AACH,UAAU,yBAAyB;IACjC;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;OAEG;IACH,iBAAiB,EAAE,SAAS,eAAe,EAAE,CAAC;CAC/C;AAiGD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,mBAAmB,EAC/B,OAAO,GAAE,OAAO,CAAC,yBAAyB,CAAM,GAC/C,eAAe,CA0EjB"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { isBuiltin as isBuiltinModule } from 'node:module';
|
|
2
|
+
// Adapted from https://perfectionist.dev/rules/sort-imports.html
|
|
3
|
+
const IMPORT_SORT_GROUPS = [
|
|
4
|
+
'builtin',
|
|
5
|
+
'external',
|
|
6
|
+
'internal',
|
|
7
|
+
'parent',
|
|
8
|
+
'sibling',
|
|
9
|
+
'side-effect',
|
|
10
|
+
'side-effect-style',
|
|
11
|
+
'type',
|
|
12
|
+
'index',
|
|
13
|
+
'style',
|
|
14
|
+
'external-type',
|
|
15
|
+
'builtin-type',
|
|
16
|
+
'internal-type',
|
|
17
|
+
'parent-type',
|
|
18
|
+
'sibling-type',
|
|
19
|
+
'index-type',
|
|
20
|
+
'unknown',
|
|
21
|
+
];
|
|
22
|
+
const DEFAULT_OPTIONS = {
|
|
23
|
+
internalPatterns: [],
|
|
24
|
+
styleExtensions: [
|
|
25
|
+
'.less',
|
|
26
|
+
'.scss',
|
|
27
|
+
'.sass',
|
|
28
|
+
'.styl',
|
|
29
|
+
'.pcss',
|
|
30
|
+
'.css',
|
|
31
|
+
'.sss',
|
|
32
|
+
],
|
|
33
|
+
allowedSortGroups: IMPORT_SORT_GROUPS,
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Determines if a module is an index import
|
|
37
|
+
*/
|
|
38
|
+
function isIndexImport(moduleName) {
|
|
39
|
+
return [
|
|
40
|
+
'./index.d.js',
|
|
41
|
+
'./index.d.ts',
|
|
42
|
+
'./index.js',
|
|
43
|
+
'./index.ts',
|
|
44
|
+
'./index.cjs',
|
|
45
|
+
'./index.cts',
|
|
46
|
+
'./index.mjs',
|
|
47
|
+
'./index.mts',
|
|
48
|
+
'./index',
|
|
49
|
+
'./',
|
|
50
|
+
'.',
|
|
51
|
+
].includes(moduleName);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Determines if a module is a parent directory import
|
|
55
|
+
*/
|
|
56
|
+
function isParentImport(moduleName) {
|
|
57
|
+
return moduleName.startsWith('..');
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Determines if a module is a sibling import
|
|
61
|
+
*/
|
|
62
|
+
function isSiblingImport(moduleName) {
|
|
63
|
+
return moduleName.startsWith('./') && !isIndexImport(moduleName);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Determines if an import path matches any of the internal patterns
|
|
67
|
+
*/
|
|
68
|
+
function isInternalImport(moduleName, internalPatterns = []) {
|
|
69
|
+
return internalPatterns.some((pattern) => pattern.test(moduleName));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Determines if a module is an external import (not relative or internal)
|
|
73
|
+
*/
|
|
74
|
+
function isExternalImport(moduleName, internalPatterns = []) {
|
|
75
|
+
return (!moduleName.startsWith('.') &&
|
|
76
|
+
!moduleName.startsWith('/') &&
|
|
77
|
+
!isInternalImport(moduleName, internalPatterns) &&
|
|
78
|
+
!isBuiltinModule(moduleName));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Determines if an import is a style import based on its file extension
|
|
82
|
+
*/
|
|
83
|
+
function isStyleImport(moduleName, styleExtensions = []) {
|
|
84
|
+
// Handle query parameters
|
|
85
|
+
const [cleanedValue] = moduleName.split('?');
|
|
86
|
+
return styleExtensions.some((extension) => cleanedValue.endsWith(extension));
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Determines if an import is a side effect import (no specifiers)
|
|
90
|
+
*/
|
|
91
|
+
function isSideEffectImport(importDecl) {
|
|
92
|
+
return (!importDecl.defaultImport &&
|
|
93
|
+
!importDecl.namespaceImport &&
|
|
94
|
+
(!importDecl.namedImports || importDecl.namedImports.length === 0));
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Classifies an import into its appropriate sorting group
|
|
98
|
+
*/
|
|
99
|
+
export function getImportSortGroup(importDecl, options = {}) {
|
|
100
|
+
const { moduleSpecifier: source, isTypeOnly } = importDecl;
|
|
101
|
+
const { internalPatterns, styleExtensions, allowedSortGroups } = {
|
|
102
|
+
...DEFAULT_OPTIONS,
|
|
103
|
+
...options,
|
|
104
|
+
};
|
|
105
|
+
let sortGroup;
|
|
106
|
+
// Set the sort group if it hasn't been set yet
|
|
107
|
+
const setGroup = (group) => {
|
|
108
|
+
if (!allowedSortGroups.includes(group))
|
|
109
|
+
return;
|
|
110
|
+
sortGroup = sortGroup ?? group;
|
|
111
|
+
};
|
|
112
|
+
// Check for type-only imports
|
|
113
|
+
if (isTypeOnly) {
|
|
114
|
+
if (isBuiltinModule(source)) {
|
|
115
|
+
setGroup('builtin-type');
|
|
116
|
+
}
|
|
117
|
+
if (isExternalImport(source, internalPatterns)) {
|
|
118
|
+
setGroup('external-type');
|
|
119
|
+
}
|
|
120
|
+
if (isInternalImport(source, internalPatterns)) {
|
|
121
|
+
setGroup('internal-type');
|
|
122
|
+
}
|
|
123
|
+
if (isParentImport(source)) {
|
|
124
|
+
setGroup('parent-type');
|
|
125
|
+
}
|
|
126
|
+
if (isSiblingImport(source)) {
|
|
127
|
+
setGroup('sibling-type');
|
|
128
|
+
}
|
|
129
|
+
if (isIndexImport(source)) {
|
|
130
|
+
setGroup('index-type');
|
|
131
|
+
}
|
|
132
|
+
setGroup('type');
|
|
133
|
+
}
|
|
134
|
+
// Check for side effect imports
|
|
135
|
+
const isSideEffect = isSideEffectImport(importDecl);
|
|
136
|
+
if (isSideEffect) {
|
|
137
|
+
// Check if it's a side effect style import
|
|
138
|
+
if (isStyleImport(source, styleExtensions)) {
|
|
139
|
+
setGroup('side-effect-style');
|
|
140
|
+
}
|
|
141
|
+
setGroup('side-effect');
|
|
142
|
+
}
|
|
143
|
+
// Check for style imports (even if they have named imports)
|
|
144
|
+
if (isStyleImport(source, styleExtensions)) {
|
|
145
|
+
setGroup('style');
|
|
146
|
+
}
|
|
147
|
+
// Regular imports
|
|
148
|
+
if (isIndexImport(source)) {
|
|
149
|
+
setGroup('index');
|
|
150
|
+
}
|
|
151
|
+
if (isSiblingImport(source)) {
|
|
152
|
+
setGroup('sibling');
|
|
153
|
+
}
|
|
154
|
+
if (isParentImport(source)) {
|
|
155
|
+
setGroup('parent');
|
|
156
|
+
}
|
|
157
|
+
if (isBuiltinModule(source)) {
|
|
158
|
+
setGroup('builtin');
|
|
159
|
+
}
|
|
160
|
+
if (isExternalImport(source, internalPatterns)) {
|
|
161
|
+
setGroup('external');
|
|
162
|
+
}
|
|
163
|
+
if (isInternalImport(source, internalPatterns)) {
|
|
164
|
+
setGroup('internal');
|
|
165
|
+
}
|
|
166
|
+
// Default fallback
|
|
167
|
+
return sortGroup ?? 'unknown';
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=get-import-sort-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-import-sort-group.js","sourceRoot":"","sources":["../../../../../src/renderers/typescript/imports/sort-imports/get-import-sort-group.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/renderers/typescript/imports/sort-imports/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/renderers/typescript/imports/sort-imports/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { TsImportDeclaration } from '../types.js';
|
|
2
|
+
import type { ImportSortGroup } from './get-import-sort-group.js';
|
|
3
|
+
/**
|
|
4
|
+
* Configuration options for sorting import declarations
|
|
5
|
+
*/
|
|
6
|
+
export interface SortImportDeclarationsOptions {
|
|
7
|
+
/**
|
|
8
|
+
* Groups to sort imports by. Each inner array represents imports
|
|
9
|
+
* that should be grouped together.
|
|
10
|
+
*/
|
|
11
|
+
groups: readonly (ImportSortGroup | readonly ImportSortGroup[])[];
|
|
12
|
+
/**
|
|
13
|
+
* Whether to ignore case when sorting imports
|
|
14
|
+
*
|
|
15
|
+
* @default true
|
|
16
|
+
*/
|
|
17
|
+
ignoreCase: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Patterns that identify internal modules
|
|
20
|
+
*/
|
|
21
|
+
internalPatterns: RegExp[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Sorts import declarations according to the specified group order,
|
|
25
|
+
* preserving the order of side-effect imports.
|
|
26
|
+
*
|
|
27
|
+
* @param importDeclarations - Array of import declarations to sort
|
|
28
|
+
* @param options - Configuration options for sorting
|
|
29
|
+
* @returns Array of arrays, where each inner array contains imports of the same group
|
|
30
|
+
*/
|
|
31
|
+
export declare function sortImportDeclarations(importDeclarations: TsImportDeclaration[], options?: Partial<SortImportDeclarationsOptions>): TsImportDeclaration[][];
|
|
32
|
+
//# sourceMappingURL=sort-import-declarations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-import-declarations.d.ts","sourceRoot":"","sources":["../../../../../src/renderers/typescript/imports/sort-imports/sort-import-declarations.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAIlE;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,MAAM,EAAE,SAAS,CAAC,eAAe,GAAG,SAAS,eAAe,EAAE,CAAC,EAAE,CAAC;IAClE;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAoBD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,kBAAkB,EAAE,mBAAmB,EAAE,EACzC,OAAO,GAAE,OAAO,CAAC,6BAA6B,CAAM,GACnD,mBAAmB,EAAE,EAAE,CAoEzB"}
|