create-vue 3.11.2 → 3.12.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 (79) hide show
  1. package/LICENSE +101 -0
  2. package/locales/en-US.json +10 -1
  3. package/locales/fr-FR.json +10 -1
  4. package/locales/tr-TR.json +10 -1
  5. package/locales/zh-Hans.json +10 -1
  6. package/locales/zh-Hant.json +10 -1
  7. package/outfile.cjs +82 -47
  8. package/package.json +5 -5
  9. package/template/base/index.html +1 -1
  10. package/template/base/node_modules/.bin/tsc +4 -4
  11. package/template/base/node_modules/.bin/tsserver +4 -4
  12. package/template/base/node_modules/.bin/vite +2 -2
  13. package/template/base/node_modules/.vue-global-types/vue_3.5_false.d.ts +116 -0
  14. package/template/base/vite.config.js.data.mjs +3 -3
  15. package/template/base/vite.config.js.ejs +2 -2
  16. package/template/code/default/src/components/HelloWorld.vue +2 -2
  17. package/template/code/default/src/components/TheWelcome.vue +6 -4
  18. package/template/code/router/src/components/HelloWorld.vue +2 -2
  19. package/template/code/router/src/components/TheWelcome.vue +6 -4
  20. package/template/code/router/src/router/index.js +4 -4
  21. package/template/code/typescript-default/src/components/TheWelcome.vue +6 -4
  22. package/template/code/typescript-router/src/components/TheWelcome.vue +6 -4
  23. package/template/code/typescript-router/src/router/index.ts +4 -4
  24. package/template/config/cypress/cypress.config.js +2 -2
  25. package/template/config/cypress/node_modules/.bin/cypress +2 -2
  26. package/template/config/cypress/package.json +1 -1
  27. package/template/config/cypress-ct/cypress.config.js +4 -4
  28. package/template/config/cypress-ct/node_modules/.bin/cypress +2 -2
  29. package/template/config/cypress-ct/node_modules/.bin/tsc +4 -4
  30. package/template/config/cypress-ct/node_modules/.bin/tsserver +4 -4
  31. package/template/config/cypress-ct/package.json +1 -1
  32. package/template/config/devtools/node_modules/.bin/tsc +4 -4
  33. package/template/config/devtools/node_modules/.bin/tsserver +4 -4
  34. package/template/config/devtools/node_modules/.bin/vite +4 -4
  35. package/template/config/devtools/package.json +1 -1
  36. package/template/config/devtools/vite.config.js.data.mjs +2 -2
  37. package/template/config/jsx/node_modules/.bin/tsc +4 -4
  38. package/template/config/jsx/node_modules/.bin/tsserver +4 -4
  39. package/template/config/jsx/node_modules/.bin/vite +2 -2
  40. package/template/config/jsx/vite.config.js.data.mjs +3 -3
  41. package/template/config/nightwatch/nightwatch.conf.cjs +25 -25
  42. package/template/config/nightwatch/node_modules/.bin/chromedriver +2 -2
  43. package/template/config/nightwatch/node_modules/.bin/nightwatch +2 -2
  44. package/template/config/nightwatch/node_modules/.bin/ts-node +2 -2
  45. package/template/config/nightwatch/node_modules/.bin/ts-node-cwd +2 -2
  46. package/template/config/nightwatch/node_modules/.bin/ts-node-esm +2 -2
  47. package/template/config/nightwatch/node_modules/.bin/ts-node-script +2 -2
  48. package/template/config/nightwatch/node_modules/.bin/ts-node-transpile-only +2 -2
  49. package/template/config/nightwatch/node_modules/.bin/ts-script +2 -2
  50. package/template/config/nightwatch/node_modules/.bin/tsc +4 -4
  51. package/template/config/nightwatch/node_modules/.bin/tsserver +4 -4
  52. package/template/config/nightwatch/node_modules/.bin/vite +2 -2
  53. package/template/config/nightwatch/package.json +2 -2
  54. package/template/config/nightwatch/vite.config.js.data.mjs +2 -2
  55. package/template/config/nightwatch-ct/node_modules/.bin/tsc +4 -4
  56. package/template/config/nightwatch-ct/node_modules/.bin/tsserver +4 -4
  57. package/template/config/nightwatch-ct/vite.config.js.data.mjs +2 -2
  58. package/template/config/pinia/node_modules/.bin/tsc +4 -4
  59. package/template/config/pinia/node_modules/.bin/tsserver +4 -4
  60. package/template/config/pinia/package.json +1 -1
  61. package/template/config/playwright/node_modules/.bin/playwright +2 -2
  62. package/template/config/playwright/package.json +1 -1
  63. package/template/config/playwright/playwright.config.js +11 -11
  64. package/template/config/router/node_modules/.bin/tsc +4 -4
  65. package/template/config/router/node_modules/.bin/tsserver +4 -4
  66. package/template/config/typescript/node_modules/.bin/npm-run-all +2 -2
  67. package/template/config/typescript/node_modules/.bin/npm-run-all2 +2 -2
  68. package/template/config/typescript/node_modules/.bin/run-p +2 -2
  69. package/template/config/typescript/node_modules/.bin/run-s +2 -2
  70. package/template/config/typescript/node_modules/.bin/tsc +2 -2
  71. package/template/config/typescript/node_modules/.bin/tsserver +2 -2
  72. package/template/config/typescript/node_modules/.bin/vue-tsc +2 -2
  73. package/template/config/typescript/package.json +3 -3
  74. package/template/config/vitest/node_modules/.bin/tsc +4 -4
  75. package/template/config/vitest/node_modules/.bin/tsserver +4 -4
  76. package/template/config/vitest/node_modules/.bin/vitest +2 -2
  77. package/template/config/vitest/package.json +1 -1
  78. package/template/config/vitest/vitest.config.js +3 -3
  79. package/template/eslint/package.json +1 -1
