WIP: A simple cli for daily tangled use cases and AI integration. This is for my personal use right now, but happy if others get mileage from it! :)

Configure TypeScript for lexicon compatibility and add documentation

- Update tsconfig.json:
- Exclude src/lexicon/** from compilation (generated code has compatibility issues)
- Exclude tests/**/* from build output (tests are type-checked separately)
- Only include src/**/* in build

- Regenerate lexicons with post-processing fixes applied:
- All multiformats/cid imports now use main package export
- All relative imports now have .js extensions

- Add comprehensive src/lexicon/README.md documenting:
- Code generation workflow
- Dependencies and multiformats usage
- Recommended usage patterns (custom interfaces)
- Known issues and workarounds
- Troubleshooting guide

This allows TypeScript to compile cleanly while still providing type
information from generated lexicons for IDE support.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

markbennett.ca a9d11159 2d4bcdb6

verified
+336 -168
+168
src/lexicon/README.md
··· 1 + # Generated Lexicon Code 2 + 3 + This directory contains automatically generated TypeScript code from AT Protocol lexicon definitions for the Tangled.org service. 4 + 5 + ## ⚠️ Do Not Edit 6 + 7 + **IMPORTANT**: All files in this directory are generated by `@atproto/lex-cli` and should not be manually edited. Any changes will be overwritten the next time code generation runs. 8 + 9 + ## Source 10 + 11 + The lexicon definitions are vendored in `/lexicons/` directory from: 12 + - **Source**: `https://tangled.org/tangled.org/core/raw/master/lexicons/` 13 + - **Repository**: `https://tangled.org/tangled.org/core` 14 + 15 + ## Code Generation 16 + 17 + To regenerate this code after updating lexicons: 18 + 19 + ```bash 20 + npm run codegen 21 + ``` 22 + 23 + This command: 24 + 1. Runs `@atproto/lex-cli` to generate TypeScript types from lexicons 25 + 2. Automatically fixes ES module imports by adding `.js` extensions 26 + 3. Rewrites `multiformats/cid` imports to use the main package export 27 + 28 + ## Dependencies 29 + 30 + The generated code requires: 31 + - `@atproto/api` - AT Protocol client library 32 + - `@atproto/lexicon` - Lexicon validation runtime 33 + - `multiformats` - CID (Content Identifier) support for content addressing 34 + 35 + These are already included in `package.json` dependencies. 36 + 37 + **Note on multiformats**: The code generator produces `import { CID } from 'multiformats/cid'` which TypeScript NodeNext module resolution cannot find. Our post-processing script (`scripts/fix-lexicon-imports.js`) automatically rewrites this to `import { CID } from 'multiformats'`, which uses the main package export and resolves correctly. 38 + 39 + ## Using Generated Types 40 + 41 + ### Recommended Approach 42 + 43 + **Define your own interfaces** based on the lexicon schemas rather than importing from generated code. This avoids TypeScript compatibility issues with the generated code. 44 + 45 + Example: 46 + 47 + ```typescript 48 + // src/lib/issues-api.ts 49 + /** 50 + * Issue record type based on sh.tangled.repo.issue lexicon 51 + * @see lexicons/sh/tangled/issue/issue.json 52 + */ 53 + export interface IssueRecord { 54 + $type: 'sh.tangled.repo.issue'; 55 + repo: string; 56 + title: string; 57 + body?: string; 58 + createdAt: string; 59 + mentions?: string[]; 60 + references?: string[]; 61 + [key: string]: unknown; // Required for AT Protocol record compatibility 62 + } 63 + ``` 64 + 65 + ### Direct Import (Not Recommended) 66 + 67 + If you must import directly from generated code: 68 + 69 + ```typescript 70 + import type { Record as IssueRecord } from './lexicon/types/sh/tangled/repo/issue.js'; 71 + ``` 72 + 73 + **Note**: Direct imports may cause TypeScript compilation issues. The generated code is excluded from TypeScript compilation (`tsconfig.json` excludes `src/lexicon/**`) to avoid compatibility problems. 74 + 75 + ## Known Issues 76 + 77 + The generated code has some compatibility issues with strict TypeScript configurations: 78 + 79 + 1. **Unused imports**: Generated code imports types that aren't always used (CID, BlobRef, $Typed, OmitKey) 80 + 2. **Property compatibility**: `needsCbor` properties may not match current `@atproto/lexicon` types 81 + 82 + These issues are inherent to the code generator. We work around them by: 83 + - Excluding `src/lexicon/**` from TypeScript compilation in `tsconfig.json` 84 + - Defining our own interfaces based on lexicon schemas for use in application code 85 + - Post-processing generated files to fix module resolution issues 86 + 87 + ## Post-Processing 88 + 89 + After generation, `scripts/fix-lexicon-imports.js` automatically: 90 + - Adds `.js` extensions to relative imports for ES module compatibility 91 + - Rewrites `import { CID } from 'multiformats/cid'` to `import { CID } from 'multiformats'` 92 + - Ensures proper module resolution with TypeScript NodeNext 93 + 94 + ## Structure 95 + 96 + ``` 97 + src/lexicon/ 98 + ├── README.md # This file 99 + ├── index.ts # Main exports (generated) 100 + ├── lexicons.ts # Lexicon schemas (generated) 101 + ├── util.ts # Utility types (generated) 102 + └── types/ 103 + └── sh/ 104 + └── tangled/ 105 + ├── repo/ 106 + │ ├── issue.ts # Issue record types 107 + │ ├── pull.ts # Pull request types 108 + │ └── ... 109 + ├── actor/ 110 + │ └── profile.ts 111 + ├── feed/ 112 + ├── graph/ 113 + └── ... 114 + ``` 115 + 116 + ## Updating Lexicons 117 + 118 + When Tangled.org updates their lexicon schemas: 119 + 120 + 1. **Fetch latest lexicons**: 121 + ```bash 122 + npm run update-lexicons 123 + ``` 124 + 125 + 2. **Regenerate TypeScript code**: 126 + ```bash 127 + npm run codegen 128 + ``` 129 + 130 + 3. **Review changes**: 131 + - Check `git diff` to see what changed 132 + - Update any custom interfaces if lexicon schemas changed 133 + - Run tests: `npm test` 134 + - Verify TypeScript compiles: `npm run typecheck` 135 + 136 + 4. **Commit both lexicon and generated code changes**: 137 + ```bash 138 + git add lexicons/ src/lexicon/ 139 + git commit -m "Update Tangled lexicons and regenerate client code" 140 + ``` 141 + 142 + ## Troubleshooting 143 + 144 + ### TypeScript Errors 145 + 146 + If you see TypeScript errors from `src/lexicon/**`, this is expected. The generated code is excluded from compilation. As long as your application code (outside `src/lexicon/`) compiles, you're good. 147 + 148 + ### Build Failures 149 + 150 + If the build fails after regenerating lexicons: 151 + 152 + 1. Check if any lexicon schemas changed structure 153 + 2. Update your custom interfaces to match new schemas 154 + 3. Ensure `scripts/fix-lexicon-imports.js` ran successfully 155 + 156 + ### Import Errors 157 + 158 + If you see module resolution errors: 159 + 160 + 1. Ensure imports use `.js` extensions 161 + 2. Run `npm run codegen` to regenerate and fix imports 162 + 3. Check that `multiformats` is installed: `npm ls multiformats` 163 + 164 + ## Reference 165 + 166 + - [AT Protocol Lexicon Specification](https://atproto.com/specs/lexicon) 167 + - [Tangled.org Core Repository](https://tangled.org/tangled.org/core) 168 + - [@atproto/lex-cli Documentation](https://github.com/bluesky-social/atproto/tree/main/packages/lex-cli)
+1 -1
src/lexicon/index.ts
··· 7 7 type FetchHandlerOptions, 8 8 } from '@atproto/xrpc' 9 9 import { schemas } from './lexicons.js' 10 - import { CID } from 'multiformats/cid' 10 + import { CID } from 'multiformats' 11 11 import { type OmitKey, type Un$Typed } from './util.js' 12 12 import * as ShTangledActorProfile from './types/sh/tangled/actor/profile.js' 13 13 import * as ShTangledFeedReaction from './types/sh/tangled/feed/reaction.js'
+3 -3
src/lexicon/types/sh/tangled/actor/profile.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../util' 11 + } from '../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/feed/reaction.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../util' 11 + } from '../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/feed/star.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../util' 11 + } from '../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/git/refUpdate.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../util' 11 + } from '../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/graph/follow.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../util' 11 + } from '../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/knot.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../lexicons' 7 - import { type $Typed, is$typed as _is$typed, type OmitKey } from '../../../util' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../lexicons.js' 7 + import { type $Typed, is$typed as _is$typed, type OmitKey } from '../../../util.js' 8 8 9 9 const is$typed = _is$typed, 10 10 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/knot/listKeys.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/knot/member.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../util' 11 + } from '../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/knot/version.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/label/definition.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../util' 11 + } from '../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/label/op.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../util' 11 + } from '../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/pipeline.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../lexicons' 7 - import { type $Typed, is$typed as _is$typed, type OmitKey } from '../../../util' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../lexicons.js' 7 + import { type $Typed, is$typed as _is$typed, type OmitKey } from '../../../util.js' 8 8 9 9 const is$typed = _is$typed, 10 10 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/pipeline/cancelPipeline.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/pipeline/status.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../util' 11 + } from '../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../lexicons' 7 - import { type $Typed, is$typed as _is$typed, type OmitKey } from '../../../util' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../lexicons.js' 7 + import { type $Typed, is$typed as _is$typed, type OmitKey } from '../../../util.js' 8 8 9 9 const is$typed = _is$typed, 10 10 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/addSecret.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/archive.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/artifact.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../util' 11 + } from '../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/blob.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/branch.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/branches.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/collaborator.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../util' 11 + } from '../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/compare.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/create.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/delete.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/deleteBranch.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/diff.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/forkStatus.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/forkSync.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/getDefaultBranch.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/hiddenRef.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/issue.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../util' 11 + } from '../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/issue/comment.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../../util' 11 + } from '../../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/issue/state.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../../util' 11 + } from '../../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/issue/state/closed.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../../../util' 11 + } from '../../../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/issue/state/open.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../../../util' 11 + } from '../../../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/languages.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/listSecrets.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/log.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/merge.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/mergeCheck.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/pull.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../util' 11 + } from '../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/pull/comment.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../../util' 11 + } from '../../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/pull/status.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../../util' 11 + } from '../../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/pull/status/closed.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../../../util' 11 + } from '../../../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/pull/status/merged.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../../../util' 11 + } from '../../../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/pull/status/open.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../../../util' 11 + } from '../../../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/removeSecret.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/setDefaultBranch.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/tag.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/tags.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/repo/tree.ts
··· 3 3 */ 4 4 import { HeadersMap, XRPCError } from '@atproto/xrpc' 5 5 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 6 - import { CID } from 'multiformats/cid' 7 - import { validate as _validate } from '../../../../lexicons' 6 + import { CID } from 'multiformats' 7 + import { validate as _validate } from '../../../../lexicons.js' 8 8 import { 9 9 type $Typed, 10 10 is$typed as _is$typed, 11 11 type OmitKey, 12 - } from '../../../../util' 12 + } from '../../../../util.js' 13 13 14 14 const is$typed = _is$typed, 15 15 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/spindle.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../lexicons' 7 - import { type $Typed, is$typed as _is$typed, type OmitKey } from '../../../util' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../lexicons.js' 7 + import { type $Typed, is$typed as _is$typed, type OmitKey } from '../../../util.js' 8 8 9 9 const is$typed = _is$typed, 10 10 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/spindle/member.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../../lexicons' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../../lexicons.js' 7 7 import { 8 8 type $Typed, 9 9 is$typed as _is$typed, 10 10 type OmitKey, 11 - } from '../../../../util' 11 + } from '../../../../util.js' 12 12 13 13 const is$typed = _is$typed, 14 14 validate = _validate
+3 -3
src/lexicon/types/sh/tangled/string.ts
··· 2 2 * GENERATED CODE - DO NOT MODIFY 3 3 */ 4 4 import { type ValidationResult, BlobRef } from '@atproto/lexicon' 5 - import { CID } from 'multiformats/cid' 6 - import { validate as _validate } from '../../../lexicons' 7 - import { type $Typed, is$typed as _is$typed, type OmitKey } from '../../../util' 5 + import { CID } from 'multiformats' 6 + import { validate as _validate } from '../../../lexicons.js' 7 + import { type $Typed, is$typed as _is$typed, type OmitKey } from '../../../util.js' 8 8 9 9 const is$typed = _is$typed, 10 10 validate = _validate
+2 -2
tsconfig.json
··· 19 19 "noFallthroughCasesInSwitch": true, 20 20 "allowSyntheticDefaultImports": true 21 21 }, 22 - "include": ["src/**/*", "tests/**/*"], 23 - "exclude": ["node_modules", "dist", "src/lexicon/**/*"] 22 + "include": ["src/**/*"], 23 + "exclude": ["node_modules", "dist", "src/lexicon/**", "tests/**/*"] 24 24 }