From 7d0afbbe7dba722546a13d735146256b97b8211a Mon Sep 17 00:00:00 2001 From: Alex Prudhomme <78121423+alexprudhomme@users.noreply.github.com> Date: Fri, 31 Jan 2025 14:59:03 -0500 Subject: [PATCH] typescript path plugin https://coveord.atlassian.net/browse/KIT-3920 --- packages/atomic/.storybook/main.mts | 16 ------- packages/atomic/dev/index.html | 1 + packages/atomic/scripts/build.mjs | 3 +- packages/atomic/scripts/path-transform.mjs | 50 ++++++++++++++++++++++ packages/atomic/tsconfig.json | 5 ++- packages/atomic/tsconfig.storybook.json | 5 +-- 6 files changed, 58 insertions(+), 22 deletions(-) create mode 100644 packages/atomic/scripts/path-transform.mjs diff --git a/packages/atomic/.storybook/main.mts b/packages/atomic/.storybook/main.mts index f73fde71a74..387e0eda2ae 100644 --- a/packages/atomic/.storybook/main.mts +++ b/packages/atomic/.storybook/main.mts @@ -64,7 +64,6 @@ const config: StorybookConfig = { plugins: [ nxViteTsPaths(), resolveStorybookUtilsImports(), - resolveSrcImports(), forceInlineCssImports(), configType === 'PRODUCTION' && isCDN && externalizeDependencies(), ], @@ -89,21 +88,6 @@ const resolveStorybookUtilsImports: PluginImpl = () => { }; }; -const resolveSrcImports: PluginImpl = () => { - return { - name: 'resolve-storybook-utils-imports', - async resolveId(source: string, importer, options) { - if (source.startsWith('@/src')) { - return this.resolve( - source.replace('@/src', path.resolve(__dirname, '../src')), - importer, - options - ); - } - }, - }; -}; - const forceInlineCssImports: PluginImpl = () => { return { name: 'force-inline-css-imports', diff --git a/packages/atomic/dev/index.html b/packages/atomic/dev/index.html index 6b3da9db22d..c48fbdd71fb 100644 --- a/packages/atomic/dev/index.html +++ b/packages/atomic/dev/index.html @@ -142,6 +142,7 @@ + diff --git a/packages/atomic/scripts/build.mjs b/packages/atomic/scripts/build.mjs index 3ea239f5a7c..95966cc2805 100644 --- a/packages/atomic/scripts/build.mjs +++ b/packages/atomic/scripts/build.mjs @@ -9,6 +9,7 @@ import { createProgram, flattenDiagnosticMessageText, } from 'typescript'; +import pathTransformer from './path-transform.mjs'; import svgTransformer from './svg-transform.mjs'; const args = argv.slice(2); @@ -38,7 +39,7 @@ function emit(program) { const writeFile = undefined; const emitOnlyDtsFiles = false; const customTransformers = { - before: [svgTransformer], + before: [svgTransformer, pathTransformer], }; return program.emit( diff --git a/packages/atomic/scripts/path-transform.mjs b/packages/atomic/scripts/path-transform.mjs new file mode 100644 index 00000000000..a73d1136fb2 --- /dev/null +++ b/packages/atomic/scripts/path-transform.mjs @@ -0,0 +1,50 @@ +import {readFileSync} from 'fs'; +import {basename, dirname, join, resolve, relative} from 'path'; +import { + NodeFlags, + isImportDeclaration, + visitEachChild, + visitNode, + isStringLiteral, +} from 'typescript'; + +/** + * Custom SVG transformer to handle .svg imports. + */ +export default function pathTransformer(context) { + const {factory} = context; + + function visit(node, sourceFile) { + if (isImportDeclaration(node) && isStringLiteral(node.moduleSpecifier)) { + const importPath = node.moduleSpecifier.text; + + if (importPath.startsWith('@/')) { + const relativePath = getRelativeImportPath( + sourceFile.fileName, + importPath + ); + + console.log(relativePath); + + return factory.updateImportDeclaration( + node, + node.modifiers, + node.importClause, + factory.createStringLiteral(relativePath), + node.assertClause + ); + } + } + return visitEachChild(node, (child) => visit(child, sourceFile), context); + } + + return (sourceFile) => + visitNode(sourceFile, (node) => visit(node, sourceFile)); +} + +function getRelativeImportPath(sourceFilePath, importPath) { + const basePath = resolve(process.cwd()); + const absoluteImportPath = resolve(basePath, importPath.replace('@/', '')); + const relativePath = relative(dirname(sourceFilePath), absoluteImportPath); + return relativePath.startsWith('.') ? relativePath : `./${relativePath}`; +} diff --git a/packages/atomic/tsconfig.json b/packages/atomic/tsconfig.json index c3ad9b38467..92b1cf51aed 100644 --- a/packages/atomic/tsconfig.json +++ b/packages/atomic/tsconfig.json @@ -27,7 +27,10 @@ "no-nullable-attribute-binding": "warning" } } - ] + ], + "paths": { + "@/*": ["./*"] + } }, "exclude": ["node_modules", "src/external-builds"], "include": ["src"] diff --git a/packages/atomic/tsconfig.storybook.json b/packages/atomic/tsconfig.storybook.json index 094372902a8..30d5ba207d2 100644 --- a/packages/atomic/tsconfig.storybook.json +++ b/packages/atomic/tsconfig.storybook.json @@ -4,10 +4,7 @@ "emitDecoratorMetadata": true, "composite": true, "jsxFactory": "h", - "declaration": true, - "paths": { - "@/*": ["./*"] - } + "declaration": true }, "exclude": ["src/**/*.spec.ts", "src/**/*.test.ts"], "include": [