package/LICENSE CHANGED
@@ -24,6 +24,107 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
24
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
25
  SOFTWARE.
26
26
 
27
+ # License of the files in the directories template in create-vue
28
+ The files in the directories template in create-vue and files
29
+ generated from those files are licensed under the CC0 1.0 Universal license:
30
+
31
+ CC0 1.0 Universal
32
+ Statement of Purpose
33
+ The laws of most jurisdictions throughout the world automatically confer
34
+ exclusive Copyright and Related Rights (defined below) upon the creator and
35
+ subsequent owner(s) (each and all, an "owner") of an original work of
36
+ authorship and/or a database (each, a "Work").
37
+ Certain owners wish to permanently relinquish those rights to a Work for the
38
+ purpose of contributing to a commons of creative, cultural and scientific
39
+ works ("Commons") that the public can reliably and without fear of later
40
+ claims of infringement build upon, modify, incorporate in other works, reuse
41
+ and redistribute as freely as possible in any form whatsoever and for any
42
+ purposes, including without limitation commercial purposes. These owners may
43
+ contribute to the Commons to promote the ideal of a free culture and the
44
+ further production of creative, cultural and scientific works, or to gain
45
+ reputation or greater distribution for their Work in part through the use and
46
+ efforts of others.
47
+ For these and/or other purposes and motivations, and without any expectation
48
+ of additional consideration or compensation, the person associating CC0 with a
49
+ Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
50
+ and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
51
+ and publicly distribute the Work under its terms, with knowledge of his or her
52
+ Copyright and Related Rights in the Work and the meaning and intended legal
53
+ effect of CC0 on those rights.
54
+ 1. Copyright and Related Rights. A Work made available under CC0 may be
55
+ protected by copyright and related or neighboring rights ("Copyright and
56
+ Related Rights"). Copyright and Related Rights include, but are not limited
57
+ to, the following:
58
+ i. the right to reproduce, adapt, distribute, perform, display, communicate,
59
+ and translate a Work;
60
+ ii. moral rights retained by the original author(s) and/or performer(s);
61
+ iii. publicity and privacy rights pertaining to a person's image or likeness
62
+ depicted in a Work;
63
+ iv. rights protecting against unfair competition in regards to a Work,
64
+ subject to the limitations in paragraph 4(a), below;
65
+ v. rights protecting the extraction, dissemination, use and reuse of data in
66
+ a Work;
67
+ vi. database rights (such as those arising under Directive 96/9/EC of the
68
+ European Parliament and of the Council of 11 March 1996 on the legal
69
+ protection of databases, and under any national implementation thereof,
70
+ including any amended or successor version of such directive); and
71
+ vii. other similar, equivalent or corresponding rights throughout the world
72
+ based on applicable law or treaty, and any national implementations thereof.
73
+ 2. Waiver. To the greatest extent permitted by, but not in contravention of,
74
+ applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
75
+ unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
76
+ and Related Rights and associated claims and causes of action, whether now
77
+ known or unknown (including existing as well as future claims and causes of
78
+ action), in the Work (i) in all territories worldwide, (ii) for the maximum
79
+ duration provided by applicable law or treaty (including future time
80
+ extensions), (iii) in any current or future medium and for any number of
81
+ copies, and (iv) for any purpose whatsoever, including without limitation
82
+ commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
83
+ the Waiver for the benefit of each member of the public at large and to the
84
+ detriment of Affirmer's heirs and successors, fully intending that such Waiver
85
+ shall not be subject to revocation, rescission, cancellation, termination, or
86
+ any other legal or equitable action to disrupt the quiet enjoyment of the Work
87
+ by the public as contemplated by Affirmer's express Statement of Purpose.
88
+ 3. Public License Fallback. Should any part of the Waiver for any reason be
89
+ judged legally invalid or ineffective under applicable law, then the Waiver
90
+ shall be preserved to the maximum extent permitted taking into account
91
+ Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
92
+ is so judged Affirmer hereby grants to each affected person a royalty-free,
93
+ non transferable, non sublicensable, non exclusive, irrevocable and
94
+ unconditional license to exercise Affirmer's Copyright and Related Rights in
95
+ the Work (i) in all territories worldwide, (ii) for the maximum duration
96
+ provided by applicable law or treaty (including future time extensions), (iii)
97
+ in any current or future medium and for any number of copies, and (iv) for any
98
+ purpose whatsoever, including without limitation commercial, advertising or
99
+ promotional purposes (the "License"). The License shall be deemed effective as
100
+ of the date CC0 was applied by Affirmer to the Work. Should any part of the
101
+ License for any reason be judged legally invalid or ineffective under
102
+ applicable law, such partial invalidity or ineffectiveness shall not
103
+ invalidate the remainder of the License, and in such case Affirmer hereby
104
+ affirms that he or she will not (i) exercise any of his or her remaining
105
+ Copyright and Related Rights in the Work or (ii) assert any associated claims
106
+ and causes of action with respect to the Work, in either case contrary to
107
+ Affirmer's express Statement of Purpose.
108
+ 4. Limitations and Disclaimers.
109
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
110
+ surrendered, licensed or otherwise affected by this document.
111
+ b. Affirmer offers the Work as-is and makes no representations or warranties
112
+ of any kind concerning the Work, express, implied, statutory or otherwise,
113
+ including without limitation warranties of title, merchantability, fitness
114
+ for a particular purpose, non infringement, or the absence of latent or
115
+ other defects, accuracy, or the present or absence of errors, whether or not
116
+ discoverable, all to the greatest extent permissible under applicable law.
117
+ c. Affirmer disclaims responsibility for clearing rights of other persons
118
+ that may apply to the Work or any use thereof, including without limitation
119
+ any person's Copyright and Related Rights in the Work. Further, Affirmer
120
+ disclaims responsibility for obtaining any necessary consents, permissions
121
+ or other rights required for any use of the Work.
122
+ d. Affirmer understands and acknowledges that Creative Commons is not a
123
+ party to this document and has no duty or obligation with respect to this
124
+ CC0 or use of the Work.
125
+ For more information, please see
126
+ <http://creativecommons.org/publicdomain/zero/1.0/>
127
+
27
128
  ## Licenses of bundled dependencies
28
129
 
29
130
  The published create-vue artifact additionally contains code with the following licenses:
@@ -45,7 +45,16 @@
45
45
  }
