@voxgig/apidef 6.5.0 → 7.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/dist/apidef.js +39 -2
- package/dist/apidef.js.map +1 -1
- package/dist/guide/graphql01.d.ts +39 -0
- package/dist/guide/graphql01.js +331 -0
- package/dist/guide/graphql01.js.map +1 -0
- package/dist/guide/guide.js +70 -10
- package/dist/guide/guide.js.map +1 -1
- package/dist/guide/heuristic01.js +1 -0
- package/dist/guide/heuristic01.js.map +1 -1
- package/dist/model.d.ts +22 -1
- package/dist/parse/graphql.d.ts +46 -0
- package/dist/parse/graphql.js +205 -0
- package/dist/parse/graphql.js.map +1 -0
- package/dist/parse.js +19 -0
- package/dist/parse.js.map +1 -1
- package/dist/transform/args.js +49 -4
- package/dist/transform/args.js.map +1 -1
- package/dist/transform/entity.js +51 -3
- package/dist/transform/entity.js.map +1 -1
- package/dist/transform/field.js +71 -1
- package/dist/transform/field.js.map +1 -1
- package/dist/transform/graphql.d.ts +6 -0
- package/dist/transform/graphql.js +227 -0
- package/dist/transform/graphql.js.map +1 -0
- package/dist/transform/select.js +17 -2
- package/dist/transform/select.js.map +1 -1
- package/dist/transform/top.js +31 -2
- package/dist/transform/top.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +16 -1
- package/dist/types.js.map +1 -1
- package/dist/utility.d.ts +2 -1
- package/dist/utility.js +52 -4
- package/dist/utility.js.map +1 -1
- package/model/apidef.aontu +23 -0
- package/model/guide.aontu +22 -0
- package/package.json +12 -4
- package/src/apidef.ts +44 -2
- package/src/guide/graphql01.ts +516 -0
- package/src/guide/guide.ts +90 -12
- package/src/guide/heuristic01.ts +1 -0
- package/src/model.ts +46 -1
- package/src/parse/graphql.ts +302 -0
- package/src/parse.ts +23 -0
- package/src/transform/args.ts +54 -5
- package/src/transform/entity.ts +63 -3
- package/src/transform/field.ts +89 -2
- package/src/transform/graphql.ts +311 -0
- package/src/transform/select.ts +19 -2
- package/src/transform/top.ts +31 -2
- package/src/types.ts +40 -0
- package/src/utility.ts +54 -4
package/dist/apidef.js
CHANGED
|
@@ -61,6 +61,7 @@ Object.defineProperty(exports, "CANON_ONE", { enumerable: true, get: function ()
|
|
|
61
61
|
const top_1 = require("./transform/top");
|
|
62
62
|
const entity_1 = require("./transform/entity");
|
|
63
63
|
const operation_1 = require("./transform/operation");
|
|
64
|
+
const graphql_1 = require("./transform/graphql");
|
|
64
65
|
const args_1 = require("./transform/args");
|
|
65
66
|
const select_1 = require("./transform/select");
|
|
66
67
|
const field_1 = require("./transform/field");
|
|
@@ -79,7 +80,11 @@ function ApiDef(opts) {
|
|
|
79
80
|
const pino = (0, util_1.prettyPino)('apidef', opts);
|
|
80
81
|
const log = pino.child({ cmp: 'apidef' });
|
|
81
82
|
const warn = (0, utility_1.makeWarner)({ point: 'warning', log });
|
|
82
|
-
|
|
83
|
+
// Input format: explicit option wins, else sniff from the def file name.
|
|
84
|
+
// A GraphQL build defaults to the graphql01 guide strategy.
|
|
85
|
+
opts.kind = opts.kind || resolveKind(opts.def);
|
|
86
|
+
opts.strategy = opts.strategy ||
|
|
87
|
+
('GraphQL' === opts.kind ? 'graphql01' : 'heuristic01');
|
|
83
88
|
async function generate(spec) {
|
|
84
89
|
const start = Date.now();
|
|
85
90
|
const steps = [];
|
|
@@ -151,7 +156,15 @@ function ApiDef(opts) {
|
|
|
151
156
|
work: {}
|
|
152
157
|
};
|
|
153
158
|
const defsrc = (0, utility_1.loadFile)(defpath, 'def', fs, log);
|
|
154
|
-
const def = await (0, parse_1.parse)(
|
|
159
|
+
const def = await (0, parse_1.parse)(opts.kind, defsrc, {
|
|
160
|
+
file: defpath,
|
|
161
|
+
// GraphQL-only inputs; ignored by the OpenAPI parser.
|
|
162
|
+
graphql: {
|
|
163
|
+
endpoint: opts.endpoint,
|
|
164
|
+
title: model.name,
|
|
165
|
+
version: model.main?.[types_1.KIT]?.info?.version,
|
|
166
|
+
},
|
|
167
|
+
});
|
|
155
168
|
const defkeys = Object.keys(def);
|
|
156
169
|
log.info({
|
|
157
170
|
point: 'root-keys',
|
|
@@ -190,6 +203,9 @@ function ApiDef(opts) {
|
|
|
190
203
|
await (0, top_1.topTransform)(ctx);
|
|
191
204
|
await (0, entity_1.entityTransform)(ctx);
|
|
192
205
|
await (0, operation_1.operationTransform)(ctx);
|
|
206
|
+
// Must precede args and field: both branch on point.kind === 'graphql'
|
|
207
|
+
// and read the graphql block this stamps on.
|
|
208
|
+
await (0, graphql_1.graphqlTransform)(ctx);
|
|
193
209
|
await (0, args_1.argsTransform)(ctx);
|
|
194
210
|
await (0, select_1.selectTransform)(ctx);
|
|
195
211
|
await (0, field_1.fieldTransform)(ctx);
|
|
@@ -321,6 +337,18 @@ function ApiDef(opts) {
|
|
|
321
337
|
generate,
|
|
322
338
|
};
|
|
323
339
|
}
|
|
340
|
+
// Sniff the input format from the definition file name. GraphQL schemas use
|
|
341
|
+
// .graphql/.graphqls/.gql; an explicit `kind` option always wins. Introspection
|
|
342
|
+
// JSON must be named .graphql.json (or declared) since a bare .json could be
|
|
343
|
+
// either format.
|
|
344
|
+
function resolveKind(def) {
|
|
345
|
+
const name = String(def ?? '').toLowerCase();
|
|
346
|
+
if (name.endsWith('.graphql') || name.endsWith('.graphqls') ||
|
|
347
|
+
name.endsWith('.gql') || name.endsWith('.graphql.json')) {
|
|
348
|
+
return 'GraphQL';
|
|
349
|
+
}
|
|
350
|
+
return 'OpenAPI';
|
|
351
|
+
}
|
|
324
352
|
ApiDef.makeBuild = async function (opts) {
|
|
325
353
|
let apidef = undefined;
|
|
326
354
|
const config = {
|
|
@@ -330,6 +358,12 @@ ApiDef.makeBuild = async function (opts) {
|
|
|
330
358
|
};
|
|
331
359
|
const build = async function (model, build, _ctx) {
|
|
332
360
|
if (null == apidef) {
|
|
361
|
+
// Resolve the input format HERE, not at makeBuild time: in the
|
|
362
|
+
// documented pattern the definition filename arrives as `model.def`
|
|
363
|
+
// and `opts.def` is unset, so sniffing at construction would pin every
|
|
364
|
+
// build to OpenAPI and send SDL to the OpenAPI parser.
|
|
365
|
+
const kind = opts.kind || resolveKind(opts.def || model.def);
|
|
366
|
+
config.kind = 'GraphQL' === kind ? 'graphql' : 'openapi3';
|
|
333
367
|
apidef = ApiDef({
|
|
334
368
|
def: opts.def,
|
|
335
369
|
fs: opts.fs,
|
|
@@ -338,6 +372,9 @@ ApiDef.makeBuild = async function (opts) {
|
|
|
338
372
|
meta: opts.meta,
|
|
339
373
|
outprefix: opts.outprefix,
|
|
340
374
|
strategy: opts.strategy,
|
|
375
|
+
kind,
|
|
376
|
+
endpoint: opts.endpoint,
|
|
377
|
+
auth: opts.auth,
|
|
341
378
|
pino: build.log,
|
|
342
379
|
why: opts.why,
|
|
343
380
|
});
|
package/dist/apidef.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apidef.js","sourceRoot":"","sources":["../src/apidef.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"apidef.js","sourceRoot":"","sources":["../src/apidef.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ApiDefContext, Guide } from '../types';
|
|
2
|
+
import type { GqlField, GqlType } from '../parse/graphql';
|
|
3
|
+
type GqlOpName = 'load' | 'list' | 'create' | 'update' | 'remove';
|
|
4
|
+
type GqlRetShape = {
|
|
5
|
+
kind: 'entity' | 'connection' | 'list' | 'payload' | 'scalar' | 'other';
|
|
6
|
+
entity?: string;
|
|
7
|
+
nodes?: string;
|
|
8
|
+
unwrap?: string;
|
|
9
|
+
deleteish?: boolean;
|
|
10
|
+
};
|
|
11
|
+
type GqlArgSig = {
|
|
12
|
+
name: string;
|
|
13
|
+
gqltype: string;
|
|
14
|
+
reqd: boolean;
|
|
15
|
+
};
|
|
16
|
+
type GqlFieldSig = {
|
|
17
|
+
optype: 'query' | 'mutation';
|
|
18
|
+
name: string;
|
|
19
|
+
args: GqlArgSig[];
|
|
20
|
+
ret: GqlRetShape;
|
|
21
|
+
inputTypeName?: string;
|
|
22
|
+
nameEntity?: string;
|
|
23
|
+
};
|
|
24
|
+
type GqlClassification = {
|
|
25
|
+
exclude?: boolean;
|
|
26
|
+
entity?: string;
|
|
27
|
+
op?: GqlOpName;
|
|
28
|
+
action?: string;
|
|
29
|
+
optype?: 'query' | 'mutation';
|
|
30
|
+
why: string[];
|
|
31
|
+
};
|
|
32
|
+
type GqlProfile = 'linear' | 'relay' | 'none';
|
|
33
|
+
declare function classifyGraphQLField(sig: GqlFieldSig, profile: GqlProfile): GqlClassification;
|
|
34
|
+
declare function deriveRetShape(field: GqlField, types: Record<string, GqlType>): GqlRetShape;
|
|
35
|
+
declare function fieldSig(optype: 'query' | 'mutation', field: GqlField, types: Record<string, GqlType>): GqlFieldSig;
|
|
36
|
+
declare function entityName(typeName: string): string;
|
|
37
|
+
declare function graphql01(ctx: ApiDefContext): Promise<Guide>;
|
|
38
|
+
export { graphql01, classifyGraphQLField, deriveRetShape, fieldSig, entityName, };
|
|
39
|
+
export type { GqlFieldSig, GqlArgSig, GqlRetShape, GqlClassification, GqlProfile, GqlOpName, };
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Copyright (c) 2024-2026 Voxgig, MIT License */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.graphql01 = graphql01;
|
|
5
|
+
exports.classifyGraphQLField = classifyGraphQLField;
|
|
6
|
+
exports.deriveRetShape = deriveRetShape;
|
|
7
|
+
exports.fieldSig = fieldSig;
|
|
8
|
+
exports.entityName = entityName;
|
|
9
|
+
const utility_1 = require("../utility");
|
|
10
|
+
const CREATE_RE = /^(create|insert|add|new)$/i;
|
|
11
|
+
const UPDATE_RE = /^(update|edit|modify|patch|set)$/i;
|
|
12
|
+
const REMOVE_RE = /^(delete|remove|destroy|drop)$/i;
|
|
13
|
+
// Type-name suffixes that mark schema machinery rather than API entities.
|
|
14
|
+
const MACHINERY_RE = /(Connection|Edge|PageInfo|Payload|Input|Filter|Comparator|Sort|OrderBy)$/;
|
|
15
|
+
// Strip a leading entity name off a mutation field name, returning the
|
|
16
|
+
// residual verb. `issueCreate` -> `Create`; `createIssue` -> `create`.
|
|
17
|
+
function splitEntityVerb(fieldName, entity) {
|
|
18
|
+
const lowerField = fieldName.toLowerCase();
|
|
19
|
+
const lowerEnt = entity.toLowerCase();
|
|
20
|
+
if (lowerField.startsWith(lowerEnt)) {
|
|
21
|
+
return fieldName.slice(entity.length);
|
|
22
|
+
}
|
|
23
|
+
if (lowerField.endsWith(lowerEnt)) {
|
|
24
|
+
return fieldName.slice(0, fieldName.length - entity.length);
|
|
25
|
+
}
|
|
26
|
+
return fieldName;
|
|
27
|
+
}
|
|
28
|
+
// Does this field take a required id-ish argument?
|
|
29
|
+
//
|
|
30
|
+
// Any required id counts, not just a lone one: a command like
|
|
31
|
+
// `planetForbid(id: String!, forbid: Boolean!)` addresses an existing record
|
|
32
|
+
// just as much as `planetArchive(id: String!)` does. Requiring it to be the
|
|
33
|
+
// only required argument made an operation stop looking id-addressed the
|
|
34
|
+
// moment the API made a second argument mandatory, which flipped it from an
|
|
35
|
+
// update action to a create.
|
|
36
|
+
function idArg(args) {
|
|
37
|
+
return args.find((a) => a.reqd && /^(id|.*Id)$/i.test(a.name));
|
|
38
|
+
}
|
|
39
|
+
// Classify one root field. PURE: plain-JSON in, plain-JSON out, no schema
|
|
40
|
+
// objects, no closures, no I/O — so a shared TSV fixture can drive this in
|
|
41
|
+
// both TypeScript and Go.
|
|
42
|
+
function classifyGraphQLField(sig, profile) {
|
|
43
|
+
const why = [];
|
|
44
|
+
const ret = sig.ret;
|
|
45
|
+
if ('scalar' === ret.kind || 'other' === ret.kind) {
|
|
46
|
+
why.push('ret:' + ret.kind);
|
|
47
|
+
return { exclude: true, why };
|
|
48
|
+
}
|
|
49
|
+
// A payload that carries no entity (Linear's DeletePayload is just
|
|
50
|
+
// `entityId`) still belongs to the entity its field NAMES. Without this,
|
|
51
|
+
// every such delete mutation is dropped and the entity silently loses its
|
|
52
|
+
// remove op. Confined to payload returns: a query returning a scalar must
|
|
53
|
+
// not be rescued by its name.
|
|
54
|
+
const entity = ret.entity ??
|
|
55
|
+
('payload' === ret.kind ? sig.nameEntity : undefined);
|
|
56
|
+
if (null == entity) {
|
|
57
|
+
why.push('ret:' + ret.kind + ':no-entity');
|
|
58
|
+
return { exclude: true, why };
|
|
59
|
+
}
|
|
60
|
+
if (null == ret.entity) {
|
|
61
|
+
why.push('entity-by-name:' + entity);
|
|
62
|
+
}
|
|
63
|
+
const id = idArg(sig.args);
|
|
64
|
+
if ('query' === sig.optype) {
|
|
65
|
+
// Connection or list of the entity -> list.
|
|
66
|
+
if ('connection' === ret.kind || 'list' === ret.kind) {
|
|
67
|
+
why.push('query:' + ret.kind);
|
|
68
|
+
return { entity, op: 'list', optype: 'query', why };
|
|
69
|
+
}
|
|
70
|
+
// Single entity behind one required id -> load.
|
|
71
|
+
if ('entity' === ret.kind) {
|
|
72
|
+
if (null != id) {
|
|
73
|
+
why.push('query:entity:id=' + id.name);
|
|
74
|
+
return { entity, op: 'load', optype: 'query', why };
|
|
75
|
+
}
|
|
76
|
+
// No id argument: a singleton accessor (viewer, organization). Still a
|
|
77
|
+
// load — the op simply takes no id.
|
|
78
|
+
if (0 === sig.args.filter((a) => a.reqd).length) {
|
|
79
|
+
why.push('query:entity:singleton');
|
|
80
|
+
return { entity, op: 'load', optype: 'query', why };
|
|
81
|
+
}
|
|
82
|
+
why.push('query:entity:args');
|
|
83
|
+
return { entity, op: 'load', optype: 'query', why };
|
|
84
|
+
}
|
|
85
|
+
why.push('query:unmatched:' + ret.kind);
|
|
86
|
+
return { exclude: true, why };
|
|
87
|
+
}
|
|
88
|
+
// --- mutation ---
|
|
89
|
+
const verb = splitEntityVerb(sig.name, entity).replace(/^[_-]+/, '');
|
|
90
|
+
const input = sig.inputTypeName ?? '';
|
|
91
|
+
// create: <Entity>CreateInput, or a create-ish verb, and no id argument.
|
|
92
|
+
const createByInput = new RegExp('^' + entity + '(Create|Insert|New)Input$', 'i').test(input);
|
|
93
|
+
if (createByInput || (CREATE_RE.test(verb) && null == id)) {
|
|
94
|
+
why.push(createByInput ? 'mutation:input:' + input : 'mutation:verb:' + verb);
|
|
95
|
+
return { entity, op: 'create', optype: 'mutation', why };
|
|
96
|
+
}
|
|
97
|
+
// update: <Entity>UpdateInput, or an update-ish verb.
|
|
98
|
+
const updateByInput = new RegExp('^' + entity + '(Update|Edit|Patch|Set)Input$', 'i').test(input);
|
|
99
|
+
if (updateByInput || UPDATE_RE.test(verb)) {
|
|
100
|
+
why.push(updateByInput ? 'mutation:input:' + input : 'mutation:verb:' + verb);
|
|
101
|
+
return { entity, op: 'update', optype: 'mutation', why };
|
|
102
|
+
}
|
|
103
|
+
// remove: a delete-ish verb.
|
|
104
|
+
if (REMOVE_RE.test(verb)) {
|
|
105
|
+
why.push('mutation:verb:' + verb);
|
|
106
|
+
return { entity, op: 'remove', optype: 'mutation', why };
|
|
107
|
+
}
|
|
108
|
+
// Everything else on Mutation is a command: fold it onto a canonical op as
|
|
109
|
+
// an action, exactly as REST action paths are folded. Id-bearing commands
|
|
110
|
+
// ride update (they address an existing record); id-less ones ride create.
|
|
111
|
+
const action = (0, utility_1.canonize)((0, utility_1.normalizeFieldName)(verb || sig.name));
|
|
112
|
+
const host = null != id ? 'update' : 'create';
|
|
113
|
+
why.push('mutation:action:' + action + ':host=' + host +
|
|
114
|
+
(profile === 'none' ? '' : ':profile=' + profile));
|
|
115
|
+
return { entity, op: host, action, optype: 'mutation', why };
|
|
116
|
+
}
|
|
117
|
+
// Derive the return shape of a root field from the normalised type map.
|
|
118
|
+
// Separated from classification so the classifier stays plain-JSON pure.
|
|
119
|
+
function deriveRetShape(field, types) {
|
|
120
|
+
const named = types[field.type];
|
|
121
|
+
if (null == named) {
|
|
122
|
+
return { kind: 'scalar' };
|
|
123
|
+
}
|
|
124
|
+
if ('SCALAR' === named.kind || 'ENUM' === named.kind) {
|
|
125
|
+
return { kind: 'scalar' };
|
|
126
|
+
}
|
|
127
|
+
if ('OBJECT' !== named.kind && 'INTERFACE' !== named.kind) {
|
|
128
|
+
return { kind: 'other' };
|
|
129
|
+
}
|
|
130
|
+
// Relay connection: has pageInfo plus nodes and/or edges.
|
|
131
|
+
const fnames = Object.keys(named.fields);
|
|
132
|
+
if (fnames.includes('pageInfo') &&
|
|
133
|
+
(fnames.includes('nodes') || fnames.includes('edges'))) {
|
|
134
|
+
if (fnames.includes('nodes')) {
|
|
135
|
+
return {
|
|
136
|
+
kind: 'connection',
|
|
137
|
+
entity: named.fields.nodes.type,
|
|
138
|
+
nodes: 'nodes',
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
// Edges-only connection: the entity is the EDGE'S NODE type, not the
|
|
142
|
+
// edge wrapper. Taking IssueEdge here would spread a fragment declared
|
|
143
|
+
// on IssueEdge inside `edges { node { ... } }` (a validation error) and
|
|
144
|
+
// unwrap the response to edge wrappers instead of entities.
|
|
145
|
+
const edgeType = types[named.fields.edges.type];
|
|
146
|
+
const nodeType = edgeType?.fields?.node?.type;
|
|
147
|
+
if (null != nodeType) {
|
|
148
|
+
return { kind: 'connection', entity: nodeType, nodes: 'edges' };
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Mutation payload wrapper: <X>Payload holding the entity (plus success /
|
|
152
|
+
// lastSyncId style metadata).
|
|
153
|
+
if (/Payload$/.test(named.name)) {
|
|
154
|
+
// Candidates: single object-typed fields that are not machinery. LISTS
|
|
155
|
+
// are excluded — the widespread `errors: [UserError!]!` convention would
|
|
156
|
+
// otherwise win on sort order and make the payload's error collection the
|
|
157
|
+
// "entity", unwrapping errors instead of the record.
|
|
158
|
+
const candidates = fnames.filter((fname) => {
|
|
159
|
+
const f = named.fields[fname];
|
|
160
|
+
const ftype = types[f.type];
|
|
161
|
+
return null != ftype && 'OBJECT' === ftype.kind &&
|
|
162
|
+
!f.list && !MACHINERY_RE.test(ftype.name) &&
|
|
163
|
+
!/^(errors?|userErrors?)$/i.test(fname);
|
|
164
|
+
});
|
|
165
|
+
// Prefer the field whose name matches the payload's own entity prefix
|
|
166
|
+
// (IssuePayload -> issue), which is the convention every CRUD-regular
|
|
167
|
+
// GraphQL API follows; fall back to the single remaining candidate.
|
|
168
|
+
const prefix = named.name.replace(/Payload$/, '');
|
|
169
|
+
const byName = candidates.find((fname) => fname.toLowerCase() === prefix.toLowerCase() ||
|
|
170
|
+
types[named.fields[fname].type]?.name === prefix);
|
|
171
|
+
const chosen = byName ?? candidates[0];
|
|
172
|
+
if (null != chosen) {
|
|
173
|
+
return {
|
|
174
|
+
kind: 'payload',
|
|
175
|
+
entity: types[named.fields[chosen].type].name,
|
|
176
|
+
unwrap: chosen,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
return { kind: 'payload', deleteish: true };
|
|
180
|
+
}
|
|
181
|
+
if (MACHINERY_RE.test(named.name)) {
|
|
182
|
+
return { kind: 'other' };
|
|
183
|
+
}
|
|
184
|
+
// A list of the entity is a list op even without connection machinery.
|
|
185
|
+
if (field.list) {
|
|
186
|
+
return { kind: 'list', entity: named.name };
|
|
187
|
+
}
|
|
188
|
+
return { kind: 'entity', entity: named.name };
|
|
189
|
+
}
|
|
190
|
+
// Build the classifier signature for a root field.
|
|
191
|
+
function fieldSig(optype, field, types) {
|
|
192
|
+
// The input-object argument, if any, drives create/update detection.
|
|
193
|
+
let inputTypeName = undefined;
|
|
194
|
+
for (const arg of field.args) {
|
|
195
|
+
const at = types[arg.type];
|
|
196
|
+
if (null != at && 'INPUT_OBJECT' === at.kind) {
|
|
197
|
+
inputTypeName = at.name;
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
optype,
|
|
203
|
+
name: field.name,
|
|
204
|
+
args: field.args.map((a) => ({
|
|
205
|
+
name: a.name, gqltype: a.gqltype, reqd: a.reqd,
|
|
206
|
+
})),
|
|
207
|
+
ret: deriveRetShape(field, types),
|
|
208
|
+
inputTypeName,
|
|
209
|
+
nameEntity: nameEntityType(field.name, types),
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
// Verb suffixes a mutation field name may carry, longest first so
|
|
213
|
+
// `issueUnarchive` strips `Unarchive` rather than `Archive`.
|
|
214
|
+
const NAME_VERBS = [
|
|
215
|
+
'Unarchive', 'Archive', 'Delete', 'Remove', 'Destroy',
|
|
216
|
+
'Create', 'Update', 'Insert', 'Upsert',
|
|
217
|
+
];
|
|
218
|
+
// Resolve the entity a mutation NAMES, for payloads that do not carry one.
|
|
219
|
+
// Linear's DeletePayload holds `entityId: String!` and nothing else, so
|
|
220
|
+
// `commentDelete` has no entity in its return type — the field name is the
|
|
221
|
+
// only signal, and by convention it is a reliable one.
|
|
222
|
+
function nameEntityType(fieldName, types) {
|
|
223
|
+
for (const verb of NAME_VERBS) {
|
|
224
|
+
if (!fieldName.endsWith(verb)) {
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
const stem = fieldName.slice(0, fieldName.length - verb.length);
|
|
228
|
+
if ('' === stem) {
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
const candidate = stem.charAt(0).toUpperCase() + stem.slice(1);
|
|
232
|
+
const gtype = types[candidate];
|
|
233
|
+
if (null != gtype && 'OBJECT' === gtype.kind) {
|
|
234
|
+
return candidate;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return undefined;
|
|
238
|
+
}
|
|
239
|
+
// Entity model name from a GraphQL type name: Issue -> issue,
|
|
240
|
+
// WorkflowState -> workflow_state (canonize handles the casing rules that
|
|
241
|
+
// the REST path classifier already uses).
|
|
242
|
+
function entityName(typeName) {
|
|
243
|
+
return (0, utility_1.depluralize)((0, utility_1.canonize)((0, utility_1.normalizeFieldName)(typeName)));
|
|
244
|
+
}
|
|
245
|
+
function newGuidePath() {
|
|
246
|
+
return {
|
|
247
|
+
why_path: [],
|
|
248
|
+
action: {},
|
|
249
|
+
rename: { param: {} },
|
|
250
|
+
op: {},
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
// The GraphQL guide strategy.
|
|
254
|
+
async function graphql01(ctx) {
|
|
255
|
+
const def = ctx.def;
|
|
256
|
+
const profile = (ctx.opts.profile ?? 'none');
|
|
257
|
+
const guide = {
|
|
258
|
+
control: {},
|
|
259
|
+
entity: {},
|
|
260
|
+
metrics: {
|
|
261
|
+
count: {
|
|
262
|
+
path: 0,
|
|
263
|
+
field: 0,
|
|
264
|
+
method: 0,
|
|
265
|
+
tag: 0,
|
|
266
|
+
cmp: 0,
|
|
267
|
+
entity: 0,
|
|
268
|
+
origcmprefs: {},
|
|
269
|
+
},
|
|
270
|
+
found: {
|
|
271
|
+
tag: {},
|
|
272
|
+
cmp: {},
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
};
|
|
276
|
+
const types = def.types ?? {};
|
|
277
|
+
const roots = [
|
|
278
|
+
{ optype: 'query', fields: def.query ?? {} },
|
|
279
|
+
{ optype: 'mutation', fields: def.mutation ?? {} },
|
|
280
|
+
];
|
|
281
|
+
for (const root of roots) {
|
|
282
|
+
// Sorted iteration: byte-stable guide output.
|
|
283
|
+
for (const fname of Object.keys(root.fields).sort()) {
|
|
284
|
+
guide.metrics.count.field++;
|
|
285
|
+
const field = root.fields[fname];
|
|
286
|
+
const sig = fieldSig(root.optype, field, types);
|
|
287
|
+
const cls = classifyGraphQLField(sig, profile);
|
|
288
|
+
if (cls.exclude || null == cls.entity || null == cls.op) {
|
|
289
|
+
ctx.log.debug({
|
|
290
|
+
point: 'graphql-exclude',
|
|
291
|
+
field: fname,
|
|
292
|
+
note: cls.why.join(';'),
|
|
293
|
+
});
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
const entname = entityName(cls.entity);
|
|
297
|
+
const gent = guide.entity[entname] ?? {
|
|
298
|
+
name: entname,
|
|
299
|
+
orig: cls.entity,
|
|
300
|
+
field: {},
|
|
301
|
+
path: {},
|
|
302
|
+
};
|
|
303
|
+
guide.entity[entname] = gent;
|
|
304
|
+
const gfields = (gent.field = gent.field ?? {});
|
|
305
|
+
const gpath = gfields[fname] ?? newGuidePath();
|
|
306
|
+
gfields[fname] = gpath;
|
|
307
|
+
gpath.why_path.push(cls.why.join(';'));
|
|
308
|
+
if (null != cls.action) {
|
|
309
|
+
gpath.action[cls.action] = {
|
|
310
|
+
kind: 'graphql',
|
|
311
|
+
why_action: ['mutation:' + fname],
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
gpath.op[cls.op] = {
|
|
315
|
+
// GraphQL points synthesize POST; optype carries the real distinction.
|
|
316
|
+
method: 'POST',
|
|
317
|
+
optype: cls.optype,
|
|
318
|
+
why_op: cls.why.join(';'),
|
|
319
|
+
transform: { req: undefined, res: undefined },
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
guide.metrics.count.entity = Object.keys(guide.entity).length;
|
|
324
|
+
ctx.log.info({
|
|
325
|
+
point: 'graphql-guide',
|
|
326
|
+
note: `entities=${guide.metrics.count.entity} ` +
|
|
327
|
+
`fields=${guide.metrics.count.field}`,
|
|
328
|
+
});
|
|
329
|
+
return guide;
|
|
330
|
+
}
|
|
331
|
+
//# sourceMappingURL=graphql01.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql01.js","sourceRoot":"","sources":["../../src/guide/graphql01.ts"],"names":[],"mappings":"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"}
|
package/dist/guide/guide.js
CHANGED
|
@@ -9,6 +9,7 @@ const jostraca_1 = require("jostraca");
|
|
|
9
9
|
const aontu_1 = require("aontu");
|
|
10
10
|
const struct_1 = require("@voxgig/struct");
|
|
11
11
|
const heuristic01_1 = require("./heuristic01");
|
|
12
|
+
const graphql01_1 = require("./graphql01");
|
|
12
13
|
const utility_1 = require("../utility");
|
|
13
14
|
const KONSOLE_LOG = console['log'];
|
|
14
15
|
// Log non-fatal wierdness.
|
|
@@ -104,6 +105,9 @@ async function buildBaseGuide(ctx) {
|
|
|
104
105
|
if ('heuristic01' === ctx.opts.strategy) {
|
|
105
106
|
baseguide = await (0, heuristic01_1.heuristic01)(ctx);
|
|
106
107
|
}
|
|
108
|
+
else if ('graphql01' === ctx.opts.strategy) {
|
|
109
|
+
baseguide = await (0, graphql01_1.graphql01)(ctx);
|
|
110
|
+
}
|
|
107
111
|
else {
|
|
108
112
|
throw new Error('Unknown guide strategy: ' + ctx.opts.strategy);
|
|
109
113
|
}
|
|
@@ -130,17 +134,22 @@ async function buildBaseGuide(ctx) {
|
|
|
130
134
|
guideBlocks.push(` metrics: count: entity: ${metrics.count.entity}
|
|
131
135
|
metrics: count: path: ${metrics.count.path}
|
|
132
136
|
metrics: count: method: ${metrics.count.method}`);
|
|
137
|
+
// Root-field count is GraphQL-only; omit it for REST guides so their
|
|
138
|
+
// emitted base-guide files stay byte-identical.
|
|
139
|
+
if (0 < (metrics.count.field ?? 0)) {
|
|
140
|
+
guideBlocks.push(` metrics: count: field: ${metrics.count.field}`);
|
|
141
|
+
}
|
|
133
142
|
// NOTE: items(...) sorts the iteration elements, so the generated model code
|
|
134
143
|
// is deterministic.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
(0, utility_1.debugpath)(
|
|
143
|
-
guideBlocks.push(`
|
|
144
|
+
// Emit one guide entry. REST guides key entries by path, GraphQL guides by
|
|
145
|
+
// schema root field (`branch`); the body is otherwise identical, so both
|
|
146
|
+
// share this emitter. GraphQL ops carry `optype` ALONGSIDE `method: POST`,
|
|
147
|
+
// which keeps every downstream transform that reads gop.method working
|
|
148
|
+
// unchanged while recording the query/mutation distinction.
|
|
149
|
+
const emitEntry = (branch, entname, entity, entrykey, path) => {
|
|
150
|
+
{
|
|
151
|
+
(0, utility_1.debugpath)(entrykey, null, 'BASE-GUIDE', entname, entrykey, (0, utility_1.formatJSONIC)(path, { hsepd: 0, $: true, color: true }));
|
|
152
|
+
guideBlocks.push(` ${branch}: ${qs(entrykey)}: {` +
|
|
144
153
|
sw(0 < path.why_path.length ?
|
|
145
154
|
' # ent=' + entname + ';' +
|
|
146
155
|
(entity.orig !== entname && null != entity.orig ? 'orig=' + entity.orig + ';' : '') +
|
|
@@ -162,6 +171,9 @@ async function buildBaseGuide(ctx) {
|
|
|
162
171
|
(0, struct_1.items)(path.op).map(([opname, op]) => {
|
|
163
172
|
guideBlocks.push(` op: ${opname}: method: *${op.method}` +
|
|
164
173
|
sw(0 < op.why_op.length ? ' # ' + op.why_op : ''));
|
|
174
|
+
if (null != op.optype) {
|
|
175
|
+
guideBlocks.push(` op: ${opname}: optype: *${op.optype}`);
|
|
176
|
+
}
|
|
165
177
|
// Each transform is emitted only when set, and each on its own terms.
|
|
166
178
|
// (An earlier req-GUARDED block pushed a second res line built from
|
|
167
179
|
// op.transform.res — emitting `transform: res: *undefined` whenever a
|
|
@@ -187,7 +199,14 @@ async function buildBaseGuide(ctx) {
|
|
|
187
199
|
}
|
|
188
200
|
});
|
|
189
201
|
guideBlocks.push(` }`);
|
|
190
|
-
}
|
|
202
|
+
}
|
|
203
|
+
};
|
|
204
|
+
(0, struct_1.items)(baseguide.entity).map(([entname, entity]) => {
|
|
205
|
+
guideBlocks.push(`
|
|
206
|
+
entity: ${entname}: {`);
|
|
207
|
+
// NOTE: items(...) sorts the entries, so output is deterministic.
|
|
208
|
+
(0, struct_1.items)(entity.path).map(([pathstr, path]) => emitEntry('path', entname, entity, pathstr, path));
|
|
209
|
+
(0, struct_1.items)(entity.field).map(([fieldstr, path]) => emitEntry('field', entname, entity, fieldstr, path));
|
|
191
210
|
guideBlocks.push(` }`);
|
|
192
211
|
});
|
|
193
212
|
guideBlocks.push('', '}');
|
|
@@ -208,7 +227,48 @@ async function buildBaseGuide(ctx) {
|
|
|
208
227
|
}, root);
|
|
209
228
|
return jres;
|
|
210
229
|
}
|
|
230
|
+
// GraphQL coverage guard: every Query/Mutation root field must either be
|
|
231
|
+
// assigned to an entity op or be deliberately excluded by the classifier
|
|
232
|
+
// (machinery types, scalar returns). Mirrors the REST PATH MISMATCH check —
|
|
233
|
+
// silence about an unclassified field is how an API silently loses surface.
|
|
234
|
+
function validateGraphqlBaseGuide(ctx, baseguide) {
|
|
235
|
+
const covered = {};
|
|
236
|
+
(0, jostraca_1.each)(baseguide.entity, (entm) => {
|
|
237
|
+
(0, jostraca_1.each)(entm.field, (fieldm, fieldStr) => {
|
|
238
|
+
if (!(0, struct_1.isempty)(fieldm.op)) {
|
|
239
|
+
covered[fieldStr] = true;
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
const uncovered = [];
|
|
244
|
+
for (const roots of [ctx.def?.query, ctx.def?.mutation]) {
|
|
245
|
+
for (const fname of Object.keys(roots ?? {}).sort()) {
|
|
246
|
+
if (!covered[fname]) {
|
|
247
|
+
uncovered.push(fname);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// Unclassified root fields are expected (scalars like `version`, machinery
|
|
252
|
+
// returns), so this is a warning rather than a hard failure — but it is
|
|
253
|
+
// always reported, so a missed entity is visible.
|
|
254
|
+
if (0 < uncovered.length) {
|
|
255
|
+
ctx.warn({
|
|
256
|
+
note: `GraphQL root fields not mapped to an entity op: ` +
|
|
257
|
+
uncovered.join(', '),
|
|
258
|
+
uncovered,
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
ctx.log.info({
|
|
262
|
+
point: 'graphql-coverage',
|
|
263
|
+
note: `mapped=${Object.keys(covered).length} unmapped=${uncovered.length}`,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
211
266
|
function validateBaseBuide(ctx, baseguide) {
|
|
267
|
+
// GraphQL guides key entries by root field, not path: the path-based
|
|
268
|
+
// reconciliation below has nothing to compare.
|
|
269
|
+
if (true === ctx.def?.graphql) {
|
|
270
|
+
return validateGraphqlBaseGuide(ctx, baseguide);
|
|
271
|
+
}
|
|
212
272
|
const srcm = {};
|
|
213
273
|
// Each orig path.
|
|
214
274
|
(0, jostraca_1.each)(ctx.def.paths, (pdef) => {
|