@voxgig/apidef 2.4.1 → 3.1.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 (108) hide show
  1. package/dist/apidef.d.ts +7 -2
  2. package/dist/apidef.js +190 -114
  3. package/dist/apidef.js.map +1 -1
  4. package/dist/builder/entity/entity.d.ts +3 -0
  5. package/dist/builder/entity/{apiEntity.js → entity.js} +12 -9
  6. package/dist/builder/entity/entity.js.map +1 -0
  7. package/dist/builder/entity/info.d.ts +3 -0
  8. package/dist/builder/entity/info.js +22 -0
  9. package/dist/builder/entity/info.js.map +1 -0
  10. package/dist/builder/entity.js +7 -21
  11. package/dist/builder/entity.js.map +1 -1
  12. package/dist/builder/flow/flowHeuristic01.js +21 -11
  13. package/dist/builder/flow/flowHeuristic01.js.map +1 -1
  14. package/dist/builder/flow.d.ts +2 -1
  15. package/dist/builder/flow.js +39 -12
  16. package/dist/builder/flow.js.map +1 -1
  17. package/dist/def.d.ts +62 -0
  18. package/dist/def.js +4 -0
  19. package/dist/def.js.map +1 -0
  20. package/dist/desc.d.ts +87 -0
  21. package/dist/desc.js +4 -0
  22. package/dist/desc.js.map +1 -0
  23. package/dist/guide/guide.d.ts +2 -1
  24. package/dist/guide/guide.js +161 -30
  25. package/dist/guide/guide.js.map +1 -1
  26. package/dist/guide/heuristic01.d.ts +2 -1
  27. package/dist/guide/heuristic01.js +1122 -234
  28. package/dist/guide/heuristic01.js.map +1 -1
  29. package/dist/model.d.ts +90 -0
  30. package/dist/model.js +4 -0
  31. package/dist/model.js.map +1 -0
  32. package/dist/parse.d.ts +4 -3
  33. package/dist/parse.js +40 -46
  34. package/dist/parse.js.map +1 -1
  35. package/dist/resolver.js +2 -1
  36. package/dist/resolver.js.map +1 -1
  37. package/dist/transform/args.d.ts +3 -0
  38. package/dist/transform/args.js +54 -0
  39. package/dist/transform/args.js.map +1 -0
  40. package/dist/transform/clean.d.ts +2 -2
  41. package/dist/transform/clean.js +28 -3
  42. package/dist/transform/clean.js.map +1 -1
  43. package/dist/transform/entity.d.ts +9 -1
  44. package/dist/transform/entity.js +57 -41
  45. package/dist/transform/entity.js.map +1 -1
  46. package/dist/transform/field.d.ts +1 -1
  47. package/dist/transform/field.js +89 -65
  48. package/dist/transform/field.js.map +1 -1
  49. package/dist/transform/flow.d.ts +3 -0
  50. package/dist/transform/flow.js +26 -0
  51. package/dist/transform/flow.js.map +1 -0
  52. package/dist/transform/flowstep.d.ts +3 -0
  53. package/dist/transform/flowstep.js +145 -0
  54. package/dist/transform/flowstep.js.map +1 -0
  55. package/dist/transform/operation.d.ts +3 -3
  56. package/dist/transform/operation.js +101 -296
  57. package/dist/transform/operation.js.map +1 -1
  58. package/dist/transform/select.d.ts +3 -0
  59. package/dist/transform/select.js +65 -0
  60. package/dist/transform/select.js.map +1 -0
  61. package/dist/transform/top.js +24 -2
  62. package/dist/transform/top.js.map +1 -1
  63. package/dist/transform.d.ts +1 -1
  64. package/dist/transform.js +4 -0
  65. package/dist/transform.js.map +1 -1
  66. package/dist/tsconfig.tsbuildinfo +1 -1
  67. package/dist/types.d.ts +115 -14
  68. package/dist/types.js +4 -2
  69. package/dist/types.js.map +1 -1
  70. package/dist/utility.d.ts +34 -2
  71. package/dist/utility.js +444 -6
  72. package/dist/utility.js.map +1 -1
  73. package/model/apidef.jsonic +76 -1
  74. package/model/guide.jsonic +14 -44
  75. package/package.json +19 -16
  76. package/src/apidef.ts +258 -122
  77. package/src/builder/entity/{apiEntity.ts → entity.ts} +18 -11
  78. package/src/builder/entity/info.ts +53 -0
  79. package/src/builder/entity.ts +9 -35
  80. package/src/builder/flow/flowHeuristic01.ts +46 -12
  81. package/src/builder/flow.ts +54 -13
  82. package/src/def.ts +91 -0
  83. package/src/desc.ts +154 -0
  84. package/src/guide/guide.ts +208 -134
  85. package/src/guide/heuristic01.ts +1653 -272
  86. package/src/model.ts +143 -0
  87. package/src/parse.ts +50 -59
  88. package/src/resolver.ts +3 -1
  89. package/src/schematron.ts.off +317 -0
  90. package/src/transform/args.ts +98 -0
  91. package/src/transform/clean.ts +45 -11
  92. package/src/transform/entity.ts +96 -50
  93. package/src/transform/field.ts +136 -75
  94. package/src/transform/flow.ts +59 -0
  95. package/src/transform/flowstep.ts +242 -0
  96. package/src/transform/operation.ts +119 -419
  97. package/src/transform/select.ts +119 -0
  98. package/src/transform/top.ts +46 -4
  99. package/src/transform.ts +8 -4
  100. package/src/types.ts +181 -5
  101. package/src/utility.ts +567 -9
  102. package/dist/builder/entity/apiEntity.d.ts +0 -3
  103. package/dist/builder/entity/apiEntity.js.map +0 -1
  104. package/dist/builder/entity/def.d.ts +0 -3
  105. package/dist/builder/entity/def.js +0 -19
  106. package/dist/builder/entity/def.js.map +0 -1
  107. package/src/builder/entity/def.ts +0 -44
  108. package/src/guide.ts.off +0 -136