46
46
  },
47
47
  "needsEslint": {
48
- "message": "Add ESLint for code quality?"
48
+ "message": "Add ESLint for code quality?",
49
+ "selectOptions": {
50
+ "negative": { "title": "No" },
51
+ "eslintOnly": {
52
+ "title": "Yes"
53
+ },
54
+ "speedUpWithOxlint": {
55
+ "title": "Yes, and speed up with Oxlint (experimental)"
56
+ }
57
+ }
49
58
  },
50
59
  "needsPrettier": {
51
60
  "message": "Add Prettier for code formatting?"
@@ -45,7 +45,16 @@
45
45
  }
46
46
  },
47
47
  "needsEslint": {
48
- "message": "Ajouter ESLint pour la qualité du code\u00a0?"
48
+ "message": "Ajouter ESLint pour la qualité du code\u00a0?",
49
+ "selectOptions": {
50
+ "negative": { "title": "Non" },
51
+ "eslintOnly": {
52
+ "title": "Oui"
53
+ },
54
+ "speedUpWithOxlint": {
55
+ "title": "Oui, et accélérer avec Oxlint (expérimental)"
56
+ }
57
+ }
49
58
  },
50
59
  "needsPrettier": {
51
60
  "message": "Ajouter Prettier pour le formatage du code\u00a0?"
@@ -45,7 +45,16 @@
45
45
  }
46
46
  },
47
47
  "needsEslint": {
48
- "message": "Kod kalitesi için ESLint eklensin mi?"
48
+ "message": "Kod kalitesi için ESLint eklensin mi?",
49
+ "selectOptions": {
50
+ "negative": { "title": "Hayır" },
51
+ "eslintOnly": {
52
+ "title": "Evet"
53
+ },
54
+ "speedUpWithOxlint": {
55
+ "title": "Evet ve Oxlint ile hızlanın (deneysel)"
56
+ }
57
+ }
49
58
  },
