create-quasar 1.9.3 → 1.10.0

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.
Files changed (161) hide show
  1. package/.eslintignore +1 -0
  2. package/index.js +1 -1
  3. package/package.json +1 -1
  4. package/templates/.eslintrc.cjs +17 -1
  5. package/templates/app/quasar-v2/index.js +2 -2
  6. package/templates/app/quasar-v2/js-vite-2/BASE/_jsconfig.json +1 -37
  7. package/templates/app/quasar-v2/js-vite-2/BASE/_package.json +3 -2
  8. package/templates/app/quasar-v2/js-vite-2/BASE/quasar.config.js +3 -6
  9. package/templates/app/quasar-v2/js-vite-2/BASE/src/App.vue +1 -3
  10. package/templates/app/quasar-v2/js-vite-2/BASE/src/components/EssentialLink.vue +0 -4
  11. package/templates/app/quasar-v2/js-vite-2/BASE/src/layouts/MainLayout.vue +0 -4
  12. package/templates/app/quasar-v2/js-vite-2/BASE/src/pages/ErrorNotFound.vue +1 -3
  13. package/templates/app/quasar-v2/js-vite-2/BASE/src/pages/IndexPage.vue +1 -3
  14. package/templates/app/quasar-v2/js-vite-2/BASE/src/router/index.js +2 -2
  15. package/templates/app/quasar-v2/js-vite-2/axios/src/boot/axios.js +2 -2
  16. package/templates/app/quasar-v2/js-vite-2/i18n/src/boot/i18n.js +2 -2
  17. package/templates/app/quasar-v2/js-vite-2/pinia/src/stores/index.js +2 -2
  18. package/templates/app/quasar-v2/js-webpack-4/BASE/_jsconfig.json +1 -37
  19. package/templates/app/quasar-v2/js-webpack-4/BASE/_package.json +3 -2
  20. package/templates/app/quasar-v2/js-webpack-4/BASE/quasar.config.js +2 -2
  21. package/templates/app/quasar-v2/js-webpack-4/BASE/src/App.vue +1 -3
  22. package/templates/app/quasar-v2/js-webpack-4/BASE/src/components/EssentialLink.vue +0 -4
  23. package/templates/app/quasar-v2/js-webpack-4/BASE/src/layouts/MainLayout.vue +0 -4
  24. package/templates/app/quasar-v2/js-webpack-4/BASE/src/pages/ErrorNotFound.vue +1 -3
  25. package/templates/app/quasar-v2/js-webpack-4/BASE/src/pages/IndexPage.vue +1 -3
  26. package/templates/app/quasar-v2/js-webpack-4/BASE/src/router/index.js +2 -2
  27. package/templates/app/quasar-v2/js-webpack-4/axios/src/boot/axios.js +2 -2
  28. package/templates/app/quasar-v2/js-webpack-4/i18n/src/boot/i18n.js +2 -2
  29. package/templates/app/quasar-v2/js-webpack-4/pinia/src/stores/index.js +2 -2
  30. package/templates/app/quasar-v2/ts-vite-2/BASE/_package.json +3 -2
  31. package/templates/app/quasar-v2/ts-vite-2/BASE/_tsconfig.json +1 -12
  32. package/templates/app/quasar-v2/ts-vite-2/BASE/quasar.config.ts +10 -9
  33. package/templates/app/quasar-v2/ts-vite-2/BASE/src/App.vue +1 -3
  34. package/templates/app/quasar-v2/ts-vite-2/BASE/src/components/EssentialLink.vue +0 -4
  35. package/templates/app/quasar-v2/ts-vite-2/BASE/src/components/ExampleComponent.vue +6 -6
  36. package/templates/app/quasar-v2/ts-vite-2/BASE/src/layouts/MainLayout.vue +3 -7
  37. package/templates/app/quasar-v2/ts-vite-2/BASE/src/pages/ErrorNotFound.vue +1 -3
  38. package/templates/app/quasar-v2/ts-vite-2/BASE/src/pages/IndexPage.vue +3 -7
  39. package/templates/app/quasar-v2/ts-vite-2/BASE/src/router/index.ts +2 -2
  40. package/templates/app/quasar-v2/ts-vite-2/BASE/src/router/routes.ts +1 -1
  41. package/templates/app/quasar-v2/ts-vite-2/axios/src/boot/axios.ts +3 -3
  42. package/templates/app/quasar-v2/ts-vite-2/i18n/src/boot/i18n.ts +2 -2
  43. package/templates/app/quasar-v2/ts-vite-2/lint/_.eslintrc.cjs +1 -1
  44. package/templates/app/quasar-v2/ts-vite-2/pinia/src/stores/index.ts +3 -3
  45. package/templates/app/quasar-v2/ts-webpack-4/BASE/_package.json +3 -2
  46. package/templates/app/quasar-v2/ts-webpack-4/BASE/_tsconfig.json +1 -12
  47. package/templates/app/quasar-v2/ts-webpack-4/BASE/quasar.config.ts +8 -2
  48. package/templates/app/quasar-v2/ts-webpack-4/BASE/src/App.vue +1 -3
  49. package/templates/app/quasar-v2/ts-webpack-4/BASE/src/components/EssentialLink.vue +0 -4
  50. package/templates/app/quasar-v2/ts-webpack-4/BASE/src/components/ExampleComponent.vue +6 -6
  51. package/templates/app/quasar-v2/ts-webpack-4/BASE/src/layouts/MainLayout.vue +3 -7
  52. package/templates/app/quasar-v2/ts-webpack-4/BASE/src/pages/ErrorNotFound.vue +1 -3
  53. package/templates/app/quasar-v2/ts-webpack-4/BASE/src/pages/IndexPage.vue +3 -7
  54. package/templates/app/quasar-v2/ts-webpack-4/BASE/src/router/index.ts +2 -2
  55. package/templates/app/quasar-v2/ts-webpack-4/BASE/src/router/routes.ts +1 -1
  56. package/templates/app/quasar-v2/ts-webpack-4/axios/src/boot/axios.ts +3 -3
  57. package/templates/app/quasar-v2/ts-webpack-4/i18n/src/boot/i18n.ts +2 -2
  58. package/templates/app/quasar-v2/ts-webpack-4/lint/_.eslintrc.cjs +1 -1
  59. package/templates/app/quasar-v2/ts-webpack-4/pinia/src/stores/index.ts +3 -3
  60. package/templates/app-extension/ae-ts/.eslintrc.cjs +21 -0
  61. package/templates/app-extension/ae-ts/BASE/README.md +35 -0
  62. package/templates/app-extension/ae-ts/BASE/_.gitignore +8 -0
  63. package/templates/app-extension/ae-ts/BASE/_.vscode/extensions.json +9 -0
  64. package/templates/app-extension/ae-ts/BASE/_.vscode/settings.json +12 -0
  65. package/templates/app-extension/ae-ts/BASE/_eslint.config.js +107 -0
  66. package/templates/app-extension/ae-ts/BASE/_package.json +39 -0
  67. package/templates/app-extension/ae-ts/BASE/_tsconfig.json +30 -0
  68. package/templates/app-extension/ae-ts/BASE/app-extension/README.md +52 -0
  69. package/templates/app-extension/ae-ts/BASE/app-extension/_.npmignore +5 -0
  70. package/templates/app-extension/ae-ts/BASE/app-extension/_package.json +57 -0
  71. package/templates/app-extension/ae-ts/BASE/app-extension/_tsconfig.json +10 -0
  72. package/templates/app-extension/ae-ts/BASE/app-extension/src/index.ts +36 -0
  73. package/templates/app-extension/ae-ts/BASE/app-extension/src/quasar.d.ts +24 -0
  74. package/templates/app-extension/ae-ts/BASE/app-extension/src/runtime/README.md +46 -0
  75. package/templates/app-extension/ae-ts/BASE/app-extension/src/runtime/boot/register.ts +6 -0
  76. package/templates/app-extension/ae-ts/BASE/app-extension/src/runtime/components/MyButton.vue +37 -0
  77. package/templates/app-extension/ae-ts/BASE/app-extension/src/runtime/components/types.ts +19 -0
  78. package/templates/app-extension/ae-ts/BASE/app-extension/src/runtime/index.ts +9 -0
  79. package/templates/{app/quasar-v2/ts-vite-2/BASE/src → app-extension/ae-ts/BASE/app-extension/src/runtime}/quasar.d.ts +0 -2
  80. package/templates/app-extension/ae-ts/BASE/eslint.d.ts +18 -0
  81. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/README.md +67 -0
  82. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/_.gitignore +37 -0
  83. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/_package.json +29 -0
  84. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/_tsconfig.json +9 -0
  85. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/index.html +44 -0
  86. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/postcss.config.cjs +27 -0
  87. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/public/favicon.ico +0 -0
  88. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/public/icons/favicon-128x128.png +0 -0
  89. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/public/icons/favicon-16x16.png +0 -0
  90. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/public/icons/favicon-32x32.png +0 -0
  91. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/public/icons/favicon-96x96.png +0 -0
  92. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/quasar.config.ts +196 -0
  93. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/quasar.extensions.json +3 -0
  94. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/src/App.vue +3 -0
  95. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/src/assets/quasar-logo-vertical.svg +15 -0
  96. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/src/boot/_.gitkeep +0 -0
  97. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/src/components/EssentialLink.vue +26 -0
  98. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/src/css/app.scss +1 -0
  99. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/src/css/quasar.variables.scss +25 -0
  100. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/src/env.d.ts +7 -0
  101. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/src/layouts/MainLayout.vue +94 -0
  102. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/src/pages/ErrorNotFound.vue +21 -0
  103. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/src/pages/IndexPage.vue +5 -0
  104. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/src/quasar.d.ts +10 -0
  105. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/src/router/index.ts +38 -0
  106. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/src/router/routes.ts +18 -0
  107. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/src/shims-vue.d.ts +10 -0
  108. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/README.md +67 -0
  109. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/_.gitignore +32 -0
  110. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/_package.json +40 -0
  111. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/_tsconfig.json +9 -0
  112. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/babel.config.cjs +14 -0
  113. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/index.html +44 -0
  114. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/postcss.config.cjs +8 -0
  115. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/public/favicon.ico +0 -0
  116. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/public/icons/favicon-128x128.png +0 -0
  117. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/public/icons/favicon-16x16.png +0 -0
  118. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/public/icons/favicon-32x32.png +0 -0
  119. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/public/icons/favicon-96x96.png +0 -0
  120. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/quasar.config.ts +207 -0
  121. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/quasar.extensions.json +3 -0
  122. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/src/App.vue +3 -0
  123. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/src/assets/quasar-logo-vertical.svg +15 -0
  124. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/src/boot/_.gitkeep +0 -0
  125. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/src/components/EssentialLink.vue +26 -0
  126. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/src/css/app.scss +1 -0
  127. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/src/css/quasar.variables.scss +25 -0
  128. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/src/env.d.ts +7 -0
  129. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/src/layouts/MainLayout.vue +92 -0
  130. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/src/pages/ErrorNotFound.vue +21 -0
  131. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/src/pages/IndexPage.vue +5 -0
  132. package/templates/{app/quasar-v2/ts-webpack-4/BASE → app-extension/ae-ts/BASE/playground/quasar-cli-webpack}/src/quasar.d.ts +3 -2
  133. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/src/router/index.ts +37 -0
  134. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/src/router/routes.ts +18 -0
  135. package/templates/app-extension/ae-ts/index.js +98 -0
  136. package/templates/app-extension/ae-ts/install-script/app-extension/src/install.ts +25 -0
  137. package/templates/app-extension/ae-ts/install-script/app-extension/src/templates/README.md +27 -0
  138. package/templates/app-extension/ae-ts/install-script/app-extension/src/templates/_.gitkeep +0 -0
  139. package/templates/app-extension/ae-ts/install-script/app-extension/src/templates/base/_.gitkeep +0 -0
  140. package/templates/app-extension/ae-ts/pnpm/_pnpm-workspace.yaml +3 -0
  141. package/templates/app-extension/ae-ts/prompts-script/app-extension/src/prompts.ts +46 -0
  142. package/templates/app-extension/ae-ts/uninstall-script/app-extension/src/uninstall.ts +11 -0
  143. package/templates/app-extension/index.js +12 -1
  144. package/templates/ui-kit/quasar-v2/ae/app-extension/src/index.js +2 -2
  145. package/templates/ui-kit/quasar-v2/ae-install/app-extension/src/install.js +2 -2
  146. package/utils/index.js +14 -7
  147. package/templates/app/quasar-v2/ts-vite-2/lint/_tsconfig.vue-tsc.json +0 -6
  148. package/templates/app/quasar-v2/ts-vite-2/pinia/src/stores/store-flag.d.ts +0 -13
  149. package/templates/app/quasar-v2/ts-webpack-4/pinia/src/stores/store-flag.d.ts +0 -13
  150. /package/templates/app-extension/{ae-v1 → ae-js}/.eslintrc.cjs +0 -0
  151. /package/templates/app-extension/{ae-v1 → ae-js}/BASE/README.md +0 -0
  152. /package/templates/app-extension/{ae-v1 → ae-js}/BASE/_.gitignore +0 -0
  153. /package/templates/app-extension/{ae-v1 → ae-js}/BASE/_package.json +0 -0
  154. /package/templates/app-extension/{ae-v1 → ae-js}/BASE/src/index.js +0 -0
  155. /package/templates/app-extension/{ae-v1 → ae-js}/BASE/src/templates/_.gitkeep +0 -0
  156. /package/templates/app-extension/{ae-v1 → ae-js}/index.js +0 -0
  157. /package/templates/app-extension/{ae-v1 → ae-js}/install-script/src/install.js +0 -0
  158. /package/templates/app-extension/{ae-v1 → ae-js}/prompts-script/src/prompts.js +0 -0
  159. /package/templates/app-extension/{ae-v1 → ae-js}/uninstall-script/src/uninstall.js +0 -0
  160. /package/templates/{app/quasar-v2/ts-vite-2/BASE/src → app-extension/ae-ts/BASE/app-extension/src/runtime}/shims-vue.d.ts +0 -0
  161. /package/templates/{app/quasar-v2/ts-webpack-4/BASE → app-extension/ae-ts/BASE/playground/quasar-cli-webpack}/src/shims-vue.d.ts +0 -0
