@atcute/lex-cli 1.1.2 → 2.0.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/generator.js DELETED
@@ -1,579 +0,0 @@
1
- import { readFile } from 'node:fs/promises';
2
- import { documentSchema, } from './schema.js';
3
- const toUpperCache = Object.create(null);
4
- const toNamespaceCache = Object.create(null);
5
- const toUpper = (s) => {
6
- return (toUpperCache[s] ??= s[0].toUpperCase() + s.slice(1));
7
- };
8
- const toNamespace = (s) => {
9
- return (toNamespaceCache[s] ??= s.replace(/^\w|[\.\-]\w/g, (m) => m[m.length === 1 ? 0 : 1].toUpperCase()));
10
- };
11
- const sortName = (() => {
12
- const collator = new Intl.Collator('en-US');
13
- return (a, b) => collator.compare(a, b);
14
- })();
15
- const sortDefinition = (a, b) => {
16
- const aIsMain = a === 'main';
17
- const bIsMain = b === 'main';
18
- if (aIsMain === bIsMain) {
19
- return sortName(a, b);
20
- }
21
- return +bIsMain - +aIsMain;
22
- };
23
- const writeJsdoc = (descriptions) => {
24
- const len = descriptions.length;
25
- if (len === 0) {
26
- return '';
27
- }
28
- if (len === 1) {
29
- return `\n/** ${descriptions[0]} */\n`;
30
- }
31
- let jsdoc = '\n/**';
32
- for (let idx = 0; idx < len; idx++) {
33
- const suffix = idx !== len - 1 && descriptions[idx + 1][0] !== '@';
34
- jsdoc += `\n * ${descriptions[idx]}${suffix ? ` \\` : ''}`;
35
- }
36
- jsdoc += `\n */\n`;
37
- return jsdoc;
38
- };
39
- const resolveType = (nsid, def) => {
40
- const type = def.type;
41
- /** @type {string[]} */
42
- let descs = [];
43
- let val = 'unknown';
44
- if (def.description) {
45
- descs.push(def.description);
46
- if (def.description.toLowerCase().startsWith('deprecated')) {
47
- descs.push(`@deprecated`);
48
- }
49
- }
50
- if (type === 'unknown') {
51
- val = 'unknown';
52
- }
53
- else if (type === 'cid-link') {
54
- val = 'At.CidLink';
55
- }
56
- else if (type === 'integer') {
57
- val = 'number';
58
- if (def.minimum !== undefined) {
59
- descs.push(`Minimum: ${def.minimum}`);
60
- }
61
- if (def.maximum !== undefined) {
62
- descs.push(`Maximum: ${def.maximum}`);
63
- }
64
- if (def.default !== undefined) {
65
- descs.push(`@default ${def.default}`);
66
- }
67
- }
68
- else if (type === 'boolean') {
69
- val = 'boolean';
70
- if (def.default !== undefined) {
71
- descs.push(`@default ${def.default}`);
72
- }
73
- }
74
- else if (type === 'string') {
75
- const enums = def.enum;
76
- const known = def.knownValues;
77
- const format = def.format;
78
- if (format !== undefined) {
79
- switch (format) {
80
- case 'did': {
81
- val = 'At.Did';
82
- break;
83
- }
84
- case 'cid': {
85
- val = 'At.Cid';
86
- break;
87
- }
88
- case 'handle': {
89
- val = 'At.Handle';
90
- break;
91
- }
92
- case 'at-identifier': {
93
- val = 'At.Identifier';
94
- break;
95
- }
96
- case 'nsid': {
97
- val = 'At.Nsid';
98
- break;
99
- }
100
- case 'record-key': {
101
- val = 'At.RecordKey';
102
- break;
103
- }
104
- case 'tid': {
105
- val = 'At.Tid';
106
- break;
107
- }
108
- case 'at-uri': {
109
- val = 'At.ResourceUri';
110
- break;
111
- }
112
- case 'uri': {
113
- val = 'At.GenericUri';
114
- break;
115
- }
116
- case 'datetime':
117
- case 'language': {
118
- // deliberately ignored
119
- val = 'string';
120
- break;
121
- }
122
- default: {
123
- console.warn(`${nsid}: unknown format ${format}`);
124
- val = 'string';
125
- }
126
- }
127
- }
128
- else {
129
- if (def.minLength !== undefined) {
130
- descs.push(`Minimum string length: ${def.minLength}`);
131
- }
132
- if (def.maxLength !== undefined) {
133
- descs.push(`Maximum string length: ${def.maxLength}`);
134
- }
135
- if (def.maxGraphemes !== undefined) {
136
- descs.push(`Maximum grapheme length: ${def.maxGraphemes}`);
137
- }
138
- if (def.default !== undefined) {
139
- descs.push(`@default ${JSON.stringify(def.default)}`);
140
- }
141
- if (enums) {
142
- val = enums.map((val) => JSON.stringify(val)).join('|');
143
- }
144
- else if (known) {
145
- val = `${known
146
- .toSorted(sortName)
147
- .map((val) => JSON.stringify(val))
148
- .join('|')} | (string & {})`;
149
- }
150
- else {
151
- val = 'string';
152
- }
153
- }
154
- }
155
- else if (type === 'array') {
156
- const { value, descriptions } = resolveType(`${nsid}/0`, def.items);
157
- if (def.minLength !== undefined) {
158
- descs.push(`Minimum array length: ${def.minLength}`);
159
- }
160
- if (def.maxLength !== undefined) {
161
- descs.push(`Maximum array length: ${def.maxLength}`);
162
- }
163
- val = `(${value})[]`;
164
- descs = descs.concat(descriptions);
165
- }
166
- else if (type === 'blob') {
167
- // const accept = def.accept?.map((mime) => `\`${mime.replaceAll('*', '${string}')}\``);
168
- // val = `At.Blob${accept ? `<${accept.join('|')}>` : ''}`;
169
- val = `At.Blob`;
170
- }
171
- else if (type === 'ref') {
172
- const [ns, ref] = def.ref.split('#');
173
- val = (ns ? toNamespace(ns) + '.' : '') + (ref ? toUpper(ref) : 'Main');
174
- }
175
- else if (type === 'union') {
176
- const refs = def.refs.toSorted(sortName).map((raw) => {
177
- const [ns, ref] = raw.split('#');
178
- return (ns ? toNamespace(ns) + '.' : '') + (ref ? toUpper(ref) : 'Main');
179
- });
180
- if (refs.length !== 0) {
181
- val = `Brand.Union<${refs.join('|')}>`;
182
- }
183
- else {
184
- val = `unknown`;
185
- }
186
- }
187
- else if (type === 'object' || type === 'params') {
188
- const required = def.required;
189
- const nullable = type === 'object' ? def.nullable : [];
190
- const properties = def.properties;
191
- const propKeys = Object.keys(properties).sort((a, b) => {
192
- const aIsOptional = !required || !required.includes(a);
193
- const bIsOptional = !required || !required.includes(b);
194
- if (aIsOptional === bIsOptional) {
195
- return sortName(a, b);
196
- }
197
- return +aIsOptional - +bIsOptional;
198
- });
199
- let chunk = '{';
200
- for (const prop of propKeys) {
201
- const isOptional = !required || !required.includes(prop);
202
- const isNullable = nullable !== undefined && nullable.includes(prop);
203
- const { value, descriptions } = resolveType(`${nsid}/${prop}`, properties[prop]);
204
- chunk += writeJsdoc(descriptions);
205
- chunk += `${prop}${isOptional ? `?` : ``}:${value}${isNullable ? `| null` : ``};`;
206
- }
207
- chunk += '}';
208
- val = chunk;
209
- }
210
- else if (type === 'bytes') {
211
- val = `At.Bytes`;
212
- }
213
- else {
214
- console.log(`${nsid}: unknown type ${type}`);
215
- }
216
- return { value: val, descriptions: descs };
217
- };
218
- const mainPrelude = `type ObjectOmit<T, K extends keyof any> = Omit<T, K>;
219
-
220
- /** handles type branding in objects */
221
- export declare namespace Brand {
222
- /** Symbol used to brand objects, this does not actually exist in runtime */
223
- const Type: unique symbol;
224
-
225
- /** Get the intended \`$type\` field */
226
- type GetType<T extends { [Type]?: string }> = NonNullable<T[typeof Type]>;
227
-
228
- /** Creates a union of objects where it's discriminated by \`$type\` field. */
229
- type Union<T extends { [Type]?: string }> = T extends any ? T & { $type: GetType<T> } : never;
230
-
231
- /** Omits the type branding from object */
232
- type Omit<T extends { [Type]?: string }> = ObjectOmit<T, typeof Type>;
233
- }
234
-
235
- /** base AT Protocol schema types */
236
- export declare namespace At {
237
- /**
238
- * represents a Content Identifier (CID) string
239
- */
240
- type Cid = string;
241
-
242
- /**
243
- * represents a Decentralized Identifier (DID).
244
- */
245
- type Did<Method extends string = string> = \`did:\${Method}:\${string}\`;
246
-
247
- /**
248
- * represents an account's handle, using domains as a human-friendly
249
- * identifier.
250
- */
251
- type Handle = \`\${string}.\${string}\`;
252
-
253
- /**
254
- * represents an account's identifier, either a {@link Did} or a
255
- * {@link Handle}
256
- */
257
- type Identifier = Did | Handle;
258
-
259
- /**
260
- * represents a Namespace Identifier (NSID)
261
- */
262
- type Nsid = \`\${string}.\${string}.\${string}\`;
263
-
264
- /**
265
- * represents the unique key identifying a specific record within a
266
- * repository's collection. this is usually a {@link Tid}.
267
- */
268
- type RecordKey = string;
269
-
270
- /**
271
- * represents a Timestamp Identifier (TID)
272
- */
273
- type Tid = string;
274
-
275
- /**
276
- * represents a general AT Protocol URI, representing either an entire
277
- * repository, a specific collection within a repository, or a record.
278
- *
279
- * it allows using handles over DIDs, but this means that it won't be stable.
280
- */
281
- type ResourceUri = \`at://\${Identifier}\` | \`at://\${Identifier}/\${Nsid}\` | \`at://\${Identifier}/\${Nsid}/\${RecordKey}\`;
282
-
283
- /**
284
- * represents a canonical AT Protocol URI for a specific record.
285
- *
286
- * this URI format uses the account's DID as the authority, ensuring that
287
- * the URI remains valid even as the account changes handles, uniquely
288
- * identifying a specific piece of record within AT Protocol.
289
- */
290
- type CanonicalResourceUri = \`at://\${Did}/\${Nsid}/\${RecordKey}\`;
291
-
292
- /**
293
- * represents a generic URI
294
- */
295
- type GenericUri = \`\${string}:\${string}\`;
296
-
297
- /**
298
- * represents a Content Identifier (CID) reference
299
- */
300
- interface CidLink {
301
- $link: Cid;
302
- }
303
-
304
- /**
305
- * represents an object containing raw binary data encoded as a base64 string
306
- */
307
- interface Bytes {
308
- $bytes: string;
309
- }
310
-
311
- /**
312
- * represents a reference to a data blob
313
- */
314
- interface Blob<T extends string = string> {
315
- $type: 'blob';
316
- mimeType: T;
317
- ref: {
318
- $link: string;
319
- };
320
- size: number;
321
- }
322
- }`;
323
- export const generateDefinitions = async (opts) => {
324
- const { files, main, banner, description } = opts;
325
- let queries = '';
326
- let procedures = '';
327
- let records = '';
328
- let code = `/* eslint-disable */
329
- // This file is automatically generated, do not edit!`;
330
- if (description) {
331
- code += `\n\n/**
332
- * @module
333
- * ${description}
334
- */`;
335
- }
336
- if (main) {
337
- code += `\n\n${banner ?? ''}\n${mainPrelude}`;
338
- }
339
- else {
340
- code += `\n\nimport "@atcute/client/lexicons";${banner ?? ''}
341
-
342
- declare module "@atcute/client/lexicons" {`;
343
- }
344
- for await (const filename of files.sort(sortName)) {
345
- let document;
346
- try {
347
- const jsonString = await readFile(filename, 'utf8');
348
- document = documentSchema.parse(JSON.parse(jsonString), { mode: 'passthrough' });
349
- }
350
- catch (err) {
351
- throw new Error(`failed to read ${filename}`, { cause: err });
352
- }
353
- const ns = document.id;
354
- const tsNamespace = toNamespace(ns);
355
- const descs = [];
356
- let chunk = '';
357
- const definitions = document.defs;
358
- const keys = Object.keys(definitions).sort(sortDefinition);
359
- for (const key of keys) {
360
- const def = definitions[key];
361
- const type = def.type;
362
- const nsid = `${ns}${key !== 'main' ? `#${key}` : ''}`;
363
- const typeName = key[0].toUpperCase() + key.slice(1);
364
- if (type === 'string') {
365
- const { value, descriptions } = resolveType(nsid, def);
366
- chunk += writeJsdoc(descriptions);
367
- chunk += `type ${typeName} = ${value};`;
368
- }
369
- else if (type === 'token') {
370
- chunk += `type ${typeName} = '${nsid}';`;
371
- }
372
- else if (type === 'object') {
373
- const required = def.required;
374
- const nullable = def.nullable;
375
- const properties = def.properties;
376
- const propKeys = Object.keys(properties).sort((a, b) => {
377
- const aIsOptional = !required || !required.includes(a);
378
- const bIsOptional = !required || !required.includes(b);
379
- if (aIsOptional === bIsOptional) {
380
- return sortName(a, b);
381
- }
382
- return +aIsOptional - +bIsOptional;
383
- });
384
- const descs = [];
385
- if (def.description) {
386
- descs.push(def.description);
387
- if (def.description.toLowerCase().startsWith('deprecated')) {
388
- descs.push(`@deprecated`);
389
- }
390
- }
391
- chunk += writeJsdoc(descs);
392
- chunk += `interface ${typeName} {`;
393
- chunk += `[Brand.Type]?: '${nsid}';`;
394
- for (const prop of propKeys) {
395
- const isOptional = !required || !required.includes(prop);
396
- const isNullable = nullable !== undefined && nullable.includes(prop);
397
- const { value, descriptions } = resolveType(`${nsid}/${prop}`, properties[prop]);
398
- chunk += writeJsdoc(descriptions);
399
- chunk += `${prop}${isOptional ? `?` : ``}:${value}${isNullable ? `| null` : ``};`;
400
- }
401
- chunk += '}';
402
- }
403
- else if (type === 'array') {
404
- const { value, descriptions } = resolveType(nsid, def.items);
405
- const descs = [];
406
- if (def.maxLength !== undefined) {
407
- descs.push(`Maximum array length: ${def.maxLength}`);
408
- }
409
- if (def.minLength !== undefined) {
410
- descs.push(`Minimum array length: ${def.minLength}`);
411
- }
412
- chunk += writeJsdoc(descs.concat(descriptions));
413
- chunk += `type ${typeName} = (${value})[];`;
414
- }
415
- else if (type === 'record') {
416
- const obj = def.record;
417
- const required = obj.required;
418
- const nullable = obj.nullable;
419
- const properties = obj.properties;
420
- const propKeys = Object.keys(properties).sort((a, b) => {
421
- const aIsOptional = !required || !required.includes(a);
422
- const bIsOptional = !required || !required.includes(b);
423
- if (aIsOptional === bIsOptional) {
424
- return sortName(a, b);
425
- }
426
- return +aIsOptional - +bIsOptional;
427
- });
428
- const descs = [];
429
- if (def.description) {
430
- descs.push(def.description);
431
- if (def.description.toLowerCase().startsWith('deprecated')) {
432
- descs.push(`@deprecated`);
433
- }
434
- }
435
- chunk += writeJsdoc(descs);
436
- chunk += `interface Record {`;
437
- chunk += `$type: '${nsid}';`;
438
- for (const prop of propKeys) {
439
- const isOptional = !required || !required.includes(prop);
440
- const isNullable = nullable !== undefined && nullable.includes(prop);
441
- const { value, descriptions } = resolveType(`${nsid}/${prop}`, properties[prop]);
442
- chunk += writeJsdoc(descriptions);
443
- chunk += `${prop}${isOptional ? `?` : ``}:${value}${isNullable ? `| null` : ``};`;
444
- }
445
- chunk += '}';
446
- records += `\n'${nsid}': ${tsNamespace}.Record;`;
447
- }
448
- else if (type === 'query' || type === 'procedure') {
449
- let parameters = def.parameters;
450
- const input = type === 'procedure' ? def.input : undefined;
451
- const output = def.output;
452
- const errors = def.errors;
453
- if (def.description) {
454
- descs.push(def.description);
455
- if (def.description.toLowerCase().startsWith('deprecated')) {
456
- descs.push(`@deprecated`);
457
- }
458
- }
459
- if (parameters) {
460
- if (Object.values(parameters.properties).length === 0) {
461
- parameters = undefined;
462
- }
463
- else {
464
- const { value, descriptions } = resolveType(nsid, parameters);
465
- chunk += writeJsdoc(descriptions);
466
- chunk += `interface Params ${value}`;
467
- }
468
- }
469
- else {
470
- chunk += `interface Params {}`;
471
- }
472
- if (input) {
473
- if (input.encoding === 'application/json') {
474
- const { value, descriptions } = resolveType(nsid, input.schema);
475
- chunk += writeJsdoc(descriptions);
476
- if (input.schema.type === 'object') {
477
- chunk += `interface Input ${value}`;
478
- }
479
- else {
480
- chunk += `type Input = ${value};`;
481
- }
482
- }
483
- else {
484
- chunk += `type Input = Blob | BufferSource | ReadableStream;`;
485
- }
486
- }
487
- else {
488
- chunk += `type Input = undefined;`;
489
- }
490
- if (output) {
491
- if (output.encoding === 'application/json') {
492
- const { value, descriptions } = resolveType(nsid, output.schema);
493
- chunk += writeJsdoc(descriptions);
494
- if (output.schema.type === 'object') {
495
- chunk += `interface Output ${value}`;
496
- }
497
- else {
498
- chunk += `type Output = ${value};`;
499
- }
500
- }
501
- else {
502
- chunk += `type Output = Uint8Array;`;
503
- }
504
- }
505
- else {
506
- chunk += `type Output = undefined;`;
507
- }
508
- if (errors) {
509
- chunk += `interface Errors {`;
510
- for (const error of errors) {
511
- chunk += `${error.name}: {};`;
512
- }
513
- chunk += '}';
514
- }
515
- {
516
- let rc = `'${ns}':{\n`;
517
- if (parameters) {
518
- rc += `params: ${tsNamespace}.Params;`;
519
- }
520
- if (input) {
521
- rc += `input: ${tsNamespace}.Input;`;
522
- }
523
- if (output) {
524
- rc += `\n/** @deprecated */\n`;
525
- rc += `output: ${tsNamespace}.Output;`;
526
- if (output.encoding === 'application/json') {
527
- rc += `response: { json: ${tsNamespace}.Output };`;
528
- }
529
- else {
530
- rc += `response: {};`;
531
- }
532
- }
533
- rc += '};';
534
- if (type === 'query') {
535
- queries += rc;
536
- }
537
- else if (type === 'procedure') {
538
- procedures += rc;
539
- }
540
- }
541
- }
542
- else if (type === 'blob') {
543
- const { value, descriptions } = resolveType(nsid, def);
544
- chunk += writeJsdoc(descriptions);
545
- chunk += `type ${typeName} = ${value};`;
546
- }
547
- else if (type === 'bytes') {
548
- const { value, descriptions } = resolveType(nsid, def);
549
- chunk += writeJsdoc(descriptions);
550
- chunk += `type ${typeName} = ${value};`;
551
- }
552
- else {
553
- console.log(`${nsid}: unhandled type ${type}`);
554
- }
555
- }
556
- code += writeJsdoc(descs);
557
- if (main) {
558
- code += `export declare namespace ${tsNamespace} {`;
559
- }
560
- else {
561
- code += `namespace ${tsNamespace} {`;
562
- }
563
- code += chunk;
564
- code += `}\n\n`;
565
- }
566
- if (main) {
567
- code += `export declare interface Records {${records}}\n\n`;
568
- code += `export declare interface Queries {${queries}}\n\n`;
569
- code += `export declare interface Procedures {${procedures}}\n\n`;
570
- }
571
- else {
572
- code += `interface Records {${records}}\n\n`;
573
- code += `interface Queries {${queries}}\n\n`;
574
- code += `interface Procedures {${procedures}}\n\n`;
575
- code += '}';
576
- }
577
- return code;
578
- };
579
- //# sourceMappingURL=generator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../src/generator.ts"],"names":[],"mappings":"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"}