@atproto/lex-cli 0.10.0 → 0.10.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @atproto/lex-cli
2
2
 
3
+ ## 0.10.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [#5151](https://github.com/bluesky-social/atproto/pull/5151) [`a51c45d`](https://github.com/bluesky-social/atproto/commit/a51c45d38f6bd7b8765f640e564cf921d52162e7) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Update dependencies
8
+
9
+ - Updated dependencies [[`a51c45d`](https://github.com/bluesky-social/atproto/commit/a51c45d38f6bd7b8765f640e564cf921d52162e7)]:
10
+ - @atproto/lexicon@0.7.3
11
+ - @atproto/syntax@0.6.3
12
+
13
+ ## 0.10.1
14
+
15
+ ### Patch Changes
16
+
17
+ - [#4967](https://github.com/bluesky-social/atproto/pull/4967) [`9fc720c`](https://github.com/bluesky-social/atproto/commit/9fc720ce75f3ee88a5e48a9be919b07c7647f6f5) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Use TypeScript 7 to build package
18
+
19
+ - Updated dependencies [[`9fc720c`](https://github.com/bluesky-social/atproto/commit/9fc720ce75f3ee88a5e48a9be919b07c7647f6f5)]:
20
+ - @atproto/lexicon@0.7.2
21
+ - @atproto/syntax@0.6.2
22
+
3
23
  ## 0.10.0
4
24
 
5
25
  ### Minor Changes
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/codegen/common.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,UAAU,EAA2B,MAAM,UAAU,CAAA;AACvE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAWhD,eAAO,MAAM,MAAM,GAAI,YAAO,2BAuH1B,CAAA;AAEJ,eAAO,MAAM,UAAU,GAAI,YAAO,EAAE,UAAU,UAAU,EAAE,2BA8HtD,CAAA;AAEJ,wBAAsB,GAAG,CACvB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GACvC,OAAO,CAAC,aAAa,CAAC,CAQxB"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/codegen/common.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,UAAU,EAA2B,MAAM,UAAU,CAAA;AACvE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAA;AAWhD,eAAO,MAAM,MAAM,0CAuHf,CAAA;AAEJ,eAAO,MAAM,UAAU,2BAAuB,UAAU,EAAE,2BA8HtD,CAAA;AAEJ,wBAAsB,GAAG,CACvB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,GACvC,OAAO,CAAC,aAAa,CAAC,CAQxB"}
@@ -45,11 +45,11 @@ export function genCommonImports(file, baseNsid) {
45
45
  { name: 'is$typed', alias: '_is$typed' },
46
46
  { name: 'OmitKey', isTypeOnly: true },
47
47
  ]);
48
- // tsc adds protection against circular imports, which hurts bundle size.
49
- // Since we know that lexicon.ts and util.ts do not depend on the file being
50
- // generated, we can safely bypass this protection.
51
- // Note that we are not using `import * as util from '../../util.js'` because
52
- // typescript will emit is own helpers for the import, which we want to avoid.
48
+ // TypeScript adds protection against circular imports, which hurts bundle
49
+ // size. Since we know that lexicon.ts and util.ts do not depend on the file
50
+ // being generated, we can safely bypass this protection. Note that we are not
51
+ // using `import * as util from '../../util.js'` because typescript will emit
52
+ // is own helpers for the import, which we want to avoid.
53
53
  file.addVariableStatement({
54
54
  isExported: false,
55
55
  declarationKind: VariableDeclarationKind.Const,
@@ -1 +1 @@
1
- {"version":3,"file":"lex-gen.js","sourceRoot":"","sources":["../../src/codegen/lex-gen.ts"],"names":[],"mappings":"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","sourcesContent":["import { relative as getRelativePath } from 'node:path/posix'\nimport { JSDoc, SourceFile, VariableDeclarationKind } from 'ts-morph'\nimport {\n type LexArray,\n type LexBlob,\n type LexBytes,\n type LexCidLink,\n type LexIpldType,\n type LexObject,\n type LexPrimitive,\n type LexToken,\n Lexicons,\n} from '@atproto/lexicon'\nimport { toCamelCase, toScreamingSnakeCase, toTitleCase } from './util.js'\n\ninterface Commentable {\n addJsDoc: ({ description }: { description: string }) => JSDoc\n}\nexport function genComment<T extends Commentable>(\n commentable: T,\n def: { description?: string },\n): T {\n if (def.description) {\n commentable.addJsDoc({ description: def.description })\n }\n return commentable\n}\n\nexport function genCommonImports(file: SourceFile, baseNsid: string) {\n //= import {ValidationResult, BlobRef} from '@atproto/lexicon'\n file\n .addImportDeclaration({\n moduleSpecifier: '@atproto/lexicon',\n })\n .addNamedImports([\n { name: 'ValidationResult', isTypeOnly: true },\n { name: 'BlobRef' },\n ])\n\n //= import {CID} from 'multiformats/cid'\n file\n .addImportDeclaration({\n moduleSpecifier: 'multiformats/cid',\n })\n .addNamedImports([{ name: 'CID' }])\n\n //= import { validate as _validate } from '../../lexicons.ts'\n file\n .addImportDeclaration({\n moduleSpecifier: `${baseNsid\n .split('.')\n .map((_str) => '..')\n .join('/')}/lexicons.js`,\n })\n .addNamedImports([{ name: 'validate', alias: '_validate' }])\n\n //= import { type $Typed, is$typed as _is$typed, type OmitKey } from '../[...]/util.ts'\n file\n .addImportDeclaration({\n moduleSpecifier: `${baseNsid\n .split('.')\n .map((_str) => '..')\n .join('/')}/util.js`,\n })\n .addNamedImports([\n { name: '$Typed', isTypeOnly: true },\n { name: 'is$typed', alias: '_is$typed' },\n { name: 'OmitKey', isTypeOnly: true },\n ])\n\n // tsc adds protection against circular imports, which hurts bundle size.\n // Since we know that lexicon.ts and util.ts do not depend on the file being\n // generated, we can safely bypass this protection.\n // Note that we are not using `import * as util from '../../util.js'` because\n // typescript will emit is own helpers for the import, which we want to avoid.\n file.addVariableStatement({\n isExported: false,\n declarationKind: VariableDeclarationKind.Const,\n declarations: [\n { name: 'is$typed', initializer: '_is$typed' },\n { name: 'validate', initializer: '_validate' },\n ],\n })\n\n //= const id = \"{baseNsid}\"\n file.addVariableStatement({\n isExported: false, // Do not export to allow tree-shaking\n declarationKind: VariableDeclarationKind.Const,\n declarations: [{ name: 'id', initializer: JSON.stringify(baseNsid) }],\n })\n}\n\nexport function genImports(\n file: SourceFile,\n imports: Set<string>,\n baseNsid: string,\n) {\n const startPath = '/' + baseNsid.split('.').slice(0, -1).join('/')\n\n for (const nsid of imports) {\n const targetPath = '/' + nsid.split('.').join('/') + '.js'\n let resolvedPath = getRelativePath(startPath, targetPath)\n if (!resolvedPath.startsWith('.')) {\n resolvedPath = `./${resolvedPath}`\n }\n file.addImportDeclaration({\n isTypeOnly: true,\n moduleSpecifier: resolvedPath,\n namespaceImport: toTitleCase(nsid),\n })\n }\n}\n\nexport function genUserType(\n file: SourceFile,\n imports: Set<string>,\n lexicons: Lexicons,\n lexUri: string,\n) {\n const def = lexicons.getDefOrThrow(lexUri)\n switch (def.type) {\n case 'array':\n genArray(file, imports, lexUri, def)\n break\n case 'token':\n genToken(file, lexUri, def)\n break\n case 'object': {\n const ifaceName: string = toTitleCase(getHash(lexUri))\n genObject(file, imports, lexUri, def, ifaceName, {\n typeProperty: true,\n })\n genObjHelpers(file, lexUri, ifaceName, {\n requireTypeProperty: false,\n })\n break\n }\n\n case 'blob':\n case 'bytes':\n case 'cid-link':\n case 'boolean':\n case 'integer':\n case 'string':\n case 'unknown':\n genPrimitiveOrBlob(file, lexUri, def)\n break\n\n default:\n throw new Error(\n `genLexUserType() called with wrong definition type (${def.type}) in ${lexUri}`,\n )\n }\n}\n\nfunction genObject(\n file: SourceFile,\n imports: Set<string>,\n lexUri: string,\n def: LexObject,\n ifaceName: string,\n {\n defaultsArePresent = true,\n allowUnknownProperties = false,\n typeProperty = false,\n }: {\n defaultsArePresent?: boolean\n allowUnknownProperties?: boolean\n typeProperty?: boolean | 'required'\n } = {},\n) {\n const iface = file.addInterface({\n name: ifaceName,\n isExported: true,\n })\n genComment(iface, def)\n\n if (typeProperty) {\n const hash = getHash(lexUri)\n const baseNsid = stripScheme(stripHash(lexUri))\n\n //= $type?: <uri>\n iface.addProperty({\n name: typeProperty === 'required' ? `$type` : `$type?`,\n type:\n // Not using $Type here because it is less readable than a plain string\n // `$Type<${JSON.stringify(baseNsid)}, ${JSON.stringify(hash)}>`\n hash === 'main'\n ? JSON.stringify(`${baseNsid}`)\n : JSON.stringify(`${baseNsid}#${hash}`),\n })\n }\n\n const nullableProps = new Set(def.nullable)\n if (def.properties) {\n for (const propKey in def.properties) {\n const propDef = def.properties[propKey]\n const propNullable = nullableProps.has(propKey)\n const req =\n def.required?.includes(propKey) ||\n (defaultsArePresent &&\n 'default' in propDef &&\n propDef.default !== undefined)\n if (propDef.type === 'ref' || propDef.type === 'union') {\n //= propName: External|External\n const types =\n propDef.type === 'union'\n ? propDef.refs.map((ref) => refToUnionType(ref, lexUri, imports))\n : [refToType(propDef.ref, stripScheme(stripHash(lexUri)), imports)]\n if (propDef.type === 'union' && !propDef.closed) {\n types.push('{ $type: string }')\n }\n iface.addProperty({\n name: `${propKey}${req ? '' : '?'}`,\n type: makeType(types, { nullable: propNullable }),\n })\n continue\n } else {\n if (propDef.type === 'array') {\n //= propName: type[]\n let propAst\n if (propDef.items.type === 'ref') {\n propAst = iface.addProperty({\n name: `${propKey}${req ? '' : '?'}`,\n type: makeType(\n refToType(\n propDef.items.ref,\n stripScheme(stripHash(lexUri)),\n imports,\n ),\n {\n nullable: propNullable,\n array: true,\n },\n ),\n })\n } else if (propDef.items.type === 'union') {\n const types = propDef.items.refs.map((ref) =>\n refToUnionType(ref, lexUri, imports),\n )\n if (!propDef.items.closed) {\n types.push('{ $type: string }')\n }\n propAst = iface.addProperty({\n name: `${propKey}${req ? '' : '?'}`,\n type: makeType(types, {\n nullable: propNullable,\n array: true,\n }),\n })\n } else {\n propAst = iface.addProperty({\n name: `${propKey}${req ? '' : '?'}`,\n type: makeType(primitiveOrBlobToType(propDef.items), {\n nullable: propNullable,\n array: true,\n }),\n })\n }\n genComment(propAst, propDef)\n } else {\n //= propName: type\n genComment(\n iface.addProperty({\n name: `${propKey}${req ? '' : '?'}`,\n type: makeType(primitiveOrBlobToType(propDef), {\n nullable: propNullable,\n }),\n }),\n propDef,\n )\n }\n }\n }\n\n if (allowUnknownProperties) {\n //= [k: string]: unknown\n iface.addIndexSignature({\n keyName: 'k',\n keyType: 'string',\n returnType: 'unknown',\n })\n }\n }\n}\n\nexport function genToken(file: SourceFile, lexUri: string, def: LexToken) {\n //= /** <comment> */\n //= export const <TOKEN> = `${id}#<token>`\n genComment(\n file.addVariableStatement({\n isExported: true,\n declarationKind: VariableDeclarationKind.Const,\n declarations: [\n {\n name: toScreamingSnakeCase(getHash(lexUri)),\n initializer: `\\`\\${id}#${getHash(lexUri)}\\``,\n },\n ],\n }),\n def,\n )\n}\n\nexport function genArray(\n file: SourceFile,\n imports: Set<string>,\n lexUri: string,\n def: LexArray,\n) {\n if (def.items.type === 'ref') {\n file.addTypeAlias({\n name: toTitleCase(getHash(lexUri)),\n type: `${refToType(\n def.items.ref,\n stripScheme(stripHash(lexUri)),\n imports,\n )}[]`,\n isExported: true,\n })\n } else if (def.items.type === 'union') {\n const types = def.items.refs.map((ref) =>\n refToUnionType(ref, lexUri, imports),\n )\n if (!def.items.closed) {\n types.push('{ $type: string }')\n }\n file.addTypeAlias({\n name: toTitleCase(getHash(lexUri)),\n type: `(${types.join('|')})[]`,\n isExported: true,\n })\n } else {\n genComment(\n file.addTypeAlias({\n name: toTitleCase(getHash(lexUri)),\n type: `${primitiveOrBlobToType(def.items)}[]`,\n isExported: true,\n }),\n def,\n )\n }\n}\n\nexport function genPrimitiveOrBlob(\n file: SourceFile,\n lexUri: string,\n def: LexPrimitive | LexBlob | LexIpldType,\n) {\n genComment(\n file.addTypeAlias({\n name: toTitleCase(getHash(lexUri)),\n type: primitiveOrBlobToType(def),\n isExported: true,\n }),\n def,\n )\n}\n\nexport function genXrpcParams(\n file: SourceFile,\n lexicons: Lexicons,\n lexUri: string,\n defaultsArePresent = true,\n) {\n const def = lexicons.getDefOrThrow(lexUri, [\n 'query',\n 'subscription',\n 'procedure',\n ])\n\n // @NOTE We need to use a `type` here instead of an `interface` because we\n // need the generated type to be used as generic type parameter like this:\n //\n // type QueryParams = {} // Generated by this function\n //\n // type MyUtil<P extends xrpcServer.QueryParam> = (...)\n // type NsType = MyUtil<NS.QueryParams> // ERROR if `NS.QueryParams` is an `interface`\n //\n // Second line will fail if `NS.QueryParams` is an `interface` that does\n // not explicitly extend `xrpcServer.QueryParam`, or have a string index\n // signature that encompasses `xrpcServer.QueryParam`.\n\n //= export type QueryParams = {...}\n if (def.parameters) {\n genComment(\n file.addTypeAlias({\n name: 'QueryParams',\n isExported: true,\n type: `{\n ${Object.entries(def.parameters.properties)\n .map(([paramKey, paramDef]) => {\n const req =\n def.parameters!.required?.includes(paramKey) ||\n (defaultsArePresent &&\n 'default' in paramDef &&\n paramDef.default !== undefined)\n const jsDoc = paramDef.description\n ? `/** ${paramDef.description} */\\n`\n : ''\n return `${jsDoc}${paramKey}${req ? '' : '?'}: ${\n paramDef.type === 'array'\n ? primitiveToType(paramDef.items) + '[]'\n : primitiveToType(paramDef)\n }`\n })\n .join('\\n')}\n }`,\n }),\n def.parameters,\n )\n } else {\n file.addTypeAlias({\n name: 'QueryParams',\n isExported: true,\n type: '{}',\n })\n }\n}\n\nexport function genXrpcInput(\n file: SourceFile,\n imports: Set<string>,\n lexicons: Lexicons,\n lexUri: string,\n defaultsArePresent = true,\n) {\n const def = lexicons.getDefOrThrow(lexUri, ['query', 'procedure'])\n\n if (def.type === 'procedure' && def.input?.schema) {\n if (def.input.schema.type === 'ref' || def.input.schema.type === 'union') {\n //= export type InputSchema = ...\n\n const types =\n def.input.schema.type === 'union'\n ? def.input.schema.refs.map((ref) =>\n refToUnionType(ref, lexUri, imports),\n )\n : [\n refToType(\n def.input.schema.ref,\n stripScheme(stripHash(lexUri)),\n imports,\n ),\n ]\n\n if (def.input.schema.type === 'union' && !def.input.schema.closed) {\n types.push('{ $type: string }')\n }\n file.addTypeAlias({\n name: 'InputSchema',\n type: types.join('|'),\n isExported: true,\n })\n } else {\n //= export interface InputSchema {...}\n genObject(file, imports, lexUri, def.input.schema, `InputSchema`, {\n defaultsArePresent,\n })\n }\n } else if (def.type === 'procedure' && def.input?.encoding) {\n //= export type InputSchema = string | Uint8Array | Blob\n file.addTypeAlias({\n isExported: true,\n name: 'InputSchema',\n type: 'string | Uint8Array | Blob',\n })\n } else {\n //= export type InputSchema = undefined\n file.addTypeAlias({\n isExported: true,\n name: 'InputSchema',\n type: 'undefined',\n })\n }\n}\n\nexport function genXrpcOutput(\n file: SourceFile,\n imports: Set<string>,\n lexicons: Lexicons,\n lexUri: string,\n defaultsArePresent = true,\n) {\n const def = lexicons.getDefOrThrow(lexUri, [\n 'query',\n 'subscription',\n 'procedure',\n ])\n\n const schema =\n def.type === 'subscription' ? def.message?.schema : def.output?.schema\n if (schema) {\n if (schema.type === 'ref' || schema.type === 'union') {\n //= export type OutputSchema = ...\n const types =\n schema.type === 'union'\n ? schema.refs.map((ref) => refToUnionType(ref, lexUri, imports))\n : [refToType(schema.ref, stripScheme(stripHash(lexUri)), imports)]\n if (schema.type === 'union' && !schema.closed) {\n types.push('{ $type: string }')\n }\n file.addTypeAlias({\n name: 'OutputSchema',\n type: types.join('|'),\n isExported: true,\n })\n } else {\n //= export interface OutputSchema {...}\n genObject(file, imports, lexUri, schema, `OutputSchema`, {\n defaultsArePresent,\n })\n }\n }\n}\n\nexport function genRecord(\n file: SourceFile,\n imports: Set<string>,\n lexicons: Lexicons,\n lexUri: string,\n) {\n const hash = getHash(lexUri)\n const ifaceName: string = toTitleCase(hash)\n const def = lexicons.getDefOrThrow(lexUri, ['record'])\n\n //= export interface {X} {...}\n genObject(file, imports, lexUri, def.record, ifaceName, {\n defaultsArePresent: true,\n allowUnknownProperties: true,\n typeProperty: 'required',\n })\n\n //= export function is{X}(v: unknown): v is {X} {...}\n genObjHelpers(file, lexUri, ifaceName, {\n requireTypeProperty: true,\n })\n\n // For convenience, we re-export the type and the type guard under the generic\n // names \"Record\", \"isRecord\" and \"validateRecord\".\n // @NOTE This does not account for potential name clashes with a potential\n // \"#record\" def.\n\n //= export { {X} as Record, is{X} as isRecord }\n file.addExportDeclaration({\n namedExports: [\n {\n isTypeOnly: true,\n name: ifaceName,\n alias: 'Record',\n },\n {\n name: `is${ifaceName}`,\n alias: 'isRecord',\n },\n {\n name: `validate${ifaceName}`,\n alias: 'validateRecord',\n },\n ],\n })\n}\n\nfunction genObjHelpers(\n file: SourceFile,\n lexUri: string,\n ifaceName: string,\n {\n requireTypeProperty,\n }: {\n requireTypeProperty: boolean\n },\n) {\n const hash = getHash(lexUri)\n\n const hashVar = `hash${ifaceName}`\n\n file.addVariableStatement({\n isExported: false,\n declarationKind: VariableDeclarationKind.Const,\n declarations: [{ name: hashVar, initializer: JSON.stringify(hash) }],\n })\n\n const isX = toCamelCase(`is-${ifaceName}`)\n\n //= export function is{X}<V>(v: V) {...}\n file\n .addFunction({\n name: isX,\n typeParameters: [{ name: `V` }],\n parameters: [{ name: `v`, type: `V` }],\n isExported: true,\n })\n .setBodyText(`return is$typed(v, id, ${hashVar})`)\n\n const validateX = toCamelCase(`validate-${ifaceName}`)\n\n //= export function validate{X}(v: unknown) {...}\n file\n .addFunction({\n name: validateX,\n typeParameters: [{ name: `V` }],\n parameters: [{ name: `v`, type: `V` }],\n isExported: true,\n })\n .setBodyText(\n `return validate<${ifaceName} & V>(v, id, ${hashVar}${requireTypeProperty ? ', true' : ''})`,\n )\n}\n\nexport function stripScheme(uri: string): string {\n if (uri.startsWith('lex:')) return uri.slice(4)\n return uri\n}\n\nexport function stripHash(uri: string): string {\n return uri.split('#')[0] || ''\n}\n\nexport function getHash(uri: string): string {\n return uri.split('#').pop() || ''\n}\n\nexport function ipldToType(def: LexCidLink | LexBytes) {\n if (def.type === 'bytes') {\n return 'Uint8Array'\n }\n return 'CID'\n}\n\nfunction refToUnionType(\n ref: string,\n lexUri: string,\n imports: Set<string>,\n): string {\n const baseNsid = stripScheme(stripHash(lexUri))\n return `$Typed<${refToType(ref, baseNsid, imports)}>`\n}\n\nfunction refToType(\n ref: string,\n baseNsid: string,\n imports: Set<string>,\n): string {\n // TODO: import external types!\n let [refBase, refHash] = ref.split('#')\n refBase = stripScheme(refBase)\n if (!refHash) refHash = 'main'\n\n // internal\n if (!refBase || baseNsid === refBase) {\n return toTitleCase(refHash)\n }\n\n // external\n imports.add(refBase)\n return `${toTitleCase(refBase)}.${toTitleCase(refHash)}`\n}\n\nexport function primitiveOrBlobToType(\n def: LexBlob | LexPrimitive | LexIpldType,\n): string {\n switch (def.type) {\n case 'blob':\n return 'BlobRef'\n case 'bytes':\n return 'Uint8Array'\n case 'cid-link':\n return 'CID'\n default:\n return primitiveToType(def)\n }\n}\n\nexport function primitiveToType(def: LexPrimitive): string {\n switch (def.type) {\n case 'string':\n if (def.knownValues?.length) {\n return `${def.knownValues\n .map((v) => JSON.stringify(v))\n .join(' | ')} | (string & {})`\n } else if (def.enum) {\n return def.enum.map((v) => JSON.stringify(v)).join(' | ')\n } else if (def.const) {\n return JSON.stringify(def.const)\n }\n return 'string'\n case 'integer':\n if (def.enum) {\n return def.enum.map((v) => JSON.stringify(v)).join(' | ')\n } else if (def.const) {\n return JSON.stringify(def.const)\n }\n return 'number'\n case 'boolean':\n if (def.const) {\n return JSON.stringify(def.const)\n }\n return 'boolean'\n case 'unknown':\n // @TODO Should we use \"object\" here ?\n // the \"Record\" identifier from typescript get overwritten by the Record\n // interface created by lex-cli.\n return '{ [_ in string]: unknown }' // Record<string, unknown>\n default:\n throw new Error(`Unexpected primitive type: ${JSON.stringify(def)}`)\n }\n}\n\nfunction makeType(\n _types: string | string[],\n opts?: { array?: boolean; nullable?: boolean },\n) {\n const types = ([] as string[]).concat(_types)\n if (opts?.nullable) types.push('null')\n const arr = opts?.array ? '[]' : ''\n if (types.length === 1) return `(${types[0]})${arr}`\n if (arr) return `(${types.join(' | ')})${arr}`\n return types.join(' | ')\n}\n"]}
1
+ {"version":3,"file":"lex-gen.js","sourceRoot":"","sources":["../../src/codegen/lex-gen.ts"],"names":[],"mappings":"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","sourcesContent":["import { relative as getRelativePath } from 'node:path/posix'\nimport { JSDoc, SourceFile, VariableDeclarationKind } from 'ts-morph'\nimport {\n type LexArray,\n type LexBlob,\n type LexBytes,\n type LexCidLink,\n type LexIpldType,\n type LexObject,\n type LexPrimitive,\n type LexToken,\n Lexicons,\n} from '@atproto/lexicon'\nimport { toCamelCase, toScreamingSnakeCase, toTitleCase } from './util.js'\n\ninterface Commentable {\n addJsDoc: ({ description }: { description: string }) => JSDoc\n}\nexport function genComment<T extends Commentable>(\n commentable: T,\n def: { description?: string },\n): T {\n if (def.description) {\n commentable.addJsDoc({ description: def.description })\n }\n return commentable\n}\n\nexport function genCommonImports(file: SourceFile, baseNsid: string) {\n //= import {ValidationResult, BlobRef} from '@atproto/lexicon'\n file\n .addImportDeclaration({\n moduleSpecifier: '@atproto/lexicon',\n })\n .addNamedImports([\n { name: 'ValidationResult', isTypeOnly: true },\n { name: 'BlobRef' },\n ])\n\n //= import {CID} from 'multiformats/cid'\n file\n .addImportDeclaration({\n moduleSpecifier: 'multiformats/cid',\n })\n .addNamedImports([{ name: 'CID' }])\n\n //= import { validate as _validate } from '../../lexicons.ts'\n file\n .addImportDeclaration({\n moduleSpecifier: `${baseNsid\n .split('.')\n .map((_str) => '..')\n .join('/')}/lexicons.js`,\n })\n .addNamedImports([{ name: 'validate', alias: '_validate' }])\n\n //= import { type $Typed, is$typed as _is$typed, type OmitKey } from '../[...]/util.ts'\n file\n .addImportDeclaration({\n moduleSpecifier: `${baseNsid\n .split('.')\n .map((_str) => '..')\n .join('/')}/util.js`,\n })\n .addNamedImports([\n { name: '$Typed', isTypeOnly: true },\n { name: 'is$typed', alias: '_is$typed' },\n { name: 'OmitKey', isTypeOnly: true },\n ])\n\n // TypeScript adds protection against circular imports, which hurts bundle\n // size. Since we know that lexicon.ts and util.ts do not depend on the file\n // being generated, we can safely bypass this protection. Note that we are not\n // using `import * as util from '../../util.js'` because typescript will emit\n // is own helpers for the import, which we want to avoid.\n file.addVariableStatement({\n isExported: false,\n declarationKind: VariableDeclarationKind.Const,\n declarations: [\n { name: 'is$typed', initializer: '_is$typed' },\n { name: 'validate', initializer: '_validate' },\n ],\n })\n\n //= const id = \"{baseNsid}\"\n file.addVariableStatement({\n isExported: false, // Do not export to allow tree-shaking\n declarationKind: VariableDeclarationKind.Const,\n declarations: [{ name: 'id', initializer: JSON.stringify(baseNsid) }],\n })\n}\n\nexport function genImports(\n file: SourceFile,\n imports: Set<string>,\n baseNsid: string,\n) {\n const startPath = '/' + baseNsid.split('.').slice(0, -1).join('/')\n\n for (const nsid of imports) {\n const targetPath = '/' + nsid.split('.').join('/') + '.js'\n let resolvedPath = getRelativePath(startPath, targetPath)\n if (!resolvedPath.startsWith('.')) {\n resolvedPath = `./${resolvedPath}`\n }\n file.addImportDeclaration({\n isTypeOnly: true,\n moduleSpecifier: resolvedPath,\n namespaceImport: toTitleCase(nsid),\n })\n }\n}\n\nexport function genUserType(\n file: SourceFile,\n imports: Set<string>,\n lexicons: Lexicons,\n lexUri: string,\n) {\n const def = lexicons.getDefOrThrow(lexUri)\n switch (def.type) {\n case 'array':\n genArray(file, imports, lexUri, def)\n break\n case 'token':\n genToken(file, lexUri, def)\n break\n case 'object': {\n const ifaceName: string = toTitleCase(getHash(lexUri))\n genObject(file, imports, lexUri, def, ifaceName, {\n typeProperty: true,\n })\n genObjHelpers(file, lexUri, ifaceName, {\n requireTypeProperty: false,\n })\n break\n }\n\n case 'blob':\n case 'bytes':\n case 'cid-link':\n case 'boolean':\n case 'integer':\n case 'string':\n case 'unknown':\n genPrimitiveOrBlob(file, lexUri, def)\n break\n\n default:\n throw new Error(\n `genLexUserType() called with wrong definition type (${def.type}) in ${lexUri}`,\n )\n }\n}\n\nfunction genObject(\n file: SourceFile,\n imports: Set<string>,\n lexUri: string,\n def: LexObject,\n ifaceName: string,\n {\n defaultsArePresent = true,\n allowUnknownProperties = false,\n typeProperty = false,\n }: {\n defaultsArePresent?: boolean\n allowUnknownProperties?: boolean\n typeProperty?: boolean | 'required'\n } = {},\n) {\n const iface = file.addInterface({\n name: ifaceName,\n isExported: true,\n })\n genComment(iface, def)\n\n if (typeProperty) {\n const hash = getHash(lexUri)\n const baseNsid = stripScheme(stripHash(lexUri))\n\n //= $type?: <uri>\n iface.addProperty({\n name: typeProperty === 'required' ? `$type` : `$type?`,\n type:\n // Not using $Type here because it is less readable than a plain string\n // `$Type<${JSON.stringify(baseNsid)}, ${JSON.stringify(hash)}>`\n hash === 'main'\n ? JSON.stringify(`${baseNsid}`)\n : JSON.stringify(`${baseNsid}#${hash}`),\n })\n }\n\n const nullableProps = new Set(def.nullable)\n if (def.properties) {\n for (const propKey in def.properties) {\n const propDef = def.properties[propKey]\n const propNullable = nullableProps.has(propKey)\n const req =\n def.required?.includes(propKey) ||\n (defaultsArePresent &&\n 'default' in propDef &&\n propDef.default !== undefined)\n if (propDef.type === 'ref' || propDef.type === 'union') {\n //= propName: External|External\n const types =\n propDef.type === 'union'\n ? propDef.refs.map((ref) => refToUnionType(ref, lexUri, imports))\n : [refToType(propDef.ref, stripScheme(stripHash(lexUri)), imports)]\n if (propDef.type === 'union' && !propDef.closed) {\n types.push('{ $type: string }')\n }\n iface.addProperty({\n name: `${propKey}${req ? '' : '?'}`,\n type: makeType(types, { nullable: propNullable }),\n })\n continue\n } else {\n if (propDef.type === 'array') {\n //= propName: type[]\n let propAst\n if (propDef.items.type === 'ref') {\n propAst = iface.addProperty({\n name: `${propKey}${req ? '' : '?'}`,\n type: makeType(\n refToType(\n propDef.items.ref,\n stripScheme(stripHash(lexUri)),\n imports,\n ),\n {\n nullable: propNullable,\n array: true,\n },\n ),\n })\n } else if (propDef.items.type === 'union') {\n const types = propDef.items.refs.map((ref) =>\n refToUnionType(ref, lexUri, imports),\n )\n if (!propDef.items.closed) {\n types.push('{ $type: string }')\n }\n propAst = iface.addProperty({\n name: `${propKey}${req ? '' : '?'}`,\n type: makeType(types, {\n nullable: propNullable,\n array: true,\n }),\n })\n } else {\n propAst = iface.addProperty({\n name: `${propKey}${req ? '' : '?'}`,\n type: makeType(primitiveOrBlobToType(propDef.items), {\n nullable: propNullable,\n array: true,\n }),\n })\n }\n genComment(propAst, propDef)\n } else {\n //= propName: type\n genComment(\n iface.addProperty({\n name: `${propKey}${req ? '' : '?'}`,\n type: makeType(primitiveOrBlobToType(propDef), {\n nullable: propNullable,\n }),\n }),\n propDef,\n )\n }\n }\n }\n\n if (allowUnknownProperties) {\n //= [k: string]: unknown\n iface.addIndexSignature({\n keyName: 'k',\n keyType: 'string',\n returnType: 'unknown',\n })\n }\n }\n}\n\nexport function genToken(file: SourceFile, lexUri: string, def: LexToken) {\n //= /** <comment> */\n //= export const <TOKEN> = `${id}#<token>`\n genComment(\n file.addVariableStatement({\n isExported: true,\n declarationKind: VariableDeclarationKind.Const,\n declarations: [\n {\n name: toScreamingSnakeCase(getHash(lexUri)),\n initializer: `\\`\\${id}#${getHash(lexUri)}\\``,\n },\n ],\n }),\n def,\n )\n}\n\nexport function genArray(\n file: SourceFile,\n imports: Set<string>,\n lexUri: string,\n def: LexArray,\n) {\n if (def.items.type === 'ref') {\n file.addTypeAlias({\n name: toTitleCase(getHash(lexUri)),\n type: `${refToType(\n def.items.ref,\n stripScheme(stripHash(lexUri)),\n imports,\n )}[]`,\n isExported: true,\n })\n } else if (def.items.type === 'union') {\n const types = def.items.refs.map((ref) =>\n refToUnionType(ref, lexUri, imports),\n )\n if (!def.items.closed) {\n types.push('{ $type: string }')\n }\n file.addTypeAlias({\n name: toTitleCase(getHash(lexUri)),\n type: `(${types.join('|')})[]`,\n isExported: true,\n })\n } else {\n genComment(\n file.addTypeAlias({\n name: toTitleCase(getHash(lexUri)),\n type: `${primitiveOrBlobToType(def.items)}[]`,\n isExported: true,\n }),\n def,\n )\n }\n}\n\nexport function genPrimitiveOrBlob(\n file: SourceFile,\n lexUri: string,\n def: LexPrimitive | LexBlob | LexIpldType,\n) {\n genComment(\n file.addTypeAlias({\n name: toTitleCase(getHash(lexUri)),\n type: primitiveOrBlobToType(def),\n isExported: true,\n }),\n def,\n )\n}\n\nexport function genXrpcParams(\n file: SourceFile,\n lexicons: Lexicons,\n lexUri: string,\n defaultsArePresent = true,\n) {\n const def = lexicons.getDefOrThrow(lexUri, [\n 'query',\n 'subscription',\n 'procedure',\n ])\n\n // @NOTE We need to use a `type` here instead of an `interface` because we\n // need the generated type to be used as generic type parameter like this:\n //\n // type QueryParams = {} // Generated by this function\n //\n // type MyUtil<P extends xrpcServer.QueryParam> = (...)\n // type NsType = MyUtil<NS.QueryParams> // ERROR if `NS.QueryParams` is an `interface`\n //\n // Second line will fail if `NS.QueryParams` is an `interface` that does\n // not explicitly extend `xrpcServer.QueryParam`, or have a string index\n // signature that encompasses `xrpcServer.QueryParam`.\n\n //= export type QueryParams = {...}\n if (def.parameters) {\n genComment(\n file.addTypeAlias({\n name: 'QueryParams',\n isExported: true,\n type: `{\n ${Object.entries(def.parameters.properties)\n .map(([paramKey, paramDef]) => {\n const req =\n def.parameters!.required?.includes(paramKey) ||\n (defaultsArePresent &&\n 'default' in paramDef &&\n paramDef.default !== undefined)\n const jsDoc = paramDef.description\n ? `/** ${paramDef.description} */\\n`\n : ''\n return `${jsDoc}${paramKey}${req ? '' : '?'}: ${\n paramDef.type === 'array'\n ? primitiveToType(paramDef.items) + '[]'\n : primitiveToType(paramDef)\n }`\n })\n .join('\\n')}\n }`,\n }),\n def.parameters,\n )\n } else {\n file.addTypeAlias({\n name: 'QueryParams',\n isExported: true,\n type: '{}',\n })\n }\n}\n\nexport function genXrpcInput(\n file: SourceFile,\n imports: Set<string>,\n lexicons: Lexicons,\n lexUri: string,\n defaultsArePresent = true,\n) {\n const def = lexicons.getDefOrThrow(lexUri, ['query', 'procedure'])\n\n if (def.type === 'procedure' && def.input?.schema) {\n if (def.input.schema.type === 'ref' || def.input.schema.type === 'union') {\n //= export type InputSchema = ...\n\n const types =\n def.input.schema.type === 'union'\n ? def.input.schema.refs.map((ref) =>\n refToUnionType(ref, lexUri, imports),\n )\n : [\n refToType(\n def.input.schema.ref,\n stripScheme(stripHash(lexUri)),\n imports,\n ),\n ]\n\n if (def.input.schema.type === 'union' && !def.input.schema.closed) {\n types.push('{ $type: string }')\n }\n file.addTypeAlias({\n name: 'InputSchema',\n type: types.join('|'),\n isExported: true,\n })\n } else {\n //= export interface InputSchema {...}\n genObject(file, imports, lexUri, def.input.schema, `InputSchema`, {\n defaultsArePresent,\n })\n }\n } else if (def.type === 'procedure' && def.input?.encoding) {\n //= export type InputSchema = string | Uint8Array | Blob\n file.addTypeAlias({\n isExported: true,\n name: 'InputSchema',\n type: 'string | Uint8Array | Blob',\n })\n } else {\n //= export type InputSchema = undefined\n file.addTypeAlias({\n isExported: true,\n name: 'InputSchema',\n type: 'undefined',\n })\n }\n}\n\nexport function genXrpcOutput(\n file: SourceFile,\n imports: Set<string>,\n lexicons: Lexicons,\n lexUri: string,\n defaultsArePresent = true,\n) {\n const def = lexicons.getDefOrThrow(lexUri, [\n 'query',\n 'subscription',\n 'procedure',\n ])\n\n const schema =\n def.type === 'subscription' ? def.message?.schema : def.output?.schema\n if (schema) {\n if (schema.type === 'ref' || schema.type === 'union') {\n //= export type OutputSchema = ...\n const types =\n schema.type === 'union'\n ? schema.refs.map((ref) => refToUnionType(ref, lexUri, imports))\n : [refToType(schema.ref, stripScheme(stripHash(lexUri)), imports)]\n if (schema.type === 'union' && !schema.closed) {\n types.push('{ $type: string }')\n }\n file.addTypeAlias({\n name: 'OutputSchema',\n type: types.join('|'),\n isExported: true,\n })\n } else {\n //= export interface OutputSchema {...}\n genObject(file, imports, lexUri, schema, `OutputSchema`, {\n defaultsArePresent,\n })\n }\n }\n}\n\nexport function genRecord(\n file: SourceFile,\n imports: Set<string>,\n lexicons: Lexicons,\n lexUri: string,\n) {\n const hash = getHash(lexUri)\n const ifaceName: string = toTitleCase(hash)\n const def = lexicons.getDefOrThrow(lexUri, ['record'])\n\n //= export interface {X} {...}\n genObject(file, imports, lexUri, def.record, ifaceName, {\n defaultsArePresent: true,\n allowUnknownProperties: true,\n typeProperty: 'required',\n })\n\n //= export function is{X}(v: unknown): v is {X} {...}\n genObjHelpers(file, lexUri, ifaceName, {\n requireTypeProperty: true,\n })\n\n // For convenience, we re-export the type and the type guard under the generic\n // names \"Record\", \"isRecord\" and \"validateRecord\".\n // @NOTE This does not account for potential name clashes with a potential\n // \"#record\" def.\n\n //= export { {X} as Record, is{X} as isRecord }\n file.addExportDeclaration({\n namedExports: [\n {\n isTypeOnly: true,\n name: ifaceName,\n alias: 'Record',\n },\n {\n name: `is${ifaceName}`,\n alias: 'isRecord',\n },\n {\n name: `validate${ifaceName}`,\n alias: 'validateRecord',\n },\n ],\n })\n}\n\nfunction genObjHelpers(\n file: SourceFile,\n lexUri: string,\n ifaceName: string,\n {\n requireTypeProperty,\n }: {\n requireTypeProperty: boolean\n },\n) {\n const hash = getHash(lexUri)\n\n const hashVar = `hash${ifaceName}`\n\n file.addVariableStatement({\n isExported: false,\n declarationKind: VariableDeclarationKind.Const,\n declarations: [{ name: hashVar, initializer: JSON.stringify(hash) }],\n })\n\n const isX = toCamelCase(`is-${ifaceName}`)\n\n //= export function is{X}<V>(v: V) {...}\n file\n .addFunction({\n name: isX,\n typeParameters: [{ name: `V` }],\n parameters: [{ name: `v`, type: `V` }],\n isExported: true,\n })\n .setBodyText(`return is$typed(v, id, ${hashVar})`)\n\n const validateX = toCamelCase(`validate-${ifaceName}`)\n\n //= export function validate{X}(v: unknown) {...}\n file\n .addFunction({\n name: validateX,\n typeParameters: [{ name: `V` }],\n parameters: [{ name: `v`, type: `V` }],\n isExported: true,\n })\n .setBodyText(\n `return validate<${ifaceName} & V>(v, id, ${hashVar}${requireTypeProperty ? ', true' : ''})`,\n )\n}\n\nexport function stripScheme(uri: string): string {\n if (uri.startsWith('lex:')) return uri.slice(4)\n return uri\n}\n\nexport function stripHash(uri: string): string {\n return uri.split('#')[0] || ''\n}\n\nexport function getHash(uri: string): string {\n return uri.split('#').pop() || ''\n}\n\nexport function ipldToType(def: LexCidLink | LexBytes) {\n if (def.type === 'bytes') {\n return 'Uint8Array'\n }\n return 'CID'\n}\n\nfunction refToUnionType(\n ref: string,\n lexUri: string,\n imports: Set<string>,\n): string {\n const baseNsid = stripScheme(stripHash(lexUri))\n return `$Typed<${refToType(ref, baseNsid, imports)}>`\n}\n\nfunction refToType(\n ref: string,\n baseNsid: string,\n imports: Set<string>,\n): string {\n // TODO: import external types!\n let [refBase, refHash] = ref.split('#')\n refBase = stripScheme(refBase)\n if (!refHash) refHash = 'main'\n\n // internal\n if (!refBase || baseNsid === refBase) {\n return toTitleCase(refHash)\n }\n\n // external\n imports.add(refBase)\n return `${toTitleCase(refBase)}.${toTitleCase(refHash)}`\n}\n\nexport function primitiveOrBlobToType(\n def: LexBlob | LexPrimitive | LexIpldType,\n): string {\n switch (def.type) {\n case 'blob':\n return 'BlobRef'\n case 'bytes':\n return 'Uint8Array'\n case 'cid-link':\n return 'CID'\n default:\n return primitiveToType(def)\n }\n}\n\nexport function primitiveToType(def: LexPrimitive): string {\n switch (def.type) {\n case 'string':\n if (def.knownValues?.length) {\n return `${def.knownValues\n .map((v) => JSON.stringify(v))\n .join(' | ')} | (string & {})`\n } else if (def.enum) {\n return def.enum.map((v) => JSON.stringify(v)).join(' | ')\n } else if (def.const) {\n return JSON.stringify(def.const)\n }\n return 'string'\n case 'integer':\n if (def.enum) {\n return def.enum.map((v) => JSON.stringify(v)).join(' | ')\n } else if (def.const) {\n return JSON.stringify(def.const)\n }\n return 'number'\n case 'boolean':\n if (def.const) {\n return JSON.stringify(def.const)\n }\n return 'boolean'\n case 'unknown':\n // @TODO Should we use \"object\" here ?\n // the \"Record\" identifier from typescript get overwritten by the Record\n // interface created by lex-cli.\n return '{ [_ in string]: unknown }' // Record<string, unknown>\n default:\n throw new Error(`Unexpected primitive type: ${JSON.stringify(def)}`)\n }\n}\n\nfunction makeType(\n _types: string | string[],\n opts?: { array?: boolean; nullable?: boolean },\n) {\n const types = ([] as string[]).concat(_types)\n if (opts?.nullable) types.push('null')\n const arr = opts?.array ? '[]' : ''\n if (types.length === 1) return `(${types[0]})${arr}`\n if (arr) return `(${types.join(' | ')})${arr}`\n return types.join(' | ')\n}\n"]}
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, 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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atproto/lex-cli",
3
- "version": "0.10.0",
3
+ "version": "0.10.2",
4
4
  "license": "MIT",
5
5
  "description": "TypeScript codegen tool for atproto Lexicon schemas",
6
6
  "keywords": [
@@ -26,12 +26,10 @@
26
26
  "ts-morph": "^24.0.0",
27
27
  "yesno": "^0.4.0",
28
28
  "zod": "^3.23.8",
29
- "@atproto/lexicon": "^0.7.0",
30
- "@atproto/syntax": "^0.6.0"
31
- },
32
- "devDependencies": {
33
- "typescript": "^6.0.3"
29
+ "@atproto/lexicon": "^0.7.3",
30
+ "@atproto/syntax": "^0.6.3"
34
31
  },
32
+ "devDependencies": {},
35
33
  "type": "module",
36
34
  "exports": {
37
35
  ".": {
@@ -40,6 +38,6 @@
40
38
  }
41
39
  },
42
40
  "scripts": {
43
- "build": "tsc --build tsconfig.build.json"
41
+ "build": "tsgo --build tsconfig.build.json"
44
42
  }
45
43
  }
@@ -68,11 +68,11 @@ export function genCommonImports(file: SourceFile, baseNsid: string) {
68
68
  { name: 'OmitKey', isTypeOnly: true },
69
69
  ])
70
70
 
71
- // tsc adds protection against circular imports, which hurts bundle size.
72
- // Since we know that lexicon.ts and util.ts do not depend on the file being
73
- // generated, we can safely bypass this protection.
74
- // Note that we are not using `import * as util from '../../util.js'` because
75
- // typescript will emit is own helpers for the import, which we want to avoid.
71
+ // TypeScript adds protection against circular imports, which hurts bundle
72
+ // size. Since we know that lexicon.ts and util.ts do not depend on the file
73
+ // being generated, we can safely bypass this protection. Note that we are not
74
+ // using `import * as util from '../../util.js'` because typescript will emit
75
+ // is own helpers for the import, which we want to avoid.
76
76
  file.addVariableStatement({
77
77
  isExported: false,
78
78
  declarationKind: VariableDeclarationKind.Const,
@@ -2,7 +2,7 @@
2
2
  "extends": "../../tsconfig/node.json",
3
3
  "compilerOptions": {
4
4
  "rootDir": "./src",
5
- "outDir": "./dist"
5
+ "outDir": "./dist",
6
6
  },
7
- "include": ["./src"]
7
+ "include": ["./src"],
8
8
  }
@@ -1 +1 @@
1
- {"root":["./src/index.ts","./src/types.ts","./src/util.ts","./src/codegen/client.ts","./src/codegen/common.ts","./src/codegen/lex-gen.ts","./src/codegen/server.ts","./src/codegen/util.ts","./src/mdgen/index.ts"],"version":"6.0.3"}
1
+ {"version":"7.0.0-dev.20260614.1","root":["./src/index.ts","./src/types.ts","./src/util.ts","./src/codegen/client.ts","./src/codegen/common.ts","./src/codegen/lex-gen.ts","./src/codegen/server.ts","./src/codegen/util.ts","./src/mdgen/index.ts"]}
package/tsconfig.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "include": [],
3
- "references": [{ "path": "./tsconfig.build.json" }]
3
+ "references": [{ "path": "./tsconfig.build.json" }],
4
4
  }