UNPKG

2.19 kBJavaScriptView Raw
1/**
2 * Quasar App Extension install script
3 *
4 * API: https://github.com/quasarframework/quasar/blob/master/app/lib/app-extension/InstallAPI.js
5 */
6const execa = require('execa')
7
8module.exports = api =>
9 new Promise(resolve => {
10 api.render('./templates/base', {}, true)
11 api.extendPackageJson({
12 devDependencies: {
13 '@types/node': '11.9.5'
14 }
15 })
16 // todo: detect if npm or yarn was used
17 execa('yarn')
18
19 if (api.prompts.rename) {
20 const glob = require('glob')
21 const fs = require('fs')
22 const path = require('path')
23
24 const quasarConfigPath = api.resolve.app('./quasar.conf.js')
25 const replaceRegex = /module\.exports = function \((ctx)?\) {\n\s*return {/
26 let quasarConfig = fs.readFileSync(quasarConfigPath, 'utf8')
27 if (!replaceRegex.test(quasarConfig)) {
28 console.log(`
29We could not automatically update your quasar.conf.js to
30use typescript. Quasar looks for *.js files by default.
31Please add this to your quasar.conf.js:
32
33sourceFiles: {
34 router: 'src/router/index.ts',
35 store: 'src/store/index.ts'
36}
37`)
38 }
39 quasarConfig = quasarConfig.replace(
40 replaceRegex,
41 `module.exports = function (ctx) {
42 return {
43 // Quasar looks for *.js files by default
44 sourceFiles: {
45 router: 'src/router/index.ts',
46 store: 'src/store/index.ts'
47 },`
48 )
49 fs.writeFileSync(quasarConfigPath, quasarConfig)
50
51 glob(api.resolve.app('src/**/*.js'), (err, files) => {
52 if (err) throw err
53 files.forEach(file => {
54 const newFile = path.parse(file)
55 newFile.ext = '.ts'
56 delete newFile.base
57 fs.renameSync(file, path.format(newFile))
58 })
59 glob(api.resolve.app('src/**/*.vue'), (err, files) => {
60 if (err) throw err
61 files.forEach(file => {
62 let text = fs.readFileSync(file, 'utf8')
63 text = text.replace(/<script.*>/, tag => {
64 tag = tag.replace(/lang=".{1,4}" ?/, '')
65 return tag.replace('<script', '<script lang="ts"')
66 })
67 fs.writeFileSync(file, text)
68 })
69 resolve()
70 })
71 })
72 }
73 })