@voxgig/create-sdkgen 0.1.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/create-sdkgen CHANGED
@@ -74,6 +74,8 @@ function generate(options) {
74
74
  target: options.target,
75
75
  feature: options.feature,
76
76
  }
77
+
78
+ // console.log('OPTIONS', options)
77
79
 
78
80
  createSdkGen.generate(spec)
79
81
  }
@@ -0,0 +1,261 @@
1
+ #!/usr/bin/env node
2
+
3
+ const Path = require('node:path')
4
+ const { statSync } = require('node:fs')
5
+ const { parseArgs } = require('node:util')
6
+
7
+ const { Gubu, Fault, One } = require('gubu')
8
+
9
+ const Pkg = require('../package.json')
10
+
11
+ const { CreateSdkGen } = require('../dist/create-sdkgen.js')
12
+
13
+ const rootpath = require.resolve('../dist/standard/Root')
14
+
15
+ let KONSOLE = global['con'+'sole']
16
+
17
+
18
+ run()
19
+
20
+
21
+ async function run() {
22
+ try {
23
+ let options = resolveOptions()
24
+
25
+ if(options.debug) {
26
+ DEBUG = true
27
+ }
28
+
29
+ if(options.version) {
30
+ version()
31
+ }
32
+
33
+ if(options.help) {
34
+ help()
35
+ }
36
+
37
+ if(options.version || options.help) {
38
+ exit()
39
+ }
40
+
41
+ options = validateOptions(options)
42
+
43
+ generate(options)
44
+ }
45
+ catch(err) {
46
+ handleError(err)
47
+ }
48
+ }
49
+
50
+
51
+ function exit(err) {
52
+ let code = 0
53
+ if(err) {
54
+ code = 1
55
+ }
56
+ process.exit(code)
57
+ }
58
+
59
+
60
+ function generate(options) {
61
+ const createSdkGen = CreateSdkGen({
62
+ debug: options.debug
63
+ })
64
+
65
+
66
+ const spec = {
67
+ root: 'Root',
68
+
69
+ name: options.name,
70
+ def: options.def,
71
+ dryrun: options.dryrun,
72
+ project: options.project,
73
+ install: options.install,
74
+ target: options.target,
75
+ feature: options.feature,
76
+ }
77
+
78
+ createSdkGen.generate(spec)
79
+ }
80
+
81
+
82
+
83
+ function resolveOptions() {
84
+
85
+ let args
86
+
87
+ try {
88
+ args = parseArgs({
89
+ allowPositionals: true,
90
+ allowNegative: true,
91
+ options: {
92
+ def: {
93
+ type: 'string',
94
+ short: 'd',
95
+ default: ''
96
+ },
97
+
98
+ project: {
99
+ type: 'string',
100
+ short: 'p',
101
+ default: 'standard'
102
+ },
103
+
104
+ dryrun: {
105
+ type: 'boolean',
106
+ short: 'y',
107
+ },
108
+
109
+ install: {
110
+ type: 'boolean',
111
+ short: 'y',
112
+ default: true,
113
+ },
114
+
115
+ target: {
116
+ type: 'string',
117
+ short: 't',
118
+ multiple: true
119
+ },
120
+
121
+ feature: {
122
+ type: 'string',
123
+ short: 'f',
124
+ multiple: true
125
+ },
126
+
127
+ debug: {
128
+ type: 'string',
129
+ short: 'g',
130
+ default: 'info'
131
+ },
132
+
133
+ help: {
134
+ type: 'boolean',
135
+ short: 'h',
136
+ },
137
+
138
+ version: {
139
+ type: 'boolean',
140
+ short: 'v',
141
+ },
142
+
143
+ }
144
+ })
145
+ }
146
+ catch(err) {
147
+ if('ERR_PARSE_ARGS_UNKNOWN_OPTION' === err.code) {
148
+ handleError(err.message.replace(/\. .+$/,'.'))
149
+ }
150
+ throw err
151
+ }
152
+
153
+ // Set fake name if -v or -h used.
154
+ let name = args.positionals[0]
155
+ name = null == name ? '' : name
156
+ name = '' === name && (args.values.help || args.values.version) ? '__none__' : name
157
+
158
+ targets = args.values.target || []
159
+ if( 1 < args.positionals.length ) {
160
+ targets.push(args.positionals.slice(1))
161
+ }
162
+
163
+ features = args.values.feature || []
164
+
165
+ const options = {
166
+ name,
167
+ def: args.values.def,
168
+ project: args.values.project,
169
+ dryrun: !!args.values.dryrun,
170
+ install: !!args.values.install,
171
+ target: targets,
172
+ feature: features,
173
+ debug: args.values.debug,
174
+ help: !!args.values.help,
175
+ version: !!args.values.version,
176
+ }
177
+
178
+ // console.log('ARGS', args, options)
179
+
180
+ return options
181
+ }
182
+
183
+
184
+ function validateOptions(rawOptions) {
185
+ const optShape = Gubu({
186
+ name: Fault('The first argument must be the project name.', String),
187
+ def: '',
188
+ project: String,
189
+ dryrun: Boolean,
190
+ install: Boolean,
191
+ target: [String],
192
+ feature: [String],
193
+ debug: String,
194
+ help: Boolean,
195
+ version: Boolean,
196
+ })
197
+
198
+ const err = []
199
+ const options = optShape(rawOptions,{err})
200
+
201
+ if(err[0]) {
202
+ handleError(err[0].text)
203
+ }
204
+
205
+ return options
206
+ }
207
+
208
+
209
+ function handleError(err) {
210
+ KONSOLE.log('Voxgig Create SDK Error: '+err)
211
+ exit(err)
212
+ }
213
+
214
+
215
+ function version() {
216
+ KONSOLE.log(Pkg.version)
217
+ }
218
+
219
+
220
+ function help() {
221
+ let s = `
222
+ Create a Voxgig SDK Generator project.
223
+
224
+ Usage: npm create @voxgig/sdkgen@latest <name> <args>
225
+
226
+ <name> is the name of the SDK project. This is also used to
227
+ create a project folder. If run against an existing folder
228
+ generated files will be overwritten.
229
+
230
+ <args> are the command arguments:
231
+
232
+ --def Path to the OpenAPI definition file (optional).
233
+ -d
234
+
235
+ --project Project template (folder or package reference). Default: standard.
236
+ -p
237
+
238
+ --dryrun Perform a dry run, where no files are modified.
239
+ -y
240
+
241
+ --debug Set log level (default: info): trace, error, debug, info, warn, fatal.
242
+ -g
243
+
244
+ --help Print this help message.
245
+ -h
246
+
247
+ --version Print version number.
248
+ -v
249
+
250
+
251
+ Examples:
252
+
253
+ # Basic usage
254
+ > npm create @voxgig/sdkgen@latest foo
255
+ # Creates the SDK Project in the folder ./foo
256
+
257
+ See also: https://voxgig.com/sdkgen
258
+ `
259
+
260
+ KONSOLE.log(s)
261
+ }
@@ -45,14 +45,22 @@ const JostracaModule = __importStar(require("jostraca"));
45
45
  const util_1 = require("@voxgig/util");
