UNPKG

2.09 kBJavaScriptView Raw
1const
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
9const extensionPath = appPaths.resolve.app('quasar.extensions.json')
10
11class 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
96module.exports = new ExtensionJson()