@voxgig/apidef 0.1.4 → 0.3.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.
@@ -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,6 @@
1
+ import type { TransformCtx, TransformSpec } from '../transform';
2
+ declare function manualTransform(ctx: TransformCtx, tspec: TransformSpec, model: any, def: any): Promise<{
3
+ ok: boolean;
4
+ msg: string;
5
+ }>;
6
+ export { manualTransform };
@@ -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,6 @@
1
+ import type { TransformCtx, TransformSpec } from '../transform';
2
+ declare function operationTransform(ctx: TransformCtx, tspec: TransformSpec, model: any, def: any): Promise<{
3
+ ok: boolean;
4
+ msg: string;
5
+ }>;
6
+ export { operationTransform };
@@ -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,6 @@
1
+ import type { TransformCtx, TransformSpec } from '../transform';
2
+ declare function topTransform(ctx: TransformCtx, tspec: TransformSpec, model: any, def: any): Promise<{
3
+ ok: boolean;
4
+ msg: any;
5
+ }>;
6
+ export { topTransform };
@@ -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({ what: 'transform', 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":"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"}
@@ -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"}
@@ -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.1.4",
3
+ "version": "0.3.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
+ "apidef": "bin/run-apidef.js"
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,26 @@
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.7.5",
41
- "aontu": "^0.22.0",
44
+ "@types/node": "22.8.2",
45
+ "aontu": "^0.23.0",
42
46
  "esbuild": "^0.24.0",
43
47
  "json-schema-to-ts": "^3.1.1",
44
- "memfs": "^4.13.0",
48
+ "memfs": "^4.14.0",
45
49
  "typescript": "^5.6.3"
46
50
  },
47
51
  "dependencies": {
48
- "@redocly/openapi-core": "^1.25.5",
52
+ "@redocly/openapi-core": "^1.25.9",
49
53
  "chokidar": "^4.0.1",
50
- "jostraca": "^0.7.5"
54
+ "gubu": "^8.3.0",
55
+ "jostraca": "^0.7.7",
56
+ "pino": "^9.5.0",
57
+ "pino-pretty": "^11.3.0",
58
+ "sonic-boom": "^4.2.0"
51
59
  }
52
60
  }