@@ -1,59 +1,75 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.entityTransform = void 0;
4
+ exports.resolvePathList = resolvePathList;
5
+ exports.buildRelations = buildRelations;
4
6
  const jostraca_1 = require("jostraca");
5
- const transform_1 = require("../transform");
6
- const utility_1 = require("../utility");
7
+ const types_1 = require("../types");
7
8
  const entityTransform = async function (ctx) {
8
- const { apimodel, model, def, guide } = ctx;
9
+ const { apimodel, guide } = ctx;
10
+ const kit = apimodel.main[types_1.KIT];
9
11
  let msg = '';
10
- (0, jostraca_1.each)(guide.entity, (guideEntity) => {
11
- const entityName = guideEntity.key$;
12
- ctx.log.debug({ point: 'guide-entity', note: entityName });
13
- const entityModel = apimodel.main.api.entity[entityName] = {
12
+ (0, jostraca_1.each)(guide.entity, (guideEntity, entname) => {
13
+ ctx.log.debug({ point: 'guide-entity', note: entname });
14
+ const paths$ = resolvePathList(guideEntity, ctx.def);
15
+ const relations = buildRelations(guideEntity, paths$);
16
+ const modelent = {
17
+ name: entname,
14
18
  op: {},
15
- field: {},
16
- cmd: {},
19
+ fields: [],
17
20
  id: {
18
21
  name: 'id',
19
22
  field: 'id',
20
23
  },
21
- ancestors: []
24
+ relations,
22
25
  };
23
- (0, transform_1.fixName)(entityModel, guideEntity.key$);
24
- let ancestors = [];
25
- let ancestorsDone = false;
26
- (0, jostraca_1.each)(guideEntity.path, (guidePath, pathStr) => {
27
- const path = guidePath.key$;
28
- const pathdef = def.paths[path];
29
- if (null == pathdef) {
30
- throw new Error('path not found in OpenAPI: ' + path +
31
- ' (entity: ' + guideEntity.name + ')');
32
- }
33
- // TODO: is this needed?
34
- guidePath.parts$ = path.split('/');
35
- guidePath.params$ = guidePath.parts$
36
- .filter((p) => p.startsWith('{'))
37
- .map((p) => p.substring(1, p.length - 1));
38
- if (!ancestorsDone) {
39
- // Find all path sections matching /foo/{..param..} and build ancestors array
40
- const paramRegex = /\/([a-zA-Z0-9_-]+)\/\{[a-zA-Z0-9_-]+\}/g;
41
- let m;
42
- while ((m = paramRegex.exec(pathStr)) !== null) {
43
- // Skip if this is the last section (the entity itself)
44
- const remainingPath = pathStr.substring(m.index + m[0].length);
45
- if (remainingPath.length > 0) {
46
- const ancestorName = (0, utility_1.depluralize)((0, jostraca_1.snakify)(m[1]));
47
- ancestors.push(ancestorName);
48
- }
49
- }
50
- ancestorsDone = true;
51
- }
52
- });
53
- entityModel.ancestors = ancestors;
26
+ kit.entity[entname] = modelent;
54
27
  msg += guideEntity.name + ' ';
55
28
  });
56
29
  return { ok: true, msg };
57
30
  };
58
31
  exports.entityTransform = entityTransform;
32
+ function resolvePathList(guideEntity, def) {
33
+ const paths$ = [];
34
+ (0, jostraca_1.each)(guideEntity.path, (guidePath, orig) => {
35
+ const parts = orig.split('/').filter(p => '' != p);
36
+ const rename = guidePath.rename ?? {};
37
+ (0, jostraca_1.each)(rename.param, (param) => {
38
+ const pI = parts.indexOf('{' + param.key$ + '}');
39
+ parts[pI] = '{' + param.val$ + '}';
40
+ });
41
+ const pathdesc = {
42
+ orig,
43
+ parts,
44
+ rename,
45
+ method: '', // operation collectOps will copy and assign per op
46
+ op: guidePath.op,
47
+ def: def.paths[orig],
48
+ };
49
+ paths$.push(pathdesc);
50
+ });
51
+ guideEntity.paths$ = paths$;
52
+ return paths$;
53
+ }
54
+ function buildRelations(guideEntity, paths$) {
55
+ let ancestors = paths$
56
+ .map(pli => pli.parts
57
+ .map((p, i) => (pli.parts[i + 1]?.[0] === '{' && pli.parts[i + 1] !== '{id}') ? p : null)
58
+ .filter(p => null != p))
59
+ .filter(n => 0 < n.length)
60
+ .sort((a, b) => a.length - b.length);
61
+ // remove suffixes
62
+ ancestors = ancestors
63
+ .reduce((a, n, j) => ((0 < (ancestors.slice(j + 1).filter(p => suffix(p, n))).length
64
+ ? null : a.push(n)), a), []);
65
+ const relations = {
66
+ ancestors
67
+ };
68
+ guideEntity.relations$ = relations;
69
+ return relations;
70
+ }
71
+ // True if array c is a suffix of array p,
72
+ function suffix(p, c) {
73
+ return c.reduce((b, _, i) => (b && c[c.length - 1 - i] === p[p.length - 1 - i]), true);
74
+ }
59
75
  //# sourceMappingURL=entity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/transform/entity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/transform/entity.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import type { Transform } from '../transform';
2
2
  declare const fieldTransform: Transform;
3
- export { fieldTransform };
3
+ export { fieldTransform, };
@@ -2,84 +2,108 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.fieldTransform = void 0;
4
4
  const jostraca_1 = require("jostraca");
5
- const transform_1 = require("../transform");
5
+ const utility_1 = require("../utility");
6
+ const types_1 = require("../types");
6
7
  const fieldTransform = async function (ctx) {
7
- const { apimodel, model, def, guide } = ctx;
8
- let msg = 'fields: ';
9
- (0, jostraca_1.each)(guide.entity, (guideEntity) => {
10
- const entityName = guideEntity.key$;
11
- const entityModel = apimodel.main.api.entity[entityName];
12
- let fieldCount = 0;
13
- (0, jostraca_1.each)(guideEntity.path, (guidePath) => {
14
- const path = guidePath.key$;
15
- const pathdef = def.paths[path];
16
- (0, jostraca_1.each)(guidePath.op, (op) => {
17
- const opname = op.key$;
18
- if ('load' === opname) {
19
- fieldCount = fieldbuild(entityModel, pathdef, op, guidePath, guideEntity, model);
8
+ const { apimodel, def } = ctx;
9
+ const kit = apimodel.main[types_1.KIT];
10
+ let msg = 'field ';
11
+ const opFieldPrecedence = ['load', 'create', 'update', 'patch', 'list'];
12
+ (0, jostraca_1.each)(kit.entity, (ment, _entname) => {
13
+ const fields = ment.fields;
14
+ const seen = {};
15
+ for (let opname of opFieldPrecedence) {
16
+ const mop = ment.op[opname];
17
+ if (mop) {
18
+ const malts = mop.alts;
19
+ for (let malt of malts) {
20
+ const opfields = resolveOpFields(ment, mop, malt, def);
21
+ for (let opfield of opfields) {
22
+ if (!seen[opfield.name]) {
23
+ fields.push(opfield);
24
+ seen[opfield.name] = opfield;
25
+ }
26
+ else {
27
+ mergeField(ment, mop, malt, def, seen[opfield.name], opfield);
28
+ }
29
+ }
20
30
  }
21
- });
31
+ }
32
+ }
33
+ fields.sort((a, b) => {
34
+ return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
22
35
  });
23
- msg += guideEntity.name + '=' + fieldCount + ' ';
36
+ msg += ment.name + ' ';
24
37
  });
25
38
  return { ok: true, msg };
26
39
  };
27
40
  exports.fieldTransform = fieldTransform;
28
- function fieldbuild(entityModel, pathdef, op, path, entity, model) {
29
- let fieldCount = 0;
30
- let fieldSets = (0, jostraca_1.getx)(pathdef.get, 'responses 200 content "application/json" schema');
31
- if (fieldSets) {
32
- if (Array.isArray(fieldSets.allOf)) {
33
- fieldSets = fieldSets.allOf;
41
+ function resolveOpFields(ment, mop, malt, def) {
42
+ const mfields = [];
43
+ const fielddefs = findFieldDefs(ment, mop, malt, def);
44
+ for (let fielddef of fielddefs) {
45
+ const fieldname = fielddef.key$;
46
+ const mfield = {
47
+ name: (0, utility_1.canonize)(fieldname),
48
+ type: (0, utility_1.validator)(fielddef.type),
49
+ req: !!fielddef.required,
50
+ op: {},
51
+ };
52
+ mfields.push(mfield);
53
+ }
54
+ return mfields;
55
+ }
56
+ function findFieldDefs(_ment, mop, malt, def) {
57
+ const fielddefs = [];
58
+ const pathdef = def.paths[malt.orig];
59
+ const method = malt.method.toLowerCase();
60
+ const opdef = pathdef[method];
61
+ if (opdef) {
62
+ const responses = opdef.responses;
63
+ const requestBody = opdef.requestBody;
64
+ let fieldSets;
65
+ if (responses) {
66
+ fieldSets = (0, jostraca_1.getx)(responses, '200 content "application/json" schema') ??
67
+ (0, jostraca_1.getx)(responses, '200 schema');
68
+ if ('get' === method && 'list' == mop.name) {
69
+ fieldSets = (0, jostraca_1.getx)(responses, '201 content "application/json" schema items') ??
70
+ (0, jostraca_1.getx)(responses, '201 schema items');
71
+ }
72
+ else if ('put' === method && null == fieldSets) {
73
+ fieldSets = (0, jostraca_1.getx)(responses, '201 content "application/json" schema') ??
74
+ (0, jostraca_1.getx)(responses, '201 schema');
75
+ }
34
76
  }
35
- else if (fieldSets.properties) {
36
- fieldSets = [fieldSets];
77
+ if (requestBody) {
78
+ fieldSets = [
79
+ fieldSets,
80
+ (0, jostraca_1.getx)(requestBody, 'content "application/json" schema') ??
81
+ (0, jostraca_1.getx)(requestBody, 'schema')
82
+ ];
37
83
  }
38
- }
39
- (0, jostraca_1.each)(fieldSets, (fieldSet) => {
40
- (0, jostraca_1.each)(fieldSet.properties, (property) => {
41
- const field = (entityModel.field[property.key$] = entityModel.field[property.key$] || {});
42
- field.name = property.key$;
43
- (0, transform_1.fixName)(field, field.name);
44
- // field.type = property.type
45
- resolveFieldType(entityModel, field, property);
46
- (0, transform_1.fixName)(field, field.type, 'type');
47
- field.short = property.description;
48
- fieldCount++;
49
- });
50
- });
51
- // Guess id field name using GET path param
52
- if ('load' === op.key$) {
53
- const getdef = pathdef.get;
54
- const getparams = getdef.parameters || [];
55
- if (1 === getparams.length) {
56
- if (entityModel.op.load.path.match(RegExp('\\{' + getdef.parameters[0].name + '\\}$'))) {
57
- entityModel.id.field = getdef.parameters[0].name;
84
+ if (fieldSets) {
85
+ if (Array.isArray(fieldSets.allOf)) {
86
+ fieldSets = fieldSets.allOf;
87
+ }
88
+ else if (fieldSets.properties) {
89
+ fieldSets = [fieldSets];
58
90
  }
59
91
  }
92
+ (0, jostraca_1.each)(fieldSets, (fieldSet) => {
93
+ (0, jostraca_1.each)(fieldSet?.properties, (property) => {
94
+ fielddefs.push(property);
95
+ });
96
+ });
60
97
  }
61
- return fieldCount;
98
+ return fielddefs;
62
99
  }
63
- // Resovles a heuristic "primary" type which subsumes the more detailed type.
64
- // The primary type is only: string, number, boolean, null, object, array
65
- function resolveFieldType(entity, field, property) {
66
- const ptt = typeof property.type;
67
- if ('string' === ptt) {
68
- field.type = property.type;
69
- }
70
- else if (Array.isArray(property.type)) {
71
- field.type =
72
- (property.type.filter((t) => 'null' != t).sort()[0]) ||
73
- property.type[0] ||
74
- 'string';
75
- field.typelist = property.type;
76
- }
77
- else if ('undefined' === ptt && null != property.enum) {
78
- field.type = 'string';
79
- field.enum = property.enum;
80
- }
81
- else {
82
- throw new Error(`APIDEF: Unsupported property type: ${property.type} (${entity.name}.${field.name})`);
100
+ function mergeField(ment, mop, malt, def, exisingField, newField) {
101
+ if (newField.req !== exisingField.req) {
102
+ exisingField.op[mop.name] = {
103
+ req: newField.req,
104
+ type: newField.type,
105
+ };
83
106
  }
107
+ return exisingField;
84
108
  }
85
109
  //# sourceMappingURL=field.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"field.js","sourceRoot":"","sources":["../../src/transform/field.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"field.js","sourceRoot":"","sources":["../../src/transform/field.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Transform } from '../transform';
2
+ declare const flowTransform: Transform;
3
+ export { flowTransform, };
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.flowTransform = void 0;
4
+ const jostraca_1 = require("jostraca");
5
+ const utility_1 = require("../utility");
6
+ const types_1 = require("../types");
7
+ const flowTransform = async function (ctx) {
8
+ const { apimodel, guide } = ctx;
9
+ const kit = apimodel.main[types_1.KIT];
10
+ let msg = '';
11
+ (0, jostraca_1.each)(guide.entity, (guideEntity, entname) => {
12
+ ctx.log.debug({ point: 'guide-flow', note: entname });
13
+ const modelent = kit.entity[entname];
14
+ const basicflow = {
15
+ name: 'Basic' + (0, utility_1.nom)(modelent, 'Name') + 'Flow',
16
+ entity: entname,
17
+ kind: 'basic',
18
+ step: [],
19
+ };
20
+ kit.flow[basicflow.name] = basicflow;
21
+ msg += basicflow.name + ' ';
22
+ });
23
+ return { ok: true, msg };
24
+ };
25
+ exports.flowTransform = flowTransform;
26
+ //# sourceMappingURL=flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/transform/flow.ts"],"names":[],"mappings":";;;AAEA,uCAA+B;AAI/B,wCAEmB;AAEnB,oCAA8B;AAgB9B,MAAM,aAAa,GAAc,KAAK,WACpC,GAAQ;IAER,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,GAAG,CAAA;IAC/B,MAAM,GAAG,GAAa,QAAQ,CAAC,IAAI,CAAC,WAAG,CAAC,CAAA;IAExC,IAAI,GAAG,GAAG,EAAE,CAAA;IAEZ,IAAA,eAAI,EAAC,KAAK,CAAC,MAAM,EAAE,CAAC,WAAwB,EAAE,OAAe,EAAE,EAAE;QAC/D,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QAErD,MAAM,QAAQ,GAAgB,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAEjD,MAAM,SAAS,GAAoB;YACjC,IAAI,EAAE,OAAO,GAAG,IAAA,aAAG,EAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,MAAM;YAC9C,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,EAAE;SACT,CAAA;QAED,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAA;QAEpC,GAAG,IAAI,SAAS,CAAC,IAAI,GAAG,GAAG,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;AAC1B,CAAC,CAAA;AAKC,sCAAa"}
@@ -0,0 +1,3 @@
1
+ import type { Transform } from '../transform';
2
+ declare const flowstepTransform: Transform;
3
+ export { flowstepTransform, };
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.flowstepTransform = void 0;
4
+ const jostraca_1 = require("jostraca");
5
+ const struct_1 = require("@voxgig/struct");
6
+ const types_1 = require("../types");
7
+ const flowstepTransform = async function (ctx) {
8
+ const { apimodel, guide } = ctx;
9
+ const kit = apimodel.main[types_1.KIT];
10
+ let msg = '';
11
+ (0, jostraca_1.each)(kit.flow, (flow, flowname) => {
12
+ ctx.log.debug({ point: 'flowstep', note: flowname });
13
+ const ent = kit.entity[flow.entity];
14
+ const opmap = ent.op;
15
+ // TODO: spec parameter passed into each step func, used semantically by generator
16
+ // validation: part of spec, semantic name and params, up to generator how to use it
17
+ const ref01 = ent.name + '_ref01';
18
+ createStep(opmap, flow, ent, { input: { ref: ref01 } });
19
+ listStep(opmap, flow, ent, { valid: [{ apply: 'ItemExists', def: { ref: ref01 } }] });
20
+ const mark01 = 'Mark01-' + ref01;
21
+ const firsttf = firstTextField(ent);
22
+ updateStep(opmap, flow, ent, {
23
+ input: {
24
+ ref: ref01,
25
+ textfield: firsttf?.name,
26
+ suffix: '_up0',
27
+ srcdatavar: ref01 + '_data'
28
+ },
29
+ spec: [{
30
+ apply: 'TextFieldMark',
31
+ def: { mark: mark01 }
32
+ }]
33
+ });
34
+ loadStep(opmap, flow, ent, {
35
+ input: {
36
+ ref: ref01,
37
+ suffix: '_dt0',
38
+ srcdatavar: ref01 + '_data'
39
+ },
40
+ valid: [{
41
+ apply: 'TextFieldMark',
42
+ def: { mark: mark01 }
43
+ }]
44
+ });
45
+ removeStep(opmap, flow, ent, {
46
+ input: { ref: ref01, suffix: '_rm0' }
47
+ });
48
+ if (null != opmap.remove) {
49
+ listStep(opmap, flow, ent, {
50
+ input: { suffix: '_rt0' },
51
+ valid: [{ apply: 'ItemNotExists', def: { ref: ref01 } }]
52
+ });
53
+ }
54
+ msg += flowname + ' ';
55
+ });
56
+ return { ok: true, msg };
57
+ };
58
+ exports.flowstepTransform = flowstepTransform;
59
+ function newFlowStep(opname, args) {
60
+ return {
61
+ op: opname,
62
+ input: args.input ?? {},
63
+ match: args.match ?? {},
64
+ data: args.data ?? {},
65
+ spec: args.spec ?? [],
66
+ valid: args.valid ?? [],
67
+ };
68
+ }
69
+ const createStep = (opmap, flow, ent, args) => {
70
+ if (null != opmap.update) {
71
+ // Use last alt as most generic
72
+ const alt = (0, struct_1.getelem)(opmap.update.alts, -1);
73
+ const step = newFlowStep('create', args);
74
+ flow.step.push(step);
75
+ }
76
+ };
77
+ const listStep = (opmap, flow, ent, args) => {
78
+ if (null != opmap.list) {
79
+ // Use last alt as most generic
80
+ const alt = (0, struct_1.getelem)(opmap.list.alts, -1);
81
+ const step = newFlowStep('list', args);
82
+ (0, jostraca_1.each)(alt.args.param, (param) => {
83
+ step.match[param.name] = args.input?.[param.name] ?? param.name.replace(/_id/, '') + '01';
84
+ });
85
+ flow.step.push(step);
86
+ }
87
+ };
88
+ const updateStep = (opmap, flow, ent, args) => {
89
+ if (null != opmap.update) {
90
+ // Use last alt as most generic
91
+ const alt = (0, struct_1.getelem)(opmap.update.alts, -1);
92
+ const step = newFlowStep('update', args);
93
+ (0, jostraca_1.each)(alt.args.param, (param) => {
94
+ if ('id' === param.name) {
95
+ step.data.id = args.input?.id ?? ent.name + '01';
96
+ }
97
+ else {
98
+ step.data[param.name] = args.input?.[param.name] ?? param.name.replace(/_id/, '') + '01';
99
+ }
100
+ });
101
+ flow.step.push(step);
102
+ }
103
+ };
104
+ const loadStep = (opmap, flow, ent, args) => {
105
+ if (null != opmap.load) {
106
+ // Use last alt as most generic
107
+ const alt = (0, struct_1.getelem)(opmap.update.alts, -1);
108
+ const step = newFlowStep('load', args);
109
+ (0, jostraca_1.each)(alt.args.param, (param) => {
110
+ if ('id' === param.name) {
111
+ step.match.id = args.input?.id ?? ent.name + '01';
112
+ }
113
+ else {
114
+ step.match[param.name] = args.input?.[param.name] ?? param.name.replace(/_id/, '') + '01';
115
+ }
116
+ });
117
+ flow.step.push(step);
118
+ }
119
+ };
120
+ const removeStep = (opmap, flow, ent, args) => {
121
+ if (null != opmap.remove) {
122
+ // Use last alt as most generic
123
+ const alt = (0, struct_1.getelem)(opmap.update.alts, -1);
124
+ const step = newFlowStep('remove', args);
125
+ (0, jostraca_1.each)(alt.args.param, (param) => {
126
+ if ('id' === param.name) {
127
+ step.match.id = args.input?.id ?? ent.name + '01';
128
+ }
129
+ else {
130
+ step.match[param.name] = args.input?.[param.name] ?? param.name.replace(/_id/, '') + '01';
131
+ }
132
+ });
133
+ flow.step.push(step);
134
+ }
135
+ };
136
+ function firstTextField(ent) {
137
+ const fields = (0, jostraca_1.each)(ent.fields);
138
+ for (let fI = 0; fI < fields.length; fI++) {
139
+ const field = fields[fI];
140
+ if ('`$STRING`' === field.type && 'id' !== field.name) {
141
+ return field;
142
+ }
143
+ }
144
+ }
145
+ //# sourceMappingURL=flowstep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flowstep.js","sourceRoot":"","sources":["../../src/transform/flowstep.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import type { TransformResult } from '../transform';
2
- declare const operationTransform: (ctx: any) => Promise<TransformResult>;
3
- export { operationTransform };
1
+ import type { Transform } from '../transform';
2
+ declare const operationTransform: Transform;
3
+ export { operationTransform, };