@atproto/lex-cli 0.10.2 → 0.10.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/codegen/server.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n IndentationText,\n Project,\n SourceFile,\n VariableDeclarationKind,\n} from 'ts-morph'\nimport { type LexiconDoc, Lexicons } from '@atproto/lexicon'\nimport { NSID } from '@atproto/syntax'\nimport { type GeneratedAPI } from '../types.js'\nimport { gen, lexiconsTs, utilTs } from './common.js'\nimport {\n genCommonImports,\n genImports,\n genRecord,\n genUserType,\n genXrpcInput,\n genXrpcOutput,\n genXrpcParams,\n} from './lex-gen.js'\nimport {\n type DefTreeNode,\n lexiconsToDefTree,\n schemasToNsidTokens,\n toCamelCase,\n toScreamingSnakeCase,\n toTitleCase,\n} from './util.js'\n\nexport async function genServerApi(\n lexiconDocs: LexiconDoc[],\n): Promise<GeneratedAPI> {\n const project = new Project({\n useInMemoryFileSystem: true,\n manipulationSettings: { indentationText: IndentationText.TwoSpaces },\n })\n const api: GeneratedAPI = { files: [] }\n const lexicons = new Lexicons(lexiconDocs)\n const nsidTree = lexiconsToDefTree(lexiconDocs)\n const nsidTokens = schemasToNsidTokens(lexiconDocs)\n for (const lexiconDoc of lexiconDocs) {\n api.files.push(await lexiconTs(project, lexicons, lexiconDoc))\n }\n api.files.push(await utilTs(project))\n api.files.push(await lexiconsTs(project, lexiconDocs))\n api.files.push(await indexTs(project, lexiconDocs, nsidTree, nsidTokens))\n return api\n}\n\nconst indexTs = (\n project: Project,\n lexiconDocs: LexiconDoc[],\n nsidTree: DefTreeNode[],\n nsidTokens: Record<string, string[]>,\n) =>\n gen(project, '/index.ts', async (file) => {\n //= import {createServer as createXrpcServer, Server as XrpcServer} from '@atproto/xrpc-server'\n file.addImportDeclaration({\n moduleSpecifier: '@atproto/xrpc-server',\n namedImports: [\n { name: 'Auth', isTypeOnly: true },\n { name: 'Options', alias: 'XrpcOptions', isTypeOnly: true },\n { name: 'Server', alias: 'XrpcServer' },\n { name: 'StreamConfigOrHandler', isTypeOnly: true },\n { name: 'MethodConfigOrHandler', isTypeOnly: true },\n { name: 'createServer', alias: 'createXrpcServer' },\n ],\n })\n //= import {schemas} from './lexicons.js'\n file\n .addImportDeclaration({\n moduleSpecifier: './lexicons.js',\n })\n .addNamedImport({\n name: 'schemas',\n })\n\n // generate type imports\n for (const lexiconDoc of lexiconDocs) {\n if (\n lexiconDoc.defs.main?.type !== 'query' &&\n lexiconDoc.defs.main?.type !== 'subscription' &&\n lexiconDoc.defs.main?.type !== 'procedure'\n ) {\n continue\n }\n file\n .addImportDeclaration({\n moduleSpecifier: `./types/${lexiconDoc.id.split('.').join('/')}.js`,\n })\n .setNamespaceImport(toTitleCase(lexiconDoc.id))\n }\n\n // generate token enums\n for (const nsidAuthority in nsidTokens) {\n // export const {THE_AUTHORITY} = {\n // {Name}: \"{authority.the.name}\"\n // }\n file.addVariableStatement({\n isExported: true,\n declarationKind: VariableDeclarationKind.Const,\n declarations: [\n {\n name: toScreamingSnakeCase(nsidAuthority),\n initializer: [\n '{',\n ...nsidTokens[nsidAuthority].map(\n (nsidName) =>\n `${toTitleCase(nsidName)}: \"${nsidAuthority}.${nsidName}\",`,\n ),\n '}',\n ].join('\\n'),\n },\n ],\n })\n }\n\n //= export function createServer(options?: XrpcOptions) { ... }\n const createServerFn = file.addFunction({\n name: 'createServer',\n returnType: 'Server',\n parameters: [\n { name: 'options', type: 'XrpcOptions', hasQuestionToken: true },\n ],\n isExported: true,\n })\n createServerFn.setBodyText(`return new Server(options)`)\n\n //= export class Server {...}\n const serverCls = file.addClass({\n name: 'Server',\n isExported: true,\n })\n //= xrpc: XrpcServer = createXrpcServer(methodSchemas)\n serverCls.addProperty({\n name: 'xrpc',\n type: 'XrpcServer',\n })\n\n // generate classes for the schemas\n for (const ns of nsidTree) {\n //= ns: NS\n serverCls.addProperty({\n name: ns.propName,\n type: ns.className,\n })\n\n // class...\n genNamespaceCls(file, ns)\n }\n\n //= constructor (options?: XrpcOptions) {\n //= this.xrpc = createXrpcServer(schemas, options)\n //= {namespace declarations}\n //= }\n serverCls\n .addConstructor({\n parameters: [\n { name: 'options', type: 'XrpcOptions', hasQuestionToken: true },\n ],\n })\n .setBodyText(\n [\n 'this.xrpc = createXrpcServer(schemas, options)',\n ...nsidTree.map(\n (ns) => `this.${ns.propName} = new ${ns.className}(this)`,\n ),\n ].join('\\n'),\n )\n })\n\nfunction genNamespaceCls(file: SourceFile, ns: DefTreeNode) {\n //= export class {ns}NS {...}\n const cls = file.addClass({\n name: ns.className,\n isExported: true,\n })\n //= _server: Server\n cls.addProperty({\n name: '_server',\n type: 'Server',\n })\n\n for (const child of ns.children) {\n //= child: ChildNS\n cls.addProperty({\n name: child.propName,\n type: child.className,\n })\n\n // recurse\n genNamespaceCls(file, child)\n }\n\n //= constructor(server: Server) {\n //= this._server = server\n //= {child namespace declarations}\n //= }\n const cons = cls.addConstructor()\n cons.addParameter({\n name: 'server',\n type: 'Server',\n })\n cons.setBodyText(\n [\n `this._server = server`,\n ...ns.children.map(\n (ns) => `this.${ns.propName} = new ${ns.className}(server)`,\n ),\n ].join('\\n'),\n )\n\n // methods\n for (const userType of ns.userTypes) {\n if (\n userType.def.type !== 'query' &&\n userType.def.type !== 'subscription' &&\n userType.def.type !== 'procedure'\n ) {\n continue\n }\n const moduleName = toTitleCase(userType.nsid)\n const name = toCamelCase(NSID.parse(userType.nsid).name || '')\n const isSubscription = userType.def.type === 'subscription'\n const method = cls.addMethod({\n name,\n typeParameters: [\n {\n name: 'A',\n constraint: 'Auth',\n default: 'void',\n },\n ],\n })\n method.addParameter({\n name: 'cfg',\n type: isSubscription\n ? `StreamConfigOrHandler<\n A,\n ${moduleName}.QueryParams,\n ${moduleName}.HandlerOutput,\n >`\n : `MethodConfigOrHandler<\n A,\n ${moduleName}.QueryParams,\n ${moduleName}.HandlerInput,\n ${moduleName}.HandlerOutput,\n >`,\n })\n const methodType = isSubscription ? 'streamMethod' : 'method'\n method.setBodyText(\n [\n // Placing schema on separate line, since the following one was being formatted\n // into multiple lines and causing the ts-ignore to ignore the wrong line.\n `const nsid = '${userType.nsid}' // @ts-ignore`,\n `return this._server.xrpc.${methodType}(nsid, cfg)`,\n ].join('\\n'),\n )\n }\n}\n\nconst lexiconTs = (project, lexicons: Lexicons, lexiconDoc: LexiconDoc) =>\n gen(\n project,\n `/types/${lexiconDoc.id.split('.').join('/')}.ts`,\n async (file) => {\n const main = lexiconDoc.defs.main\n if (main?.type === 'query' || main?.type === 'procedure') {\n const streamingInput =\n main?.type === 'procedure' &&\n main.input?.encoding &&\n !main.input.schema\n const streamingOutput = main.output?.encoding && !main.output.schema\n if (streamingInput || streamingOutput) {\n //= import stream from 'node:stream'\n file.addImportDeclaration({\n moduleSpecifier: 'node:stream',\n defaultImport: 'stream',\n })\n }\n }\n\n genCommonImports(file, lexiconDoc.id)\n\n const imports: Set<string> = new Set()\n for (const defId in lexiconDoc.defs) {\n const def = lexiconDoc.defs[defId]\n const lexUri = `${lexiconDoc.id}#${defId}`\n if (defId === 'main') {\n if (def.type === 'query' || def.type === 'procedure') {\n genXrpcParams(file, lexicons, lexUri)\n genXrpcInput(file, imports, lexicons, lexUri)\n genXrpcOutput(file, imports, lexicons, lexUri, false)\n genServerXrpcMethod(file, lexicons, lexUri)\n } else if (def.type === 'subscription') {\n genXrpcParams(file, lexicons, lexUri)\n genXrpcOutput(file, imports, lexicons, lexUri, false)\n genServerXrpcStreaming(file, lexicons, lexUri)\n } else if (def.type === 'record') {\n genRecord(file, imports, lexicons, lexUri)\n } else {\n genUserType(file, imports, lexicons, lexUri)\n }\n } else {\n genUserType(file, imports, lexicons, lexUri)\n }\n }\n genImports(file, imports, lexiconDoc.id)\n },\n )\n\nfunction genServerXrpcMethod(\n file: SourceFile,\n lexicons: Lexicons,\n lexUri: string,\n) {\n const def = lexicons.getDefOrThrow(lexUri, ['query', 'procedure'])\n\n //= export interface HandlerInput {...}\n if (def.type === 'procedure' && def.input?.encoding) {\n const handlerInput = file.addInterface({\n name: 'HandlerInput',\n isExported: true,\n })\n\n handlerInput.addProperty({\n name: 'encoding',\n type: def.input.encoding\n .split(',')\n .map((v) => `'${v.trim()}'`)\n .join(' | '),\n })\n handlerInput.addProperty({\n name: 'body',\n type: def.input.schema\n ? def.input.encoding.includes(',')\n ? 'InputSchema | stream.Readable'\n : 'InputSchema'\n : 'stream.Readable',\n })\n } else {\n file.addTypeAlias({\n isExported: true,\n name: 'HandlerInput',\n type: 'void',\n })\n }\n\n // export interface HandlerSuccess {...}\n let hasHandlerSuccess = false\n if (def.output?.schema || def.output?.encoding) {\n hasHandlerSuccess = true\n const handlerSuccess = file.addInterface({\n name: 'HandlerSuccess',\n isExported: true,\n })\n\n if (def.output.encoding) {\n handlerSuccess.addProperty({\n name: 'encoding',\n type: def.output.encoding\n .split(',')\n .map((v) => `'${v.trim()}'`)\n .join(' | '),\n })\n }\n if (def.output?.schema) {\n if (def.output.encoding.includes(',')) {\n handlerSuccess.addProperty({\n name: 'body',\n type: 'OutputSchema | Uint8Array | stream.Readable',\n })\n } else {\n handlerSuccess.addProperty({ name: 'body', type: 'OutputSchema' })\n }\n } else if (def.output?.encoding) {\n handlerSuccess.addProperty({\n name: 'body',\n type: 'Uint8Array | stream.Readable',\n })\n }\n handlerSuccess.addProperty({\n name: 'headers?',\n type: '{ [key: string]: string }',\n })\n }\n\n // export interface HandlerError {...}\n const handlerError = file.addInterface({\n name: 'HandlerError',\n isExported: true,\n })\n handlerError.addProperties([\n { name: 'status', type: 'number' },\n { name: 'message?', type: 'string' },\n ])\n if (def.errors?.length) {\n handlerError.addProperty({\n name: 'error?',\n type: def.errors.map((err) => `'${err.name}'`).join(' | '),\n })\n }\n\n // export type HandlerOutput = ...\n file.addTypeAlias({\n isExported: true,\n name: 'HandlerOutput',\n type: `HandlerError | ${hasHandlerSuccess ? 'HandlerSuccess' : 'void'}`,\n })\n}\n\nfunction genServerXrpcStreaming(\n file: SourceFile,\n lexicons: Lexicons,\n lexUri: string,\n) {\n const def = lexicons.getDefOrThrow(lexUri, ['subscription'])\n\n file.addImportDeclaration({\n moduleSpecifier: '@atproto/xrpc-server',\n namedImports: [{ name: 'ErrorFrame' }],\n })\n\n file.addImportDeclaration({\n moduleSpecifier: 'node:http',\n namedImports: [{ name: 'IncomingMessage' }],\n })\n\n // export type HandlerError = ...\n file.addTypeAlias({\n name: 'HandlerError',\n isExported: true,\n type: `ErrorFrame<${arrayToUnion(def.errors?.map((e) => e.name))}>`,\n })\n\n // export type HandlerOutput = ...\n file.addTypeAlias({\n isExported: true,\n name: 'HandlerOutput',\n type: `HandlerError | ${def.message?.schema ? 'OutputSchema' : 'void'}`,\n })\n}\n\nfunction arrayToUnion(arr?: string[]) {\n if (!arr?.length) {\n return 'never'\n }\n return arr.map((item) => `'${item}'`).join(' | ')\n}\n"]}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/codegen/server.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n IndentationText,\n Project,\n SourceFile,\n VariableDeclarationKind,\n} from 'ts-morph'\nimport { type LexiconDoc, Lexicons } from '@atproto/lexicon'\nimport { NSID } from '@atproto/syntax'\nimport type { GeneratedAPI } from '../types.js'\nimport { gen, lexiconsTs, utilTs } from './common.js'\nimport {\n genCommonImports,\n genImports,\n genRecord,\n genUserType,\n genXrpcInput,\n genXrpcOutput,\n genXrpcParams,\n} from './lex-gen.js'\nimport {\n type DefTreeNode,\n lexiconsToDefTree,\n schemasToNsidTokens,\n toCamelCase,\n toScreamingSnakeCase,\n toTitleCase,\n} from './util.js'\n\nexport async function genServerApi(\n lexiconDocs: LexiconDoc[],\n): Promise<GeneratedAPI> {\n const project = new Project({\n useInMemoryFileSystem: true,\n manipulationSettings: { indentationText: IndentationText.TwoSpaces },\n })\n const api: GeneratedAPI = { files: [] }\n const lexicons = new Lexicons(lexiconDocs)\n const nsidTree = lexiconsToDefTree(lexiconDocs)\n const nsidTokens = schemasToNsidTokens(lexiconDocs)\n for (const lexiconDoc of lexiconDocs) {\n api.files.push(await lexiconTs(project, lexicons, lexiconDoc))\n }\n api.files.push(await utilTs(project))\n api.files.push(await lexiconsTs(project, lexiconDocs))\n api.files.push(await indexTs(project, lexiconDocs, nsidTree, nsidTokens))\n return api\n}\n\nconst indexTs = (\n project: Project,\n lexiconDocs: LexiconDoc[],\n nsidTree: DefTreeNode[],\n nsidTokens: Record<string, string[]>,\n) =>\n gen(project, '/index.ts', async (file) => {\n //= import {createServer as createXrpcServer, Server as XrpcServer} from '@atproto/xrpc-server'\n file.addImportDeclaration({\n moduleSpecifier: '@atproto/xrpc-server',\n namedImports: [\n { name: 'Auth', isTypeOnly: true },\n { name: 'Options', alias: 'XrpcOptions', isTypeOnly: true },\n { name: 'Server', alias: 'XrpcServer' },\n { name: 'StreamConfigOrHandler', isTypeOnly: true },\n { name: 'MethodConfigOrHandler', isTypeOnly: true },\n { name: 'createServer', alias: 'createXrpcServer' },\n ],\n })\n //= import {schemas} from './lexicons.js'\n file\n .addImportDeclaration({\n moduleSpecifier: './lexicons.js',\n })\n .addNamedImport({\n name: 'schemas',\n })\n\n // generate type imports\n for (const lexiconDoc of lexiconDocs) {\n if (\n lexiconDoc.defs.main?.type !== 'query' &&\n lexiconDoc.defs.main?.type !== 'subscription' &&\n lexiconDoc.defs.main?.type !== 'procedure'\n ) {\n continue\n }\n file\n .addImportDeclaration({\n moduleSpecifier: `./types/${lexiconDoc.id.split('.').join('/')}.js`,\n })\n .setNamespaceImport(toTitleCase(lexiconDoc.id))\n }\n\n // generate token enums\n for (const nsidAuthority in nsidTokens) {\n // export const {THE_AUTHORITY} = {\n // {Name}: \"{authority.the.name}\"\n // }\n file.addVariableStatement({\n isExported: true,\n declarationKind: VariableDeclarationKind.Const,\n declarations: [\n {\n name: toScreamingSnakeCase(nsidAuthority),\n initializer: [\n '{',\n ...nsidTokens[nsidAuthority].map(\n (nsidName) =>\n `${toTitleCase(nsidName)}: \"${nsidAuthority}.${nsidName}\",`,\n ),\n '}',\n ].join('\\n'),\n },\n ],\n })\n }\n\n //= export function createServer(options?: XrpcOptions) { ... }\n const createServerFn = file.addFunction({\n name: 'createServer',\n returnType: 'Server',\n parameters: [\n { name: 'options', type: 'XrpcOptions', hasQuestionToken: true },\n ],\n isExported: true,\n })\n createServerFn.setBodyText(`return new Server(options)`)\n\n //= export class Server {...}\n const serverCls = file.addClass({\n name: 'Server',\n isExported: true,\n })\n //= xrpc: XrpcServer = createXrpcServer(methodSchemas)\n serverCls.addProperty({\n name: 'xrpc',\n type: 'XrpcServer',\n })\n\n // generate classes for the schemas\n for (const ns of nsidTree) {\n //= ns: NS\n serverCls.addProperty({\n name: ns.propName,\n type: ns.className,\n })\n\n // class...\n genNamespaceCls(file, ns)\n }\n\n //= constructor (options?: XrpcOptions) {\n //= this.xrpc = createXrpcServer(schemas, options)\n //= {namespace declarations}\n //= }\n serverCls\n .addConstructor({\n parameters: [\n { name: 'options', type: 'XrpcOptions', hasQuestionToken: true },\n ],\n })\n .setBodyText(\n [\n 'this.xrpc = createXrpcServer(schemas, options)',\n ...nsidTree.map(\n (ns) => `this.${ns.propName} = new ${ns.className}(this)`,\n ),\n ].join('\\n'),\n )\n })\n\nfunction genNamespaceCls(file: SourceFile, ns: DefTreeNode) {\n //= export class {ns}NS {...}\n const cls = file.addClass({\n name: ns.className,\n isExported: true,\n })\n //= _server: Server\n cls.addProperty({\n name: '_server',\n type: 'Server',\n })\n\n for (const child of ns.children) {\n //= child: ChildNS\n cls.addProperty({\n name: child.propName,\n type: child.className,\n })\n\n // recurse\n genNamespaceCls(file, child)\n }\n\n //= constructor(server: Server) {\n //= this._server = server\n //= {child namespace declarations}\n //= }\n const cons = cls.addConstructor()\n cons.addParameter({\n name: 'server',\n type: 'Server',\n })\n cons.setBodyText(\n [\n `this._server = server`,\n ...ns.children.map(\n (ns) => `this.${ns.propName} = new ${ns.className}(server)`,\n ),\n ].join('\\n'),\n )\n\n // methods\n for (const userType of ns.userTypes) {\n if (\n userType.def.type !== 'query' &&\n userType.def.type !== 'subscription' &&\n userType.def.type !== 'procedure'\n ) {\n continue\n }\n const moduleName = toTitleCase(userType.nsid)\n const name = toCamelCase(NSID.parse(userType.nsid).name || '')\n const isSubscription = userType.def.type === 'subscription'\n const method = cls.addMethod({\n name,\n typeParameters: [\n {\n name: 'A',\n constraint: 'Auth',\n default: 'void',\n },\n ],\n })\n method.addParameter({\n name: 'cfg',\n type: isSubscription\n ? `StreamConfigOrHandler<\n A,\n ${moduleName}.QueryParams,\n ${moduleName}.HandlerOutput,\n >`\n : `MethodConfigOrHandler<\n A,\n ${moduleName}.QueryParams,\n ${moduleName}.HandlerInput,\n ${moduleName}.HandlerOutput,\n >`,\n })\n const methodType = isSubscription ? 'streamMethod' : 'method'\n method.setBodyText(\n [\n // Placing schema on separate line, since the following one was being formatted\n // into multiple lines and causing the ts-ignore to ignore the wrong line.\n `const nsid = '${userType.nsid}' // @ts-ignore`,\n `return this._server.xrpc.${methodType}(nsid, cfg)`,\n ].join('\\n'),\n )\n }\n}\n\nconst lexiconTs = (\n project: Project,\n lexicons: Lexicons,\n lexiconDoc: LexiconDoc,\n) =>\n gen(\n project,\n `/types/${lexiconDoc.id.split('.').join('/')}.ts`,\n async (file) => {\n const main = lexiconDoc.defs.main\n if (main?.type === 'query' || main?.type === 'procedure') {\n const streamingInput =\n main?.type === 'procedure' &&\n main.input?.encoding &&\n !main.input.schema\n const streamingOutput = main.output?.encoding && !main.output.schema\n if (streamingInput || streamingOutput) {\n //= import stream from 'node:stream'\n file.addImportDeclaration({\n moduleSpecifier: 'node:stream',\n defaultImport: 'stream',\n })\n }\n }\n\n genCommonImports(file, lexiconDoc.id)\n\n const imports: Set<string> = new Set()\n for (const defId in lexiconDoc.defs) {\n const def = lexiconDoc.defs[defId]\n const lexUri = `${lexiconDoc.id}#${defId}`\n if (defId === 'main') {\n if (def.type === 'query' || def.type === 'procedure') {\n genXrpcParams(file, lexicons, lexUri)\n genXrpcInput(file, imports, lexicons, lexUri)\n genXrpcOutput(file, imports, lexicons, lexUri, false)\n genServerXrpcMethod(file, lexicons, lexUri)\n } else if (def.type === 'subscription') {\n genXrpcParams(file, lexicons, lexUri)\n genXrpcOutput(file, imports, lexicons, lexUri, false)\n genServerXrpcStreaming(file, lexicons, lexUri)\n } else if (def.type === 'record') {\n genRecord(file, imports, lexicons, lexUri)\n } else {\n genUserType(file, imports, lexicons, lexUri)\n }\n } else {\n genUserType(file, imports, lexicons, lexUri)\n }\n }\n genImports(file, imports, lexiconDoc.id)\n },\n )\n\nfunction genServerXrpcMethod(\n file: SourceFile,\n lexicons: Lexicons,\n lexUri: string,\n) {\n const def = lexicons.getDefOrThrow(lexUri, ['query', 'procedure'])\n\n //= export interface HandlerInput {...}\n if (def.type === 'procedure' && def.input?.encoding) {\n const handlerInput = file.addInterface({\n name: 'HandlerInput',\n isExported: true,\n })\n\n handlerInput.addProperty({\n name: 'encoding',\n type: def.input.encoding\n .split(',')\n .map((v) => `'${v.trim()}'`)\n .join(' | '),\n })\n handlerInput.addProperty({\n name: 'body',\n type: def.input.schema\n ? def.input.encoding.includes(',')\n ? 'InputSchema | stream.Readable'\n : 'InputSchema'\n : 'stream.Readable',\n })\n } else {\n file.addTypeAlias({\n isExported: true,\n name: 'HandlerInput',\n type: 'void',\n })\n }\n\n // export interface HandlerSuccess {...}\n let hasHandlerSuccess = false\n if (def.output?.schema || def.output?.encoding) {\n hasHandlerSuccess = true\n const handlerSuccess = file.addInterface({\n name: 'HandlerSuccess',\n isExported: true,\n })\n\n if (def.output.encoding) {\n handlerSuccess.addProperty({\n name: 'encoding',\n type: def.output.encoding\n .split(',')\n .map((v) => `'${v.trim()}'`)\n .join(' | '),\n })\n }\n if (def.output?.schema) {\n if (def.output.encoding.includes(',')) {\n handlerSuccess.addProperty({\n name: 'body',\n type: 'OutputSchema | Uint8Array | stream.Readable',\n })\n } else {\n handlerSuccess.addProperty({ name: 'body', type: 'OutputSchema' })\n }\n } else if (def.output?.encoding) {\n handlerSuccess.addProperty({\n name: 'body',\n type: 'Uint8Array | stream.Readable',\n })\n }\n handlerSuccess.addProperty({\n name: 'headers?',\n type: '{ [key: string]: string }',\n })\n }\n\n // export interface HandlerError {...}\n const handlerError = file.addInterface({\n name: 'HandlerError',\n isExported: true,\n })\n handlerError.addProperties([\n { name: 'status', type: 'number' },\n { name: 'message?', type: 'string' },\n ])\n if (def.errors?.length) {\n handlerError.addProperty({\n name: 'error?',\n type: def.errors.map((err) => `'${err.name}'`).join(' | '),\n })\n }\n\n // export type HandlerOutput = ...\n file.addTypeAlias({\n isExported: true,\n name: 'HandlerOutput',\n type: `HandlerError | ${hasHandlerSuccess ? 'HandlerSuccess' : 'void'}`,\n })\n}\n\nfunction genServerXrpcStreaming(\n file: SourceFile,\n lexicons: Lexicons,\n lexUri: string,\n) {\n const def = lexicons.getDefOrThrow(lexUri, ['subscription'])\n\n file.addImportDeclaration({\n moduleSpecifier: '@atproto/xrpc-server',\n namedImports: [{ name: 'ErrorFrame' }],\n })\n\n file.addImportDeclaration({\n moduleSpecifier: 'node:http',\n namedImports: [{ name: 'IncomingMessage' }],\n })\n\n // export type HandlerError = ...\n file.addTypeAlias({\n name: 'HandlerError',\n isExported: true,\n type: `ErrorFrame<${arrayToUnion(def.errors?.map((e) => e.name))}>`,\n })\n\n // export type HandlerOutput = ...\n file.addTypeAlias({\n isExported: true,\n name: 'HandlerOutput',\n type: `HandlerError | ${def.message?.schema ? 'OutputSchema' : 'void'}`,\n })\n}\n\nfunction arrayToUnion(arr?: string[]) {\n if (!arr?.length) {\n return 'never'\n }\n return arr.map((item) => `'${item}'`).join(' | ')\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import {} from '@atproto/lexicon';
1
2
  import { NSID } from '@atproto/syntax';
2
3
  export function lexiconsToDefTree(lexicons) {
3
4
  const tree = [];
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/codegen/util.ts"],"names":[],"mappings":"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","sourcesContent":["import { type LexUserType, type LexiconDoc } from '@atproto/lexicon'\nimport { NSID } from '@atproto/syntax'\n\nexport interface DefTreeNodeUserType {\n nsid: string\n def: LexUserType\n}\n\nexport interface DefTreeNode {\n name: string\n className: string\n propName: string\n children: DefTreeNode[]\n userTypes: DefTreeNodeUserType[]\n}\n\nexport function lexiconsToDefTree(lexicons: LexiconDoc[]): DefTreeNode[] {\n const tree: DefTreeNode[] = []\n for (const lexicon of lexicons) {\n if (!lexicon.defs.main) {\n continue\n }\n const node = getOrCreateNode(tree, lexicon.id.split('.').slice(0, -1))\n node.userTypes.push({ nsid: lexicon.id, def: lexicon.defs.main })\n }\n return tree\n}\n\nfunction getOrCreateNode(tree: DefTreeNode[], path: string[]): DefTreeNode {\n let node: DefTreeNode | undefined\n for (let i = 0; i < path.length; i++) {\n const segment = path[i]\n node = tree.find((v) => v.name === segment)\n if (!node) {\n node = {\n name: segment,\n className: `${toTitleCase(path.slice(0, i + 1).join('-'))}NS`,\n propName: toCamelCase(segment),\n children: [],\n userTypes: [],\n } as DefTreeNode\n tree.push(node)\n }\n tree = node.children\n }\n if (!node) throw new Error(`Invalid schema path: ${path.join('.')}`)\n return node\n}\n\nexport function schemasToNsidTokens(\n lexiconDocs: LexiconDoc[],\n): Record<string, string[]> {\n const nsidTokens: Record<string, string[]> = {}\n for (const lexiconDoc of lexiconDocs) {\n const nsidp = NSID.parse(lexiconDoc.id)\n if (!nsidp.name) continue\n for (const defId in lexiconDoc.defs) {\n const def = lexiconDoc.defs[defId]\n if (def.type !== 'token') continue\n const authority = nsidp.segments.slice(0, -1).join('.')\n nsidTokens[authority] ??= []\n nsidTokens[authority].push(\n nsidp.name + (defId === 'main' ? '' : `#${defId}`),\n )\n }\n }\n return nsidTokens\n}\n\nexport function toTitleCase(v: string): string {\n v = v.replace(/^([a-z])/gi, (_, g) => g.toUpperCase()) // upper-case first letter\n v = v.replace(/[.#-]([a-z])/gi, (_, g) => g.toUpperCase()) // uppercase any dash, dot, or hash segments\n return v.replace(/[.-]/g, '') // remove lefover dashes or dots\n}\n\nexport function toCamelCase(v: string): string {\n v = v.replace(/[.#-]([a-z])/gi, (_, g) => g.toUpperCase()) // uppercase any dash, dot, or hash segments\n return v.replace(/[.-]/g, '') // remove lefover dashes or dots\n}\n\nexport function toScreamingSnakeCase(v: string): string {\n v = v.replace(/[.#-]+/gi, '_') // convert dashes, dots, and hashes into underscores\n return v.toUpperCase() // and scream!\n}\n"]}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/codegen/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,MAAM,kBAAkB,CAAA;AACpE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAetC,MAAM,UAAU,iBAAiB,CAAC,QAAsB;IACtD,MAAM,IAAI,GAAkB,EAAE,CAAA;IAC9B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,SAAQ;QACV,CAAC;QACD,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACtE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IACnE,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,eAAe,CAAC,IAAmB,EAAE,IAAc;IAC1D,IAAI,IAA6B,CAAA;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAA;QAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,GAAG;gBACL,IAAI,EAAE,OAAO;gBACb,SAAS,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI;gBAC7D,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC;gBAC9B,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,EAAE;aACC,CAAA;YAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACjB,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IACD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACpE,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,WAAyB;IAEzB,MAAM,UAAU,GAA6B,EAAE,CAAA;IAC/C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;QACvC,IAAI,CAAC,KAAK,CAAC,IAAI;YAAE,SAAQ;QACzB,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAClC,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;gBAAE,SAAQ;YAClC,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACvD,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;YAC5B,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,CACxB,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CACnD,CAAA;QACH,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA,CAAC,0BAA0B;IACjF,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA,CAAC,4CAA4C;IACvG,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA,CAAC,gCAAgC;AAChE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA,CAAC,4CAA4C;IACvG,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA,CAAC,gCAAgC;AAChE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,CAAS;IAC5C,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA,CAAC,oDAAoD;IACnF,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA,CAAC,cAAc;AACvC,CAAC","sourcesContent":["import { type LexUserType, type LexiconDoc } from '@atproto/lexicon'\nimport { NSID } from '@atproto/syntax'\n\nexport interface DefTreeNodeUserType {\n nsid: string\n def: LexUserType\n}\n\nexport interface DefTreeNode {\n name: string\n className: string\n propName: string\n children: DefTreeNode[]\n userTypes: DefTreeNodeUserType[]\n}\n\nexport function lexiconsToDefTree(lexicons: LexiconDoc[]): DefTreeNode[] {\n const tree: DefTreeNode[] = []\n for (const lexicon of lexicons) {\n if (!lexicon.defs.main) {\n continue\n }\n const node = getOrCreateNode(tree, lexicon.id.split('.').slice(0, -1))\n node.userTypes.push({ nsid: lexicon.id, def: lexicon.defs.main })\n }\n return tree\n}\n\nfunction getOrCreateNode(tree: DefTreeNode[], path: string[]): DefTreeNode {\n let node: DefTreeNode | undefined\n for (let i = 0; i < path.length; i++) {\n const segment = path[i]\n node = tree.find((v) => v.name === segment)\n if (!node) {\n node = {\n name: segment,\n className: `${toTitleCase(path.slice(0, i + 1).join('-'))}NS`,\n propName: toCamelCase(segment),\n children: [],\n userTypes: [],\n } as DefTreeNode\n tree.push(node)\n }\n tree = node.children\n }\n if (!node) throw new Error(`Invalid schema path: ${path.join('.')}`)\n return node\n}\n\nexport function schemasToNsidTokens(\n lexiconDocs: LexiconDoc[],\n): Record<string, string[]> {\n const nsidTokens: Record<string, string[]> = {}\n for (const lexiconDoc of lexiconDocs) {\n const nsidp = NSID.parse(lexiconDoc.id)\n if (!nsidp.name) continue\n for (const defId in lexiconDoc.defs) {\n const def = lexiconDoc.defs[defId]\n if (def.type !== 'token') continue\n const authority = nsidp.segments.slice(0, -1).join('.')\n nsidTokens[authority] ??= []\n nsidTokens[authority].push(\n nsidp.name + (defId === 'main' ? '' : `#${defId}`),\n )\n }\n }\n return nsidTokens\n}\n\nexport function toTitleCase(v: string): string {\n v = v.replace(/^([a-z])/gi, (_, g) => g.toUpperCase()) // upper-case first letter\n v = v.replace(/[.#-]([a-z])/gi, (_, g) => g.toUpperCase()) // uppercase any dash, dot, or hash segments\n return v.replace(/[.-]/g, '') // remove lefover dashes or dots\n}\n\nexport function toCamelCase(v: string): string {\n v = v.replace(/[.#-]([a-z])/gi, (_, g) => g.toUpperCase()) // uppercase any dash, dot, or hash segments\n return v.replace(/[.-]/g, '') // remove lefover dashes or dots\n}\n\nexport function toScreamingSnakeCase(v: string): string {\n v = v.replace(/[.#-]+/gi, '_') // convert dashes, dots, and hashes into underscores\n return v.toUpperCase() // and scream!\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import fs from 'node:fs';
2
+ import {} from '@atproto/lexicon';
2
3
  const INSERT_START = [
3
4
  '<!-- START lex generated content. Please keep comment here to allow auto update -->',
4
5
  "<!-- DON'T EDIT THIS SECTION! INSTEAD RE-RUN lex TO UPDATE -->",
@@ -60,9 +61,9 @@ function merge(arr) {
60
61
  .join('\n');
61
62
  }
62
63
  function matchesStart(line) {
63
- return /<!-- START lex /.test(line);
64
+ return /<!-- START lex /.test(String(line));
64
65
  }
65
66
  function matchesEnd(line) {
66
- return /<!-- END lex /.test(line);
67
+ return /<!-- END lex /.test(String(line));
67
68
  }
68
69
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mdgen/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AAGxB,MAAM,YAAY,GAAG;IACnB,qFAAqF;IACrF,gEAAgE;CACjE,CAAA;AACD,MAAM,UAAU,GAAG;IACjB,8EAA8E;CAC/E,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,WAAmB,EAAE,QAAsB;IACvE,IAAI,eAAe,GAAG,EAAE,CAAA;IACxB,IAAI,CAAC;QACH,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IACD,MAAM,SAAS,GAAe,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAEzD,oCAAoC;IACpC,IAAI,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;IAClE,IAAI,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;IAC9D,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,UAAU,GAAG,SAAS,CAAC,MAAM,CAAA;IAC/B,CAAC;IACD,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAA;IAC7B,CAAC;IAED,4BAA4B;IAC5B,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,GAAG,UAAU,GAAG,CAAC,EAAE;QACtD,YAAY;QACZ,MAAM,UAAU,CAAC,QAAQ,CAAC;QAC1B,UAAU;KACX,CAAC,CAAA;IAEF,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAA;AACzD,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,QAAsB;IAC9C,MAAM,GAAG,GAAe,EAAE,CAAA;IAC1B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACvB,MAAM,IAAI,GAAe,EAAE,CAAA;QAC3B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QACpC,CAAC;QACD,GAAG,CAAC,IAAI,CAAC;YACP,KAAK;YACL,EAAE;YACF,MAAM,OAAO,CAAC,EAAE,EAAE;YAClB,EAAE;YACF,IAAI;YACJ,SAAS;YACT,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAChC,KAAK;SACN,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAGD,SAAS,KAAK,CAAC,GAAe;IAC5B,OAAO,GAAG;SACP,IAAI,CAAC,EAAE,CAAC;SACR,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;SACpC,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;AAED,SAAS,YAAY,CAAC,IAAI;IACxB,OAAO,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACrC,CAAC;AAED,SAAS,UAAU,CAAC,IAAI;IACtB,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACnC,CAAC","sourcesContent":["import fs from 'node:fs'\nimport { type LexiconDoc } from '@atproto/lexicon'\n\nconst INSERT_START = [\n '<!-- START lex generated content. Please keep comment here to allow auto update -->',\n \"<!-- DON'T EDIT THIS SECTION! INSTEAD RE-RUN lex TO UPDATE -->\",\n]\nconst INSERT_END = [\n '<!-- END lex generated TOC please keep comment here to allow auto update -->',\n]\n\nexport async function process(outFilePath: string, lexicons: LexiconDoc[]) {\n let existingContent = ''\n try {\n existingContent = fs.readFileSync(outFilePath, 'utf8')\n } catch {\n // ignore - no existing content\n }\n const fileLines: StringTree = existingContent.split('\\n')\n\n // find previously generated content\n let startIndex = fileLines.findIndex((line) => matchesStart(line))\n let endIndex = fileLines.findIndex((line) => matchesEnd(line))\n if (startIndex === -1) {\n startIndex = fileLines.length\n }\n if (endIndex === -1) {\n endIndex = fileLines.length\n }\n\n // generate & insert content\n fileLines.splice(startIndex, endIndex - startIndex + 1, [\n INSERT_START,\n await genMdLines(lexicons),\n INSERT_END,\n ])\n\n fs.writeFileSync(outFilePath, merge(fileLines), 'utf8')\n}\n\nasync function genMdLines(lexicons: LexiconDoc[]): Promise<StringTree> {\n const doc: StringTree = []\n for (const lexicon of lexicons) {\n console.log(lexicon.id)\n const desc: StringTree = []\n if (lexicon.description) {\n desc.push(lexicon.description, ``)\n }\n doc.push([\n `---`,\n ``,\n `## ${lexicon.id}`,\n '',\n desc,\n '```json',\n JSON.stringify(lexicon, null, 2),\n '```',\n ])\n }\n return doc\n}\n\ntype StringTree = (StringTree | string | undefined)[]\nfunction merge(arr: StringTree): string {\n return arr\n .flat(10)\n .filter((v) => typeof v === 'string')\n .join('\\n')\n}\n\nfunction matchesStart(line) {\n return /<!-- START lex /.test(line)\n}\n\nfunction matchesEnd(line) {\n return /<!-- END lex /.test(line)\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mdgen/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,EAAmB,MAAM,kBAAkB,CAAA;AAElD,MAAM,YAAY,GAAG;IACnB,qFAAqF;IACrF,gEAAgE;CACjE,CAAA;AACD,MAAM,UAAU,GAAG;IACjB,8EAA8E;CAC/E,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,WAAmB,EAAE,QAAsB;IACvE,IAAI,eAAe,GAAG,EAAE,CAAA;IACxB,IAAI,CAAC;QACH,eAAe,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IACD,MAAM,SAAS,GAAe,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAEzD,oCAAoC;IACpC,IAAI,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAA;IAClE,IAAI,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;IAC9D,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,UAAU,GAAG,SAAS,CAAC,MAAM,CAAA;IAC/B,CAAC;IACD,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAA;IAC7B,CAAC;IAED,4BAA4B;IAC5B,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,GAAG,UAAU,GAAG,CAAC,EAAE;QACtD,YAAY;QACZ,MAAM,UAAU,CAAC,QAAQ,CAAC;QAC1B,UAAU;KACX,CAAC,CAAA;IAEF,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAA;AACzD,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,QAAsB;IAC9C,MAAM,GAAG,GAAe,EAAE,CAAA;IAC1B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACvB,MAAM,IAAI,GAAe,EAAE,CAAA;QAC3B,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;QACpC,CAAC;QACD,GAAG,CAAC,IAAI,CAAC;YACP,KAAK;YACL,EAAE;YACF,MAAM,OAAO,CAAC,EAAE,EAAE;YAClB,EAAE;YACF,IAAI;YACJ,SAAS;YACT,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAChC,KAAK;SACN,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAGD,SAAS,KAAK,CAAC,GAAe;IAC5B,OAAO,GAAG;SACP,IAAI,CAAC,EAAE,CAAC;SACR,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;SACpC,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;AAED,SAAS,YAAY,CAAC,IAA0B;IAC9C,OAAO,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED,SAAS,UAAU,CAAC,IAA0B;IAC5C,OAAO,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;AAC3C,CAAC","sourcesContent":["import fs from 'node:fs'\nimport { type LexiconDoc } from '@atproto/lexicon'\n\nconst INSERT_START = [\n '<!-- START lex generated content. Please keep comment here to allow auto update -->',\n \"<!-- DON'T EDIT THIS SECTION! INSTEAD RE-RUN lex TO UPDATE -->\",\n]\nconst INSERT_END = [\n '<!-- END lex generated TOC please keep comment here to allow auto update -->',\n]\n\nexport async function process(outFilePath: string, lexicons: LexiconDoc[]) {\n let existingContent = ''\n try {\n existingContent = fs.readFileSync(outFilePath, 'utf8')\n } catch {\n // ignore - no existing content\n }\n const fileLines: StringTree = existingContent.split('\\n')\n\n // find previously generated content\n let startIndex = fileLines.findIndex((line) => matchesStart(line))\n let endIndex = fileLines.findIndex((line) => matchesEnd(line))\n if (startIndex === -1) {\n startIndex = fileLines.length\n }\n if (endIndex === -1) {\n endIndex = fileLines.length\n }\n\n // generate & insert content\n fileLines.splice(startIndex, endIndex - startIndex + 1, [\n INSERT_START,\n await genMdLines(lexicons),\n INSERT_END,\n ])\n\n fs.writeFileSync(outFilePath, merge(fileLines), 'utf8')\n}\n\nasync function genMdLines(lexicons: LexiconDoc[]): Promise<StringTree> {\n const doc: StringTree = []\n for (const lexicon of lexicons) {\n console.log(lexicon.id)\n const desc: StringTree = []\n if (lexicon.description) {\n desc.push(lexicon.description, ``)\n }\n doc.push([\n `---`,\n ``,\n `## ${lexicon.id}`,\n '',\n desc,\n '```json',\n JSON.stringify(lexicon, null, 2),\n '```',\n ])\n }\n return doc\n}\n\ntype StringTree = (StringTree | string | undefined)[]\nfunction merge(arr: StringTree): string {\n return arr\n .flat(10)\n .filter((v) => typeof v === 'string')\n .join('\\n')\n}\n\nfunction matchesStart(line?: string | StringTree) {\n return /<!-- START lex /.test(String(line))\n}\n\nfunction matchesEnd(line?: string | StringTree) {\n return /<!-- END lex /.test(String(line))\n}\n"]}
package/dist/util.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { type LexiconDoc } from '@atproto/lexicon';
2
- import { type FileDiff, type GeneratedAPI } from './types.js';
2
+ import type { FileDiff, GeneratedAPI } from './types.js';
3
3
  export declare function readAllLexicons(paths: string[]): LexiconDoc[];
4
4
  export declare function readLexicon(path: string): LexiconDoc;
5
5
  export declare function genTsObj(lexicons: LexiconDoc[]): string;
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AAE7D,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAc7D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAiCpD;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CAEvD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,cAqB5D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,QAc7C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,QAa7C"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAExD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAc7D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAiCpD;AAED,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CAEvD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,cAqB5D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,QAc7C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,QAa7C"}
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'node:fs'\nimport { join } from 'node:path'\nimport chalk from 'chalk'\nimport { ZodError, type ZodFormattedError } from 'zod'\nimport { type LexiconDoc, parseLexiconDoc } from '@atproto/lexicon'\nimport { type FileDiff, type GeneratedAPI } from './types.js'\n\nexport function readAllLexicons(paths: string[]): LexiconDoc[] {\n paths = [...paths].sort() // incoming path order may have come from locale-dependent shell globs\n const docs: LexiconDoc[] = []\n for (const path of paths) {\n if (!path.endsWith('.json') || !fs.statSync(path).isFile()) {\n continue\n }\n try {\n docs.push(readLexicon(path))\n } catch {\n // skip\n }\n }\n return docs\n}\n\nexport function readLexicon(path: string): LexiconDoc {\n let str: string\n let obj: unknown\n try {\n str = fs.readFileSync(path, 'utf8')\n } catch (e) {\n console.error(`Failed to read file`, path)\n throw e\n }\n try {\n obj = JSON.parse(str)\n } catch (e) {\n console.error(`Failed to parse JSON in file`, path)\n throw e\n }\n if (\n obj &&\n typeof obj === 'object' &&\n typeof (obj as LexiconDoc).lexicon === 'number'\n ) {\n try {\n return parseLexiconDoc(obj)\n } catch (e) {\n console.error(`Invalid lexicon`, path)\n if (e instanceof ZodError) {\n printZodError(e.format())\n }\n throw e\n }\n } else {\n console.error(`Not lexicon schema`, path)\n throw new Error(`Not lexicon schema`)\n }\n}\n\nexport function genTsObj(lexicons: LexiconDoc[]): string {\n return `export const lexicons = ${JSON.stringify(lexicons, null, 2)}`\n}\n\nexport function genFileDiff(outDir: string, api: GeneratedAPI) {\n const diffs: FileDiff[] = []\n const existingFiles = readdirRecursiveSync(outDir)\n\n for (const file of api.files) {\n file.path = join(outDir, file.path)\n if (existingFiles.includes(file.path)) {\n diffs.push({ act: 'mod', path: file.path, content: file.content })\n } else {\n diffs.push({ act: 'add', path: file.path, content: file.content })\n }\n }\n for (const filepath of existingFiles) {\n if (api.files.find((f) => f.path === filepath)) {\n // do nothing\n } else {\n diffs.push({ act: 'del', path: filepath })\n }\n }\n\n return diffs\n}\n\nexport function printFileDiff(diff: FileDiff[]) {\n for (const d of diff) {\n switch (d.act) {\n case 'add':\n console.log(`${chalk.greenBright('[+ add]')} ${d.path}`)\n break\n case 'mod':\n console.log(`${chalk.yellowBright('[* mod]')} ${d.path}`)\n break\n case 'del':\n console.log(`${chalk.redBright('[- del]')} ${d.path}`)\n break\n }\n }\n}\n\nexport function applyFileDiff(diff: FileDiff[]) {\n for (const d of diff) {\n switch (d.act) {\n case 'add':\n case 'mod':\n fs.mkdirSync(join(d.path, '..'), { recursive: true }) // lazy way to make sure the parent dir exists\n fs.writeFileSync(d.path, d.content || '', 'utf8')\n break\n case 'del':\n fs.unlinkSync(d.path)\n break\n }\n }\n}\n\nfunction printZodError(node: ZodFormattedError<any>, path = ''): boolean {\n if (node._errors?.length) {\n console.log(chalk.red(`Issues at ${path}:`))\n for (const err of dedup(node._errors)) {\n console.log(chalk.red(` - ${err}`))\n }\n return true\n } else {\n for (const k in node) {\n if (k === '_errors') {\n continue\n }\n printZodError(node[k], `${path}/${k}`)\n }\n }\n return false\n}\n\nfunction readdirRecursiveSync(root: string, files: string[] = [], prefix = '') {\n const dir = join(root, prefix)\n if (!fs.existsSync(dir)) return files\n if (fs.statSync(dir).isDirectory())\n fs.readdirSync(dir).forEach(function (name) {\n readdirRecursiveSync(root, files, join(prefix, name))\n })\n else if (prefix.endsWith('.ts')) {\n files.push(join(root, prefix))\n }\n\n return files\n}\n\nfunction dedup(arr: string[]): string[] {\n return Array.from(new Set(arr))\n}\n"]}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'node:fs'\nimport { join } from 'node:path'\nimport chalk from 'chalk'\nimport { ZodError, type ZodFormattedError } from 'zod'\nimport { type LexiconDoc, parseLexiconDoc } from '@atproto/lexicon'\nimport type { FileDiff, GeneratedAPI } from './types.js'\n\nexport function readAllLexicons(paths: string[]): LexiconDoc[] {\n paths = [...paths].sort() // incoming path order may have come from locale-dependent shell globs\n const docs: LexiconDoc[] = []\n for (const path of paths) {\n if (!path.endsWith('.json') || !fs.statSync(path).isFile()) {\n continue\n }\n try {\n docs.push(readLexicon(path))\n } catch {\n // skip\n }\n }\n return docs\n}\n\nexport function readLexicon(path: string): LexiconDoc {\n let str: string\n let obj: unknown\n try {\n str = fs.readFileSync(path, 'utf8')\n } catch (e) {\n console.error(`Failed to read file`, path)\n throw e\n }\n try {\n obj = JSON.parse(str)\n } catch (e) {\n console.error(`Failed to parse JSON in file`, path)\n throw e\n }\n if (\n obj &&\n typeof obj === 'object' &&\n typeof (obj as LexiconDoc).lexicon === 'number'\n ) {\n try {\n return parseLexiconDoc(obj)\n } catch (e) {\n console.error(`Invalid lexicon`, path)\n if (e instanceof ZodError) {\n printZodError(e.format())\n }\n throw e\n }\n } else {\n console.error(`Not lexicon schema`, path)\n throw new Error(`Not lexicon schema`)\n }\n}\n\nexport function genTsObj(lexicons: LexiconDoc[]): string {\n return `export const lexicons = ${JSON.stringify(lexicons, null, 2)}`\n}\n\nexport function genFileDiff(outDir: string, api: GeneratedAPI) {\n const diffs: FileDiff[] = []\n const existingFiles = readdirRecursiveSync(outDir)\n\n for (const file of api.files) {\n file.path = join(outDir, file.path)\n if (existingFiles.includes(file.path)) {\n diffs.push({ act: 'mod', path: file.path, content: file.content })\n } else {\n diffs.push({ act: 'add', path: file.path, content: file.content })\n }\n }\n for (const filepath of existingFiles) {\n if (api.files.find((f) => f.path === filepath)) {\n // do nothing\n } else {\n diffs.push({ act: 'del', path: filepath })\n }\n }\n\n return diffs\n}\n\nexport function printFileDiff(diff: FileDiff[]) {\n for (const d of diff) {\n switch (d.act) {\n case 'add':\n console.log(`${chalk.greenBright('[+ add]')} ${d.path}`)\n break\n case 'mod':\n console.log(`${chalk.yellowBright('[* mod]')} ${d.path}`)\n break\n case 'del':\n console.log(`${chalk.redBright('[- del]')} ${d.path}`)\n break\n }\n }\n}\n\nexport function applyFileDiff(diff: FileDiff[]) {\n for (const d of diff) {\n switch (d.act) {\n case 'add':\n case 'mod':\n fs.mkdirSync(join(d.path, '..'), { recursive: true }) // lazy way to make sure the parent dir exists\n fs.writeFileSync(d.path, d.content || '', 'utf8')\n break\n case 'del':\n fs.unlinkSync(d.path)\n break\n }\n }\n}\n\nfunction printZodError(node: ZodFormattedError<any>, path = ''): boolean {\n if (node._errors?.length) {\n console.log(chalk.red(`Issues at ${path}:`))\n for (const err of dedup(node._errors)) {\n console.log(chalk.red(` - ${err}`))\n }\n return true\n } else {\n for (const k in node) {\n if (k === '_errors') {\n continue\n }\n printZodError((node as any)[k], `${path}/${k}`)\n }\n }\n return false\n}\n\nfunction readdirRecursiveSync(root: string, files: string[] = [], prefix = '') {\n const dir = join(root, prefix)\n if (!fs.existsSync(dir)) return files\n if (fs.statSync(dir).isDirectory())\n fs.readdirSync(dir).forEach(function (name) {\n readdirRecursiveSync(root, files, join(prefix, name))\n })\n else if (prefix.endsWith('.ts')) {\n files.push(join(root, prefix))\n }\n\n return files\n}\n\nfunction dedup(arr: string[]): string[] {\n return Array.from(new Set(arr))\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "name": "@atproto/lex-cli",
3
- "version": "0.10.2",
3
+ "version": "0.10.3",
4
+ "engines": {
5
+ "node": ">=22"
6
+ },
4
7
  "license": "MIT",
5
8
  "description": "TypeScript codegen tool for atproto Lexicon schemas",
6
9
  "keywords": [
@@ -13,11 +16,20 @@
13
16
  "url": "https://github.com/bluesky-social/atproto",
14
17
  "directory": "packages/lex-cli"
15
18
  },
19
+ "files": [
20
+ "./bin.js",
21
+ "./dist",
22
+ "./CHANGELOG.md"
23
+ ],
16
24
  "bin": {
17
25
  "lex": "bin.js"
18
26
  },
19
- "engines": {
20
- "node": ">=22"
27
+ "type": "module",
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/index.d.ts",
31
+ "default": "./dist/index.js"
32
+ }
21
33
  },
22
34
  "dependencies": {
23
35
  "chalk": "^4.1.2",
@@ -26,16 +38,8 @@
26
38
  "ts-morph": "^24.0.0",
27
39
  "yesno": "^0.4.0",
28
40
  "zod": "^3.23.8",
29
- "@atproto/lexicon": "^0.7.3",
30
- "@atproto/syntax": "^0.6.3"
31
- },
32
- "devDependencies": {},
33
- "type": "module",
34
- "exports": {
35
- ".": {
36
- "types": "./dist/index.d.ts",
37
- "default": "./dist/index.js"
38
- }
41
+ "@atproto/lexicon": "^0.7.4",
42
+ "@atproto/syntax": "^0.6.4"
39
43
  },
40
44
  "scripts": {
41
45
  "build": "tsgo --build tsconfig.build.json"