Jelajahi Sumber

fix(dashboard): Fix handling of more types of path alias (#3678)

Michael Bromley 6 bulan lalu
induk
melakukan
c9f993ff69

+ 0 - 1
packages/dashboard/vite/tests/fixtures-path-alias/aliased-plugin/index.ts

@@ -1 +0,0 @@
-export * from './src/aliased.plugin';

+ 1 - 0
packages/dashboard/vite/tests/fixtures-path-alias/js-aliased/index.ts

@@ -0,0 +1 @@
+export * from './src/js-aliased.plugin';

+ 1 - 1
packages/dashboard/vite/tests/fixtures-path-alias/aliased-plugin/src/aliased.plugin.ts → packages/dashboard/vite/tests/fixtures-path-alias/js-aliased/src/js-aliased.plugin.ts

@@ -5,4 +5,4 @@ import { PluginCommonModule, VendurePlugin } from '@vendure/core';
     providers: [],
     dashboard: './dashboard/index.tsx',
 })
-export class AliasedPlugin {}
+export class JsAliasedPlugin {}

+ 1 - 0
packages/dashboard/vite/tests/fixtures-path-alias/star-aliased/index.ts

@@ -0,0 +1 @@
+export * from './src/star-aliased.plugin';

+ 8 - 0
packages/dashboard/vite/tests/fixtures-path-alias/star-aliased/src/star-aliased.plugin.ts

@@ -0,0 +1,8 @@
+import { PluginCommonModule, VendurePlugin } from '@vendure/core';
+
+@VendurePlugin({
+    imports: [PluginCommonModule],
+    providers: [],
+    dashboard: './dashboard/index.tsx',
+})
+export class StarAliasedPlugin {}

+ 1 - 0
packages/dashboard/vite/tests/fixtures-path-alias/ts-aliased/index.ts

@@ -0,0 +1 @@
+export * from './src/ts-aliased.plugin';

+ 8 - 0
packages/dashboard/vite/tests/fixtures-path-alias/ts-aliased/src/ts-aliased.plugin.ts

@@ -0,0 +1,8 @@
+import { PluginCommonModule, VendurePlugin } from '@vendure/core';
+
+@VendurePlugin({
+    imports: [PluginCommonModule],
+    providers: [],
+    dashboard: './dashboard/index.tsx',
+})
+export class TsAliasedPlugin {}

+ 4 - 3
packages/dashboard/vite/tests/fixtures-path-alias/vendure-config.ts

@@ -1,7 +1,8 @@
+import { JsAliasedPlugin } from '@other/js-aliased';
+import { TsAliasedPlugin } from '@other/ts-aliased';
+import { StarAliasedPlugin } from '@plugins/star-aliased';
 import { VendureConfig } from '@vendure/core';
 
