@nxara/olio-codegen 0.0.0-stage → 0.1.0-rc.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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +238 -2
  3. package/dist/codegen.d.ts +10 -0
  4. package/dist/codegen.d.ts.map +1 -0
  5. package/dist/codegen.js +77 -0
  6. package/dist/codegen.js.map +1 -0
  7. package/dist/emit-application.d.ts +4 -0
  8. package/dist/emit-application.d.ts.map +1 -0
  9. package/dist/emit-application.js +66 -0
  10. package/dist/emit-application.js.map +1 -0
  11. package/dist/emit-client.d.ts +3 -0
  12. package/dist/emit-client.d.ts.map +1 -0
  13. package/dist/emit-client.js +287 -0
  14. package/dist/emit-client.js.map +1 -0
  15. package/dist/emit-type.d.ts +8 -0
  16. package/dist/emit-type.d.ts.map +1 -0
  17. package/dist/emit-type.js +38 -0
  18. package/dist/emit-type.js.map +1 -0
  19. package/dist/emit-wiring.d.ts +9 -0
  20. package/dist/emit-wiring.d.ts.map +1 -0
  21. package/dist/emit-wiring.js +65 -0
  22. package/dist/emit-wiring.js.map +1 -0
  23. package/dist/files.d.ts +4 -0
  24. package/dist/files.d.ts.map +1 -0
  25. package/dist/files.js +226 -0
  26. package/dist/files.js.map +1 -0
  27. package/dist/index.d.ts +4 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +2 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/log.d.ts +9 -0
  32. package/dist/log.d.ts.map +1 -0
  33. package/dist/log.js +15 -0
  34. package/dist/log.js.map +1 -0
  35. package/dist/scalars.d.ts +41 -0
  36. package/dist/scalars.d.ts.map +1 -0
  37. package/dist/scalars.js +2 -0
  38. package/dist/scalars.js.map +1 -0
  39. package/dist/type-map.d.ts +5 -0
  40. package/dist/type-map.d.ts.map +1 -0
  41. package/dist/type-map.js +16 -0
  42. package/dist/type-map.js.map +1 -0
  43. package/dist/types.d.ts +34 -0
  44. package/dist/types.d.ts.map +1 -0
  45. package/dist/types.js +16 -0
  46. package/dist/types.js.map +1 -0
  47. package/package.json +47 -4