@@ -23,9 +23,7 @@
23
23
  </template>
24
24
  <% if (sfcStyle === 'composition-setup') { %>
25
25
  <script setup lang="ts">
26
- defineOptions({
27
- name: 'ErrorNotFound'
28
- });
26
+ //
29
27
  </script><% } else if (sfcStyle === 'composition' || sfcStyle === 'options') { %>
30
28
  <script lang="ts">
31
29
  import { defineComponent } from 'vue';
@@ -11,13 +11,9 @@
11
11
  <% if (sfcStyle === 'composition-setup') { %>
12
12
  <script setup lang="ts">
13
13
  import { ref } from 'vue';
14
- import { Todo, Meta } from 'components/models';
14
+ import type { Todo, Meta } from 'components/models';
15
15
  import ExampleComponent from 'components/ExampleComponent.vue';
16
16
 
17
- defineOptions({
18
- name: 'IndexPage'
19
- });
20
-
21
17
  const todos = ref<Todo[]>([
22
18
  {
23
19
  id: 1,
@@ -47,7 +43,7 @@ const meta = ref<Meta>({
47
43
  </script><% } else if (sfcStyle === 'composition') { %>
48
44
  <script lang="ts">
49
45
  import { defineComponent, ref } from 'vue';
50
- import { Todo, Meta } from 'components/models';
46
+ import type { Todo, Meta } from 'components/models';
51
47
  import ExampleComponent from 'components/ExampleComponent.vue';
52
48
 
53
49
  export default defineComponent({
@@ -91,7 +87,7 @@ export default defineComponent({
91
87
  </script><% } else if (sfcStyle === 'options') { %>
92
88
  <script lang="ts">
93
89
  import { defineComponent } from 'vue';
94
- import { Todo, Meta } from 'components/models';
90
+ import type { Todo, Meta } from 'components/models';
95
91
  import ExampleComponent from 'components/ExampleComponent.vue';
96
92
 
97
93
  export default defineComponent({
@@ -1,4 +1,4 @@
1
- import { route } from 'quasar/wrappers';
1
+ import { defineRouter } from '#q-app/wrappers';
2
2
  import {
3
3
  createMemoryHistory,
4
4
  createRouter,
@@ -16,7 +16,7 @@ import routes from './routes';
16
16
  * with the Router instance.
17
17
  */
18
18
 
19
- export default route(function (/* { store, ssrContext } */) {
19
+ export default defineRouter(function (/* { store, ssrContext } */) {
20
20
  const createHistory = process.env.SERVER
21
21
  ? createMemoryHistory
22
22
  : (process.env.VUE_ROUTER_MODE === 'history' ? createWebHistory : createWebHashHistory);
@@ -1,4 +1,4 @@
1
- import { RouteRecordRaw } from 'vue-router';
1
+ import type { RouteRecordRaw } from 'vue-router';
2
2
 
3
3
  const routes: RouteRecordRaw[] = [
4
4
  {
@@ -1,5 +1,5 @@
1
- import { boot } from 'quasar/wrappers';
2
- import axios, { AxiosInstance } from 'axios';
1
+ import { defineBoot } from '#q-app/wrappers';
2
+ import axios, { type AxiosInstance } from 'axios';
3
3
 
4
4
  declare module 'vue' {
5
5
  interface ComponentCustomProperties {
@@ -16,7 +16,7 @@ declare module 'vue' {
16
16
  // for each client)
17
17
  const api = axios.create({ baseURL: 'https://api.example.com' });
18
18
 
19
- export default boot(({ app }) => {
19
+ export default defineBoot(({ app }) => {
20
20
  // for use inside Vue files (Options API) through this.$axios and this.$api
21
21
 
22
22
  app.config.globalProperties.$axios = axios;
@@ -1,4 +1,4 @@
1
- import { boot } from 'quasar/wrappers';
1
+ import { defineBoot } from '#q-app/wrappers';
2
2
  import { createI18n } from 'vue-i18n';
3
3
 
4
4
  import messages from 'src/i18n';
@@ -21,7 +21,7 @@ declare module 'vue-i18n' {
21
21
  }
22
22
  /* eslint-enable @typescript-eslint/no-empty-interface */
23
23
 
24
- export default boot(({ app }) => {
24
+ export default defineBoot(({ app }) => {
25
25
  const i18n = createI18n({
26
26
  locale: 'en-US',<% if (sfcStyle === 'composition' || sfcStyle === 'composition-setup') { %>
27
27
  legacy: false,<% } %>
@@ -23,7 +23,7 @@ module.exports = {
23
23
  // Base ESLint recommended rules
24
24
  // 'eslint:recommended',
25
25
 
26
- // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin#usage
26
+ // https://typescript-eslint.io/getting-started/legacy-eslint-setup
27
27
  // ESLint typescript rules
28
28
  'plugin:@typescript-eslint/recommended',
29
29
 
@@ -1,6 +1,6 @@
1
- import { store } from 'quasar/wrappers'
1
+ import { defineStore } from '#q-app/wrappers'
2
2
  import { createPinia } from 'pinia'
3
- import { Router } from 'vue-router';
3
+ import type { Router } from 'vue-router';
4
4
 
5
5
  /*
6
6
  * When adding new properties to stores, you should also
@@ -22,7 +22,7 @@ declare module 'pinia' {
22
22
  * with the Store instance.
23
23
  */
24
24
 
25
- export default store((/* { ssrContext } */) => {
25
+ export default defineStore((/* { ssrContext } */) => {
26
26
  const pinia = createPinia()
27
27
 
28
28
  // You can add Pinia plugins here
@@ -11,7 +11,8 @@
11
11
  <% } %>
12
12
  "test": "echo \"No test specified\" && exit 0",
13
13
  "dev": "quasar dev",
14
- "build": "quasar build"
14
+ "build": "quasar build",
15
+ "postinstall": "quasar prepare"
15
16
  },
16
17
  "dependencies": {
17
18
  <% if (preset.axios) { %>"axios": "^1.2.1",<% } %>
@@ -43,7 +44,7 @@
43
44
  "prettier": "^3.0.3",
44
45
  <% } } %>
45
46
  "@types/node": "^20.5.9",
46
- "@quasar/app-webpack": "^4.0.0-beta.13",
47
+ "@quasar/app-webpack": "^4.0.0-rc.1",
47
48
  "ts-loader": "^9.4.2",
48
49
  "typescript": "^5.2.2"
49
50
  },
@@ -1,14 +1,3 @@
1
1
  {
2
- "extends": "@quasar/app-webpack/tsconfig-preset",
3
- "compilerOptions": {
4
- "baseUrl": "."
5
- },
6
- "exclude": [
7
- "./dist",
8
- "./.quasar",
9
- "./node_modules",
10
- "./src-capacitor",
11
- "./src-cordova",
12
- "./quasar.config.*.temporary.compiled*"
13
- ]
2
+ "extends": "./.quasar/tsconfig.json"
14
3
  }
@@ -10,9 +10,9 @@
10
10
  /* eslint global-require: 0 */
11
11
  <% } %>
12
12
  <% } %>
13
- import { configure } from 'quasar/wrappers';
13
+ import { defineConfig } from '#q-app/wrappers';
14
14
 
15
- export default configure((/* ctx */) => {
15
+ export default defineConfig((/* ctx */) => {
16
16
  return {
17
17
  <% if (preset.lint) { %>eslint: {
18
18
  // fix: true,
@@ -71,6 +71,12 @@ export default configure((/* ctx */) => {
71
71
  node: 'node20'
72
72
  },
73
73
 
74
+ typescript: {
75
+ strict: true,
76
+ vueShim: true
77
+ // extendTsConfig (tsConfig) {}
78
+ },
79
+
74
80
  // rtl: true, // https://quasar.dev/options/rtl-support
75
81
  // preloadChunks: true,
76
82
  // showProgress: false,
@@ -3,9 +3,7 @@
3
3
  </template>
4
4
  <% if (sfcStyle === 'composition-setup') { %>
5
5
  <script setup lang="ts">
6
- defineOptions({
7
- name: 'App'
8
- });
6
+ //
9
7
  </script><% } else if (sfcStyle === 'composition' || sfcStyle === 'options') { %>
10
8
  <script lang="ts">
11
9
  import { defineComponent } from 'vue';
@@ -20,10 +20,6 @@
20
20
  </template>
21
21
  <% if (sfcStyle === 'composition-setup') { %>
22
22
  <script setup lang="ts">
23
- defineOptions({
24
- name: 'EssentialLink'
25
- });
26
-
27
23
  export interface EssentialLinkProps {
28
24
  title: string;
29
25
  caption?: string;
@@ -14,7 +14,7 @@
14
14
  <% if (sfcStyle === 'composition-setup') { %>
15
15
  <script setup lang="ts">
16
16
  import { computed, ref } from 'vue';
17
- import { Todo, Meta } from './models';
17
+ import type { Todo, Meta } from './models';
18
18
 
19
19
  interface Props {
20
20
  title: string;
@@ -38,13 +38,13 @@ const todoCount = computed(() => props.todos.length);
38
38
  <script lang="ts">
39
39
  import {
40
40
  defineComponent,
41
- PropType,
42
41
  computed,
43
42
  ref,
44
43
  toRef,
45
- Ref,
44
+ type PropType,
45
+ type Ref,
46
46
  } from 'vue';
47
- import { Todo, Meta } from './models';
47
+ import type { Todo, Meta } from './models';
48
48
 
49
49
  function useClickCount() {
50
50
  const clickCount = ref(0);
@@ -88,8 +88,8 @@ export default defineComponent({
88
88
  });
89
89
  </script><% } else if (sfcStyle === 'options') { %>
90
90
  <script lang="ts">
91
- import { defineComponent, PropType } from 'vue';
92
- import { Todo, Meta } from './models';
91
+ import { defineComponent, type PropType } from 'vue';
92
+ import type { Todo, Meta } from './models';
93
93
 
94
94
  export default defineComponent({
95
95
  name: 'ExampleComponent',
@@ -47,11 +47,7 @@
47
47
  <% if (sfcStyle === 'composition-setup') { %>
48
48
  <script setup lang="ts">
49
49
  import { ref } from 'vue';
50
- import EssentialLink, { EssentialLinkProps } from 'components/EssentialLink.vue';
51
-
52
- defineOptions({
53
- name: 'MainLayout'
54
- });
50
+ import EssentialLink, { type EssentialLinkProps } from 'components/EssentialLink.vue';
55
51
 
56
52
  const linksList: EssentialLinkProps[] = [
57
53
  {
@@ -106,7 +102,7 @@ function toggleLeftDrawer () {
106
102
  </script><% } else if (sfcStyle === 'composition') { %>
107
103
  <script lang="ts">
108
104
  import { defineComponent, ref } from 'vue';
109
- import EssentialLink, { EssentialLinkProps } from 'components/EssentialLink.vue';
105
+ import EssentialLink, { type EssentialLinkProps } from 'components/EssentialLink.vue';
110
106
 
111
107
  const linksList: EssentialLinkProps[] = [
112
108
  {
@@ -175,7 +171,7 @@ export default defineComponent({
175
171
  </script><% } else if (sfcStyle === 'options') { %>
176
172
  <script lang="ts">
177
173
  import { defineComponent } from 'vue';
178
- import EssentialLink, { EssentialLinkProps } from 'components/EssentialLink.vue';
174
+ import EssentialLink, { type EssentialLinkProps } from 'components/EssentialLink.vue';
179
175
 
180
176
  const linksList: EssentialLinkProps[] = [
181
177
  {
@@ -23,9 +23,7 @@
23
23
  </template>
24
24
  <% if (sfcStyle === 'composition-setup') { %>
25
25
  <script setup lang="ts">
26
- defineOptions({
27
- name: 'ErrorNotFound'
28
- });
26
+ //
29
27
  </script><% } else if (sfcStyle === 'composition' || sfcStyle === 'options') { %>
30
28
  <script lang="ts">
31
29
  import { defineComponent } from 'vue';
@@ -11,13 +11,9 @@
11
11
  <% if (sfcStyle === 'composition-setup') { %>
12
12
  <script setup lang="ts">
13
13
  import { ref } from 'vue';
14
- import { Todo, Meta } from 'components/models';
14
+ import type { Todo, Meta } from 'components/models';
15
15
  import ExampleComponent from 'components/ExampleComponent.vue';
16
16
 
17
- defineOptions({
18
- name: 'IndexPage'
19
- });
20
-
21
17
  const todos = ref<Todo[]>([
22
18
  {
23
19
  id: 1,
@@ -47,7 +43,7 @@ const meta = ref<Meta>({
47
43
  </script><% } else if (sfcStyle === 'composition') { %>
48
44
  <script lang="ts">
49
45
  import { defineComponent, ref } from 'vue';
50
- import { Todo, Meta } from 'components/models';
46
+ import type { Todo, Meta } from 'components/models';
51
47
  import ExampleComponent from 'components/ExampleComponent.vue';
52
48
 
53
49
  export default defineComponent({
@@ -91,7 +87,7 @@ export default defineComponent({
91
87
  </script><% } else if (sfcStyle === 'options') { %>
92
88
  <script lang="ts">
93
89
  import { defineComponent } from 'vue';
94
- import { Todo, Meta } from 'components/models';
90
+ import type { Todo, Meta } from 'components/models';
95
91
  import ExampleComponent from 'components/ExampleComponent.vue';
96
92
 
97
93
  export default defineComponent({
@@ -1,4 +1,4 @@
1
- import { route } from 'quasar/wrappers';
1
+ import { defineRouter } from '#q-app/wrappers';
2
2
  import {
3
3
  createMemoryHistory,
4
4
  createRouter,
@@ -16,7 +16,7 @@ import routes from './routes';
16
16
  * with the Router instance.
17
17
  */
18
18
 
19
- export default route(function (/* { store, ssrContext } */) {
19
+ export default defineRouter(function (/* { store, ssrContext } */) {
20
20
  const createHistory = process.env.SERVER
21
21
  ? createMemoryHistory
22
22
  : (process.env.VUE_ROUTER_MODE === 'history' ? createWebHistory : createWebHashHistory);
@@ -1,4 +1,4 @@
1
- import { RouteRecordRaw } from 'vue-router';
1
+ import type { RouteRecordRaw } from 'vue-router';
2
2
 
3
3
  const routes: RouteRecordRaw[] = [
4
4
  {
@@ -1,5 +1,5 @@
1
- import { boot } from 'quasar/wrappers';
2
- import axios, { AxiosInstance } from 'axios';
1
+ import { defineBoot } from '#q-app/wrappers';
2
+ import axios, { type AxiosInstance } from 'axios';
3
3
 
4
4
  declare module 'vue' {
5
5
  interface ComponentCustomProperties {
@@ -16,7 +16,7 @@ declare module 'vue' {
16
16
  // for each client)
17
17
  const api = axios.create({ baseURL: 'https://api.example.com' });
18
18
 
19
- export default boot(({ app }) => {
19
+ export default defineBoot(({ app }) => {
20
20
  // for use inside Vue files (Options API) through this.$axios and this.$api
21
21
 
22
22
  app.config.globalProperties.$axios = axios;
@@ -1,4 +1,4 @@
1
- import { boot } from 'quasar/wrappers';
1
+ import { defineBoot } from '#q-app/wrappers';
2
2
  import { createI18n } from 'vue-i18n';
3
3
 
4
4
  import messages from 'src/i18n';
@@ -21,7 +21,7 @@ declare module "vue-i18n" {
21
21
  }
22
22
  /* eslint-enable @typescript-eslint/no-empty-interface */
23
23
 
24
- export default boot(({ app }) => {
24
+ export default defineBoot(({ app }) => {
25
25
  const i18n = createI18n<{ message: MessageSchema }, MessageLanguages>({
26
26
  locale: 'en-US',<% if (sfcStyle === 'composition' || sfcStyle === 'composition-setup') { %>
27
27
  legacy: false,<% } %>
@@ -24,7 +24,7 @@ module.exports = {
24
24
  // Base ESLint recommended rules
25
25
  // 'eslint:recommended',
26
26
 
27
- // https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin#usage
27
+ // https://typescript-eslint.io/getting-started/legacy-eslint-setup
28
28
  // ESLint typescript rules
29
29
  'plugin:@typescript-eslint/recommended',
30
30
 
@@ -1,6 +1,6 @@
1
- import { store } from 'quasar/wrappers'
1
+ import { defineStore } from '#q-app/wrappers'
2
2
  import { createPinia } from 'pinia'
3
- import { Router } from 'vue-router';
3
+ import type { Router } from 'vue-router';
4
4
 
5
5
  /*
6
6
  * When adding new properties to stores, you should also
@@ -22,7 +22,7 @@ declare module 'pinia' {
22
22
  * with the Store instance.
23
23
  */
24
24
 
25
- export default store((/* { ssrContext } */) => {
25
+ export default defineStore((/* { ssrContext } */) => {
26
26
  const pinia = createPinia()
27
27
 
28
28
  // You can add Pinia plugins here
@@ -0,0 +1,21 @@
1
+ module.exports = {
2
+ settings: {
3
+ 'lodash-template/globals': [
4
+ // Base
5
+ 'name',
6
+ 'description',
7
+ 'author',
8
+
9
+ 'preset',
10
+ 'orgName',
11
+ 'pkgName',
12
+ 'license',
13
+ 'repositoryType',
14
+ 'repositoryURL',
15
+ 'homepage',
16
+ 'bugs',
17
+
18
+ 'packageManagerField',
19
+ ]
20
+ },
21
+ }
@@ -0,0 +1,35 @@
1
+ <img src="https://img.shields.io/npm/v/<%= pkgName %>.svg?label=<%= pkgName %>">
2
+
3
+ Compatible with:
4
+
5
+ - Quasar UI v2 and Vue 3
6
+ - Quasar CLI with Vite v1.5+ and v2
7
+ - Quasar CLI with Webpack v3.10+ and v4
8
+
9
+ # Structure
10
+
11
+ - [/app-extension](app-extension) - App Extension for Quasar CLI
12
+ - [/playground](playground) - collection of playground apps to test the UI and App Extension
13
+
14
+ # Development
15
+
16
+ ```bash
17
+ $ <%= packageManager?.name ?? 'pnpm' %> i # install the dependencies
18
+
19
+ $ <%= packageManager?.name ?? 'pnpm' %> build # build the app-extension. Run this after making any change in ./app-extension
20
+
21
+ $ <%= packageManager?.name ?? 'pnpm' %> dev:vite # start the app-vite playground
22
+ $ <%= packageManager?.name ?? 'pnpm' %> dev:webpack # start the app-webpack playground
23
+ ```
24
+
25
+ For more development-related explanation, see:
26
+ - [`app-extension/src/runtime/README.md`](app-extension/src/runtime/README.md)
27
+ <% if (preset.install) { %>- [`app-extension/src/templates/README.md`](app-extension/src/templates/README.md)<% } %>
28
+
29
+ # Donate
30
+
31
+ If you appreciate the work that went into this project, please consider [donating to Quasar](https://donate.quasar.dev).
32
+
33
+ # License
34
+
35
+ <%= license %> (c) <%= author %>
@@ -0,0 +1,8 @@
1
+ .DS_Store
2
+ .thumbs.db
3
+ dist
4
+ node_modules
5
+
6
+ # package manager log files
7
+ *-debug.log*
8
+ *-error.log*
@@ -0,0 +1,9 @@
1
+ {
2
+ "recommendations": [
3
+ "dbaeumer.vscode-eslint",
4
+ "esbenp.prettier-vscode",
5
+ "editorconfig.editorconfig",
6
+ "vue.volar",
7
+ "wayou.vscode-todo-highlight"
8
+ ]
9
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "editor.bracketPairColorization.enabled": true,
3
+ "editor.guides.bracketPairs": true,
4
+ "editor.formatOnSave": true,
5
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
6
+ "editor.codeActionsOnSave": {
7
+ "source.fixAll.eslint": "explicit"
8
+ },
9
+ "eslint.validate": ["javascript", "javascriptreact", "typescript", "vue"],
10
+ "eslint.workingDirectories": ["./app-extension", "./ui", "./playground/*"],
11
+ "typescript.tsdk": "node_modules/typescript/lib"
12
+ }
@@ -0,0 +1,107 @@
1
+ import eslint from '@eslint/js';
2
+ import tseslint from 'typescript-eslint';
3
+ import pluginVue from 'eslint-plugin-vue';
4
+ import configPrettier from 'eslint-config-prettier';
5
+ import globals from 'globals';
6
+ import { version as vueVersion } from 'vue';
7
+
8
+ export default tseslint.config(
9
+ {
10
+ name: 'eslint/recommended',
11
+ ...eslint.configs.recommended,
12
+ },
13
+
14
+ // Recommended rules
15
+ ...tseslint.configs.recommendedTypeChecked,
16
+ // Strict rules (recommended if have good TS knowledge)
17
+ // ...tseslint.configs.strictTypeChecked, // disable recommended above if you enable this
18
+ ...tseslint.configs.stylisticTypeChecked,
19
+
20
+ ...pluginVue.configs['flat/recommended'],
21
+
22
+ {
23
+ name: 'eslint-config-prettier',
24
+ ...configPrettier,
25
+ },
26
+
27
+ {
28
+ name: 'ignored',
29
+
30
+ ignores: [
31
+ "**/dist",
32
+
33
+ "playground/*/.quasar",
34
+ "playground/*/quasar.config.*.temporary.compiled*",
35
+ "playground/*/src-cordova",
36
+ "playground/*/src-capacitor",
37
+ "playground/*/src-ssr",
38
+ "playground/*/postcss.config.cjs",
39
+
40
+ "playground/quasar-cli-webpack/src-bex/www",
41
+ "playground/quasar-cli-webpack/babel.config.cjs",
42
+ ],
43
+ },
44
+
45
+ {
46
+ name: 'general',
47
+
48
+ languageOptions: {
49
+ parserOptions: {
50
+ parser: tseslint.parser,
51
+ extraFileExtensions: ['.vue'],
52
+ projectService: true,
53
+ },
54
+
55
+ globals: {
56
+ ...globals.browser,
57
+ ...globals.node,
58
+ ...globals.es2021,
59
+
60
+ chrome: 'readonly',
61
+ cordova: 'readonly',
62
+ Capacitor: 'readonly',
63
+ },
64
+ },
65
+
66
+ rules: {
67
+ '@typescript-eslint/no-misused-promises': [
68
+ 'error',
69
+ { checksVoidReturn: false },
70
+ ],
71
+ '@typescript-eslint/no-unused-vars': [
72
+ 'error',
73
+ { argsIgnorePattern: '^_' },
74
+ ],
75
+
76
+ 'vue/no-unsupported-features': [
77
+ 'error',
78
+ {
79
+ version: vueVersion,
80
+ },
81
+ ],
82
+ 'vue/padding-line-between-blocks': 'warn',
83
+ 'vue/no-empty-component-block': 'warn',
84
+ 'vue/eqeqeq': 'error',
85
+ 'vue/custom-event-name-casing': 'warn',
86
+ 'vue/no-unused-properties': ['warn', { groups: ['props', 'setup'] }],
87
+ 'vue/v-for-delimiter-style': 'warn',
88
+ 'vue/require-macro-variable-name': 'warn',
89
+ 'vue/prefer-separate-static-class': 'warn',
90
+
91
+ curly: 'error',
92
+ 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
93
+ },
94
+ },
95
+
96
+ {
97
+ // Layout/page components are not used as components in templates, so they don't need to be multi-word
98
+ name: 'playground/vue-layout-and-page',
99
+ files: [
100
+ 'playground/*/src/layouts/**/*.vue',
101
+ 'playground/*/src/pages/**/*.vue',
102
+ ],
103
+ rules: {
104
+ 'vue/multi-word-component-names': 'off',
105
+ },
106
+ },
107
+ );
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "quasar-app-extension-<%= name %>-monorepo",
3
+ "private": true,
4
+ <% if (packageManagerField) { %>"packageManager": "<%= packageManagerField %>",<% } %>
5
+ "author": "<%= author %>",
6
+ "type": "module",
7
+ <% if (packageManager?.name !== 'pnpm') { %>"workspaces": [
8
+ "app-extension",
9
+ "playground/*"
10
+ ],<% } %>
11
+ "scripts": {
12
+ <% if (packageManager) { %>
13
+ "build": <% if (['pnpm', 'bun'].includes(packageManager.name)) { %>"<%= packageManager.name %> --filter ./app-extension build"<% } else if (packageManager.name === 'yarn') { %>"yarn workspace <%= pkgName %> build"<% } else { %>"npm run --workspace <%= pkgName %> build"<% } %>,
14
+ "dev:vite": <% if (['pnpm', 'bun'].includes(packageManager.name)) { %>"<%= packageManager.name %> --filter ./playground/quasar-cli-vite dev"<% } else if (packageManager.name === 'yarn') { %>"yarn workspace playground-quasar-cli-vite dev"<% } else { %>"npm run --workspace playground-quasar-cli-vite dev"<% } %>,
15
+ "dev:webpack": <% if (['pnpm', 'bun'].includes(packageManager.name)) { %>"<%= packageManager.name %> --filter ./playground/quasar-cli-webpack dev"<% } else if (packageManager.name === 'yarn') { %>"yarn workspace playground-quasar-cli-webpack dev"<% } else { %>"npm run --workspace playground-quasar-cli-webpack dev"<% } %>,
16
+ "format": <% if (packageManager.name === 'pnpm') { %>"pnpm format:root && pnpm --recursive format"<% } else if (packageManager.name === 'bun') { %>"bun format:root && bun --filter '*' format"<% } else if (packageManager.name === 'yarn') { %>"yarn format:root && yarn workspace <%= pkgName %> format"<% } else { %>"npm run format:root && npm run --workspaces format"<% } %>,
17
+ <% } else { %>
18
+ "build": "pnpm --filter ./app-extension build",
19
+ "dev:vite": "pnpm --filter ./playground/quasar-cli-vite dev",
20
+ "dev:webpack": "pnpm --filter ./playground/quasar-cli-webpack dev",
21
+ "format": "pnpm format:root && pnpm --recursive format",
22
+ <% } %>
23
+ "lint": "eslint",
24
+ "format:root": "prettier --write \"./*.{json,md,vue,js,ts,yml}\" \"./.vscode/*.json\" --ignore-path .gitignore"
25
+ },
26
+ "devDependencies": {
27
+ "@eslint/js": "^9.8.0",
28
+ "@types/eslint": "^9.6.0",
29
+ "@types/eslint__js": "^8.42.3",
30
+ "@types/node": "^20.12.8",
31
+ "eslint": "^9.8.0",
32
+ "eslint-config-prettier": "^9.1.0",
33
+ "eslint-plugin-vue": "^9.27.0",
34
+ "globals": "^15.9.0",
35
+ "prettier": "^3.3.3",
36
+ "typescript": "^5.5.4",
37
+ "typescript-eslint": "^8.0.1"
38
+ }
39
+ }