50
59
  "needsPrettier": {
51
60
  "message": "Kod formatlama için Prettier eklensin mi?"
@@ -45,7 +45,16 @@
45
45
  }
46
46
  },
47
47
  "needsEslint": {
48
- "message": "是否引入 ESLint 用于代码质量检测?"
48
+ "message": "是否引入 ESLint 用于代码质量检测?",
49
+ "selectOptions": {
50
+ "negative": { "title": "否" },
51
+ "eslintOnly": {
52
+ "title": "是"
53
+ },
54
+ "speedUpWithOxlint": {
55
+ "title": "是,并同时引入 Oxlint 以加快检测(试验阶段)"
56
+ }
57
+ }
49
58
  },
50
59
  "needsPrettier": {
51
60
  "message": "是否引入 Prettier 用于代码格式化?"
@@ -49,7 +49,16 @@
49
49
  }
50
50
  },
51
51
  "needsEslint": {
52
- "message": "是否引入 ESLint 用於程式碼品質檢測?"
52
+ "message": "是否引入 ESLint 用於程式碼品質檢測?",
53
+ "selectOptions": {
54
+ "negative": { "title": "否" },
55
+ "eslintOnly": {
56
+ "title": "是"
57
+ },
58
+ "speedUpWithOxlint": {
59
+ "title": "是,並同時引入 Oxlint 以加快檢測(試驗性功能)"
60
+ }
61
+ }
53
62
  },
