@voxgig/apidef 2.0.2 → 2.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.
- package/dist/apidef.js +14 -1
- package/dist/apidef.js.map +1 -1
- package/dist/guide/heuristic01.js +189 -50
- package/dist/guide/heuristic01.js.map +1 -1
- package/dist/guide.js +36 -8
- package/dist/guide.js.map +1 -1
- package/dist/parse.d.ts +2 -1
- package/dist/parse.js +81 -3
- package/dist/parse.js.map +1 -1
- package/dist/transform/clean.d.ts +3 -0
- package/dist/transform/clean.js +16 -0
- package/dist/transform/clean.js.map +1 -0
- package/dist/transform/field.js +24 -1
- package/dist/transform/field.js.map +1 -1
- package/dist/transform/operation.js +88 -23
- package/dist/transform/operation.js.map +1 -1
- package/dist/transform.d.ts +1 -8
- package/dist/transform.js +121 -94
- package/dist/transform.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utility.d.ts +6 -1
- package/dist/utility.js +42 -14
- package/dist/utility.js.map +1 -1
- package/model/apidef.jsonic +1 -0
- package/package.json +8 -9
- package/src/apidef.ts +24 -3
- package/src/guide/heuristic01.ts +263 -59
- package/src/guide.ts +48 -9
- package/src/parse.ts +106 -4
- package/src/transform/clean.ts +28 -0
- package/src/transform/field.ts +27 -1
- package/src/transform/operation.ts +118 -31
- package/src/transform.ts +28 -21
- package/src/utility.ts +48 -14
package/dist/apidef.js
CHANGED
|
@@ -54,8 +54,11 @@ const top_1 = require("./transform/top");
|
|
|
54
54
|
const entity_1 = require("./transform/entity");
|
|
55
55
|
const operation_1 = require("./transform/operation");
|
|
56
56
|
const field_1 = require("./transform/field");
|
|
57
|
+
const clean_1 = require("./transform/clean");
|
|
57
58
|
const entity_2 = require("./builder/entity");
|
|
58
59
|
const flow_1 = require("./builder/flow");
|
|
60
|
+
// Log non-fatal wierdness.
|
|
61
|
+
const dlog = (0, utility_1.getdlog)('apidef', __filename);
|
|
59
62
|
function ApiDef(opts) {
|
|
60
63
|
// TODO: gubu opts!
|
|
61
64
|
const fs = opts.fs || Fs;
|
|
@@ -64,6 +67,7 @@ function ApiDef(opts) {
|
|
|
64
67
|
opts.strategy = opts.strategy || 'heuristic01';
|
|
65
68
|
async function generate(spec) {
|
|
66
69
|
const start = Date.now();
|
|
70
|
+
// dlog('start')
|
|
67
71
|
const model = (0, types_1.OpenModelShape)(spec.model);
|
|
68
72
|
const build = (0, types_1.OpenBuildShape)(spec.build);
|
|
69
73
|
(0, jostraca_1.names)(model, model.name);
|
|
@@ -96,7 +100,9 @@ function ApiDef(opts) {
|
|
|
96
100
|
def: undefined
|
|
97
101
|
};
|
|
98
102
|
const defsrc = (0, utility_1.loadFile)(defpath, 'def', fs, log);
|
|
99
|
-
|
|
103
|
+
let def = await (0, parse_1.parse)('OpenAPI', defsrc, { file: defpath });
|
|
104
|
+
def = (0, parse_1.rewrite)(def);
|
|
105
|
+
fs.writeFileSync(defpath + '.full.json', JSON.stringify(def, null, 2));
|
|
100
106
|
ctx.def = def;
|
|
101
107
|
const guideBuilder = await (0, guide_1.resolveGuide)(ctx);
|
|
102
108
|
// const transformSpec = await resolveTransforms(ctx)
|
|
@@ -105,6 +111,7 @@ function ApiDef(opts) {
|
|
|
105
111
|
entity: entity_1.entityTransform,
|
|
106
112
|
operation: operation_1.operationTransform,
|
|
107
113
|
field: field_1.fieldTransform,
|
|
114
|
+
clean: clean_1.cleanTransform,
|
|
108
115
|
});
|
|
109
116
|
const builders = await (0, resolver_1.resolveElements)(ctx, 'builder', 'standard', {
|
|
110
117
|
entity: entity_2.makeEntityBuilder,
|
|
@@ -130,6 +137,12 @@ function ApiDef(opts) {
|
|
|
130
137
|
model: jmodel,
|
|
131
138
|
existing: { txt: { merge: true } }
|
|
132
139
|
}, root);
|
|
140
|
+
const dlogs = dlog.log();
|
|
141
|
+
if (0 < dlogs.length) {
|
|
142
|
+
for (let dlogentry of dlogs) {
|
|
143
|
+
log.debug({ point: 'generate-warning', dlogentry, note: String(dlogentry) });
|
|
144
|
+
}
|
|
145
|
+
}
|
|
133
146
|
log.info({ point: 'generate-end', note: 'success', break: true });
|
|
134
147
|
return {
|
|
135
148
|
ok: true,
|
package/dist/apidef.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apidef.js","sourceRoot":"","sources":["../src/apidef.ts"],"names":[],"mappings":";AAAA,iDAAiD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"apidef.js","sourceRoot":"","sources":["../src/apidef.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.heuristic01 = heuristic01;
|
|
4
4
|
const jostraca_1 = require("jostraca");
|
|
5
|
+
const struct_1 = require("@voxgig/struct");
|
|
5
6
|
const utility_1 = require("../utility");
|
|
7
|
+
// Log non-fatal wierdness.
|
|
8
|
+
const dlog = (0, utility_1.getdlog)('apidef', __filename);
|
|
6
9
|
async function heuristic01(ctx) {
|
|
7
10
|
let guide = ctx.model.main.api.guide;
|
|
8
11
|
const entityDescs = resolveEntityDescs(ctx);
|
|
@@ -12,6 +15,8 @@ async function heuristic01(ctx) {
|
|
|
12
15
|
control: guide.control,
|
|
13
16
|
entity: entityDescs,
|
|
14
17
|
};
|
|
18
|
+
// console.log('GUIDE')
|
|
19
|
+
// console.dir(guide, { depth: null })
|
|
15
20
|
return guide;
|
|
16
21
|
}
|
|
17
22
|
const METHOD_IDOP = {
|
|
@@ -25,20 +30,38 @@ function resolveEntityDescs(ctx) {
|
|
|
25
30
|
const entityDescs = {};
|
|
26
31
|
const paths = ctx.def.paths;
|
|
27
32
|
// Analyze paths ending in .../foo/{foo}
|
|
28
|
-
(0, jostraca_1.each)(paths, (
|
|
33
|
+
(0, jostraca_1.each)(paths, (pathDef, pathStr) => {
|
|
29
34
|
// Look for rightmmost /entname/{entid}.
|
|
30
|
-
|
|
35
|
+
let m = pathStr.match(/\/([a-zA-Z0-1_-]+)(\/\{([a-zA-Z0-1_-]+)\})?$/);
|
|
36
|
+
// const m = pathStr.match(/\/([a-zA-Z0-1_-]+)\/\{([a-zA-Z0-1_-]+)\}$/)
|
|
31
37
|
if (m) {
|
|
32
|
-
const entdesc = resolveEntity(entityDescs,
|
|
33
|
-
(0, jostraca_1.each)(
|
|
34
|
-
|
|
35
|
-
if (
|
|
38
|
+
// const entdesc = resolveEntity(entityDescs, pathStr, m[1], m[2])
|
|
39
|
+
(0, jostraca_1.each)(pathDef, (methodDef, methodStr) => {
|
|
40
|
+
methodStr = methodStr.toLowerCase();
|
|
41
|
+
if (!METHOD_IDOP[methodStr]) {
|
|
36
42
|
return;
|
|
43
|
+
}
|
|
44
|
+
const entdesc = resolveEntity(entityDescs, pathDef, pathStr, methodDef, methodStr);
|
|
45
|
+
if (null == entdesc) {
|
|
46
|
+
console.log('WARNING: unable to resolve entity for method ' + methodStr +
|
|
47
|
+
' path ' + pathStr);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
// if (pathStr.includes('courses')) {
|
|
51
|
+
// console.log('ENTRES', pathStr, methodStr)
|
|
52
|
+
// console.dir(ent2, { depth: null })
|
|
53
|
+
// }
|
|
54
|
+
let opname = resolveOpName(methodStr, methodDef, pathStr, entdesc);
|
|
55
|
+
if (null == opname) {
|
|
56
|
+
console.log('WARNING: unable to resolve operation for method ' + methodStr +
|
|
57
|
+
' path ' + pathStr);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
37
60
|
const transform = {
|
|
38
61
|
// reqform: '`reqdata`',
|
|
39
62
|
// resform: '`body`',
|
|
40
63
|
};
|
|
41
|
-
const resokdef =
|
|
64
|
+
const resokdef = methodDef.responses[200] || methodDef.responses[201];
|
|
42
65
|
const resbody = resokdef?.content?.['application/json']?.schema;
|
|
43
66
|
if (resbody) {
|
|
44
67
|
if (resbody[entdesc.origname]) {
|
|
@@ -48,7 +71,7 @@ function resolveEntityDescs(ctx) {
|
|
|
48
71
|
transform.resform = '`body.' + entdesc.name + '`';
|
|
49
72
|
}
|
|
50
73
|
}
|
|
51
|
-
const reqdef =
|
|
74
|
+
const reqdef = methodDef.requestBody?.content?.['application/json']?.schema?.properties;
|
|
52
75
|
if (reqdef) {
|
|
53
76
|
if (reqdef[entdesc.origname]) {
|
|
54
77
|
transform.reqform = { [entdesc.origname]: '`reqdata`' };
|
|
@@ -57,63 +80,179 @@ function resolveEntityDescs(ctx) {
|
|
|
57
80
|
transform.reqform = { [entdesc.origname]: '`reqdata`' };
|
|
58
81
|
}
|
|
59
82
|
}
|
|
60
|
-
const op = entdesc.path[
|
|
83
|
+
const op = entdesc.path[pathStr].op;
|
|
61
84
|
op[opname] = {
|
|
62
85
|
// TODO: in actual guide, remove "standard" method ops since redundant
|
|
63
|
-
method,
|
|
86
|
+
method: methodStr,
|
|
64
87
|
};
|
|
65
88
|
if (0 < Object.entries(transform).length) {
|
|
66
89
|
op[opname].transform = transform;
|
|
67
90
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
// Analyze paths ending in .../foo
|
|
72
|
-
(0, jostraca_1.each)(paths, (pathdef, pathstr) => {
|
|
73
|
-
// Look for rightmmost /entname.
|
|
74
|
-
const m = pathstr.match(/\/([a-zA-Z0-1_-]+)$/);
|
|
75
|
-
if (m) {
|
|
76
|
-
const entdesc = resolveEntity(entityDescs, pathstr, m[1]);
|
|
77
|
-
if (pathdef.get) {
|
|
78
|
-
const op = { list: { method: 'get' } };
|
|
79
|
-
entdesc.path[pathstr] = { op };
|
|
80
|
-
const transform = {};
|
|
81
|
-
const mdef = pathdef.get;
|
|
82
|
-
const resokdef = mdef.responses[200] || mdef.responses[201];
|
|
83
|
-
const resbody = resokdef?.content?.['application/json']?.schema;
|
|
84
|
-
if (resbody) {
|
|
85
|
-
if (resbody[entdesc.origname]) {
|
|
86
|
-
transform.resform = '`body.' + entdesc.origname + '`';
|
|
87
|
-
}
|
|
88
|
-
else if (resbody[entdesc.name]) {
|
|
89
|
-
transform.resform = '`body.' + entdesc.name + '`';
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
if (0 < Object.entries(transform).length) {
|
|
93
|
-
op.transform = transform;
|
|
91
|
+
if ('/v2/users/{user_id}/enrollment' === pathStr) {
|
|
92
|
+
console.log('ENT');
|
|
93
|
+
console.dir(entdesc, { depth: null });
|
|
94
94
|
}
|
|
95
|
-
}
|
|
95
|
+
});
|
|
96
96
|
}
|
|
97
97
|
});
|
|
98
|
+
// console.log('USER')
|
|
99
|
+
// console.dir(entityDescs.user, { depth: null })
|
|
98
100
|
return entityDescs;
|
|
99
101
|
}
|
|
100
|
-
function resolveEntity(entityDescs, pathStr,
|
|
101
|
-
let
|
|
102
|
-
let entname =
|
|
103
|
-
let
|
|
104
|
-
|
|
102
|
+
function resolveEntity(entityDescs, pathDef, pathStr, methodDef, methodStr) {
|
|
103
|
+
let entdesc;
|
|
104
|
+
let entname = '';
|
|
105
|
+
let origentname = '';
|
|
106
|
+
const m = pathStr.match(/\/([a-zA-Z0-1_-]+)(\/\{([a-zA-Z0-1_-]+)\})?$/);
|
|
107
|
+
if (m) {
|
|
108
|
+
let pathName = m[1];
|
|
109
|
+
origentname = (0, jostraca_1.snakify)(pathName);
|
|
110
|
+
// Check schema
|
|
111
|
+
const compname = resolveComponentName(methodDef, methodStr);
|
|
112
|
+
if (compname) {
|
|
113
|
+
origentname = (0, jostraca_1.snakify)(compname);
|
|
114
|
+
}
|
|
115
|
+
entname = (0, utility_1.depluralize)(origentname);
|
|
116
|
+
entdesc = (entityDescs[entname] = entityDescs[entname] || {
|
|
117
|
+
name: entname,
|
|
118
|
+
id: Math.random(),
|
|
119
|
+
alias: {}
|
|
120
|
+
});
|
|
121
|
+
let pathParam = m[3];
|
|
122
|
+
if (null != pathParam) {
|
|
123
|
+
const pathParamCanon = (0, jostraca_1.snakify)(pathParam);
|
|
124
|
+
if ('id' != pathParamCanon) {
|
|
125
|
+
entdesc.alias.id = pathParamCanon;
|
|
126
|
+
entdesc.alias[pathParamCanon] = 'id';
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Can't figure out the entity
|
|
131
|
+
else {
|
|
132
|
+
console.log('NO ENTTIY', pathStr);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
// entdesc.plural = origentname
|
|
105
136
|
entdesc.origname = origentname;
|
|
106
137
|
(0, jostraca_1.names)(entdesc, entname);
|
|
107
138
|
entdesc.alias = entdesc.alias || {};
|
|
108
|
-
if (null != pathParam) {
|
|
109
|
-
const pathParamCanon = (0, jostraca_1.snakify)(pathParam);
|
|
110
|
-
if ('id' != pathParamCanon) {
|
|
111
|
-
entdesc.alias.id = pathParamCanon;
|
|
112
|
-
entdesc.alias[pathParamCanon] = 'id';
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
139
|
entdesc.path = (entdesc.path || {});
|
|
116
|
-
entdesc.path[pathStr] =
|
|
140
|
+
entdesc.path[pathStr] = entdesc.path[pathStr] || {};
|
|
141
|
+
entdesc.path[pathStr].op = entdesc.path[pathStr].op || {};
|
|
117
142
|
return entdesc;
|
|
118
143
|
}
|
|
144
|
+
const REQKIND = {
|
|
145
|
+
get: 'res',
|
|
146
|
+
post: 'req',
|
|
147
|
+
put: 'req',
|
|
148
|
+
patch: 'req',
|
|
149
|
+
};
|
|
150
|
+
function resolveComponentName(methodDef, methodStr) {
|
|
151
|
+
const kind = REQKIND[methodStr];
|
|
152
|
+
let compname = undefined;
|
|
153
|
+
const responses = methodDef.responses;
|
|
154
|
+
const schemalist = [
|
|
155
|
+
methodDef.requestBody?.content,
|
|
156
|
+
responses?.['201'],
|
|
157
|
+
responses?.['200'],
|
|
158
|
+
]
|
|
159
|
+
.filter(cmp => null != cmp)
|
|
160
|
+
.map(content => content['application/json']?.schema)
|
|
161
|
+
.filter(schema => null != schema)
|
|
162
|
+
.filter(schema => null != schema['x-ref'])
|
|
163
|
+
.map(schema => {
|
|
164
|
+
let xrefm = schema['x-ref'].match(/\/components\/schemas\/(.+)$/);
|
|
165
|
+
if (xrefm) {
|
|
166
|
+
schema['x-ref-cmp'] = xrefm[1];
|
|
167
|
+
}
|
|
168
|
+
return schema;
|
|
169
|
+
})
|
|
170
|
+
.filter(schema => null != schema['x-ref-cmp']);
|
|
171
|
+
let schema = undefined;
|
|
172
|
+
let splen = -1;
|
|
173
|
+
for (let sI = 0; sI < schemalist.length; sI++) {
|
|
174
|
+
let nextschema = schemalist[sI];
|
|
175
|
+
let nsplen = nextschema.properties?.length || -1;
|
|
176
|
+
// console.log('QQQ', splen, nsplen, schema?.['x-ref-cmp'], nextschema?.['x-ref-cmp'])
|
|
177
|
+
if (
|
|
178
|
+
// More properties probably means it is the full entity.
|
|
179
|
+
splen < nsplen ||
|
|
180
|
+
// Shorter name probably means it is the full entity (no suffix/prefix).
|
|
181
|
+
(schema && splen === nsplen && nextschema['x-ref-cmp'].length < schema['x-ref-cmp'].length)) {
|
|
182
|
+
schema = nextschema;
|
|
183
|
+
splen = nsplen;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (schema) {
|
|
187
|
+
let xref = schema['x-ref'];
|
|
188
|
+
// console.log('RCN-XREF', methodStr, 'xref-0', xref)
|
|
189
|
+
if (null == xref) {
|
|
190
|
+
const properties = schema.properties || {};
|
|
191
|
+
(0, jostraca_1.each)(properties, (prop) => {
|
|
192
|
+
if (null == xref) {
|
|
193
|
+
if (prop.type === 'array') {
|
|
194
|
+
xref = prop.items?.['x-ref'];
|
|
195
|
+
// console.log('RCN', methodStr, 'xref-1', xref)
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
if (null != xref && 'string' === typeof xref) {
|
|
201
|
+
let xrefm = xref.match(/\/components\/schemas\/(.+)$/);
|
|
202
|
+
if (xrefm) {
|
|
203
|
+
compname = xrefm[1];
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return compname;
|
|
208
|
+
}
|
|
209
|
+
function resolveOpName(methodStr, methodDef, pathStr, entdesc) {
|
|
210
|
+
let opname = METHOD_IDOP[methodStr];
|
|
211
|
+
if (null == opname)
|
|
212
|
+
return;
|
|
213
|
+
if ('load' === opname) {
|
|
214
|
+
const islist = isListResponse(methodDef, pathStr, entdesc);
|
|
215
|
+
opname = islist ? 'list' : opname;
|
|
216
|
+
console.log('ISLIST', entdesc.name, methodStr, opname, pathStr);
|
|
217
|
+
}
|
|
218
|
+
return opname;
|
|
219
|
+
}
|
|
220
|
+
function isListResponse(methodDef, pathStr, entdesc) {
|
|
221
|
+
const responses = methodDef.responses;
|
|
222
|
+
const resdef = responses?.['201'] || responses?.['200'];
|
|
223
|
+
const content = resdef?.content;
|
|
224
|
+
let islist = false;
|
|
225
|
+
if (null != content) {
|
|
226
|
+
const schema = content['application/json']?.schema;
|
|
227
|
+
if (schema) {
|
|
228
|
+
if (schema.type === 'array') {
|
|
229
|
+
islist = true;
|
|
230
|
+
}
|
|
231
|
+
if (!islist) {
|
|
232
|
+
const properties = schema.properties || {};
|
|
233
|
+
(0, jostraca_1.each)(properties, (prop) => {
|
|
234
|
+
if (prop.type === 'array') {
|
|
235
|
+
if (1 === (0, struct_1.size)(properties) ||
|
|
236
|
+
prop.key$ === entdesc.name ||
|
|
237
|
+
prop.key$ === entdesc.origname ||
|
|
238
|
+
listedEntity(prop) === entdesc.name) {
|
|
239
|
+
islist = true;
|
|
240
|
+
}
|
|
241
|
+
if ('/v2/users' === pathStr) {
|
|
242
|
+
console.log('islistresponse', islist, pathStr, entdesc.name, listedEntity(prop), properties);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return islist;
|
|
250
|
+
}
|
|
251
|
+
function listedEntity(prop) {
|
|
252
|
+
const xref = prop?.items?.['x-ref'];
|
|
253
|
+
const m = 'string' === typeof xref && xref.match(/^#\/components\/schemas\/(.+)$/);
|
|
254
|
+
if (m) {
|
|
255
|
+
return (0, utility_1.depluralize)((0, jostraca_1.snakify)(m[1]));
|
|
256
|
+
}
|
|
257
|
+
}
|
|
119
258
|
//# sourceMappingURL=heuristic01.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heuristic01.js","sourceRoot":"","sources":["../../src/guide/heuristic01.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"heuristic01.js","sourceRoot":"","sources":["../../src/guide/heuristic01.ts"],"names":[],"mappings":"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"}
|
package/dist/guide.js
CHANGED
|
@@ -6,26 +6,43 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.resolveGuide = resolveGuide;
|
|
7
7
|
const node_path_1 = __importDefault(require("node:path"));
|
|
8
8
|
const jostraca_1 = require("jostraca");
|
|
9
|
+
const struct_1 = require("@voxgig/struct");
|
|
9
10
|
const heuristic01_1 = require("./guide/heuristic01");
|
|
11
|
+
const utility_1 = require("./utility");
|
|
12
|
+
// Log non-fatal wierdness.
|
|
13
|
+
const dlog = (0, utility_1.getdlog)('apidef', __filename);
|
|
10
14
|
async function resolveGuide(ctx) {
|
|
11
|
-
let
|
|
15
|
+
let baseguide = {};
|
|
16
|
+
let override = ctx.model.main.api.guide;
|
|
12
17
|
if ('heuristic01' === ctx.opts.strategy) {
|
|
13
|
-
|
|
18
|
+
baseguide = await (0, heuristic01_1.heuristic01)(ctx);
|
|
14
19
|
}
|
|
15
20
|
else {
|
|
16
21
|
throw new Error('Unknown guide strategy: ' + ctx.opts.strategy);
|
|
17
22
|
}
|
|
23
|
+
// Override generated base guide with custom hints
|
|
24
|
+
let guide = (0, struct_1.merge)([{}, baseguide, override]);
|
|
25
|
+
// TODO: this is a hack!!!
|
|
26
|
+
// Instead, update @voxgig/model, so that builders can request a reload of the entire
|
|
27
|
+
// model. This allows builders to modify the model for later buidlers
|
|
28
|
+
// during a single generation pass.
|
|
18
29
|
guide = cleanGuide(guide);
|
|
19
|
-
|
|
20
|
-
|
|
30
|
+
// TODO: FIX: sdk.jsonic should have final version of guide
|
|
31
|
+
if (ctx.model.main?.api) {
|
|
32
|
+
ctx.model.main.api.guide = guide;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
dlog('missing', 'ctx.model.main.api');
|
|
36
|
+
}
|
|
37
|
+
const guideFile = node_path_1.default.join(ctx.opts.folder, (null == ctx.opts.outprefix ? '' : ctx.opts.outprefix) + 'base-guide.jsonic');
|
|
21
38
|
const guideBlocks = [
|
|
22
39
|
'# Guide',
|
|
23
40
|
'',
|
|
24
41
|
'main: api: guide: { ',
|
|
25
|
-
'',
|
|
26
42
|
];
|
|
27
|
-
guideBlocks.push(...(0, jostraca_1.each)(
|
|
28
|
-
guideBlocks.push(
|
|
43
|
+
guideBlocks.push(...(0, jostraca_1.each)(baseguide.entity, (entity, entityname) => {
|
|
44
|
+
guideBlocks.push(`
|
|
45
|
+
entity: ${entityname}: {`);
|
|
29
46
|
(0, jostraca_1.each)(entity.path, (path, pathname) => {
|
|
30
47
|
guideBlocks.push(` path: '${pathname}': op: {`);
|
|
31
48
|
(0, jostraca_1.each)(path.op, (op, opname) => {
|
|
@@ -41,7 +58,8 @@ async function resolveGuide(ctx) {
|
|
|
41
58
|
guideBlocks.push('}');
|
|
42
59
|
const guideSrc = guideBlocks.join('\n');
|
|
43
60
|
return () => {
|
|
44
|
-
|
|
61
|
+
// Save base guide for reference
|
|
62
|
+
(0, jostraca_1.File)({ name: '../def/' + node_path_1.default.basename(guideFile) }, () => (0, jostraca_1.Content)(guideSrc));
|
|
45
63
|
};
|
|
46
64
|
}
|
|
47
65
|
function cleanGuide(guide) {
|
|
@@ -49,7 +67,17 @@ function cleanGuide(guide) {
|
|
|
49
67
|
control: guide.control,
|
|
50
68
|
entity: {}
|
|
51
69
|
};
|
|
70
|
+
const exclude_entity = guide.exclude?.entity?.split(',') || [];
|
|
71
|
+
const include_entity = guide.include?.entity?.split(',') || [];
|
|
52
72
|
(0, jostraca_1.each)(guide.entity, (entity, name) => {
|
|
73
|
+
if (exclude_entity.includes(name)) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
if (exclude_entity.includes('*')) {
|
|
77
|
+
if (!include_entity.includes(name)) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
53
81
|
let ent = clean.entity[name] = clean.entity[name] = { name, path: {} };
|
|
54
82
|
(0, jostraca_1.each)(entity.path, (path, pathname) => {
|
|
55
83
|
ent.path[pathname] = path;
|
package/dist/guide.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guide.js","sourceRoot":"","sources":["../src/guide.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"guide.js","sourceRoot":"","sources":["../src/guide.ts"],"names":[],"mappings":"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"}
|
package/dist/parse.d.ts
CHANGED
package/dist/parse.js
CHANGED
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
/* Copyright (c) 2024 Voxgig, MIT License */
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.parse = parse;
|
|
5
|
+
exports.rewrite = rewrite;
|
|
5
6
|
const openapi_core_1 = require("@redocly/openapi-core");
|
|
7
|
+
const jostraca_1 = require("jostraca");
|
|
8
|
+
const utility_1 = require("./utility");
|
|
6
9
|
// Parse an API definition source into a JSON sructure.
|
|
7
10
|
async function parse(kind, source, meta) {
|
|
8
11
|
if ('OpenAPI' === kind) {
|
|
@@ -13,14 +16,89 @@ async function parse(kind, source, meta) {
|
|
|
13
16
|
}
|
|
14
17
|
}
|
|
15
18
|
async function parseOpenAPI(source, meta) {
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
const base = meta?.config || {};
|
|
20
|
+
const config = await (0, openapi_core_1.createConfig)(base);
|
|
21
|
+
// First pass: parse without dereferencing to preserve $refs
|
|
22
|
+
const bundleWithRefs = await (0, openapi_core_1.bundleFromString)({
|
|
19
23
|
source,
|
|
20
24
|
config,
|
|
25
|
+
dereference: false,
|
|
26
|
+
});
|
|
27
|
+
// Walk the tree and add x-ref properties
|
|
28
|
+
const seen = new WeakSet();
|
|
29
|
+
let refCount = 0;
|
|
30
|
+
function addXRefs(obj, path = '') {
|
|
31
|
+
if (!obj || typeof obj !== 'object' || seen.has(obj))
|
|
32
|
+
return;
|
|
33
|
+
seen.add(obj);
|
|
34
|
+
if (Array.isArray(obj)) {
|
|
35
|
+
obj.forEach((item, index) => addXRefs(item, `${path}[${index}]`));
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// Check for $ref property
|
|
39
|
+
if (obj.$ref && typeof obj.$ref === 'string') {
|
|
40
|
+
obj['x-ref'] = obj.$ref;
|
|
41
|
+
refCount++;
|
|
42
|
+
}
|
|
43
|
+
// Recursively process all properties
|
|
44
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
45
|
+
if (value && typeof value === 'object') {
|
|
46
|
+
addXRefs(value, path ? `${path}.${key}` : key);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
addXRefs(bundleWithRefs.bundle.parsed);
|
|
52
|
+
// Serialize back to string with x-refs preserved
|
|
53
|
+
const sourceWithXRefs = JSON.stringify(bundleWithRefs.bundle.parsed);
|
|
54
|
+
// Second pass: parse with dereferencing
|
|
55
|
+
const bundle = await (0, openapi_core_1.bundleFromString)({
|
|
56
|
+
source: sourceWithXRefs,
|
|
57
|
+
config,
|
|
21
58
|
dereference: true,
|
|
22
59
|
});
|
|
23
60
|
const def = bundle.bundle.parsed;
|
|
24
61
|
return def;
|
|
25
62
|
}
|
|
63
|
+
// Make consistent changes to support semantic entities.
|
|
64
|
+
function rewrite(def) {
|
|
65
|
+
const paths = def.paths;
|
|
66
|
+
(0, jostraca_1.each)(paths, (path) => {
|
|
67
|
+
(0, jostraca_1.each)(path.parameters, (param) => {
|
|
68
|
+
let new_param = param.name;
|
|
69
|
+
let new_path = path.key$;
|
|
70
|
+
// Rename param if nane is "id", and not the final param.
|
|
71
|
+
// Rewrite /foo/{id}/bar as /foo/{foo_id}/bar.
|
|
72
|
+
// Avoids ambiguity with bar id.
|
|
73
|
+
if (param.name.match(/^id$/i)) {
|
|
74
|
+
let m = path.key$.match(/\/([^\/]+)\/{id\}\/[^\/]/);
|
|
75
|
+
if (m) {
|
|
76
|
+
const parent = (0, utility_1.depluralize)((0, jostraca_1.snakify)(m[1]));
|
|
77
|
+
new_param = `${parent}_id`;
|
|
78
|
+
new_path = path.key$.replace('{id}', '{' + new_param + '}');
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
new_param = (0, utility_1.depluralize)((0, jostraca_1.snakify)(param.name));
|
|
83
|
+
new_path = path.key$.replace('{' + param.name + '}', '{' + new_param + '}');
|
|
84
|
+
}
|
|
85
|
+
let pathdef = paths[path.key$];
|
|
86
|
+
delete paths[path.key$];
|
|
87
|
+
paths[new_path] = pathdef;
|
|
88
|
+
path.key$ = new_path;
|
|
89
|
+
param.name = new_param;
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
sortkeys(def, 'paths');
|
|
93
|
+
sortkeys(def, 'components');
|
|
94
|
+
return def;
|
|
95
|
+
}
|
|
96
|
+
function sortkeys(obj, prop) {
|
|
97
|
+
const sorted = {};
|
|
98
|
+
const sorted_keys = Object.keys(obj[prop]).sort();
|
|
99
|
+
for (let sk of sorted_keys) {
|
|
100
|
+
sorted[sk] = obj[prop][sk];
|
|
101
|
+
}
|
|
102
|
+
obj[prop] = sorted;
|
|
103
|
+
}
|
|
26
104
|
//# sourceMappingURL=parse.js.map
|
package/dist/parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":";AAAA,4CAA4C;;
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cleanTransform = void 0;
|
|
4
|
+
const struct_1 = require("@voxgig/struct");
|
|
5
|
+
const cleanTransform = async function (ctx) {
|
|
6
|
+
const { apimodel } = ctx;
|
|
7
|
+
(0, struct_1.walk)(apimodel, (k, v) => {
|
|
8
|
+
if ('string' === typeof k && k.includes('$')) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
return v;
|
|
12
|
+
});
|
|
13
|
+
return { ok: true, msg: 'clean' };
|
|
14
|
+
};
|
|
15
|
+
exports.cleanTransform = cleanTransform;
|
|
16
|
+
//# sourceMappingURL=clean.js.map
|