@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,175 @@
|
|
|
1
|
+
import { isBuiltin } from 'node:module';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { Node, Project, SyntaxKind } from 'ts-morph';
|
|
4
|
+
import { mergeTsImportDeclarations } from '../imports/merge-ts-import-declarations.js';
|
|
5
|
+
import { sortImportDeclarations } from '../imports/sort-imports/sort-import-declarations.js';
|
|
6
|
+
import { getTsMorphImportDeclarationsFromSourceFile, replaceImportDeclarationsInSourceFile, } from '../imports/ts-morph-operations.js';
|
|
7
|
+
/**
|
|
8
|
+
* Collects all Identifier names from a SourceFile,
|
|
9
|
+
* skipping nodes within ImportDeclaration structures.
|
|
10
|
+
*/
|
|
11
|
+
function collectUsedIdentifierNames(sourceFile) {
|
|
12
|
+
const usedIdentifiers = new Set();
|
|
13
|
+
sourceFile.forEachDescendant((node, traversal) => {
|
|
14
|
+
if (node.isKind(SyntaxKind.ImportDeclaration)) {
|
|
15
|
+
traversal.skip();
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (Node.isIdentifier(node)) {
|
|
19
|
+
usedIdentifiers.add(node.getText());
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
return usedIdentifiers;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Organizes the imports in a Typescript template file.
|
|
26
|
+
* - Removes unused imports
|
|
27
|
+
* - Replaces import declarations with new import declarations in the projectExportMap
|
|
28
|
+
* - Sorts the imports
|
|
29
|
+
* - Writes the imports to the file
|
|
30
|
+
*
|
|
31
|
+
* @param filePath - The path to the file to organize
|
|
32
|
+
* @param contents - The contents of the file to organize
|
|
33
|
+
* @param context - The context for the template import lookup
|
|
34
|
+
* @returns The organized contents of the file
|
|
35
|
+
*/
|
|
36
|
+
export async function organizeTsTemplateImports(filePath, contents, { projectExportMap, generatorFiles, resolver, projectRoot, }) {
|
|
37
|
+
const project = new Project({ useInMemoryFileSystem: true });
|
|
38
|
+
const sourceFile = project.createSourceFile(filePath, contents);
|
|
39
|
+
// Replace import declarations with new import declarations
|
|
40
|
+
const importDeclarations = getTsMorphImportDeclarationsFromSourceFile(sourceFile);
|
|
41
|
+
// Filter out import declarations that are not used
|
|
42
|
+
// Note: This is a rudimentary implementation that has a known issue
|
|
43
|
+
// where it will incorrectly identify a used import if the identifier
|
|
44
|
+
// has been declared in a different scope, e.g.
|
|
45
|
+
// import { foo } from './foo';
|
|
46
|
+
// const foo = 'foo';
|
|
47
|
+
//
|
|
48
|
+
// In this case, the import { foo } is incorrectly identified as used.
|
|
49
|
+
// The proper way is to check if the identifier has been used. However,
|
|
50
|
+
// this comes with a significant performance penalty so we should only use
|
|
51
|
+
// this if we can't use collectUsedIdentifierNames.
|
|
52
|
+
const usedIdentifierNames = collectUsedIdentifierNames(sourceFile);
|
|
53
|
+
const isNodeUsed = (node) => {
|
|
54
|
+
if (!node) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
const name = (Node.isImportSpecifier(node)
|
|
58
|
+
? node.getAliasNode()?.getText()
|
|
59
|
+
: undefined) ?? node.getText();
|
|
60
|
+
return usedIdentifierNames.has(name);
|
|
61
|
+
};
|
|
62
|
+
const tsImportDeclarations = importDeclarations
|
|
63
|
+
.map((declaration) => {
|
|
64
|
+
const namespaceImport = declaration.getNamespaceImport();
|
|
65
|
+
const defaultImport = declaration.getDefaultImport();
|
|
66
|
+
return {
|
|
67
|
+
moduleSpecifier: declaration.getModuleSpecifier().getLiteralValue(),
|
|
68
|
+
isTypeOnly: declaration.isTypeOnly(),
|
|
69
|
+
namespaceImport: isNodeUsed(namespaceImport)
|
|
70
|
+
? namespaceImport.getText()
|
|
71
|
+
: undefined,
|
|
72
|
+
defaultImport: isNodeUsed(defaultImport)
|
|
73
|
+
? defaultImport.getText()
|
|
74
|
+
: undefined,
|
|
75
|
+
namedImports: declaration
|
|
76
|
+
.getNamedImports()
|
|
77
|
+
.filter((namedImport) => isNodeUsed(namedImport))
|
|
78
|
+
.map((namedImport) => ({
|
|
79
|
+
name: namedImport.getName(),
|
|
80
|
+
alias: namedImport.getAliasNode()?.getText(),
|
|
81
|
+
isTypeOnly: namedImport.isTypeOnly(),
|
|
82
|
+
})),
|
|
83
|
+
};
|
|
84
|
+
})
|
|
85
|
+
.filter((importDeclaration) => importDeclaration.defaultImport ??
|
|
86
|
+
importDeclaration.namespaceImport ??
|
|
87
|
+
importDeclaration.namedImports.length > 0);
|
|
88
|
+
const usedProjectExports = [];
|
|
89
|
+
const updatedImportDeclarations = await Promise.all(tsImportDeclarations.map(async (importDeclaration) => {
|
|
90
|
+
const { moduleSpecifier } = importDeclaration;
|
|
91
|
+
if (isBuiltin(moduleSpecifier)) {
|
|
92
|
+
return [importDeclaration];
|
|
93
|
+
}
|
|
94
|
+
// TODO: A bit of a hack but no easy fix in the short term
|
|
95
|
+
// Don't modify imports for ws since we install only the types
|
|
96
|
+
// but not the implementation
|
|
97
|
+
if (moduleSpecifier === 'ws') {
|
|
98
|
+
return [importDeclaration];
|
|
99
|
+
}
|
|
100
|
+
const resolutionResult = await resolver.async(path.dirname(filePath), moduleSpecifier);
|
|
101
|
+
if (!resolutionResult.path) {
|
|
102
|
+
throw new Error(`Could not resolve import ${moduleSpecifier} in ${filePath}: ${String(resolutionResult.error)}`);
|
|
103
|
+
}
|
|
104
|
+
const resolvedPath = resolutionResult.path;
|
|
105
|
+
// Don't modify external imports outside the project root
|
|
106
|
+
if (!resolvedPath.startsWith(projectRoot)) {
|
|
107
|
+
return [importDeclaration];
|
|
108
|
+
}
|
|
109
|
+
// Don't modify imports for files in the generator
|
|
110
|
+
if (generatorFiles.includes(resolvedPath)) {
|
|
111
|
+
const relativeImportPath = path
|
|
112
|
+
.relative(path.dirname(filePath), resolvedPath)
|
|
113
|
+
.replace(/\.(t|j)sx?$/, '.js');
|
|
114
|
+
const fixedImportDeclaration = {
|
|
115
|
+
...importDeclaration,
|
|
116
|
+
// convert to relative path
|
|
117
|
+
moduleSpecifier: relativeImportPath.startsWith('.')
|
|
118
|
+
? relativeImportPath
|
|
119
|
+
: `./${relativeImportPath}`,
|
|
120
|
+
};
|
|
121
|
+
return [fixedImportDeclaration];
|
|
122
|
+
}
|
|
123
|
+
if (importDeclaration.namespaceImport) {
|
|
124
|
+
throw new Error(`Import ${moduleSpecifier} in ${filePath} cannot be a namespace import since it are not supported currently
|
|
125
|
+
for template extraction.`);
|
|
126
|
+
}
|
|
127
|
+
// look up the corresponding import in the project exports
|
|
128
|
+
const pathExports = projectExportMap.get(resolvedPath);
|
|
129
|
+
if (!pathExports) {
|
|
130
|
+
throw new Error(`Import ${resolvedPath} in ${filePath} is not found in the project exports.`);
|
|
131
|
+
}
|
|
132
|
+
const importDeclarations = [];
|
|
133
|
+
const { defaultImport } = importDeclaration;
|
|
134
|
+
if (defaultImport) {
|
|
135
|
+
const projectExport = pathExports.get('default') ?? pathExports.get('*');
|
|
136
|
+
if (!projectExport) {
|
|
137
|
+
throw new Error(`Default import from ${moduleSpecifier} in ${filePath} is not found in the project exports.`);
|
|
138
|
+
}
|
|
139
|
+
if (projectExport.isTypeOnly && !importDeclaration.isTypeOnly) {
|
|
140
|
+
throw new Error(`Default import from ${moduleSpecifier} in ${filePath} is not a type only import but the project export is a type only import.`);
|
|
141
|
+
}
|
|
142
|
+
usedProjectExports.push(projectExport);
|
|
143
|
+
importDeclarations.push({
|
|
144
|
+
namedImports: [{ name: projectExport.name }],
|
|
145
|
+
moduleSpecifier: projectExport.importSource,
|
|
146
|
+
isTypeOnly: projectExport.isTypeOnly,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
importDeclarations.push(...importDeclaration.namedImports.map((namedImport) => {
|
|
150
|
+
const projectExport = pathExports.get(namedImport.name) ?? pathExports.get('*');
|
|
151
|
+
if (!projectExport) {
|
|
152
|
+
throw new Error(`Import ${namedImport.name} from ${moduleSpecifier} in ${filePath} is not found in the project exports.`);
|
|
153
|
+
}
|
|
154
|
+
const isTypeOnly = !!importDeclaration.isTypeOnly || !!namedImport.isTypeOnly;
|
|
155
|
+
if (!isTypeOnly && projectExport.isTypeOnly) {
|
|
156
|
+
throw new Error(`Import ${namedImport.name} from ${moduleSpecifier} in ${filePath} is not a type only import but the project export is a type only import.`);
|
|
157
|
+
}
|
|
158
|
+
usedProjectExports.push(projectExport);
|
|
159
|
+
return {
|
|
160
|
+
namedImports: [namedImport],
|
|
161
|
+
moduleSpecifier: projectExport.importSource,
|
|
162
|
+
isTypeOnly,
|
|
163
|
+
};
|
|
164
|
+
}));
|
|
165
|
+
return importDeclarations;
|
|
166
|
+
}));
|
|
167
|
+
const mergedImportDeclarations = mergeTsImportDeclarations(updatedImportDeclarations.flat());
|
|
168
|
+
const sortedImportDeclarations = sortImportDeclarations(mergedImportDeclarations, {});
|
|
169
|
+
replaceImportDeclarationsInSourceFile(sourceFile, importDeclarations, sortedImportDeclarations);
|
|
170
|
+
return {
|
|
171
|
+
contents: sourceFile.getFullText(),
|
|
172
|
+
usedProjectExports,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=organize-ts-template-imports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organize-ts-template-imports.js","sourceRoot":"","sources":["../../../../src/renderers/typescript/extractor/organize-ts-template-imports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PREPROCESSING HACK: Adjusts code string before template extraction
|
|
3
|
+
* to handle specific Prettier formatting quirks where comment markers
|
|
4
|
+
* are moved outside parentheses.
|
|
5
|
+
*
|
|
6
|
+
* Pattern 1: identifier /* TPL_VAR:START *\/ ( => identifier(/* TPL_VAR:START *\/
|
|
7
|
+
* Pattern 2: ) /* TPL_VAR:END *\/ => /* TPL_VAR:END *\/)
|
|
8
|
+
* Pattern 3: ,[whitespace]/* TPL_VAR:END *\/ => /* TPL_VAR:END *\/,[whitespace]
|
|
9
|
+
*
|
|
10
|
+
* WARNING: This is a temporary workaround and might be fragile.
|
|
11
|
+
* It assumes specific formatting outputs from Prettier.
|
|
12
|
+
*
|
|
13
|
+
* @param code The code string to preprocess.
|
|
14
|
+
* @returns The transformed code string.
|
|
15
|
+
*/
|
|
16
|
+
export declare function preprocessCodeForExtractionHack(code: string): string;
|
|
17
|
+
//# sourceMappingURL=preprocess-code-for-extraction-hack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preprocess-code-for-extraction-hack.d.ts","sourceRoot":"","sources":["../../../../src/renderers/typescript/extractor/preprocess-code-for-extraction-hack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0CpE"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PREPROCESSING HACK: Adjusts code string before template extraction
|
|
3
|
+
* to handle specific Prettier formatting quirks where comment markers
|
|
4
|
+
* are moved outside parentheses.
|
|
5
|
+
*
|
|
6
|
+
* Pattern 1: identifier /* TPL_VAR:START *\/ ( => identifier(/* TPL_VAR:START *\/
|
|
7
|
+
* Pattern 2: ) /* TPL_VAR:END *\/ => /* TPL_VAR:END *\/)
|
|
8
|
+
* Pattern 3: ,[whitespace]/* TPL_VAR:END *\/ => /* TPL_VAR:END *\/,[whitespace]
|
|
9
|
+
*
|
|
10
|
+
* WARNING: This is a temporary workaround and might be fragile.
|
|
11
|
+
* It assumes specific formatting outputs from Prettier.
|
|
12
|
+
*
|
|
13
|
+
* @param code The code string to preprocess.
|
|
14
|
+
* @returns The transformed code string.
|
|
15
|
+
*/
|
|
16
|
+
export function preprocessCodeForExtractionHack(code) {
|
|
17
|
+
let transformedCode = code;
|
|
18
|
+
// --- Pattern 1: Move START marker inside the opening parenthesis ---
|
|
19
|
+
// Addresses Prettier moving the START marker *before* the opening parenthesis.
|
|
20
|
+
// Example `Before`: myFunction /* TPL_ARGS:START */ (arg1, arg2)
|
|
21
|
+
// Example `After`: myFunction(/* TPL_ARGS:START */ arg1, arg2)
|
|
22
|
+
const startMarkerRegex = /(\w+)\s*(\/\* (TPL_[A-Z0-9_]+):START \*\/)\s*\(/g;
|
|
23
|
+
transformedCode = transformedCode.replaceAll(startMarkerRegex, (match, identifier, startMarkerComment) =>
|
|
24
|
+
// Replace with: identifier, opening parenthesis, the START comment
|
|
25
|
+
`${identifier}(${startMarkerComment}`);
|
|
26
|
+
// --- Pattern 2: Move END marker before the opening parenthesis ---
|
|
27
|
+
// Addresses cases where the END marker might appear *after* the opening parenthesis,
|
|
28
|
+
// potentially separated by whitespace.
|
|
29
|
+
// Example `Before`: ( /* TPL_ARGS:END */ arg1, arg2)
|
|
30
|
+
// Example `After`: /* TPL_ARGS:END */ (arg1, arg2)
|
|
31
|
+
const endMarkerRegex = /\(\s*(\/\* (TPL_[A-Z0-9_]+):END \*\/)/g;
|
|
32
|
+
transformedCode = transformedCode.replaceAll(endMarkerRegex, (match, endMarkerComment) =>
|
|
33
|
+
// Replace with: the END comment, opening parenthesis
|
|
34
|
+
`${endMarkerComment}(`);
|
|
35
|
+
// --- Pattern 3: Move END marker before comma ---
|
|
36
|
+
// Addresses cases where the END marker appears after a comma, potentially
|
|
37
|
+
// separated by whitespace (including a single newline).
|
|
38
|
+
// Example `Before`: arg1, /* TPL_ARGS:END */ arg2
|
|
39
|
+
// Example `After`: arg1 /* TPL_ARGS:END */, arg2
|
|
40
|
+
const commaEndMarkerRegex = /,(\s*)(\/\* (TPL_[A-Z0-9_]+):END \*\/)/g;
|
|
41
|
+
transformedCode = transformedCode.replaceAll(commaEndMarkerRegex, (match, whitespace, endMarkerComment) =>
|
|
42
|
+
// Replace with: the END comment, comma
|
|
43
|
+
`${endMarkerComment},${whitespace}`);
|
|
44
|
+
return transformedCode;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=preprocess-code-for-extraction-hack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preprocess-code-for-extraction-hack.js","sourceRoot":"","sources":["../../../../src/renderers/typescript/extractor/preprocess-code-for-extraction-hack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,+BAA+B,CAAC,IAAY;IAC1D,IAAI,eAAe,GAAG,IAAI,CAAC;IAE3B,sEAAsE;IACtE,+EAA+E;IAC/E,iEAAiE;IACjE,gEAAgE;IAChE,MAAM,gBAAgB,GAAG,kDAAkD,CAAC;IAC5E,eAAe,GAAG,eAAe,CAAC,UAAU,CAC1C,gBAAgB,EAChB,CAAC,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,EAAE;IACxC,mEAAmE;IACnE,GAAG,UAAU,IAAI,kBAAkB,EAAE,CACxC,CAAC;IAEF,oEAAoE;IACpE,qFAAqF;IACrF,uCAAuC;IACvC,qDAAqD;IACrD,oDAAoD;IACpD,MAAM,cAAc,GAAG,wCAAwC,CAAC;IAChE,eAAe,GAAG,eAAe,CAAC,UAAU,CAC1C,cAAc,EACd,CAAC,KAAK,EAAE,gBAAgB,EAAE,EAAE;IAC1B,qDAAqD;IACrD,GAAG,gBAAgB,GAAG,CACzB,CAAC;IAEF,kDAAkD;IAClD,0EAA0E;IAC1E,wDAAwD;IACxD,kDAAkD;IAClD,kDAAkD;IAClD,MAAM,mBAAmB,GAAG,yCAAyC,CAAC;IACtE,eAAe,GAAG,eAAe,CAAC,UAAU,CAC1C,mBAAmB,EACnB,CAAC,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE;IACtC,uCAAuC;IACvC,GAAG,gBAAgB,IAAI,UAAU,EAAE,CACtC,CAAC;IAEF,OAAO,eAAe,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const IMPORTS_FILE_TEMPLATE = "\nimport { createReadOnlyProviderType } from '@baseplate-dev/sync';\n\nimport type { TsImportMapProviderFromSchema } from 'TPL_TS_IMPORTS';\n\nimport {\n createTsImportMap,\n createTsImportMapSchema,\n} from 'TPL_TS_IMPORTS';\n\nconst TPL_IMPORTS_SCHEMA_VAR =\n createTsImportMapSchema(TPL_IMPORTS_SCHEMA);\n\ntype TPL_IMPORTS_PROVIDER_TYPE_VAR = TsImportMapProviderFromSchema<\n typeof TPL_IMPORTS_SCHEMA_VAR\n>;\n\nexport const TPL_IMPORTS_PROVIDER_VAR =\n createReadOnlyProviderType<TPL_IMPORTS_PROVIDER_TYPE_VAR>(\n 'TPL_PROVIDER_NAME',\n );\n\nexport function TPL_CREATE_IMPORT_MAP_FUNCTION(\n importBase: string,\n): TPL_IMPORTS_PROVIDER_TYPE_VAR {\n if (!importBase.startsWith('@/')) {\n throw new Error('importBase must start with @/');\n }\n\n return createTsImportMap(\n TPL_IMPORTS_SCHEMA_VAR,\n TPL_IMPORT_MAP_CREATOR,\n );\n}";
|
|
2
|
+
//# sourceMappingURL=imports-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imports-file.d.ts","sourceRoot":"","sources":["../../../../../src/renderers/typescript/extractor/templates/imports-file.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,k2BAiChC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export const IMPORTS_FILE_TEMPLATE = `
|
|
2
|
+
import { createReadOnlyProviderType } from '@baseplate-dev/sync';
|
|
3
|
+
|
|
4
|
+
import type { TsImportMapProviderFromSchema } from 'TPL_TS_IMPORTS';
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
createTsImportMap,
|
|
8
|
+
createTsImportMapSchema,
|
|
9
|
+
} from 'TPL_TS_IMPORTS';
|
|
10
|
+
|
|
11
|
+
const TPL_IMPORTS_SCHEMA_VAR =
|
|
12
|
+
createTsImportMapSchema(TPL_IMPORTS_SCHEMA);
|
|
13
|
+
|
|
14
|
+
type TPL_IMPORTS_PROVIDER_TYPE_VAR = TsImportMapProviderFromSchema<
|
|
15
|
+
typeof TPL_IMPORTS_SCHEMA_VAR
|
|
16
|
+
>;
|
|
17
|
+
|
|
18
|
+
export const TPL_IMPORTS_PROVIDER_VAR =
|
|
19
|
+
createReadOnlyProviderType<TPL_IMPORTS_PROVIDER_TYPE_VAR>(
|
|
20
|
+
'TPL_PROVIDER_NAME',
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
export function TPL_CREATE_IMPORT_MAP_FUNCTION(
|
|
24
|
+
importBase: string,
|
|
25
|
+
): TPL_IMPORTS_PROVIDER_TYPE_VAR {
|
|
26
|
+
if (!importBase.startsWith('@/')) {
|
|
27
|
+
throw new Error('importBase must start with @/');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return createTsImportMap(
|
|
31
|
+
TPL_IMPORTS_SCHEMA_VAR,
|
|
32
|
+
TPL_IMPORT_MAP_CREATOR,
|
|
33
|
+
);
|
|
34
|
+
}`;
|
|
35
|
+
//# sourceMappingURL=imports-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imports-file.js","sourceRoot":"","sources":["../../../../../src/renderers/typescript/extractor/templates/imports-file.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCnC,CAAC"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import type { TemplateFileExtractorContext, TemplateFileExtractorFile } from '@baseplate-dev/sync';
|
|
2
|
+
import { TemplateFileExtractor } from '@baseplate-dev/sync';
|
|
3
|
+
import { ResolverFactory } from 'oxc-resolver';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import type { TsCodeFragment } from '../fragments/types.js';
|
|
6
|
+
import type { TsTemplateFileMetadata } from '../templates/types.js';
|
|
7
|
+
import type { ProjectExportLookupMap, TsTemplateImportLookupContext } from './organize-ts-template-imports.js';
|
|
8
|
+
import type { TsProjectExport } from './write-ts-project-exports.js';
|
|
9
|
+
import { tsTemplateFileMetadataSchema } from '../templates/types.js';
|
|
10
|
+
interface TypescriptCodeEntry {
|
|
11
|
+
codeBlock: TsCodeFragment;
|
|
12
|
+
exportName: string;
|
|
13
|
+
}
|
|
14
|
+
declare const generatorOptionsSchema: z.ZodObject<{
|
|
15
|
+
/**
|
|
16
|
+
* A map of export group names to export group configuration.
|
|
17
|
+
*
|
|
18
|
+
* To refer to the default export group name, use an empty string.
|
|
19
|
+
*/
|
|
20
|
+
exportGroups: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
21
|
+
/**
|
|
22
|
+
* Whether to export the provider type.
|
|
23
|
+
*/
|
|
24
|
+
exportProviderType: z.ZodOptional<z.ZodBoolean>;
|
|
25
|
+
/**
|
|
26
|
+
* The existing imports provider to use.
|
|
27
|
+
*/
|
|
28
|
+
existingImportsProvider: z.ZodOptional<z.ZodObject<{
|
|
29
|
+
/**
|
|
30
|
+
* The module specifier of the existing imports provider.
|
|
31
|
+
*
|
|
32
|
+
* Can be a relative path with @/ or a package name.
|
|
33
|
+
*/
|
|
34
|
+
moduleSpecifier: z.ZodString;
|
|
35
|
+
/**
|
|
36
|
+
* The name of the import schema export.
|
|
37
|
+
*/
|
|
38
|
+
importSchemaName: z.ZodString;
|
|
39
|
+
/**
|
|
40
|
+
* The name of the provider type export.
|
|
41
|
+
*/
|
|
42
|
+
providerTypeName: z.ZodString;
|
|
43
|
+
/**
|
|
44
|
+
* The name of the provider export.
|
|
45
|
+
*/
|
|
46
|
+
providerName: z.ZodString;
|
|
47
|
+
}, "strip", z.ZodTypeAny, {
|
|
48
|
+
moduleSpecifier: string;
|
|
49
|
+
importSchemaName: string;
|
|
50
|
+
providerTypeName: string;
|
|
51
|
+
providerName: string;
|
|
52
|
+
}, {
|
|
53
|
+
moduleSpecifier: string;
|
|
54
|
+
importSchemaName: string;
|
|
55
|
+
providerTypeName: string;
|
|
56
|
+
providerName: string;
|
|
57
|
+
}>>;
|
|
58
|
+
}, "strip", z.ZodTypeAny, {
|
|
59
|
+
existingImportsProvider?: {
|
|
60
|
+
moduleSpecifier: string;
|
|
61
|
+
importSchemaName: string;
|
|
62
|
+
providerTypeName: string;
|
|
63
|
+
providerName: string;
|
|
64
|
+
} | undefined;
|
|
65
|
+
exportProviderType?: boolean | undefined;
|
|
66
|
+
}, {
|
|
67
|
+
existingImportsProvider?: {
|
|
68
|
+
moduleSpecifier: string;
|
|
69
|
+
importSchemaName: string;
|
|
70
|
+
providerTypeName: string;
|
|
71
|
+
providerName: string;
|
|
72
|
+
} | undefined;
|
|
73
|
+
exportProviderType?: boolean | undefined;
|
|
74
|
+
}>>>;
|
|
75
|
+
}, "strip", z.ZodTypeAny, {
|
|
76
|
+
exportGroups?: Record<string, {
|
|
77
|
+
existingImportsProvider?: {
|
|
78
|
+
moduleSpecifier: string;
|
|
79
|
+
importSchemaName: string;
|
|
80
|
+
providerTypeName: string;
|
|
81
|
+
providerName: string;
|
|
82
|
+
} | undefined;
|
|
83
|
+
exportProviderType?: boolean | undefined;
|
|
84
|
+
}> | undefined;
|
|
85
|
+
}, {
|
|
86
|
+
exportGroups?: Record<string, {
|
|
87
|
+
existingImportsProvider?: {
|
|
88
|
+
moduleSpecifier: string;
|
|
89
|
+
importSchemaName: string;
|
|
90
|
+
providerTypeName: string;
|
|
91
|
+
providerName: string;
|
|
92
|
+
} | undefined;
|
|
93
|
+
exportProviderType?: boolean | undefined;
|
|
94
|
+
}> | undefined;
|
|
95
|
+
}>;
|
|
96
|
+
type GeneratorOptions = z.infer<typeof generatorOptionsSchema>;
|
|
97
|
+
export declare class TsTemplateFileExtractor extends TemplateFileExtractor<typeof tsTemplateFileMetadataSchema> {
|
|
98
|
+
name: string;
|
|
99
|
+
metadataSchema: z.ZodObject<z.objectUtil.extendShape<{
|
|
100
|
+
type: z.ZodString;
|
|
101
|
+
name: z.ZodString;
|
|
102
|
+
generator: z.ZodString;
|
|
103
|
+
template: z.ZodString;
|
|
104
|
+
}, {
|
|
105
|
+
type: z.ZodLiteral<"ts">;
|
|
106
|
+
group: z.ZodOptional<z.ZodString>;
|
|
107
|
+
exportGroup: z.ZodOptional<z.ZodString>;
|
|
108
|
+
projectExports: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
109
|
+
isTypeOnly: z.ZodOptional<z.ZodBoolean>;
|
|
110
|
+
exportName: z.ZodOptional<z.ZodString>;
|
|
111
|
+
}, "strip", z.ZodTypeAny, {
|
|
112
|
+
isTypeOnly?: boolean | undefined;
|
|
113
|
+
exportName?: string | undefined;
|
|
114
|
+
}, {
|
|
115
|
+
isTypeOnly?: boolean | undefined;
|
|
116
|
+
exportName?: string | undefined;
|
|
117
|
+
}>>>;
|
|
118
|
+
projectExportsOnly: z.ZodOptional<z.ZodBoolean>;
|
|
119
|
+
}>, "strip", z.ZodTypeAny, {
|
|
120
|
+
type: "ts";
|
|
121
|
+
name: string;
|
|
122
|
+
generator: string;
|
|
123
|
+
template: string;
|
|
124
|
+
group?: string | undefined;
|
|
125
|
+
exportGroup?: string | undefined;
|
|
126
|
+
projectExports?: Record<string, {
|
|
127
|
+
isTypeOnly?: boolean | undefined;
|
|
128
|
+
exportName?: string | undefined;
|
|
129
|
+
}> | undefined;
|
|
130
|
+
projectExportsOnly?: boolean | undefined;
|
|
131
|
+
}, {
|
|
132
|
+
type: "ts";
|
|
133
|
+
name: string;
|
|
134
|
+
generator: string;
|
|
135
|
+
template: string;
|
|
136
|
+
group?: string | undefined;
|
|
137
|
+
exportGroup?: string | undefined;
|
|
138
|
+
projectExports?: Record<string, {
|
|
139
|
+
isTypeOnly?: boolean | undefined;
|
|
140
|
+
exportName?: string | undefined;
|
|
141
|
+
}> | undefined;
|
|
142
|
+
projectExportsOnly?: boolean | undefined;
|
|
143
|
+
}>;
|
|
144
|
+
protected pathResolver: ResolverFactory;
|
|
145
|
+
constructor(context: TemplateFileExtractorContext, { pathResolver, }?: {
|
|
146
|
+
pathResolver?: ResolverFactory;
|
|
147
|
+
});
|
|
148
|
+
private generatorConfigCacheMap;
|
|
149
|
+
protected getGeneratorOptions(generatorName: string): Promise<GeneratorOptions>;
|
|
150
|
+
protected getTypescriptRendererImport(generatorName: string): string;
|
|
151
|
+
protected extractTemplateFile(file: TemplateFileExtractorFile<TsTemplateFileMetadata>, importLookupContext: TsTemplateImportLookupContext): Promise<TypescriptCodeEntry & {
|
|
152
|
+
originalPath: string;
|
|
153
|
+
}>;
|
|
154
|
+
protected extractTemplateFilesForGroup(generatorName: string, groupName: string, files: TemplateFileExtractorFile<TsTemplateFileMetadata>[], lookupContext: TsTemplateImportLookupContext): Promise<TypescriptCodeEntry>;
|
|
155
|
+
protected extractTemplateFilesForGenerator(generatorName: string, files: TemplateFileExtractorFile<TsTemplateFileMetadata>[], projectExportMap: ProjectExportLookupMap): Promise<void>;
|
|
156
|
+
/**
|
|
157
|
+
* Generates an import file for a generator.
|
|
158
|
+
*
|
|
159
|
+
* @param generatorName - The name of the generator.
|
|
160
|
+
* @param files - The files to generate the import file for.
|
|
161
|
+
* @returns A list of project exports.
|
|
162
|
+
*/
|
|
163
|
+
protected generateImportFileForGenerator(generatorName: string, files: TemplateFileExtractorFile<TsTemplateFileMetadata>[]): Promise<TsProjectExport[]>;
|
|
164
|
+
extractTemplateFiles(files: TemplateFileExtractorFile<TsTemplateFileMetadata>[]): Promise<void>;
|
|
165
|
+
}
|
|
166
|
+
export {};
|
|
167
|
+
//# sourceMappingURL=ts-template-file-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-template-file-extractor.d.ts","sourceRoot":"","sources":["../../../../src/renderers/typescript/extractor/ts-template-file-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,yBAAyB,EAC1B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAGL,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,KAAK,EACV,sBAAsB,EACtB,6BAA6B,EAC9B,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAKrE,OAAO,EAEL,4BAA4B,EAC7B,MAAM,uBAAuB,CAAC;AAM/B,UAAU,mBAAmB;IAC3B,SAAS,EAAE,cAAc,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB;AAYD,QAAA,MAAM,sBAAsB;IAC1B;;;;OAIG;;QAKG;;WAEG;;QAEH;;WAEG;;YAGC;;;;eAIG;;YAEH;;eAEG;;YAEH;;eAEG;;YAEH;;eAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOb,CAAC;AAEH,KAAK,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE/D,qBAAa,uBAAwB,SAAQ,qBAAqB,CAChE,OAAO,4BAA4B,CACpC;IACQ,IAAI,SAAoB;IACxB,cAAc;cArGQ,EAC7B,SAAQ;cAGmB,EAAG,SAAS;mBAItC,EAAG,SAAS;kBAIZ,EAAI,SAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyFwC;IAErD,SAAS,CAAC,YAAY,EAAE,eAAe,CAAC;gBAGtC,OAAO,EAAE,4BAA4B,EACrC,EACE,YAAY,GACb,GAAE;QACD,YAAY,CAAC,EAAE,eAAe,CAAC;KAC3B;IAuBR,OAAO,CAAC,uBAAuB,CAAuC;cAEtD,mBAAmB,CACjC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,gBAAgB,CAAC;IAkB5B,SAAS,CAAC,2BAA2B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;cAMpD,mBAAmB,CACjC,IAAI,EAAE,yBAAyB,CAAC,sBAAsB,CAAC,EACvD,mBAAmB,EAAE,6BAA6B,GACjD,OAAO,CACR,mBAAmB,GAAG;QACpB,YAAY,EAAE,MAAM,CAAC;KACtB,CACF;cAoFe,4BAA4B,CAC1C,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,yBAAyB,CAAC,sBAAsB,CAAC,EAAE,EAC1D,aAAa,EAAE,6BAA6B,GAC3C,OAAO,CAAC,mBAAmB,CAAC;cA6Cf,gCAAgC,CAC9C,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,yBAAyB,CAAC,sBAAsB,CAAC,EAAE,EAC1D,gBAAgB,EAAE,sBAAsB,GACvC,OAAO,CAAC,IAAI,CAAC;IAwEhB;;;;;;OAMG;cACa,8BAA8B,CAC5C,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,yBAAyB,CAAC,sBAAsB,CAAC,EAAE,GACzD,OAAO,CAAC,eAAe,EAAE,CAAC;IA6DvB,oBAAoB,CACxB,KAAK,EAAE,yBAAyB,CAAC,sBAAsB,CAAC,EAAE,GACzD,OAAO,CAAC,IAAI,CAAC;CAsDjB"}
|