54
63
  "needsPrettier": {
55
64
  "message": "是否引入 Prettier 用於程式碼格式化?"
package/outfile.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- /*! create-vue v3.11.2 | MIT */
2
+ /*! create-vue v3.12.0 | MIT */
3
3
  var __create = Object.create;
4
4
  var __defProp = Object.defineProperty;
5
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -3462,44 +3462,32 @@ function getLanguage() {
3462
3462
  var fs4 = __toESM(require("fs"), 1);
3463
3463
  var path4 = __toESM(require("path"), 1);
3464
3464
 
3465
- // node_modules/.pnpm/@vue+create-eslint-config@0.4.3/node_modules/@vue/create-eslint-config/renderEjsFile.js
3465
+ // node_modules/.pnpm/@vue+create-eslint-config@0.6.0/node_modules/@vue/create-eslint-config/renderEjsFile.js
3466
3466
  var import_ejs = __toESM(require_ejs(), 1);
3467
3467
  var templates = { "./templates/_editorconfig.ejs": "[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue}]\ncharset = utf-8\nindent_size = 2\nindent_style = space\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n<%_ if (styleGuide === 'airbnb') { _%>\n<%# // standard doesn't have an opinion on line endings\n// https://github.com/standard/standard/issues/140\n// or maximum line length\n// https://github.com/standard/standard/issues/1559\n// so we only configure them for airbnb style\n%>\nend_of_line = lf\nmax_line_length = 100\n<%_ } _%>\n", "./templates/_prettierrc.json.ejs": `<%_ if (styleGuide === 'airbnb') { _%>
3468
3468
  {
3469
3469
  "$schema": "https://json.schemastore.org/prettierrc",
3470
- "arrowParens": "always",
3471
- "bracketSameLine": false,
3472
- "bracketSpacing": true,
3473
- "endOfLine": "lf",
3474
- "jsxSingleQuote": false,
3475
3470
  "printWidth": 100,
3476
- "proseWrap": "preserve",
3477
- "quoteProps": "as-needed",
3478
- "semi": true,
3479
- "singleQuote": true,
3480
- "tabWidth": 2,
3481
- "trailingComma": "all",
3482
- "useTabs": false
3471
+ "singleQuote": true
3483
3472
  }
3484
3473
  <%_ } else if (styleGuide === 'standard') { _%>
3485
3474
  {
3486
3475
  "$schema": "https://json.schemastore.org/prettierrc",
3487
3476
  "semi": false,
3488
- "tabWidth": 2,
3489
3477
  "singleQuote": true,
3490
- "printWidth": 100,
3491
- "trailingComma": "all"
3478
+ "jsxSingleQuote": true,
3479
+ "trailingComma": "none"
3492
3480
  }
3493
3481
  <%_ } else { _%>
3494
3482
  <%#
3495
- The default style follows the one used in the vuejs/core repository
3496
- <https://github.com/vuejs/core/blob/main/.prettierrc>
3483
+ The default style follows the one used in the vuejs/create-vue repository
3484
+ <https://github.com/vuejs/create-vue/blob/main/.prettierrc>
3497
3485
  %>
3498
3486
  {
3499
3487
  "$schema": "https://json.schemastore.org/prettierrc",
3500
3488
  "semi": false,
3501
3489
  "singleQuote": true,
3502
- "arrowParens": "avoid"
3490
+ "printWidth": 100
3503
3491
  }
3504
3492
  <%_ } _%>
3505
3493
  `, "./templates/eslint.config.js.ejs": "<%_ for (const { importer } of configsBeforeVuePlugin) { _%>\n<%- importer %>\n<%_ } _%>\nimport pluginVue from 'eslint-plugin-vue'\n<%_ for (const { importer } of configsAfterVuePlugin) { _%>\n<%- importer %>\n<%_ } _%>\n\nexport default [\n {\n name: 'app/files-to-lint',\n files: ['**/*.{<%= fileExtensions.join(',') %>}'],\n },\n\n {\n name: 'app/files-to-ignore',\n ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**'],\n },\n\n <%_ for (const { content } of configsBeforeVuePlugin) { _%>\n <%- content %><%# TODO: auto-indent if content's multi-line %>\n <%_ } _%>\n ...pluginVue.configs['flat/essential'],\n <%_ for (const { content } of configsAfterVuePlugin) { _%>\n <%- content %><%# TODO: auto-indent if content's multi-line %>\n <%_ } _%>\n]\n" };
@@ -3507,10 +3495,10 @@ function renderEjsFile(filePath, data) {
3507
3495
  return import_ejs.default.render(templates[filePath], data, {});
3508
3496
  }
3509
3497
 
3510
- // node_modules/.pnpm/@vue+create-eslint-config@0.4.3/node_modules/@vue/create-eslint-config/package.json
3498
+ // node_modules/.pnpm/@vue+create-eslint-config@0.6.0/node_modules/@vue/create-eslint-config/package.json
3511
3499
  var package_default = {
3512
3500
  name: "@vue/create-eslint-config",
3513
- version: "0.4.3",
3501
+ version: "0.6.0",
3514
3502
  description: "Utility to setup ESLint in Vue.js projects.",
3515
3503
  type: "module",
3516
3504
  main: "index.js",
@@ -3544,12 +3532,15 @@ var package_default = {
3544
3532
  kolorist: "^1.8.0"
3545
3533
  },
3546
3534
  devDependencies: {
3547
- "@eslint/js": "^9.13.0",
3548
- "@types/node": "^22.7.7",
3549
- "@vue/eslint-config-prettier": "^10.0.0",
3550
- "@vue/eslint-config-typescript": "^14.1.1",
3551
- eslint: "^9.13.0",
3552
- "eslint-plugin-vue": "^9.29.0",
3535
+ "@eslint/js": "^9.14.0",
3536
+ "@types/node": "^22.8.7",
3537
+ "@vue/eslint-config-prettier": "^10.1.0",
3538
+ "@vue/eslint-config-typescript": "^14.1.3",
3539
+ eslint: "^9.14.0",
3540
+ "eslint-plugin-oxlint": "^0.11.0",
3541
+ "eslint-plugin-vue": "^9.30.0",
3542
+ "npm-run-all2": "^7.0.1",
3543
+ oxlint: "^0.11.0",
3553
3544
  prettier: "^3.3.3",
3554
3545
  typescript: "~5.6.0"
3555
3546
  },
@@ -3559,18 +3550,20 @@ var package_default = {
3559
3550
  }
3560
3551
  };
3561
3552
 
3562
- // node_modules/.pnpm/@vue+create-eslint-config@0.4.3/node_modules/@vue/create-eslint-config/index.js
3553
+ // node_modules/.pnpm/@vue+create-eslint-config@0.6.0/node_modules/@vue/create-eslint-config/index.js
3563
3554
  var versionMap = package_default.devDependencies;
3564
3555
  function createConfig({
3565
3556
  styleGuide = "default",
3566
3557
  // default ~~| airbnb | standard~~ only the default is supported for now
3567
3558
  hasTypeScript = false,
3568
3559
  needsPrettier = false,
3560
+ needsOxlint = false,
3569
3561
  additionalConfigs = []
3570
3562
  }) {
3571
3563
  const pickDependencies = (keys) => pickKeysFromObject(versionMap, keys);
3572
3564
  const pkg = {
3573
- devDependencies: pickDependencies(["eslint", "eslint-plugin-vue"])
3565
+ devDependencies: pickDependencies(["eslint", "eslint-plugin-vue"]),
3566
+ scripts: {}
3574
3567
  };
3575
3568
  const fileExtensions = ["vue"];
3576
3569
  if (hasTypeScript) {
@@ -3597,6 +3590,22 @@ function createConfig({
3597
3590
  ]
3598
3591
  });
3599
3592
  }
3593
+ if (needsOxlint) {
3594
+ additionalConfigs.push({
3595
+ devDependencies: pickDependencies(["oxlint", "eslint-plugin-oxlint", "npm-run-all2"]),
3596
+ afterVuePlugin: [
3597
+ {
3598
+ importer: "import oxlint from 'eslint-plugin-oxlint'",
3599
+ content: "oxlint.configs['flat/recommended'],"
3600
+ }
3601
+ ]
3602
+ });
3603
+ pkg.scripts["lint:oxlint"] = "oxlint . --fix -D correctness";
3604
+ pkg.scripts["lint:eslint"] = "eslint . --fix";
3605
+ pkg.scripts.lint = "run-s lint:*";
3606
+ } else {
3607
+ pkg.scripts.lint = "eslint . --fix";
3608
+ }
3600
3609
  if (needsPrettier) {
3601
3610
  additionalConfigs.push({
3602
3611
  devDependencies: pickDependencies([
@@ -3610,6 +3619,7 @@ function createConfig({
3610
3619
  }
3611
3620
  ]
3612
3621
  });
3622
+ pkg.scripts.format = "prettier --write src/";
3613
3623
  }
3614
3624
  const configsBeforeVuePlugin = [], configsAfterVuePlugin = [];
3615
3625
  for (const config of additionalConfigs) {
@@ -3673,14 +3683,22 @@ function deepMerge2(target, obj) {
3673
3683
  var package_default2 = {
3674
3684
  devDependencies: {
3675
3685
  "@vitest/eslint-plugin": "1.1.7",
3676
- "eslint-plugin-cypress": "^4.0.0",
3686
+ "eslint-plugin-cypress": "^4.1.0",
3677
3687
  "eslint-plugin-playwright": "^2.0.0"
3678
3688
  }
3679
3689
  };
3680
3690
 
3681
3691
  // utils/renderEslint.ts
3682
3692
  var eslintDeps = package_default2.devDependencies;
3683
- function renderEslint(rootDir, { needsTypeScript, needsVitest, needsCypress, needsCypressCT, needsPrettier, needsPlaywright }) {
3693
+ function renderEslint(rootDir, {
3694
+ needsTypeScript,
3695
+ needsVitest,
3696
+ needsCypress,
3697
+ needsCypressCT,
3698
+ needsOxlint,
3699
+ needsPrettier,
3700
+ needsPlaywright
3701
+ }) {
3684
3702
  const additionalConfigs = getAdditionalConfigs({
3685
3703
  needsVitest,
3686
3704
  needsCypress,
@@ -3690,18 +3708,15 @@ function renderEslint(rootDir, { needsTypeScript, needsVitest, needsCypress, nee
3690
3708
  const { pkg, files } = createConfig({
3691
3709
  styleGuide: "default",
3692
3710
  hasTypeScript: needsTypeScript,
3711
+ needsOxlint,
3712
+ // Theoretically, we could add Prettier without requring ESLint.
3713
+ // But it doesn't seem to be a good practice, so we just let createESLintConfig handle it.
3693
3714
  needsPrettier,
3694
3715
  additionalConfigs
3695
3716
  });
3696
- const scripts = {
3697
- lint: "eslint . --fix"
3698
- };
3699
- if (needsPrettier) {
3700
- scripts.format = "prettier --write src/";
3701
- }
3702
3717
  const packageJsonPath = path4.resolve(rootDir, "package.json");
3703
3718
  const existingPkg = JSON.parse(fs4.readFileSync(packageJsonPath, "utf8"));
3704
- const updatedPkg = sortDependencies(deepMerge_default(deepMerge_default(existingPkg, pkg), { scripts }));
3719
+ const updatedPkg = sortDependencies(deepMerge_default(existingPkg, pkg));
3705
3720
  fs4.writeFileSync(packageJsonPath, JSON.stringify(updatedPkg, null, 2) + "\n", "utf8");
3706
3721
  for (const [fileName, content] of Object.entries(files)) {
3707
3722
  const fullPath = path4.resolve(rootDir, fileName);
@@ -3717,7 +3732,9 @@ function getAdditionalConfigs({
3717
3732
  const additionalConfigs = [];
3718
3733
  if (needsVitest) {
3719
3734
  additionalConfigs.push({
3720
- devDependencies: { "@vitest/eslint-plugin": eslintDeps["@vitest/eslint-plugin"] },
3735
+ devDependencies: {
3736
+ "@vitest/eslint-plugin": eslintDeps["@vitest/eslint-plugin"]
3737
+ },
3721
3738
  afterVuePlugin: [
3722
3739
  {
3723
3740
  importer: `import pluginVitest from '@vitest/eslint-plugin'`,
@@ -3732,7 +3749,9 @@ function getAdditionalConfigs({
3732
3749
  }
3733
3750
  if (needsCypress) {
3734
3751
  additionalConfigs.push({
3735
- devDependencies: { "eslint-plugin-cypress": eslintDeps["eslint-plugin-cypress"] },
3752
+ devDependencies: {
3753
+ "eslint-plugin-cypress": eslintDeps["eslint-plugin-cypress"]
3754
+ },
3736
3755
  afterVuePlugin: [
3737
3756
  {
3738
3757
  importer: "import pluginCypress from 'eslint-plugin-cypress/flat'",
@@ -3757,7 +3776,9 @@ function getAdditionalConfigs({
3757
3776
  }
3758
3777
  if (needsPlaywright) {
3759
3778
  additionalConfigs.push({
3760
- devDependencies: { "eslint-plugin-playwright": eslintDeps["eslint-plugin-playwright"] },
3779
+ devDependencies: {
3780
+ "eslint-plugin-playwright": eslintDeps["eslint-plugin-playwright"]
3781
+ },
3761
3782
  afterVuePlugin: [
3762
3783
  {
3763
3784
  importer: "import pluginPlaywright from 'eslint-plugin-playwright'",
@@ -3938,11 +3959,23 @@ async function init2() {
3938
3959
  },
3939
3960
  {
3940
3961
  name: "needsEslint",
3941
- type: () => isFeatureFlagsUsed ? null : "toggle",
3962
+ type: () => isFeatureFlagsUsed ? null : "select",
3942
3963
  message: language.needsEslint.message,
3943
- initial: false,
3944
- active: language.defaultToggleOptions.active,
3945
- inactive: language.defaultToggleOptions.inactive
3964
+ initial: 0,
3965
+ choices: [
3966
+ {
3967
+ title: language.needsEslint.selectOptions.negative.title,
3968
+ value: false
3969
+ },
3970
+ {
3971
+ title: language.needsEslint.selectOptions.eslintOnly.title,
3972
+ value: "eslintOnly"
3973
+ },
3974
+ {
3975
+ title: language.needsEslint.selectOptions.speedUpWithOxlint.title,
3976
+ value: "speedUpWithOxlint"
3977
+ }
3978
+ ]
3946
3979
  },
3947
3980
  {
3948
3981
  name: "needsPrettier",
@@ -3985,10 +4018,11 @@ async function init2() {
3985
4018
  needsRouter = argv.router || argv["vue-router"],
3986
4019
  needsPinia = argv.pinia,
3987
4020
  needsVitest = argv.vitest || argv.tests,
3988
- needsEslint = argv.eslint || argv["eslint-with-prettier"],
3989
4021
  needsPrettier = argv["eslint-with-prettier"],
3990
4022
  needsDevTools = argv.devtools || argv["vue-devtools"]
3991
4023
  } = result;
4024
+ const needsEslint = Boolean(argv.eslint || argv["eslint-with-prettier"] || result.needsEslint);
4025
+ const needsOxlint = result.needsEslint === "speedUpWithOxlint";
3992
4026
  const { needsE2eTesting } = result;
3993
4027
  const needsCypress = argv.cypress || argv.tests || needsE2eTesting === "cypress";
3994
4028
  const needsCypressCT = needsCypress && !needsVitest;
@@ -4094,6 +4128,7 @@ ${language.infos.scaffolding} ${root}...`);
4094
4128
  if (needsEslint) {
4095
4129
  renderEslint(root, {
4096
4130
  needsTypeScript,
4131
+ needsOxlint,
4097
4132
  needsVitest,
4098
4133
  needsCypress,
4099
4134
  needsCypressCT,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-vue",
3
- "version": "3.11.2",
3
+ "version": "3.12.0",
4
4
  "description": "🛠️ The recommended way to start a Vite-powered Vue project",
5
5
  "type": "module",
6
6
  "bin": {
@@ -28,9 +28,9 @@
28
28
  "devDependencies": {
29
29
  "@tsconfig/node20": "^20.1.4",
30
30
  "@types/eslint": "^9.6.1",
31
- "@types/node": "^20.17.0",
31
+ "@types/node": "^20.17.6",
32
32
  "@types/prompts": "^2.4.9",
33
- "@vue/create-eslint-config": "0.4.3",
33
+ "@vue/create-eslint-config": "^0.6.0",
34
34
  "@vue/tsconfig": "^0.5.1",
35
35
  "ejs": "^3.1.10",
36
36
  "esbuild": "^0.24.0",
@@ -40,8 +40,8 @@
40
40
  "lint-staged": "^15.2.10",
41
41
  "prettier": "^3.3.3",
42
42
  "prompts": "^2.4.2",
43
- "vitest": "^2.1.3",
44
- "zx": "^8.1.9"
43
+ "vitest": "^2.1.4",
44
+ "zx": "^8.2.0"
45
45
  },
46
46
  "lint-staged": {
47
47
  "*.{js,ts,vue,json}": [
@@ -1,5 +1,5 @@
1
1
  <!DOCTYPE html>
2
- <html lang="en">
2
+ <html lang="">
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <link rel="icon" href="/favicon.ico">
@@ -6,12 +6,12 @@ case `uname` in
6
6
  esac
7
7
 
8
8
  if [ -z "$NODE_PATH" ]; then
9
- export NODE_PATH="/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.2/node_modules/typescript/bin/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.2/node_modules/typescript/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.2/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/node_modules"
9
+ export NODE_PATH="/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/bin/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.3/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/node_modules"
10
10
  else
11
- export NODE_PATH="/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.2/node_modules/typescript/bin/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.2/node_modules/typescript/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.2/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/node_modules:$NODE_PATH"
11
+ export NODE_PATH="/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/bin/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.3/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/node_modules:$NODE_PATH"
12
12
  fi
13
13
  if [ -x "$basedir/node" ]; then
14
- exec "$basedir/node" "$basedir/../../../../node_modules/.pnpm/typescript@5.6.2/node_modules/typescript/bin/tsc" "$@"
14
+ exec "$basedir/node" "$basedir/../../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/bin/tsc" "$@"
15
15
  else
16
- exec node "$basedir/../../../../node_modules/.pnpm/typescript@5.6.2/node_modules/typescript/bin/tsc" "$@"
16
+ exec node "$basedir/../../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/bin/tsc" "$@"
17
17
  fi
@@ -6,12 +6,12 @@ case `uname` in
6
6
  esac
7
7
 
8
8
  if [ -z "$NODE_PATH" ]; then
9
- export NODE_PATH="/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.2/node_modules/typescript/bin/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.2/node_modules/typescript/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.2/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/node_modules"
9
+ export NODE_PATH="/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/bin/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.3/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/node_modules"
10
10
  else
11
- export NODE_PATH="/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.2/node_modules/typescript/bin/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.2/node_modules/typescript/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.2/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/node_modules:$NODE_PATH"
11
+ export NODE_PATH="/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/bin/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/typescript@5.6.3/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/node_modules:$NODE_PATH"
12
12
  fi
13
13
  if [ -x "$basedir/node" ]; then
14
- exec "$basedir/node" "$basedir/../../../../node_modules/.pnpm/typescript@5.6.2/node_modules/typescript/bin/tsserver" "$@"
14
+ exec "$basedir/node" "$basedir/../../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/bin/tsserver" "$@"
15
15
  else
16
- exec node "$basedir/../../../../node_modules/.pnpm/typescript@5.6.2/node_modules/typescript/bin/tsserver" "$@"
16
+ exec node "$basedir/../../../../node_modules/.pnpm/typescript@5.6.3/node_modules/typescript/bin/tsserver" "$@"
17
17
  fi
@@ -6,9 +6,9 @@ case `uname` in
6
6
  esac
7
7
 
8
8
  if [ -z "$NODE_PATH" ]; then
9
- export NODE_PATH="/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/vite@5.4.9_@types+node@22.7.5/node_modules/vite/bin/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/vite@5.4.9_@types+node@22.7.5/node_modules/vite/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/vite@5.4.9_@types+node@22.7.5/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/node_modules"
9
+ export NODE_PATH="/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/vite@5.4.10_@types+node@22.7.5/node_modules/vite/bin/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/vite@5.4.10_@types+node@22.7.5/node_modules/vite/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/vite@5.4.10_@types+node@22.7.5/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/node_modules"
10
10
  else
11
- export NODE_PATH="/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/vite@5.4.9_@types+node@22.7.5/node_modules/vite/bin/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/vite@5.4.9_@types+node@22.7.5/node_modules/vite/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/vite@5.4.9_@types+node@22.7.5/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/node_modules:$NODE_PATH"
11
+ export NODE_PATH="/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/vite@5.4.10_@types+node@22.7.5/node_modules/vite/bin/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/vite@5.4.10_@types+node@22.7.5/node_modules/vite/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/vite@5.4.10_@types+node@22.7.5/node_modules:/Users/haoqun/Developer/vuejs/create-vue/node_modules/.pnpm/node_modules:$NODE_PATH"
12
12
  fi
13
13
  if [ -x "$basedir/node" ]; then
14
14
  exec "$basedir/node" "$basedir/../vite/bin/vite.js" "$@"