@atcute/lex-cli 2.4.0 → 2.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +107 -10
- package/dist/cli.js +10 -168
- package/dist/cli.js.map +1 -1
- package/dist/codegen.d.ts.map +1 -1
- package/dist/codegen.js +76 -78
- package/dist/codegen.js.map +1 -1
- package/dist/commands/export.d.ts +17 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +76 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/generate.d.ts +17 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +136 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/pull.d.ts +17 -0
- package/dist/commands/pull.d.ts.map +1 -0
- package/dist/{pull.js → commands/pull.js} +35 -81
- package/dist/commands/pull.js.map +1 -0
- package/dist/config.d.ts +68 -6
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +54 -3
- package/dist/config.js.map +1 -1
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js.map +1 -1
- package/dist/index.d.ts +65 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lexicon-loader.d.ts +17 -0
- package/dist/lexicon-loader.d.ts.map +1 -0
- package/dist/lexicon-loader.js +167 -0
- package/dist/lexicon-loader.js.map +1 -0
- package/dist/lexicon-metadata.js.map +1 -1
- package/dist/pull-sources/atproto.d.ts +17 -0
- package/dist/pull-sources/atproto.d.ts.map +1 -0
- package/dist/pull-sources/atproto.js +192 -0
- package/dist/pull-sources/atproto.js.map +1 -0
- package/dist/pull-sources/git.d.ts +15 -0
- package/dist/pull-sources/git.d.ts.map +1 -0
- package/dist/pull-sources/git.js +80 -0
- package/dist/pull-sources/git.js.map +1 -0
- package/dist/pull-sources/types.d.ts +16 -0
- package/dist/pull-sources/types.d.ts.map +1 -0
- package/dist/pull-sources/types.js +2 -0
- package/dist/pull-sources/types.js.map +1 -0
- package/dist/shared-options.d.ts +6 -0
- package/dist/shared-options.d.ts.map +1 -0
- package/dist/shared-options.js +11 -0
- package/dist/shared-options.js.map +1 -0
- package/package.json +12 -9
- package/src/cli.ts +9 -210
- package/src/codegen.ts +90 -88
- package/src/commands/export.ts +106 -0
- package/src/commands/generate.ts +170 -0
- package/src/{pull.ts → commands/pull.ts} +49 -116
- package/src/config.ts +67 -4
- package/src/lexicon-loader.ts +201 -0
- package/src/pull-sources/atproto.ts +243 -0
- package/src/pull-sources/git.ts +103 -0
- package/src/pull-sources/types.ts +18 -0
- package/src/shared-options.ts +13 -0
- package/dist/pull.d.ts +0 -7
- package/dist/pull.d.ts.map +0 -1
- package/dist/pull.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,68 @@
|
|
|
1
1
|
import { type LexiconConfig } from './config.js';
|
|
2
2
|
export type { LexiconConfig };
|
|
3
|
-
export declare const defineLexiconConfig: (config:
|
|
3
|
+
export declare const defineLexiconConfig: (config: {
|
|
4
|
+
outdir: string;
|
|
5
|
+
files: string[];
|
|
6
|
+
imports?: string[] | undefined;
|
|
7
|
+
mappings?: import("./codegen.js").ImportMapping[] | undefined;
|
|
8
|
+
modules?: {
|
|
9
|
+
importSuffix?: string | undefined;
|
|
10
|
+
} | undefined;
|
|
11
|
+
pull?: {
|
|
12
|
+
outdir: string;
|
|
13
|
+
clean?: boolean | undefined;
|
|
14
|
+
sources: ({
|
|
15
|
+
type: "git";
|
|
16
|
+
remote: string;
|
|
17
|
+
ref?: string | undefined;
|
|
18
|
+
pattern: string[];
|
|
19
|
+
} | {
|
|
20
|
+
type: "atproto";
|
|
21
|
+
mode: "nsids";
|
|
22
|
+
nsids: `${string}.${string}.${string}`[];
|
|
23
|
+
} | {
|
|
24
|
+
type: "atproto";
|
|
25
|
+
mode: "authority";
|
|
26
|
+
authority: `${string}.${string}` | `did:plc:${string}` | `did:web:${string}`;
|
|
27
|
+
pattern?: string[] | undefined;
|
|
28
|
+
})[];
|
|
29
|
+
} | undefined;
|
|
30
|
+
export?: {
|
|
31
|
+
outdir: string;
|
|
32
|
+
files?: string[] | undefined;
|
|
33
|
+
clean?: boolean | undefined;
|
|
34
|
+
} | undefined;
|
|
35
|
+
}) => {
|
|
36
|
+
outdir: string;
|
|
37
|
+
files: string[];
|
|
38
|
+
imports?: string[] | undefined;
|
|
39
|
+
mappings?: import("./codegen.js").ImportMapping[] | undefined;
|
|
40
|
+
modules?: {
|
|
41
|
+
importSuffix?: string | undefined;
|
|
42
|
+
} | undefined;
|
|
43
|
+
pull?: {
|
|
44
|
+
outdir: string;
|
|
45
|
+
clean?: boolean | undefined;
|
|
46
|
+
sources: ({
|
|
47
|
+
type: "git";
|
|
48
|
+
remote: string;
|
|
49
|
+
ref?: string | undefined;
|
|
50
|
+
pattern: string[];
|
|
51
|
+
} | {
|
|
52
|
+
type: "atproto";
|
|
53
|
+
mode: "nsids";
|
|
54
|
+
nsids: `${string}.${string}.${string}`[];
|
|
55
|
+
} | {
|
|
56
|
+
type: "atproto";
|
|
57
|
+
mode: "authority";
|
|
58
|
+
authority: `${string}.${string}` | `did:plc:${string}` | `did:web:${string}`;
|
|
59
|
+
pattern?: string[] | undefined;
|
|
60
|
+
})[];
|
|
61
|
+
} | undefined;
|
|
62
|
+
export?: {
|
|
63
|
+
outdir: string;
|
|
64
|
+
files?: string[] | undefined;
|
|
65
|
+
clean?: boolean | undefined;
|
|
66
|
+
} | undefined;
|
|
67
|
+
};
|
|
4
68
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAEtE,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAEtE,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAE/B,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAsB,MAAM,aAAa,CAAC;AAItE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAqB,EAAiB,EAAE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAsB,MAAM,aAAa,CAAC;AAItE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAqB,EAAiB,EAAE,CAAC;IAC5E,OAAO,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAAA,CACzC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type LexiconDoc } from '@atcute/lexicon-doc';
|
|
2
|
+
/**
|
|
3
|
+
* represents a loaded lexicon document with its source file
|
|
4
|
+
*/
|
|
5
|
+
export interface LoadedLexicon {
|
|
6
|
+
nsid: string;
|
|
7
|
+
doc: LexiconDoc;
|
|
8
|
+
filename: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* loads lexicon documents from glob patterns
|
|
12
|
+
* @param patterns glob patterns to match files
|
|
13
|
+
* @param root root directory for resolving paths
|
|
14
|
+
* @returns array of loaded lexicon documents
|
|
15
|
+
*/
|
|
16
|
+
export declare const loadLexicons: (patterns: string[], root: string) => Promise<LoadedLexicon[]>;
|
|
17
|
+
//# sourceMappingURL=lexicon-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexicon-loader.d.ts","sourceRoot":"","sources":["../src/lexicon-loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgC,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAQpF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACjB;AA4GD;;;;;GAKG;AACH,eAAO,MAAM,YAAY,gEAmExB,CAAC"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import * as fs from 'node:fs/promises';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import * as url from 'node:url';
|
|
4
|
+
import { lexiconDoc, refineLexiconDoc } from '@atcute/lexicon-doc';
|
|
5
|
+
import { build } from '@atcute/lexicon-doc/builder';
|
|
6
|
+
import pc from 'picocolors';
|
|
7
|
+
/** file extensions recognized as module files */
|
|
8
|
+
const MODULE_EXTENSIONS = new Set(['.js', '.cjs', '.mjs', '.ts', '.cts', '.mts']);
|
|
9
|
+
/**
|
|
10
|
+
* checks if a filename is a module file based on extension
|
|
11
|
+
* @param filename the filename to check
|
|
12
|
+
* @returns true if it's a module file
|
|
13
|
+
*/
|
|
14
|
+
const isModuleFile = (filename) => {
|
|
15
|
+
const ext = path.extname(filename);
|
|
16
|
+
return MODULE_EXTENSIONS.has(ext);
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* basic validation that a value looks like a LexDocumentBuilder
|
|
20
|
+
* @param value the value to check
|
|
21
|
+
* @returns true if it appears to be a LexDocumentBuilder
|
|
22
|
+
*/
|
|
23
|
+
const isLexDocumentBuilder = (value) => {
|
|
24
|
+
return (typeof value === 'object' &&
|
|
25
|
+
value !== null &&
|
|
26
|
+
'id' in value &&
|
|
27
|
+
typeof value.id === 'string' &&
|
|
28
|
+
'defs' in value &&
|
|
29
|
+
typeof value.defs === 'object');
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* loads and validates a lexicon document from a JSON file
|
|
33
|
+
* @param absolutePath absolute path to the JSON file
|
|
34
|
+
* @param relativePath relative path for error messages
|
|
35
|
+
* @returns parsed and validated lexicon document
|
|
36
|
+
*/
|
|
37
|
+
const loadJsonFile = async (absolutePath, relativePath) => {
|
|
38
|
+
let source;
|
|
39
|
+
try {
|
|
40
|
+
source = await fs.readFile(absolutePath, 'utf8');
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
console.error(pc.bold(pc.red(`file read error with "${relativePath}"`)));
|
|
44
|
+
console.error(err);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
let json;
|
|
48
|
+
try {
|
|
49
|
+
json = JSON.parse(source);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
console.error(pc.bold(pc.red(`json parse error in "${relativePath}"`)));
|
|
53
|
+
console.error(err);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
const result = lexiconDoc.try(json, { mode: 'strip' });
|
|
57
|
+
if (!result.ok) {
|
|
58
|
+
console.error(pc.bold(pc.red(`schema validation failed for "${relativePath}"`)));
|
|
59
|
+
console.error(result.message);
|
|
60
|
+
for (const issue of result.issues) {
|
|
61
|
+
console.log(`- ${issue.code} at .${issue.path.join('.')}`);
|
|
62
|
+
}
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
65
|
+
const issues = refineLexiconDoc(result.value, true);
|
|
66
|
+
if (issues.length > 0) {
|
|
67
|
+
console.error(pc.bold(pc.red(`lint validation failed for "${relativePath}"`)));
|
|
68
|
+
for (const issue of issues) {
|
|
69
|
+
console.log(`- ${issue.message} at .${issue.path.join('.')}`);
|
|
70
|
+
}
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
return result.value;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* loads a LexDocumentBuilder from a module file
|
|
77
|
+
* @param absolutePath absolute path to the module file
|
|
78
|
+
* @param relativePath relative path for error messages
|
|
79
|
+
* @returns the LexDocumentBuilder from the module's default export
|
|
80
|
+
*/
|
|
81
|
+
const loadModuleBuilder = async (absolutePath, relativePath) => {
|
|
82
|
+
let mod;
|
|
83
|
+
try {
|
|
84
|
+
const fileUrl = url.pathToFileURL(absolutePath);
|
|
85
|
+
mod = await import(fileUrl.href);
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
console.error(pc.bold(pc.red(`failed to import module "${relativePath}"`)));
|
|
89
|
+
console.error(err);
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
const defaultExport = mod?.default;
|
|
93
|
+
if (!isLexDocumentBuilder(defaultExport)) {
|
|
94
|
+
console.error(pc.bold(pc.red(`module "${relativePath}" default export is not a valid LexDocumentBuilder`)));
|
|
95
|
+
console.error(`expected default export to be a LexDocumentBuilder (object with 'id' and 'defs')`);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
return defaultExport;
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* loads lexicon documents from glob patterns
|
|
102
|
+
* @param patterns glob patterns to match files
|
|
103
|
+
* @param root root directory for resolving paths
|
|
104
|
+
* @returns array of loaded lexicon documents
|
|
105
|
+
*/
|
|
106
|
+
export const loadLexicons = async (patterns, root) => {
|
|
107
|
+
const results = [];
|
|
108
|
+
const seen = new Map();
|
|
109
|
+
// collect JSON docs and module builders separately
|
|
110
|
+
const jsonDocs = [];
|
|
111
|
+
const moduleBuilders = [];
|
|
112
|
+
for await (const filename of fs.glob(patterns, { cwd: root })) {
|
|
113
|
+
const absolutePath = path.join(root, filename);
|
|
114
|
+
if (isModuleFile(filename)) {
|
|
115
|
+
const builder = await loadModuleBuilder(absolutePath, filename);
|
|
116
|
+
moduleBuilders.push({ builder, filename });
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
// assume JSON for anything else (including .json)
|
|
120
|
+
const doc = await loadJsonFile(absolutePath, filename);
|
|
121
|
+
jsonDocs.push({ doc, filename });
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// add JSON docs directly (already built)
|
|
125
|
+
for (const { doc, filename } of jsonDocs) {
|
|
126
|
+
const existing = seen.get(doc.id);
|
|
127
|
+
if (existing) {
|
|
128
|
+
console.error(pc.bold(pc.red(`duplicate lexicon "${doc.id}"`)));
|
|
129
|
+
console.error(`- found in ${filename}`);
|
|
130
|
+
console.error(`- already found in ${existing}`);
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
seen.set(doc.id, filename);
|
|
134
|
+
results.push({ nsid: doc.id, doc, filename });
|
|
135
|
+
}
|
|
136
|
+
// build all module builders together (for cross-references)
|
|
137
|
+
if (moduleBuilders.length > 0) {
|
|
138
|
+
// check for duplicates in builders
|
|
139
|
+
const buildersByNsid = new Map();
|
|
140
|
+
for (const { builder, filename } of moduleBuilders) {
|
|
141
|
+
const existing = buildersByNsid.get(builder.id) ?? seen.get(builder.id);
|
|
142
|
+
if (existing) {
|
|
143
|
+
console.error(pc.bold(pc.red(`duplicate lexicon "${builder.id}"`)));
|
|
144
|
+
console.error(`- found in ${filename}`);
|
|
145
|
+
console.error(`- already found in ${existing}`);
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
buildersByNsid.set(builder.id, filename);
|
|
149
|
+
}
|
|
150
|
+
let built;
|
|
151
|
+
try {
|
|
152
|
+
built = build({ documents: moduleBuilders.map((m) => m.builder) });
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
console.error(pc.bold(pc.red(`build failed for module lexicons`)));
|
|
156
|
+
console.error(err);
|
|
157
|
+
process.exit(1);
|
|
158
|
+
}
|
|
159
|
+
for (const { builder, filename } of moduleBuilders) {
|
|
160
|
+
const doc = built[builder.id];
|
|
161
|
+
seen.set(builder.id, filename);
|
|
162
|
+
results.push({ nsid: builder.id, doc, filename });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return results;
|
|
166
|
+
};
|
|
167
|
+
//# sourceMappingURL=lexicon-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexicon-loader.js","sourceRoot":"","sources":["../src/lexicon-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lexicon-metadata.js","sourceRoot":"","sources":["../src/lexicon-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAmBjD;;;;GAIG;AACH,MAAM,qBAAqB,GAAG,CAAC,OAAe,EAAW,EAAE;
|
|
1
|
+
{"version":3,"file":"lexicon-metadata.js","sourceRoot":"","sources":["../src/lexicon-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAmBjD;;;;GAIG;AACH,MAAM,qBAAqB,GAAG,CAAC,OAAe,EAAW,EAAE,CAAC;IAC3D,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,0EAA0E;QAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpC,6DAA6D;QAC7D,OAAO,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;AAAA,CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,mBAAmB,GAAgC,CAAC,CAAC,MAAM,CAAC;IACjE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAA+B,EAAE,CAAC,KAAK,KAAK,GAAG,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QACxG,OAAO,EAAE,qCAAqC;KAC9C,CAAC;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,cAAc,GAAgD,CAAC;KACnE,MAAM,CAAC,mBAAmB,CAAC;KAC3B,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;IACjB,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,CAAC,GAAG,CAAC;gBACZ,OAAO,EAAE,0DAA0D;gBACnE,IAAI,EAAE,CAAC,GAAG,CAAC;aACX,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IAED,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAAA,CACnB,CAAC,CAAC;AAEJ,MAAM,mBAAmB,GAAgC,CAAC,CAAC,MAAM,CAAC;IACjE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAoC,CAAC,CAAC,MAAM,CAAC;IAC1E,iBAAiB,EAAE,mBAAmB,CAAC,QAAQ,EAAE;CACjD,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { PullResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* pulls lexicon documents from AT Protocol network resolution
|
|
4
|
+
* @param source atproto source configuration
|
|
5
|
+
* @returns pulled lexicons and ISO timestamp
|
|
6
|
+
*/
|
|
7
|
+
export declare const pullAtprotoSource: (source: {
|
|
8
|
+
type: "atproto";
|
|
9
|
+
mode: "nsids";
|
|
10
|
+
nsids: `${string}.${string}.${string}`[];
|
|
11
|
+
} | {
|
|
12
|
+
type: "atproto";
|
|
13
|
+
mode: "authority";
|
|
14
|
+
authority: `${string}.${string}` | `did:plc:${string}` | `did:web:${string}`;
|
|
15
|
+
pattern?: string[] | undefined;
|
|
16
|
+
}) => Promise<PullResult>;
|
|
17
|
+
//# sourceMappingURL=atproto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atproto.d.ts","sourceRoot":"","sources":["../../src/pull-sources/atproto.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAC;AAoE7D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;yBAmJ7B,CAAC"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { getPdsEndpoint, isAtprotoDid } from '@atcute/identity';
|
|
2
|
+
import { CompositeDidDocumentResolver, CompositeHandleResolver, DohJsonHandleResolver, PlcDidDocumentResolver, WebDidDocumentResolver, WellKnownHandleResolver, } from '@atcute/identity-resolver';
|
|
3
|
+
import { refineLexiconDoc } from '@atcute/lexicon-doc';
|
|
4
|
+
import { DohJsonLexiconAuthorityResolver, LexiconSchemaResolver } from '@atcute/lexicon-resolver';
|
|
5
|
+
import { isHandle, isNsid, parseCanonicalResourceUri, } from '@atcute/lexicons/syntax';
|
|
6
|
+
import pc from 'picocolors';
|
|
7
|
+
/**
|
|
8
|
+
* discovers all published lexicons for an authority by listing records in the
|
|
9
|
+
* com.atproto.lexicon.schema collection
|
|
10
|
+
* @param authority the authority DID
|
|
11
|
+
* @param didResolver DID document resolver
|
|
12
|
+
* @returns array of NSID strings
|
|
13
|
+
*/
|
|
14
|
+
const discoverLexiconsForAuthority = async (authority, didResolver) => {
|
|
15
|
+
// resolve DID to get PDS endpoint
|
|
16
|
+
const didDocument = await didResolver.resolve(authority);
|
|
17
|
+
const pdsEndpoint = getPdsEndpoint(didDocument);
|
|
18
|
+
if (!pdsEndpoint) {
|
|
19
|
+
throw new Error(`no pds service in did document; did=${authority}`);
|
|
20
|
+
}
|
|
21
|
+
// call com.atproto.repo.listRecords to get all lexicon schema records
|
|
22
|
+
const nsids = [];
|
|
23
|
+
let cursor;
|
|
24
|
+
do {
|
|
25
|
+
const url = new URL('/xrpc/com.atproto.repo.listRecords', pdsEndpoint);
|
|
26
|
+
url.searchParams.set('repo', authority);
|
|
27
|
+
url.searchParams.set('collection', 'com.atproto.lexicon.schema');
|
|
28
|
+
url.searchParams.set('limit', '100');
|
|
29
|
+
if (cursor) {
|
|
30
|
+
url.searchParams.set('cursor', cursor);
|
|
31
|
+
}
|
|
32
|
+
const response = await fetch(url.href, {
|
|
33
|
+
headers: { accept: 'application/json' },
|
|
34
|
+
});
|
|
35
|
+
if (!response.ok) {
|
|
36
|
+
throw new Error(`http ${response.status} when listing records`);
|
|
37
|
+
}
|
|
38
|
+
const data = (await response.json());
|
|
39
|
+
// extract NSIDs from record keys (the rkey in at://did/collection/rkey)
|
|
40
|
+
for (const record of data.records) {
|
|
41
|
+
const r = parseCanonicalResourceUri(record.uri);
|
|
42
|
+
if (!r.ok) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
const nsid = r.value.rkey;
|
|
46
|
+
if (!isNsid(nsid)) {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
nsids.push(nsid);
|
|
50
|
+
}
|
|
51
|
+
cursor = data.cursor;
|
|
52
|
+
} while (cursor);
|
|
53
|
+
return nsids;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* pulls lexicon documents from AT Protocol network resolution
|
|
57
|
+
* @param source atproto source configuration
|
|
58
|
+
* @returns pulled lexicons and ISO timestamp
|
|
59
|
+
*/
|
|
60
|
+
export const pullAtprotoSource = async (source) => {
|
|
61
|
+
// create resolver instances (reusable across NSIDs)
|
|
62
|
+
const authorityResolver = new DohJsonLexiconAuthorityResolver({
|
|
63
|
+
dohUrl: 'https://cloudflare-dns.com/dns-query',
|
|
64
|
+
});
|
|
65
|
+
const didResolver = new CompositeDidDocumentResolver({
|
|
66
|
+
methods: {
|
|
67
|
+
plc: new PlcDidDocumentResolver(),
|
|
68
|
+
web: new WebDidDocumentResolver(),
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
const schemaResolver = new LexiconSchemaResolver({
|
|
72
|
+
didDocumentResolver: didResolver,
|
|
73
|
+
});
|
|
74
|
+
const handleResolver = new CompositeHandleResolver({
|
|
75
|
+
strategy: 'race',
|
|
76
|
+
methods: {
|
|
77
|
+
http: new WellKnownHandleResolver(),
|
|
78
|
+
dns: new DohJsonHandleResolver({
|
|
79
|
+
dohUrl: 'https://cloudflare-dns.com/dns-query',
|
|
80
|
+
}),
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
const pulled = new Map();
|
|
84
|
+
const errors = [];
|
|
85
|
+
let nsids;
|
|
86
|
+
let authorityDid = null;
|
|
87
|
+
let sourceDesc;
|
|
88
|
+
let sourceName = null;
|
|
89
|
+
if (source.mode === 'nsids') {
|
|
90
|
+
nsids = source.nsids;
|
|
91
|
+
sourceDesc = `atproto (${nsids.length} nsids)`;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
// mode 2: authority-based
|
|
95
|
+
// step 2a: resolve authority (handle -> DID if needed)
|
|
96
|
+
let resolvedDid;
|
|
97
|
+
const handle = isHandle(source.authority) ? source.authority : null;
|
|
98
|
+
try {
|
|
99
|
+
if (isAtprotoDid(source.authority)) {
|
|
100
|
+
resolvedDid = source.authority;
|
|
101
|
+
}
|
|
102
|
+
else if (handle) {
|
|
103
|
+
resolvedDid = await handleResolver.resolve(handle);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
console.error(pc.bold(pc.red(`invalid authority: ${source.authority}`)));
|
|
107
|
+
console.error(`must be a valid DID or handle`);
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
authorityDid = resolvedDid;
|
|
111
|
+
sourceDesc = `atproto (authority: ${authorityDid})`;
|
|
112
|
+
sourceName = handle ?? authorityDid;
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
console.error(pc.bold(pc.red(`failed to resolve authority: ${source.authority}`)));
|
|
116
|
+
console.error(err);
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
// step 2b: discover all lexicons for this authority
|
|
120
|
+
try {
|
|
121
|
+
nsids = await discoverLexiconsForAuthority(authorityDid, didResolver);
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
console.error(pc.bold(pc.red(`failed to discover lexicons for ${sourceName}`)));
|
|
125
|
+
console.error(err);
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
// step 2c: filter by pattern if specified
|
|
129
|
+
if (source.pattern) {
|
|
130
|
+
nsids = nsids.filter((nsid) => {
|
|
131
|
+
return source.pattern.some((pattern) => {
|
|
132
|
+
if (pattern.endsWith('.*')) {
|
|
133
|
+
const prefix = pattern.slice(0, -2);
|
|
134
|
+
return nsid === prefix || nsid.startsWith(prefix + '.');
|
|
135
|
+
}
|
|
136
|
+
return nsid === pattern;
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
if (nsids.length === 0) {
|
|
141
|
+
console.warn(pc.yellow(`warning: no lexicons found for ${sourceName}`));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// fetch each NSID
|
|
145
|
+
let fetchedCount = 0;
|
|
146
|
+
for (const nsid of nsids) {
|
|
147
|
+
try {
|
|
148
|
+
// step 1: resolve authority from NSID (DNS)
|
|
149
|
+
const resolvedAuthority = await authorityResolver.resolve(nsid);
|
|
150
|
+
// step 2: cross-verify authority if in authority-based mode
|
|
151
|
+
if (authorityDid && resolvedAuthority !== authorityDid) {
|
|
152
|
+
throw new Error(`authority mismatch: NSID ${nsid} claims authority ${resolvedAuthority} but expected ${authorityDid}`);
|
|
153
|
+
}
|
|
154
|
+
// step 3: fetch schema from authority's PDS
|
|
155
|
+
const resolved = await schemaResolver.resolve(resolvedAuthority, nsid);
|
|
156
|
+
// step 4: lint the lexicon document
|
|
157
|
+
const issues = refineLexiconDoc(resolved.schema, true);
|
|
158
|
+
if (issues.length > 0) {
|
|
159
|
+
const messages = issues.map((i) => ` ${i.path}: ${i.message}`).join('\n');
|
|
160
|
+
throw new Error(`lint validation failed:\n${messages}`);
|
|
161
|
+
}
|
|
162
|
+
// create in-memory location (no file on disk yet)
|
|
163
|
+
const location = {
|
|
164
|
+
absolutePath: `<atproto:${nsid}>`,
|
|
165
|
+
relativePath: `${nsid}.json`,
|
|
166
|
+
sourceDescription: sourceDesc,
|
|
167
|
+
};
|
|
168
|
+
pulled.set(nsid, {
|
|
169
|
+
nsid,
|
|
170
|
+
doc: resolved.schema,
|
|
171
|
+
location,
|
|
172
|
+
});
|
|
173
|
+
fetchedCount++;
|
|
174
|
+
console.log(`${pc.green('+')} ${nsid}`);
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
// best-effort: collect errors but continue
|
|
178
|
+
errors.push({ nsid, error: err });
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// report all errors at end
|
|
182
|
+
if (errors.length > 0) {
|
|
183
|
+
console.warn(pc.yellow(`\nwarning: failed to fetch ${errors.length} lexicon(s):`));
|
|
184
|
+
for (const { nsid, error } of errors) {
|
|
185
|
+
console.warn(` - ${nsid}: ${error.message}`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
const suffix = sourceName ? ` from ${pc.cyan(sourceName)}` : '';
|
|
189
|
+
console.log(`pulled ${pc.cyan(fetchedCount.toString())} lexicons${suffix}`);
|
|
190
|
+
return { pulled };
|
|
191
|
+
};
|
|
192
|
+
//# sourceMappingURL=atproto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atproto.js","sourceRoot":"","sources":["../../src/pull-sources/atproto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { LexiconDoc } from '@atcute/lexicon-doc';
|
|
2
|
+
import type { PullResult, SourceLocation } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* pulls lexicon documents from a git repository source
|
|
5
|
+
* @param source git source configuration
|
|
6
|
+
* @param parseLexiconFile function to parse and validate lexicon files
|
|
7
|
+
* @returns pulled lexicons and commit hash
|
|
8
|
+
*/
|
|
9
|
+
export declare const pullGitSource: (source: {
|
|
10
|
+
type: "git";
|
|
11
|
+
remote: string;
|
|
12
|
+
ref?: string | undefined;
|
|
13
|
+
pattern: string[];
|
|
14
|
+
}, parseLexiconFile: (loc: SourceLocation) => Promise<LexiconDoc>) => Promise<PullResult>;
|
|
15
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/pull-sources/git.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKtD,OAAO,KAAK,EAAE,UAAU,EAAiB,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5E;;;;;GAKG;AACH,eAAO,MAAM,aAAa;;;;;yFAqFzB,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import * as fs from 'node:fs/promises';
|
|
2
|
+
import * as os from 'node:os';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import pc from 'picocolors';
|
|
5
|
+
import { runGit, GitError } from '../git.js';
|
|
6
|
+
/**
|
|
7
|
+
* pulls lexicon documents from a git repository source
|
|
8
|
+
* @param source git source configuration
|
|
9
|
+
* @param parseLexiconFile function to parse and validate lexicon files
|
|
10
|
+
* @returns pulled lexicons and commit hash
|
|
11
|
+
*/
|
|
12
|
+
export const pullGitSource = async (source, parseLexiconFile) => {
|
|
13
|
+
const tempParent = await fs.mkdtemp(path.join(os.tmpdir(), 'lex-cli-pull-'));
|
|
14
|
+
const cloneDir = path.join(tempParent, 'repo');
|
|
15
|
+
try {
|
|
16
|
+
await runGit([
|
|
17
|
+
'clone',
|
|
18
|
+
'--filter=blob:none',
|
|
19
|
+
'--depth',
|
|
20
|
+
'1',
|
|
21
|
+
'--sparse',
|
|
22
|
+
...(source.ref ? ['--branch', source.ref, '--single-branch'] : []),
|
|
23
|
+
source.remote,
|
|
24
|
+
cloneDir,
|
|
25
|
+
], { timeoutMs: 60_000 });
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
if (err instanceof GitError) {
|
|
29
|
+
console.error(pc.bold(pc.red(`git clone failed for ${source.remote}:`)));
|
|
30
|
+
console.error(err.stderr || err.message);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
throw err;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
await runGit(['-C', cloneDir, 'sparse-checkout', 'set', '--no-cone', ...source.pattern], {
|
|
37
|
+
timeoutMs: 30_000,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
if (err instanceof GitError) {
|
|
42
|
+
console.error(pc.bold(pc.red(`git sparse-checkout failed for ${source.remote}:`)));
|
|
43
|
+
console.error(err.stderr || err.message);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
throw err;
|
|
47
|
+
}
|
|
48
|
+
const pulled = new Map();
|
|
49
|
+
for await (const filename of fs.glob(source.pattern, { cwd: cloneDir })) {
|
|
50
|
+
const absolute = path.join(cloneDir, filename);
|
|
51
|
+
const stat = await fs.stat(absolute);
|
|
52
|
+
if (!stat.isFile()) {
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const location = {
|
|
56
|
+
absolutePath: absolute,
|
|
57
|
+
relativePath: filename,
|
|
58
|
+
sourceDescription: source.remote,
|
|
59
|
+
};
|
|
60
|
+
const doc = await parseLexiconFile(location);
|
|
61
|
+
pulled.set(doc.id, { nsid: doc.id, doc, location });
|
|
62
|
+
}
|
|
63
|
+
// get the commit hash
|
|
64
|
+
let rev;
|
|
65
|
+
try {
|
|
66
|
+
const result = await runGit(['-C', cloneDir, 'rev-parse', 'HEAD'], { timeoutMs: 10_000 });
|
|
67
|
+
rev = result.stdout.trim();
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
if (err instanceof GitError) {
|
|
71
|
+
console.error(pc.bold(pc.red(`git rev-parse failed for ${source.remote}:`)));
|
|
72
|
+
console.error(err.stderr || err.message);
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
throw err;
|
|
76
|
+
}
|
|
77
|
+
await fs.rm(tempParent, { recursive: true, force: true });
|
|
78
|
+
return { pulled, rev };
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/pull-sources/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { LexiconDoc } from '@atcute/lexicon-doc';
|
|
2
|
+
export interface SourceLocation {
|
|
3
|
+
absolutePath: string;
|
|
4
|
+
relativePath: string;
|
|
5
|
+
sourceDescription: string;
|
|
6
|
+
}
|
|
7
|
+
export interface PulledLexicon {
|
|
8
|
+
nsid: string;
|
|
9
|
+
doc: LexiconDoc;
|
|
10
|
+
location: SourceLocation;
|
|
11
|
+
}
|
|
12
|
+
export interface PullResult {
|
|
13
|
+
pulled: Map<string, PulledLexicon>;
|
|
14
|
+
rev?: string;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/pull-sources/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IAC1B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC;CACb"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/pull-sources/types.ts"],"names":[],"mappings":""}
|