@voxgig/sdkgen 0.14.0 → 0.16.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/voxgig-sdkgen +135 -0
- package/dist/action/feature.d.ts +2 -0
- package/dist/action/feature.js +76 -0
- package/dist/action/feature.js.map +1 -0
- package/dist/action/lang.d.ts +2 -0
- package/dist/action/lang.js +68 -0
- package/dist/action/lang.js.map +1 -0
- package/dist/action/target.d.ts +2 -0
- package/dist/action/target.js +82 -0
- package/dist/action/target.js.map +1 -0
- package/dist/cmp/Entity.js +3 -3
- package/dist/cmp/Entity.js.map +1 -1
- package/dist/cmp/Feature.js +10 -3
- package/dist/cmp/Feature.js.map +1 -1
- package/dist/cmp/FeatureHook.d.ts +2 -0
- package/dist/cmp/FeatureHook.js +17 -0
- package/dist/cmp/FeatureHook.js.map +1 -0
- package/dist/cmp/Hook.d.ts +2 -0
- package/dist/cmp/Hook.js +10 -0
- package/dist/cmp/Hook.js.map +1 -0
- package/dist/cmp/Main.js +12 -5
- package/dist/cmp/Main.js.map +1 -1
- package/dist/cmp/Readme.js +8 -8
- package/dist/cmp/Readme.js.map +1 -1
- package/dist/cmp/ReadmeInstall.js +3 -3
- package/dist/cmp/ReadmeInstall.js.map +1 -1
- package/dist/cmp/ReadmeOptions.js +2 -2
- package/dist/cmp/ReadmeOptions.js.map +1 -1
- package/dist/cmp/ReadmeQuick.js +3 -3
- package/dist/cmp/ReadmeQuick.js.map +1 -1
- package/dist/sdkgen.d.ts +15 -4
- package/dist/sdkgen.js +106 -35
- package/dist/sdkgen.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utility.d.ts +4 -1
- package/dist/utility.js +11 -2
- package/dist/utility.js.map +1 -1
- package/model/sdkgen.jsonic +58 -6
- package/package.json +13 -13
- package/src/action/feature.ts +120 -0
- package/src/action/target.ts +127 -0
- package/src/cmp/Entity.ts +6 -4
- package/src/cmp/Feature.ts +11 -4
- package/src/cmp/FeatureHook.ts +23 -0
- package/src/cmp/Main.ts +14 -6
- package/src/cmp/Readme.ts +8 -8
- package/src/cmp/ReadmeInstall.ts +3 -3
- package/src/cmp/ReadmeOptions.ts +2 -2
- package/src/cmp/ReadmeQuick.ts +3 -3
- package/src/sdkgen.ts +116 -34
- package/src/utility.ts +11 -1
- package/src/prepare-openapi.ts +0 -59
package/dist/sdkgen.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as JostracaModule from 'jostraca';
|
|
2
1
|
import { Pino } from '@voxgig/util';
|
|
2
|
+
import * as JostracaModule from 'jostraca';
|
|
3
3
|
import { Main } from './cmp/Main';
|
|
4
4
|
import { Entity } from './cmp/Entity';
|
|
5
5
|
import { Feature } from './cmp/Feature';
|
|
@@ -7,6 +7,7 @@ import { Readme } from './cmp/Readme';
|
|
|
7
7
|
import { ReadmeInstall } from './cmp/ReadmeInstall';
|
|
8
8
|
import { ReadmeOptions } from './cmp/ReadmeOptions';
|
|
9
9
|
import { ReadmeEntity } from './cmp/ReadmeEntity';
|
|
10
|
+
import { FeatureHook } from './cmp/FeatureHook';
|
|
10
11
|
type SdkGenOptions = {
|
|
11
12
|
folder: string;
|
|
12
13
|
fs: any;
|
|
@@ -25,10 +26,14 @@ type SdkGenOptions = {
|
|
|
25
26
|
declare const Jostraca: typeof JostracaModule.Jostraca;
|
|
26
27
|
declare function SdkGen(opts: SdkGenOptions): {
|
|
27
28
|
pino: import("pino").Logger<string, boolean>;
|
|
28
|
-
generate: (spec: any) => Promise<
|
|
29
|
+
generate: (spec: any) => Promise<{
|
|
30
|
+
ok: boolean;
|
|
31
|
+
name: string;
|
|
32
|
+
}>;
|
|
33
|
+
action: (args: string[]) => Promise<void>;
|
|
29
34
|
};
|
|
30
35
|
declare namespace SdkGen {
|
|
31
|
-
var makeBuild: (opts: SdkGenOptions) => Promise<(model: any, build: any, ctx: any) => Promise<
|
|
36
|
+
var makeBuild: (opts: SdkGenOptions) => Promise<(model: any, build: any, ctx: any) => Promise<any>>;
|
|
32
37
|
}
|
|
33
38
|
export type { SdkGenOptions, };
|
|
34
39
|
type Component = (props: any, children?: any) => void;
|
|
@@ -43,6 +48,9 @@ export declare const cmap: (o: any, p: any) => any;
|
|
|
43
48
|
export declare const vmap: (o: any, p: any) => any;
|
|
44
49
|
export declare const get: (root: any, path: string | string[]) => any;
|
|
45
50
|
export declare const getx: (root: any, path: string | string[]) => any;
|
|
51
|
+
export declare const template: (root: any, path: string | string[]) => any;
|
|
52
|
+
export declare const deep: (...args: any[]) => any;
|
|
53
|
+
export declare const omap: (...args: any[]) => any;
|
|
46
54
|
export declare const Project: Component;
|
|
47
55
|
export declare const Folder: Component;
|
|
48
56
|
export declare const File: Component;
|
|
@@ -50,4 +58,7 @@ export declare const Content: Component;
|
|
|
50
58
|
export declare const Copy: Component;
|
|
51
59
|
export declare const Fragment: Component;
|
|
52
60
|
export declare const Inject: Component;
|
|
53
|
-
export
|
|
61
|
+
export declare const Line: Component;
|
|
62
|
+
export declare const Slot: Component;
|
|
63
|
+
export declare const List: Component;
|
|
64
|
+
export { Main, Entity, Feature, Readme, ReadmeInstall, ReadmeOptions, ReadmeEntity, FeatureHook, Jostraca, SdkGen, };
|
package/dist/sdkgen.js
CHANGED
|
@@ -16,22 +16,32 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
|
|
|
16
16
|
}) : function(o, v) {
|
|
17
17
|
o["default"] = v;
|
|
18
18
|
});
|
|
19
|
-
var __importStar = (this && this.__importStar) || function (
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
};
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
26
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
-
exports.Jostraca = exports.ReadmeEntity = exports.ReadmeOptions = exports.ReadmeInstall = exports.Readme = exports.Feature = exports.Entity = exports.Main = exports.Inject = exports.Fragment = exports.Copy = exports.Content = exports.File = exports.Folder = exports.Project = exports.getx = exports.get = exports.vmap = exports.cmap = exports.select = exports.kebabify = exports.camelify = exports.snakify = exports.each = exports.names = exports.cmp = void 0;
|
|
37
|
+
exports.Jostraca = exports.FeatureHook = exports.ReadmeEntity = exports.ReadmeOptions = exports.ReadmeInstall = exports.Readme = exports.Feature = exports.Entity = exports.Main = exports.List = exports.Slot = exports.Line = exports.Inject = exports.Fragment = exports.Copy = exports.Content = exports.File = exports.Folder = exports.Project = exports.omap = exports.deep = exports.template = exports.getx = exports.get = exports.vmap = exports.cmap = exports.select = exports.kebabify = exports.camelify = exports.snakify = exports.each = exports.names = exports.cmp = void 0;
|
|
28
38
|
exports.SdkGen = SdkGen;
|
|
29
39
|
const Fs = __importStar(require("node:fs"));
|
|
30
|
-
const JostracaModule = __importStar(require("jostraca"));
|
|
31
|
-
// import Pino from 'pino'
|
|
32
|
-
// import PinoPretty from 'pino-pretty'
|
|
33
40
|
const util_1 = require("@voxgig/util");
|
|
34
|
-
const
|
|
41
|
+
const jsonic_1 = require("jsonic");
|
|
42
|
+
const JostracaModule = __importStar(require("jostraca"));
|
|
43
|
+
const aontu_1 = require("aontu");
|
|
44
|
+
const utility_1 = require("./utility");
|
|
35
45
|
const Main_1 = require("./cmp/Main");
|
|
36
46
|
Object.defineProperty(exports, "Main", { enumerable: true, get: function () { return Main_1.Main; } });
|
|
37
47
|
const Entity_1 = require("./cmp/Entity");
|
|
@@ -46,17 +56,22 @@ const ReadmeOptions_1 = require("./cmp/ReadmeOptions");
|
|
|
46
56
|
Object.defineProperty(exports, "ReadmeOptions", { enumerable: true, get: function () { return ReadmeOptions_1.ReadmeOptions; } });
|
|
47
57
|
const ReadmeEntity_1 = require("./cmp/ReadmeEntity");
|
|
48
58
|
Object.defineProperty(exports, "ReadmeEntity", { enumerable: true, get: function () { return ReadmeEntity_1.ReadmeEntity; } });
|
|
49
|
-
const
|
|
59
|
+
const FeatureHook_1 = require("./cmp/FeatureHook");
|
|
60
|
+
Object.defineProperty(exports, "FeatureHook", { enumerable: true, get: function () { return FeatureHook_1.FeatureHook; } });
|
|
61
|
+
const target_1 = require("./action/target");
|
|
62
|
+
const feature_1 = require("./action/feature");
|
|
50
63
|
const { Jostraca } = JostracaModule;
|
|
51
64
|
exports.Jostraca = Jostraca;
|
|
65
|
+
const ACTION_MAP = {
|
|
66
|
+
target: target_1.action_target,
|
|
67
|
+
feature: feature_1.action_feature,
|
|
68
|
+
};
|
|
52
69
|
function SdkGen(opts) {
|
|
53
70
|
const fs = opts.fs || Fs;
|
|
54
|
-
const folder = opts.folder || '
|
|
55
|
-
// const def = opts.def || 'def.yml'
|
|
71
|
+
const folder = opts.folder || '../';
|
|
56
72
|
const jostraca = Jostraca();
|
|
57
73
|
const pino = (0, util_1.prettyPino)('sdkgen', opts);
|
|
58
74
|
const log = pino.child({ cmp: 'sdkgen' });
|
|
59
|
-
// console.log('SDKGEN OPTS', opts)
|
|
60
75
|
async function generate(spec) {
|
|
61
76
|
const start = Date.now();
|
|
62
77
|
const { model, config } = spec;
|
|
@@ -68,25 +83,82 @@ function SdkGen(opts) {
|
|
|
68
83
|
const rootModule = require(config.root);
|
|
69
84
|
Root = rootModule.Root;
|
|
70
85
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
86
|
+
const jopts = {
|
|
87
|
+
fs: () => fs,
|
|
88
|
+
folder,
|
|
89
|
+
log: log.child({ cmp: 'jostraca' }),
|
|
90
|
+
meta: { spec },
|
|
91
|
+
debug: opts.debug,
|
|
92
|
+
};
|
|
93
|
+
await jostraca.generate(jopts, () => Root({ model }));
|
|
78
94
|
log.info({ point: 'generate-end' });
|
|
95
|
+
return { ok: true, name: 'sdkgen' };
|
|
96
|
+
}
|
|
97
|
+
async function action(args) {
|
|
98
|
+
const pargs = args.map(arg => (0, jsonic_1.Jsonic)(arg));
|
|
99
|
+
const actname = args[0];
|
|
100
|
+
const action = ACTION_MAP[actname];
|
|
101
|
+
if (null == action) {
|
|
102
|
+
throw new utility_1.SdkGenError('Unknown action: ' + actname);
|
|
103
|
+
}
|
|
104
|
+
const { model, tree } = resolveModel();
|
|
105
|
+
const ctx = {
|
|
106
|
+
fs: () => fs,
|
|
107
|
+
log,
|
|
108
|
+
folder: '.', // The `generate` folder,
|
|
109
|
+
model,
|
|
110
|
+
tree,
|
|
111
|
+
};
|
|
112
|
+
await action(pargs, ctx);
|
|
79
113
|
}
|
|
80
|
-
|
|
81
|
-
|
|
114
|
+
function resolveModel() {
|
|
115
|
+
const path = './model/sdk.jsonic';
|
|
116
|
+
const aopts = { path };
|
|
117
|
+
const src = fs.readFileSync(path, 'utf8');
|
|
118
|
+
const tree = (0, aontu_1.Aontu)(src, aopts);
|
|
119
|
+
const hasErr = tree.err && 0 < tree.err.length;
|
|
120
|
+
if (hasErr) {
|
|
121
|
+
for (let serr of tree.err) {
|
|
122
|
+
let err = new utility_1.SdkGenError('Model Error: ' + serr.msg);
|
|
123
|
+
err.cause$ = [serr];
|
|
124
|
+
if ('syntax' === serr.why) {
|
|
125
|
+
err.uxmsg$ = true;
|
|
126
|
+
}
|
|
127
|
+
// log.error({ fail: 'parse', point: 'guide-parse', file: path, err })
|
|
128
|
+
err.rooterrs$ = tree.err;
|
|
129
|
+
throw err;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
let genctx = new aontu_1.Context({ root: tree });
|
|
133
|
+
const model = tree.gen(genctx);
|
|
134
|
+
// TODO: collect all errors
|
|
135
|
+
if (genctx.err && 0 < genctx.err.length) {
|
|
136
|
+
const err = new utility_1.SdkGenError('Model Error:\n' +
|
|
137
|
+
(genctx.err.map((pe) => pe.msg)).join('\n'));
|
|
138
|
+
// log.error({ fail: 'build', what: 'guide', file: path, err })
|
|
139
|
+
err.errs = () => genctx.err;
|
|
140
|
+
throw err;
|
|
141
|
+
}
|
|
142
|
+
// TODO: FIX: This is a hack to set the correct src file
|
|
143
|
+
// aontu bug: url is empty
|
|
144
|
+
tree.url = path;
|
|
145
|
+
model.const = { name: model.name };
|
|
146
|
+
(0, exports.names)(model.const, model.name);
|
|
147
|
+
model.const.year = new Date().getFullYear();
|
|
148
|
+
return {
|
|
149
|
+
model,
|
|
150
|
+
tree,
|
|
151
|
+
};
|
|
82
152
|
}
|
|
83
153
|
return {
|
|
84
154
|
pino,
|
|
85
155
|
generate,
|
|
156
|
+
action,
|
|
86
157
|
};
|
|
87
158
|
}
|
|
88
159
|
SdkGen.makeBuild = async function (opts) {
|
|
89
160
|
let sdkgen = undefined;
|
|
161
|
+
// let apidef: any = undefined
|
|
90
162
|
const config = {
|
|
91
163
|
root: opts.root,
|
|
92
164
|
def: opts.def || 'no-def',
|
|
@@ -99,18 +171,11 @@ SdkGen.makeBuild = async function (opts) {
|
|
|
99
171
|
sdkgen = SdkGen({
|
|
100
172
|
...opts,
|
|
101
173
|
pino: build.log,
|
|
174
|
+
debug: build.spec.debug,
|
|
102
175
|
});
|
|
103
|
-
const apidef = (0, apidef_1.ApiDef)({
|
|
104
|
-
pino: build.log,
|
|
105
|
-
});
|
|
106
|
-
if (true === ctx.watch) {
|
|
107
|
-
await apidef.watch(config);
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
await apidef.generate(config);
|
|
111
|
-
}
|
|
112
176
|
}
|
|
113
|
-
await
|
|
177
|
+
// await apidef.generate({ model, build, config })
|
|
178
|
+
return await sdkgen.generate({ model, build, config });
|
|
114
179
|
};
|
|
115
180
|
};
|
|
116
181
|
// Adapted from https://github.com/sindresorhus/import-fresh - Thanks!
|
|
@@ -148,6 +213,9 @@ exports.cmap = JostracaModule.cmap;
|
|
|
148
213
|
exports.vmap = JostracaModule.vmap;
|
|
149
214
|
exports.get = JostracaModule.get;
|
|
150
215
|
exports.getx = JostracaModule.getx;
|
|
216
|
+
exports.template = JostracaModule.template;
|
|
217
|
+
exports.deep = JostracaModule.deep;
|
|
218
|
+
exports.omap = JostracaModule.omap;
|
|
151
219
|
exports.Project = JostracaModule.Project;
|
|
152
220
|
exports.Folder = JostracaModule.Folder;
|
|
153
221
|
exports.File = JostracaModule.File;
|
|
@@ -155,4 +223,7 @@ exports.Content = JostracaModule.Content;
|
|
|
155
223
|
exports.Copy = JostracaModule.Copy;
|
|
156
224
|
exports.Fragment = JostracaModule.Fragment;
|
|
157
225
|
exports.Inject = JostracaModule.Inject;
|
|
226
|
+
exports.Line = JostracaModule.Line;
|
|
227
|
+
exports.Slot = JostracaModule.Slot;
|
|
228
|
+
exports.List = JostracaModule.List;
|
|
158
229
|
//# sourceMappingURL=sdkgen.js.map
|
package/dist/sdkgen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdkgen.js","sourceRoot":"","sources":["../src/sdkgen.ts"],"names":[],"mappings":";AAAA,oDAAoD
|
|
1
|
+
{"version":3,"file":"sdkgen.js","sourceRoot":"","sources":["../src/sdkgen.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/
|
|
1
|
+
{"root":["../src/sdkgen.ts","../src/utility.ts","../src/action/feature.ts","../src/action/target.ts","../src/cmp/entity.ts","../src/cmp/feature.ts","../src/cmp/featurehook.ts","../src/cmp/main.ts","../src/cmp/readme.ts","../src/cmp/readmeentity.ts","../src/cmp/readmeinstall.ts","../src/cmp/readmeintro.ts","../src/cmp/readmemodel.ts","../src/cmp/readmeoptions.ts","../src/cmp/readmequick.ts"],"version":"5.7.2"}
|
package/dist/utility.d.ts
CHANGED
|
@@ -2,4 +2,7 @@ declare const resolvePath: (ctx$: any, path: string) => any;
|
|
|
2
2
|
declare const requirePath: (ctx$: any, path: string, flags?: {
|
|
3
3
|
ignore?: boolean;
|
|
4
4
|
}) => any;
|
|
5
|
-
|
|
5
|
+
declare class SdkGenError extends Error {
|
|
6
|
+
constructor(...args: any[]);
|
|
7
|
+
}
|
|
8
|
+
export { resolvePath, requirePath, SdkGenError, };
|
package/dist/utility.js
CHANGED
|
@@ -3,10 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.requirePath = exports.resolvePath = void 0;
|
|
6
|
+
exports.SdkGenError = exports.requirePath = exports.resolvePath = void 0;
|
|
7
7
|
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
// TODO: move to @voxgig/util as duplicated with @voxgig/sdkgen
|
|
8
9
|
const resolvePath = (ctx$, path) => {
|
|
9
|
-
|
|
10
|
+
// console.log('RP', ctx$.folder)
|
|
11
|
+
const fullpath = node_path_1.default.join(ctx$.folder, 'generate', 'dist', path);
|
|
10
12
|
return fullpath;
|
|
11
13
|
};
|
|
12
14
|
exports.resolvePath = resolvePath;
|
|
@@ -26,4 +28,11 @@ const requirePath = (ctx$, path, flags) => {
|
|
|
26
28
|
}
|
|
27
29
|
};
|
|
28
30
|
exports.requirePath = requirePath;
|
|
31
|
+
class SdkGenError extends Error {
|
|
32
|
+
constructor(...args) {
|
|
33
|
+
super(...args);
|
|
34
|
+
this.name = 'SdkGenError';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.SdkGenError = SdkGenError;
|
|
29
38
|
//# sourceMappingURL=utility.js.map
|
package/dist/utility.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utility.js","sourceRoot":"","sources":["../src/utility.ts"],"names":[],"mappings":";;;;;;AACA,0DAA4B;
|
|
1
|
+
{"version":3,"file":"utility.js","sourceRoot":"","sources":["../src/utility.ts"],"names":[],"mappings":";;;;;;AACA,0DAA4B;AAE5B,+DAA+D;AAE/D,MAAM,WAAW,GAAG,CAAC,IAAS,EAAE,IAAY,EAAO,EAAE;IACnD,iCAAiC;IACjC,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;IACjE,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AA8BC,kCAAW;AA3Bb,MAAM,WAAW,GAAG,CAAC,IAAS,EAAE,IAAY,EAAE,KAA4B,EAAO,EAAE;IACjF,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACxC,MAAM,MAAM,GAAG,IAAI,IAAI,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAA;IAE3D,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC1B,CAAC;IACD,OAAO,GAAQ,EAAE,CAAC;QAChB,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/D,CAAC;aACI,CAAC;YACJ,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAaC,kCAAW;AAVb,MAAM,WAAY,SAAQ,KAAK;IAC7B,YAAY,GAAG,IAAW;QACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,aAAa,CAAA;IAC3B,CAAC;CACF;AAMC,kCAAW"}
|
package/model/sdkgen.jsonic
CHANGED
|
@@ -1,19 +1,71 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
main:
|
|
3
|
+
main: def: {
|
|
4
|
+
desc: *'' | string
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
main: sdk: target: &: {
|
|
4
8
|
name: .$KEY
|
|
5
|
-
|
|
9
|
+
active: *true | boolean
|
|
10
|
+
ext: string
|
|
11
|
+
comment: line: string
|
|
12
|
+
module: {
|
|
13
|
+
name: string
|
|
14
|
+
}
|
|
15
|
+
deps: &: {
|
|
16
|
+
active: *false | boolean
|
|
17
|
+
version: *'*' | string
|
|
18
|
+
}
|
|
6
19
|
}
|
|
7
20
|
|
|
8
21
|
|
|
9
|
-
main: sdk:
|
|
10
|
-
|
|
11
|
-
|
|
22
|
+
main: sdk: entity: &: {
|
|
23
|
+
name: .$KEY
|
|
24
|
+
active: *true | boolean
|
|
12
25
|
}
|
|
13
26
|
|
|
14
27
|
|
|
15
28
|
main: sdk: feature: &: {
|
|
16
|
-
name: .$KEY
|
|
29
|
+
# name: .$KEY # FIX: aontu bug - name not resolved
|
|
17
30
|
active: *false | boolean
|
|
31
|
+
title: string
|
|
32
|
+
|
|
33
|
+
# TODO: version '0.0.1' | semver # where semver is a string format type as per semver.org
|
|
34
|
+
version: *'0.0.1' | string
|
|
35
|
+
|
|
36
|
+
hook: &: {
|
|
37
|
+
active: *false | boolean
|
|
38
|
+
await: *false | boolean
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
hook: {
|
|
42
|
+
PostConstruct: {}
|
|
43
|
+
SetData: {}
|
|
44
|
+
GetData: {}
|
|
45
|
+
GetQuery: {}
|
|
46
|
+
|
|
47
|
+
PreOperation: {}
|
|
48
|
+
ModifyOp: {}
|
|
49
|
+
PreFetch: {}
|
|
50
|
+
PostFetch: {}
|
|
51
|
+
ModifyResult: {}
|
|
52
|
+
PostOperation: {}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
# Target specific structures
|
|
56
|
+
target: &: deps: &: {
|
|
57
|
+
active: *false | boolean
|
|
58
|
+
version: *'*' | string
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
main: sdk: option: &: {
|
|
64
|
+
name: .$KEY
|
|
65
|
+
active: *true | boolean
|
|
18
66
|
}
|
|
19
67
|
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voxgig/sdkgen",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.0",
|
|
4
4
|
"main": "dist/sdkgen.js",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"types": "dist/sdkgen.d.ts",
|
|
@@ -15,6 +15,9 @@
|
|
|
15
15
|
"type": "git",
|
|
16
16
|
"url": "git://github.com/voxgig/sdkgen.git"
|
|
17
17
|
},
|
|
18
|
+
"bin": {
|
|
19
|
+
"voxgig-sdkgen": "bin/voxgig-sdkgen"
|
|
20
|
+
},
|
|
18
21
|
"scripts": {
|
|
19
22
|
"test": "node --enable-source-maps --test dist-test",
|
|
20
23
|
"test22": "node --enable-source-maps --test \"dist-test/*.test.js\"",
|
|
@@ -37,19 +40,16 @@
|
|
|
37
40
|
"devDependencies": {
|
|
38
41
|
"@hapi/code": "^9.0.3",
|
|
39
42
|
"@types/js-yaml": "^4.0.9",
|
|
40
|
-
"@types/node": "22.
|
|
41
|
-
"
|
|
42
|
-
"esbuild": "^0.24.0",
|
|
43
|
+
"@types/node": "22.10.2",
|
|
44
|
+
"esbuild": "^0.24.1",
|
|
43
45
|
"json-schema-to-ts": "^3.1.1",
|
|
44
|
-
"memfs": "^4.
|
|
45
|
-
"typescript": "^5.
|
|
46
|
+
"memfs": "^4.15.0",
|
|
47
|
+
"typescript": "^5.7.2"
|
|
46
48
|
},
|
|
47
|
-
"
|
|
48
|
-
"@redocly/openapi-core": "
|
|
49
|
-
"@voxgig/
|
|
50
|
-
"
|
|
51
|
-
"jostraca": "
|
|
52
|
-
"pino": "^9.5.0",
|
|
53
|
-
"pino-pretty": "^13.0.0"
|
|
49
|
+
"peerDependencies": {
|
|
50
|
+
"@redocly/openapi-core": ">=1",
|
|
51
|
+
"@voxgig/util": ">=0",
|
|
52
|
+
"aontu": ">=0",
|
|
53
|
+
"jostraca": ">=0"
|
|
54
54
|
}
|
|
55
55
|
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
|
|
2
|
+
import {
|
|
3
|
+
Jostraca,
|
|
4
|
+
Project,
|
|
5
|
+
File,
|
|
6
|
+
Folder,
|
|
7
|
+
Content,
|
|
8
|
+
Copy,
|
|
9
|
+
cmp,
|
|
10
|
+
each,
|
|
11
|
+
} from 'jostraca'
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
import { SdkGenError } from '../utility'
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
const CMD_MAP: any = {
|
|
18
|
+
add: cmd_feature_add
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const BASE = 'node_modules/@voxgig/sdkgen'
|
|
22
|
+
|
|
23
|
+
async function action_feature(args: any[], ctx: any) {
|
|
24
|
+
|
|
25
|
+
const cmdname = args[1]
|
|
26
|
+
|
|
27
|
+
const cmd = CMD_MAP[cmdname]
|
|
28
|
+
|
|
29
|
+
if (null == cmd) {
|
|
30
|
+
throw new SdkGenError('Unknown feature cmd: ' + cmdname)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
await cmd(args, ctx)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
async function cmd_feature_add(args: any[], ctx: any) {
|
|
38
|
+
|
|
39
|
+
let features = args[2]
|
|
40
|
+
features = 'string' === typeof features ? features.split(',') : features
|
|
41
|
+
|
|
42
|
+
const jostraca = Jostraca()
|
|
43
|
+
|
|
44
|
+
const opts = {
|
|
45
|
+
fs: ctx.fs,
|
|
46
|
+
folder: ctx.folder,
|
|
47
|
+
log: ctx.log.child({ cmp: 'jostraca' }),
|
|
48
|
+
meta: { model: ctx.model, tree: ctx.tree }
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
await jostraca.generate(opts, () => FeatureRoot({ features }))
|
|
52
|
+
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
const FeatureRoot = cmp(function FeatureRoot(props: any) {
|
|
57
|
+
const { ctx$, features } = props
|
|
58
|
+
|
|
59
|
+
// TODO: model should be a top level ctx property
|
|
60
|
+
const model = ctx$.model = ctx$.meta.model
|
|
61
|
+
const target = model.main.sdk.target
|
|
62
|
+
|
|
63
|
+
Project({}, () => {
|
|
64
|
+
each(features, (n) => {
|
|
65
|
+
const name = n.val$
|
|
66
|
+
// TODO: validate feature is a-z0-9-_. only
|
|
67
|
+
|
|
68
|
+
Folder({ name: 'model/feature' }, () => {
|
|
69
|
+
Copy({
|
|
70
|
+
from: BASE + '/project/generate/model/feature/' + name + '.jsonic',
|
|
71
|
+
exclude: true
|
|
72
|
+
})
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
each(target, (target) =>
|
|
76
|
+
Folder({ name: 'tm/' + target.name + '/src/feature/' + name }, () => {
|
|
77
|
+
Copy({
|
|
78
|
+
from: BASE + '/project/generate/tm/' + target.name + '/src/feature/' + name,
|
|
79
|
+
exclude: true
|
|
80
|
+
})
|
|
81
|
+
}))
|
|
82
|
+
|
|
83
|
+
})
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
modifyModel({
|
|
87
|
+
features,
|
|
88
|
+
model: ctx$.meta.model,
|
|
89
|
+
tree: ctx$.meta.tree,
|
|
90
|
+
fs: ctx$.fs
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
async function modifyModel({ features, model, tree, fs }: any) {
|
|
97
|
+
// TODO: This is a kludge.
|
|
98
|
+
// Aontu should provide option for as-is AST so that can be used
|
|
99
|
+
// to find injection point more reliably
|
|
100
|
+
|
|
101
|
+
const path = tree.url
|
|
102
|
+
let src = fs().readFileSync(path, 'utf8')
|
|
103
|
+
|
|
104
|
+
// Inject feature file references into model
|
|
105
|
+
features.sort().map((feature: string) => {
|
|
106
|
+
const lineRE =
|
|
107
|
+
new RegExp(`@"feature/${feature}.jsonic"`)
|
|
108
|
+
if (!src.match(lineRE)) {
|
|
109
|
+
src = src.replace(/(main:\s+sdk:\s+feature:\s+\{\s*\}\n)/, '$1' +
|
|
110
|
+
`@"feature/${feature}.jsonic"\n`)
|
|
111
|
+
}
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
fs().writeFileSync(path, src)
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
export {
|
|
119
|
+
action_feature
|
|
120
|
+
}
|