create-quasar 2.1.0 → 2.2.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 (139) hide show
  1. package/index.js +72 -54
  2. package/package.json +14 -18
  3. package/scripts/create-test-project.ts +26 -25
  4. package/templates/{eslint.config.base.js → __eslint.config.base.js} +3 -2
  5. package/templates/app/{eslint.config.js → __eslint.config.js} +2 -3
  6. package/templates/app/create-quasar-script.js +8 -0
  7. package/templates/app/quasar-v2/create-quasar-script.js +39 -0
  8. package/templates/app/quasar-v2/js-vite-2/BASE/README.md +4 -4
  9. package/templates/app/quasar-v2/js-vite-2/BASE/_.vscode/extensions.json +2 -2
  10. package/templates/app/quasar-v2/js-vite-2/BASE/_.vscode/settings.json +2 -2
  11. package/templates/app/quasar-v2/js-vite-2/BASE/_package.json +13 -14
  12. package/templates/app/quasar-v2/js-vite-2/BASE/index.html +3 -3
  13. package/templates/app/quasar-v2/js-vite-2/BASE/quasar.config.js +9 -10
  14. package/templates/app/quasar-v2/js-vite-2/BASE/src/App.vue +0 -11
  15. package/templates/app/quasar-v2/js-vite-2/BASE/src/components/EssentialLink.vue +7 -35
  16. package/templates/app/quasar-v2/js-vite-2/BASE/src/layouts/MainLayout.vue +2 -141
  17. package/templates/app/quasar-v2/js-vite-2/BASE/src/pages/ErrorNotFound.vue +0 -11
  18. package/templates/app/quasar-v2/js-vite-2/BASE/src/pages/IndexPage.vue +0 -11
  19. package/templates/app/quasar-v2/{ts-webpack-4/index.js → js-vite-2/create-quasar-script.js} +24 -7
  20. package/templates/app/quasar-v2/js-vite-2/eslint/_eslint.config.js +3 -3
  21. package/templates/app/quasar-v2/js-webpack-4/BASE/README.md +4 -4
  22. package/templates/app/quasar-v2/js-webpack-4/BASE/_.vscode/extensions.json +2 -2
  23. package/templates/app/quasar-v2/js-webpack-4/BASE/_.vscode/settings.json +2 -2
  24. package/templates/app/quasar-v2/js-webpack-4/BASE/_package.json +10 -11
  25. package/templates/app/quasar-v2/js-webpack-4/BASE/index.html +3 -3
  26. package/templates/app/quasar-v2/js-webpack-4/BASE/quasar.config.js +5 -6
  27. package/templates/app/quasar-v2/js-webpack-4/BASE/src/App.vue +0 -11
  28. package/templates/app/quasar-v2/js-webpack-4/BASE/src/components/EssentialLink.vue +7 -35
  29. package/templates/app/quasar-v2/js-webpack-4/BASE/src/layouts/MainLayout.vue +2 -141
  30. package/templates/app/quasar-v2/js-webpack-4/BASE/src/pages/ErrorNotFound.vue +0 -11
  31. package/templates/app/quasar-v2/js-webpack-4/BASE/src/pages/IndexPage.vue +0 -11
  32. package/templates/app/quasar-v2/{js-vite-2/index.js → js-webpack-4/create-quasar-script.js} +24 -7
  33. package/templates/app/quasar-v2/js-webpack-4/eslint/_eslint.config.js +3 -3
  34. package/templates/app/quasar-v2/ts-vite-2/BASE/README.md +4 -4
  35. package/templates/app/quasar-v2/ts-vite-2/BASE/_.vscode/extensions.json +2 -2
  36. package/templates/app/quasar-v2/ts-vite-2/BASE/_.vscode/settings.json +2 -2
  37. package/templates/app/quasar-v2/ts-vite-2/BASE/_package.json +13 -14
  38. package/templates/app/quasar-v2/ts-vite-2/BASE/index.html +3 -3
  39. package/templates/app/quasar-v2/ts-vite-2/BASE/quasar.config.ts +9 -10
  40. package/templates/app/quasar-v2/ts-vite-2/BASE/src/App.vue +0 -11
  41. package/templates/app/quasar-v2/ts-vite-2/BASE/src/components/EssentialLink.vue +2 -37
  42. package/templates/app/quasar-v2/ts-vite-2/BASE/src/components/ExampleComponent.vue +2 -98
  43. package/templates/app/quasar-v2/ts-vite-2/BASE/src/layouts/MainLayout.vue +2 -141
  44. package/templates/app/quasar-v2/ts-vite-2/BASE/src/pages/ErrorNotFound.vue +0 -11
  45. package/templates/app/quasar-v2/ts-vite-2/BASE/src/pages/IndexPage.vue +2 -90
  46. package/templates/app/quasar-v2/{ts-webpack-4/.eslintrc.cjs → ts-vite-2/__.eslintrc.cjs} +0 -1
  47. package/templates/app/quasar-v2/ts-vite-2/{index.js → create-quasar-script.js} +24 -7
  48. package/templates/app/quasar-v2/ts-vite-2/eslint/_eslint.config.js +3 -3
  49. package/templates/app/quasar-v2/ts-vite-2/i18n/src/boot/i18n.ts +2 -2
  50. package/templates/app/quasar-v2/ts-webpack-4/BASE/README.md +4 -4
  51. package/templates/app/quasar-v2/ts-webpack-4/BASE/_.vscode/extensions.json +2 -2
  52. package/templates/app/quasar-v2/ts-webpack-4/BASE/_.vscode/settings.json +2 -2
  53. package/templates/app/quasar-v2/ts-webpack-4/BASE/_package.json +10 -11
  54. package/templates/app/quasar-v2/ts-webpack-4/BASE/index.html +3 -3
  55. package/templates/app/quasar-v2/ts-webpack-4/BASE/quasar.config.ts +5 -6
  56. package/templates/app/quasar-v2/ts-webpack-4/BASE/src/App.vue +0 -11
  57. package/templates/app/quasar-v2/ts-webpack-4/BASE/src/components/EssentialLink.vue +2 -37
  58. package/templates/app/quasar-v2/ts-webpack-4/BASE/src/components/ExampleComponent.vue +2 -98
  59. package/templates/app/quasar-v2/ts-webpack-4/BASE/src/layouts/MainLayout.vue +2 -141
  60. package/templates/app/quasar-v2/ts-webpack-4/BASE/src/pages/ErrorNotFound.vue +0 -11
  61. package/templates/app/quasar-v2/ts-webpack-4/BASE/src/pages/IndexPage.vue +2 -90
  62. package/templates/app/quasar-v2/{ts-vite-2/.eslintrc.cjs → ts-webpack-4/__.eslintrc.cjs} +0 -1
  63. package/templates/app/quasar-v2/{js-webpack-4/index.js → ts-webpack-4/create-quasar-script.js} +24 -7
  64. package/templates/app/quasar-v2/ts-webpack-4/eslint/_eslint.config.js +3 -3
  65. package/templates/app/quasar-v2/ts-webpack-4/i18n/src/boot/i18n.ts +2 -2
  66. package/templates/app-extension/{eslint.config.js → __eslint.config.js} +3 -5
  67. package/templates/app-extension/ae-js/BASE/README.md +5 -5
  68. package/templates/app-extension/ae-js/BASE/_package.json +6 -6
  69. package/templates/app-extension/ae-js/BASE/src/index.js +1 -1
  70. package/templates/app-extension/ae-js/{index.js → create-quasar-script.js} +4 -14
  71. package/templates/app-extension/ae-js/install-script/src/install.js +1 -1
  72. package/templates/app-extension/ae-js/prompts-script/src/prompts.js +1 -1
  73. package/templates/app-extension/ae-js/uninstall-script/src/uninstall.js +1 -1
  74. package/templates/app-extension/ae-ts/BASE/README.md +6 -6
  75. package/templates/app-extension/ae-ts/BASE/_eslint.config.js +3 -2
  76. package/templates/app-extension/ae-ts/BASE/_package.json +11 -11
  77. package/templates/app-extension/ae-ts/BASE/app-extension/README.md +7 -7
  78. package/templates/app-extension/ae-ts/BASE/app-extension/_package.json +9 -9
  79. package/templates/app-extension/ae-ts/BASE/app-extension/src/index.ts +2 -2
  80. package/templates/app-extension/ae-ts/BASE/app-extension/src/runtime/README.md +3 -3
  81. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/README.md +11 -11
  82. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/_package.json +4 -4
  83. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/index.html +3 -3
  84. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/quasar.config.ts +0 -2
  85. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/quasar.extensions.json +1 -1
  86. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-vite/src/quasar.d.ts +1 -1
  87. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/README.md +10 -10
  88. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/_package.json +4 -4
  89. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/index.html +3 -3
  90. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/quasar.config.ts +0 -2
  91. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/quasar.extensions.json +1 -1
  92. package/templates/app-extension/ae-ts/BASE/playground/quasar-cli-webpack/src/quasar.d.ts +1 -1
  93. package/templates/app-extension/ae-ts/{index.js → create-quasar-script.js} +11 -6
  94. package/templates/app-extension/create-quasar-script.js +17 -0
  95. package/templates/ui-kit/{eslint.config.js → __eslint.config.js} +2 -2
  96. package/templates/ui-kit/{index.js → create-quasar-script.js} +8 -5
  97. package/templates/ui-kit/quasar-v2/BASE/LICENSE +1 -1
  98. package/templates/ui-kit/quasar-v2/BASE/README.md +4 -4
  99. package/templates/ui-kit/quasar-v2/BASE/ui/README.md +29 -29
  100. package/templates/ui-kit/quasar-v2/BASE/ui/_package.json +4 -4
  101. package/templates/ui-kit/quasar-v2/BASE/ui/build/index.js +1 -1
  102. package/templates/ui-kit/quasar-v2/BASE/ui/build/script.javascript.js +2 -2
  103. package/templates/ui-kit/quasar-v2/BASE/ui/dev/src/index.template.html +10 -5
  104. package/templates/ui-kit/quasar-v2/BASE/ui/dev/src/layouts/MyLayout.vue +1 -1
  105. package/templates/ui-kit/quasar-v2/BASE/ui/dev/src/pages/Test1.vue +4 -4
  106. package/templates/ui-kit/quasar-v2/BASE/ui/src/index.sass +2 -2
  107. package/templates/ui-kit/quasar-v2/BASE/ui/src/vue-plugin.js +6 -6
  108. package/templates/ui-kit/quasar-v2/BASE/ui/umd-test.html +2 -2
  109. package/templates/ui-kit/quasar-v2/ae/app-extension/README.md +6 -6
  110. package/templates/ui-kit/quasar-v2/ae/app-extension/_package.json +5 -5
  111. package/templates/ui-kit/quasar-v2/ae/app-extension/src/boot/register.js +1 -1
  112. package/templates/ui-kit/quasar-v2/ae/app-extension/src/index.js +7 -7
  113. package/templates/ui-kit/quasar-v2/{index.js → create-quasar-script.js} +5 -2
  114. package/templates/ui-kit/quasar-v2/ui-component/ui/src/components/Component.js +3 -3
  115. package/templates/ui-kit/quasar-v2/ui-component/ui/src/components/Component.sass +1 -1
  116. package/templates/ui-kit/quasar-v2/ui-directive/ui/src/directives/Directive.js +1 -1
  117. package/templates/ui-kit/quasar-v2/ui-directive/ui/src/directives/Directive.sass +1 -1
  118. package/utils/index.js +106 -93
  119. package/utils/logger.js +52 -50
  120. package/utils/template.js +280 -0
  121. package/eslint.config.base.js +0 -19
  122. package/eslint.config.js +0 -47
  123. package/templates/app/index.js +0 -8
  124. package/templates/app/quasar-v2/index.js +0 -56
  125. package/templates/app/quasar-v2/js-vite-2/axios/src/boot/axios.js +0 -24
  126. package/templates/app/quasar-v2/js-vite-2/scss/src/css/app.scss +0 -1
  127. package/templates/app/quasar-v2/js-vite-2/scss/src/css/quasar.variables.scss +0 -25
  128. package/templates/app/quasar-v2/js-webpack-4/axios/src/boot/axios.js +0 -24
  129. package/templates/app/quasar-v2/js-webpack-4/scss/src/css/app.scss +0 -1
  130. package/templates/app/quasar-v2/js-webpack-4/scss/src/css/quasar.variables.scss +0 -25
  131. package/templates/app/quasar-v2/ts-vite-2/axios/src/boot/axios.ts +0 -31
  132. package/templates/app/quasar-v2/ts-vite-2/scss/src/css/app.scss +0 -1
  133. package/templates/app/quasar-v2/ts-vite-2/scss/src/css/quasar.variables.scss +0 -25
  134. package/templates/app/quasar-v2/ts-webpack-4/axios/src/boot/axios.ts +0 -31
  135. package/templates/app/quasar-v2/ts-webpack-4/scss/src/css/app.scss +0 -1
  136. package/templates/app/quasar-v2/ts-webpack-4/scss/src/css/quasar.variables.scss +0 -25
  137. package/templates/app-extension/index.js +0 -15
  138. /package/templates/app/quasar-v2/js-vite-2/{.eslintrc.cjs → __.eslintrc.cjs} +0 -0
  139. /package/templates/app/quasar-v2/js-webpack-4/{.eslintrc.cjs → __.eslintrc.cjs} +0 -0