-import { AliasedPlugin } from './aliased-plugin';
-
 export const config: VendureConfig = {
     apiOptions: {
         port: 3000,
@@ -15,5 +16,5 @@ export const config: VendureConfig = {
     paymentOptions: {
         paymentMethodHandlers: [],
     },
-    plugins: [AliasedPlugin],
+    plugins: [StarAliasedPlugin, TsAliasedPlugin, JsAliasedPlugin],
 };

+ 35 - 7
packages/dashboard/vite/tests/path-alias.spec.ts

@@ -16,17 +16,45 @@ describe('detecting plugins using tsconfig path aliases', () => {
                 outputPath: tempDir,
                 vendureConfigPath: join(__dirname, 'fixtures-path-alias', 'vendure-config.ts'),
                 logger: process.env.LOG ? debugLogger : noopLogger,
+                pathAdapter: {
+                    transformTsConfigPathMappings: ({ phase, patterns }) => {
+                        if (phase === 'loading') {
+                            return patterns.map(pattern => {
+                                return pattern.replace(/\/fixtures-path-alias/, '').replace(/.ts$/, '.js');
+                            });
+                        } else {
+                            return patterns;
+                        }
+                    },
+                },
             });
 
-            expect(result.pluginInfo).toHaveLength(1);
-            expect(result.pluginInfo[0].name).toBe('AliasedPlugin');
-            expect(result.pluginInfo[0].dashboardEntryPath).toBe('./dashboard/index.tsx');
-            expect(result.pluginInfo[0].sourcePluginPath).toBe(
-                join(__dirname, 'fixtures-path-alias', 'aliased-plugin', 'src', 'aliased.plugin.ts'),
+            const plugins = result.pluginInfo.sort((a, b) => a.name.localeCompare(b.name));
+
+            expect(plugins).toHaveLength(3);
+
+            expect(plugins[0].name).toBe('JsAliasedPlugin');
+            expect(plugins[0].dashboardEntryPath).toBe('./dashboard/index.tsx');
+            expect(plugins[0].sourcePluginPath).toBe(
+                join(__dirname, 'fixtures-path-alias', 'js-aliased', 'src', 'js-aliased.plugin.ts'),
+            );
+            expect(plugins[0].pluginPath).toBe(join(tempDir, 'js-aliased', 'src', 'js-aliased.plugin.js'));
+
+            expect(plugins[1].name).toBe('StarAliasedPlugin');
+            expect(plugins[1].dashboardEntryPath).toBe('./dashboard/index.tsx');
+            expect(plugins[1].sourcePluginPath).toBe(
+                join(__dirname, 'fixtures-path-alias', 'star-aliased', 'src', 'star-aliased.plugin.ts'),
+            );
+            expect(plugins[1].pluginPath).toBe(
+                join(tempDir, 'star-aliased', 'src', 'star-aliased.plugin.js'),
             );
-            expect(result.pluginInfo[0].pluginPath).toBe(
-                join(tempDir, 'aliased-plugin', 'src', 'aliased.plugin.js'),
+
+            expect(plugins[2].name).toBe('TsAliasedPlugin');
+            expect(plugins[2].dashboardEntryPath).toBe('./dashboard/index.tsx');
+            expect(plugins[2].sourcePluginPath).toBe(
+                join(__dirname, 'fixtures-path-alias', 'ts-aliased', 'src', 'ts-aliased.plugin.ts'),
             );
+            expect(plugins[2].pluginPath).toBe(join(tempDir, 'ts-aliased', 'src', 'ts-aliased.plugin.js'));
         },
         { timeout: 10_000 },
     );

+ 19 - 9
packages/dashboard/vite/tests/tsconfig.json

@@ -1,11 +1,21 @@
 {
-    "compilerOptions": {
-        "module": "NodeNext",
-        "sourceMap": true,
-        "jsx": "react-jsx",
-        "paths": {
-            "@plugins/*": ["./fixtures-path-alias/*"]
-        }
-    },
-    "exclude": ["node_modules"]
+  "compilerOptions": {
+    "module": "NodeNext",
+    "sourceMap": true,
+    "jsx": "react-jsx",
+    "paths": {
+      "@plugins/*": [
+        "./fixtures-path-alias/*"
+      ],
+      "@other/ts-aliased": [
+        "./fixtures-path-alias/ts-aliased/index.ts"
+      ],
+      "@other/js-aliased": [
+        "./fixtures-path-alias/js-aliased/index.js"
+      ]
+    }
+  },
+  "exclude": [
+    "node_modules"
+  ]
 }

+ 4 - 1
packages/dashboard/vite/utils/plugin-discovery.ts

@@ -232,8 +232,11 @@ export async function analyzeSourceFiles(
                     importPath + '.js',
                     path.join(importPath, 'index.ts'),
                     path.join(importPath, 'index.js'),
+                    importPath,
                 ];
-
+                if (importPath.endsWith('.js')) {
+                    possiblePaths.push(importPath.replace(/.js$/, '.ts'));
+                }
                 // Try each possible path
                 let found = false;
                 for (const possiblePath of possiblePaths) {