From 46791d715e53f7e442e0c34f5e922d63dbe77f9a Mon Sep 17 00:00:00 2001
From: Haoqun Jiang <haoqunjiang@gmail.com>
Date: Tue, 26 Dec 2023 15:07:33 +0800
Subject: [PATCH 1/3] feat: use package.json imports instead of `@` as alias to
 `src`

See reasons at https://github.com/epicweb-dev/epic-stack/blob/main/docs/decisions/031-imports.md
and https://github.com/vuejs/core/issues/9919

Pending https://github.com/vuejs/core/issues/9919 to be fixed
Pending https://github.com/microsoft/TypeScript/pull/55015 to be released
---
 template/base/jsconfig.json                             | 3 +++
 template/base/package.json                              | 3 +++
 template/base/vite.config.js.ejs                        | 1 +
 template/code/router/src/App.vue                        | 2 +-
 template/code/typescript-router/src/App.vue             | 2 +-
 template/config/cypress-ct/cypress/support/component.js | 2 +-
 template/config/cypress-ct/cypress/support/component.ts | 2 +-
 template/tsconfig/base/tsconfig.app.json                | 3 +++
 template/tsconfig/nightwatch-ct/tsconfig.app.json       | 3 +++
 9 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/template/base/jsconfig.json b/template/base/jsconfig.json
