@voxgig/apidef 8.11.0 → 8.12.1
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.d.ts +4 -1
- package/dist/apidef.js +12 -34
- package/dist/apidef.js.map +1 -1
- package/dist/builder/entity/entity.js +0 -33
- package/dist/builder/entity/entity.js.map +1 -1
- package/dist/builder/entity/info.js +0 -4
- package/dist/builder/entity/info.js.map +1 -1
- package/dist/builder/flow.d.ts +4 -1
- package/dist/builder/flow.js +36 -27
- package/dist/builder/flow.js.map +1 -1
- package/dist/guide/graphql01.js +0 -55
- package/dist/guide/graphql01.js.map +1 -1
- package/dist/guide/guide.js +3 -126
- package/dist/guide/guide.js.map +1 -1
- package/dist/guide/heuristic01.js +40 -181
- package/dist/guide/heuristic01.js.map +1 -1
- package/dist/parse/graphql.js +0 -25
- package/dist/parse/graphql.js.map +1 -1
- package/dist/parse.js +51 -56
- package/dist/parse.js.map +1 -1
- package/dist/resolved.d.ts +23 -0
- package/dist/resolved.js +92 -0
- package/dist/resolved.js.map +1 -0
- package/dist/resolver.js +0 -2
- package/dist/resolver.js.map +1 -1
- package/dist/transform/args.js +2 -25
- package/dist/transform/args.js.map +1 -1
- package/dist/transform/casecollide.d.ts +3 -0
- package/dist/transform/casecollide.js +67 -0
- package/dist/transform/casecollide.js.map +1 -0
- package/dist/transform/contract.js +43 -38
- package/dist/transform/contract.js.map +1 -1
- package/dist/transform/entity.js +0 -56
- package/dist/transform/entity.js.map +1 -1
- package/dist/transform/field.js +1 -368
- package/dist/transform/field.js.map +1 -1
- package/dist/transform/flowstep.js +0 -49
- package/dist/transform/flowstep.js.map +1 -1
- package/dist/transform/graphql.js +0 -36
- package/dist/transform/graphql.js.map +1 -1
- package/dist/transform/operation.js +0 -23
- package/dist/transform/operation.js.map +1 -1
- package/dist/transform/top.js +1 -128
- package/dist/transform/top.js.map +1 -1
- package/dist/transform.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.js.map +1 -1
- package/dist/utility.d.ts +2 -1
- package/dist/utility.js +17 -316
- package/dist/utility.js.map +1 -1
- package/model/apidef.aon +20 -113
- package/model/guide.aon +1 -32
- package/package.json +5 -5
- package/src/apidef.ts +22 -33
- package/src/builder/entity/entity.ts +0 -33
- package/src/builder/entity/info.ts +0 -4
- package/src/builder/flow.ts +39 -24
- package/src/desc.ts +0 -22
- package/src/guide/graphql01.ts +0 -75
- package/src/guide/guide.ts +5 -127
- package/src/guide/heuristic01.ts +47 -182
- package/src/model.ts +6 -85
- package/src/parse/graphql.ts +0 -25
- package/src/parse.ts +61 -56
- package/src/resolved.ts +136 -0
- package/src/resolver.ts +0 -2
- package/src/transform/args.ts +2 -25
- package/src/transform/casecollide.ts +80 -0
- package/src/transform/contract.ts +44 -34
- package/src/transform/entity.ts +0 -56
- package/src/transform/field.ts +2 -368
- package/src/transform/flowstep.ts +0 -49
- package/src/transform/graphql.ts +0 -36
- package/src/transform/operation.ts +0 -23
- package/src/transform/top.ts +1 -131
- package/src/transform.ts +0 -1
- package/src/types.ts +4 -13
- package/src/utility.ts +18 -314
package/dist/resolved.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Copyright (c) 2024-2026 Voxgig Ltd, MIT License */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.METHODS = void 0;
|
|
5
|
+
exports.operationFacts = operationFacts;
|
|
6
|
+
exports.operationIndex = operationIndex;
|
|
7
|
+
exports.makeResolved = makeResolved;
|
|
8
|
+
exports.publishResolved = publishResolved;
|
|
9
|
+
exports.resolvedSpec = resolvedSpec;
|
|
10
|
+
// See docs/design/resolved-spec-capability.md
|
|
11
|
+
const contract_1 = require("./transform/contract");
|
|
12
|
+
const METHODS = [
|
|
13
|
+
'get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'
|
|
14
|
+
];
|
|
15
|
+
exports.METHODS = METHODS;
|
|
16
|
+
// The single definition of a resolved operation, shared by contractTransform
|
|
17
|
+
// and by consumers of the capability, so the two cannot disagree.
|
|
18
|
+
function operationFacts(def, point) {
|
|
19
|
+
const path = def?.paths?.[point.orig];
|
|
20
|
+
const method = path?.[String(point.method).toLowerCase()];
|
|
21
|
+
const graphql = def?.query?.[point.orig] || def?.mutation?.[point.orig];
|
|
22
|
+
if (!method && !graphql)
|
|
23
|
+
return undefined;
|
|
24
|
+
const facts = { protocol: graphql ? 'graphql' : 'http' };
|
|
25
|
+
if (graphql) {
|
|
26
|
+
facts.field = graphql;
|
|
27
|
+
facts.types = (0, contract_1.graphqlInputTypes)(graphql, def.types || {});
|
|
28
|
+
facts.typesScope = 'inputs';
|
|
29
|
+
return facts;
|
|
30
|
+
}
|
|
31
|
+
for (const key of ['operationId', 'requestBody', 'responses', 'consumes', 'produces']) {
|
|
32
|
+
if (undefined !== method[key])
|
|
33
|
+
facts[key] = method[key];
|
|
34
|
+
}
|
|
35
|
+
// A path item may declare parameters shared by every operation under it.
|
|
36
|
+
facts.parameters = [...(path.parameters || []), ...(method.parameters || [])];
|
|
37
|
+
facts.security = method.security ?? def.security;
|
|
38
|
+
facts.securitySource = method.security !== undefined ? 'operation' :
|
|
39
|
+
def.security !== undefined ? 'definition' : 'unspecified';
|
|
40
|
+
// swagger2 names this `securityDefinitions`.
|
|
41
|
+
facts.securitySchemes = def.components?.securitySchemes ?? def.securityDefinitions;
|
|
42
|
+
facts.consumes ??= def.consumes;
|
|
43
|
+
facts.produces ??= def.produces;
|
|
44
|
+
return facts;
|
|
45
|
+
}
|
|
46
|
+
// Every described operation, keyed 'METHOD path' as `point.contract.id` is.
|
|
47
|
+
function operationIndex(def) {
|
|
48
|
+
const out = {};
|
|
49
|
+
for (const path of Object.keys(def?.paths || {})) {
|
|
50
|
+
for (const method of METHODS) {
|
|
51
|
+
if (null == def.paths[path]?.[method])
|
|
52
|
+
continue;
|
|
53
|
+
const facts = operationFacts(def, { method, orig: path });
|
|
54
|
+
if (facts)
|
|
55
|
+
out[method.toUpperCase() + ' ' + path] = facts;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
for (const kind of ['query', 'mutation']) {
|
|
59
|
+
for (const field of Object.keys(def?.[kind] || {})) {
|
|
60
|
+
const facts = operationFacts(def, { method: 'POST', orig: field });
|
|
61
|
+
if (facts)
|
|
62
|
+
out['POST ' + field] = facts;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
function makeResolved(kind, def) {
|
|
68
|
+
return {
|
|
69
|
+
version: 1,
|
|
70
|
+
kind,
|
|
71
|
+
def,
|
|
72
|
+
operation: (method, path) => operationFacts(def, { method, orig: path }),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// Tolerates a missing context: apidef also runs outside a model build.
|
|
76
|
+
function publishResolved(ctx, kind, def) {
|
|
77
|
+
const resolved = makeResolved(kind, def);
|
|
78
|
+
if (null != ctx && 'object' === typeof ctx) {
|
|
79
|
+
ctx.state = ctx.state || {};
|
|
80
|
+
ctx.state.apidef = { ...(ctx.state.apidef || {}), resolved };
|
|
81
|
+
}
|
|
82
|
+
return resolved;
|
|
83
|
+
}
|
|
84
|
+
function resolvedSpec(carrier) {
|
|
85
|
+
if (null == carrier || 'object' !== typeof carrier)
|
|
86
|
+
return undefined;
|
|
87
|
+
return carrier.state?.apidef?.resolved ??
|
|
88
|
+
carrier.ctx?.state?.apidef?.resolved ??
|
|
89
|
+
carrier.apidef?.resolved ??
|
|
90
|
+
undefined;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=resolved.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolved.js","sourceRoot":"","sources":["../src/resolved.ts"],"names":[],"mappings":"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"}
|
package/dist/resolver.js
CHANGED
|
@@ -9,8 +9,6 @@ const node_path_1 = __importDefault(require("node:path"));
|
|
|
9
9
|
const utility_1 = require("./utility");
|
|
10
10
|
async function resolveElements(ctx, kind, subkind, standard) {
|
|
11
11
|
const { log, model, guide } = ctx;
|
|
12
|
-
// TODO: model access should be via a utility that generates
|
|
13
|
-
// useful errors when the target is missing
|
|
14
12
|
const control = guide.control[kind][subkind];
|
|
15
13
|
const target = kind + '.' + subkind;
|
|
16
14
|
const elementNames = control.order
|
package/dist/resolver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":";AAAA,iDAAiD;;;;;
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"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"}
|
package/dist/transform/args.js
CHANGED
|
@@ -36,8 +36,8 @@ const argsTransform = async function (ctx) {
|
|
|
36
36
|
}
|
|
37
37
|
else {
|
|
38
38
|
const pathdef = def.paths[mpoint.orig];
|
|
39
|
-
argdefs.push(...(pathdef
|
|
40
|
-
const opdef = pathdef[mpoint.method.toLowerCase()];
|
|
39
|
+
argdefs.push(...(pathdef?.parameters ?? []));
|
|
40
|
+
const opdef = pathdef?.[mpoint.method.toLowerCase()];
|
|
41
41
|
argdefs.push(...(opdef?.parameters ?? []));
|
|
42
42
|
}
|
|
43
43
|
resolveArgs(ctx, ment, mop, mpoint, argdefs);
|
|
@@ -54,14 +54,6 @@ function graphqlFieldDef(def, mpoint) {
|
|
|
54
54
|
return 'mutation' === mpoint.graphql?.optype ?
|
|
55
55
|
def.mutation?.[field] : def.query?.[field];
|
|
56
56
|
}
|
|
57
|
-
// Map a GraphQL named type onto the JSON-schema-ish scalar names the
|
|
58
|
-
// existing arg/field typing understands.
|
|
59
|
-
//
|
|
60
|
-
// Only the built-in scalars have a known JSON shape. A custom scalar can be
|
|
61
|
-
// anything — JSON/JSONObject accept objects and arrays, DateTime is a
|
|
62
|
-
// string, Upload is a file handle — so anything unrecognised stays
|
|
63
|
-
// unconstrained rather than being wrongly advertised (and validated) as a
|
|
64
|
-
// string. ID and String are the two custom-free string cases.
|
|
65
57
|
function gqlScalarType(typeName) {
|
|
66
58
|
return 'Int' === typeName ? 'integer' :
|
|
67
59
|
'Float' === typeName ? 'number' :
|
|
@@ -78,16 +70,8 @@ const ARG_KIND = {
|
|
|
78
70
|
function resolveArgs(ctx, ment, mop, mpoint, argdefs) {
|
|
79
71
|
const touchedKeys = new Set();
|
|
80
72
|
(0, jostraca_1.each)(argdefs, (argdef) => {
|
|
81
|
-
// Spec name as written (e.g. `dataType`) is what the rename map is keyed
|
|
82
|
-
// by; the snakified form is the user-friendly runtime identifier.
|
|
83
73
|
const specName = (0, utility_1.normalizeFieldName)(argdef.name);
|
|
84
74
|
const orig = (0, utility_1.depluralize)((0, jostraca_1.snakify)(specName));
|
|
85
|
-
// A parameter with no name is not a parameter. This is what a DANGLING
|
|
86
|
-
// `$ref` looks like by the time it reaches here: the reference survives
|
|
87
|
-
// unresolved, `name` and `in` are both absent, and the arg would become
|
|
88
|
-
// a nameless `query` entry that every target then has to render. Ruby
|
|
89
|
-
// cannot: `Struct.new(:"")` raises at load and takes the whole SDK with
|
|
90
|
-
// it. Drop it and say which reference is missing.
|
|
91
75
|
if ('' === orig) {
|
|
92
76
|
const ref = argdef?.$ref;
|
|
93
77
|
ctx?.warn?.({
|
|
@@ -132,13 +116,6 @@ function resolveArgs(ctx, ment, mop, mpoint, argdefs) {
|
|
|
132
116
|
mpoint.args[key]?.sort(cmp);
|
|
133
117
|
}
|
|
134
118
|
}
|
|
135
|
-
// OpenAPI lets specs advertise example values four ways:
|
|
136
|
-
// parameter.example (single value, OAS 3.0+)
|
|
137
|
-
// parameter.examples (named-example object, take first .value)
|
|
138
|
-
// parameter.schema.example (single value on the schema)
|
|
139
|
-
// parameter.schema.default (default value)
|
|
140
|
-
// Pick the first one we find so test generators can produce valid live
|
|
141
|
-
// requests even when the parameter is required and has no other source.
|
|
142
119
|
function resolveArgExample(argdef) {
|
|
143
120
|
if (undefined !== argdef?.example)
|
|
144
121
|
return argdef.example;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/transform/args.ts"],"names":[],"mappings":";;;AAEA,uCAAwC;AAIxC,wCAAqG;AAGrG,oCAA8B;AAoB9B,MAAM,aAAa,GAAc,KAAK,WACpC,GAAQ;IAER,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG,CAAA;IAC7B,MAAM,GAAG,GAAa,QAAQ,CAAC,IAAI,CAAC,WAAG,CAAC,CAAA;IAExC,IAAI,GAAG,GAAG,OAAO,CAAA;IAGjB,IAAA,eAAI,EAAC,GAAG,CAAC,MAAM,EAAE,CAAC,IAAiB,EAAE,OAAe,EAAE,EAAE;QACtD,IAAA,eAAI,EAAC,IAAI,CAAC,EAAE,EAAE,CAAC,GAAY,EAAE,MAAc,EAAE,EAAE;YAC7C,IAAA,eAAI,EAAC,GAAG,CAAC,MAAM,EAAE,CAAC,MAAkB,EAAE,EAAE;gBACtC,MAAM,OAAO,GAAmB,EAAE,CAAA;gBAElC,IAAI,SAAS,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;oBAC9B,oEAAoE;oBACpE,6DAA6D;oBAC7D,kEAAkE;oBAClE,8DAA8D;oBAC9D,6DAA6D;oBAC7D,MAAM,QAAQ,GAAQ,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;oBAClD,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;wBACzC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;wBACrC,IAAI,IAAI,IAAI,OAAO,IAAI,cAAc,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;4BACvD,SAAQ;wBACV,CAAC;wBACD,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,GAAG,CAAC,IAAI;4BACd,EAAE,EAAE,MAAM;4BACV,8DAA8D;4BAC9D,0DAA0D;4BAC1D,QAAQ,EAAE,GAAG,CAAC,IAAI,IAAI,SAAS,KAAK,GAAG,CAAC,KAAK;4BAC7C,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;yBACnC,CAAC,CAAA;oBACX,CAAC;gBACH,CAAC;qBACI,CAAC;oBACJ,MAAM,OAAO,GAAY,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;oBAC/C,OAAO,CAAC,IAAI,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/transform/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.casecollideTransform = void 0;
|
|
4
|
+
const jostraca_1 = require("jostraca");
|
|
5
|
+
const types_1 = require("../types");
|
|
6
|
+
// See docs/design/derived-names.md
|
|
7
|
+
function deepempty(v) {
|
|
8
|
+
if (null == v)
|
|
9
|
+
return true;
|
|
10
|
+
if ('object' !== typeof v)
|
|
11
|
+
return false;
|
|
12
|
+
const keys = Object.keys(v);
|
|
13
|
+
if (0 === keys.length)
|
|
14
|
+
return true;
|
|
15
|
+
return keys.every((k) => deepempty(v[k]));
|
|
16
|
+
}
|
|
17
|
+
const casecollideTransform = async function (ctx) {
|
|
18
|
+
const { apimodel, guide } = ctx;
|
|
19
|
+
const kit = apimodel.main[types_1.KIT];
|
|
20
|
+
const bylower = {};
|
|
21
|
+
(0, jostraca_1.each)(kit.entity, (_entity, entname) => {
|
|
22
|
+
const lower = String((0, jostraca_1.camelify)(entname)).toLowerCase();
|
|
23
|
+
bylower[lower] = bylower[lower] || [];
|
|
24
|
+
bylower[lower].push(entname);
|
|
25
|
+
});
|
|
26
|
+
const dropped = [];
|
|
27
|
+
for (const lower of Object.keys(bylower)) {
|
|
28
|
+
const group = bylower[lower].sort();
|
|
29
|
+
if (group.length < 2)
|
|
30
|
+
continue;
|
|
31
|
+
// See docs/design/derived-names.md
|
|
32
|
+
const opcount = (name) => {
|
|
33
|
+
const ops = kit.entity[name]?.op || {};
|
|
34
|
+
return Object.keys(ops).filter((opname) => !deepempty(ops[opname])).length;
|
|
35
|
+
};
|
|
36
|
+
const withops = group.filter(n => 0 < opcount(n));
|
|
37
|
+
const noops = group.filter(n => 0 === opcount(n));
|
|
38
|
+
if (0 === withops.length || 0 === noops.length) {
|
|
39
|
+
ctx.log.warn({
|
|
40
|
+
point: 'entity-case-collision',
|
|
41
|
+
entity: group,
|
|
42
|
+
note: 'entity names differ only by case and all carry operations: ' +
|
|
43
|
+
group.join(', ') + ' — the generated files collide on a ' +
|
|
44
|
+
'case-insensitive filesystem. Not resolved here: dropping one ' +
|
|
45
|
+
'would remove operations from the SDK.'
|
|
46
|
+
});
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
for (const name of noops) {
|
|
50
|
+
delete kit.entity[name];
|
|
51
|
+
if (guide?.entity)
|
|
52
|
+
delete guide.entity[name];
|
|
53
|
+
dropped.push(name);
|
|
54
|
+
ctx.log.info({
|
|
55
|
+
point: 'entity-case-collision-drop',
|
|
56
|
+
entity: name,
|
|
57
|
+
kept: withops,
|
|
58
|
+
note: 'dropped entity ' + name + ': it carries no operations and its ' +
|
|
59
|
+
'name differs only by case from ' + withops.join(', ') +
|
|
60
|
+
', so both would generate to one file.'
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return { ok: true, msg: 0 === dropped.length ? '' : 'dropped: ' + dropped.join(',') };
|
|
65
|
+
};
|
|
66
|
+
exports.casecollideTransform = casecollideTransform;
|
|
67
|
+
//# sourceMappingURL=casecollide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"casecollide.js","sourceRoot":"","sources":["../../src/transform/casecollide.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,24 +3,37 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.contractTransform = void 0;
|
|
4
4
|
exports.contractJSON = contractJSON;
|
|
5
5
|
exports.graphqlInputTypes = graphqlInputTypes;
|
|
6
|
+
const resolved_1 = require("../resolved");
|
|
6
7
|
function contractJSON(value) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
8
|
+
function walk(root, base) {
|
|
9
|
+
// One memo per fact, so refs stay local to it.
|
|
10
|
+
const seen = new Map();
|
|
11
|
+
function copy(v, path) {
|
|
12
|
+
if (v === null || typeof v !== 'object')
|
|
13
|
+
return v;
|
|
14
|
+
if (seen.has(v))
|
|
15
|
+
return { $ref: seen.get(v) };
|
|
16
|
+
seen.set(v, path);
|
|
17
|
+
const out = Array.isArray(v) ? v.map((item, i) => copy(item, path + '/' + i)) : {};
|
|
18
|
+
if (!Array.isArray(v))
|
|
19
|
+
for (const k of Object.keys(v).sort()) {
|
|
20
|
+
if (!k.endsWith('$') && !k.startsWith('x-') && undefined !== v[k])
|
|
21
|
+
out[k] = copy(v[k], path + '/' + k.replace(/~/g, '~0').replace(/\//g, '~1'));
|
|
22
|
+
}
|
|
23
|
+
return out;
|
|
24
|
+
}
|
|
25
|
+
return copy(root, base);
|
|
26
|
+
}
|
|
27
|
+
if (null === value || 'object' !== typeof value || Array.isArray(value)) {
|
|
28
|
+
return JSON.stringify(walk(value, '#'));
|
|
29
|
+
}
|
|
30
|
+
const out = {};
|
|
31
|
+
for (const k of Object.keys(value).sort()) {
|
|
32
|
+
if (k.endsWith('$') || k.startsWith('x-') || undefined === value[k])
|
|
33
|
+
continue;
|
|
34
|
+
out[k] = walk(value[k], '#/' + k.replace(/~/g, '~0').replace(/\//g, '~1'));
|
|
22
35
|
}
|
|
23
|
-
return JSON.stringify(
|
|
36
|
+
return JSON.stringify(out);
|
|
24
37
|
}
|
|
25
38
|
// An operation needs its argument types, including recursive input objects.
|
|
26
39
|
// Output types are represented by the field and generated invocation selection;
|
|
@@ -51,26 +64,12 @@ const contractTransform = async (ctx) => {
|
|
|
51
64
|
const graphql = def.query?.[point.orig] || def.mutation?.[point.orig];
|
|
52
65
|
if (!method && !graphql)
|
|
53
66
|
continue;
|
|
54
|
-
const facts =
|
|
55
|
-
if (
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
67
|
+
const facts = (0, resolved_1.operationFacts)(def, point);
|
|
68
|
+
if (null == facts)
|
|
69
|
+
continue;
|
|
70
|
+
// A property of the point, not of the definition.
|
|
71
|
+
if (graphql)
|
|
59
72
|
facts.invocation = point.graphql;
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
for (const key of ['operationId', 'requestBody', 'responses', 'consumes', 'produces']) {
|
|
63
|
-
if (undefined !== method[key])
|
|
64
|
-
facts[key] = method[key];
|
|
65
|
-
}
|
|
66
|
-
facts.parameters = [...(path.parameters || []), ...(method.parameters || [])];
|
|
67
|
-
facts.security = method.security ?? def.security;
|
|
68
|
-
facts.securitySource = method.security !== undefined ? 'operation' :
|
|
69
|
-
def.security !== undefined ? 'definition' : 'unspecified';
|
|
70
|
-
facts.securitySchemes = def.components?.securitySchemes ?? def.securityDefinitions;
|
|
71
|
-
facts.consumes ??= def.consumes;
|
|
72
|
-
facts.produces ??= def.produces;
|
|
73
|
-
}
|
|
74
73
|
const guideOp = ctx.guide?.entity?.[entity.name]?.[graphql ? 'field' : 'path']?.[point.orig]?.op?.[op.name];
|
|
75
74
|
const hint = guideOp?.live;
|
|
76
75
|
for (const key of ['requestBody', 'responses', 'parameters', 'security']) {
|
|
@@ -79,11 +78,17 @@ const contractTransform = async (ctx) => {
|
|
|
79
78
|
(facts.factSources ??= {})[key] = 'guide';
|
|
80
79
|
}
|
|
81
80
|
}
|
|
82
|
-
if (hint !== undefined)
|
|
81
|
+
if (hint !== undefined) {
|
|
83
82
|
facts.live = hint;
|
|
83
|
+
point.live = hint;
|
|
84
|
+
}
|
|
85
|
+
// Identity only; facts come from the capability. See
|
|
86
|
+
// docs/design/resolved-spec-capability.md
|
|
84
87
|
point.contract = { version: 1, id: point.method + ' ' + point.orig,
|
|
85
|
-
source: graphql ? 'graphql' : def.swagger ? 'swagger2' : 'openapi3'
|
|
86
|
-
|
|
88
|
+
source: graphql ? 'graphql' : def.swagger ? 'swagger2' : 'openapi3' };
|
|
89
|
+
if (ctx.opts?.contractJson) {
|
|
90
|
+
point.contract.json = contractJSON(facts);
|
|
91
|
+
}
|
|
87
92
|
}
|
|
88
93
|
}
|
|
89
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/transform/contract.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/transform/contract.ts"],"names":[],"mappings":"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"}
|
package/dist/transform/entity.js
CHANGED
|
@@ -11,26 +11,10 @@ const entityTransform = async function (ctx) {
|
|
|
11
11
|
const { apimodel, guide } = ctx;
|
|
12
12
|
const kit = apimodel.main[types_1.KIT];
|
|
13
13
|
let msg = '';
|
|
14
|
-
// Pre-pass: merge collection paths into the entity that owns the
|
|
15
|
-
// per-instance paths. Heuristic01 sometimes assigns "/people" to a
|
|
16
|
-
// separate "*_search" entity (because the response wraps Person in
|
|
17
|
-
// a search/pagination component) while "/people/{id}" and
|
|
18
|
-
// "/people/{id}/anime" land on "person". Result: the person entity has
|
|
19
|
-
// no primary list endpoint, so direct-load tests can't bootstrap an
|
|
20
|
-
// ID. Move "/people" onto person here; this also clears the way for
|
|
21
|
-
// sensible flow generation (one entity, one collection, multiple
|
|
22
|
-
// sub-resources).
|
|
23
|
-
// Path-shaped collection merging is meaningless for root-field guides.
|
|
24
14
|
if (true !== ctx.def?.graphql) {
|
|
25
15
|
mergeCollectionPaths(guide, ctx.log);
|
|
26
16
|
}
|
|
27
17
|
(0, jostraca_1.each)(guide.entity, (guideEntity, entname) => {
|
|
28
|
-
// `active: false` in guide.aontu drops the entity. The guide model has
|
|
29
|
-
// always declared `active?: boolean` at entity, path and op level and the
|
|
30
|
-
// docs call it the intended escape hatch, but nothing read it — so an
|
|
31
|
-
// entity a heuristic invented (a response envelope classified as a
|
|
32
|
-
// resource, say) could not be removed by the one file a user is meant to
|
|
33
|
-
// edit. Absent means active, so existing guides are unaffected.
|
|
34
18
|
if (!(0, utility_1.guideActive)(guideEntity)) {
|
|
35
19
|
ctx.log.debug({ point: 'guide-entity', note: entname, active: false });
|
|
36
20
|
return;
|
|
@@ -40,9 +24,6 @@ const entityTransform = async function (ctx) {
|
|
|
40
24
|
const paths$ = graphql ?
|
|
41
25
|
resolveFieldList(guideEntity, ctx.def) :
|
|
42
26
|
resolvePathList(guideEntity, ctx.def);
|
|
43
|
-
// Ancestry is inferred from literal/{param} path pairs, which root
|
|
44
|
-
// fields do not have; GraphQL relations come from the schema instead
|
|
45
|
-
// (see transform/graphql.ts).
|
|
46
27
|
const relations = graphql ?
|
|
47
28
|
{ ancestors: [] } :
|
|
48
29
|
buildRelations(guideEntity, paths$);
|
|
@@ -63,10 +44,6 @@ exports.entityTransform = entityTransform;
|
|
|
63
44
|
// per-instance paths — leaves correctly-classified APIs alone.
|
|
64
45
|
function mergeCollectionPaths(guide, log) {
|
|
65
46
|
const entities = guide.entity;
|
|
66
|
-
// First pass: build collectionRoot -> owner-entity-name map.
|
|
67
|
-
// owner is the entity whose name contains "/X/{...}" paths; we prefer
|
|
68
|
-
// the owner whose direct-load path is "/X/{id}" (no further segments)
|
|
69
|
-
// so that nested-resource entities don't claim the root.
|
|
70
47
|
const rootOwners = {};
|
|
71
48
|
for (const [ename, entity] of Object.entries(entities)) {
|
|
72
49
|
for (const pathStr of Object.keys(entity.path ?? {})) {
|
|
@@ -76,8 +53,6 @@ function mergeCollectionPaths(guide, log) {
|
|
|
76
53
|
continue;
|
|
77
54
|
const root = m[1];
|
|
78
55
|
const trailing = m[2] ?? '';
|
|
79
|
-
// Depth = number of segments after the {id} placeholder. Lower
|
|
80
|
-
// depth wins (e.g. "/people/{id}" beats "/people/{id}/anime").
|
|
81
56
|
const depth = trailing === '' ? 0 : trailing.split('/').filter(Boolean).length;
|
|
82
57
|
const cur = rootOwners[root];
|
|
83
58
|
if (!cur || depth < cur.depth) {
|
|
@@ -114,11 +89,6 @@ function mergeCollectionPaths(guide, log) {
|
|
|
114
89
|
targetEntity.path[pathStr] = srcPath;
|
|
115
90
|
}
|
|
116
91
|
else {
|
|
117
|
-
// Target already owns this path under a different heuristic-discovered
|
|
118
|
-
// entity (e.g. `/gists` GET on `base_gist`, `/gists` POST on `gist`).
|
|
119
|
-
// Merge op/action/rename sets so no method is silently lost — without
|
|
120
|
-
// this, the second source's contribution drops on the floor and the
|
|
121
|
-
// base-guide loses paths that were in the original spec.
|
|
122
92
|
if (srcPath?.op) {
|
|
123
93
|
tgtPath.op = tgtPath.op ?? {};
|
|
124
94
|
for (const opname of Object.keys(srcPath.op)) {
|
|
@@ -162,14 +132,6 @@ function resolvePathList(guideEntity, def) {
|
|
|
162
132
|
if (!(0, utility_1.guideActive)(guidePath)) {
|
|
163
133
|
return;
|
|
164
134
|
}
|
|
165
|
-
// THE path construction site (ADR-003). The split, the rename
|
|
166
|
-
// application and the segment typing all happen here and nowhere else:
|
|
167
|
-
// a second place that decides what a path segment is would be free to
|
|
168
|
-
// decide differently.
|
|
169
|
-
//
|
|
170
|
-
// A segment is a literal or a variable. The braced form this replaces
|
|
171
|
-
// could not tell a literal containing braces from a parameter, so the
|
|
172
|
-
// brace test below is the LAST point at which that ambiguity exists.
|
|
173
135
|
const rename = guidePath.rename ?? {};
|
|
174
136
|
const segments = orig
|
|
175
137
|
.split('/')
|
|
@@ -179,12 +141,6 @@ function resolvePathList(guideEntity, def) {
|
|
|
179
141
|
return { lit: p };
|
|
180
142
|
}
|
|
181
143
|
const raw = p.slice(1, -1);
|
|
182
|
-
// A WHOLE element is the placeholder, or it is a literal. `{a}.{b}`
|
|
183
|
-
// is two parameters glued into one element with a separator that
|
|
184
|
-
// belongs to neither; it is not one parameter called `a}.{b`, and
|
|
185
|
-
// there is no honest `var` for it. `{}` names nothing. Both stay
|
|
186
|
-
// literal — which is exactly what the braced-string form did with
|
|
187
|
-
// them, since the rename lookup was a whole-element match too.
|
|
188
144
|
if ('' === raw || raw.includes('{') || raw.includes('}')) {
|
|
189
145
|
return { lit: p };
|
|
190
146
|
}
|
|
@@ -245,18 +201,6 @@ function resolveFieldList(guideEntity, def) {
|
|
|
245
201
|
return paths$;
|
|
246
202
|
}
|
|
247
203
|
function buildRelations(guideEntity, paths$) {
|
|
248
|
-
// An ancestor is a literal collection segment (e.g. "rems") followed by
|
|
249
|
-
// a path-param placeholder that names an instance ID. We only collect
|
|
250
|
-
// the literal parts — placeholder parts like "{año}" must be excluded
|
|
251
|
-
// even when they're themselves followed by another placeholder, otherwise
|
|
252
|
-
// downstream code treats `{año}` as an ancestor name and emits broken
|
|
253
|
-
// idmap entries / match keys.
|
|
254
|
-
//
|
|
255
|
-
// Each captured segment is then normalised to its entity name —
|
|
256
|
-
// depluralize+snakify — so that "files"/"audit-log" become "file"/"audit_log",
|
|
257
|
-
// i.e. the same keys downstream code uses to look up entities. Without this,
|
|
258
|
-
// `apimodel.main.kit.entity[ancestorName]` misses the parent entity for
|
|
259
|
-
// pluralised path segments.
|
|
260
204
|
let ancestors = paths$
|
|
261
205
|
.map(pli => pli.segments
|
|
262
206
|
.map((s, i) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/transform/entity.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/transform/entity.ts"],"names":[],"mappings":"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"}
|