@treeseed/sdk 0.1.1 → 0.1.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/README.md +20 -8
- package/dist/runtime.js +37 -3
- package/dist/scripts/.ts-run-1775630388025-vnjle0z75a.js +129 -0
- package/dist/scripts/build-dist.js +3 -0
- package/dist/scripts/fixture-tools.d.ts +5 -0
- package/dist/scripts/release-verify.js +1 -0
- package/package.json +3 -1
- package/dist/scripts/.ts-run-1775616848931-9386s6kwrl.js +0 -126
- /package/dist/scripts/{.ts-run-1775616845195-odh4xzphk3l.js → .ts-run-1775630384291-crtqr3izsa.js} +0 -0
package/README.md
CHANGED
|
@@ -354,8 +354,8 @@ You can see that usage in:
|
|
|
354
354
|
|
|
355
355
|
- [`agent/src/agents/kernel/agent-kernel.ts`](/home/adrian/Projects/treeseed/agent/src/agents/kernel/agent-kernel.ts)
|
|
356
356
|
- [`agent/src/agents/kernel/trigger-resolver.ts`](/home/adrian/Projects/treeseed/agent/src/agents/kernel/trigger-resolver.ts)
|
|
357
|
-
- [`
|
|
358
|
-
- [`
|
|
357
|
+
- [`planner.ts`](/home/adrian/Projects/treeseed/core/.fixtures/treeseed-fixtures/sites/working-site/src/agents/planner.ts)
|
|
358
|
+
- [`notifier.ts`](/home/adrian/Projects/treeseed/core/.fixtures/treeseed-fixtures/sites/working-site/src/agents/notifier.ts)
|
|
359
359
|
|
|
360
360
|
Conceptually, `agent_cursor` is the answer to: "Where should this agent continue from next time?"
|
|
361
361
|
|
|
@@ -508,7 +508,7 @@ Content-backed operations need a repository root that contains `src/content`.
|
|
|
508
508
|
3. `TREESEED_SDK_REPO_ROOT`
|
|
509
509
|
4. auto-detection from the current working directory
|
|
510
510
|
|
|
511
|
-
For
|
|
511
|
+
For fixture-driven development, the SDK also recognizes the shared submodule fixture at `.fixtures/treeseed-fixtures/sites/working-site`.
|
|
512
512
|
|
|
513
513
|
Example with an explicit root:
|
|
514
514
|
|
|
@@ -522,6 +522,12 @@ const sdk = new AgentSdk({
|
|
|
522
522
|
|
|
523
523
|
## Local Development
|
|
524
524
|
|
|
525
|
+
Initialize the shared fixtures submodule before running fixture-backed tests:
|
|
526
|
+
|
|
527
|
+
```bash
|
|
528
|
+
git submodule update --init --recursive
|
|
529
|
+
```
|
|
530
|
+
|
|
525
531
|
```bash
|
|
526
532
|
npm ci
|
|
527
533
|
npm run build
|
|
@@ -539,9 +545,7 @@ What each command does:
|
|
|
539
545
|
|
|
540
546
|
## Sample Fixture Site
|
|
541
547
|
|
|
542
|
-
The canonical
|
|
543
|
-
|
|
544
|
-
The SDK package also keeps a mirrored local fixture at `sdk/fixture` so the standalone SDK repository can run its own tests and CI without depending on the larger workspace layout.
|
|
548
|
+
The canonical shared fixture lives in the pinned `treeseed-fixtures` submodule at `.fixtures/treeseed-fixtures/sites/working-site`.
|
|
545
549
|
|
|
546
550
|
It serves three purposes at once:
|
|
547
551
|
|
|
@@ -556,10 +560,18 @@ import path from 'node:path';
|
|
|
556
560
|
import { AgentSdk } from '@treeseed/sdk';
|
|
557
561
|
|
|
558
562
|
const sdk = new AgentSdk({
|
|
559
|
-
repoRoot: path.resolve('
|
|
563
|
+
repoRoot: path.resolve('.fixtures/treeseed-fixtures/sites/working-site'),
|
|
560
564
|
});
|
|
561
565
|
```
|
|
562
566
|
|
|
563
567
|
The fixture includes representative entries for pages, notes, questions, objectives, books, knowledge, people, and agents so local queries behave like a small real site instead of a synthetic stub.
|
|
564
568
|
|
|
565
|
-
|
|
569
|
+
Shared fixture commands:
|
|
570
|
+
|
|
571
|
+
```bash
|
|
572
|
+
npm run fixtures:resolve
|
|
573
|
+
npm run fixtures:check
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
- `fixtures:resolve`: prints the active shared fixture root
|
|
577
|
+
- `fixtures:check`: verifies that the pinned shared fixture is initialized and usable
|
package/dist/runtime.js
CHANGED
|
@@ -1,10 +1,44 @@
|
|
|
1
|
-
import { existsSync } from "node:fs";
|
|
1
|
+
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
const DEFAULT_FIXTURE_ID = "treeseed-working-site";
|
|
4
|
+
function resolveSharedFixtureRoot(start) {
|
|
5
|
+
const fixturesRoot = process.env.TREESEED_FIXTURES_ROOT ? path.resolve(process.env.TREESEED_FIXTURES_ROOT) : path.join(start, ".fixtures", "treeseed-fixtures");
|
|
6
|
+
const requestedFixtureId = process.env.TREESEED_FIXTURE_ID?.trim() || DEFAULT_FIXTURE_ID;
|
|
7
|
+
const directRoot = path.join(fixturesRoot, "sites", "working-site");
|
|
8
|
+
const directManifestPath = path.join(directRoot, "fixture.manifest.json");
|
|
9
|
+
if (existsSync(path.join(directRoot, "src", "content")) && existsSync(directManifestPath)) {
|
|
10
|
+
return directRoot;
|
|
11
|
+
}
|
|
12
|
+
const sitesRoot = path.join(fixturesRoot, "sites");
|
|
13
|
+
if (!existsSync(sitesRoot)) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
for (const entry of readdirSync(sitesRoot, { withFileTypes: true }).filter((item) => item.isDirectory()).map((item) => item.name)) {
|
|
17
|
+
const fixtureRoot = path.join(sitesRoot, entry);
|
|
18
|
+
const manifestPath = path.join(fixtureRoot, "fixture.manifest.json");
|
|
19
|
+
if (!existsSync(manifestPath)) {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
|
|
24
|
+
if (manifest.id === requestedFixtureId) {
|
|
25
|
+
const root = path.resolve(fixtureRoot, manifest.root ?? ".");
|
|
26
|
+
if (existsSync(path.join(root, "src", "content"))) {
|
|
27
|
+
return root;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
} catch {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
3
36
|
function findContentRoot(start) {
|
|
4
37
|
let current = path.resolve(start);
|
|
5
38
|
for (; ; ) {
|
|
6
|
-
|
|
7
|
-
|
|
39
|
+
const sharedFixtureRoot = resolveSharedFixtureRoot(current);
|
|
40
|
+
if (sharedFixtureRoot) {
|
|
41
|
+
return sharedFixtureRoot;
|
|
8
42
|
}
|
|
9
43
|
if (existsSync(path.join(current, "src", "content"))) {
|
|
10
44
|
return current;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// scripts/build-dist.ts
|
|
2
|
+
import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { dirname as dirname2, extname as extname2, join, relative, resolve as resolve2 } from "node:path";
|
|
4
|
+
import { build } from "esbuild";
|
|
5
|
+
import ts from "typescript";
|
|
6
|
+
|
|
7
|
+
// scripts/package-tools.ts
|
|
8
|
+
import { dirname, extname, resolve } from "node:path";
|
|
9
|
+
import { fileURLToPath } from "node:url";
|
|
10
|
+
import { createRequire } from "node:module";
|
|
11
|
+
var require2 = createRequire(import.meta.url);
|
|
12
|
+
var scriptRoot = dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
var packageCandidate = resolve(scriptRoot, "..");
|
|
14
|
+
var packageRoot = packageCandidate.endsWith("/dist") ? resolve(packageCandidate, "..") : packageCandidate;
|
|
15
|
+
var packageScriptRoot = packageCandidate.endsWith("/dist") ? resolve(packageCandidate, "scripts") : resolve(packageRoot, "scripts");
|
|
16
|
+
|
|
17
|
+
// scripts/build-dist.ts
|
|
18
|
+
var srcRoot = resolve2(packageRoot, "src");
|
|
19
|
+
var scriptsRoot = resolve2(packageRoot, "scripts");
|
|
20
|
+
var distRoot = resolve2(packageRoot, "dist");
|
|
21
|
+
var COPY_EXTENSIONS = /* @__PURE__ */ new Set([".d.js", ".json", ".md"]);
|
|
22
|
+
function walkFiles(root) {
|
|
23
|
+
const files = [];
|
|
24
|
+
for (const entry of readdirSync(root, { withFileTypes: true })) {
|
|
25
|
+
const fullPath = join(root, entry.name);
|
|
26
|
+
if (entry.isDirectory()) {
|
|
27
|
+
files.push(...walkFiles(fullPath));
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
files.push(fullPath);
|
|
31
|
+
}
|
|
32
|
+
return files;
|
|
33
|
+
}
|
|
34
|
+
function ensureDir(filePath) {
|
|
35
|
+
mkdirSync(dirname2(filePath), { recursive: true });
|
|
36
|
+
}
|
|
37
|
+
function rewriteRuntimeSpecifiers(contents) {
|
|
38
|
+
return contents.replace(/(['"`])(\.[^'"`\n]+)\.(mjs|ts)\1/g, "$1$2.js$1");
|
|
39
|
+
}
|
|
40
|
+
async function compileModule(filePath, sourceRoot, outputRoot) {
|
|
41
|
+
const relativePath = relative(sourceRoot, filePath);
|
|
42
|
+
const outputFile = resolve2(outputRoot, relativePath.replace(/\.(mjs|ts)$/u, ".js"));
|
|
43
|
+
ensureDir(outputFile);
|
|
44
|
+
await build({
|
|
45
|
+
entryPoints: [filePath],
|
|
46
|
+
outfile: outputFile,
|
|
47
|
+
platform: "node",
|
|
48
|
+
format: "esm",
|
|
49
|
+
bundle: false,
|
|
50
|
+
logLevel: "silent"
|
|
51
|
+
});
|
|
52
|
+
const builtSource = readFileSync(outputFile, "utf8");
|
|
53
|
+
writeFileSync(outputFile, rewriteRuntimeSpecifiers(builtSource), "utf8");
|
|
54
|
+
}
|
|
55
|
+
function copyAsset(filePath, sourceRoot, outputRoot) {
|
|
56
|
+
const outputFile = resolve2(outputRoot, relative(sourceRoot, filePath));
|
|
57
|
+
ensureDir(outputFile);
|
|
58
|
+
copyFileSync(filePath, outputFile);
|
|
59
|
+
if (outputFile.endsWith(".d.js")) {
|
|
60
|
+
const contents = readFileSync(outputFile, "utf8");
|
|
61
|
+
writeFileSync(outputFile, rewriteRuntimeSpecifiers(contents), "utf8");
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function transpileScript(filePath) {
|
|
65
|
+
const source = readFileSync(filePath, "utf8");
|
|
66
|
+
const relativePath = relative(scriptsRoot, filePath);
|
|
67
|
+
if (relativePath === "fixture-tools.ts") {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const outputFile = resolve2(distRoot, "scripts", relativePath.replace(/\.(mjs|ts)$/u, ".js"));
|
|
71
|
+
const transformed = extname2(filePath) === ".ts" ? ts.transpileModule(source, {
|
|
72
|
+
compilerOptions: {
|
|
73
|
+
module: ts.ModuleKind.ESNext,
|
|
74
|
+
target: ts.ScriptTarget.ES2022
|
|
75
|
+
}
|
|
76
|
+
}).outputText : source;
|
|
77
|
+
ensureDir(outputFile);
|
|
78
|
+
writeFileSync(outputFile, rewriteRuntimeSpecifiers(transformed), "utf8");
|
|
79
|
+
}
|
|
80
|
+
function emitDeclarations() {
|
|
81
|
+
const configPath = ts.findConfigFile(packageRoot, ts.sys.fileExists, "tsconfig.json");
|
|
82
|
+
if (!configPath) {
|
|
83
|
+
throw new Error("Unable to locate tsconfig.json for declaration build.");
|
|
84
|
+
}
|
|
85
|
+
const configFile = ts.readConfigFile(configPath, ts.sys.readFile);
|
|
86
|
+
const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, packageRoot);
|
|
87
|
+
const program = ts.createProgram({
|
|
88
|
+
rootNames: parsed.fileNames,
|
|
89
|
+
options: {
|
|
90
|
+
...parsed.options,
|
|
91
|
+
declaration: true,
|
|
92
|
+
emitDeclarationOnly: true,
|
|
93
|
+
declarationDir: distRoot,
|
|
94
|
+
noEmit: false
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
const result = program.emit();
|
|
98
|
+
if (result.emitSkipped) {
|
|
99
|
+
const diagnostics = ts.formatDiagnosticsWithColorAndContext(result.diagnostics, {
|
|
100
|
+
getCanonicalFileName: (fileName) => fileName,
|
|
101
|
+
getCurrentDirectory: () => process.cwd(),
|
|
102
|
+
getNewLine: () => "\n"
|
|
103
|
+
});
|
|
104
|
+
throw new Error(`Declaration build failed.
|
|
105
|
+
${diagnostics}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
rmSync(distRoot, { recursive: true, force: true });
|
|
109
|
+
for (const filePath of walkFiles(srcRoot)) {
|
|
110
|
+
const extension = extname2(filePath);
|
|
111
|
+
if (extension === ".ts") {
|
|
112
|
+
await compileModule(filePath, srcRoot, distRoot);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (COPY_EXTENSIONS.has(extension)) {
|
|
116
|
+
copyAsset(filePath, srcRoot, distRoot);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
for (const filePath of walkFiles(scriptsRoot)) {
|
|
120
|
+
const extension = extname2(filePath);
|
|
121
|
+
if (extension === ".ts" || extension === ".mjs") {
|
|
122
|
+
transpileScript(filePath);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
emitDeclarations();
|
|
126
|
+
if (existsSync(resolve2(packageRoot, "README.md"))) {
|
|
127
|
+
copyFileSync(resolve2(packageRoot, "README.md"), resolve2(distRoot, "..", "README.md"));
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiYnVpbGQtZGlzdC50cyIsICJwYWNrYWdlLXRvb2xzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBjb3B5RmlsZVN5bmMsIGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcmVhZGRpclN5bmMsIHJlYWRGaWxlU3luYywgcm1TeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBleHRuYW1lLCBqb2luLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBidWlsZCB9IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgcGFja2FnZVJvb3QgfSBmcm9tICcuL3BhY2thZ2UtdG9vbHMudHMnO1xuXG5jb25zdCBzcmNSb290ID0gcmVzb2x2ZShwYWNrYWdlUm9vdCwgJ3NyYycpO1xuY29uc3Qgc2NyaXB0c1Jvb3QgPSByZXNvbHZlKHBhY2thZ2VSb290LCAnc2NyaXB0cycpO1xuY29uc3QgZGlzdFJvb3QgPSByZXNvbHZlKHBhY2thZ2VSb290LCAnZGlzdCcpO1xuXG5jb25zdCBDT1BZX0VYVEVOU0lPTlMgPSBuZXcgU2V0KFsnLmQudHMnLCAnLmpzb24nLCAnLm1kJ10pO1xuXG5mdW5jdGlvbiB3YWxrRmlsZXMocm9vdCkge1xuXHRjb25zdCBmaWxlcyA9IFtdO1xuXHRmb3IgKGNvbnN0IGVudHJ5IG9mIHJlYWRkaXJTeW5jKHJvb3QsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KSkge1xuXHRcdGNvbnN0IGZ1bGxQYXRoID0gam9pbihyb290LCBlbnRyeS5uYW1lKTtcblx0XHRpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuXHRcdFx0ZmlsZXMucHVzaCguLi53YWxrRmlsZXMoZnVsbFBhdGgpKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRmaWxlcy5wdXNoKGZ1bGxQYXRoKTtcblx0fVxuXHRyZXR1cm4gZmlsZXM7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZURpcihmaWxlUGF0aCkge1xuXHRta2RpclN5bmMoZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG5mdW5jdGlvbiByZXdyaXRlUnVudGltZVNwZWNpZmllcnMoY29udGVudHMpIHtcblx0cmV0dXJuIGNvbnRlbnRzLnJlcGxhY2UoLyhbJ1wiYF0pKFxcLlteJ1wiYFxcbl0rKVxcLihtanN8dHMpXFwxL2csICckMSQyLmpzJDEnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tcGlsZU1vZHVsZShmaWxlUGF0aCwgc291cmNlUm9vdCwgb3V0cHV0Um9vdCkge1xuXHRjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShzb3VyY2VSb290LCBmaWxlUGF0aCk7XG5cdGNvbnN0IG91dHB1dEZpbGUgPSByZXNvbHZlKG91dHB1dFJvb3QsIHJlbGF0aXZlUGF0aC5yZXBsYWNlKC9cXC4obWpzfHRzKSQvdSwgJy5qcycpKTtcblx0ZW5zdXJlRGlyKG91dHB1dEZpbGUpO1xuXG5cdGF3YWl0IGJ1aWxkKHtcblx0XHRlbnRyeVBvaW50czogW2ZpbGVQYXRoXSxcblx0XHRvdXRmaWxlOiBvdXRwdXRGaWxlLFxuXHRcdHBsYXRmb3JtOiAnbm9kZScsXG5cdFx0Zm9ybWF0OiAnZXNtJyxcblx0XHRidW5kbGU6IGZhbHNlLFxuXHRcdGxvZ0xldmVsOiAnc2lsZW50Jyxcblx0fSk7XG5cblx0Y29uc3QgYnVpbHRTb3VyY2UgPSByZWFkRmlsZVN5bmMob3V0cHV0RmlsZSwgJ3V0ZjgnKTtcblx0d3JpdGVGaWxlU3luYyhvdXRwdXRGaWxlLCByZXdyaXRlUnVudGltZVNwZWNpZmllcnMoYnVpbHRTb3VyY2UpLCAndXRmOCcpO1xufVxuXG5mdW5jdGlvbiBjb3B5QXNzZXQoZmlsZVBhdGgsIHNvdXJjZVJvb3QsIG91dHB1dFJvb3QpIHtcblx0Y29uc3Qgb3V0cHV0RmlsZSA9IHJlc29sdmUob3V0cHV0Um9vdCwgcmVsYXRpdmUoc291cmNlUm9vdCwgZmlsZVBhdGgpKTtcblx0ZW5zdXJlRGlyKG91dHB1dEZpbGUpO1xuXHRjb3B5RmlsZVN5bmMoZmlsZVBhdGgsIG91dHB1dEZpbGUpO1xuXG5cdGlmIChvdXRwdXRGaWxlLmVuZHNXaXRoKCcuZC50cycpKSB7XG5cdFx0Y29uc3QgY29udGVudHMgPSByZWFkRmlsZVN5bmMob3V0cHV0RmlsZSwgJ3V0ZjgnKTtcblx0XHR3cml0ZUZpbGVTeW5jKG91dHB1dEZpbGUsIHJld3JpdGVSdW50aW1lU3BlY2lmaWVycyhjb250ZW50cyksICd1dGY4Jyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdHJhbnNwaWxlU2NyaXB0KGZpbGVQYXRoKSB7XG5cdGNvbnN0IHNvdXJjZSA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcblx0Y29uc3QgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUoc2NyaXB0c1Jvb3QsIGZpbGVQYXRoKTtcblx0aWYgKHJlbGF0aXZlUGF0aCA9PT0gJ2ZpeHR1cmUtdG9vbHMudHMnKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGNvbnN0IG91dHB1dEZpbGUgPSByZXNvbHZlKGRpc3RSb290LCAnc2NyaXB0cycsIHJlbGF0aXZlUGF0aC5yZXBsYWNlKC9cXC4obWpzfHRzKSQvdSwgJy5qcycpKTtcblx0Y29uc3QgdHJhbnNmb3JtZWQgPSBleHRuYW1lKGZpbGVQYXRoKSA9PT0gJy50cydcblx0XHQ/IHRzLnRyYW5zcGlsZU1vZHVsZShzb3VyY2UsIHtcblx0XHRcdFx0Y29tcGlsZXJPcHRpb25zOiB7XG5cdFx0XHRcdFx0bW9kdWxlOiB0cy5Nb2R1bGVLaW5kLkVTTmV4dCxcblx0XHRcdFx0XHR0YXJnZXQ6IHRzLlNjcmlwdFRhcmdldC5FUzIwMjIsXG5cdFx0XHRcdH0sXG5cdFx0XHR9KS5vdXRwdXRUZXh0XG5cdFx0OiBzb3VyY2U7XG5cblx0ZW5zdXJlRGlyKG91dHB1dEZpbGUpO1xuXHR3cml0ZUZpbGVTeW5jKG91dHB1dEZpbGUsIHJld3JpdGVSdW50aW1lU3BlY2lmaWVycyh0cmFuc2Zvcm1lZCksICd1dGY4Jyk7XG59XG5cbmZ1bmN0aW9uIGVtaXREZWNsYXJhdGlvbnMoKSB7XG5cdGNvbnN0IGNvbmZpZ1BhdGggPSB0cy5maW5kQ29uZmlnRmlsZShwYWNrYWdlUm9vdCwgdHMuc3lzLmZpbGVFeGlzdHMsICd0c2NvbmZpZy5qc29uJyk7XG5cdGlmICghY29uZmlnUGF0aCkge1xuXHRcdHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGxvY2F0ZSB0c2NvbmZpZy5qc29uIGZvciBkZWNsYXJhdGlvbiBidWlsZC4nKTtcblx0fVxuXG5cdGNvbnN0IGNvbmZpZ0ZpbGUgPSB0cy5yZWFkQ29uZmlnRmlsZShjb25maWdQYXRoLCB0cy5zeXMucmVhZEZpbGUpO1xuXHRjb25zdCBwYXJzZWQgPSB0cy5wYXJzZUpzb25Db25maWdGaWxlQ29udGVudChjb25maWdGaWxlLmNvbmZpZywgdHMuc3lzLCBwYWNrYWdlUm9vdCk7XG5cdGNvbnN0IHByb2dyYW0gPSB0cy5jcmVhdGVQcm9ncmFtKHtcblx0XHRyb290TmFtZXM6IHBhcnNlZC5maWxlTmFtZXMsXG5cdFx0b3B0aW9uczoge1xuXHRcdFx0Li4ucGFyc2VkLm9wdGlvbnMsXG5cdFx0XHRkZWNsYXJhdGlvbjogdHJ1ZSxcblx0XHRcdGVtaXREZWNsYXJhdGlvbk9ubHk6IHRydWUsXG5cdFx0XHRkZWNsYXJhdGlvbkRpcjogZGlzdFJvb3QsXG5cdFx0XHRub0VtaXQ6IGZhbHNlLFxuXHRcdH0sXG5cdH0pO1xuXG5cdGNvbnN0IHJlc3VsdCA9IHByb2dyYW0uZW1pdCgpO1xuXHRpZiAocmVzdWx0LmVtaXRTa2lwcGVkKSB7XG5cdFx0Y29uc3QgZGlhZ25vc3RpY3MgPSB0cy5mb3JtYXREaWFnbm9zdGljc1dpdGhDb2xvckFuZENvbnRleHQocmVzdWx0LmRpYWdub3N0aWNzLCB7XG5cdFx0XHRnZXRDYW5vbmljYWxGaWxlTmFtZTogKGZpbGVOYW1lKSA9PiBmaWxlTmFtZSxcblx0XHRcdGdldEN1cnJlbnREaXJlY3Rvcnk6ICgpID0+IHByb2Nlc3MuY3dkKCksXG5cdFx0XHRnZXROZXdMaW5lOiAoKSA9PiAnXFxuJyxcblx0XHR9KTtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYERlY2xhcmF0aW9uIGJ1aWxkIGZhaWxlZC5cXG4ke2RpYWdub3N0aWNzfWApO1xuXHR9XG59XG5cbnJtU3luYyhkaXN0Um9vdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuXG5mb3IgKGNvbnN0IGZpbGVQYXRoIG9mIHdhbGtGaWxlcyhzcmNSb290KSkge1xuXHRjb25zdCBleHRlbnNpb24gPSBleHRuYW1lKGZpbGVQYXRoKTtcblx0aWYgKGV4dGVuc2lvbiA9PT0gJy50cycpIHtcblx0XHRhd2FpdCBjb21waWxlTW9kdWxlKGZpbGVQYXRoLCBzcmNSb290LCBkaXN0Um9vdCk7XG5cdFx0Y29udGludWU7XG5cdH1cblxuXHRpZiAoQ09QWV9FWFRFTlNJT05TLmhhcyhleHRlbnNpb24pKSB7XG5cdFx0Y29weUFzc2V0KGZpbGVQYXRoLCBzcmNSb290LCBkaXN0Um9vdCk7XG5cdH1cbn1cblxuZm9yIChjb25zdCBmaWxlUGF0aCBvZiB3YWxrRmlsZXMoc2NyaXB0c1Jvb3QpKSB7XG5cdGNvbnN0IGV4dGVuc2lvbiA9IGV4dG5hbWUoZmlsZVBhdGgpO1xuXHRpZiAoZXh0ZW5zaW9uID09PSAnLnRzJyB8fCBleHRlbnNpb24gPT09ICcubWpzJykge1xuXHRcdHRyYW5zcGlsZVNjcmlwdChmaWxlUGF0aCk7XG5cdH1cbn1cblxuZW1pdERlY2xhcmF0aW9ucygpO1xuXG5pZiAoZXhpc3RzU3luYyhyZXNvbHZlKHBhY2thZ2VSb290LCAnUkVBRE1FLm1kJykpKSB7XG5cdGNvcHlGaWxlU3luYyhyZXNvbHZlKHBhY2thZ2VSb290LCAnUkVBRE1FLm1kJyksIHJlc29sdmUoZGlzdFJvb3QsICcuLicsICdSRUFETUUubWQnKSk7XG59XG4iLCAiaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBleHRuYW1lLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBzcGF3biwgc3Bhd25TeW5jIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdub2RlOm1vZHVsZSc7XG5cbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5jb25zdCBzY3JpcHRSb290ID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuY29uc3QgcGFja2FnZUNhbmRpZGF0ZSA9IHJlc29sdmUoc2NyaXB0Um9vdCwgJy4uJyk7XG5cbmV4cG9ydCBjb25zdCBwYWNrYWdlUm9vdCA9IHBhY2thZ2VDYW5kaWRhdGUuZW5kc1dpdGgoJy9kaXN0Jylcblx0PyByZXNvbHZlKHBhY2thZ2VDYW5kaWRhdGUsICcuLicpXG5cdDogcGFja2FnZUNhbmRpZGF0ZTtcbmV4cG9ydCBjb25zdCBwYWNrYWdlU2NyaXB0Um9vdCA9IHBhY2thZ2VDYW5kaWRhdGUuZW5kc1dpdGgoJy9kaXN0Jylcblx0PyByZXNvbHZlKHBhY2thZ2VDYW5kaWRhdGUsICdzY3JpcHRzJylcblx0OiByZXNvbHZlKHBhY2thZ2VSb290LCAnc2NyaXB0cycpO1xuXG5mdW5jdGlvbiByZXNvbHZlUGFja2FnZUJpbmFyeShwYWNrYWdlTmFtZSwgYmluTmFtZSA9IHBhY2thZ2VOYW1lKSB7XG5cdGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHJlcXVpcmUucmVzb2x2ZShgJHtwYWNrYWdlTmFtZX0vcGFja2FnZS5qc29uYCk7XG5cdGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMocGFja2FnZUpzb25QYXRoLCAndXRmOCcpKTtcblx0Y29uc3QgYmluRmllbGQgPSBwYWNrYWdlSnNvbi5iaW47XG5cdGNvbnN0IHJlbGF0aXZlUGF0aCA9XG5cdFx0dHlwZW9mIGJpbkZpZWxkID09PSAnc3RyaW5nJ1xuXHRcdFx0PyBiaW5GaWVsZFxuXHRcdFx0OiBiaW5GaWVsZD8uW2Jpbk5hbWVdO1xuXG5cdGlmICghcmVsYXRpdmVQYXRoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmVzb2x2ZSBiaW5hcnkgXCIke2Jpbk5hbWV9XCIgZnJvbSBwYWNrYWdlIFwiJHtwYWNrYWdlTmFtZX1cIi5gKTtcblx0fVxuXG5cdHJldHVybiByZXNvbHZlKGRpcm5hbWUocGFja2FnZUpzb25QYXRoKSwgcmVsYXRpdmVQYXRoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVBc3Ryb0JpbigpIHtcblx0cmV0dXJuIHJlc29sdmVQYWNrYWdlQmluYXJ5KCdhc3RybycsICdhc3RybycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVdyYW5nbGVyQmluKCkge1xuXHRyZXR1cm4gcmVzb2x2ZVBhY2thZ2VCaW5hcnkoJ3dyYW5nbGVyJywgJ3dyYW5nbGVyJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm9kdWN0aW9uQnVpbGRFbnYoZXh0cmFFbnYgPSB7fSkge1xuXHRyZXR1cm4ge1xuXHRcdFRSRUVTRUVEX0xPQ0FMX0RFVl9NT0RFOiAnY2xvdWRmbGFyZScsXG5cdFx0VFJFRVNFRURfUFVCTElDX0ZPUk1TX0xPQ0FMX0JZUEFTU19UVVJOU1RJTEU6ICcnLFxuXHRcdFRSRUVTRUVEX0ZPUk1TX0xPQ0FMX0JZUEFTU19UVVJOU1RJTEU6ICcnLFxuXHRcdFRSRUVTRUVEX0ZPUk1TX0xPQ0FMX0JZUEFTU19DTE9VREZMQVJFX0dVQVJEUzogJycsXG5cdFx0VFJFRVNFRURfUFVCTElDX0RFVl9XQVRDSF9SRUxPQUQ6ICcnLFxuXHRcdC4uLmV4dHJhRW52LFxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFja2FnZVNjcmlwdFBhdGgoc2NyaXB0TmFtZSkge1xuXHRpZiAoZXh0bmFtZShzY3JpcHROYW1lKSkge1xuXHRcdHJldHVybiByZXNvbHZlKHBhY2thZ2VTY3JpcHRSb290LCBzY3JpcHROYW1lKTtcblx0fVxuXG5cdGZvciAoY29uc3QgZXh0ZW5zaW9uIG9mIFsnLmpzJywgJy50cycsICcubWpzJ10pIHtcblx0XHRjb25zdCBjYW5kaWRhdGUgPSByZXNvbHZlKHBhY2thZ2VTY3JpcHRSb290LCBgJHtzY3JpcHROYW1lfSR7ZXh0ZW5zaW9ufWApO1xuXHRcdGlmIChleGlzdHNTeW5jKGNhbmRpZGF0ZSkpIHtcblx0XHRcdHJldHVybiBjYW5kaWRhdGU7XG5cdFx0fVxuXHR9XG5cblx0dGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmVzb2x2ZSBwYWNrYWdlIHNjcmlwdCBcIiR7c2NyaXB0TmFtZX1cIi5gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bk5vZGVCaW5hcnkoYmluUGF0aCwgYXJncywgb3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhwcm9jZXNzLmV4ZWNQYXRoLCBbYmluUGF0aCwgLi4uYXJnc10sIHtcblx0XHRzdGRpbzogb3B0aW9ucy5zdGRpbyA/PyAnaW5oZXJpdCcsXG5cdFx0Y3dkOiBvcHRpb25zLmN3ZCA/PyBwcm9jZXNzLmN3ZCgpLFxuXHRcdGVudjogeyAuLi5wcm9jZXNzLmVudiwgLi4uKG9wdGlvbnMuZW52ID8/IHt9KSB9LFxuXHR9KTtcblxuXHRpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuXHRcdHByb2Nlc3MuZXhpdChyZXN1bHQuc3RhdHVzID8/IDEpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5Ob2RlU2NyaXB0KHNjcmlwdFBhdGgsIGFyZ3MgPSBbXSwgb3B0aW9ucyA9IHt9KSB7XG5cdHJldHVybiBydW5Ob2RlQmluYXJ5KHNjcmlwdFBhdGgsIGFyZ3MsIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Bhd25Ob2RlQmluYXJ5KGJpblBhdGgsIGFyZ3MsIG9wdGlvbnMgPSB7fSkge1xuXHRyZXR1cm4gc3Bhd24ocHJvY2Vzcy5leGVjUGF0aCwgW2JpblBhdGgsIC4uLmFyZ3NdLCB7XG5cdFx0c3RkaW86IG9wdGlvbnMuc3RkaW8gPz8gJ2luaGVyaXQnLFxuXHRcdGN3ZDogb3B0aW9ucy5jd2QgPz8gcHJvY2Vzcy5jd2QoKSxcblx0XHRlbnY6IHsgLi4ucHJvY2Vzcy5lbnYsIC4uLihvcHRpb25zLmVudiA/PyB7fSkgfSxcblx0XHRkZXRhY2hlZDogb3B0aW9ucy5kZXRhY2hlZCA/PyBmYWxzZSxcblx0fSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsU0FBUyxjQUFjLFlBQVksV0FBVyxhQUFhLGNBQWMsUUFBUSxxQkFBcUI7QUFDdEcsU0FBUyxXQUFBQSxVQUFTLFdBQUFDLFVBQVMsTUFBTSxVQUFVLFdBQUFDLGdCQUFlO0FBQzFELFNBQVMsYUFBYTtBQUN0QixPQUFPLFFBQVE7OztBQ0RmLFNBQVMsU0FBUyxTQUFTLGVBQWU7QUFDMUMsU0FBUyxxQkFBcUI7QUFFOUIsU0FBUyxxQkFBcUI7QUFFOUIsSUFBTUMsV0FBVSxjQUFjLFlBQVksR0FBRztBQUM3QyxJQUFNLGFBQWEsUUFBUSxjQUFjLFlBQVksR0FBRyxDQUFDO0FBQ3pELElBQU0sbUJBQW1CLFFBQVEsWUFBWSxJQUFJO0FBRTFDLElBQU0sY0FBYyxpQkFBaUIsU0FBUyxPQUFPLElBQ3pELFFBQVEsa0JBQWtCLElBQUksSUFDOUI7QUFDSSxJQUFNLG9CQUFvQixpQkFBaUIsU0FBUyxPQUFPLElBQy9ELFFBQVEsa0JBQWtCLFNBQVMsSUFDbkMsUUFBUSxhQUFhLFNBQVM7OztBRFZqQyxJQUFNLFVBQVVDLFNBQVEsYUFBYSxLQUFLO0FBQzFDLElBQU0sY0FBY0EsU0FBUSxhQUFhLFNBQVM7QUFDbEQsSUFBTSxXQUFXQSxTQUFRLGFBQWEsTUFBTTtBQUU1QyxJQUFNLGtCQUFrQixvQkFBSSxJQUFJLENBQUMsU0FBUyxTQUFTLEtBQUssQ0FBQztBQUV6RCxT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Q3ZCLFVBQU0sY0FBYyxHQUFHLHFDQUFxQyxPQUFPLGFBQWE7QUFBQSxNQUMvRSxzQkFBc0IsQ0FBQyxhQUFhO0FBQUEsTUFDcEMscUJBQXFCLE1BQU0sUUFBUSxJQUFJO0FBQUEsTUFDdkMsWUFBWSxNQUFNO0FBQUEsSUFDbkIsQ0FBQztBQUNELFVBQU0sSUFBSSxNQUFNO0FBQUEsRUFBOEIsV0FBVyxFQUFFO0FBQUEsRUFDNUQ7QUFDRDtBQUVBLE9BQU8sVUFBVSxFQUFFLFdBQVcsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUVqRCxXQUFXLFlBQVksVUFBVSxPQUFPLEdBQUc7QUFDMUMsUUFBTSxZQUFZQSxTQUFRLFFBQVE7QUFDbEMsTUFBSSxjQUFjLE9BQU87QUFDeEIsVUFBTSxjQUFjLFVBQVUsU0FBUyxRQUFRO0FBQy9DO0FBQUEsRUFDRDtBQUVBLE1BQUksZ0JBQWdCLElBQUksU0FBUyxHQUFHO0FBQ25DLGNBQVUsVUFBVSxTQUFTLFFBQVE7QUFBQSxFQUN0QztBQUNEO0FBRUEsV0FBVyxZQUFZLFVBQVUsV0FBVyxHQUFHO0FBQzlDLFFBQU0sWUFBWUEsU0FBUSxRQUFRO0FBQ2xDLE1BQUksY0FBYyxTQUFTLGNBQWMsUUFBUTtBQUNoRCxvQkFBZ0IsUUFBUTtBQUFBLEVBQ3pCO0FBQ0Q7QUFFQSxpQkFBaUI7QUFFakIsSUFBSSxXQUFXRixTQUFRLGFBQWEsV0FBVyxDQUFDLEdBQUc7QUFDbEQsZUFBYUEsU0FBUSxhQUFhLFdBQVcsR0FBR0EsU0FBUSxVQUFVLE1BQU0sV0FBVyxDQUFDO0FBQ3JGOyIsCiAgIm5hbWVzIjogWyJkaXJuYW1lIiwgImV4dG5hbWUiLCAicmVzb2x2ZSIsICJyZXF1aXJlIiwgInJlc29sdmUiLCAiZGlybmFtZSIsICJleHRuYW1lIl0KfQo=
|
|
@@ -52,6 +52,9 @@ function copyAsset(filePath, sourceRoot, outputRoot) {
|
|
|
52
52
|
function transpileScript(filePath) {
|
|
53
53
|
const source = readFileSync(filePath, 'utf8');
|
|
54
54
|
const relativePath = relative(scriptsRoot, filePath);
|
|
55
|
+
if (relativePath === 'fixture-tools.ts') {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
55
58
|
const outputFile = resolve(distRoot, 'scripts', relativePath.replace(/\.(mjs|ts)$/u, '.js'));
|
|
56
59
|
const transformed = extname(filePath) === '.ts'
|
|
57
60
|
? ts.transpileModule(source, {
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const DEFAULT_FIXTURE_ID = "treeseed-working-site";
|
|
2
|
+
export declare function resolveFixturesRepoRoot(): string;
|
|
3
|
+
export declare function resolveSharedFixtureRoot(): string | null;
|
|
4
|
+
export declare function requireSharedFixtureRoot(): string;
|
|
5
|
+
export declare function checkSharedFixture(): string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@treeseed/sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Shared Treeseed SDK for content-backed and D1-backed object models.",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"repository": {
|
|
@@ -34,6 +34,8 @@
|
|
|
34
34
|
"test": "npm run test:unit",
|
|
35
35
|
"test:unit": "vitest run --config ./vitest.config.ts",
|
|
36
36
|
"test:smoke": "node ./scripts/run-ts.mjs ./scripts/test-smoke.ts",
|
|
37
|
+
"fixtures:resolve": "node ./scripts/run-ts.mjs ./scripts/fixture-tools.ts resolve",
|
|
38
|
+
"fixtures:check": "node ./scripts/run-ts.mjs ./scripts/fixture-tools.ts check",
|
|
37
39
|
"verify": "npm run release:verify",
|
|
38
40
|
"release:setup": "npm run setup:ci",
|
|
39
41
|
"release:check-tag": "node ./scripts/run-ts.mjs ./scripts/assert-release-tag-version.ts",
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
// scripts/build-dist.ts
|
|
2
|
-
import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
|
|
3
|
-
import { dirname as dirname2, extname as extname2, join, relative, resolve as resolve2 } from "node:path";
|
|
4
|
-
import { build } from "esbuild";
|
|
5
|
-
import ts from "typescript";
|
|
6
|
-
|
|
7
|
-
// scripts/package-tools.ts
|
|
8
|
-
import { dirname, extname, resolve } from "node:path";
|
|
9
|
-
import { fileURLToPath } from "node:url";
|
|
10
|
-
import { createRequire } from "node:module";
|
|
11
|
-
var require2 = createRequire(import.meta.url);
|
|
12
|
-
var scriptRoot = dirname(fileURLToPath(import.meta.url));
|
|
13
|
-
var packageCandidate = resolve(scriptRoot, "..");
|
|
14
|
-
var packageRoot = packageCandidate.endsWith("/dist") ? resolve(packageCandidate, "..") : packageCandidate;
|
|
15
|
-
var packageScriptRoot = packageCandidate.endsWith("/dist") ? resolve(packageCandidate, "scripts") : resolve(packageRoot, "scripts");
|
|
16
|
-
|
|
17
|
-
// scripts/build-dist.ts
|
|
18
|
-
var srcRoot = resolve2(packageRoot, "src");
|
|
19
|
-
var scriptsRoot = resolve2(packageRoot, "scripts");
|
|
20
|
-
var distRoot = resolve2(packageRoot, "dist");
|
|
21
|
-
var COPY_EXTENSIONS = /* @__PURE__ */ new Set([".d.js", ".json", ".md"]);
|
|
22
|
-
function walkFiles(root) {
|
|
23
|
-
const files = [];
|
|
24
|
-
for (const entry of readdirSync(root, { withFileTypes: true })) {
|
|
25
|
-
const fullPath = join(root, entry.name);
|
|
26
|
-
if (entry.isDirectory()) {
|
|
27
|
-
files.push(...walkFiles(fullPath));
|
|
28
|
-
continue;
|
|
29
|
-
}
|
|
30
|
-
files.push(fullPath);
|
|
31
|
-
}
|
|
32
|
-
return files;
|
|
33
|
-
}
|
|
34
|
-
function ensureDir(filePath) {
|
|
35
|
-
mkdirSync(dirname2(filePath), { recursive: true });
|
|
36
|
-
}
|
|
37
|
-
function rewriteRuntimeSpecifiers(contents) {
|
|
38
|
-
return contents.replace(/(['"`])(\.[^'"`\n]+)\.(mjs|ts)\1/g, "$1$2.js$1");
|
|
39
|
-
}
|
|
40
|
-
async function compileModule(filePath, sourceRoot, outputRoot) {
|
|
41
|
-
const relativePath = relative(sourceRoot, filePath);
|
|
42
|
-
const outputFile = resolve2(outputRoot, relativePath.replace(/\.(mjs|ts)$/u, ".js"));
|
|
43
|
-
ensureDir(outputFile);
|
|
44
|
-
await build({
|
|
45
|
-
entryPoints: [filePath],
|
|
46
|
-
outfile: outputFile,
|
|
47
|
-
platform: "node",
|
|
48
|
-
format: "esm",
|
|
49
|
-
bundle: false,
|
|
50
|
-
logLevel: "silent"
|
|
51
|
-
});
|
|
52
|
-
const builtSource = readFileSync(outputFile, "utf8");
|
|
53
|
-
writeFileSync(outputFile, rewriteRuntimeSpecifiers(builtSource), "utf8");
|
|
54
|
-
}
|
|
55
|
-
function copyAsset(filePath, sourceRoot, outputRoot) {
|
|
56
|
-
const outputFile = resolve2(outputRoot, relative(sourceRoot, filePath));
|
|
57
|
-
ensureDir(outputFile);
|
|
58
|
-
copyFileSync(filePath, outputFile);
|
|
59
|
-
if (outputFile.endsWith(".d.js")) {
|
|
60
|
-
const contents = readFileSync(outputFile, "utf8");
|
|
61
|
-
writeFileSync(outputFile, rewriteRuntimeSpecifiers(contents), "utf8");
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
function transpileScript(filePath) {
|
|
65
|
-
const source = readFileSync(filePath, "utf8");
|
|
66
|
-
const relativePath = relative(scriptsRoot, filePath);
|
|
67
|
-
const outputFile = resolve2(distRoot, "scripts", relativePath.replace(/\.(mjs|ts)$/u, ".js"));
|
|
68
|
-
const transformed = extname2(filePath) === ".ts" ? ts.transpileModule(source, {
|
|
69
|
-
compilerOptions: {
|
|
70
|
-
module: ts.ModuleKind.ESNext,
|
|
71
|
-
target: ts.ScriptTarget.ES2022
|
|
72
|
-
}
|
|
73
|
-
}).outputText : source;
|
|
74
|
-
ensureDir(outputFile);
|
|
75
|
-
writeFileSync(outputFile, rewriteRuntimeSpecifiers(transformed), "utf8");
|
|
76
|
-
}
|
|
77
|
-
function emitDeclarations() {
|
|
78
|
-
const configPath = ts.findConfigFile(packageRoot, ts.sys.fileExists, "tsconfig.json");
|
|
79
|
-
if (!configPath) {
|
|
80
|
-
throw new Error("Unable to locate tsconfig.json for declaration build.");
|
|
81
|
-
}
|
|
82
|
-
const configFile = ts.readConfigFile(configPath, ts.sys.readFile);
|
|
83
|
-
const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, packageRoot);
|
|
84
|
-
const program = ts.createProgram({
|
|
85
|
-
rootNames: parsed.fileNames,
|
|
86
|
-
options: {
|
|
87
|
-
...parsed.options,
|
|
88
|
-
declaration: true,
|
|
89
|
-
emitDeclarationOnly: true,
|
|
90
|
-
declarationDir: distRoot,
|
|
91
|
-
noEmit: false
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
const result = program.emit();
|
|
95
|
-
if (result.emitSkipped) {
|
|
96
|
-
const diagnostics = ts.formatDiagnosticsWithColorAndContext(result.diagnostics, {
|
|
97
|
-
getCanonicalFileName: (fileName) => fileName,
|
|
98
|
-
getCurrentDirectory: () => process.cwd(),
|
|
99
|
-
getNewLine: () => "\n"
|
|
100
|
-
});
|
|
101
|
-
throw new Error(`Declaration build failed.
|
|
102
|
-
${diagnostics}`);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
rmSync(distRoot, { recursive: true, force: true });
|
|
106
|
-
for (const filePath of walkFiles(srcRoot)) {
|
|
107
|
-
const extension = extname2(filePath);
|
|
108
|
-
if (extension === ".ts") {
|
|
109
|
-
await compileModule(filePath, srcRoot, distRoot);
|
|
110
|
-
continue;
|
|
111
|
-
}
|
|
112
|
-
if (COPY_EXTENSIONS.has(extension)) {
|
|
113
|
-
copyAsset(filePath, srcRoot, distRoot);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
for (const filePath of walkFiles(scriptsRoot)) {
|
|
117
|
-
const extension = extname2(filePath);
|
|
118
|
-
if (extension === ".ts" || extension === ".mjs") {
|
|
119
|
-
transpileScript(filePath);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
emitDeclarations();
|
|
123
|
-
if (existsSync(resolve2(packageRoot, "README.md"))) {
|
|
124
|
-
copyFileSync(resolve2(packageRoot, "README.md"), resolve2(distRoot, "..", "README.md"));
|
|
125
|
-
}
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiYnVpbGQtZGlzdC50cyIsICJwYWNrYWdlLXRvb2xzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBjb3B5RmlsZVN5bmMsIGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcmVhZGRpclN5bmMsIHJlYWRGaWxlU3luYywgcm1TeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBleHRuYW1lLCBqb2luLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBidWlsZCB9IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHsgcGFja2FnZVJvb3QgfSBmcm9tICcuL3BhY2thZ2UtdG9vbHMudHMnO1xuXG5jb25zdCBzcmNSb290ID0gcmVzb2x2ZShwYWNrYWdlUm9vdCwgJ3NyYycpO1xuY29uc3Qgc2NyaXB0c1Jvb3QgPSByZXNvbHZlKHBhY2thZ2VSb290LCAnc2NyaXB0cycpO1xuY29uc3QgZGlzdFJvb3QgPSByZXNvbHZlKHBhY2thZ2VSb290LCAnZGlzdCcpO1xuXG5jb25zdCBDT1BZX0VYVEVOU0lPTlMgPSBuZXcgU2V0KFsnLmQudHMnLCAnLmpzb24nLCAnLm1kJ10pO1xuXG5mdW5jdGlvbiB3YWxrRmlsZXMocm9vdCkge1xuXHRjb25zdCBmaWxlcyA9IFtdO1xuXHRmb3IgKGNvbnN0IGVudHJ5IG9mIHJlYWRkaXJTeW5jKHJvb3QsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KSkge1xuXHRcdGNvbnN0IGZ1bGxQYXRoID0gam9pbihyb290LCBlbnRyeS5uYW1lKTtcblx0XHRpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuXHRcdFx0ZmlsZXMucHVzaCguLi53YWxrRmlsZXMoZnVsbFBhdGgpKTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRmaWxlcy5wdXNoKGZ1bGxQYXRoKTtcblx0fVxuXHRyZXR1cm4gZmlsZXM7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZURpcihmaWxlUGF0aCkge1xuXHRta2RpclN5bmMoZGlybmFtZShmaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG5mdW5jdGlvbiByZXdyaXRlUnVudGltZVNwZWNpZmllcnMoY29udGVudHMpIHtcblx0cmV0dXJuIGNvbnRlbnRzLnJlcGxhY2UoLyhbJ1wiYF0pKFxcLlteJ1wiYFxcbl0rKVxcLihtanN8dHMpXFwxL2csICckMSQyLmpzJDEnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tcGlsZU1vZHVsZShmaWxlUGF0aCwgc291cmNlUm9vdCwgb3V0cHV0Um9vdCkge1xuXHRjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShzb3VyY2VSb290LCBmaWxlUGF0aCk7XG5cdGNvbnN0IG91dHB1dEZpbGUgPSByZXNvbHZlKG91dHB1dFJvb3QsIHJlbGF0aXZlUGF0aC5yZXBsYWNlKC9cXC4obWpzfHRzKSQvdSwgJy5qcycpKTtcblx0ZW5zdXJlRGlyKG91dHB1dEZpbGUpO1xuXG5cdGF3YWl0IGJ1aWxkKHtcblx0XHRlbnRyeVBvaW50czogW2ZpbGVQYXRoXSxcblx0XHRvdXRmaWxlOiBvdXRwdXRGaWxlLFxuXHRcdHBsYXRmb3JtOiAnbm9kZScsXG5cdFx0Zm9ybWF0OiAnZXNtJyxcblx0XHRidW5kbGU6IGZhbHNlLFxuXHRcdGxvZ0xldmVsOiAnc2lsZW50Jyxcblx0fSk7XG5cblx0Y29uc3QgYnVpbHRTb3VyY2UgPSByZWFkRmlsZVN5bmMob3V0cHV0RmlsZSwgJ3V0ZjgnKTtcblx0d3JpdGVGaWxlU3luYyhvdXRwdXRGaWxlLCByZXdyaXRlUnVudGltZVNwZWNpZmllcnMoYnVpbHRTb3VyY2UpLCAndXRmOCcpO1xufVxuXG5mdW5jdGlvbiBjb3B5QXNzZXQoZmlsZVBhdGgsIHNvdXJjZVJvb3QsIG91dHB1dFJvb3QpIHtcblx0Y29uc3Qgb3V0cHV0RmlsZSA9IHJlc29sdmUob3V0cHV0Um9vdCwgcmVsYXRpdmUoc291cmNlUm9vdCwgZmlsZVBhdGgpKTtcblx0ZW5zdXJlRGlyKG91dHB1dEZpbGUpO1xuXHRjb3B5RmlsZVN5bmMoZmlsZVBhdGgsIG91dHB1dEZpbGUpO1xuXG5cdGlmIChvdXRwdXRGaWxlLmVuZHNXaXRoKCcuZC50cycpKSB7XG5cdFx0Y29uc3QgY29udGVudHMgPSByZWFkRmlsZVN5bmMob3V0cHV0RmlsZSwgJ3V0ZjgnKTtcblx0XHR3cml0ZUZpbGVTeW5jKG91dHB1dEZpbGUsIHJld3JpdGVSdW50aW1lU3BlY2lmaWVycyhjb250ZW50cyksICd1dGY4Jyk7XG5cdH1cbn1cblxuZnVuY3Rpb24gdHJhbnNwaWxlU2NyaXB0KGZpbGVQYXRoKSB7XG5cdGNvbnN0IHNvdXJjZSA9IHJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcblx0Y29uc3QgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmUoc2NyaXB0c1Jvb3QsIGZpbGVQYXRoKTtcblx0Y29uc3Qgb3V0cHV0RmlsZSA9IHJlc29sdmUoZGlzdFJvb3QsICdzY3JpcHRzJywgcmVsYXRpdmVQYXRoLnJlcGxhY2UoL1xcLihtanN8dHMpJC91LCAnLmpzJykpO1xuXHRjb25zdCB0cmFuc2Zvcm1lZCA9IGV4dG5hbWUoZmlsZVBhdGgpID09PSAnLnRzJ1xuXHRcdD8gdHMudHJhbnNwaWxlTW9kdWxlKHNvdXJjZSwge1xuXHRcdFx0XHRjb21waWxlck9wdGlvbnM6IHtcblx0XHRcdFx0XHRtb2R1bGU6IHRzLk1vZHVsZUtpbmQuRVNOZXh0LFxuXHRcdFx0XHRcdHRhcmdldDogdHMuU2NyaXB0VGFyZ2V0LkVTMjAyMixcblx0XHRcdFx0fSxcblx0XHRcdH0pLm91dHB1dFRleHRcblx0XHQ6IHNvdXJjZTtcblxuXHRlbnN1cmVEaXIob3V0cHV0RmlsZSk7XG5cdHdyaXRlRmlsZVN5bmMob3V0cHV0RmlsZSwgcmV3cml0ZVJ1bnRpbWVTcGVjaWZpZXJzKHRyYW5zZm9ybWVkKSwgJ3V0ZjgnKTtcbn1cblxuZnVuY3Rpb24gZW1pdERlY2xhcmF0aW9ucygpIHtcblx0Y29uc3QgY29uZmlnUGF0aCA9IHRzLmZpbmRDb25maWdGaWxlKHBhY2thZ2VSb290LCB0cy5zeXMuZmlsZUV4aXN0cywgJ3RzY29uZmlnLmpzb24nKTtcblx0aWYgKCFjb25maWdQYXRoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gbG9jYXRlIHRzY29uZmlnLmpzb24gZm9yIGRlY2xhcmF0aW9uIGJ1aWxkLicpO1xuXHR9XG5cblx0Y29uc3QgY29uZmlnRmlsZSA9IHRzLnJlYWRDb25maWdGaWxlKGNvbmZpZ1BhdGgsIHRzLnN5cy5yZWFkRmlsZSk7XG5cdGNvbnN0IHBhcnNlZCA9IHRzLnBhcnNlSnNvbkNvbmZpZ0ZpbGVDb250ZW50KGNvbmZpZ0ZpbGUuY29uZmlnLCB0cy5zeXMsIHBhY2thZ2VSb290KTtcblx0Y29uc3QgcHJvZ3JhbSA9IHRzLmNyZWF0ZVByb2dyYW0oe1xuXHRcdHJvb3ROYW1lczogcGFyc2VkLmZpbGVOYW1lcyxcblx0XHRvcHRpb25zOiB7XG5cdFx0XHQuLi5wYXJzZWQub3B0aW9ucyxcblx0XHRcdGRlY2xhcmF0aW9uOiB0cnVlLFxuXHRcdFx0ZW1pdERlY2xhcmF0aW9uT25seTogdHJ1ZSxcblx0XHRcdGRlY2xhcmF0aW9uRGlyOiBkaXN0Um9vdCxcblx0XHRcdG5vRW1pdDogZmFsc2UsXG5cdFx0fSxcblx0fSk7XG5cblx0Y29uc3QgcmVzdWx0ID0gcHJvZ3JhbS5lbWl0KCk7XG5cdGlmIChyZXN1bHQuZW1pdFNraXBwZWQpIHtcblx0XHRjb25zdCBkaWFnbm9zdGljcyA9IHRzLmZvcm1hdERpYWdub3N0aWNzV2l0aENvbG9yQW5kQ29udGV4dChyZXN1bHQuZGlhZ25vc3RpY3MsIHtcblx0XHRcdGdldENhbm9uaWNhbEZpbGVOYW1lOiAoZmlsZU5hbWUpID0+IGZpbGVOYW1lLFxuXHRcdFx0Z2V0Q3VycmVudERpcmVjdG9yeTogKCkgPT4gcHJvY2Vzcy5jd2QoKSxcblx0XHRcdGdldE5ld0xpbmU6ICgpID0+ICdcXG4nLFxuXHRcdH0pO1xuXHRcdHRocm93IG5ldyBFcnJvcihgRGVjbGFyYXRpb24gYnVpbGQgZmFpbGVkLlxcbiR7ZGlhZ25vc3RpY3N9YCk7XG5cdH1cbn1cblxucm1TeW5jKGRpc3RSb290LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG5cbmZvciAoY29uc3QgZmlsZVBhdGggb2Ygd2Fsa0ZpbGVzKHNyY1Jvb3QpKSB7XG5cdGNvbnN0IGV4dGVuc2lvbiA9IGV4dG5hbWUoZmlsZVBhdGgpO1xuXHRpZiAoZXh0ZW5zaW9uID09PSAnLnRzJykge1xuXHRcdGF3YWl0IGNvbXBpbGVNb2R1bGUoZmlsZVBhdGgsIHNyY1Jvb3QsIGRpc3RSb290KTtcblx0XHRjb250aW51ZTtcblx0fVxuXG5cdGlmIChDT1BZX0VYVEVOU0lPTlMuaGFzKGV4dGVuc2lvbikpIHtcblx0XHRjb3B5QXNzZXQoZmlsZVBhdGgsIHNyY1Jvb3QsIGRpc3RSb290KTtcblx0fVxufVxuXG5mb3IgKGNvbnN0IGZpbGVQYXRoIG9mIHdhbGtGaWxlcyhzY3JpcHRzUm9vdCkpIHtcblx0Y29uc3QgZXh0ZW5zaW9uID0gZXh0bmFtZShmaWxlUGF0aCk7XG5cdGlmIChleHRlbnNpb24gPT09ICcudHMnIHx8IGV4dGVuc2lvbiA9PT0gJy5tanMnKSB7XG5cdFx0dHJhbnNwaWxlU2NyaXB0KGZpbGVQYXRoKTtcblx0fVxufVxuXG5lbWl0RGVjbGFyYXRpb25zKCk7XG5cbmlmIChleGlzdHNTeW5jKHJlc29sdmUocGFja2FnZVJvb3QsICdSRUFETUUubWQnKSkpIHtcblx0Y29weUZpbGVTeW5jKHJlc29sdmUocGFja2FnZVJvb3QsICdSRUFETUUubWQnKSwgcmVzb2x2ZShkaXN0Um9vdCwgJy4uJywgJ1JFQURNRS5tZCcpKTtcbn1cbiIsICJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGRpcm5hbWUsIGV4dG5hbWUsIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IHNwYXduLCBzcGF3blN5bmMgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gJ25vZGU6bW9kdWxlJztcblxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IHNjcmlwdFJvb3QgPSBkaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5jb25zdCBwYWNrYWdlQ2FuZGlkYXRlID0gcmVzb2x2ZShzY3JpcHRSb290LCAnLi4nKTtcblxuZXhwb3J0IGNvbnN0IHBhY2thZ2VSb290ID0gcGFja2FnZUNhbmRpZGF0ZS5lbmRzV2l0aCgnL2Rpc3QnKVxuXHQ/IHJlc29sdmUocGFja2FnZUNhbmRpZGF0ZSwgJy4uJylcblx0OiBwYWNrYWdlQ2FuZGlkYXRlO1xuZXhwb3J0IGNvbnN0IHBhY2thZ2VTY3JpcHRSb290ID0gcGFja2FnZUNhbmRpZGF0ZS5lbmRzV2l0aCgnL2Rpc3QnKVxuXHQ/IHJlc29sdmUocGFja2FnZUNhbmRpZGF0ZSwgJ3NjcmlwdHMnKVxuXHQ6IHJlc29sdmUocGFja2FnZVJvb3QsICdzY3JpcHRzJyk7XG5cbmZ1bmN0aW9uIHJlc29sdmVQYWNrYWdlQmluYXJ5KHBhY2thZ2VOYW1lLCBiaW5OYW1lID0gcGFja2FnZU5hbWUpIHtcblx0Y29uc3QgcGFja2FnZUpzb25QYXRoID0gcmVxdWlyZS5yZXNvbHZlKGAke3BhY2thZ2VOYW1lfS9wYWNrYWdlLmpzb25gKTtcblx0Y29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGY4JykpO1xuXHRjb25zdCBiaW5GaWVsZCA9IHBhY2thZ2VKc29uLmJpbjtcblx0Y29uc3QgcmVsYXRpdmVQYXRoID1cblx0XHR0eXBlb2YgYmluRmllbGQgPT09ICdzdHJpbmcnXG5cdFx0XHQ/IGJpbkZpZWxkXG5cdFx0XHQ6IGJpbkZpZWxkPy5bYmluTmFtZV07XG5cblx0aWYgKCFyZWxhdGl2ZVBhdGgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byByZXNvbHZlIGJpbmFyeSBcIiR7YmluTmFtZX1cIiBmcm9tIHBhY2thZ2UgXCIke3BhY2thZ2VOYW1lfVwiLmApO1xuXHR9XG5cblx0cmV0dXJuIHJlc29sdmUoZGlybmFtZShwYWNrYWdlSnNvblBhdGgpLCByZWxhdGl2ZVBhdGgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUFzdHJvQmluKCkge1xuXHRyZXR1cm4gcmVzb2x2ZVBhY2thZ2VCaW5hcnkoJ2FzdHJvJywgJ2FzdHJvJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlV3JhbmdsZXJCaW4oKSB7XG5cdHJldHVybiByZXNvbHZlUGFja2FnZUJpbmFyeSgnd3JhbmdsZXInLCAnd3JhbmdsZXInKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb2R1Y3Rpb25CdWlsZEVudihleHRyYUVudiA9IHt9KSB7XG5cdHJldHVybiB7XG5cdFx0VFJFRVNFRURfTE9DQUxfREVWX01PREU6ICdjbG91ZGZsYXJlJyxcblx0XHRUUkVFU0VFRF9QVUJMSUNfRk9STVNfTE9DQUxfQllQQVNTX1RVUk5TVElMRTogJycsXG5cdFx0VFJFRVNFRURfRk9STVNfTE9DQUxfQllQQVNTX1RVUk5TVElMRTogJycsXG5cdFx0VFJFRVNFRURfRk9STVNfTE9DQUxfQllQQVNTX0NMT1VERkxBUkVfR1VBUkRTOiAnJyxcblx0XHRUUkVFU0VFRF9QVUJMSUNfREVWX1dBVENIX1JFTE9BRDogJycsXG5cdFx0Li4uZXh0cmFFbnYsXG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYWNrYWdlU2NyaXB0UGF0aChzY3JpcHROYW1lKSB7XG5cdGlmIChleHRuYW1lKHNjcmlwdE5hbWUpKSB7XG5cdFx0cmV0dXJuIHJlc29sdmUocGFja2FnZVNjcmlwdFJvb3QsIHNjcmlwdE5hbWUpO1xuXHR9XG5cblx0Zm9yIChjb25zdCBleHRlbnNpb24gb2YgWycuanMnLCAnLnRzJywgJy5tanMnXSkge1xuXHRcdGNvbnN0IGNhbmRpZGF0ZSA9IHJlc29sdmUocGFja2FnZVNjcmlwdFJvb3QsIGAke3NjcmlwdE5hbWV9JHtleHRlbnNpb259YCk7XG5cdFx0aWYgKGV4aXN0c1N5bmMoY2FuZGlkYXRlKSkge1xuXHRcdFx0cmV0dXJuIGNhbmRpZGF0ZTtcblx0XHR9XG5cdH1cblxuXHR0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byByZXNvbHZlIHBhY2thZ2Ugc2NyaXB0IFwiJHtzY3JpcHROYW1lfVwiLmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuTm9kZUJpbmFyeShiaW5QYXRoLCBhcmdzLCBvcHRpb25zID0ge30pIHtcblx0Y29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKHByb2Nlc3MuZXhlY1BhdGgsIFtiaW5QYXRoLCAuLi5hcmdzXSwge1xuXHRcdHN0ZGlvOiBvcHRpb25zLnN0ZGlvID8/ICdpbmhlcml0Jyxcblx0XHRjd2Q6IG9wdGlvbnMuY3dkID8/IHByb2Nlc3MuY3dkKCksXG5cdFx0ZW52OiB7IC4uLnByb2Nlc3MuZW52LCAuLi4ob3B0aW9ucy5lbnYgPz8ge30pIH0sXG5cdH0pO1xuXG5cdGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XG5cdFx0cHJvY2Vzcy5leGl0KHJlc3VsdC5zdGF0dXMgPz8gMSk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJ1bk5vZGVTY3JpcHQoc2NyaXB0UGF0aCwgYXJncyA9IFtdLCBvcHRpb25zID0ge30pIHtcblx0cmV0dXJuIHJ1bk5vZGVCaW5hcnkoc2NyaXB0UGF0aCwgYXJncywgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGF3bk5vZGVCaW5hcnkoYmluUGF0aCwgYXJncywgb3B0aW9ucyA9IHt9KSB7XG5cdHJldHVybiBzcGF3bihwcm9jZXNzLmV4ZWNQYXRoLCBbYmluUGF0aCwgLi4uYXJnc10sIHtcblx0XHRzdGRpbzogb3B0aW9ucy5zdGRpbyA/PyAnaW5oZXJpdCcsXG5cdFx0Y3dkOiBvcHRpb25zLmN3ZCA/PyBwcm9jZXNzLmN3ZCgpLFxuXHRcdGVudjogeyAuLi5wcm9jZXNzLmVudiwgLi4uKG9wdGlvbnMuZW52ID8/IHt9KSB9LFxuXHRcdGRldGFjaGVkOiBvcHRpb25zLmRldGFjaGVkID8/IGZhbHNlLFxuXHR9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxTQUFTLGNBQWMsWUFBWSxXQUFXLGFBQWEsY0FBYyxRQUFRLHFCQUFxQjtBQUN0RyxTQUFTLFdBQUFBLFVBQVMsV0FBQUMsVUFBUyxNQUFNLFVBQVUsV0FBQUMsZ0JBQWU7QUFDMUQsU0FBUyxhQUFhO0FBQ3RCLE9BQU8sUUFBUTs7O0FDRGYsU0FBUyxTQUFTLFNBQVMsZUFBZTtBQUMxQyxTQUFTLHFCQUFxQjtBQUU5QixTQUFTLHFCQUFxQjtBQUU5QixJQUFNQyxXQUFVLGNBQWMsWUFBWSxHQUFHO0FBQzdDLElBQU0sYUFBYSxRQUFRLGNBQWMsWUFBWSxHQUFHLENBQUM7QUFDekQsSUFBTSxtQkFBbUIsUUFBUSxZQUFZLElBQUk7QUFFMUMsSUFBTSxjQUFjLGlCQUFpQixTQUFTLE9BQU8sSUFDekQsUUFBUSxrQkFBa0IsSUFBSSxJQUM5QjtBQUNJLElBQU0sb0JBQW9CLGlCQUFpQixTQUFTLE9BQU8sSUFDL0QsUUFBUSxrQkFBa0IsU0FBUyxJQUNuQyxRQUFRLGFBQWEsU0FBUzs7O0FEVmpDLElBQU0sVUFBVUMsU0FBUSxhQUFhLEtBQUs7QUFDMUMsSUFBTSxjQUFjQSxTQUFRLGFBQWEsU0FBUztBQUNsRCxJQUFNLFdBQVdBLFNBQVEsYUFBYSxNQUFNO0FBRTVDLElBQU0sa0JBQWtCLG9CQUFJLElBQUksQ0FBQyxTQUFTLFNBQVMsS0FBSyxDQUFDO0FBRXpELFNBQVMsVUFBVSxNQUFNO0FBQ3hCLFFBQU0sUUFBUSxDQUFDO0FBQ2YsYUFBVyxTQUFTLFlBQVksTUFBTSxFQUFF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Q3ZDLFlBQVksTUFBTTtBQUFBLElBQ25CLENBQUM7QUFDRCxVQUFNLElBQUksTUFBTTtBQUFBLEVBQThCLFdBQVcsRUFBRTtBQUFBLEVBQzVEO0FBQ0Q7QUFFQSxPQUFPLFVBQVUsRUFBRSxXQUFXLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFFakQsV0FBVyxZQUFZLFVBQVUsT0FBTyxHQUFHO0FBQzFDLFFBQU0sWUFBWUEsU0FBUSxRQUFRO0FBQ2xDLE1BQUksY0FBYyxPQUFPO0FBQ3hCLFVBQU0sY0FBYyxVQUFVLFNBQVMsUUFBUTtBQUMvQztBQUFBLEVBQ0Q7QUFFQSxNQUFJLGdCQUFnQixJQUFJLFNBQVMsR0FBRztBQUNuQyxjQUFVLFVBQVUsU0FBUyxRQUFRO0FBQUEsRUFDdEM7QUFDRDtBQUVBLFdBQVcsWUFBWSxVQUFVLFdBQVcsR0FBRztBQUM5QyxRQUFNLFlBQVlBLFNBQVEsUUFBUTtBQUNsQyxNQUFJLGNBQWMsU0FBUyxjQUFjLFFBQVE7QUFDaEQsb0JBQWdCLFFBQVE7QUFBQSxFQUN6QjtBQUNEO0FBRUEsaUJBQWlCO0FBRWpCLElBQUksV0FBV0YsU0FBUSxhQUFhLFdBQVcsQ0FBQyxHQUFHO0FBQ2xELGVBQWFBLFNBQVEsYUFBYSxXQUFXLEdBQUdBLFNBQVEsVUFBVSxNQUFNLFdBQVcsQ0FBQztBQUNyRjsiLAogICJuYW1lcyI6IFsiZGlybmFtZSIsICJleHRuYW1lIiwgInJlc29sdmUiLCAicmVxdWlyZSIsICJyZXNvbHZlIiwgImRpcm5hbWUiLCAiZXh0bmFtZSJdCn0K
|
/package/dist/scripts/{.ts-run-1775616845195-odh4xzphk3l.js → .ts-run-1775630384291-crtqr3izsa.js}
RENAMED
|
File without changes
|