@@ -0,0 +1,287 @@
1
+ import { isAbstractType, isEnumType, isListType, isNonNullType, isObjectType, isScalarType, Kind, print, typeFromAST, validate, visit } from "graphql";
2
+ import { BUILTIN_SCALARS, HEADER } from "./types.js";
3
+ const location = (error) => {
4
+ const at = error.locations?.[0];
5
+ const file = error.source?.name;
6
+ return at ? `${file ? `${file}:` : ""}${at.line}:${at.column}: ` : "";
7
+ };
8
+ const at = (node) => {
9
+ const token = node.loc?.startToken;
10
+ return token
11
+ ? `${node.loc?.source.name}:${token.line}:${token.column}: `
12
+ : "";
13
+ };
14
+ function takeTransports(definitions) {
15
+ const transports = new Map();
16
+ const stripped = definitions.map((definition) => {
17
+ if (definition.kind !== Kind.OPERATION_DEFINITION)
18
+ return definition;
19
+ const chosen = (definition.directives ?? []).filter((d) => d.name.value === "ws" || d.name.value === "sse");
20
+ for (const directive of chosen) {
21
+ if (definition.operation !== "subscription") {
22
+ throw new Error(`${at(directive)}@${directive.name.value} only applies to subscriptions: queries and mutations go over HTTP`);
23
+ }
24
+ if (directive.arguments?.length) {
25
+ throw new Error(`${at(directive)}@${directive.name.value} takes no arguments`);
26
+ }
27
+ }
28
+ if (chosen.length > 1) {
29
+ throw new Error(`${at(chosen[1])}A subscription takes one of @ws or @sse`);
30
+ }
31
+ const operation = {
32
+ ...definition,
33
+ directives: definition.directives?.filter((d) => !chosen.includes(d))
34
+ };
35
+ if (operation.operation === "subscription") {
36
+ transports.set(operation, (chosen[0]?.name.value ?? "ws"));
37
+ }
38
+ return operation;
39
+ });
40
+ return { definitions: stripped, transports };
41
+ }
42
+ const conditional = (directives = []) => directives.some((d) => d.name.value === "include" || d.name.value === "skip");
43
+ const lowerFirst = (word) => `${word[0]?.toLowerCase() ?? ""}${word.slice(1)}`;
44
+ const capitalize = (word) => `${word[0]?.toUpperCase() ?? ""}${word.slice(1)}`;
45
+ function applies(schema, condition, type) {
46
+ if (condition === undefined || condition === type.name)
47
+ return true;
48
+ const target = schema.getType(condition);
49
+ return isAbstractType(target) && schema.isSubType(target, type);
50
+ }
51
+ function collect(ctx, type, { set, optional }, fields) {
52
+ for (const selection of set.selections) {
53
+ const maybe = optional || conditional(selection.directives);
54
+ if (selection.kind === Kind.FIELD) {
55
+ const key = selection.alias?.value ?? selection.name.value;
56
+ fields.set(key, [
57
+ ...(fields.get(key) ?? []),
58
+ { node: selection, optional: maybe }
59
+ ]);
60
+ continue;
61
+ }
62
+ const fragment = selection.kind === Kind.INLINE_FRAGMENT
63
+ ? selection
64
+ : ctx.fragments.get(selection.name.value);
65
+ if (fragment &&
66
+ applies(ctx.schema, fragment.typeCondition?.name.value, type)) {
67
+ collect(ctx, type, { set: fragment.selectionSet, optional: maybe }, fields);
68
+ }
69
+ }
70
+ }
71
+ function objectShape(ctx, type, sets, indent) {
72
+ const fields = new Map();
73
+ for (const set of sets)
74
+ collect(ctx, type, set, fields);
75
+ const lines = [];
76
+ for (const [key, nodes] of fields) {
77
+ const name = nodes[0]?.node.name.value ?? key;
78
+ const optional = nodes.every((n) => n.optional) ? "?" : "";
79
+ if (name === "__typename") {
80
+ lines.push(`${key}${optional}: "${type.name}";`);
81
+ continue;
82
+ }
83
+ const field = type.getFields()[name];
84
+ if (!field)
85
+ continue;
86
+ const children = nodes.flatMap((n) => n.node.selectionSet ? [{ set: n.node.selectionSet, optional: false }] : []);
87
+ lines.push(`${key}${optional}: ${outputType(ctx, field.type, children, `${indent} `)};`);
88
+ }
89
+ return lines.length
90
+ ? `{\n${lines.map((l) => `${indent} ${l}`).join("\n")}\n${indent}}`
91
+ : "{}";
92
+ }
93
+ function compositeType(ctx, type, sets, indent) {
94
+ const members = isObjectType(type)
95
+ ? [type]
96
+ : [...ctx.schema.getPossibleTypes(type)].sort((a, b) => a.name.localeCompare(b.name));
97
+ const shapes = [
98
+ ...new Set(members.map((m) => objectShape(ctx, m, sets, indent)))
99
+ ];
100
+ return shapes.length > 1 ? `(${shapes.join(" | ")})` : (shapes[0] ?? "never");
101
+ }
102
+ function outputType(ctx, type, sets, indent, nullable = true) {
103
+ if (isNonNullType(type)) {
104
+ return outputType(ctx, type.ofType, sets, indent, false);
105
+ }
106
+ let base;
107
+ if (isListType(type)) {
108
+ base = `${outputType(ctx, type.ofType, sets, indent)}[]`;
109
+ }
110
+ else if (isScalarType(type)) {
111
+ base = `Scalar<"${type.name}">`;
112
+ }
113
+ else if (isEnumType(type)) {
114
+ ctx.enums.add(type);
115
+ base = type.name;
116
+ }
117
+ else {
118
+ base = compositeType(ctx, type, sets, indent);
119
+ }
120
+ return nullable ? `Maybe<${base}>` : base;
121
+ }
122
+ function inputType(ctx, type, nullable = true) {
123
+ if (isNonNullType(type))
124
+ return inputType(ctx, type.ofType, false);
125
+ let base;
126
+ if (isListType(type)) {
127
+ base = `${inputType(ctx, type.ofType)}[]`;
128
+ }
129
+ else if (isScalarType(type)) {
130
+ base = `Scalar<"${type.name}", "input">`;
131
+ }
132
+ else {
133
+ if (isEnumType(type))
134
+ ctx.enums.add(type);
135
+ else
136
+ ctx.inputs.add(type);
137
+ base = type.name;
138
+ }
139
+ return nullable ? `Maybe<${base}>` : base;
140
+ }
141
+ function usedFragments(ctx, node, seen = new Set()) {
142
+ visit(node, {
143
+ FragmentSpread(spread) {
144
+ const name = spread.name.value;
145
+ const fragment = ctx.fragments.get(name);
146
+ if (seen.has(name) || !fragment)
147
+ return;
148
+ seen.add(name);
149
+ usedFragments(ctx, fragment, seen);
150
+ }
151
+ });
152
+ return seen;
153
+ }
154
+ function typeName(operation) {
155
+ const name = operation.name?.value ?? "";
156
+ const suffix = capitalize(operation.operation);
157
+ return name.endsWith(suffix) ? name : `${name}${suffix}`;
158
+ }
159
+ function emitOperation(ctx, operation) {
160
+ const name = operation.name?.value;
161
+ if (!name) {
162
+ throw new Error(`${at(operation)}An operation needs a name: its types are named after it`);
163
+ }
164
+ const base = typeName(operation);
165
+ const transport = ctx.transports.get(operation);
166
+ const root = ctx.schema.getRootType(operation.operation);
167
+ const result = objectShape(ctx, root, [{ set: operation.selectionSet, optional: false }], "");
168
+ const variables = (operation.variableDefinitions ?? []).map((v) => {
169
+ const type = typeFromAST(ctx.schema, v.type);
170
+ const optional = !isNonNullType(type) || v.defaultValue !== undefined;
171
+ return ` ${v.variable.name.value}${optional ? "?" : ""}: ${inputType(ctx, type)};`;
172
+ });
173
+ const fragments = [...usedFragments(ctx, operation)]
174
+ .sort()
175
+ .map((f) => print(ctx.fragments.get(f)));
176
+ const query = [print(operation), ...fragments].join("\n\n");
177
+ return [
178
+ `export type ${base} = ${result};`,
179
+ `export type ${base}Variables = ${variables.length ? `{\n${variables.join("\n")}\n}` : "{}"};`,
180
+ `export const ${name}Document: TypedDocument<${base}, ${base}Variables, "${operation.operation}"> = {\n operation: "${operation.operation}",\n name: "${name}",\n query: ${JSON.stringify(query)}${transport ? `,\n transport: "${transport}"` : ""}\n};`
181
+ ].join("\n\n");
182
+ }
183
+ function emitInputs(ctx) {
184
+ const emitted = new Map();
185
+ for (let pending = [...ctx.inputs]; pending.length;) {
186
+ for (const type of pending) {
187
+ const fields = Object.values(type.getFields()).map((f) => {
188
+ const optional = !isNonNullType(f.type) || f.defaultValue !== undefined;
189
+ return ` ${f.name}${optional ? "?" : ""}: ${inputType(ctx, f.type)};`;
190
+ });
191
+ emitted.set(type.name, `export type ${type.name} = {\n${fields.join("\n")}\n};`);
192
+ }
193
+ pending = [...ctx.inputs].filter((t) => !emitted.has(t.name));
194
+ }
195
+ return [...emitted]
196
+ .sort(([a], [b]) => a.localeCompare(b))
197
+ .map(([, code]) => code);
198
+ }
199
+ export function emitClient(schema, documents) {
200
+ const { definitions, transports } = takeTransports(documents.flatMap((d) => d.definitions));
201
+ const document = { kind: Kind.DOCUMENT, definitions };
202
+ const errors = validate(schema, document);
203
+ if (errors.length) {
204
+ throw new Error(`Invalid operations:\n${errors.map((e) => ` ${location(e)}${e.message}`).join("\n")}`);
205
+ }
206
+ const fragments = new Map();
207
+ const operations = [];
208
+ for (const definition of document.definitions) {
209
+ if (definition.kind === Kind.FRAGMENT_DEFINITION) {
210
+ fragments.set(definition.name.value, definition);
211
+ }
212
+ else if (definition.kind === Kind.OPERATION_DEFINITION) {
213
+ operations.push(definition);
214
+ }
215
+ }
216
+ const ctx = {
217
+ schema,
218
+ transports,
219
+ fragments,
220
+ enums: new Set(),
221
+ inputs: new Set()
222
+ };
223
+ const typeNames = new Map();
224
+ const calls = new Map();
225
+ for (const operation of operations) {
226
+ const name = operation.name?.value;
227
+ if (!name)
228
+ continue;
229
+ const type = typeName(operation);
230
+ const other = typeNames.get(type);
231
+ if (other) {
232
+ throw new Error(`Operations "${other}" and "${name}" both name their result type ${type}; rename one`);
233
+ }
234
+ typeNames.set(type, name);
235
+ const call = `${operation.operation}.${lowerFirst(name)}`;
236
+ const clash = calls.get(call);
237
+ if (clash) {
238
+ throw new Error(`Operations "${clash}" and "${name}" are both client.${call}; rename one`);
239
+ }
240
+ calls.set(call, name);
241
+ }
242
+ const emitted = operations.map((o) => emitOperation(ctx, o));
243
+ const byRoot = new Map();
244
+ for (const operation of operations) {
245
+ const name = operation.name?.value ?? "";
246
+ const calls = byRoot.get(operation.operation) ?? [];
247
+ calls.push(` ${lowerFirst(name)}: ${name}Document`);
248
+ byRoot.set(operation.operation, calls);
249
+ }
250
+ const used = [...new Set(transports.values())].sort();
251
+ const map = [
252
+ ...[...byRoot].map(([root, calls]) => ` ${root}: {\n${calls.join(",\n")}\n }`),
253
+ ...(used.length
254
+ ? [` transports: [${used.map((kind) => `"${kind}"`).join(", ")}]`]
255
+ : [])
256
+ ].join(",\n");
257
+ const inputs = emitInputs(ctx);
258
+ const enums = [...ctx.enums]
259
+ .sort((a, b) => a.name.localeCompare(b.name))
260
+ .map((e) => `export type ${e.name} = ${e
261
+ .getValues()
262
+ .map((v) => `"${v.name}"`)
263
+ .join(" | ")};`);
264
+ const custom = Object.values(schema.getTypeMap())
265
+ .filter((t) => isScalarType(t) && !t.name.startsWith("__"))
266
+ .map((t) => t.name)
267
+ .filter((name) => !BUILTIN_SCALARS.has(name));
268
+ return `${[
269
+ HEADER,
270
+ 'import type { Scalar, TypedDocument } from "@nxara/olio-client";',
271
+ "type Maybe<T> = T | null;",
272
+ custom.length
273
+ ? [
274
+ `// Custom scalars (${custom.join(", ")}) are \`unknown\` unless registered in ClientScalars`,
275
+ "// (in a .ts file, or a .d.ts with an import or `export {}`):",
276
+ `// declare module "@nxara/olio-client" { interface ClientScalars { ${custom[0]}: string } }`
277
+ ].join("\n")
278
+ : "",
279
+ ...enums,
280
+ ...inputs,
281
+ ...emitted,
282
+ `/** For createClient(operations, { url }): \`client.mutation.login(variables)\`. */\nexport const operations = {\n${map}\n} as const;`
283
+ ]
284
+ .filter(Boolean)
285
+ .join("\n\n")}\n`;
286
+ }
287
+ //# sourceMappingURL=emit-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-client.js","sourceRoot":"","sources":["../src/emit-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { GraphQLEnumType, GraphQLInputObjectType, GraphQLInterfaceType, GraphQLObjectType, GraphQLUnionType } from "graphql";
2
+ export declare function region(name: string, declarations: readonly string[]): string;
3
+ export declare function emitEnum(type: GraphQLEnumType): string;
4
+ export declare function emitObject(type: GraphQLObjectType): string;
5
+ export declare function emitInterface(type: GraphQLInterfaceType): string;
6
+ export declare function emitInput(type: GraphQLInputObjectType): string;
7
+ export declare function emitUnion(type: GraphQLUnionType): string;
8
+ //# sourceMappingURL=emit-type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-type.d.ts","sourceRoot":"","sources":["../src/emit-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAIjB,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAK5E;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAStD;AAGD,wBAAgB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAQ1D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,CAKhE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,CAK9D;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAMxD"}
@@ -0,0 +1,38 @@
1
+ import { inputMember, typeToTS } from "./type-map.js";
2
+ export function region(name, declarations) {
3
+ const body = declarations.length
4
+ ? `\n\n${declarations.join("\n\n")}\n\n`
5
+ : "\n\n";
6
+ return `/* #region ${name} */${body}/* #endregion ${name} */`;
7
+ }
8
+ export function emitEnum(type) {
9
+ const values = type
10
+ .getValues()
11
+ .map((v) => ` ${v.name}: "${v.name}"`)
12
+ .join(",\n");
13
+ return (`export const ${type.name} = {\n${values}\n} as const;\n` +
14
+ `export type ${type.name} = ResolveEnum<"${type.name}", (typeof ${type.name})[keyof typeof ${type.name}]>;`);
15
+ }
16
+ export function emitObject(type) {
17
+ const lines = [
18
+ ` __typename?: "${type.name}";`,
19
+ ...Object.values(type.getFields()).map((f) => ` ${f.name}: ${typeToTS(f.type, "output")};`)
20
+ ];
21
+ return `export type ${type.name} = {\n${lines.join("\n")}\n};`;
22
+ }
23
+ export function emitInterface(type) {
24
+ const lines = Object.values(type.getFields()).map((f) => ` ${f.name}: ${typeToTS(f.type, "output")};`);
25
+ return `export type ${type.name} = {\n${lines.join("\n")}\n};`;
26
+ }
27
+ export function emitInput(type) {
28
+ const lines = Object.values(type.getFields()).map((f) => ` ${inputMember(f)};`);
29
+ return `export type ${type.name} = {\n${lines.join("\n")}\n};`;
30
+ }
31
+ export function emitUnion(type) {
32
+ const members = type
33
+ .getTypes()
34
+ .map((t) => t.name)
35
+ .join(" | ");
36
+ return `export type ${type.name} = ${members};`;
37
+ }
38
+ //# sourceMappingURL=emit-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-type.js","sourceRoot":"","sources":["../src/emit-type.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEtD,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,YAA+B;IAClE,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM;QAC9B,CAAC,CAAC,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM;QACxC,CAAC,CAAC,MAAM,CAAC;IACX,OAAO,cAAc,IAAI,MAAM,IAAI,iBAAiB,IAAI,KAAK,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAqB;IAC5C,MAAM,MAAM,GAAG,IAAI;SAChB,SAAS,EAAE;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC;SACtC,IAAI,CAAC,KAAK,CAAC,CAAC;IACf,OAAO,CACL,gBAAgB,IAAI,CAAC,IAAI,SAAS,MAAM,iBAAiB;QACzD,eAAe,IAAI,CAAC,IAAI,mBAAmB,IAAI,CAAC,IAAI,cAAc,IAAI,CAAC,IAAI,kBAAkB,IAAI,CAAC,IAAI,KAAK,CAC5G,CAAC;AACJ,CAAC;AAGD,MAAM,UAAU,UAAU,CAAC,IAAuB;IAChD,MAAM,KAAK,GAAG;QACZ,mBAAmB,IAAI,CAAC,IAAI,IAAI;QAChC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CACrD;KACF,CAAC;IACF,OAAO,eAAe,IAAI,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAA0B;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CACrD,CAAC;IACF,OAAO,eAAe,IAAI,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAA4B;IACpD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAC9B,CAAC;IACF,OAAO,eAAe,IAAI,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAsB;IAC9C,MAAM,OAAO,GAAG,IAAI;SACjB,QAAQ,EAAE;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,IAAI,CAAC,KAAK,CAAC,CAAC;IACf,OAAO,eAAe,IAAI,CAAC,IAAI,MAAM,OAAO,GAAG,CAAC;AAClD,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface WiredOwner {
2
+ id: string;
3
+ typeDefs: readonly string[];
4
+ resolvers: readonly string[];
5
+ enums: readonly string[];
6
+ }
7
+ export declare function emitWiring(output: string, owners: readonly WiredOwner[]): string;
8
+ export declare function emitList(output: string, kind: "modules" | "features", indexes: readonly string[]): string;
9
+ //# sourceMappingURL=emit-wiring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-wiring.d.ts","sourceRoot":"","sources":["../src/emit-wiring.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B;AAoBD,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,UAAU,EAAE,GAC5B,MAAM,CAkDR;AAGD,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,SAAS,GAAG,UAAU,EAC5B,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,MAAM,CAcR"}
@@ -0,0 +1,65 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { dirname, extname, relative, sep } from "node:path";
3
+ import { HEADER } from "./types.js";
4
+ const GRAPHQL = new Set([".gql", ".graphql"]);
5
+ function specifier(from, file) {
6
+ const path = relative(dirname(from), file).split(sep).join("/");
7
+ const withJs = path.replace(/\.(ts|mts|tsx)$/, ".js");
8
+ return withJs.startsWith(".") ? withJs : `./${withJs}`;
9
+ }
10
+ const label = (from, file) => specifier(from, file).replace(/\.js$/, extname(file));
11
+ const key = (id) => /^[A-Za-z_$][\w$]*$/.test(id) ? id : JSON.stringify(id);
12
+ export function emitWiring(output, owners) {
13
+ const imports = [];
14
+ const helpers = new Set();
15
+ const bind = (file, kind) => {
16
+ const name = `_${imports.length}`;
17
+ imports.push(kind === "namespace"
18
+ ? `import * as ${name} from "${specifier(output, file)}";`
19
+ : `import ${name} from "${specifier(output, file)}";`);
20
+ return name;
21
+ };
22
+ const files = (helper, list) => {
23
+ helpers.add(helper);
24
+ const entries = list.map((file) => ` ${JSON.stringify(label(output, file))}: ${bind(file, "namespace")}`);
25
+ return `${helper}({\n${entries.join(",\n")}\n })`;
26
+ };
27
+ const entries = owners.map((owner) => {
28
+ const parts = [];
29
+ if (owner.typeDefs.length > 0) {
30
+ const sources = owner.typeDefs.map((file) => GRAPHQL.has(extname(file))
31
+ ? JSON.stringify(readFileSync(file, "utf8"))
32
+ : bind(file, "default"));
33
+ parts.push(` typeDefs: [\n ${sources.join(",\n ")}\n ]`);
34
+ }
35
+ if (owner.resolvers.length > 0) {
36
+ parts.push(` resolvers: ${files("mergeResolvers", owner.resolvers)}`);
37
+ }
38
+ if (owner.enums.length > 0) {
39
+ parts.push(` enums: ${files("mergeEnums", owner.enums)}`);
40
+ }
41
+ return `${key(owner.id)}: {\n${parts.join(",\n")}\n}`.replace(/^/gm, " ");
42
+ });
43
+ return `${[
44
+ HEADER,
45
+ helpers.size > 0
46
+ ? `import { ${[...helpers].sort().join(", ")} } from "@nxara/olio-tools";`
47
+ : "",
48
+ imports.join("\n"),
49
+ `/** Each module's and feature's parts, for its index file: \`module.users({ ...wiring.users, middleware })\`. */\nexport const wiring = {\n${entries.join(",\n")}\n};`
50
+ ]
51
+ .filter(Boolean)
52
+ .join("\n\n")}\n`;
53
+ }
54
+ export function emitList(output, kind, indexes) {
55
+ const helper = kind === "modules" ? "pickModules" : "pickFeatures";
56
+ const imports = indexes.map((file, i) => `import * as _${i} from "${specifier(output, file)}";`);
57
+ const entries = indexes.map((file, i) => ` ${JSON.stringify(label(output, file))}: _${i}`);
58
+ return `${[
59
+ HEADER,
60
+ `import { ${helper} } from "@nxara/olio-tools";`,
61
+ imports.join("\n"),
62
+ `export const ${kind} = ${helper}({\n${entries.join(",\n")}\n});`
63
+ ].join("\n\n")}\n`;
64
+ }
65
+ //# sourceMappingURL=emit-wiring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-wiring.js","sourceRoot":"","sources":["../src/emit-wiring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type ClientCodegenOptions, type CodegenOptions } from "./types.js";
2
+ export declare function codegen(options: CodegenOptions): Promise<void>;
3
+ export declare function codegenClient(options: ClientCodegenOptions): Promise<void>;
4
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAyBA,OAAO,EAEL,KAAK,oBAAoB,EAEzB,KAAK,cAAc,EACpB,MAAM,YAAY,CAAC;AAkLpB,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAgFpE;AA4CD,wBAAsB,aAAa,CACjC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkCf"}