46
46
  const package_json_1 = __importDefault(require("../package.json"));
47
47
  const { names, Jostraca } = JostracaModule;
48
+ // TODO: CreateSdkGen opts and generate opts should be mostly the same, and
49
+ // generate should override
48
50
  function CreateSdkGen(opts) {
49
51
  const fs = opts.fs || Fs;
52
+ const debug = opts.debug;
50
53
  const pino = (0, util_1.prettyPino)('create', opts);
51
54
  const log = pino.child({ cmp: 'create' });
52
55
  const jostraca = Jostraca();
53
56
  async function generate(spec) {
54
57
  const start = Date.now();
55
- log.info({ point: 'generate-start', start, note: spec.project });
58
+ let dryrun = !!spec.dryrun;
59
+ log.info({
60
+ point: 'generate-start',
61
+ start,
62
+ note: spec.project + (dryrun ? ' ** DRY RUN **' : '')
63
+ });
56
64
  log.debug({ point: 'generate-spec', spec, note: JSON.stringify(spec, null, 2) });
57
65
  const projectFolder = resolveProjectFolder(spec);
58
66
  const rootPath = node_path_1.default.join(projectFolder, spec.root);
@@ -63,6 +71,7 @@ function CreateSdkGen(opts) {
63
71
  const folder = node_path_1.default.join(process.cwd(), name + (name.endsWith('-sdk') ? '' : '-sdk'));
64
72
  const jopts = {
65
73
  fs: () => fs,
74
+ debug,
66
75
  folder,
67
76
  log: log.child({ cmp: 'jostraca' }),
68
77
  meta: { spec },
@@ -72,7 +81,7 @@ function CreateSdkGen(opts) {
72
81
  }
73
82
  },
74
83
  control: {
75
- dryrun: spec.dryrun
84
+ dryrun,
76
85
  }
77
86
  };
78
87
  const model = {
@@ -84,11 +93,17 @@ function CreateSdkGen(opts) {
84
93
  };
85
94
  names(model, model.name);
86
95
  names(model, model.name, 'project_name');
87
- log.debug({ point: 'generate-model', model, note: JSON.stringify(model, null, 2) });
96
+ log.debug({
97
+ point: 'generate-jostraca',
98
+ jostraca: jopts,
99
+ note: JSON.stringify(jopts, null, 2)
100
+ });
88
101
  const jres = await jostraca.generate(jopts, () => Root({ model, spec }));
89
- // logfiles(jres, log)
90
102
  (0, util_1.showChanges)(jopts.log, 'generate-result', jres, node_path_1.default.dirname(process.cwd()));
91
- if (!spec.dryrun && spec.install) {
103
+ if (spec.dryrun || !spec.install) {
104
+ log.info({ point: 'generate-install', note: 'skipping npm install' });
105
+ }
106
+ if (!spec.dryrun) {
92
107
  await installNpm(spec, jopts, model);
93
108
  }
94
109
  log.info({ point: 'generate-end' });
@@ -112,9 +127,8 @@ function CreateSdkGen(opts) {
112
127
  async function installNpm(spec, opts, model) {
113
128
  const folder = opts.folder;
114
129
  const log = opts.log;
115
- return new Promise((resolve, reject) => {
130
+ return new Promise(async (resolve, reject) => {
116
131
  const cwd = node_path_1.default.resolve(folder, '.sdk');
117
- log.info({ point: 'generate-install', install: 'npm', note: 'npm install # ' + cwd });
118
132
  const env = {
119
133
  ...process.env,
120
134
  PATH: `${node_path_1.default.dirname(process.execPath)}${node_path_1.default.delimiter}${process.env.PATH}`,
@@ -125,18 +139,28 @@ async function installNpm(spec, opts, model) {
125
139
  env,
126
140
  stdio: 'inherit', // Direct passthrough for real-time output
127
141
  };
128
- const child = (0, child_process_1.spawn)('npm', args, spawn_opts);
129
- child.on('error', (err) => reject(new Error(`Failed to start npm: ${err.message}`)));
130
- child.on('close', async (code) => {
131
- if (code !== 0) {
132
- reject(new Error(`npm install exited with code ${code}`));
133
- }
134
- else {
135
- await installTargets(spec, opts, model, spawn_opts);
136
- await installFeatures(spec, opts, model, spawn_opts);
137
- resolve(null);
138
- }
139
- });
142
+ const postInstall = async () => {
143
+ await installTargets(spec, opts, model, spawn_opts);
144
+ await installFeatures(spec, opts, model, spawn_opts);
145
+ };
146
+ if (spec.install) {
147
+ log.info({ point: 'generate-install', note: 'running npm install in ' + cwd });
148
+ const child = (0, child_process_1.spawn)('npm', args, spawn_opts);
149
+ child.on('error', (err) => reject(new Error(`Failed to start npm: ${err.message}`)));
150
+ child.on('close', async (code) => {
151
+ if (code !== 0) {
152
+ reject(new Error(`npm install exited with code ${code}`));
153
+ }
154
+ else {
155
+ await postInstall();
156
+ return resolve(null);
157
+ }
158
+ });
159
+ }
160
+ else {
161
+ await postInstall();
162
+ return resolve(null);
163
+ }
140
164
  });
141
165
  }
142
166
  async function installTargets(spec, opts, model, spawn_opts) {
@@ -152,6 +176,7 @@ async function installTargets(spec, opts, model, spawn_opts) {
152
176
  note: 'npm run target-add ' + targetlist
153
177
  });
154
178
  const args = ['run', 'add-target', targetlist];
179
+ log.info({ point: 'generate-target', note: 'adding targets: ' + targetlist });
155
180
  const child = (0, child_process_1.spawn)('npm', args, spawn_opts);
156
181
  child.on('error', (err) => reject(new Error(`Failed to start npm: ${err.message}`)));
157
182
  child.on('close', async (code) => {
@@ -177,6 +202,7 @@ async function installFeatures(spec, opts, model, spawn_opts) {
177
202
  note: 'npm run feature-add ' + featurelist
178
203
  });
179
204
  const args = ['run', 'add-feature', featurelist];
205
+ log.info({ point: 'generate-feature', note: 'adding features: ' + featurelist });
180
206
  const child = (0, child_process_1.spawn)('npm', args, spawn_opts);
181
207
  child.on('error', (err) => reject(new Error(`Failed to start npm: ${err.message}`)));
182
208
  child.on('close', async (code) => {
@@ -1 +1 @@
1
- {"version":3,"file":"create-sdkgen.js","sourceRoot":"","sources":["../src/create-sdkgen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-sdkgen.js","sourceRoot":"","sources":["../src/create-sdkgen.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"root":["../src/create-sdkgen.ts","../src/project/standard/modelsdk.ts","../src/project/standard/root.ts"],"version":"5.8.3"}
1
+ {"root":["../src/create-sdkgen.ts","../src/project/standard/modelsdk.ts","../src/project/standard/root.ts"],"version":"5.9.2"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voxgig/create-sdkgen",
3
- "version": "0.1.2",
3
+ "version": "0.3.0",
4
4
  "main": "dist/create-sdkgen.js",
5
5
  "type": "commonjs",
6
6
  "types": "dist/create-sdkgen.d.ts",
@@ -20,8 +20,8 @@
20
20
  "create-sdkgen": "bin/create-sdkgen"
21
21
  },
22
22
  "scripts": {
23
- "test": "node --enable-source-maps --test dist-test",
24
- "test-some": "node --enable-source-maps --test-name-pattern=\"$npm_config_pattern\" --test dist-test",
23
+ "test": "node --enable-source-maps --test dist-test/**/*.test.js",
24
+ "test-some": "node --enable-source-maps --test-name-pattern=\"$npm_config_pattern\" --test dist-test/**/*.test.js",
25
25
  "watch": "tsc --build src test -w",
26
26
  "build": "tsc --build src test",
27
27
  "test-model": "voxgig-model project/.sdk/test/test.jsonic",
@@ -42,16 +42,16 @@
42
42
  ],
43
43
  "devDependencies": {
44
44
  "@hapi/code": "^9.0.3",
45
- "@types/node": "24.1.0",
45
+ "@types/node": "24.2.0",
46
46
  "esbuild": "^0.25.8",
47
- "memfs": "^4.24.0",
48
- "typescript": "^5.8.3"
47
+ "memfs": "^4.36.0",
48
+ "typescript": "^5.9.2"
49
49
  },
50
50
  "dependencies": {
51
51
  "@voxgig/util": "^0.2.0",
52
52
  "aontu": "^0.28.0",
53
53
  "chokidar": "^4.0.3",
54
54
  "gubu": "^9.0.0",
55
- "jostraca": "^0.23.0"
55
+ "jostraca": "^0.24.1"
56
56
  }
57
57
  }
@@ -2,12 +2,14 @@
2
2
 
3
3
  @'@voxgig/model/model/.model-config/model-config.jsonic'
4
4
 
5
- sys: model: builders: {
5
+ sys: model: action: {
6
6
  apidef: load: 'build/apidef.js'
7
7
  sdkgen: load: 'build/sdkgen.js'
8
8
  // docgen: load: 'build/docgen.js'
9
9
  }
10
10
 
11
+ sys: model: order: action: 'apidef,sdkgen'
12
+
11
13
  sys: model: watch: {
12
14
  'src': {} # To catch fragment updates.
13
15
  'dist': {}
@@ -10,6 +10,7 @@
10
10
 
11
11
  # SDK Details.
12
12
  name: 'NAME'
13
+ origin: 'voxgig'
13
14
  def: 'DEF'
14
15
 
15
16
 
@@ -1,23 +1,26 @@
1
1
  {
2
2
  "name": "build-$$const.name$$-sdk",
3
3
  "version": "0.0.1",
4
- "description": "",
5
- "main": "index.js",
4
+ "description": "$$const.Name$$ SDK Project",
6
5
  "scripts": {
7
- "model": "voxgig-model model/sdk.jsonic",
8
- "model-watch": "voxgig-model -w model/sdk.jsonic",
6
+ "generate": "voxgig-model model/sdk.jsonic",
7
+ "watch-generate": "voxgig-model -w model/sdk.jsonic",
8
+ "dry-generate": "voxgig-model -y model/sdk.jsonic",
9
+ "watch-dry-generate": "voxgig-model -w -y model/sdk.jsonic",
9
10
  "test-model": "voxgig-model test/test.jsonic",
10
- "test-model-watch": "voxgig-model -w test/test.jsonic",
11
+ "watch-test-model": "voxgig-model -w test/test.jsonic",
11
12
  "watch": "tsc --build src -w",
12
13
  "build": "tsc --build src",
13
14
  "test": "echo no-test",
14
15
  "clean": "rm -rf node_modules yarn.lock package-lock.json",
15
16
  "reset": "npm run clean && npm i && npm run build && npm test",
16
- "add-target": "voxgig-sdkgen target add $npm_config_target",
17
- "add-feature": "voxgig-sdkgen feature add $npm_config_feature"
17
+ "add-target": "voxgig-sdkgen target add",
18
+ "dry-add-target": "voxgig-sdkgen -y target add",
19
+ "add-feature": "voxgig-sdkgen feature add",
20
+ "dry-add-feature": "voxgig-sdkgen -y feature add"
18
21
  },
19
- "author": "",
20
- "license": "MIT",
22
+ "author": "$$const.Name$$",
23
+ "license": "$$const.License$$",
21
24
  "devDependencies": {
22
25
  "@types/node": ">=24",
23
26
  "typescript": ">=5",
@@ -26,6 +26,8 @@ const {
26
26
  } = PointUtil
27
27
 
28
28
 
29
+ import { Top } from './Top'
30
+
29
31
 
30
32
  const Root = cmp(function Root(props: any) {
31
33
  const { model, ctx$ } = props
@@ -62,6 +64,9 @@ const Root = cmp(function Root(props: any) {
62
64
 
63
65
  Project({}, () => {
64
66
 
67
+ // TODO: jostraca should accept no props
68
+ Top({})
69
+
65
70
  each(target, (target: any) => {
66
71
  names(target, target.name)
67
72
 
@@ -0,0 +1,48 @@
1
+
2
+
3
+ import {
4
+ cmp, each, Line, File, Content
5
+ } from '@voxgig/sdkgen'
6
+
7
+
8
+ const Top = cmp(function Top(props: any) {
9
+ const { ctx$ } = props
10
+ const { model } = ctx$
11
+
12
+ File({ name: 'README.md' }, () => {
13
+ Content(`# ${model.Name} SDKs
14
+
15
+ ## API Entities
16
+
17
+ \`\`\`mermaid
18
+ flowchart LR
19
+ `)
20
+
21
+ const entityMap = model.main.api.entity
22
+
23
+ each(entityMap, (entity: any) => {
24
+ const ancestors = entity.ancestors || []
25
+ if (0 < ancestors.length) {
26
+ const pname = ancestors[ancestors.length - 1]
27
+ const parent = entityMap[pname]
28
+ if (null != parent) {
29
+ Line(` ${parent.Name} --> ${entity.Name}`)
30
+ }
31
+ }
32
+ })
33
+
34
+ Content(`
35
+ \`\`\`
36
+
37
+ `)
38
+
39
+
40
+
41
+ })
42
+ })
43
+
44
+
45
+ export {
46
+ Top
47
+ }
48
+
@@ -36,9 +36,12 @@ type GenerateSpec = {
36
36
 
37
37
  const { names, Jostraca } = JostracaModule
38
38
 
39
-
39
+ // TODO: CreateSdkGen opts and generate opts should be mostly the same, and
40
+ // generate should override
40
41
  function CreateSdkGen(opts: FullCreateSdkGenOptions) {
41
42
  const fs = opts.fs || Fs
43
+
44
+ const debug = opts.debug
42
45
  const pino = prettyPino('create', opts)
43
46
  const log = pino.child({ cmp: 'create' })
44
47
 
@@ -47,7 +50,13 @@ function CreateSdkGen(opts: FullCreateSdkGenOptions) {
47
50
  async function generate(spec: GenerateSpec) {
48
51
  const start = Date.now()
49
52
 
50
- log.info({ point: 'generate-start', start, note: spec.project })
53
+ let dryrun = !!spec.dryrun
54
+
55
+ log.info({
56
+ point: 'generate-start',
57
+ start,
58
+ note: spec.project + (dryrun ? ' ** DRY RUN **' : '')
59
+ })
51
60
  log.debug({ point: 'generate-spec', spec, note: JSON.stringify(spec, null, 2) })
52
61
 
53
62
  const projectFolder = resolveProjectFolder(spec)
@@ -63,6 +72,7 @@ function CreateSdkGen(opts: FullCreateSdkGenOptions) {
63
72
 
64
73
  const jopts = {
65
74
  fs: () => fs,
75
+ debug,
66
76
  folder,
67
77
  log: log.child({ cmp: 'jostraca' }),
68
78
  meta: { spec },
@@ -72,7 +82,7 @@ function CreateSdkGen(opts: FullCreateSdkGenOptions) {
72
82
  }
73
83
  },
74
84
  control: {
75
- dryrun: spec.dryrun
85
+ dryrun,
76
86
  }
77
87
  }
78
88
 
@@ -87,15 +97,21 @@ function CreateSdkGen(opts: FullCreateSdkGenOptions) {
87
97
  names(model, model.name)
88
98
  names(model, model.name, 'project_name')
89
99
 
90
- log.debug({ point: 'generate-model', model, note: JSON.stringify(model, null, 2) })
100
+ log.debug({
101
+ point: 'generate-jostraca',
102
+ jostraca: jopts,
103
+ note: JSON.stringify(jopts, null, 2)
104
+ })
91
105
 
92
106
  const jres = await jostraca.generate(jopts, () => Root({ model, spec }))
93
107
 
94
- // logfiles(jres, log)
95
-
96
108
  showChanges(jopts.log, 'generate-result', jres, Path.dirname(process.cwd()))
97
109
 
98
- if (!spec.dryrun && spec.install) {
110
+ if (spec.dryrun || !spec.install) {
111
+ log.info({ point: 'generate-install', note: 'skipping npm install' })
112
+ }
113
+
114
+ if (!spec.dryrun) {
99
115
  await installNpm(spec, jopts, model)
100
116
  }
101
117
 
@@ -135,9 +151,8 @@ async function installNpm(spec: GenerateSpec, opts: any, model: any) {
135
151
  const folder = opts.folder
136
152
  const log = opts.log
137
153
 
138
- return new Promise((resolve, reject) => {
154
+ return new Promise(async (resolve, reject) => {
139
155
  const cwd = Path.resolve(folder, '.sdk')
140
- log.info({ point: 'generate-install', install: 'npm', note: 'npm install # ' + cwd })
141
156
 
142
157
  const env = {
143
158
  ...process.env,
@@ -152,20 +167,32 @@ async function installNpm(spec: GenerateSpec, opts: any, model: any) {
152
167
  stdio: 'inherit', // Direct passthrough for real-time output
153
168
  }
154
169
 
155
- const child = spawn('npm', args, spawn_opts)
170
+ const postInstall = async () => {
171
+ await installTargets(spec, opts, model, spawn_opts)
172
+ await installFeatures(spec, opts, model, spawn_opts)
173
+ }
156
174
 
157
- child.on('error', (err) => reject(new Error(`Failed to start npm: ${err.message}`)))
175
+ if (spec.install) {
176
+ log.info({ point: 'generate-install', note: 'running npm install in ' + cwd })
158
177
 
159
- child.on('close', async (code) => {
160
- if (code !== 0) {
161
- reject(new Error(`npm install exited with code ${code}`))
162
- }
163
- else {
164
- await installTargets(spec, opts, model, spawn_opts)
165
- await installFeatures(spec, opts, model, spawn_opts)
166
- resolve(null)
167
- }
168
- })
178
+ const child = spawn('npm', args, spawn_opts)
179
+
180
+ child.on('error', (err) => reject(new Error(`Failed to start npm: ${err.message}`)))
181
+
182
+ child.on('close', async (code) => {
183
+ if (code !== 0) {
184
+ reject(new Error(`npm install exited with code ${code}`))
185
+ }
186
+ else {
187
+ await postInstall()
188
+ return resolve(null)
189
+ }
190
+ })
191
+ }
192
+ else {
193
+ await postInstall()
194
+ return resolve(null)
195
+ }
169
196
  })
170
197
  }
171
198
 
@@ -188,6 +215,7 @@ async function installTargets(spec: GenerateSpec, opts: any, model: any, spawn_o
188
215
 
189
216
  const args = ['run', 'add-target', targetlist]
190
217
 
218
+ log.info({ point: 'generate-target', note: 'adding targets: ' + targetlist })
191
219
  const child = spawn('npm', args, spawn_opts)
192
220
 
193
221
  child.on('error', (err) => reject(new Error(`Failed to start npm: ${err.message}`)))
@@ -222,6 +250,7 @@ async function installFeatures(spec: GenerateSpec, opts: any, model: any, spawn_
222
250
 
223
251
  const args = ['run', 'add-feature', featurelist]
224
252
 
253
+ log.info({ point: 'generate-feature', note: 'adding features: ' + featurelist })
225
254
  const child = spawn('npm', args, spawn_opts)
226
255
 
227
256
  child.on('error', (err) => reject(new Error(`Failed to start npm: ${err.message}`)))
@@ -1,16 +0,0 @@
1
-
2
-
3
- @'@voxgig/model/model/.model-config/model-config.jsonic'
4
-
5
- sys: model: builders: {
6
- apidef: load: 'build/apidef.js'
7
- sdkgen: load: 'build/sdkgen.js'
8
- // docgen: load: 'build/docgen.js'
9
- }
10
-
11
- sys: model: watch: {
12
- 'dist': {}
13
- 'tm': {}
14
- 'def': {}
15
- # 'doc/static/src': {}
16
- }