package/utils/index.js CHANGED
@@ -3,23 +3,37 @@ import { fileURLToPath } from 'node:url'
3
3
  import { sep, dirname, normalize, join, resolve, extname } from 'node:path'
4
4
  import { execSync as exec } from 'node:child_process'
5
5
  import { sync as spawnSync } from 'cross-spawn'
6
-
7
- import { emptyDirSync, ensureDirSync, ensureFileSync, copySync } from 'fs-extra/esm'
6
+ import {
7
+ emptyDirSync,
8
+ ensureDirSync,
9
+ ensureFileSync,
10
+ copySync
11
+ } from 'fs-extra/esm'
8
12
  import promptUser from 'prompts'
9
- import compileTemplate from 'lodash/template.js'
10
13
  import { globSync } from 'tinyglobby'
11
14
  import { yellow, green } from 'kolorist'
12
15
 
16
+ import { renderTemplate as renderTemplateFn } from './template.js'
13
17
  import logger from './logger.js'
14
18
 
15
- const TEMPLATING_FILE_EXTENSIONS = [ '', '.json', '.js', '.cjs', '.ts', '.vue', '.md', '.html', '.sass' ]
19
+ const TEMPLATING_FILE_EXTENSIONS = [
20
+ '',
21
+ '.json',
22
+ '.js',
23
+ '.cjs',
24
+ '.ts',
25
+ '.vue',
26
+ '.md',
27
+ '.html',
28
+ '.sass'
29
+ ]
16
30
 
