UNPKG

1.67 kBJavaScriptView Raw
1const { path, fs, chalk, spinner, logger, installPackages, gitInfo, SherryError } = require('sherry-utils')
2const spawn = require('cross-spawn')
3
4module.exports = class GeneratorContext {
5 constructor(sherry, generator) {
6 this.sherry = sherry
7 this.generator = generator
8 this.spinner = spinner
9 this.chalk = chalk
10 this.logger = logger
11 this.fs = fs
12 }
13
14 set data(data) {
15 this._data = data
16 }
17
18 get data() {
19 return this._data
20 }
21
22 get pkg() {
23 try {
24 return require(path.join(this.outDir, 'package.json'))
25 } catch (err) {
26 return {}
27 }
28 }
29
30 get answers() {
31 return this._answers
32 }
33
34 get gitUser() {
35 return gitInfo(this.sherry.opts.mock)
36 }
37
38 get outFolder() {
39 return path.basename(this.sherry.opts.outDir)
40 }
41
42 get outDir() {
43 return this.sherry.opts.outDir
44 }
45
46 get npmClient() {
47 return this.sherry.opts.npmClient
48 }
49
50 gitInit() {
51 const ps = spawn.sync('git', ['init'], {
52 stdio: 'ignore',
53 cwd: this.outDir
54 })
55 if (ps.status === 0) {
56 logger.success('Initialized empty Git repository')
57 } else {
58 logger.debug(`git init failed in ${this.outDir}`)
59 }
60 }
61
62 npmInstall(opts) {
63 return installPackages(
64 Object.assign(
65 {
66 registry: this.sherry.opts.registry,
67 cwd: this.outDir
68 },
69 opts
70 )
71 )
72 }
73
74 showProjectTips() {
75 spinner.stop() // Stop when necessary
76 logger.success(`Generated into ${chalk.underline(this.outDir)}`)
77 }
78
79 createError(message) {
80 return new SherryError(message)
81 }
82
83 getCustomContext(key) {
84 return this._customContext && this._customContext[key]
85 }
86}