1 | const
|
2 | fs = require('fs'),
|
3 | logger = require('../helpers/logger'),
|
4 | log = logger('app:extension-manager'),
|
5 | warn = logger('app:extension-manager', 'red'),
|
6 | chalk = require('chalk'),
|
7 | appPaths = require('../app-paths')
|
8 |
|
9 | const extensionPath = appPaths.resolve.app('quasar.extensions.json')
|
10 |
|
11 | class ExtensionJson {
|
12 | constructor () {
|
13 | if (!fs.existsSync(extensionPath)) {
|
14 | this.extensions = {}
|
15 | return
|
16 | }
|
17 |
|
18 | try {
|
19 | this.extensions = require(extensionPath)
|
20 | }
|
21 | catch (e) {
|
22 | console.log(e)
|
23 | warn(`⚠️ [FAIL] quasar.extensions.json is malformed`)
|
24 | process.exit(1)
|
25 | }
|
26 | }
|
27 |
|
28 | list () {
|
29 | if (Object.keys(this.extensions).length === 0) {
|
30 | log(' No App Extensions are installed')
|
31 | log(' You can look for "quasar-app-extension-*" in npm registry.')
|
32 | return
|
33 | }
|
34 |
|
35 | log('Listing installed App Extensions')
|
36 | log()
|
37 |
|
38 | for (let ext in this.extensions) {
|
39 | console.log('Extension name: ' + chalk.green(ext))
|
40 | console.log('Extension prompts: ' + JSON.stringify(this.extensions[ext], null, 2))
|
41 | console.log()
|
42 | }
|
43 | }
|
44 |
|
45 | getList () {
|
46 | return this.extensions
|
47 | }
|
48 |
|
49 | set (extId, opts) {
|
50 | log(`Updating /quasar.extensions.json for "${extId}" extension ...`)
|
51 | this.extensions[extId] = opts
|
52 | this.__save()
|
53 | }
|
54 |
|
55 | setInternal (extId, opts) {
|
56 | const cfg = this.get(extId)
|
57 | cfg.__internal = opts
|
58 | this.set(extId, cfg)
|
59 | }
|
60 |
|
61 | remove (extId) {
|
62 | if (this.has(extId)) {
|
63 | log(`Removing "${extId}" extension from /quasar.extensions.json ...`)
|
64 | delete this.extensions[extId]
|
65 | this.__save()
|
66 | }
|
67 | }
|
68 |
|
69 | get (extId) {
|
70 | return this.extensions[extId] || {}
|
71 | }
|
72 |
|
73 | getPrompts (extId) {
|
74 | const { __internal, ...prompts } = this.get(extId)
|
75 | return prompts
|
76 | }
|
77 |
|
78 | getInternal (extId) {
|
79 | const cfg = this.get(extId)
|
80 | return cfg.__internal || {}
|
81 | }
|
82 |
|
83 | has (extId) {
|
84 | return this.extensions[extId] !== void 0
|
85 | }
|
86 |
|
87 | __save () {
|
88 | fs.writeFileSync(
|
89 | extensionPath,
|
90 | JSON.stringify(this.extensions, null, 2),
|
91 | 'utf-8'
|
92 | )
|
93 | }
|
94 | }
|
95 |
|
96 | module.exports = new ExtensionJson()
|