index 5a1f2d22..b5f03929 100644
--- a/template/base/jsconfig.json
+++ b/template/base/jsconfig.json
@@ -1,6 +1,9 @@
 {
   "compilerOptions": {
     "paths": {
+      // TODO: no longer needed after TS 5.4
+      "#src/*": ["./src/*"],
+      // Deprecated, use `#src` instead (configured in `package.json` `imports` field)
       "@/*": ["./src/*"]
     }
   },
diff --git a/template/base/package.json b/template/base/package.json
index 57c2b86a..c05f39ba 100644
--- a/template/base/package.json
+++ b/template/base/package.json
@@ -1,6 +1,9 @@
 {
   "private": true,
   "type": "module",
+  "imports": {
+    "#src/": "./src/"
+  },
   "scripts": {
     "dev": "vite",
     "build": "vite build",
diff --git a/template/base/vite.config.js.ejs b/template/base/vite.config.js.ejs
index c3e65d21..a04ed073 100644
--- a/template/base/vite.config.js.ejs
+++ b/template/base/vite.config.js.ejs
@@ -14,6 +14,7 @@ export default defineConfig({
   ],
   resolve: {
     alias: {
+      // Deprecated, use `#src` instead (configured in `package.json` `imports` field)
       '@': fileURLToPath(new URL('./src', import.meta.url))
     }
   }
diff --git a/template/code/router/src/App.vue b/template/code/router/src/App.vue
index e8641950..719e4d99 100644
--- a/template/code/router/src/App.vue
+++ b/template/code/router/src/App.vue
@@ -5,7 +5,7 @@ import HelloWorld from './components/HelloWorld.vue'
 
 <template>
   <header>
-    <img alt="Vue logo" class="logo" src="@/assets/logo.svg" width="125" height="125" />
+    <img alt="Vue logo" class="logo" src="#src/assets/logo.svg" width="125" height="125" />
 
     <div class="wrapper">
       <HelloWorld msg="You did it!" />
diff --git a/template/code/typescript-router/src/App.vue b/template/code/typescript-router/src/App.vue
index 7905b051..fe29657d 100644
--- a/template/code/typescript-router/src/App.vue
+++ b/template/code/typescript-router/src/App.vue
@@ -5,7 +5,7 @@ import HelloWorld from './components/HelloWorld.vue'
 
 <template>
   <header>
-    <img alt="Vue logo" class="logo" src="@/assets/logo.svg" width="125" height="125" />
+    <img alt="Vue logo" class="logo" src="#src/assets/logo.svg" width="125" height="125" />
 
     <div class="wrapper">
       <HelloWorld msg="You did it!" />
diff --git a/template/config/cypress-ct/cypress/support/component.js b/template/config/cypress-ct/cypress/support/component.js
index 7283cad6..9aeff110 100644
--- a/template/config/cypress-ct/cypress/support/component.js
+++ b/template/config/cypress-ct/cypress/support/component.js
@@ -20,7 +20,7 @@ import './commands'
 // require('./commands')
 
 // Import global styles
-import '@/assets/main.css'
+import '#src/assets/main.css'
 
 import { mount } from 'cypress/vue'
 
diff --git a/template/config/cypress-ct/cypress/support/component.ts b/template/config/cypress-ct/cypress/support/component.ts
index 04e4c352..b2a0063d 100644
--- a/template/config/cypress-ct/cypress/support/component.ts
+++ b/template/config/cypress-ct/cypress/support/component.ts
@@ -20,7 +20,7 @@ import './commands'
 // require('./commands')
 
 // Import global styles
-import '@/assets/main.css'
+import '#src/assets/main.css'
 
 import { mount } from 'cypress/vue'
 
diff --git a/template/tsconfig/base/tsconfig.app.json b/template/tsconfig/base/tsconfig.app.json
index e14c754d..59419d6d 100644
--- a/template/tsconfig/base/tsconfig.app.json
+++ b/template/tsconfig/base/tsconfig.app.json
@@ -8,6 +8,9 @@
 
     "baseUrl": ".",
     "paths": {
+      // TODO: no longer needed after TS 5.4
+      "#src/*": ["./src/*"],
+      // Deprecated, use `#src` instead (configured in `package.json` `imports` field)
       "@/*": ["./src/*"]
     }
   }
diff --git a/template/tsconfig/nightwatch-ct/tsconfig.app.json b/template/tsconfig/nightwatch-ct/tsconfig.app.json
index e14c754d..59419d6d 100644
--- a/template/tsconfig/nightwatch-ct/tsconfig.app.json
+++ b/template/tsconfig/nightwatch-ct/tsconfig.app.json
@@ -8,6 +8,9 @@
 
     "baseUrl": ".",
     "paths": {
+      // TODO: no longer needed after TS 5.4
+      "#src/*": ["./src/*"],
+      // Deprecated, use `#src` instead (configured in `package.json` `imports` field)
       "@/*": ["./src/*"]
     }
   }

From 28b5aaf25049a4c6b5ce105a229ab89413923857 Mon Sep 17 00:00:00 2001
From: Haoqun Jiang <haoqunjiang@gmail.com>
Date: Wed, 13 Nov 2024 16:13:41 +0800
Subject: [PATCH 2/3] feat!: use `#/src` instead

---
 template/base/jsconfig.json                             | 4 ++--
 template/base/package.json                              | 2 +-
 template/base/vite.config.js.ejs                        | 2 +-
 template/code/router/src/App.vue                        | 2 +-
 template/code/typescript-router/src/App.vue             | 2 +-
 template/config/cypress-ct/cypress/support/component.js | 2 +-
 template/config/cypress-ct/cypress/support/component.ts | 2 +-
 template/tsconfig/base/tsconfig.app.json                | 4 ++--
 template/tsconfig/nightwatch-ct/tsconfig.app.json       | 4 ++--
 9 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/template/base/jsconfig.json b/template/base/jsconfig.json
index b5f03929..4bd2b782 100644
--- a/template/base/jsconfig.json
+++ b/template/base/jsconfig.json
@@ -2,8 +2,8 @@
   "compilerOptions": {
     "paths": {
       // TODO: no longer needed after TS 5.4
-      "#src/*": ["./src/*"],
-      // Deprecated, use `#src` instead (configured in `package.json` `imports` field)
+      "#/*": ["./*"],
+      // Deprecated, use `#/src` instead (configured in `package.json` `imports` field)
       "@/*": ["./src/*"]
     }
   },
diff --git a/template/base/package.json b/template/base/package.json
index f711a567..d00f6e14 100644
--- a/template/base/package.json
+++ b/template/base/package.json
@@ -2,7 +2,7 @@
   "private": true,
   "type": "module",
   "imports": {
-    "#src/": "./src/"
+    "#/*": "./*"
   },
   "scripts": {
     "dev": "vite",
diff --git a/template/base/vite.config.js.ejs b/template/base/vite.config.js.ejs
index c5cd9d2f..b148800b 100644
--- a/template/base/vite.config.js.ejs
+++ b/template/base/vite.config.js.ejs
@@ -14,7 +14,7 @@ export default defineConfig({
   ],
   resolve: {
     alias: {
-      // Deprecated, use `#src` instead (configured in `package.json` `imports` field)
+      // Deprecated, use `#/src` instead (configured in `package.json` `imports` field)
       '@': fileURLToPath(new URL('./src', import.meta.url))
     },
   },
diff --git a/template/code/router/src/App.vue b/template/code/router/src/App.vue
index 719e4d99..593fb9c3 100644
--- a/template/code/router/src/App.vue
+++ b/template/code/router/src/App.vue
@@ -5,7 +5,7 @@ import HelloWorld from './components/HelloWorld.vue'
 
 <template>
   <header>
-    <img alt="Vue logo" class="logo" src="#src/assets/logo.svg" width="125" height="125" />
+    <img alt="Vue logo" class="logo" src="#/src/assets/logo.svg" width="125" height="125" />
 
     <div class="wrapper">
       <HelloWorld msg="You did it!" />
diff --git a/template/code/typescript-router/src/App.vue b/template/code/typescript-router/src/App.vue
index fe29657d..861bcc3c 100644
--- a/template/code/typescript-router/src/App.vue
+++ b/template/code/typescript-router/src/App.vue
@@ -5,7 +5,7 @@ import HelloWorld from './components/HelloWorld.vue'
 
 <template>
   <header>
-    <img alt="Vue logo" class="logo" src="#src/assets/logo.svg" width="125" height="125" />
+    <img alt="Vue logo" class="logo" src="#/src/assets/logo.svg" width="125" height="125" />
 
     <div class="wrapper">
       <HelloWorld msg="You did it!" />
diff --git a/template/config/cypress-ct/cypress/support/component.js b/template/config/cypress-ct/cypress/support/component.js
index 9aeff110..4ecfddbe 100644
--- a/template/config/cypress-ct/cypress/support/component.js
+++ b/template/config/cypress-ct/cypress/support/component.js
@@ -20,7 +20,7 @@ import './commands'
 // require('./commands')
 
 // Import global styles
-import '#src/assets/main.css'
+import '#/src/assets/main.css'
 
 import { mount } from 'cypress/vue'
 
diff --git a/template/config/cypress-ct/cypress/support/component.ts b/template/config/cypress-ct/cypress/support/component.ts
index b2a0063d..3278ec0e 100644
--- a/template/config/cypress-ct/cypress/support/component.ts
+++ b/template/config/cypress-ct/cypress/support/component.ts
@@ -20,7 +20,7 @@ import './commands'
 // require('./commands')
 
 // Import global styles
-import '#src/assets/main.css'
+import '#/src/assets/main.css'
 
 import { mount } from 'cypress/vue'
 
diff --git a/template/tsconfig/base/tsconfig.app.json b/template/tsconfig/base/tsconfig.app.json
index cbbfd1cf..5271be2d 100644
--- a/template/tsconfig/base/tsconfig.app.json
+++ b/template/tsconfig/base/tsconfig.app.json
@@ -8,8 +8,8 @@
 
     "paths": {
       // TODO: no longer needed after TS 5.4
-      "#src/*": ["./src/*"],
-      // Deprecated, use `#src` instead (configured in `package.json` `imports` field)
+      "#/*": ["./*"],
+      // Deprecated, use `#/src` instead (configured in `package.json` `imports` field)
       "@/*": ["./src/*"]
     }
   }
diff --git a/template/tsconfig/nightwatch-ct/tsconfig.app.json b/template/tsconfig/nightwatch-ct/tsconfig.app.json
index cbbfd1cf..5271be2d 100644
--- a/template/tsconfig/nightwatch-ct/tsconfig.app.json
+++ b/template/tsconfig/nightwatch-ct/tsconfig.app.json
@@ -8,8 +8,8 @@
 
     "paths": {
       // TODO: no longer needed after TS 5.4
-      "#src/*": ["./src/*"],
-      // Deprecated, use `#src` instead (configured in `package.json` `imports` field)
+      "#/*": ["./*"],
+      // Deprecated, use `#/src` instead (configured in `package.json` `imports` field)
       "@/*": ["./src/*"]
     }
   }

From 04ec3bec6322596e067078d846f240ebddfd2fc6 Mon Sep 17 00:00:00 2001
From: Haoqun Jiang <haoqunjiang@gmail.com>
Date: Wed, 13 Nov 2024 16:15:32 +0800
Subject: [PATCH 3/3] Revert "feat!: use `#/src` instead"

This reverts commit 28b5aaf25049a4c6b5ce105a229ab89413923857.
---
 template/base/jsconfig.json                             | 4 ++--
 template/base/package.json                              | 2 +-
 template/base/vite.config.js.ejs                        | 2 +-
 template/code/router/src/App.vue                        | 2 +-
 template/code/typescript-router/src/App.vue             | 2 +-
 template/config/cypress-ct/cypress/support/component.js | 2 +-
 template/config/cypress-ct/cypress/support/component.ts | 2 +-
 template/tsconfig/base/tsconfig.app.json                | 4 ++--
 template/tsconfig/nightwatch-ct/tsconfig.app.json       | 4 ++--
 9 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/template/base/jsconfig.json b/template/base/jsconfig.json
index 4bd2b782..b5f03929 100644
--- a/template/base/jsconfig.json
+++ b/template/base/jsconfig.json
@@ -2,8 +2,8 @@
   "compilerOptions": {
     "paths": {
       // TODO: no longer needed after TS 5.4
-      "#/*": ["./*"],
-      // Deprecated, use `#/src` instead (configured in `package.json` `imports` field)
+      "#src/*": ["./src/*"],
+      // Deprecated, use `#src` instead (configured in `package.json` `imports` field)
       "@/*": ["./src/*"]
     }
   },
diff --git a/template/base/package.json b/template/base/package.json
index d00f6e14..f711a567 100644
--- a/template/base/package.json
+++ b/template/base/package.json
@@ -2,7 +2,7 @@
   "private": true,
   "type": "module",
   "imports": {
-    "#/*": "./*"
+    "#src/": "./src/"
   },
   "scripts": {
     "dev": "vite",
diff --git a/template/base/vite.config.js.ejs b/template/base/vite.config.js.ejs
index b148800b..c5cd9d2f 100644
--- a/template/base/vite.config.js.ejs
+++ b/template/base/vite.config.js.ejs
@@ -14,7 +14,7 @@ export default defineConfig({
   ],
   resolve: {
     alias: {
-      // Deprecated, use `#/src` instead (configured in `package.json` `imports` field)
+      // Deprecated, use `#src` instead (configured in `package.json` `imports` field)
       '@': fileURLToPath(new URL('./src', import.meta.url))
     },
   },
diff --git a/template/code/router/src/App.vue b/template/code/router/src/App.vue
index 593fb9c3..719e4d99 100644
--- a/template/code/router/src/App.vue
+++ b/template/code/router/src/App.vue
@@ -5,7 +5,7 @@ import HelloWorld from './components/HelloWorld.vue'
 
 <template>
   <header>
-    <img alt="Vue logo" class="logo" src="#/src/assets/logo.svg" width="125" height="125" />
+    <img alt="Vue logo" class="logo" src="#src/assets/logo.svg" width="125" height="125" />
 
     <div class="wrapper">
       <HelloWorld msg="You did it!" />
diff --git a/template/code/typescript-router/src/App.vue b/template/code/typescript-router/src/App.vue
index 861bcc3c..fe29657d 100644
--- a/template/code/typescript-router/src/App.vue
+++ b/template/code/typescript-router/src/App.vue
@@ -5,7 +5,7 @@ import HelloWorld from './components/HelloWorld.vue'
 
 <template>
   <header>
-    <img alt="Vue logo" class="logo" src="#/src/assets/logo.svg" width="125" height="125" />
+    <img alt="Vue logo" class="logo" src="#src/assets/logo.svg" width="125" height="125" />
 
     <div class="wrapper">
       <HelloWorld msg="You did it!" />
diff --git a/template/config/cypress-ct/cypress/support/component.js b/template/config/cypress-ct/cypress/support/component.js
index 4ecfddbe..9aeff110 100644
--- a/template/config/cypress-ct/cypress/support/component.js
+++ b/template/config/cypress-ct/cypress/support/component.js
@@ -20,7 +20,7 @@ import './commands'
 // require('./commands')
 
 // Import global styles
-import '#/src/assets/main.css'
+import '#src/assets/main.css'
 
 import { mount } from 'cypress/vue'
 
diff --git a/template/config/cypress-ct/cypress/support/component.ts b/template/config/cypress-ct/cypress/support/component.ts
index 3278ec0e..b2a0063d 100644
--- a/template/config/cypress-ct/cypress/support/component.ts
+++ b/template/config/cypress-ct/cypress/support/component.ts
@@ -20,7 +20,7 @@ import './commands'
 // require('./commands')
 
 // Import global styles
-import '#/src/assets/main.css'
+import '#src/assets/main.css'
 
 import { mount } from 'cypress/vue'
 
diff --git a/template/tsconfig/base/tsconfig.app.json b/template/tsconfig/base/tsconfig.app.json
index 5271be2d..cbbfd1cf 100644
--- a/template/tsconfig/base/tsconfig.app.json
+++ b/template/tsconfig/base/tsconfig.app.json
@@ -8,8 +8,8 @@
 
     "paths": {
       // TODO: no longer needed after TS 5.4
-      "#/*": ["./*"],
-      // Deprecated, use `#/src` instead (configured in `package.json` `imports` field)
+      "#src/*": ["./src/*"],
+      // Deprecated, use `#src` instead (configured in `package.json` `imports` field)
       "@/*": ["./src/*"]
     }
   }
diff --git a/template/tsconfig/nightwatch-ct/tsconfig.app.json b/template/tsconfig/nightwatch-ct/tsconfig.app.json
index 5271be2d..cbbfd1cf 100644
--- a/template/tsconfig/nightwatch-ct/tsconfig.app.json
+++ b/template/tsconfig/nightwatch-ct/tsconfig.app.json
@@ -8,8 +8,8 @@
 
     "paths": {
       // TODO: no longer needed after TS 5.4
-      "#/*": ["./*"],
-      // Deprecated, use `#/src` instead (configured in `package.json` `imports` field)
+      "#src/*": ["./src/*"],
+      // Deprecated, use `#src` instead (configured in `package.json` `imports` field)
       "@/*": ["./src/*"]
     }
   }