@voxgig/apidef 6.5.1 → 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.
Files changed (52) hide show
  1. package/dist/apidef.js +39 -2
  2. package/dist/apidef.js.map +1 -1
  3. package/dist/guide/graphql01.d.ts +39 -0
  4. package/dist/guide/graphql01.js +331 -0
  5. package/dist/guide/graphql01.js.map +1 -0
  6. package/dist/guide/guide.js +70 -10
  7. package/dist/guide/guide.js.map +1 -1
  8. package/dist/guide/heuristic01.js +1 -0
  9. package/dist/guide/heuristic01.js.map +1 -1
  10. package/dist/model.d.ts +22 -1
  11. package/dist/parse/graphql.d.ts +46 -0
  12. package/dist/parse/graphql.js +205 -0
  13. package/dist/parse/graphql.js.map +1 -0
  14. package/dist/parse.js +19 -0
  15. package/dist/parse.js.map +1 -1
  16. package/dist/transform/args.js +49 -4
  17. package/dist/transform/args.js.map +1 -1
  18. package/dist/transform/entity.js +51 -3
  19. package/dist/transform/entity.js.map +1 -1
  20. package/dist/transform/field.js +71 -1
  21. package/dist/transform/field.js.map +1 -1
  22. package/dist/transform/graphql.d.ts +6 -0
  23. package/dist/transform/graphql.js +227 -0
  24. package/dist/transform/graphql.js.map +1 -0
  25. package/dist/transform/select.js +17 -2
  26. package/dist/transform/select.js.map +1 -1
  27. package/dist/transform/top.js +31 -2
  28. package/dist/transform/top.js.map +1 -1
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/dist/types.d.ts +16 -1
  31. package/dist/types.js.map +1 -1
  32. package/dist/utility.d.ts +2 -1
  33. package/dist/utility.js +52 -4
  34. package/dist/utility.js.map +1 -1
  35. package/model/apidef.aontu +23 -0
  36. package/model/guide.aontu +22 -0
  37. package/package.json +9 -2
  38. package/src/apidef.ts +44 -2
  39. package/src/guide/graphql01.ts +516 -0
  40. package/src/guide/guide.ts +90 -12
  41. package/src/guide/heuristic01.ts +1 -0
  42. package/src/model.ts +46 -1
  43. package/src/parse/graphql.ts +302 -0
  44. package/src/parse.ts +23 -0
  45. package/src/transform/args.ts +54 -5
  46. package/src/transform/entity.ts +63 -3
  47. package/src/transform/field.ts +89 -2
  48. package/src/transform/graphql.ts +311 -0
  49. package/src/transform/select.ts +19 -2
  50. package/src/transform/top.ts +31 -2
  51. package/src/types.ts +40 -0
  52. 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
- opts.strategy = opts.strategy || 'heuristic01';
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)('OpenAPI', defsrc, { file: defpath });
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
  });
@@ -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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"}
@@ -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
- (0, struct_1.items)(baseguide.entity).map(([entname, entity]) => {
136
- guideBlocks.push(`
137
- entity: ${entname}: {`
138
- // sw(0 < entity.why_name.length ? ' # name:' + entity.why_name.join(';') : '')
139
- );
140
- // NOTE: items(...) sorts the paths
141
- (0, struct_1.items)(entity.path).map(([pathstr, path]) => {
142
- (0, utility_1.debugpath)(pathstr, null, 'BASE-GUIDE', entname, pathstr, (0, utility_1.formatJSONIC)(path, { hsepd: 0, $: true, color: true }));
143
- guideBlocks.push(` path: ${qs(pathstr)}: {` +
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) => {