@voxgig/apidef 0.2.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/voxgig-apidef +178 -0
- package/dist/apidef.d.ts +11 -2
- package/dist/apidef.js +146 -182
- package/dist/apidef.js.map +1 -1
- package/dist/transform/entity.d.ts +6 -0
- package/dist/transform/entity.js +35 -0
- package/dist/transform/entity.js.map +1 -0
- package/dist/transform/field.d.ts +6 -0
- package/dist/transform/field.js +144 -0
- package/dist/transform/field.js.map +1 -0
- package/dist/transform/fieldTransform.d.ts +5 -0
- package/dist/transform/fieldTransform.js +55 -0
- package/dist/transform/fieldTransform.js.map +1 -0
- package/dist/transform/manual.d.ts +6 -0
- package/dist/transform/manual.js +11 -0
- package/dist/transform/manual.js.map +1 -0
- package/dist/transform/operation.d.ts +6 -0
- package/dist/transform/operation.js +81 -0
- package/dist/transform/operation.js.map +1 -0
- package/dist/transform/top.d.ts +6 -0
- package/dist/transform/top.js +11 -0
- package/dist/transform/top.js.map +1 -0
- package/dist/transform.d.ts +26 -0
- package/dist/transform.js +111 -0
- package/dist/transform.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/model/guide.jsonic +32 -0
- package/package.json +14 -5
- package/src/apidef.ts +191 -256
- package/src/transform/entity.ts +54 -0
- package/src/transform/field.ts +185 -0
- package/src/transform/manual.ts +22 -0
- package/src/transform/operation.ts +125 -0
- package/src/transform/top.ts +21 -0
- package/src/transform.ts +193 -0
- package/model/guide.jsonic~ +0 -14
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.entityTransform = entityTransform;
|
|
4
|
+
const jostraca_1 = require("jostraca");
|
|
5
|
+
const transform_1 = require("../transform");
|
|
6
|
+
async function entityTransform(ctx, tspec, model, def) {
|
|
7
|
+
const { guide: { guide } } = ctx;
|
|
8
|
+
let msg = '';
|
|
9
|
+
(0, jostraca_1.each)(guide.entity, (guideEntity) => {
|
|
10
|
+
const entityModel = model.main.api.entity[guideEntity.key$] = {
|
|
11
|
+
op: {},
|
|
12
|
+
field: {},
|
|
13
|
+
cmd: {},
|
|
14
|
+
id: {
|
|
15
|
+
name: 'id',
|
|
16
|
+
field: 'id',
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
(0, transform_1.fixName)(entityModel, guideEntity.key$);
|
|
20
|
+
(0, jostraca_1.each)(guideEntity.path, (guidePath) => {
|
|
21
|
+
const pathdef = def.paths[guidePath.key$];
|
|
22
|
+
if (null == pathdef) {
|
|
23
|
+
throw new Error('APIDEF: path not found in OpenAPI: ' + guidePath.key$ +
|
|
24
|
+
' (entity: ' + guideEntity.name + ')');
|
|
25
|
+
}
|
|
26
|
+
guidePath.parts$ = guidePath.key$.split('/');
|
|
27
|
+
guidePath.params$ = guidePath.parts$
|
|
28
|
+
.filter((p) => p.startsWith('{'))
|
|
29
|
+
.map((p) => p.substring(1, p.length - 1));
|
|
30
|
+
});
|
|
31
|
+
msg += guideEntity.name + ' ';
|
|
32
|
+
});
|
|
33
|
+
return { ok: true, msg };
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/transform/entity.ts"],"names":[],"mappings":";;AAoDE,0CAAe;AAlDjB,uCAA+B;AAI/B,4CAAsC;AAItC,KAAK,UAAU,eAAe,CAAC,GAAiB,EAAE,KAAoB,EAAE,KAAU,EAAE,GAAQ;IAC1F,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,CAAA;IAChC,IAAI,GAAG,GAAG,EAAE,CAAA;IAEZ,IAAA,eAAI,EAAC,KAAK,CAAC,MAAM,EAAE,CAAC,WAAgB,EAAE,EAAE;QAEtC,MAAM,WAAW,GAAQ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG;YACjE,EAAE,EAAE,EAAE;YACN,KAAK,EAAE,EAAE;YACT,GAAG,EAAE,EAAE;YACP,EAAE,EAAE;gBACF,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,IAAI;aACZ;SACF,CAAA;QAED,IAAA,mBAAO,EAAC,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC,CAAA;QAEtC,IAAA,eAAI,EAAC,WAAW,CAAC,IAAI,EAAE,CAAC,SAAc,EAAE,EAAE;YACxC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YAEzC,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,SAAS,CAAC,IAAI;oBACpE,YAAY,GAAG,WAAW,CAAC,IAAI,GAAG,GAAG,CAAC,CAAA;YAC1C,CAAC;YAED,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC5C,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,MAAM;iBACjC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;iBACxC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;QAErD,CAAC,CAAC,CAAA;QAEF,GAAG,IAAI,WAAW,CAAC,IAAI,GAAG,GAAG,CAAA;IAE/B,CAAC,CAAC,CAAA;IAEF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;AAC1B,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fieldTransform = fieldTransform;
|
|
4
|
+
const jostraca_1 = require("jostraca");
|
|
5
|
+
const transform_1 = require("../transform");
|
|
6
|
+
async function fieldTransform(ctx, tspec, model, def) {
|
|
7
|
+
const { guide: { guide } } = ctx;
|
|
8
|
+
let msg = 'fields: ';
|
|
9
|
+
(0, jostraca_1.each)(guide.entity, (guideEntity) => {
|
|
10
|
+
const entityModel = model.main.api.entity[guideEntity.key$];
|
|
11
|
+
let fieldCount = 0;
|
|
12
|
+
(0, jostraca_1.each)(guideEntity.path, (guidePath) => {
|
|
13
|
+
const pathdef = def.paths[guidePath.key$];
|
|
14
|
+
(0, jostraca_1.each)(guidePath.op, (op) => {
|
|
15
|
+
if ('load' === op.key$) {
|
|
16
|
+
fieldCount = fieldbuild(entityModel, pathdef, op, guidePath, guideEntity, model);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
msg += guideEntity.name + '=' + fieldCount + ' ';
|
|
21
|
+
});
|
|
22
|
+
return { ok: true, msg };
|
|
23
|
+
}
|
|
24
|
+
function fieldbuild(entityModel, pathdef, op, path, entity, model) {
|
|
25
|
+
// console.log('FB-A', op, pathdef)
|
|
26
|
+
let fieldCount = 0;
|
|
27
|
+
let fieldSets = (0, jostraca_1.getx)(pathdef.get, 'responses 200 content "application/json" schema');
|
|
28
|
+
if (fieldSets) {
|
|
29
|
+
if (Array.isArray(fieldSets.allOf)) {
|
|
30
|
+
fieldSets = fieldSets.allOf;
|
|
31
|
+
}
|
|
32
|
+
else if (fieldSets.properties) {
|
|
33
|
+
fieldSets = [fieldSets];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// console.log('TRANSFORM-FIELDSETS', fieldSets)
|
|
37
|
+
(0, jostraca_1.each)(fieldSets, (fieldSet) => {
|
|
38
|
+
(0, jostraca_1.each)(fieldSet.properties, (property) => {
|
|
39
|
+
// console.log(property)
|
|
40
|
+
const field = (entityModel.field[property.key$] = entityModel.field[property.key$] || {});
|
|
41
|
+
field.name = property.key$;
|
|
42
|
+
(0, transform_1.fixName)(field, field.name);
|
|
43
|
+
field.type = property.type;
|
|
44
|
+
(0, transform_1.fixName)(field, field.type, 'type');
|
|
45
|
+
field.short = property.description;
|
|
46
|
+
fieldCount++;
|
|
47
|
+
// console.log('FB-ID', field.name, entityModel.param)
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
// Guess id field name using GET path param
|
|
51
|
+
if ('load' === op.key$) {
|
|
52
|
+
const getdef = pathdef.get;
|
|
53
|
+
const getparams = getdef.parameters || [];
|
|
54
|
+
if (1 === getparams.length) {
|
|
55
|
+
if (entityModel.op.load.path.match(RegExp('\\{' + getdef.parameters[0].name + '\\}$'))) {
|
|
56
|
+
entityModel.id.field = getdef.parameters[0].name;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return fieldCount;
|
|
61
|
+
}
|
|
62
|
+
/*
|
|
63
|
+
|
|
64
|
+
# API Specification Transform Guide
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
@"@voxgig/apidef/model/guide.jsonic"
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
guide: control: transform: openapi: order: `
|
|
71
|
+
|
|
72
|
+
top,
|
|
73
|
+
entity,
|
|
74
|
+
operation,
|
|
75
|
+
field,
|
|
76
|
+
customField,
|
|
77
|
+
|
|
78
|
+
`
|
|
79
|
+
|
|
80
|
+
guide: transform: customField: {
|
|
81
|
+
load: 'customField.js'
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
guide: entity: {
|
|
86
|
+
pet: path: {
|
|
87
|
+
'/pet/{petId}': {
|
|
88
|
+
op:{ load: 'get', create: 'post', save: 'put' }
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
pet: test: {
|
|
92
|
+
quick: {
|
|
93
|
+
active: true,
|
|
94
|
+
create: { id: 1, name:'Rex' },
|
|
95
|
+
load: { id: 1 },
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
# direct custom definition
|
|
100
|
+
pet: def: {}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
const { each, getx } = require('jostraca')
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
async function customField(ctx, tspec, model, def) {
|
|
110
|
+
const { spec, util: {fixName} } = ctx
|
|
111
|
+
|
|
112
|
+
const nameField = {
|
|
113
|
+
name: 'name',
|
|
114
|
+
type: 'string',
|
|
115
|
+
short: 'Name of pet'
|
|
116
|
+
}
|
|
117
|
+
fixName(nameField, nameField.name)
|
|
118
|
+
fixName(nameField, nameField.type, 'type')
|
|
119
|
+
|
|
120
|
+
const ageField = {
|
|
121
|
+
name: 'age',
|
|
122
|
+
type: 'number',
|
|
123
|
+
short: 'Age of pet'
|
|
124
|
+
}
|
|
125
|
+
fixName(ageField, ageField.name)
|
|
126
|
+
fixName(ageField, ageField.type, 'type')
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
Object.assign(model.main.api.entity.pet.field, {
|
|
130
|
+
name: nameField,
|
|
131
|
+
age: ageField,
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
return { ok: true }
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
module.exports = {
|
|
139
|
+
customField
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
*/
|
|
144
|
+
//# sourceMappingURL=field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field.js","sourceRoot":"","sources":["../../src/transform/field.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fieldTransform = fieldTransform;
|
|
4
|
+
const jostraca_1 = require("jostraca");
|
|
5
|
+
const transform_1 = require("../transform");
|
|
6
|
+
async function fieldTransform(ctx, tspec, model, def) {
|
|
7
|
+
const { guide: { guide } } = ctx;
|
|
8
|
+
(0, jostraca_1.each)(guide.entity, (guideEntity) => {
|
|
9
|
+
const entityModel = model.main.api.entity[guideEntity.key$];
|
|
10
|
+
(0, jostraca_1.each)(guideEntity.path, (guidePath) => {
|
|
11
|
+
const pathdef = def.paths[guidePath.key$];
|
|
12
|
+
(0, jostraca_1.each)(guidePath.op, (op) => {
|
|
13
|
+
if ('load' === op.key$) {
|
|
14
|
+
fieldbuild(entityModel, pathdef, op, guidePath, guideEntity, model);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
return { ok: true };
|
|
20
|
+
}
|
|
21
|
+
function fieldbuild(entityModel, pathdef, op, path, entity, model) {
|
|
22
|
+
// console.log('FB-A', op, pathdef)
|
|
23
|
+
let fieldSets = (0, jostraca_1.getx)(pathdef.get, 'responses 200 content "application/json" schema');
|
|
24
|
+
if (fieldSets) {
|
|
25
|
+
if (Array.isArray(fieldSets.allOf)) {
|
|
26
|
+
fieldSets = fieldSets.allOf;
|
|
27
|
+
}
|
|
28
|
+
else if (fieldSets.properties) {
|
|
29
|
+
fieldSets = [fieldSets];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
(0, jostraca_1.each)(fieldSets, (fieldSet) => {
|
|
33
|
+
(0, jostraca_1.each)(fieldSet.properties, (property) => {
|
|
34
|
+
// console.log(property)
|
|
35
|
+
const field = (entityModel.field[property.key$] = entityModel.field[property.key$] || {});
|
|
36
|
+
field.name = property.key$;
|
|
37
|
+
(0, transform_1.fixName)(field, field.name);
|
|
38
|
+
field.type = property.type;
|
|
39
|
+
(0, transform_1.fixName)(field, field.type, 'type');
|
|
40
|
+
field.short = property.description;
|
|
41
|
+
// console.log('FB-ID', field.name, entityModel.param)
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
// Guess id field name using GET path param
|
|
45
|
+
if ('load' === op.key$) {
|
|
46
|
+
const getdef = pathdef.get;
|
|
47
|
+
const getparams = getdef.parameters || [];
|
|
48
|
+
if (1 === getparams.length) {
|
|
49
|
+
if (entityModel.op.load.path.match(RegExp('\\{' + getdef.parameters[0].name + '\\}$'))) {
|
|
50
|
+
entityModel.id.field = getdef.parameters[0].name;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=fieldTransform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fieldTransform.js","sourceRoot":"","sources":["../../src/transform/fieldTransform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.manualTransform = manualTransform;
|
|
4
|
+
const jsonic_next_1 = require("@jsonic/jsonic-next");
|
|
5
|
+
const { deep } = jsonic_next_1.Jsonic.util;
|
|
6
|
+
async function manualTransform(ctx, tspec, model, def) {
|
|
7
|
+
const { guide: { guide: { manual } } } = ctx;
|
|
8
|
+
deep(model, manual);
|
|
9
|
+
return { ok: true, msg: 'manual' };
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=manual.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual.js","sourceRoot":"","sources":["../../src/transform/manual.ts"],"names":[],"mappings":";;AAoBE,0CAAe;AAnBjB,qDAA4C;AAO5C,MAAM,EAAE,IAAI,EAAE,GAAG,oBAAM,CAAC,IAAI,CAAA;AAE5B,KAAK,UAAU,eAAe,CAAC,GAAiB,EAAE,KAAoB,EAAE,KAAU,EAAE,GAAQ;IAC1F,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAA;IAE5C,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAEnB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAA;AACpC,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.operationTransform = operationTransform;
|
|
4
|
+
const jostraca_1 = require("jostraca");
|
|
5
|
+
const transform_1 = require("../transform");
|
|
6
|
+
async function operationTransform(ctx, tspec, model, def) {
|
|
7
|
+
const { guide: { guide } } = ctx;
|
|
8
|
+
let msg = 'operations: ';
|
|
9
|
+
const paramBuilder = (paramMap, paramDef, entityModel, pathdef, op, path, entity, model) => {
|
|
10
|
+
paramMap[paramDef.name] = {
|
|
11
|
+
required: paramDef.required
|
|
12
|
+
};
|
|
13
|
+
(0, transform_1.fixName)(paramMap[paramDef.name], paramDef.name);
|
|
14
|
+
const type = paramDef.schema ? paramDef.schema.type : paramDef.type;
|
|
15
|
+
(0, transform_1.fixName)(paramMap[paramDef.name], type, 'type');
|
|
16
|
+
};
|
|
17
|
+
const queryBuilder = (queryMap, queryDef, entityModel, pathdef, op, path, entity, model) => {
|
|
18
|
+
queryMap[queryDef.name] = {
|
|
19
|
+
required: queryDef.required
|
|
20
|
+
};
|
|
21
|
+
(0, transform_1.fixName)(queryMap[queryDef.name], queryDef.name);
|
|
22
|
+
const type = queryDef.schema ? queryDef.schema.type : queryDef.type;
|
|
23
|
+
(0, transform_1.fixName)(queryMap[queryDef.name], type, 'type');
|
|
24
|
+
};
|
|
25
|
+
const opBuilder = {
|
|
26
|
+
any: (entityModel, pathdef, op, path, entity, model) => {
|
|
27
|
+
const em = entityModel.op[op.key$] = {
|
|
28
|
+
path: path.key$,
|
|
29
|
+
method: op.val$,
|
|
30
|
+
param: {},
|
|
31
|
+
query: {},
|
|
32
|
+
};
|
|
33
|
+
(0, transform_1.fixName)(em, op.key$);
|
|
34
|
+
// Params are in the path
|
|
35
|
+
if (0 < path.params$.length) {
|
|
36
|
+
let params = (0, jostraca_1.getx)(pathdef[op.val$], 'parameters?in=path') || [];
|
|
37
|
+
if (Array.isArray(params)) {
|
|
38
|
+
params.reduce((a, p) => (paramBuilder(a, p, entityModel, pathdef, op, path, entity, model), a), em.param);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// Queries are after the ?
|
|
42
|
+
let queries = (0, jostraca_1.getx)(pathdef[op.val$], 'parameters?in!=path') || [];
|
|
43
|
+
if (Array.isArray(queries)) {
|
|
44
|
+
queries.reduce((a, p) => (queryBuilder(a, p, entityModel, pathdef, op, path, entity, model), a), em.query);
|
|
45
|
+
}
|
|
46
|
+
return em;
|
|
47
|
+
},
|
|
48
|
+
list: (entityModel, pathdef, op, path, entity, model) => {
|
|
49
|
+
return opBuilder.any(entityModel, pathdef, op, path, entity, model);
|
|
50
|
+
},
|
|
51
|
+
load: (entityModel, pathdef, op, path, entity, model) => {
|
|
52
|
+
return opBuilder.any(entityModel, pathdef, op, path, entity, model);
|
|
53
|
+
},
|
|
54
|
+
create: (entityModel, pathdef, op, path, entity, model) => {
|
|
55
|
+
return opBuilder.any(entityModel, pathdef, op, path, entity, model);
|
|
56
|
+
},
|
|
57
|
+
save: (entityModel, pathdef, op, path, entity, model) => {
|
|
58
|
+
return opBuilder.any(entityModel, pathdef, op, path, entity, model);
|
|
59
|
+
},
|
|
60
|
+
remove: (entityModel, pathdef, op, path, entity, model) => {
|
|
61
|
+
return opBuilder.any(entityModel, pathdef, op, path, entity, model);
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
(0, jostraca_1.each)(guide.entity, (guideEntity) => {
|
|
65
|
+
let opcount = 0;
|
|
66
|
+
const entityModel = model.main.api.entity[guideEntity.key$];
|
|
67
|
+
(0, jostraca_1.each)(guideEntity.path, (guidePath) => {
|
|
68
|
+
const pathdef = def.paths[guidePath.key$];
|
|
69
|
+
(0, jostraca_1.each)(guidePath.op, (op) => {
|
|
70
|
+
const opbuild = opBuilder[op.key$];
|
|
71
|
+
if (opbuild) {
|
|
72
|
+
opbuild(entityModel, pathdef, op, guidePath, guideEntity, model);
|
|
73
|
+
opcount++;
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
msg += guideEntity.name + '=' + opcount + ' ';
|
|
78
|
+
});
|
|
79
|
+
return { ok: true, msg };
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=operation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operation.js","sourceRoot":"","sources":["../../src/transform/operation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.topTransform = topTransform;
|
|
4
|
+
const transform_1 = require("../transform");
|
|
5
|
+
async function topTransform(ctx, tspec, model, def) {
|
|
6
|
+
const { spec } = ctx;
|
|
7
|
+
(0, transform_1.fixName)(model.main.api, spec.meta.name);
|
|
8
|
+
model.main.def.desc = def.info.description;
|
|
9
|
+
return { ok: true, msg: spec.meta.name };
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=top.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"top.js","sourceRoot":"","sources":["../../src/transform/top.ts"],"names":[],"mappings":";;AAmBE,oCAAY;AAdd,4CAAsC;AAGtC,KAAK,UAAU,YAAY,CAAC,GAAiB,EAAE,KAAoB,EAAE,KAAU,EAAE,GAAQ;IACvF,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,CAAA;IAEpB,IAAA,mBAAO,EAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,CAAA;IAE1C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;AAC1C,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
type TransformCtx = {
|
|
2
|
+
log: any;
|
|
3
|
+
spec: any;
|
|
4
|
+
guide: any;
|
|
5
|
+
opts: any;
|
|
6
|
+
util: any;
|
|
7
|
+
defpath: string;
|
|
8
|
+
};
|
|
9
|
+
type TransformSpec = {
|
|
10
|
+
transform: Transform[];
|
|
11
|
+
};
|
|
12
|
+
type TransformResult = {
|
|
13
|
+
ok: boolean;
|
|
14
|
+
msg: string;
|
|
15
|
+
};
|
|
16
|
+
type Transform = (ctx: TransformCtx, tspec: TransformSpec, model: any, def: any) => Promise<TransformResult>;
|
|
17
|
+
type ProcessResult = {
|
|
18
|
+
ok: boolean;
|
|
19
|
+
msg: string;
|
|
20
|
+
results: TransformResult[];
|
|
21
|
+
};
|
|
22
|
+
declare function resolveTransforms(ctx: TransformCtx): Promise<TransformSpec>;
|
|
23
|
+
declare function processTransforms(ctx: TransformCtx, spec: TransformSpec, model: any, def: any): Promise<ProcessResult>;
|
|
24
|
+
declare function fixName(base: any, name: string, prop?: string): void;
|
|
25
|
+
export type { TransformCtx, TransformSpec, };
|
|
26
|
+
export { fixName, resolveTransforms, processTransforms, };
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Copyright (c) 2024 Voxgig, MIT License */
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.fixName = fixName;
|
|
8
|
+
exports.resolveTransforms = resolveTransforms;
|
|
9
|
+
exports.processTransforms = processTransforms;
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
const jostraca_1 = require("jostraca");
|
|
12
|
+
const top_1 = require("./transform/top");
|
|
13
|
+
const entity_1 = require("./transform/entity");
|
|
14
|
+
const operation_1 = require("./transform/operation");
|
|
15
|
+
const field_1 = require("./transform/field");
|
|
16
|
+
const manual_1 = require("./transform/manual");
|
|
17
|
+
const TRANSFORM = {
|
|
18
|
+
top: top_1.topTransform,
|
|
19
|
+
entity: entity_1.entityTransform,
|
|
20
|
+
operation: operation_1.operationTransform,
|
|
21
|
+
field: field_1.fieldTransform,
|
|
22
|
+
manual: manual_1.manualTransform,
|
|
23
|
+
};
|
|
24
|
+
async function resolveTransforms(ctx) {
|
|
25
|
+
const { log, guide: { guide } } = ctx;
|
|
26
|
+
const tspec = {
|
|
27
|
+
transform: []
|
|
28
|
+
};
|
|
29
|
+
// TODO: parameterize
|
|
30
|
+
const defkind = 'openapi';
|
|
31
|
+
const transformNames = guide.control.transform[defkind].order
|
|
32
|
+
.split(/\s*,\s*/)
|
|
33
|
+
.map((t) => t.trim())
|
|
34
|
+
.filter((t) => '' != t);
|
|
35
|
+
log.info({ point: 'transform', note: 'order', order: transformNames });
|
|
36
|
+
for (const tn of transformNames) {
|
|
37
|
+
log.debug({ what: 'transform', transform: tn });
|
|
38
|
+
const transform = await resolveTransform(tn, ctx);
|
|
39
|
+
tspec.transform.push(transform);
|
|
40
|
+
}
|
|
41
|
+
return tspec;
|
|
42
|
+
}
|
|
43
|
+
async function resolveTransform(tn, ctx) {
|
|
44
|
+
const { log, defpath, guide: { guide } } = ctx;
|
|
45
|
+
let transform = TRANSFORM[tn];
|
|
46
|
+
if (transform) {
|
|
47
|
+
return transform;
|
|
48
|
+
}
|
|
49
|
+
const tdef = guide.transform[tn];
|
|
50
|
+
if (null == tdef) {
|
|
51
|
+
const err = new Error('Unknown transform: ' + tn);
|
|
52
|
+
log.error({ what: 'transform', transform: tn, fail: 'unknown', err });
|
|
53
|
+
throw err;
|
|
54
|
+
}
|
|
55
|
+
if (!tn.startsWith('custom')) {
|
|
56
|
+
const err = new Error('Custom transform name must start with "custom": ' + tn);
|
|
57
|
+
log.error({ what: 'transform', transform: tn, fail: 'prefix', err });
|
|
58
|
+
throw err;
|
|
59
|
+
}
|
|
60
|
+
const customtpath = node_path_1.default.join(defpath, tdef.load);
|
|
61
|
+
try {
|
|
62
|
+
const transformModule = require(customtpath);
|
|
63
|
+
transform = transformModule[tn];
|
|
64
|
+
}
|
|
65
|
+
catch (e) {
|
|
66
|
+
const err = new Error('Custom transform not found: ' +
|
|
67
|
+
customtpath + ': ' + e.message);
|
|
68
|
+
log.error({ what: 'transform', transform: tn, fail: 'require', err });
|
|
69
|
+
throw err;
|
|
70
|
+
}
|
|
71
|
+
return transform;
|
|
72
|
+
}
|
|
73
|
+
async function processTransforms(ctx, spec, model, def) {
|
|
74
|
+
const pres = {
|
|
75
|
+
ok: true,
|
|
76
|
+
msg: '',
|
|
77
|
+
results: []
|
|
78
|
+
};
|
|
79
|
+
for (let tI = 0; tI < spec.transform.length; tI++) {
|
|
80
|
+
const transform = spec.transform[tI];
|
|
81
|
+
try {
|
|
82
|
+
const tres = await transform(ctx, spec, model, def);
|
|
83
|
+
pres.ok = pres.ok && tres.ok;
|
|
84
|
+
pres.msg += tres.msg + '\n';
|
|
85
|
+
pres.results.push(tres);
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
pres.ok = false;
|
|
89
|
+
pres.msg += err.message + '\n';
|
|
90
|
+
pres.results.push({
|
|
91
|
+
ok: false,
|
|
92
|
+
msg: err.message
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return pres;
|
|
97
|
+
}
|
|
98
|
+
/*
|
|
99
|
+
function extractFields(properties: any) {
|
|
100
|
+
const fieldMap = each(properties)
|
|
101
|
+
.reduce((a: any, p: any) => (a[p.key$] =
|
|
102
|
+
{ name: p.key$, kind: camelify(p.type) }, a), {})
|
|
103
|
+
return fieldMap
|
|
104
|
+
}
|
|
105
|
+
*/
|
|
106
|
+
function fixName(base, name, prop = 'name') {
|
|
107
|
+
base[prop.toLowerCase()] = name.toLowerCase();
|
|
108
|
+
base[(0, jostraca_1.camelify)(prop)] = (0, jostraca_1.camelify)(name);
|
|
109
|
+
base[prop.toUpperCase()] = name.toUpperCase();
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":";AAAA,4CAA4C;;;;;AA6L1C,0BAAO;AACP,8CAAiB;AACjB,8CAAiB;AA5LnB,0DAA4B;AAE5B,uCAA+C;AAG/C,yCAA8C;AAC9C,+CAAoD;AACpD,qDAA0D;AAC1D,6CAAkD;AAClD,+CAAoD;AAoCpD,MAAM,SAAS,GAA8B;IAC3C,GAAG,EAAE,kBAAY;IACjB,MAAM,EAAE,wBAAe;IACvB,SAAS,EAAE,8BAAkB;IAC7B,KAAK,EAAE,sBAAc;IACrB,MAAM,EAAE,wBAAe;CACxB,CAAA;AAKD,KAAK,UAAU,iBAAiB,CAAC,GAAiB;IAChD,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,CAAA;IAErC,MAAM,KAAK,GAAkB;QAC3B,SAAS,EAAE,EAAE;KACd,CAAA;IAED,qBAAqB;IACrB,MAAM,OAAO,GAAG,SAAS,CAAA;IACzB,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK;SAC1D,KAAK,CAAC,SAAS,CAAC;SAChB,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAA;IAEjC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAA;IAEtE,KAAK,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC;QAChC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;QAC/C,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QACjD,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACjC,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAGD,KAAK,UAAU,gBAAgB,CAAC,EAAU,EAAE,GAAiB;IAC3D,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,GAAG,CAAA;IAE9C,IAAI,SAAS,GAAG,SAAS,CAAC,EAAE,CAAC,CAAA;IAC7B,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAChC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAA;QACjD,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAA;QACrE,MAAM,GAAG,CAAA;IACX,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,GAAG,GACP,IAAI,KAAK,CAAC,kDAAkD,GAAG,EAAE,CAAC,CAAA;QACpE,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAA;QACpE,MAAM,GAAG,CAAA;IACX,CAAC;IAED,MAAM,WAAW,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;IACjD,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;QAC5C,SAAS,GAAG,eAAe,CAAC,EAAE,CAAC,CAAA;IACjC,CAAC;IACD,OAAO,CAAM,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,8BAA8B;YAClD,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAA;QACjC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAA;QACrE,MAAM,GAAG,CAAA;IACX,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAID,KAAK,UAAU,iBAAiB,CAC9B,GAAiB,EACjB,IAAmB,EACnB,KAAU,EACV,GAAQ;IAER,MAAM,IAAI,GAAkB;QAC1B,EAAE,EAAE,IAAI;QACR,GAAG,EAAE,EAAE;QACP,OAAO,EAAE,EAAE;KACZ,CAAA;IAED,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAEpC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;YACnD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAA;YAC5B,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAA;YAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;QACD,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,KAAK,CAAA;YACf,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,GAAG,IAAI,CAAA;YAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChB,EAAE,EAAE,KAAK;gBACT,GAAG,EAAE,GAAG,CAAC,OAAO;aACjB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAMD;;;;;;;EAOE;AAGF,SAAS,OAAO,CAAC,IAAS,EAAE,IAAY,EAAE,IAAI,GAAG,MAAM;IACrD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;IAC7C,IAAI,CAAC,IAAA,mBAAQ,EAAC,IAAI,CAAC,CAAC,GAAG,IAAA,mBAAQ,EAAC,IAAI,CAAC,CAAA;IACrC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;AAC/C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/apidef.ts"],"version":"5.6.3"}
|
|
1
|
+
{"root":["../src/apidef.ts","../src/transform.ts","../src/transform/entity.ts","../src/transform/field.ts","../src/transform/manual.ts","../src/transform/operation.ts","../src/transform/top.ts"],"version":"5.6.3"}
|
package/model/guide.jsonic
CHANGED
|
@@ -1,4 +1,35 @@
|
|
|
1
1
|
|
|
2
|
+
guide: control: transform: &: {
|
|
3
|
+
order: string
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
guide: control: transform: openapi: {
|
|
7
|
+
order: *`
|
|
8
|
+
|
|
9
|
+
top,
|
|
10
|
+
entity,
|
|
11
|
+
operation,
|
|
12
|
+
field,
|
|
13
|
+
manual,
|
|
14
|
+
|
|
15
|
+
` | string
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
guide: transform: &: {
|
|
20
|
+
name: .$KEY
|
|
21
|
+
load: string
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
guide: transform: {
|
|
25
|
+
top: {}
|
|
26
|
+
entity: {}
|
|
27
|
+
operation: {}
|
|
28
|
+
field: {}
|
|
29
|
+
manual: {}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
|
|
2
33
|
guide: entity: &: {
|
|
3
34
|
name: .$KEY
|
|
4
35
|
path: &: {
|
|
@@ -7,3 +38,4 @@ guide: entity: &: {
|
|
|
7
38
|
}
|
|
8
39
|
|
|
9
40
|
|
|
41
|
+
guide: manual: {}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voxgig/apidef",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"main": "dist/apidef.js",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"types": "dist/apidef.d.ts",
|
|
@@ -15,6 +15,9 @@
|
|
|
15
15
|
"type": "git",
|
|
16
16
|
"url": "git://github.com/voxgig/apidef.git"
|
|
17
17
|
},
|
|
18
|
+
"bin": {
|
|
19
|
+
"voxgig-apidef": "bin/voxgig-apidef"
|
|
20
|
+
},
|
|
18
21
|
"scripts": {
|
|
19
22
|
"test": "node --enable-source-maps --test dist-test",
|
|
20
23
|
"test22": "node --enable-source-maps --test \"dist-test/*.test.js\"",
|
|
@@ -32,21 +35,27 @@
|
|
|
32
35
|
"model",
|
|
33
36
|
"src",
|
|
34
37
|
"dist",
|
|
38
|
+
"bin",
|
|
35
39
|
"LICENSE"
|
|
36
40
|
],
|
|
37
41
|
"devDependencies": {
|
|
38
42
|
"@hapi/code": "^9.0.3",
|
|
39
43
|
"@types/js-yaml": "^4.0.9",
|
|
40
|
-
"@types/node": "22.
|
|
41
|
-
"aontu": "^0.
|
|
44
|
+
"@types/node": "22.9.0",
|
|
45
|
+
"aontu": "^0.25.0",
|
|
42
46
|
"esbuild": "^0.24.0",
|
|
43
47
|
"json-schema-to-ts": "^3.1.1",
|
|
44
48
|
"memfs": "^4.14.0",
|
|
45
49
|
"typescript": "^5.6.3"
|
|
46
50
|
},
|
|
47
51
|
"dependencies": {
|
|
48
|
-
"@redocly/openapi-core": "^1.25.
|
|
52
|
+
"@redocly/openapi-core": "^1.25.11",
|
|
53
|
+
"@voxgig/util": "^0.0.4",
|
|
49
54
|
"chokidar": "^4.0.1",
|
|
50
|
-
"
|
|
55
|
+
"gubu": "^8.3.0",
|
|
56
|
+
"jostraca": "^0.7.7",
|
|
57
|
+
"pino": "^9.5.0",
|
|
58
|
+
"pino-pretty": "^13.0.0",
|
|
59
|
+
"sonic-boom": "^4.2.0"
|
|
51
60
|
}
|
|
52
61
|
}
|