@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,72 @@
|
|
|
1
|
+
import { mapGroupBy } from '@baseplate-dev/utils';
|
|
2
|
+
import { sortBy } from 'es-toolkit';
|
|
3
|
+
import { getImportSortGroup } from './get-import-sort-group.js';
|
|
4
|
+
/**
|
|
5
|
+
* Default options for sorting import declarations
|
|
6
|
+
*/
|
|
7
|
+
const defaultSortOptions = {
|
|
8
|
+
groups: [
|
|
9
|
+
'type',
|
|
10
|
+
['builtin', 'external'],
|
|
11
|
+
'internal-type',
|
|
12
|
+
'internal',
|
|
13
|
+
['parent-type', 'sibling-type', 'index-type'],
|
|
14
|
+
['parent', 'sibling', 'index'],
|
|
15
|
+
['side-effect', 'side-effect-style'],
|
|
16
|
+
'unknown',
|
|
17
|
+
],
|
|
18
|
+
ignoreCase: true,
|
|
19
|
+
internalPatterns: [],
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Sorts import declarations according to the specified group order,
|
|
23
|
+
* preserving the order of side-effect imports.
|
|
24
|
+
*
|
|
25
|
+
* @param importDeclarations - Array of import declarations to sort
|
|
26
|
+
* @param options - Configuration options for sorting
|
|
27
|
+
* @returns Array of arrays, where each inner array contains imports of the same group
|
|
28
|
+
*/
|
|
29
|
+
export function sortImportDeclarations(importDeclarations, options = {}) {
|
|
30
|
+
// Merge with default options
|
|
31
|
+
const { internalPatterns, groups, ignoreCase, } = {
|
|
32
|
+
...defaultSortOptions,
|
|
33
|
+
...options,
|
|
34
|
+
};
|
|
35
|
+
const allowedSortGroups = groups.flatMap((group) => typeof group === 'string' ? [group] : group);
|
|
36
|
+
const declarationsWithMetadata = importDeclarations.map((importDeclaration) => {
|
|
37
|
+
const sortGroup = getImportSortGroup(importDeclaration, {
|
|
38
|
+
internalPatterns,
|
|
39
|
+
allowedSortGroups,
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
importDeclaration,
|
|
43
|
+
sortGroup,
|
|
44
|
+
isSideEffect: sortGroup === 'side-effect' || sortGroup === 'side-effect-style',
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
const groupedDeclarations = mapGroupBy(declarationsWithMetadata, (declarationWithMetadata) => {
|
|
48
|
+
const { sortGroup } = declarationWithMetadata;
|
|
49
|
+
return groups.findIndex((group) => typeof group === 'string'
|
|
50
|
+
? group === sortGroup
|
|
51
|
+
: group.includes(sortGroup));
|
|
52
|
+
});
|
|
53
|
+
// Create result buckets for each group
|
|
54
|
+
const declarationGroups = [
|
|
55
|
+
...groups.map((_, idx) => groupedDeclarations.get(idx) ?? []),
|
|
56
|
+
groupedDeclarations.get(-1) ?? [],
|
|
57
|
+
].filter((group) => group.length > 0);
|
|
58
|
+
return declarationGroups.map((group) => {
|
|
59
|
+
// Sort non-side-effect imports by source and side-effect imports are left as-is
|
|
60
|
+
const nonSideEffectImports = group.filter((declarationWithMetadata) => !declarationWithMetadata.isSideEffect);
|
|
61
|
+
const sideEffectImports = group.filter((declarationWithMetadata) => declarationWithMetadata.isSideEffect);
|
|
62
|
+
return [
|
|
63
|
+
...sortBy(nonSideEffectImports, [
|
|
64
|
+
(declarationWithMetadata) => ignoreCase
|
|
65
|
+
? declarationWithMetadata.importDeclaration.moduleSpecifier.toLowerCase()
|
|
66
|
+
: declarationWithMetadata.importDeclaration.moduleSpecifier,
|
|
67
|
+
]),
|
|
68
|
+
...sideEffectImports,
|
|
69
|
+
].map((declarationWithMetadata) => declarationWithMetadata.importDeclaration);
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=sort-import-declarations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-import-declarations.js","sourceRoot":"","sources":["../../../../../src/renderers/typescript/imports/sort-imports/sort-import-declarations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type CodeBlockWriter, type ImportDeclaration, type SourceFile } from 'ts-morph';
|
|
2
|
+
import type { TsImportDeclaration } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Get all side effect imports from a source file
|
|
5
|
+
* @param file - The source file to get side effect imports from
|
|
6
|
+
* @returns All side effect imports from the source file
|
|
7
|
+
*/
|
|
8
|
+
export declare function getSideEffectImportsFromSourceFile(file: SourceFile): ImportDeclaration[];
|
|
9
|
+
/**
|
|
10
|
+
* Get all ts-morph import declarations from a source file that are not side effect imports
|
|
11
|
+
* @param file - The source file to get import declarations from
|
|
12
|
+
* @returns All ts-morph import declarations from the source file that are not side effect imports
|
|
13
|
+
*/
|
|
14
|
+
export declare function getTsMorphImportDeclarationsFromSourceFile(file: SourceFile): ImportDeclaration[];
|
|
15
|
+
/**
|
|
16
|
+
* Convert ts-morph import declarations to TsImportDeclaration
|
|
17
|
+
* @param declaration - The import declaration to convert
|
|
18
|
+
* @returns The converted import declaration
|
|
19
|
+
*/
|
|
20
|
+
export declare function convertTsMorphImportDeclarationToTsImportDeclaration(declaration: ImportDeclaration): TsImportDeclaration;
|
|
21
|
+
/**
|
|
22
|
+
* Write import declarations with a CodeBlockWriter
|
|
23
|
+
* @param writer - The CodeBlockWriter to write to
|
|
24
|
+
* @param imports - The import declarations to write grouped by sections
|
|
25
|
+
*/
|
|
26
|
+
export declare function writeGroupedImportDeclarationsWithCodeBlockWriter(writer: CodeBlockWriter, imports: TsImportDeclaration[][]): void;
|
|
27
|
+
/**
|
|
28
|
+
* Replace import declarations in a source file preserving the leading trivia and any
|
|
29
|
+
* directives that may be present.
|
|
30
|
+
*
|
|
31
|
+
* Note: It currently does not handle comments above the first import statement and will
|
|
32
|
+
* push it below the imports.
|
|
33
|
+
*
|
|
34
|
+
* @param sourceFile - The source file to replace import declarations in
|
|
35
|
+
* @param oldImportDeclarations - The old import declarations to replace
|
|
36
|
+
* @param newImportDeclarations - The new import declarations to replace with
|
|
37
|
+
*/
|
|
38
|
+
export declare function replaceImportDeclarationsInSourceFile(sourceFile: SourceFile, oldImportDeclarations: ImportDeclaration[], newImportDeclarations: TsImportDeclaration[][], { beforeImportsWriter, afterImportsWriter, }?: {
|
|
39
|
+
beforeImportsWriter?: (writer: CodeBlockWriter) => void;
|
|
40
|
+
afterImportsWriter?: (writer: CodeBlockWriter) => void;
|
|
41
|
+
}): void;
|
|
42
|
+
//# sourceMappingURL=ts-morph-operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-morph-operations.d.ts","sourceRoot":"","sources":["../../../../src/renderers/typescript/imports/ts-morph-operations.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EAEtB,KAAK,UAAU,EAChB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAWtD;;;;GAIG;AACH,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,UAAU,GACf,iBAAiB,EAAE,CAErB;AAED;;;;GAIG;AACH,wBAAgB,0CAA0C,CACxD,IAAI,EAAE,UAAU,GACf,iBAAiB,EAAE,CAIrB;AAED;;;;GAIG;AACH,wBAAgB,oDAAoD,CAClE,WAAW,EAAE,iBAAiB,GAC7B,mBAAmB,CAYrB;AAkDD;;;;GAIG;AACH,wBAAgB,iDAAiD,CAC/D,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,mBAAmB,EAAE,EAAE,GAC/B,IAAI,CAON;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qCAAqC,CACnD,UAAU,EAAE,UAAU,EACtB,qBAAqB,EAAE,iBAAiB,EAAE,EAC1C,qBAAqB,EAAE,mBAAmB,EAAE,EAAE,EAC9C,EACE,mBAAmB,EACnB,kBAAkB,GACnB,GAAE;IACD,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IACxD,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;CACnD,GACL,IAAI,CAiDN"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { Node, } from 'ts-morph';
|
|
2
|
+
function isSideEffectImport(declaration) {
|
|
3
|
+
return (!declaration.isTypeOnly() &&
|
|
4
|
+
declaration.getNamespaceImport() === undefined &&
|
|
5
|
+
declaration.getDefaultImport() === undefined &&
|
|
6
|
+
declaration.getNamedImports().length === 0);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Get all side effect imports from a source file
|
|
10
|
+
* @param file - The source file to get side effect imports from
|
|
11
|
+
* @returns All side effect imports from the source file
|
|
12
|
+
*/
|
|
13
|
+
export function getSideEffectImportsFromSourceFile(file) {
|
|
14
|
+
return file.getImportDeclarations().filter(isSideEffectImport);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get all ts-morph import declarations from a source file that are not side effect imports
|
|
18
|
+
* @param file - The source file to get import declarations from
|
|
19
|
+
* @returns All ts-morph import declarations from the source file that are not side effect imports
|
|
20
|
+
*/
|
|
21
|
+
export function getTsMorphImportDeclarationsFromSourceFile(file) {
|
|
22
|
+
return file
|
|
23
|
+
.getImportDeclarations()
|
|
24
|
+
.filter((declaration) => !isSideEffectImport(declaration));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Convert ts-morph import declarations to TsImportDeclaration
|
|
28
|
+
* @param declaration - The import declaration to convert
|
|
29
|
+
* @returns The converted import declaration
|
|
30
|
+
*/
|
|
31
|
+
export function convertTsMorphImportDeclarationToTsImportDeclaration(declaration) {
|
|
32
|
+
return {
|
|
33
|
+
moduleSpecifier: declaration.getModuleSpecifier().getLiteralValue(),
|
|
34
|
+
isTypeOnly: declaration.isTypeOnly(),
|
|
35
|
+
namespaceImport: declaration.getNamespaceImport()?.getText(),
|
|
36
|
+
defaultImport: declaration.getDefaultImport()?.getText(),
|
|
37
|
+
namedImports: declaration.getNamedImports().map((namedImport) => ({
|
|
38
|
+
name: namedImport.getName(),
|
|
39
|
+
alias: namedImport.getAliasNode()?.getText(),
|
|
40
|
+
isTypeOnly: namedImport.isTypeOnly(),
|
|
41
|
+
})),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function writeImportDeclaration(writer, importDeclaration) {
|
|
45
|
+
const { namespaceImport, defaultImport, namedImports = [], moduleSpecifier: source, isTypeOnly, } = importDeclaration;
|
|
46
|
+
const hasNamedImports = namedImports.length > 0;
|
|
47
|
+
if (!!namespaceImport && (!!defaultImport || hasNamedImports)) {
|
|
48
|
+
throw new Error('Cannot have an import with both namespace and named/default imports!');
|
|
49
|
+
}
|
|
50
|
+
writer.write('import');
|
|
51
|
+
if (!!namespaceImport || !!defaultImport || hasNamedImports) {
|
|
52
|
+
writer.conditionalWrite(isTypeOnly, ' type');
|
|
53
|
+
if (namespaceImport) {
|
|
54
|
+
writer.write(` * as ${namespaceImport}`);
|
|
55
|
+
}
|
|
56
|
+
if (defaultImport) {
|
|
57
|
+
writer.write(` ${defaultImport}`);
|
|
58
|
+
}
|
|
59
|
+
if (hasNamedImports) {
|
|
60
|
+
writer.conditionalWrite(!!defaultImport, ',');
|
|
61
|
+
// sort named imports
|
|
62
|
+
writer.write(' ');
|
|
63
|
+
writer.write('{');
|
|
64
|
+
for (const [i, namedImport] of namedImports.entries()) {
|
|
65
|
+
writer.conditionalWrite(i !== 0, ',');
|
|
66
|
+
writer.conditionalWrite(namedImport.isTypeOnly, ' type');
|
|
67
|
+
writer.write(` ${namedImport.name}`);
|
|
68
|
+
if (namedImport.alias) {
|
|
69
|
+
writer.write(` as ${namedImport.alias}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
writer.write(' }');
|
|
73
|
+
}
|
|
74
|
+
writer.write(' from');
|
|
75
|
+
}
|
|
76
|
+
writer.write(' ');
|
|
77
|
+
writer.quote(source);
|
|
78
|
+
writer.write(';\n');
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Write import declarations with a CodeBlockWriter
|
|
82
|
+
* @param writer - The CodeBlockWriter to write to
|
|
83
|
+
* @param imports - The import declarations to write grouped by sections
|
|
84
|
+
*/
|
|
85
|
+
export function writeGroupedImportDeclarationsWithCodeBlockWriter(writer, imports) {
|
|
86
|
+
for (const importSection of imports) {
|
|
87
|
+
for (const importDeclaration of importSection) {
|
|
88
|
+
writeImportDeclaration(writer, importDeclaration);
|
|
89
|
+
}
|
|
90
|
+
writer.write('\n');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Replace import declarations in a source file preserving the leading trivia and any
|
|
95
|
+
* directives that may be present.
|
|
96
|
+
*
|
|
97
|
+
* Note: It currently does not handle comments above the first import statement and will
|
|
98
|
+
* push it below the imports.
|
|
99
|
+
*
|
|
100
|
+
* @param sourceFile - The source file to replace import declarations in
|
|
101
|
+
* @param oldImportDeclarations - The old import declarations to replace
|
|
102
|
+
* @param newImportDeclarations - The new import declarations to replace with
|
|
103
|
+
*/
|
|
104
|
+
export function replaceImportDeclarationsInSourceFile(sourceFile, oldImportDeclarations, newImportDeclarations, { beforeImportsWriter, afterImportsWriter, } = {}) {
|
|
105
|
+
const firstLine = sourceFile.getFullText().split('\n').at(0);
|
|
106
|
+
// Get first non-directive node and insert after that node
|
|
107
|
+
const firstNonDirectiveNode = oldImportDeclarations.at(0)?.getFullStart() === 0
|
|
108
|
+
? undefined
|
|
109
|
+
: sourceFile.getStatements().find((node) => {
|
|
110
|
+
// look for things like "use client"
|
|
111
|
+
if (!Node.isExpressionStatement(node))
|
|
112
|
+
return true;
|
|
113
|
+
const children = node.forEachChildAsArray();
|
|
114
|
+
if (children.length !== 1)
|
|
115
|
+
return true;
|
|
116
|
+
const child = children[0];
|
|
117
|
+
return !Node.isStringLiteral(child);
|
|
118
|
+
});
|
|
119
|
+
const insertionPosition = firstNonDirectiveNode?.getNonWhitespaceStart() ?? 0;
|
|
120
|
+
// special case shebang to remove the first line if it's a shebang
|
|
121
|
+
const firstNonDirectiveNodeHasShebang = firstNonDirectiveNode
|
|
122
|
+
?.getFullText()
|
|
123
|
+
.startsWith('#!');
|
|
124
|
+
for (const importDeclaration of oldImportDeclarations) {
|
|
125
|
+
importDeclaration.remove();
|
|
126
|
+
}
|
|
127
|
+
sourceFile.insertText(insertionPosition, (writer) => {
|
|
128
|
+
if (beforeImportsWriter) {
|
|
129
|
+
beforeImportsWriter(writer);
|
|
130
|
+
}
|
|
131
|
+
writeGroupedImportDeclarationsWithCodeBlockWriter(writer, newImportDeclarations);
|
|
132
|
+
if (afterImportsWriter) {
|
|
133
|
+
afterImportsWriter(writer);
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
// and special case handling if the first non directive node has a shebang
|
|
137
|
+
if (firstNonDirectiveNodeHasShebang) {
|
|
138
|
+
sourceFile.replaceWithText(sourceFile.getFullText().replaceAll(`${firstLine}\n`, ''));
|
|
139
|
+
}
|
|
140
|
+
// re-insert the first line if it's a shebang since ts-morph will remove it with the import
|
|
141
|
+
if (firstLine?.startsWith('#!')) {
|
|
142
|
+
sourceFile.insertText(0, `${firstLine}\n\n`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=ts-morph-operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-morph-operations.js","sourceRoot":"","sources":["../../../../src/renderers/typescript/imports/ts-morph-operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { TsPathMapEntry } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generate TsPathMapEntry list from baseUrl and paths.
|
|
4
|
+
*
|
|
5
|
+
* @param baseUrl The base URL of the project
|
|
6
|
+
* @param paths The paths to generate the TsPathMapEntry list from
|
|
7
|
+
* @returns A list of TsPathMapEntry
|
|
8
|
+
*/
|
|
9
|
+
export declare function generatePathMapEntries(baseUrl: string | undefined, paths: Record<string, string[]>): TsPathMapEntry[];
|
|
10
|
+
/**
|
|
11
|
+
* Convert TsPathMapEntry list to regexes matching internal modules.
|
|
12
|
+
* Handles entries with and without a single wildcard '*'.
|
|
13
|
+
*
|
|
14
|
+
* @param entries The TsPathMapEntry list to convert to regexes
|
|
15
|
+
* @returns A list of regexes
|
|
16
|
+
*/
|
|
17
|
+
export declare function pathMapEntriesToRegexes(entries: TsPathMapEntry[]): RegExp[];
|
|
18
|
+
//# sourceMappingURL=ts-path-maps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-path-maps.d.ts","sourceRoot":"","sources":["../../../../src/renderers/typescript/imports/ts-path-maps.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAC9B,cAAc,EAAE,CAYlB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,EAAE,CAQ3E"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { escapeRegExp } from 'es-toolkit';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Generate TsPathMapEntry list from baseUrl and paths.
|
|
5
|
+
*
|
|
6
|
+
* @param baseUrl The base URL of the project
|
|
7
|
+
* @param paths The paths to generate the TsPathMapEntry list from
|
|
8
|
+
* @returns A list of TsPathMapEntry
|
|
9
|
+
*/
|
|
10
|
+
export function generatePathMapEntries(baseUrl, paths) {
|
|
11
|
+
return Object.entries(paths).flatMap(([alias, targets]) => {
|
|
12
|
+
if (targets.length !== 1) {
|
|
13
|
+
throw new Error('We do not support tsconfig paths with multiple values');
|
|
14
|
+
}
|
|
15
|
+
return [
|
|
16
|
+
{
|
|
17
|
+
from: alias,
|
|
18
|
+
to: `./${path.posix.join(baseUrl ?? '.', targets[0]).replaceAll('\\', '/')}`,
|
|
19
|
+
},
|
|
20
|
+
];
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Convert TsPathMapEntry list to regexes matching internal modules.
|
|
25
|
+
* Handles entries with and without a single wildcard '*'.
|
|
26
|
+
*
|
|
27
|
+
* @param entries The TsPathMapEntry list to convert to regexes
|
|
28
|
+
* @returns A list of regexes
|
|
29
|
+
*/
|
|
30
|
+
export function pathMapEntriesToRegexes(entries) {
|
|
31
|
+
return entries.map(({ from }) => {
|
|
32
|
+
if (from.includes('*')) {
|
|
33
|
+
const [prefix, suffix] = from.split('*');
|
|
34
|
+
return new RegExp(`^${escapeRegExp(prefix)}.*${escapeRegExp(suffix)}$`);
|
|
35
|
+
}
|
|
36
|
+
return new RegExp(`^${escapeRegExp(from)}$`);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=ts-path-maps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-path-maps.js","sourceRoot":"","sources":["../../../../src/renderers/typescript/imports/ts-path-maps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAA2B,EAC3B,KAA+B;IAE/B,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE;QACxD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO;YACL;gBACE,IAAI,EAAE,KAAK;gBACX,EAAE,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;aAC7E;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAyB;IAC/D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACzC,OAAO,IAAI,MAAM,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,IAAI,MAAM,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents a named import
|
|
3
|
+
*/
|
|
4
|
+
export interface TsNamedImport {
|
|
5
|
+
/**
|
|
6
|
+
* Name of the import
|
|
7
|
+
*/
|
|
8
|
+
name: string;
|
|
9
|
+
/**
|
|
10
|
+
* Optional alias for the import
|
|
11
|
+
*/
|
|
12
|
+
alias?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Whether the import is a type-only import
|
|
15
|
+
*/
|
|
16
|
+
isTypeOnly?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Represents a single import declaration
|
|
20
|
+
*/
|
|
21
|
+
export interface TsImportDeclaration {
|
|
22
|
+
/**
|
|
23
|
+
* The module specifier for the import
|
|
24
|
+
*/
|
|
25
|
+
moduleSpecifier: string;
|
|
26
|
+
/**
|
|
27
|
+
* Whether the import is a type-only import
|
|
28
|
+
*/
|
|
29
|
+
isTypeOnly?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* The namespace import, e.g. `* as React`
|
|
32
|
+
*/
|
|
33
|
+
namespaceImport?: string;
|
|
34
|
+
/**
|
|
35
|
+
* The default import, e.g. `import React from 'react'`
|
|
36
|
+
*/
|
|
37
|
+
defaultImport?: string;
|
|
38
|
+
/**
|
|
39
|
+
* The named imports, e.g. `import { React } from 'react'`
|
|
40
|
+
*/
|
|
41
|
+
namedImports?: TsNamedImport[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Represents a mapping entry for TypeScript path aliases.
|
|
45
|
+
* Used to convert a path alias to a project directory location with their baseUrl included.
|
|
46
|
+
*
|
|
47
|
+
* Only final * is accepted
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* For tsconfig.json:
|
|
51
|
+
* ```json
|
|
52
|
+
* {
|
|
53
|
+
* "baseUrl": "./src",
|
|
54
|
+
* "paths": {
|
|
55
|
+
* "@src/*": ["./*"]
|
|
56
|
+
* }
|
|
57
|
+
* }
|
|
58
|
+
* ```
|
|
59
|
+
* The corresponding PathMapEntry would be:
|
|
60
|
+
* ```ts
|
|
61
|
+
* {
|
|
62
|
+
* from: "@src/*",
|
|
63
|
+
* to: "./src/*"
|
|
64
|
+
* }
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export interface TsPathMapEntry {
|
|
68
|
+
/** The alias to map from (e.g. "@src/*") */
|
|
69
|
+
from: string;
|
|
70
|
+
/** The project relative path to map to (e.g. "./src/app/*") */
|
|
71
|
+
to: string;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/renderers/typescript/imports/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IACxB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,YAAY,CAAC,EAAE,aAAa,EAAE,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,EAAE,EAAE,MAAM,CAAC;CACZ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/renderers/typescript/imports/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './actions/index.js';
|
|
2
|
+
export * from './extractor/index.js';
|
|
3
|
+
export * from './fragments/index.js';
|
|
4
|
+
export * from './import-maps/index.js';
|
|
5
|
+
export * from './imports/index.js';
|
|
6
|
+
export * from './renderers/index.js';
|
|
7
|
+
export * from './templates/index.js';
|
|
8
|
+
export * from './utils/index.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/renderers/typescript/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './actions/index.js';
|
|
2
|
+
export * from './extractor/index.js';
|
|
3
|
+
export * from './fragments/index.js';
|
|
4
|
+
export * from './import-maps/index.js';
|
|
5
|
+
export * from './imports/index.js';
|
|
6
|
+
export * from './renderers/index.js';
|
|
7
|
+
export * from './templates/index.js';
|
|
8
|
+
export * from './utils/index.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/renderers/typescript/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { TsPositionedHoistedFragment } from '../fragments/types.js';
|
|
2
|
+
import type { SortImportDeclarationsOptions } from '../imports/index.js';
|
|
3
|
+
import type { TsTemplateFileVariableValue } from '../templates/types.js';
|
|
4
|
+
import type { RenderTsTemplateOptions } from './template.js';
|
|
5
|
+
export interface RenderTsCodeFileTemplateOptions extends RenderTsTemplateOptions {
|
|
6
|
+
importSortOptions?: Partial<SortImportDeclarationsOptions>;
|
|
7
|
+
resolveModule?: (moduleSpecifier: string) => string;
|
|
8
|
+
}
|
|
9
|
+
interface RenderTsCodeFileTemplateInput {
|
|
10
|
+
templateContents: string;
|
|
11
|
+
variables?: Record<string, TsTemplateFileVariableValue>;
|
|
12
|
+
importMapProviders?: Record<string, unknown>;
|
|
13
|
+
positionedHoistedFragments?: TsPositionedHoistedFragment[];
|
|
14
|
+
options?: RenderTsCodeFileTemplateOptions;
|
|
15
|
+
}
|
|
16
|
+
export declare function renderTsCodeFileTemplate({ templateContents, variables, importMapProviders, positionedHoistedFragments, options, }: RenderTsCodeFileTemplateInput): string;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../../src/renderers/typescript/renderers/file.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,2BAA2B,EAC5B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAEzE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAa7D,MAAM,WAAW,+BACf,SAAQ,uBAAuB;IAC/B,iBAAiB,CAAC,EAAE,OAAO,CAAC,6BAA6B,CAAC,CAAC;IAC3D,aAAa,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,MAAM,CAAC;CACrD;AAgHD,UAAU,6BAA6B;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;IACxD,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,0BAA0B,CAAC,EAAE,2BAA2B,EAAE,CAAC;IAC3D,OAAO,CAAC,EAAE,+BAA+B,CAAC;CAC3C;AAED,wBAAgB,wBAAwB,CAAC,EACvC,gBAAgB,EAChB,SAAc,EACd,kBAAuB,EACvB,0BAA+B,EAC/B,OAAY,GACb,EAAE,6BAA6B,GAAG,MAAM,CAkCxC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { Project } from 'ts-morph';
|
|
2
|
+
import { transformTsImportsWithMap } from '../import-maps/transform-ts-imports-with-map.js';
|
|
3
|
+
import { sortImportDeclarations } from '../imports/index.js';
|
|
4
|
+
import { mergeTsImportDeclarations } from '../imports/merge-ts-import-declarations.js';
|
|
5
|
+
import { convertTsMorphImportDeclarationToTsImportDeclaration, getSideEffectImportsFromSourceFile, getTsMorphImportDeclarationsFromSourceFile, replaceImportDeclarationsInSourceFile, } from '../imports/ts-morph-operations.js';
|
|
6
|
+
import { renderTsTemplateToTsCodeFragment } from './template.js';
|
|
7
|
+
function mergeImportsAndHoistedFragments(file, imports, hoistedFragments, importMaps, positionedHoistedFragments, { resolveModule, importSortOptions, includeMetadata, }) {
|
|
8
|
+
// Get the import declarations from the source file
|
|
9
|
+
const importDeclarationsFromFile = getTsMorphImportDeclarationsFromSourceFile(file);
|
|
10
|
+
// Convert the import declarations to TsImportDeclaration
|
|
11
|
+
const tsImportDeclarations = [
|
|
12
|
+
...transformTsImportsWithMap(importDeclarationsFromFile.map(convertTsMorphImportDeclarationToTsImportDeclaration), importMaps),
|
|
13
|
+
...imports,
|
|
14
|
+
];
|
|
15
|
+
const normalizedTsImportDeclarations = tsImportDeclarations.map((declaration) => ({
|
|
16
|
+
...declaration,
|
|
17
|
+
moduleSpecifier: resolveModule
|
|
18
|
+
? resolveModule(declaration.moduleSpecifier)
|
|
19
|
+
: declaration.moduleSpecifier,
|
|
20
|
+
}));
|
|
21
|
+
// Sort and group the import declarations
|
|
22
|
+
const groupedImportDeclarations = sortImportDeclarations(mergeTsImportDeclarations(normalizedTsImportDeclarations), importSortOptions);
|
|
23
|
+
// Combine the hoisted fragments with the positioned hoisted fragments
|
|
24
|
+
// Note: Positioned hoisted fragments are currently limited in their functionality
|
|
25
|
+
// such as not supporting hoisted fragments and no deduplication of keys.
|
|
26
|
+
// This can be improved in the future but since the use-case is very limited,
|
|
27
|
+
// we'll just throw an error if this happens.
|
|
28
|
+
const sortedPositionedHoistedFragments = positionedHoistedFragments.sort((a, b) => a.key.localeCompare(b.key));
|
|
29
|
+
if (new Set(sortedPositionedHoistedFragments.map((f) => f.key)).size !==
|
|
30
|
+
sortedPositionedHoistedFragments.length) {
|
|
31
|
+
throw new Error('Positioned hoisted fragments must have unique keys');
|
|
32
|
+
}
|
|
33
|
+
const afterImportsHoistedFragments = [
|
|
34
|
+
...hoistedFragments,
|
|
35
|
+
...sortedPositionedHoistedFragments.filter((f) => f.position === 'afterImports'),
|
|
36
|
+
];
|
|
37
|
+
const beforeImportsHoistedFragments = sortedPositionedHoistedFragments.filter((f) => f.position === 'beforeImports');
|
|
38
|
+
function writeHoistedFragments(writer, fragments) {
|
|
39
|
+
for (const h of fragments) {
|
|
40
|
+
if (includeMetadata) {
|
|
41
|
+
writer.writeLine(`/* HOISTED:${h.key}:START */`);
|
|
42
|
+
}
|
|
43
|
+
writer.writeLine(h.contents);
|
|
44
|
+
if (includeMetadata) {
|
|
45
|
+
writer.writeLine(`/* HOISTED:${h.key}:END */`);
|
|
46
|
+
}
|
|
47
|
+
writer.writeLine('');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
replaceImportDeclarationsInSourceFile(file, importDeclarationsFromFile, groupedImportDeclarations, {
|
|
51
|
+
beforeImportsWriter: (writer) => {
|
|
52
|
+
writeHoistedFragments(writer, beforeImportsHoistedFragments);
|
|
53
|
+
},
|
|
54
|
+
afterImportsWriter: (writer) => {
|
|
55
|
+
writeHoistedFragments(writer, afterImportsHoistedFragments);
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
// Resolve any side effect imports if necessary
|
|
59
|
+
if (resolveModule) {
|
|
60
|
+
const sideEffectImports = getSideEffectImportsFromSourceFile(file);
|
|
61
|
+
for (const importDeclaration of sideEffectImports) {
|
|
62
|
+
const moduleSpecifier = importDeclaration
|
|
63
|
+
.getModuleSpecifier()
|
|
64
|
+
.getLiteralValue();
|
|
65
|
+
const resolvedModuleSpecifier = resolveModule(moduleSpecifier);
|
|
66
|
+
importDeclaration.setModuleSpecifier(resolvedModuleSpecifier);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export function renderTsCodeFileTemplate({ templateContents, variables = {}, importMapProviders = {}, positionedHoistedFragments = [], options = {}, }) {
|
|
71
|
+
// Render the template into a code fragment
|
|
72
|
+
const { contents, imports, hoistedFragments } = renderTsTemplateToTsCodeFragment(templateContents, variables, {
|
|
73
|
+
prefix: options.prefix,
|
|
74
|
+
...options,
|
|
75
|
+
});
|
|
76
|
+
if (!imports?.length &&
|
|
77
|
+
!hoistedFragments?.length &&
|
|
78
|
+
Object.keys(importMapProviders).length === 0 &&
|
|
79
|
+
!/^import\s+/gm.test(contents)) {
|
|
80
|
+
return contents;
|
|
81
|
+
}
|
|
82
|
+
// Create a ts-morph project and source file
|
|
83
|
+
const project = new Project({
|
|
84
|
+
useInMemoryFileSystem: true,
|
|
85
|
+
});
|
|
86
|
+
const file = project.createSourceFile('./file.ts', contents);
|
|
87
|
+
// Merge in imports and hoisted fragments
|
|
88
|
+
mergeImportsAndHoistedFragments(file, imports ?? [], hoistedFragments ?? [], new Map(Object.entries(importMapProviders)), positionedHoistedFragments, options);
|
|
89
|
+
return file.getFullText();
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../../../src/renderers/typescript/renderers/file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/renderers/typescript/renderers/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/renderers/typescript/renderers/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { TsCodeFragment } from '../fragments/types.js';
|
|
2
|
+
import type { TsTemplateFileVariableValue } from '../templates/types.js';
|
|
3
|
+
export interface RenderTsTemplateOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Whether to include metadata in the rendered template to allow reverse generation.
|
|
6
|
+
*/
|
|
7
|
+
includeMetadata?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* The prefix to use for the template variables.
|
|
10
|
+
*/
|
|
11
|
+
prefix?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Render a template to a code fragment.
|
|
15
|
+
* @param template - The template to render.
|
|
16
|
+
* @param variables - The variables to render the template with.
|
|
17
|
+
* @param options - The options for the render.
|
|
18
|
+
* @returns The rendered code fragment.
|
|
19
|
+
*/
|
|
20
|
+
export declare function renderTsTemplateToTsCodeFragment(template: string, variables: Record<string, TsTemplateFileVariableValue>, options?: RenderTsTemplateOptions): TsCodeFragment;
|
|
21
|
+
//# sourceMappingURL=template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../../src/renderers/typescript/renderers/template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAIzE,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAcD;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,EACtD,OAAO,GAAE,uBAA4B,GACpC,cAAc,CAsLhB"}
|