@voxgig/sdkgen 0.40.1 → 0.41.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.
Files changed (47) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/helpers/buildIdNames.d.ts +11 -0
  3. package/dist/helpers/buildIdNames.js +56 -0
  4. package/dist/helpers/buildIdNames.js.map +1 -0
  5. package/dist/helpers/collectDeps.d.ts +9 -0
  6. package/dist/helpers/collectDeps.js +50 -0
  7. package/dist/helpers/collectDeps.js.map +1 -0
  8. package/dist/helpers/getMatchEntries.d.ts +2 -0
  9. package/dist/helpers/getMatchEntries.js +13 -0
  10. package/dist/helpers/getMatchEntries.js.map +1 -0
  11. package/dist/sdkgen.d.ts +6 -2
  12. package/dist/sdkgen.js +7 -1
  13. package/dist/sdkgen.js.map +1 -1
  14. package/dist/tsconfig.tsbuildinfo +1 -1
  15. package/package.json +1 -1
  16. package/project/.sdk/model/target/lua.jsonic +1 -1
  17. package/project/.sdk/model/target/php.jsonic +2 -3
  18. package/project/.sdk/model/target/py.jsonic +1 -1
  19. package/project/.sdk/src/cmp/go/Entity_go.ts +15 -3
  20. package/project/.sdk/src/cmp/go/Main_go.ts +3 -2
  21. package/project/.sdk/src/cmp/go/Package_go.ts +8 -29
  22. package/project/.sdk/src/cmp/go/TestDirect_go.ts +14 -7
  23. package/project/.sdk/src/cmp/go/TestEntity_go.ts +43 -30
  24. package/project/.sdk/src/cmp/js/TestDirect_js.ts +6 -3
  25. package/project/.sdk/src/cmp/lua/Package_lua.ts +5 -27
  26. package/project/.sdk/src/cmp/lua/TestDirect_lua.ts +6 -3
  27. package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +5 -17
  28. package/project/.sdk/src/cmp/php/Config_php.ts +21 -0
  29. package/project/.sdk/src/cmp/php/MainEntity_php.ts +11 -1
  30. package/project/.sdk/src/cmp/php/Package_php.ts +5 -31
  31. package/project/.sdk/src/cmp/php/TestDirect_php.ts +6 -3
  32. package/project/.sdk/src/cmp/php/TestEntity_php.ts +25 -29
  33. package/project/.sdk/src/cmp/py/Main_py.ts +5 -5
  34. package/project/.sdk/src/cmp/py/Package_py.ts +11 -28
  35. package/project/.sdk/src/cmp/py/TestDirect_py.ts +9 -6
  36. package/project/.sdk/src/cmp/py/TestEntity_py.ts +7 -19
  37. package/project/.sdk/src/cmp/rb/Package_rb.ts +8 -47
  38. package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +6 -3
  39. package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +5 -17
  40. package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +6 -3
  41. package/project/.sdk/tm/go/core/helpers.go +10 -0
  42. package/project/.sdk/tm/lua/Makefile +1 -1
  43. package/project/.sdk/tm/php/Makefile +1 -1
  44. package/src/helpers/buildIdNames.ts +70 -0
  45. package/src/helpers/collectDeps.ts +70 -0
  46. package/src/helpers/getMatchEntries.ts +14 -0
  47. package/src/sdkgen.ts +10 -0
package/bin/voxgig-sdkgen CHANGED
@@ -8,7 +8,7 @@ const { Shape, One } = require('shape')
8
8
 
9
9
  const { SdkGen } = require('../dist/sdkgen.js')
10
10
 
11
- const VERSION = '0.40.1'
11
+ const VERSION = '0.41.0'
12
12
  const KONSOLE = console
13
13
 
14
14
 
@@ -0,0 +1,11 @@
1
+ type FlowLike = {
2
+ step?: Record<string, any> | any[];
3
+ };
4
+ type EntityLike = {
5
+ name: string;
6
+ relations?: {
7
+ ancestors?: any;
8
+ };
9
+ };
10
+ declare function buildIdNames(entity: EntityLike, flow: FlowLike): string[];
11
+ export { buildIdNames, };
@@ -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,9 @@
1
+ type DepEntry = {
2
+ name: string;
3
+ version: string;
4
+ source: 'feature' | 'target';
5
+ raw: any;
6
+ };
7
+ declare function collectDeps(model: any, targetName: string, targetDeps: any): DepEntry[];
8
+ export type { DepEntry, };
9
+ export { collectDeps, };
@@ -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,2 @@
1
+ declare function getMatchEntries(step: any): [string, any][];
2
+ export { getMatchEntries, };
@@ -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;
@@ -1 +1 @@
1
- {"version":3,"file":"sdkgen.js","sourceRoot":"","sources":["../src/sdkgen.ts"],"names":[],"mappings":"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"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voxgig/sdkgen",
3
- "version": "0.40.1",
3
+ "version": "0.41.0",
4
4
  "main": "dist/sdkgen.js",
5
5
  "type": "commonjs",
6
6
  "types": "dist/sdkgen.d.ts",
@@ -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,9 +11,8 @@ main: kit: target: php: {
11
11
  kind: *'prod' | string
12
12
  }
13
13
 
14
- deps: {
15
- 'voxgig/struct': { active: true, version: '0.0.10' }
16
- }
14
+ # struct utility is vendored under tm/php/utility/struct - no manifest dep needed
15
+ deps: {}
17
16
  }
18
17
 
19
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) ? '' : ({ indent }: any) => {
40
- EntityOperation({ ff, opname, indent, entity, entrep, gomodule })
41
- }, a), {}))
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
- each,
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
- each(feature, (f: any) => {
41
- const goDeps = f.deps?.go
42
- if (goDeps) {
43
- each(goDeps, (dep: any) => {
44
- if (dep.active) {
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
- p.orig === snaked || p.name === snaked ||
29
- p.orig === depluralized || p.name === depluralized
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
- for (const lp of listLiveParams) {
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}"] = "direct01"
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 ancestors = (entity.relations?.ancestors || []).flat()
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
- client := setup.client
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
- ${goVar(preambleRef)}DataRaw := vs.Items(core.ToMapAny(vs.GetProp(setup.data, "existing.${entity.name}")))
117
- var ${goVar(preambleRef)}Data map[string]any
118
- if len(${goVar(preambleRef)}DataRaw) > 0 {
119
- ${goVar(preambleRef)}Data = core.ToMapAny(${goVar(preambleRef)}DataRaw[0][1])
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
- ${listvar}, ok := ${listvar}Result.([]any)
332
- if !ok {
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.GetProp(setup.data, "existing.${entity.name}")))
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 = ${entvar}.Remove(${matchvar}, nil)
535
+ _, err ${errOp} ${entvar}.Remove(${matchvar}, nil)
523
536
  if err != nil {
524
537
  t.Fatalf("remove failed: %v", err)
525
538
  }