@voxgig/sdkgen 0.40.1 → 0.40.2
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 +1 -1
- package/dist/helpers/buildIdNames.d.ts +11 -0
- package/dist/helpers/buildIdNames.js +56 -0
- package/dist/helpers/buildIdNames.js.map +1 -0
- package/dist/helpers/collectDeps.d.ts +9 -0
- package/dist/helpers/collectDeps.js +50 -0
- package/dist/helpers/collectDeps.js.map +1 -0
- package/dist/helpers/getMatchEntries.d.ts +2 -0
- package/dist/helpers/getMatchEntries.js +13 -0
- package/dist/helpers/getMatchEntries.js.map +1 -0
- package/dist/sdkgen.d.ts +6 -2
- package/dist/sdkgen.js +7 -1
- package/dist/sdkgen.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/project/.sdk/model/target/lua.jsonic +1 -1
- package/project/.sdk/model/target/php.jsonic +2 -3
- package/project/.sdk/model/target/py.jsonic +1 -1
- package/project/.sdk/src/cmp/go/Entity_go.ts +15 -3
- package/project/.sdk/src/cmp/go/Main_go.ts +3 -2
- package/project/.sdk/src/cmp/go/Package_go.ts +8 -29
- package/project/.sdk/src/cmp/go/TestDirect_go.ts +14 -7
- package/project/.sdk/src/cmp/go/TestEntity_go.ts +43 -30
- package/project/.sdk/src/cmp/js/TestDirect_js.ts +6 -3
- package/project/.sdk/src/cmp/lua/Package_lua.ts +5 -27
- package/project/.sdk/src/cmp/lua/TestDirect_lua.ts +6 -3
- package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +5 -17
- package/project/.sdk/src/cmp/php/Config_php.ts +21 -0
- package/project/.sdk/src/cmp/php/MainEntity_php.ts +11 -1
- package/project/.sdk/src/cmp/php/Package_php.ts +5 -31
- package/project/.sdk/src/cmp/php/TestDirect_php.ts +6 -3
- package/project/.sdk/src/cmp/php/TestEntity_php.ts +25 -29
- package/project/.sdk/src/cmp/py/Main_py.ts +5 -5
- package/project/.sdk/src/cmp/py/Package_py.ts +11 -28
- package/project/.sdk/src/cmp/py/TestDirect_py.ts +9 -6
- package/project/.sdk/src/cmp/py/TestEntity_py.ts +7 -19
- package/project/.sdk/src/cmp/rb/Package_rb.ts +8 -47
- package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +6 -3
- package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +5 -17
- package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +6 -3
- package/project/.sdk/tm/go/core/helpers.go +10 -0
- package/project/.sdk/tm/lua/Makefile +1 -1
- package/project/.sdk/tm/php/Makefile +1 -1
- package/src/helpers/buildIdNames.ts +70 -0
- package/src/helpers/collectDeps.ts +70 -0
- package/src/helpers/getMatchEntries.ts +14 -0
- package/src/sdkgen.ts +10 -0
package/bin/voxgig-sdkgen
CHANGED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Build the list of placeholder ID names that the test setup populates into
|
|
3
|
+
// `setup.idmap`. The set is the union of:
|
|
4
|
+
// - the entity's own ids (`<entity>01..03`)
|
|
5
|
+
// - every ancestor entity's ids (`<anc>01..03`)
|
|
6
|
+
// - every literal string value referenced by `step.match` across the flow
|
|
7
|
+
// (e.g. path-parameter aliases like `year01` for `/{year}/domain` — apidef
|
|
8
|
+
// doesn't always populate `relations.ancestors` when the parent in the
|
|
9
|
+
// path is a bare parameter rather than an entity, so we have to mine the
|
|
10
|
+
// flow steps directly to avoid KeyError-ing the idmap from generated test
|
|
11
|
+
// code)
|
|
12
|
+
//
|
|
13
|
+
// Identical helper was previously inlined in TestEntity_{go,py,lua,rb,php}.ts.
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.buildIdNames = buildIdNames;
|
|
16
|
+
const COUNT = 3; // 3 ids per name: <name>01, <name>02, <name>03
|
|
17
|
+
function buildIdNames(entity, flow) {
|
|
18
|
+
const idnames = [];
|
|
19
|
+
const seen = new Set();
|
|
20
|
+
const push = (n) => {
|
|
21
|
+
if (!seen.has(n)) {
|
|
22
|
+
seen.add(n);
|
|
23
|
+
idnames.push(n);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
for (let i = 1; i <= COUNT; i++)
|
|
27
|
+
push(`${entity.name}0${i}`);
|
|
28
|
+
const ancestors = (entity.relations?.ancestors || []).flat();
|
|
29
|
+
for (const anc of ancestors) {
|
|
30
|
+
for (let i = 1; i <= COUNT; i++)
|
|
31
|
+
push(`${anc}0${i}`);
|
|
32
|
+
}
|
|
33
|
+
const steps = Array.isArray(flow?.step)
|
|
34
|
+
? flow.step
|
|
35
|
+
: Object.values(flow?.step || {});
|
|
36
|
+
for (const step of steps) {
|
|
37
|
+
if (step?.match) {
|
|
38
|
+
for (const v of Object.values(step.match)) {
|
|
39
|
+
if (typeof v === 'string' && v && !v.endsWith('$'))
|
|
40
|
+
push(v);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// step.data values can also be aliased via setup (e.g. update step.data
|
|
44
|
+
// = {data_type_id: 'data_type01'} → setup adds idmap[data_type_id] =
|
|
45
|
+
// idmap[data_type01]). The right-hand side `data_type01` must be in the
|
|
46
|
+
// idmap or the alias resolves to undefined.
|
|
47
|
+
if (step?.data) {
|
|
48
|
+
for (const v of Object.values(step.data)) {
|
|
49
|
+
if (typeof v === 'string' && v && !v.endsWith('$'))
|
|
50
|
+
push(v);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return idnames;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=buildIdNames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildIdNames.js","sourceRoot":"","sources":["../../src/helpers/buildIdNames.ts"],"names":[],"mappings":";AAAA,4EAA4E;AAC5E,0CAA0C;AAC1C,8CAA8C;AAC9C,kDAAkD;AAClD,4EAA4E;AAC5E,+EAA+E;AAC/E,2EAA2E;AAC3E,6EAA6E;AAC7E,8EAA8E;AAC9E,YAAY;AACZ,EAAE;AACF,+EAA+E;;AAyD7E,oCAAY;AAvDd,MAAM,KAAK,GAAG,CAAC,CAAA,CAAC,+CAA+C;AAa/D,SAAS,YAAY,CAAC,MAAkB,EAAE,IAAc;IACtD,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE;QACzB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC,CAAA;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAA;IAE5D,MAAM,SAAS,GAAa,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IACtE,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAA;IACtD,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;QACrC,CAAC,CAAC,IAAI,CAAC,IAAI;QACX,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;IACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;YAChB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,IAAI,CAAC,CAAC,CAAC,CAAA;YAC7D,CAAC;QACH,CAAC;QACD,wEAAwE;QACxE,qEAAqE;QACrE,wEAAwE;QACxE,4CAA4C;QAC5C,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;YACf,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,IAAI,CAAC,CAAC,CAAC,CAAA;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Collect target-language dependencies from features and from the target's
|
|
3
|
+
// own `deps` block, applying the active-flag semantics that every Package_*.ts
|
|
4
|
+
// template was hand-rolling identically:
|
|
5
|
+
//
|
|
6
|
+
// - feature deps : included when `dep.active === true` (default off)
|
|
7
|
+
// - target deps : included when `dep.active !== false` (default on)
|
|
8
|
+
//
|
|
9
|
+
// The two sources are kept distinct via the `source` field so callers can
|
|
10
|
+
// apply their own version defaults / formatting (e.g. go uses `v0.0.0`,
|
|
11
|
+
// python `0.0`). The original dep object is exposed as `raw` for callers that
|
|
12
|
+
// need extra fields like `dep.replace` (go module replace directives) or
|
|
13
|
+
// `dep.kind` (prod/dev/peer).
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.collectDeps = collectDeps;
|
|
16
|
+
const jostraca_1 = require("jostraca");
|
|
17
|
+
const apidef_1 = require("@voxgig/apidef");
|
|
18
|
+
function collectDeps(model, targetName, targetDeps) {
|
|
19
|
+
const out = [];
|
|
20
|
+
const feature = (0, apidef_1.getModelPath)(model, `main.${apidef_1.KIT}.feature`);
|
|
21
|
+
(0, jostraca_1.each)(feature, (f) => {
|
|
22
|
+
const langDeps = f?.deps?.[targetName];
|
|
23
|
+
if (!langDeps)
|
|
24
|
+
return;
|
|
25
|
+
(0, jostraca_1.each)(langDeps, (dep) => {
|
|
26
|
+
if (dep?.active) {
|
|
27
|
+
out.push({
|
|
28
|
+
name: dep.key$,
|
|
29
|
+
version: dep.version,
|
|
30
|
+
source: 'feature',
|
|
31
|
+
raw: dep,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
if (targetDeps) {
|
|
37
|
+
(0, jostraca_1.each)(targetDeps, (dep) => {
|
|
38
|
+
if (dep?.active !== false) {
|
|
39
|
+
out.push({
|
|
40
|
+
name: dep.key$,
|
|
41
|
+
version: dep.version,
|
|
42
|
+
source: 'target',
|
|
43
|
+
raw: dep,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=collectDeps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectDeps.js","sourceRoot":"","sources":["../../src/helpers/collectDeps.ts"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,+EAA+E;AAC/E,yCAAyC;AACzC,EAAE;AACF,yEAAyE;AACzE,wEAAwE;AACxE,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,8EAA8E;AAC9E,yEAAyE;AACzE,8BAA8B;;AAyD5B,kCAAW;AAvDb,uCAA+B;AAC/B,2CAAkD;AASlD,SAAS,WAAW,CAClB,KAAU,EACV,UAAkB,EAClB,UAAe;IAEf,MAAM,GAAG,GAAe,EAAE,CAAA;IAC1B,MAAM,OAAO,GAAG,IAAA,qBAAY,EAAC,KAAK,EAAE,QAAQ,YAAG,UAAU,CAAC,CAAA;IAE1D,IAAA,eAAI,EAAC,OAAO,EAAE,CAAC,CAAM,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,CAAA;QACtC,IAAI,CAAC,QAAQ;YAAE,OAAM;QACrB,IAAA,eAAI,EAAC,QAAQ,EAAE,CAAC,GAAQ,EAAE,EAAE;YAC1B,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC;gBAChB,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,MAAM,EAAE,SAAS;oBACjB,GAAG,EAAE,GAAG;iBACT,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,IAAI,UAAU,EAAE,CAAC;QACf,IAAA,eAAI,EAAC,UAAU,EAAE,CAAC,GAAQ,EAAE,EAAE;YAC5B,IAAI,GAAG,EAAE,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC1B,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,MAAM,EAAE,QAAQ;oBAChB,GAAG,EAAE,GAAG;iBACT,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Return the user-facing entries of a flow step's `match` object. Keys ending
|
|
3
|
+
// in `$` are jostraca/aontu metadata sentinels and are skipped.
|
|
4
|
+
//
|
|
5
|
+
// Identical helper was previously inlined in TestEntity_*.ts and TestDirect_*.ts.
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.getMatchEntries = getMatchEntries;
|
|
8
|
+
function getMatchEntries(step) {
|
|
9
|
+
if (!step?.match)
|
|
10
|
+
return [];
|
|
11
|
+
return Object.entries(step.match).filter(([k]) => !k.endsWith('$'));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=getMatchEntries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMatchEntries.js","sourceRoot":"","sources":["../../src/helpers/getMatchEntries.ts"],"names":[],"mappings":";AAAA,8EAA8E;AAC9E,gEAAgE;AAChE,EAAE;AACF,kFAAkF;;AAShF,0CAAe;AAPjB,SAAS,eAAe,CAAC,IAAS;IAChC,IAAI,CAAC,IAAI,EAAE,KAAK;QAAE,OAAO,EAAE,CAAA;IAC3B,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAA;AAC1E,CAAC"}
|
package/dist/sdkgen.d.ts
CHANGED
|
@@ -17,6 +17,10 @@ import { ReadmeHowto } from './cmp/ReadmeHowto';
|
|
|
17
17
|
import { ReadmeExplanation } from './cmp/ReadmeExplanation';
|
|
18
18
|
import { ReadmeRef } from './cmp/ReadmeRef';
|
|
19
19
|
import { FeatureHook } from './cmp/FeatureHook';
|
|
20
|
+
import { buildIdNames } from './helpers/buildIdNames';
|
|
21
|
+
import { getMatchEntries } from './helpers/getMatchEntries';
|
|
22
|
+
import { collectDeps } from './helpers/collectDeps';
|
|
23
|
+
import type { DepEntry } from './helpers/collectDeps';
|
|
20
24
|
type SdkGenOptions = {
|
|
21
25
|
folder: string;
|
|
22
26
|
fs: any;
|
|
@@ -56,7 +60,7 @@ declare function SdkGen(opts: SdkGenOptions): {
|
|
|
56
60
|
declare namespace SdkGen {
|
|
57
61
|
var makeBuild: (opts: SdkGenOptions) => Promise<(model: any, build: any, ctx: any) => Promise<any>>;
|
|
58
62
|
}
|
|
59
|
-
export type { SdkGenOptions, };
|
|
63
|
+
export type { SdkGenOptions, DepEntry, };
|
|
60
64
|
type Component = (props: any, children?: any) => void;
|
|
61
65
|
export declare const cmp: (component: Function) => Component;
|
|
62
66
|
export declare const names: (base: any, name: string, prop?: string) => any;
|
|
@@ -82,4 +86,4 @@ export declare const Inject: Component;
|
|
|
82
86
|
export declare const Line: Component;
|
|
83
87
|
export declare const Slot: Component;
|
|
84
88
|
export declare const List: Component;
|
|
85
|
-
export { Main, Entity, Feature, Test, Readme, ReadmeTop, ReadmeInstall, ReadmeQuick, ReadmeIntro, ReadmeModel, ReadmeOptions, ReadmeEntity, ReadmeHowto, ReadmeExplanation, ReadmeRef, FeatureHook, Jostraca, SdkGen, requirePath, };
|
|
89
|
+
export { Main, Entity, Feature, Test, Readme, ReadmeTop, ReadmeInstall, ReadmeQuick, ReadmeIntro, ReadmeModel, ReadmeOptions, ReadmeEntity, ReadmeHowto, ReadmeExplanation, ReadmeRef, FeatureHook, Jostraca, SdkGen, requirePath, buildIdNames, getMatchEntries, collectDeps, };
|
package/dist/sdkgen.js
CHANGED
|
@@ -37,7 +37,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
38
|
};
|
|
39
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.requirePath = exports.Jostraca = exports.FeatureHook = exports.ReadmeRef = exports.ReadmeExplanation = exports.ReadmeHowto = exports.ReadmeEntity = exports.ReadmeOptions = exports.ReadmeModel = exports.ReadmeIntro = exports.ReadmeQuick = exports.ReadmeInstall = exports.ReadmeTop = exports.Readme = exports.Test = 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.indent = exports.template = exports.getx = exports.get = exports.vmap = exports.cmap = exports.kebabify = exports.camelify = exports.snakify = exports.each = exports.names = exports.cmp = void 0;
|
|
40
|
+
exports.collectDeps = exports.getMatchEntries = exports.buildIdNames = exports.requirePath = exports.Jostraca = exports.FeatureHook = exports.ReadmeRef = exports.ReadmeExplanation = exports.ReadmeHowto = exports.ReadmeEntity = exports.ReadmeOptions = exports.ReadmeModel = exports.ReadmeIntro = exports.ReadmeQuick = exports.ReadmeInstall = exports.ReadmeTop = exports.Readme = exports.Test = 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.indent = exports.template = exports.getx = exports.get = exports.vmap = exports.cmap = exports.kebabify = exports.camelify = exports.snakify = exports.each = exports.names = exports.cmp = void 0;
|
|
41
41
|
exports.SdkGen = SdkGen;
|
|
42
42
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
43
43
|
const node_path_1 = __importDefault(require("node:path"));
|
|
@@ -80,6 +80,12 @@ const ReadmeRef_1 = require("./cmp/ReadmeRef");
|
|
|
80
80
|
Object.defineProperty(exports, "ReadmeRef", { enumerable: true, get: function () { return ReadmeRef_1.ReadmeRef; } });
|
|
81
81
|
const FeatureHook_1 = require("./cmp/FeatureHook");
|
|
82
82
|
Object.defineProperty(exports, "FeatureHook", { enumerable: true, get: function () { return FeatureHook_1.FeatureHook; } });
|
|
83
|
+
const buildIdNames_1 = require("./helpers/buildIdNames");
|
|
84
|
+
Object.defineProperty(exports, "buildIdNames", { enumerable: true, get: function () { return buildIdNames_1.buildIdNames; } });
|
|
85
|
+
const getMatchEntries_1 = require("./helpers/getMatchEntries");
|
|
86
|
+
Object.defineProperty(exports, "getMatchEntries", { enumerable: true, get: function () { return getMatchEntries_1.getMatchEntries; } });
|
|
87
|
+
const collectDeps_1 = require("./helpers/collectDeps");
|
|
88
|
+
Object.defineProperty(exports, "collectDeps", { enumerable: true, get: function () { return collectDeps_1.collectDeps; } });
|
|
83
89
|
const target_1 = require("./action/target");
|
|
84
90
|
const feature_1 = require("./action/feature");
|
|
85
91
|
const { Jostraca } = JostracaModule;
|
package/dist/sdkgen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdkgen.js","sourceRoot":"","sources":["../src/sdkgen.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"sdkgen.js","sourceRoot":"","sources":["../src/sdkgen.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/sdkgen.ts","../src/types.ts","../src/utility.ts","../src/action/action.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/readmeexplanation.ts","../src/cmp/readmehowto.ts","../src/cmp/readmeinstall.ts","../src/cmp/readmeintro.ts","../src/cmp/readmemodel.ts","../src/cmp/readmeoptions.ts","../src/cmp/readmequick.ts","../src/cmp/readmeref.ts","../src/cmp/readmetop.ts","../src/cmp/test.ts"],"version":"6.0.3"}
|
|
1
|
+
{"root":["../src/sdkgen.ts","../src/types.ts","../src/utility.ts","../src/action/action.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/readmeexplanation.ts","../src/cmp/readmehowto.ts","../src/cmp/readmeinstall.ts","../src/cmp/readmeintro.ts","../src/cmp/readmemodel.ts","../src/cmp/readmeoptions.ts","../src/cmp/readmequick.ts","../src/cmp/readmeref.ts","../src/cmp/readmetop.ts","../src/cmp/test.ts","../src/helpers/buildidnames.ts","../src/helpers/collectdeps.ts","../src/helpers/getmatchentries.ts"],"version":"6.0.3"}
|
package/package.json
CHANGED
|
@@ -11,8 +11,8 @@ main: kit: target: lua: {
|
|
|
11
11
|
kind: *'prod' | string
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
+
# struct utility is vendored under tm/lua/utility/struct - no manifest dep needed
|
|
14
15
|
deps: {
|
|
15
|
-
'voxgig-struct': { active: true, version: '0.0.10' }
|
|
16
16
|
'dkjson': { active: true, version: '2.5' }
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -11,8 +11,8 @@ main: kit: target: py: {
|
|
|
11
11
|
kind: *'prod' | string
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
+
# struct utility is vendored under tm/py/utility/voxgig_struct - no manifest dep needed
|
|
14
15
|
deps: {
|
|
15
|
-
'voxgig-struct': { active: true, version: '0.0.10' }
|
|
16
16
|
'requests': { active: true, version: '2.33' }
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -32,13 +32,25 @@ const Entity = cmp(function Entity(props: any) {
|
|
|
32
32
|
|
|
33
33
|
const opnames = Object.keys(entity.op)
|
|
34
34
|
|
|
35
|
+
// For each CRUD op: if the spec defines it, splice in the real
|
|
36
|
+
// implementation. Otherwise emit a stub that satisfies the static
|
|
37
|
+
// ProjectNameEntity interface (so the package compiles) but errors
|
|
38
|
+
// at runtime if the caller invokes an unsupported op.
|
|
35
39
|
const opfrags =
|
|
36
40
|
(['load', 'list', 'create', 'update', 'remove']
|
|
37
41
|
.reduce((a: any, opname: string) =>
|
|
38
42
|
(a['// #' + camelify(opname) + 'Op'] =
|
|
39
|
-
!opnames.includes(opname) ?
|
|
40
|
-
|
|
41
|
-
|
|
43
|
+
!opnames.includes(opname) ?
|
|
44
|
+
({ indent }: any) => {
|
|
45
|
+
const Method = camelify(opname)
|
|
46
|
+
Content({ indent }, `func (e *${entity.Name}Entity) ${Method}(_ map[string]any, _ map[string]any) (any, error) {
|
|
47
|
+
return core.UnsupportedOp("${opname}", e.name)
|
|
48
|
+
}
|
|
49
|
+
`)
|
|
50
|
+
} :
|
|
51
|
+
({ indent }: any) => {
|
|
52
|
+
EntityOperation({ ff, opname, indent, entity, entrep, gomodule })
|
|
53
|
+
}, a), {}))
|
|
42
54
|
|
|
43
55
|
Fragment({
|
|
44
56
|
from: ff + 'Entity.fragment.go',
|
|
@@ -115,12 +115,13 @@ var NewBaseFeatureFunc func() Feature
|
|
|
115
115
|
})
|
|
116
116
|
|
|
117
117
|
// Generate root package file
|
|
118
|
+
const hasEntities = Object.keys(entity || {}).length > 0
|
|
119
|
+
const entityImport = hasEntities ? `\n\t"${gomodule}/entity"` : ''
|
|
118
120
|
File({ name: model.name + '.' + target.ext }, () => {
|
|
119
121
|
Content(`package ${gomodule}
|
|
120
122
|
|
|
121
123
|
import (
|
|
122
|
-
"${gomodule}/core"
|
|
123
|
-
"${gomodule}/entity"
|
|
124
|
+
"${gomodule}/core"${entityImport}
|
|
124
125
|
"${gomodule}/feature"
|
|
125
126
|
_ "${gomodule}/utility"
|
|
126
127
|
)
|
|
@@ -3,14 +3,12 @@ import {
|
|
|
3
3
|
Content,
|
|
4
4
|
File,
|
|
5
5
|
cmp,
|
|
6
|
-
|
|
6
|
+
collectDeps,
|
|
7
7
|
} from '@voxgig/sdkgen'
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
import {
|
|
11
|
-
KIT,
|
|
10
|
+
import type {
|
|
12
11
|
Model,
|
|
13
|
-
getModelPath,
|
|
14
12
|
} from '@voxgig/apidef'
|
|
15
13
|
|
|
16
14
|
|
|
@@ -20,8 +18,6 @@ const Package = cmp(async function Package(props: any) {
|
|
|
20
18
|
|
|
21
19
|
const model: Model = ctx$.model
|
|
22
20
|
|
|
23
|
-
const feature = getModelPath(model, `main.${KIT}.feature`)
|
|
24
|
-
|
|
25
21
|
// Module name: concatenated lowercase (e.g., voxgigsolardemosdk)
|
|
26
22
|
const orgPrefix = (model.origin || '').replace(/-sdk$/, '').replace(/[^a-z0-9]/gi, '')
|
|
27
23
|
const gomodule = orgPrefix + model.name + 'sdk'
|
|
@@ -33,32 +29,15 @@ go 1.20
|
|
|
33
29
|
|
|
34
30
|
`)
|
|
35
31
|
|
|
36
|
-
// Collect dependencies from features
|
|
37
32
|
const deps: Record<string, string> = {}
|
|
38
33
|
const replaceDirs: Record<string, string> = {}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
deps[dep.key$] = dep.version
|
|
46
|
-
}
|
|
47
|
-
})
|
|
34
|
+
for (const d of collectDeps(model, target.name, target.deps)) {
|
|
35
|
+
// Target-level deps default to 'v0.0.0' when version is absent;
|
|
36
|
+
// feature deps require an explicit version.
|
|
37
|
+
deps[d.name] = d.source === 'target' ? (d.version || 'v0.0.0') : d.version
|
|
38
|
+
if (d.source === 'target' && d.raw?.replace) {
|
|
39
|
+
replaceDirs[d.name] = d.raw.replace
|
|
48
40
|
}
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
// Add target-level deps
|
|
52
|
-
const targetDeps = target.deps
|
|
53
|
-
if (targetDeps) {
|
|
54
|
-
each(targetDeps, (dep: any) => {
|
|
55
|
-
if (dep.active !== false) {
|
|
56
|
-
deps[dep.key$] = dep.version || 'v0.0.0'
|
|
57
|
-
if (dep.replace) {
|
|
58
|
-
replaceDirs[dep.key$] = dep.replace
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
})
|
|
62
41
|
}
|
|
63
42
|
|
|
64
43
|
if (Object.keys(deps).length > 0) {
|
|
@@ -24,10 +24,13 @@ function normalizePathParams(
|
|
|
24
24
|
return part.replace(/\{([^}]+)\}/g, (match: string, rawName: string) => {
|
|
25
25
|
const snaked = snakify(rawName)
|
|
26
26
|
const depluralized = depluralize(snaked)
|
|
27
|
+
// Prefer exact name match — orig matches can collide when one param's
|
|
28
|
+
// original name was renamed to another param's current name (e.g. badge
|
|
29
|
+
// load: param 'group_id' has orig 'id', and another param has name 'id').
|
|
27
30
|
const param = params.find((p: any) =>
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
+
p.name === snaked || p.name === depluralized) ||
|
|
32
|
+
params.find((p: any) =>
|
|
33
|
+
p.orig === snaked || p.orig === depluralized)
|
|
31
34
|
if (param) return '{' + param.name + '}'
|
|
32
35
|
|
|
33
36
|
if (rename) {
|
|
@@ -128,14 +131,18 @@ func Test${entity.Name}Direct(t *testing.T) {
|
|
|
128
131
|
if (listParams.length > 0) {
|
|
129
132
|
Content(` params := map[string]any{}
|
|
130
133
|
`)
|
|
131
|
-
|
|
134
|
+
listLiveParams.forEach((lp: any, i: number) => {
|
|
135
|
+
// Each path param gets its own placeholder ("direct01", "direct02", ...)
|
|
136
|
+
// in non-live mode so URL-shape assertions can verify the params
|
|
137
|
+
// landed in distinct positions in the URL.
|
|
138
|
+
const placeholder = 'direct0' + (i + 1)
|
|
132
139
|
Content(` if setup.live {
|
|
133
140
|
params["${lp.name}"] = setup.idmap["${lp.key}"]
|
|
134
141
|
} else {
|
|
135
|
-
params["${lp.name}"] = "
|
|
142
|
+
params["${lp.name}"] = "${placeholder}"
|
|
136
143
|
}
|
|
137
144
|
`)
|
|
138
|
-
}
|
|
145
|
+
})
|
|
139
146
|
Content(`
|
|
140
147
|
result, err := client.Direct(map[string]any{
|
|
141
148
|
"path": "${listPath}",
|
|
@@ -320,7 +327,7 @@ func Test${entity.Name}Direct(t *testing.T) {
|
|
|
320
327
|
t.Fatalf("expected method GET, got %v", initMap["method"])
|
|
321
328
|
}
|
|
322
329
|
}
|
|
323
|
-
if url, ok := call["url"].(string); ok {
|
|
330
|
+
if ${loadParams.length > 0 ? 'url' : '_'}, ok := call["url"].(string); ok {
|
|
324
331
|
`)
|
|
325
332
|
|
|
326
333
|
for (let i = 0; i < loadParams.length; i++) {
|
|
@@ -16,6 +16,8 @@ import {
|
|
|
16
16
|
File,
|
|
17
17
|
cmp,
|
|
18
18
|
each,
|
|
19
|
+
buildIdNames,
|
|
20
|
+
getMatchEntries,
|
|
19
21
|
} from '@voxgig/sdkgen'
|
|
20
22
|
|
|
21
23
|
|
|
@@ -53,15 +55,7 @@ const TestEntity = cmp(function TestEntity(props: any) {
|
|
|
53
55
|
|
|
54
56
|
const PROJUPPER = model.const.Name.toUpperCase().replace(/[^A-Z_]/g, '_')
|
|
55
57
|
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
// Build idmap names: entity's own + ancestor ids
|
|
59
|
-
const idnames: string[] = []
|
|
60
|
-
for (let i = 1; i <= 3; i++) idnames.push(`${entity.name}0${i}`)
|
|
61
|
-
for (const anc of ancestors) {
|
|
62
|
-
for (let i = 1; i <= 3; i++) idnames.push(`${anc}0${i}`)
|
|
63
|
-
}
|
|
64
|
-
|
|
58
|
+
const idnames = buildIdNames(entity, basicflow)
|
|
65
59
|
const idnamesStr = idnames.map(n => `"${n}"`).join(', ')
|
|
66
60
|
|
|
67
61
|
// Get all update data entries for alias generation
|
|
@@ -74,13 +68,20 @@ const TestEntity = cmp(function TestEntity(props: any) {
|
|
|
74
68
|
|
|
75
69
|
const genCtx: GenCtx = { model, entity, gomodule, flow: basicflow, PROJUPPER }
|
|
76
70
|
|
|
71
|
+
// fmt is only used by the TextFieldMark Update branch — omit the import
|
|
72
|
+
// when no step needs it, otherwise Go's strict unused-import check fails.
|
|
73
|
+
const needsFmt = allSteps.some((s: any) =>
|
|
74
|
+
s.op === 'update' &&
|
|
75
|
+
s.input?.textfield &&
|
|
76
|
+
Array.isArray(s.spec) &&
|
|
77
|
+
s.spec.some((sp: any) => sp.apply === 'TextFieldMark'))
|
|
78
|
+
|
|
77
79
|
File({ name: entity.name + '_entity_test.' + target.ext }, () => {
|
|
78
80
|
|
|
79
81
|
Content(`package sdktest
|
|
80
82
|
|
|
81
83
|
import (
|
|
82
|
-
"encoding/json"
|
|
83
|
-
"fmt"
|
|
84
|
+
"encoding/json"${needsFmt ? '\n\t"fmt"' : ''}
|
|
84
85
|
"os"
|
|
85
86
|
"path/filepath"
|
|
86
87
|
"runtime"
|
|
@@ -104,20 +105,22 @@ func Test${entity.Name}Entity(t *testing.T) {
|
|
|
104
105
|
|
|
105
106
|
t.Run("basic", func(t *testing.T) {
|
|
106
107
|
setup := ${entity.name}BasicSetup(nil)
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
`)
|
|
108
|
+
${allSteps.length > 0 ? '\t\tclient := setup.client\n\n' : ''}`)
|
|
110
109
|
|
|
111
110
|
// Check if the flow has a create step; if not, bootstrap entity data
|
|
112
111
|
const flowHasCreate = allSteps.some((s: any) => s.op === 'create')
|
|
113
112
|
if (!flowHasCreate) {
|
|
114
113
|
const preambleRef = entity.name + '_ref01'
|
|
114
|
+
const preambleVar = goVar(preambleRef)
|
|
115
115
|
Content(` // Bootstrap entity data from existing test data (no create step in flow).
|
|
116
|
-
${
|
|
117
|
-
var ${
|
|
118
|
-
if len(${
|
|
119
|
-
${
|
|
116
|
+
${preambleVar}DataRaw := vs.Items(core.ToMapAny(vs.GetPath("existing.${entity.name}", setup.data)))
|
|
117
|
+
var ${preambleVar}Data map[string]any
|
|
118
|
+
if len(${preambleVar}DataRaw) > 0 {
|
|
119
|
+
${preambleVar}Data = core.ToMapAny(${preambleVar}DataRaw[0][1])
|
|
120
120
|
}
|
|
121
|
+
// Discard guards against Go's unused-var check when the flow's steps
|
|
122
|
+
// happen not to consume the bootstrap data (e.g. list-only flows).
|
|
123
|
+
_ = ${preambleVar}Data
|
|
121
124
|
|
|
122
125
|
`)
|
|
123
126
|
}
|
|
@@ -222,13 +225,6 @@ func Test${entity.Name}Entity(t *testing.T) {
|
|
|
222
225
|
})
|
|
223
226
|
|
|
224
227
|
|
|
225
|
-
// Get match entries from a step, filtering out $ keys.
|
|
226
|
-
function getMatchEntries(step: any): [string, any][] {
|
|
227
|
-
if (!step?.match) return []
|
|
228
|
-
return Object.entries(step.match).filter(([k]: any) => !k.endsWith('$'))
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
|
|
232
228
|
const generateCreate: OpGen = (ctx, step, index) => {
|
|
233
229
|
const { entity, flow } = ctx
|
|
234
230
|
const ref = step.input?.ref ?? entity.name + '_ref01'
|
|
@@ -323,19 +319,32 @@ const generateList: OpGen = (ctx, step, index) => {
|
|
|
323
319
|
`)
|
|
324
320
|
}
|
|
325
321
|
|
|
322
|
+
// Only declare ${listvar} as a real var when a downstream validator
|
|
323
|
+
// actually uses it; otherwise `_` to satisfy Go's unused-var check.
|
|
324
|
+
const allSteps = Object.values(flow.step) as any[]
|
|
325
|
+
const listvarUsed = !!step.valid?.some((v: any) => {
|
|
326
|
+
if ('ItemExists' !== v.apply && 'ItemNotExists' !== v.apply) return false
|
|
327
|
+
const validRef = v.def?.ref
|
|
328
|
+
return validRef && allSteps.some((s: any) => 'create' === s.op &&
|
|
329
|
+
((s.input?.ref ?? entity.name + '_ref01') === validRef))
|
|
330
|
+
})
|
|
331
|
+
const listvarBind = listvarUsed ? listvar : '_'
|
|
332
|
+
|
|
333
|
+
// Use a list-step-unique `ok` name; if a prior list emitted plain `ok`,
|
|
334
|
+
// a second `_, ok :=` would be "no new variables on left side of :=".
|
|
335
|
+
const okvar = listvar + 'Ok'
|
|
326
336
|
Content(`
|
|
327
337
|
${listvar}Result, err := ${entvar}.List(${matchvar}, nil)
|
|
328
338
|
if err != nil {
|
|
329
339
|
t.Fatalf("list failed: %v", err)
|
|
330
340
|
}
|
|
331
|
-
${
|
|
332
|
-
if
|
|
341
|
+
${listvarBind}, ${okvar} := ${listvar}Result.([]any)
|
|
342
|
+
if !${okvar} {
|
|
333
343
|
t.Fatalf("expected list result to be an array, got %T", ${listvar}Result)
|
|
334
344
|
}
|
|
335
345
|
`)
|
|
336
346
|
|
|
337
347
|
// Handle validators from step.valid
|
|
338
|
-
const allSteps = Object.values(flow.step) as any[]
|
|
339
348
|
if (step.valid) {
|
|
340
349
|
for (const validator of step.valid) {
|
|
341
350
|
const validRef = validator.def?.ref
|
|
@@ -474,7 +483,7 @@ const generateLoad: OpGen = (ctx, step, index) => {
|
|
|
474
483
|
`)
|
|
475
484
|
}
|
|
476
485
|
if (!hasSrcData) {
|
|
477
|
-
Content(` ${srcdatavar}Raw := vs.Items(core.ToMapAny(vs.
|
|
486
|
+
Content(` ${srcdatavar}Raw := vs.Items(core.ToMapAny(vs.GetPath("existing.${entity.name}", setup.data)))
|
|
478
487
|
var ${srcdatavar} map[string]any
|
|
479
488
|
if len(${srcdatavar}Raw) > 0 {
|
|
480
489
|
${srcdatavar} = core.ToMapAny(${srcdatavar}Raw[0][1])
|
|
@@ -510,6 +519,10 @@ const generateRemove: OpGen = (ctx, step, index) => {
|
|
|
510
519
|
const needsEnt = !priorSteps.some((s: any) =>
|
|
511
520
|
['create', 'list', 'load', 'update', 'remove'].includes(s.op))
|
|
512
521
|
|
|
522
|
+
// Use `:=` when this is the first op step (so `err` gets declared);
|
|
523
|
+
// otherwise reuse the `err` from a prior op step.
|
|
524
|
+
const errOp = needsEnt ? ':=' : '='
|
|
525
|
+
|
|
513
526
|
Content(` // REMOVE
|
|
514
527
|
`)
|
|
515
528
|
if (needsEnt) {
|
|
@@ -519,7 +532,7 @@ const generateRemove: OpGen = (ctx, step, index) => {
|
|
|
519
532
|
Content(` ${matchvar} := map[string]any{
|
|
520
533
|
"id": ${srcdatavar}["id"],
|
|
521
534
|
}
|
|
522
|
-
_, err
|
|
535
|
+
_, err ${errOp} ${entvar}.Remove(${matchvar}, nil)
|
|
523
536
|
if err != nil {
|
|
524
537
|
t.Fatalf("remove failed: %v", err)
|
|
525
538
|
}
|