17
31
  /**
18
32
  * @param {Record<string, any>} scope
19
33
  * @param {promptUser.PromptObject[]} questions
20
34
  * @param {promptUser.Options} opts
21
35
  */
22
- async function prompts (scope, questions, opts) {
36
+ async function prompts(scope, questions, opts) {
23
37
  const options = opts || {
24
38
  onCancel: () => {
25
39
  logger.fatal('Scaffolding cancelled')
@@ -30,7 +44,7 @@ async function prompts (scope, questions, opts) {
30
44
  Object.assign(scope, answers)
31
45
  }
32
46
 
33
- function createTargetDir (scope) {
47
+ function createTargetDir(scope) {
34
48
  console.log()
35
49
  logger.log('Generating files...')
36
50
  console.log()
@@ -39,10 +53,10 @@ function createTargetDir (scope) {
39
53
  fn(scope.projectFolder)
40
54
  }
41
55
 
42
- function convertArrayToObject (arr) {
56
+ function convertArrayToObject(arr) {
43
57
  const acc = {}
44
58
  arr.forEach(key => {
45
- acc[ key ] = true
59
+ acc[key] = true
46
60
  })
47
61
  return acc
48
62
  }
@@ -53,37 +67,30 @@ const runningPackageManager = (() => {
53
67
  return
54
68
  }
55
69
 
56
- const [ name, version ] = userAgent.split(' ')[ 0 ].split('/')
70
+ const [name, version] = userAgent.split(' ')[0].split('/')
57
71
  return { name, version }
58
72
  })()
59
73
 
60
- function getCallerPath () {
74
+ function getCallerPath() {
61
75
  const _prepareStackTrace = Error.prepareStackTrace
62
76
  Error.prepareStackTrace = (_, stack) => stack
63
77
  const stack = new Error().stack.slice(1)
64
78
  Error.prepareStackTrace = _prepareStackTrace
65
- const filename = stack[ 1 ].getFileName()
79
+ const filename = stack[1].getFileName()
66
80
  return dirname(
67
- filename.startsWith('file://')
68
- ? fileURLToPath(filename)
69
- : filename
81
+ filename.startsWith('file://') ? fileURLToPath(filename) : filename
70
82
  )
71
83
  }
72
84
 
73
- function renderTemplate (relativePath, scope) {
85
+ function renderTemplate(relativePath, scope) {
74
86
  const templateDir = join(getCallerPath(), relativePath)
75
- const files = globSync([ '**/*' ], { cwd: templateDir })
87
+ const files = globSync(['**/*'], { cwd: templateDir })
76
88
 
77
89
  for (const rawPath of files) {
78
- const targetRelativePath = rawPath.split('/').map(name => {
79
- // dotfiles are ignored when published to npm, therefore in templates
80
- // we need to prefix them with an underscore (e.g. "_.gitignore")
81
- // Also, some tools like ESLint expect valid config files, therefore
82
- // we also prefix files like "package.json" too. (e.g. "_package.json")
83
- return name.startsWith('_')
84
- ? name.slice(1)
85
- : name
86
- }).join('/')
90
+ const targetRelativePath = rawPath
91
+ .split('/')
92
+ .map(name => (name.startsWith('_') ? name.slice(1) : name))
93
+ .join('/')
87
94
 
88
95
  const targetPath = resolve(scope.projectFolder, targetRelativePath)
89
96
  const sourcePath = resolve(templateDir, rawPath)
@@ -91,13 +98,12 @@ function renderTemplate (relativePath, scope) {
91
98
 
92
99
  ensureFileSync(targetPath)
93
100
 
94
- console.log(` ${ green('-') } ${ targetRelativePath }`)
101
+ console.log(` ${green('-')} ${targetRelativePath}`)
95
102
 
96
103
  if (TEMPLATING_FILE_EXTENSIONS.includes(extension)) {
97
104
  const rawContent = readFileSync(sourcePath, 'utf-8')
98
- const template = compileTemplate(rawContent, { interpolate: /<%=([\s\S]+?)%>/g })
99
105
 
100
- let newContent = template(scope)
106
+ let newContent = renderTemplateFn(rawContent, scope)
101
107
  if (extension === '.json') {
102
108
  try {
103
109
  // try to format the JSON
@@ -108,20 +114,19 @@ function renderTemplate (relativePath, scope) {
108
114
  }
109
115
 
110
116
  writeFileSync(targetPath, newContent, 'utf-8')
111
- }
112
- else {
117
+ } else {
113
118
  copySync(sourcePath, targetPath)
114
119
  }
115
120
  }
116
121
  }
117
122
 
118
- function isValidPackageName (projectName) {
123
+ function isValidPackageName(projectName) {
119
124
  return /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(
120
125
  projectName
121
126
  )
122
127
  }
123
128
 
124
- function inferPackageName (projectFolder) {
129
+ function inferPackageName(projectFolder) {
125
130
  return projectFolder
126
131
  .trim()
127
132
  .toLowerCase()
@@ -130,22 +135,21 @@ function inferPackageName (projectFolder) {
130
135
  .replace(/[^a-z0-9-~]+/g, '-')
131
136
  }
132
137
 
133
- function escapeString (val) {
138
+ function escapeString(val) {
134
139
  return JSON.stringify(val).slice(1, -1)
135
140
  }
136
141
 
137
- function getGitUser () {
142
+ function getGitUser() {
138
143
  let name
139
144
  let email
140
145
 
141
146
  try {
142
147
  name = exec('git config --get user.name')
143
148
  email = exec('git config --get user.email')
144
- }
145
- catch (_) {}
149
+ } catch {}
146
150
 
147
151
  name = name && JSON.stringify(name.toString().trim()).slice(1, -1)
148
- email = email && (' <' + email.toString().trim() + '>')
152
+ email = email && ' <' + email.toString().trim() + '>'
149
153
 
150
154
  return (name || '') + (email || '')
151
155
  }
@@ -155,20 +159,28 @@ function getGitUser () {
155
159
  *
156
160
  * @param {Object} scope Data from questionnaire.
157
161
  */
158
- function printFinalMessage (scope) {
162
+ function printFinalMessage(scope) {
159
163
  const verPrefix = scope.quasarVersion ? scope.quasarVersion + '.' : ''
160
164
  const message = `
161
165
  To get started:
162
- ${ yellow(`
163
- cd ${ scope.projectFolderName }${ scope.skipDepsInstall !== true && scope.packageManager === false ? `
166
+ ${yellow(`
167
+ cd ${scope.projectFolderName}${
168
+ scope.skipDepsInstall !== true && scope.packageManager === false
169
+ ? `
164
170
  yarn #or: npm install
165
- yarn lint --fix # or: npm run lint -- --fix` : '' }${ scope.skipDepsInstall !== true ? `
166
- quasar dev # or: yarn quasar dev # or: npx quasar dev` : '' }
167
- `) }
168
- Documentation can be found at: https://${ verPrefix }quasar.dev
171
+ yarn lint --fix # or: npm run lint -- --fix`
172
+ : ''
173
+ }${
174
+ scope.skipDepsInstall !== true
175
+ ? `
176
+ quasar dev # or: yarn quasar dev # or: npx quasar dev`
177
+ : ''
178
+ }
179
+ `)}
180
+ Documentation can be found at: https://${verPrefix}quasar.dev
169
181
 
170
182
  Quasar is relying on donations to evolve. We'd be very grateful if you can
171
- read our manifest on "Why donations are important": https://${ verPrefix }quasar.dev/why-donate
183
+ read our manifest on "Why donations are important": https://${verPrefix}quasar.dev/why-donate
172
184
  Donation campaign: https://donate.quasar.dev
173
185
  Any amount is very welcome.
174
186
  If invoices are required, please first contact Razvan Stoenescu.
@@ -182,81 +194,77 @@ function printFinalMessage (scope) {
182
194
  console.log(message)
183
195
  }
184
196
 
185
- function runCommand (cmd, args, options) {
197
+ function runCommand(cmd, args, options) {
186
198
  console.log()
187
199
 
188
- const runner = spawnSync(
189
- cmd,
190
- args,
191
- { cwd: process.cwd(), stdio: 'inherit', ...options }
192
- )
200
+ const runner = spawnSync(cmd, args, {
201
+ cwd: process.cwd(),
202
+ stdio: 'inherit',
203
+ ...options
204
+ })
193
205
 
194
206
  console.log()
195
207
 
196
208
  if (runner.status) {
197
- console.log(` ${ cmd } FAILED...`)
209
+ console.log(` ${cmd} FAILED...`)
198
210
  console.log()
199
- throw new Error(`${ cmd } FAILED`)
211
+ throw new Error(`${cmd} FAILED`)
200
212
  }
201
213
  }
202
214
 
203
- function installDeps (scope) {
204
- const args = [ 'install' ]
215
+ function installDeps(scope) {
216
+ const args = ['install']
205
217
  // Related to scripts/create-test-project.ts
206
218
  if (process.env.CREATE_TEST_PROJECT_OVERRIDE === 'true') {
207
219
  // If we don't use this flag, then the test project will become part of the monorepo and fail to install properly
208
220
  args.push('--ignore-workspace')
209
221
  }
210
222
 
211
- return runCommand(
212
- scope.packageManager,
213
- args,
214
- { cwd: scope.projectFolder }
215
- )
223
+ return runCommand(scope.packageManager, args, { cwd: scope.projectFolder })
216
224
  }
217
225
 
218
- function lintFolder (scope) {
226
+ function lintFolder(scope) {
219
227
  return runCommand(
220
228
  scope.packageManager,
221
229
  scope.packageManager === 'npm'
222
- ? [ 'run', 'lint', '--', '--fix' ]
223
- : [ 'run', 'lint', '--fix' ],
230
+ ? ['run', 'lint', '--', '--fix']
231
+ : ['run', 'lint', '--fix'],
224
232
  { cwd: scope.projectFolder }
225
233
  )
226
234
  }
227
235
 
228
- function formatFolder (scope) {
229
- return runCommand(
230
- scope.packageManager,
231
- [ 'run', 'format' ],
232
- { cwd: scope.projectFolder }
233
- )
236
+ function formatFolder(scope) {
237
+ return runCommand(scope.packageManager, ['run', 'format'], {
238
+ cwd: scope.projectFolder
239
+ })
234
240
  }
235
241
 
236
- function hasGit () {
242
+ function hasGit() {
237
243
  try {
238
244
  exec('git --version')
239
245
  return true
240
- }
241
- catch (_) {}
246
+ } catch {}
242
247
  }
243
248
 
244
- function folderHasGit (cwd) {
249
+ function folderHasGit(cwd) {
245
250
  try {
246
251
  exec('git status', { stdio: 'ignore', cwd })
247
252
  return true
248
- }
249
- catch (_) {}
253
+ } catch {}
250
254
  }
251
255
 
252
- function initializeGit (projectFolder) {
256
+ function initializeGit(projectFolder) {
253
257
  if (hasGit() !== true) {
254
- logger.log('Git is not installed on the system, so skipping Git repo initialization.')
258
+ logger.log(
259
+ 'Git is not installed on the system, so skipping Git repo initialization.'
260
+ )
255
261
  return
256
262
  }
257
263
 
258
264
  if (folderHasGit(projectFolder) === true) {
259
- logger.log('A parent of the project folder is already a Git repository, so skipping Git initialization.')
265
+ logger.log(
266
+ 'A parent of the project folder is already a Git repository, so skipping Git initialization.'
267
+ )
260
268
  return
261
269
  }
262
270
 
@@ -267,16 +275,20 @@ function initializeGit (projectFolder) {
267
275
 
268
276
  // Provide useful feedback to the user if they have GPG signing enabled to avoid feeling that the process is hanging
269
277
  try {
270
- const needsSigning = exec('git config --get commit.gpgsign', { cwd: projectFolder }).toString().trim()
278
+ const needsSigning = exec('git config --get commit.gpgsign', {
279
+ cwd: projectFolder
280
+ })
281
+ .toString()
282
+ .trim()
271
283
  if (needsSigning === 'true') {
272
284
  logger.log('Creating initial commit (waiting for GPG signing)...')
273
285
  }
274
- }
275
- catch (_) {}
286
+ } catch {}
276
287
 
277
- exec('git commit -m "Initialize the project 🚀" --no-verify', { cwd: projectFolder })
278
- }
279
- catch (_) {
288
+ exec('git commit -m "Initialize the project 🚀" --no-verify', {
289
+ cwd: projectFolder
290
+ })
291
+ } catch {
280
292
  logger.warn('Could not initialize Git repository. Please do this manually.')
281
293
  return
282
294
  }
@@ -292,14 +304,16 @@ const quasarConfigFilenameList = [
292
304
  'quasar.conf.js' // legacy
293
305
  ]
294
306
 
295
- function ensureOutsideProject () {
307
+ function ensureOutsideProject() {
296
308
  let dir = process.cwd()
297
309
 
298
- while (dir.length && dir[ dir.length - 1 ] !== sep) {
310
+ while (dir.length && dir[dir.length - 1] !== sep) {
299
311
  for (const name of quasarConfigFilenameList) {
300
312
  const filename = join(dir, name)
301
313
  if (existsSync(filename)) {
302
- logger.fatal('Error. This command must NOT be executed inside of a Quasar project folder.')
314
+ logger.fatal(
315
+ 'Error. This command must NOT be executed inside of a Quasar project folder.'
316
+ )
303
317
  }
304
318
  }
305
319
 
@@ -324,10 +338,10 @@ const commonPrompts = {
324
338
  productName: {
325
339
  type: 'text',
326
340
  name: 'productName',
327
- message: 'Project product name: (must start with letter if building mobile apps)',
341
+ message:
342
+ 'Project product name: (must start with letter if building mobile apps)',
328
343
  initial: 'Quasar App',
329
- validate: val =>
330
- (val && val.length > 0) || 'Invalid product name'
344
+ validate: val => (val && val.length > 0) || 'Invalid product name'
331
345
  },
332
346
 
333
347
  description: {
@@ -336,8 +350,7 @@ const commonPrompts = {
336
350
  message: 'Project description:',
337
351
  initial: 'A Quasar Project',
338
352
  format: escapeString,
339
- validate: val =>
340
- val.length > 0 || 'Invalid project description'
353
+ validate: val => val.length > 0 || 'Invalid project description'
341
354
  },
342
355
 
343
356
  license: {
@@ -348,7 +361,7 @@ const commonPrompts = {
348
361
  }
349
362
  }
350
363
 
351
- export async function injectAuthor (scope) {
364
+ export async function injectAuthor(scope) {
352
365
  const author = getGitUser()
353
366
 
354
367
  if (author) {
package/utils/logger.js CHANGED
@@ -1,9 +1,13 @@
1
1
  import {
2
- bgGreen, green,
2
+ bgGreen,
3
+ green,
3
4
  inverse,
4
- bgRed, red,
5
- bgYellow, yellow,
6
- black, white,
5
+ bgRed,
6
+ red,
7
+ bgYellow,
8
+ yellow,
9
+ black,
10
+ white,
7
11
  underline
8
12
  } from 'kolorist'
9
13
 
@@ -13,10 +17,10 @@ import readline from 'node:readline'
13
17
  * Pills
14
18
  */
15
19
 
16
- const successPill = msg => bgGreen(black(` ${ msg } `))
17
- const infoPill = msg => inverse(` ${ msg } `)
18
- const errorPill = msg => bgRed(white(` ${ msg } `))
19
- const warningPill = msg => bgYellow(black(` ${ msg } `))
20
+ const successPill = msg => bgGreen(black(` ${msg} `))
21
+ const infoPill = msg => inverse(` ${msg} `)
22
+ const errorPill = msg => bgRed(white(` ${msg} `))
23
+ const warningPill = msg => bgYellow(black(` ${msg} `))
20
24
 
21
25
  /**
22
26
  * Main approach
@@ -27,7 +31,7 @@ const banner = 'Quasar ' + dot
27
31
  const greenBanner = green(banner)
28
32
  const redBanner = red(banner)
29
33
  const yellowBanner = yellow(banner)
30
- const tipBanner = `${ green('App') } ${ dot } ${ successPill('TIP') } ${ dot } 🚀 `
34
+ const tipBanner = `${green('App')} ${dot} ${successPill('TIP')} ${dot} 🚀 `
31
35
 
32
36
  const clearConsole = process.stdout.isTTY
33
37
  ? () => {
@@ -39,36 +43,31 @@ const clearConsole = process.stdout.isTTY
39
43
  }
40
44
  : () => {}
41
45
 
42
- function tip (msg) {
43
- console.log(msg ? ` ${ tipBanner } ${ msg }` : '')
46
+ function tip(msg) {
47
+ console.log(msg ? ` ${tipBanner} ${msg}` : '')
44
48
  }
45
49
 
46
- function log (msg) {
47
- console.log(msg ? ` ${ greenBanner } ${ msg }` : '')
50
+ function log(msg) {
51
+ console.log(msg ? ` ${greenBanner} ${msg}` : '')
48
52
  }
49
53
 
50
- function warn (msg, pill) {
54
+ function warn(msg, pill) {
51
55
  if (msg !== void 0) {
52
- const pillBanner = pill !== void 0
53
- ? bgYellow(black('', pill, '')) + ' '
54
- : ''
56
+ const pillBanner =
57
+ pill !== void 0 ? bgYellow(black('', pill, '')) + ' ' : ''
55
58
 
56
- console.warn(` ${ yellowBanner } ⚠️ ${ pillBanner }${ msg }`)
57
- }
58
- else {
59
+ console.warn(` ${yellowBanner} ⚠️ ${pillBanner}${msg}`)
60
+ } else {
59
61
  console.warn()
60
62
  }
61
63
  }
62
64
 
63
- function fatal (msg, pill) {
65
+ function fatal(msg, pill) {
64
66
  if (msg !== void 0) {
65
- const pillBanner = pill !== void 0
66
- ? errorPill(pill) + ' '
67
- : ''
67
+ const pillBanner = pill !== void 0 ? errorPill(pill) + ' ' : ''
68
68
 
69
- console.error(`\n ${ redBanner } ⚠️ ${ pillBanner }${ msg }\n`)
70
- }
71
- else {
69
+ console.error(`\n ${redBanner} ⚠️ ${pillBanner}${msg}\n`)
70
+ } else {
72
71
  console.error()
73
72
  }
74
73
 
@@ -79,50 +78,53 @@ function fatal (msg, pill) {
79
78
  * Extended approach - Status & pills
80
79
  */
81
80
 
82
- function success (msg, title = 'SUCCESS') {
83
- console.log(` ${ greenBanner } ${ successPill(title) } ${ green(dot + ' ' + msg) }`)
81
+ function success(msg, title = 'SUCCESS') {
82
+ console.log(` ${greenBanner} ${successPill(title)} ${green(dot + ' ' + msg)}`)
84
83
  }
85
- function getSuccess (msg, title) {
86
- return ` ${ greenBanner } ${ successPill(title) } ${ green(dot + ' ' + msg) }`
84
+ function getSuccess(msg, title) {
85
+ return ` ${greenBanner} ${successPill(title)} ${green(dot + ' ' + msg)}`
87
86
  }
88
87
 
89
- function info (msg, title = 'INFO') {
90
- console.log(` ${ greenBanner } ${ infoPill(title) } ${ green(dot) } ${ msg }`)
88
+ function info(msg, title = 'INFO') {
89
+ console.log(` ${greenBanner} ${infoPill(title)} ${green(dot)} ${msg}`)
91
90
  }
92
- function getInfo (msg, title) {
93
- return ` ${ greenBanner } ${ infoPill(title) } ${ green(dot) } ${ msg }`
91
+ function getInfo(msg, title) {
92
+ return ` ${greenBanner} ${infoPill(title)} ${green(dot)} ${msg}`
94
93
  }
95
94
 
96
- function error (msg, title = 'ERROR') {
97
- console.log(` ${ redBanner } ${ errorPill(title) } ${ red(dot + ' ' + msg) }`)
95
+ function error(msg, title = 'ERROR') {
96
+ console.log(` ${redBanner} ${errorPill(title)} ${red(dot + ' ' + msg)}`)
98
97
  }
99
- function getError (msg, title = 'ERROR') {
100
- return ` ${ redBanner } ${ errorPill(title) } ${ red(dot + ' ' + msg) }`
98
+ function getError(msg, title = 'ERROR') {
99
+ return ` ${redBanner} ${errorPill(title)} ${red(dot + ' ' + msg)}`
101
100
  }
102
101
 
103
- function warning (msg, title = 'WARNING') {
104
- console.log(` ${ yellowBanner } ${ warningPill(title) } ${ yellow(dot + ' ' + msg) }`)
102
+ function warning(msg, title = 'WARNING') {
103
+ console.log(
104
+ ` ${yellowBanner} ${warningPill(title)} ${yellow(dot + ' ' + msg)}`
105
+ )
105
106
  }
106
- function getWarning (msg, title = 'WARNING') {
107
- return ` ${ yellowBanner } ${ warningPill(title) } ${ yellow(dot + ' ' + msg) }`
107
+ function getWarning(msg, title = 'WARNING') {
108
+ return ` ${yellowBanner} ${warningPill(title)} ${yellow(dot + ' ' + msg)}`
108
109
  }
109
110
 
110
111
  /**
111
112
  * Progress related
112
113
  */
113
114
 
114
- function progress (msg, token) {
115
- const parseMsg = token !== void 0
116
- ? text => text.replace('___', underline(green(token)))
117
- : text => text
115
+ function progress(msg, token) {
116
+ const parseMsg =
117
+ token !== void 0
118
+ ? text => text.replace('___', underline(green(token)))
119
+ : text => text
118
120
 
119
121
  info(parseMsg(msg), 'WAIT')
120
122
 
121
123
  const startTime = Date.now()
122
124
 
123
- return msg => {
124
- const diffTime = +new Date() - startTime
125
- success(`${ parseMsg(msg) } ${ dot } ${ diffTime }ms`, 'DONE')
125
+ return progressMessage => {
126
+ const diffTime = Number(new Date()) - startTime
127
+ success(`${parseMsg(progressMessage)} ${dot} ${diffTime}ms`, 'DONE')
126
128
  log()
127
129
  }
128
130
  }