UNPKG

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