@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 +2 -0
- package/bin/create-sdkgen~ +261 -0
- package/dist/create-sdkgen.js +45 -19
- package/dist/create-sdkgen.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/project/standard/.sdk/model/.model-config/model-config.jsonic +3 -1
- package/project/standard/.sdk/model/sdk.fragment.jsonic +1 -0
- package/project/standard/.sdk/package.json +12 -9
- package/project/standard/.sdk/src/Root.ts +5 -0
- package/project/standard/.sdk/src/Top.ts +48 -0
- package/src/create-sdkgen.ts +50 -21
- package/project/standard/.sdk/model/.model-config/model-config.jsonic~ +0 -16
package/bin/create-sdkgen
CHANGED
|
@@ -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
|
+
}
|
package/dist/create-sdkgen.js
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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({
|
|
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 (
|
|
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
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
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":";AAAA,yDAAyD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
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.
|
|
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.
|
|
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.
|
|
45
|
+
"@types/node": "24.2.0",
|
|
46
46
|
"esbuild": "^0.25.8",
|
|
47
|
-
"memfs": "^4.
|
|
48
|
-
"typescript": "^5.
|
|
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.
|
|
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:
|
|
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': {}
|
|
@@ -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
|
-
"
|
|
8
|
-
"
|
|
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
|
|
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
|
|
17
|
-
"add-
|
|
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": "
|
|
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
|
+
|
package/src/create-sdkgen.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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({
|
|
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 (
|
|
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
|
|
170
|
+
const postInstall = async () => {
|
|
171
|
+
await installTargets(spec, opts, model, spawn_opts)
|
|
172
|
+
await installFeatures(spec, opts, model, spawn_opts)
|
|
173
|
+
}
|
|
156
174
|
|
|
157
|
-
|
|
175
|
+
if (spec.install) {
|
|
176
|
+
log.info({ point: 'generate-install', note: 'running npm install in ' + cwd })
|
|
158
177
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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
|
-
}
|