@layerzerolabs/build-utils-rust 1.2.83 → 1.2.85
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/dist/{2GIS7BVV.js → 2L4WSCE3.js} +3 -3
- package/dist/{2GIS7BVV.js.map → 2L4WSCE3.js.map} +1 -1
- package/dist/{LIKDXWCR.js → 4JBQUMGT.js} +36 -32
- package/dist/4JBQUMGT.js.map +1 -0
- package/dist/{ZS7IDLZZ.js → HO3LEEDJ.js} +11 -4
- package/dist/HO3LEEDJ.js.map +1 -0
- package/dist/{LRAPERZT.js → NGWKHE67.js} +4 -4
- package/dist/{LRAPERZT.js.map → NGWKHE67.js.map} +1 -1
- package/dist/YTW4SL4W.js +46 -0
- package/dist/YTW4SL4W.js.map +1 -0
- package/dist/cli.js +5 -4
- package/dist/cli.js.map +1 -1
- package/dist/index.js +5 -4
- package/dist/logger.d.ts.map +1 -1
- package/dist/resolve/discover.d.ts +1 -1
- package/dist/resolve/discover.d.ts.map +1 -1
- package/dist/resolve/discover.js +2 -2
- package/dist/resolve/exclude.d.ts.map +1 -1
- package/dist/resolve/index.d.ts.map +1 -1
- package/dist/resolve/index.js +5 -4
- package/dist/resolve/io.d.ts +2 -0
- package/dist/resolve/io.d.ts.map +1 -1
- package/dist/resolve/io.js +1 -1
- package/dist/resolve/rewrite.d.ts.map +1 -1
- package/dist/resolve/rewrite.js +3 -3
- package/dist/resolve/sync.d.ts +9 -0
- package/dist/resolve/sync.d.ts.map +1 -0
- package/dist/resolve/sync.js +7 -0
- package/dist/resolve/sync.js.map +1 -0
- package/package.json +5 -6
- package/dist/LIKDXWCR.js.map +0 -1
- package/dist/ZS7IDLZZ.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { tryRealpath, tryReaddir } from './
|
|
1
|
+
import { tryRealpath, tryReaddir } from './HO3LEEDJ.js';
|
|
2
2
|
import { logger } from './UDDAJZY4.js';
|
|
3
3
|
import { __name } from './VUOMXK5T.js';
|
|
4
4
|
import { stat, access, readFile } from 'fs/promises';
|
|
@@ -69,5 +69,5 @@ var findInstalled = /* @__PURE__ */ __name(async (dir, pkgName) => {
|
|
|
69
69
|
}, "findInstalled");
|
|
70
70
|
|
|
71
71
|
export { discoverPackages, isCrate, isWorkspaceRoot };
|
|
72
|
-
//# sourceMappingURL=
|
|
73
|
-
//# sourceMappingURL=
|
|
72
|
+
//# sourceMappingURL=2L4WSCE3.js.map
|
|
73
|
+
//# sourceMappingURL=2L4WSCE3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/resolve/discover.ts"],"names":["LZ_SCOPE","isCrate","dir","stats","stat","isDirectory","access","join","isWorkspaceRoot","crateRoot","manifestPath","raw","readFile","parse","workspace","err","logger","warn","discoverPackages","discovered","visited","realDir","tryRealpath","has","add","nodeModulesDir","pkgName","tryReaddir","addCrate","name","declaredDependencies","findInstalled","realPath","existing","get","undefined","set","dependencies","JSON","Object","keys","filter","startsWith","map","slice","length","current","dirname","found"],"mappings":"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","file":"
|
|
1
|
+
{"version":3,"sources":["../src/resolve/discover.ts"],"names":["LZ_SCOPE","isCrate","dir","stats","stat","isDirectory","access","join","isWorkspaceRoot","crateRoot","manifestPath","raw","readFile","parse","workspace","err","logger","warn","discoverPackages","discovered","visited","realDir","tryRealpath","has","add","nodeModulesDir","pkgName","tryReaddir","addCrate","name","declaredDependencies","findInstalled","realPath","existing","get","undefined","set","dependencies","JSON","Object","keys","filter","startsWith","map","slice","length","current","dirname","found"],"mappings":"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","file":"2L4WSCE3.js","sourcesContent":["/** Discovery — walk node_modules/@layerzerolabs/ to find all @layerzerolabs Cargo crates. */\n\nimport { access, readFile, stat } from 'fs/promises';\nimport { dirname, join } from 'path';\nimport { parse } from 'smol-toml';\n\nimport { logger } from '../logger';\nimport type { CollectedTree } from './io';\nimport { tryReaddir, tryRealpath } from './io';\n\n// ─── Constants ───\n\n/** Only packages under this npm scope are treated as Cargo dependencies. */\nconst LZ_SCOPE = '@layerzerolabs';\n\n// ─── Types ───\n\n/** A discovered package paired with its collected source tree, ready to vendor. */\nexport interface VendorTarget {\n /** npm package name (without scope) — the dependencies/ subdir. */\n pkgName: string;\n /** canonical source path (realpath through pnpm symlinks). */\n npmPkgDir: string;\n /** where the package is assembled: <staging root>/<pkgName>, synced to dependencies/<pkgName>. */\n depsPkgDir: string;\n /** included file/dir tree (excluded subtrees already pruned). */\n tree: CollectedTree;\n}\n\n// ─── Crate Helpers ───\n\n/** Checks if the directory contains a Cargo.toml. */\nexport const isCrate = async (dir: string): Promise<boolean> => {\n try {\n const stats = await stat(dir);\n if (!stats.isDirectory()) return false;\n await access(join(dir, 'Cargo.toml'));\n return true;\n } catch {\n return false;\n }\n};\n\n/** True if the directory's Cargo.toml declares a `[workspace]` table. */\nexport const isWorkspaceRoot = async (crateRoot: string): Promise<boolean> => {\n const manifestPath = join(crateRoot, 'Cargo.toml');\n let raw: string;\n try {\n raw = await readFile(manifestPath, 'utf-8');\n } catch {\n return false; // no readable Cargo.toml here — not a workspace root\n }\n try {\n return parse(raw).workspace != null;\n } catch (err) {\n // Warn rather than silently treat a malformed manifest as a non-workspace\n // (which would strip its [workspace] table); the parser is stricter than Cargo.\n logger.warn(`failed to parse ${manifestPath}; treating as non-workspace`, err);\n return false;\n }\n};\n\n// ─── Main Functions ───\n\n/**\n * Recursively discover all @layerzerolabs Cargo packages reachable from `dir`: everything in its\n * node_modules, plus the @layerzerolabs packages its package.json declares as dependencies.\n * Resolves pnpm symlinks to canonical paths; `visited` prevents re-walking shared deps.\n */\nexport const discoverPackages = async (\n dir: string,\n discovered: Map<string, string>,\n visited: Set<string>,\n): Promise<void> => {\n const realDir = await tryRealpath(dir);\n if (!realDir || visited.has(realDir)) return;\n visited.add(realDir);\n\n const nodeModulesDir = join(dir, 'node_modules', LZ_SCOPE);\n for (const pkgName of await tryReaddir(nodeModulesDir)) {\n await addCrate(\n pkgName,\n await tryRealpath(join(nodeModulesDir, pkgName)),\n discovered,\n visited,\n );\n }\n\n // Outside a workspace (e.g. pnpm's default layout for registry installs), a package's own\n // dependencies are not in its node_modules but beside it, so look them up the way Node does.\n for (const name of await declaredDependencies(realDir)) {\n await addCrate(name, await findInstalled(realDir, name), discovered, visited);\n }\n};\n\nconst addCrate = async (\n pkgName: string,\n realPath: string | undefined,\n discovered: Map<string, string>,\n visited: Set<string>,\n): Promise<void> => {\n if (!realPath || !(await isCrate(realPath))) return;\n const existing = discovered.get(pkgName);\n if (existing === undefined) {\n discovered.set(pkgName, realPath);\n } else if (existing !== realPath) {\n // Crates are vendored by name, so only one copy can win.\n logger.warn(\n `${LZ_SCOPE}/${pkgName} is installed at two paths; using ${existing}, ignoring ${realPath}`,\n );\n }\n await discoverPackages(realPath, discovered, visited);\n};\n\n/** Unscoped names of the @layerzerolabs packages in `dir`'s package.json `dependencies`. */\nconst declaredDependencies = async (dir: string): Promise<string[]> => {\n try {\n const { dependencies = {} } = JSON.parse(\n await readFile(join(dir, 'package.json'), 'utf-8'),\n );\n return Object.keys(dependencies)\n .filter((name) => name.startsWith(`${LZ_SCOPE}/`))\n .map((name) => name.slice(LZ_SCOPE.length + 1));\n } catch {\n return [];\n }\n};\n\n/** Node module resolution: the first `node_modules/@layerzerolabs/<pkgName>` from `dir` upwards. */\nconst findInstalled = async (dir: string, pkgName: string): Promise<string | undefined> => {\n for (let current = dir; ; current = dirname(current)) {\n const found = await tryRealpath(join(current, 'node_modules', LZ_SCOPE, pkgName));\n if (found || dirname(current) === current) return found;\n }\n};\n"]}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { syncTree } from './YTW4SL4W.js';
|
|
2
|
+
import { rewriteCargoTomls } from './NGWKHE67.js';
|
|
3
|
+
import { discoverPackages, isCrate } from './2L4WSCE3.js';
|
|
4
|
+
import { collectFiles } from './HO3LEEDJ.js';
|
|
4
5
|
import { logger } from './UDDAJZY4.js';
|
|
5
6
|
import { __name } from './VUOMXK5T.js';
|
|
6
|
-
import { rm, mkdir, copyFile } from 'fs/promises';
|
|
7
|
+
import { mkdtemp, rm, mkdir, copyFile } from 'fs/promises';
|
|
8
|
+
import { tmpdir } from 'os';
|
|
7
9
|
import { join, resolve, relative } from 'path';
|
|
8
10
|
|
|
9
11
|
var buildDependenciesPathMap = /* @__PURE__ */ __name((targets) => {
|
|
@@ -48,36 +50,38 @@ var resolveDependencies = /* @__PURE__ */ __name(async ({ cwd, cargoDir } = {})
|
|
|
48
50
|
logger.info("No @layerzerolabs namespaced Cargo dependencies found in node_modules");
|
|
49
51
|
return;
|
|
50
52
|
}
|
|
51
|
-
await
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
53
|
+
const stagingRoot = await mkdtemp(join(tmpdir(), "build-utils-rust-resolve-"));
|
|
54
|
+
try {
|
|
55
|
+
const targets = await Promise.all(Array.from(discovered, async ([pkgName, npmPkgDir]) => {
|
|
56
|
+
const tree = await collectFiles(npmPkgDir);
|
|
57
|
+
logger.debug(`${pkgName}: collected ${tree.files.length} files, ${tree.dirs.length} dirs`);
|
|
58
|
+
return {
|
|
59
|
+
pkgName,
|
|
60
|
+
npmPkgDir,
|
|
61
|
+
depsPkgDir: join(stagingRoot, pkgName),
|
|
62
|
+
tree
|
|
63
|
+
};
|
|
64
|
+
}));
|
|
65
|
+
const ctx = {
|
|
66
|
+
pathMap: buildDependenciesPathMap(targets),
|
|
67
|
+
discovered
|
|
66
68
|
};
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
await
|
|
76
|
-
|
|
77
|
-
|
|
69
|
+
logger.debug(`path map: ${ctx.pathMap.size} entries`);
|
|
70
|
+
await Promise.all(targets.map(async ({ pkgName, npmPkgDir, depsPkgDir, tree }) => {
|
|
71
|
+
await copyCollected(npmPkgDir, depsPkgDir, tree);
|
|
72
|
+
await rewriteCargoTomls(npmPkgDir, depsPkgDir, tree, ctx);
|
|
73
|
+
logger.debug(` ${pkgName} -> ${npmPkgDir}`);
|
|
74
|
+
}));
|
|
75
|
+
await syncTree(stagingRoot, depsRoot);
|
|
76
|
+
} finally {
|
|
77
|
+
await rm(stagingRoot, {
|
|
78
|
+
recursive: true,
|
|
79
|
+
force: true
|
|
80
|
+
});
|
|
81
|
+
}
|
|
78
82
|
logger.info(`Resolved ${discovered.size} Cargo dependencies into ${relative(packageRoot, depsRoot) || "./dependencies/"}`);
|
|
79
83
|
}, "resolveDependencies");
|
|
80
84
|
|
|
81
85
|
export { buildDependenciesPathMap, resolveDependencies };
|
|
82
|
-
//# sourceMappingURL=
|
|
83
|
-
//# sourceMappingURL=
|
|
86
|
+
//# sourceMappingURL=4JBQUMGT.js.map
|
|
87
|
+
//# sourceMappingURL=4JBQUMGT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resolve/index.ts"],"names":["buildDependenciesPathMap","targets","pathMap","Map","npmPkgDir","depsPkgDir","tree","dir","manifestDirs","set","join","logger","trace","debug","size","copyCollected","srcRoot","destRoot","mkdir","recursive","Promise","all","dirs","map","files","file","copyFile","resolveCargoRoot","packageRoot","cargoDir","resolved","resolve","isCrate","Error","resolveDependencies","cwd","process","depsRoot","discovered","discoverPackages","Set","info","stagingRoot","mkdtemp","tmpdir","Array","from","pkgName","collectFiles","length","ctx","rewriteCargoTomls","syncTree","rm","force","relative"],"mappings":"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","file":"4JBQUMGT.js","sourcesContent":["/**\n * Vendor @layerzerolabs Cargo dependencies from node_modules into a flat\n * dependencies/ directory with rewritten path deps, so a Rust package builds\n * without the rest of the monorepo.\n */\n\nimport { copyFile, mkdir, mkdtemp, rm } from 'fs/promises';\nimport { tmpdir } from 'os';\nimport { join, relative, resolve } from 'path';\n\nimport { logger } from '../logger';\nimport { discoverPackages, isCrate, type VendorTarget } from './discover';\nimport type { CollectedTree } from './io';\nimport { collectFiles } from './io';\nimport type { RewriteContext } from './rewrite';\nimport { rewriteCargoTomls } from './rewrite';\nimport { syncTree } from './sync';\n\n// ─── Path Map ───\n\n/** Maps each crate's npm package source path to its vendored dependencies/ location. */\nexport const buildDependenciesPathMap = (targets: VendorTarget[]): Map<string, string> => {\n const pathMap = new Map<string, string>();\n\n for (const { npmPkgDir, depsPkgDir, tree } of targets) {\n for (const dir of tree.manifestDirs) {\n pathMap.set(join(npmPkgDir, dir), join(depsPkgDir, dir));\n logger.trace(`map ${join(npmPkgDir, dir)} -> ${join(depsPkgDir, dir)}`);\n }\n }\n logger.debug(`built dependency path map: ${pathMap.size} entries`);\n return pathMap;\n};\n\n// ─── File Operations ───\n\n/** Copy a collected tree into destRoot. */\nconst copyCollected = async (\n srcRoot: string,\n destRoot: string,\n tree: CollectedTree,\n): Promise<void> => {\n await mkdir(destRoot, { recursive: true });\n await Promise.all(tree.dirs.map((dir) => mkdir(join(destRoot, dir), { recursive: true })));\n await Promise.all(\n tree.files.map((file) => copyFile(join(srcRoot, file), join(destRoot, file))),\n );\n};\n\n/** Resolves the Cargo root: `cargoDir` if provided, else `packageRoot`. Throws if no Cargo.toml. */\nconst resolveCargoRoot = async (packageRoot: string, cargoDir?: string): Promise<string> => {\n if (cargoDir) {\n const resolved = resolve(packageRoot, cargoDir);\n if (!(await isCrate(resolved))) {\n throw new Error(`--cargo-dir ${cargoDir} does not contain a Cargo.toml`);\n }\n return resolved;\n }\n\n if (!(await isCrate(packageRoot))) {\n throw new Error(`${packageRoot} does not contain a Cargo.toml`);\n }\n\n return packageRoot;\n};\n\n// ─── Public API ───\n\n/**\n * Entry point: vendor every @layerzerolabs Cargo crate reachable through node_modules\n * into dependencies/, with path deps rewritten to resolve locally.\n *\n * @param cwd pnpm package root (where node_modules/ lives). Default: process.cwd()\n * @param cargoDir Cargo crate directory to vendor into. Default: packageRoot\n */\nexport const resolveDependencies = async ({\n cwd,\n cargoDir,\n}: { cwd?: string; cargoDir?: string } = {}): Promise<void> => {\n const packageRoot = resolve(cwd ?? process.cwd());\n\n const depsRoot = join(await resolveCargoRoot(packageRoot, cargoDir), 'dependencies');\n\n const discovered = new Map<string, string>();\n await discoverPackages(packageRoot, discovered, new Set());\n\n if (discovered.size === 0) {\n logger.info('No @layerzerolabs namespaced Cargo dependencies found in node_modules');\n return;\n }\n\n // Assemble dependencies/ in a staging dir, then sync it over the real one so unchanged files\n // keep their mtimes (see syncTree). Rewritten path deps are relative between vendored crates,\n // so the staging location doesn't leak into the output.\n const stagingRoot = await mkdtemp(join(tmpdir(), 'build-utils-rust-resolve-'));\n try {\n // Collect each package's tree once — copy, path map, and rewrite all reuse it.\n const targets: VendorTarget[] = await Promise.all(\n Array.from(discovered, async ([pkgName, npmPkgDir]) => {\n const tree = await collectFiles(npmPkgDir);\n logger.debug(\n `${pkgName}: collected ${tree.files.length} files, ${tree.dirs.length} dirs`,\n );\n return { pkgName, npmPkgDir, depsPkgDir: join(stagingRoot, pkgName), tree };\n }),\n );\n\n const ctx: RewriteContext = {\n pathMap: buildDependenciesPathMap(targets),\n discovered,\n };\n logger.debug(`path map: ${ctx.pathMap.size} entries`);\n\n await Promise.all(\n targets.map(async ({ pkgName, npmPkgDir, depsPkgDir, tree }) => {\n await copyCollected(npmPkgDir, depsPkgDir, tree);\n await rewriteCargoTomls(npmPkgDir, depsPkgDir, tree, ctx);\n logger.debug(` ${pkgName} -> ${npmPkgDir}`);\n }),\n );\n\n await syncTree(stagingRoot, depsRoot);\n } finally {\n await rm(stagingRoot, { recursive: true, force: true });\n }\n\n logger.info(\n `Resolved ${discovered.size} Cargo dependencies into ${relative(packageRoot, depsRoot) || './dependencies/'}`,\n );\n};\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { logger } from './UDDAJZY4.js';
|
|
2
2
|
import { removeExcludedFiles, COPY_EXTENSIONS } from './2T2WFWNM.js';
|
|
3
3
|
import { __name } from './VUOMXK5T.js';
|
|
4
|
-
import { realpath, stat, readdir } from 'fs/promises';
|
|
4
|
+
import { realpath, stat, lstat, readdir } from 'fs/promises';
|
|
5
5
|
import { join, extname, basename, dirname } from 'path';
|
|
6
6
|
|
|
7
7
|
var tryRealpath = /* @__PURE__ */ __name(async (path) => {
|
|
@@ -18,6 +18,13 @@ var tryIsDirectory = /* @__PURE__ */ __name(async (path) => {
|
|
|
18
18
|
return false;
|
|
19
19
|
}
|
|
20
20
|
}, "tryIsDirectory");
|
|
21
|
+
var tryLstat = /* @__PURE__ */ __name(async (path) => {
|
|
22
|
+
try {
|
|
23
|
+
return await lstat(path);
|
|
24
|
+
} catch {
|
|
25
|
+
return void 0;
|
|
26
|
+
}
|
|
27
|
+
}, "tryLstat");
|
|
21
28
|
var tryReaddir = /* @__PURE__ */ __name(async (dir) => {
|
|
22
29
|
try {
|
|
23
30
|
return await readdir(dir);
|
|
@@ -54,6 +61,6 @@ var collectFiles = /* @__PURE__ */ __name(async (root, relativePath = "") => {
|
|
|
54
61
|
};
|
|
55
62
|
}, "collectFiles");
|
|
56
63
|
|
|
57
|
-
export { collectFiles, tryIsDirectory, tryReaddir, tryRealpath };
|
|
58
|
-
//# sourceMappingURL=
|
|
59
|
-
//# sourceMappingURL=
|
|
64
|
+
export { collectFiles, tryIsDirectory, tryLstat, tryReaddir, tryRealpath };
|
|
65
|
+
//# sourceMappingURL=HO3LEEDJ.js.map
|
|
66
|
+
//# sourceMappingURL=HO3LEEDJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resolve/io.ts"],"names":["tryRealpath","path","realpath","undefined","tryIsDirectory","stat","isDirectory","tryLstat","lstat","tryReaddir","dir","readdir","collectFiles","root","relativePath","dirs","files","manifestDirs","rawFileNames","join","fileNames","removeExcludedFiles","map","e","file","subDir","length","push","logger","trace","COPY_EXTENSIONS","has","extname","basename","dirname"],"mappings":"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","file":"HO3LEEDJ.js","sourcesContent":["import type { Stats } from 'fs';\nimport { lstat, readdir, realpath, stat } from 'fs/promises';\nimport { basename, dirname, extname, join } from 'path';\n\nimport { logger } from '../logger';\nimport { COPY_EXTENSIONS, removeExcludedFiles } from './exclude';\n\nexport const tryRealpath = async (path: string): Promise<string | undefined> => {\n try {\n return await realpath(path);\n } catch {\n return undefined;\n }\n};\n\nexport const tryIsDirectory = async (path: string): Promise<boolean> => {\n try {\n return (await stat(path)).isDirectory();\n } catch {\n return false;\n }\n};\n\nexport const tryLstat = async (path: string): Promise<Stats | undefined> => {\n try {\n return await lstat(path);\n } catch {\n return undefined;\n }\n};\n\nexport const tryReaddir = async (dir: string): Promise<string[]> => {\n try {\n return await readdir(dir);\n } catch {\n return [];\n }\n};\n\nexport interface CollectedTree {\n /** directories containing copyable content, relative to root (no empties) */\n dirs: string[];\n /** copyable files (COPY_EXTENSIONS), relative to root (excluded subtrees pruned) */\n files: string[];\n /** dirs that directly contain a Cargo.toml (crate roots), relative to root; '.' is the root */\n manifestDirs: string[];\n}\n\n/**\n * Walk `root` once, applying exclusion per level and keeping only COPY_EXTENSIONS files.\n * Also records `manifestDirs` (dirs holding a Cargo.toml) so consumers don't re-scan.\n */\nexport const collectFiles = async (root: string, relativePath = ''): Promise<CollectedTree> => {\n const dirs: string[] = [];\n const files: string[] = [];\n const manifestDirs: string[] = [];\n\n const rawFileNames = await tryReaddir(join(root, relativePath));\n const fileNames = removeExcludedFiles(rawFileNames).map((e) => join(relativePath, e));\n\n for (const file of fileNames) {\n if (await tryIsDirectory(join(root, file))) {\n const subDir = await collectFiles(root, file);\n if (subDir.files.length > 0) {\n dirs.push(file, ...subDir.dirs);\n files.push(...subDir.files);\n manifestDirs.push(...subDir.manifestDirs);\n } else {\n logger.trace(`skip empty dir ${file}`);\n }\n } else if (COPY_EXTENSIONS.has(extname(file))) {\n files.push(file);\n if (basename(file) === 'Cargo.toml') manifestDirs.push(dirname(file));\n logger.trace(`collect ${file}`);\n }\n }\n return { dirs, files, manifestDirs };\n};\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { isWorkspaceRoot } from './
|
|
2
|
-
import { tryRealpath } from './
|
|
1
|
+
import { isWorkspaceRoot } from './2L4WSCE3.js';
|
|
2
|
+
import { tryRealpath } from './HO3LEEDJ.js';
|
|
3
3
|
import { logger } from './UDDAJZY4.js';
|
|
4
4
|
import { hasExcludedSegment } from './2T2WFWNM.js';
|
|
5
5
|
import { __name } from './VUOMXK5T.js';
|
|
@@ -111,5 +111,5 @@ var rewriteCargoTomls = /* @__PURE__ */ __name(async (srcRoot, destRoot, tree, c
|
|
|
111
111
|
}, "rewriteCargoTomls");
|
|
112
112
|
|
|
113
113
|
export { pruneExcludedLiteralMembers, rewriteCargoToml, rewriteCargoTomls, rewritePathDeps, stripRootOnlyTables };
|
|
114
|
-
//# sourceMappingURL=
|
|
115
|
-
//# sourceMappingURL=
|
|
114
|
+
//# sourceMappingURL=NGWKHE67.js.map
|
|
115
|
+
//# sourceMappingURL=NGWKHE67.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/resolve/rewrite.ts"],"names":["isTable","value","Array","isArray","DEP_TABLE_KEYS","pathDepSpecs","manifest","includeWorkspaceDeps","containers","target","Object","values","filter","depTables","flatMap","container","map","key","workspace","dependencies","table","spec","path","pruneExcludedLiteralMembers","changed","members","kept","m","includes","hasExcludedSegment","length","rewritePathDeps","originalDir","manifestDir","ctx","resolveViaRealpath","pathMap","resolveViaNameFallback","rewritten","relative","logger","trace","stripRootOnlyTables","rewriteCargoToml","cargoTomlPath","stripRootTables","parse","readFile","pathsChanged","dirname","tablesChanged","writeFile","stringify","debug","pathValue","resolvedPath","tryRealpath","join","get","undefined","segments","split","Boolean","best","pkgName","realPath","discovered","pkgIndex","indexOf","vendoredBase","suffixSegments","slice","rewriteCargoTomls","srcRoot","destRoot","tree","manifestDirs","preserve","isWorkspaceRoot"],"mappings":"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","file":"LRAPERZT.js","sourcesContent":["/**\n * Rewrite a vendored Cargo.toml's path deps into the flat dependencies/ layout,\n * operating on the parsed TOML (via smol-toml) rather than text.\n */\n\nimport { readFile, writeFile } from 'fs/promises';\nimport { dirname, join, relative } from 'path';\nimport { parse, stringify } from 'smol-toml';\n\nimport { logger } from '../logger';\nimport { isWorkspaceRoot } from './discover';\nimport { hasExcludedSegment } from './exclude';\nimport { type CollectedTree, tryRealpath } from './io';\n\n/** Bundled resolution state passed through the rewrite pipeline. */\nexport interface RewriteContext {\n pathMap: Map<string, string>;\n discovered: Map<string, string>;\n}\n\ntype Table = Record<string, unknown>;\n\n/** A dependency spec that carries a `path` — an inline table like `{ path = \"…\" }`. */\ntype PathDepSpec = Table & { path: string };\n\nconst isTable = (value: unknown): value is Table =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst DEP_TABLE_KEYS = ['dependencies', 'dev-dependencies', 'build-dependencies'] as const;\n\n/**\n * Dependency specs that declare a `path`, across every dependency table (plus\n * `[workspace.dependencies]` when `includeWorkspaceDeps`). Specs are live references\n * into `manifest`, so mutating `.path` updates it.\n */\nconst pathDepSpecs = (manifest: Table, includeWorkspaceDeps: boolean): PathDepSpec[] => {\n // The root manifest and each [target.'cfg(...)'] table both hold DEP_TABLE_KEYS tables.\n const containers = [\n manifest,\n ...(isTable(manifest.target) ? Object.values(manifest.target).filter(isTable) : []),\n ];\n\n const depTables = [\n ...containers.flatMap((container) => DEP_TABLE_KEYS.map((key) => container[key])),\n ...(includeWorkspaceDeps && isTable(manifest.workspace)\n ? [manifest.workspace.dependencies]\n : []),\n ];\n\n return depTables\n .filter(isTable)\n .flatMap((table) => Object.values(table))\n .filter((spec): spec is PathDepSpec => isTable(spec) && typeof spec.path === 'string');\n};\n\n/**\n * Drop literal `members` / `default-members` entries whose path contains an excluded\n * directory segment (e.g. `tests/mock_vault`) — those dirs are never vendored, so the\n * member would dangle and fail Cargo's workspace load. Globs (`tests/*`) are kept; Cargo\n * re-expands them to a harmless empty match. Returns true if any member was removed.\n */\nexport const pruneExcludedLiteralMembers = (manifest: Table): boolean => {\n const workspace = manifest.workspace;\n if (!isTable(workspace)) return false;\n\n let changed = false;\n for (const key of ['members', 'default-members'] as const) {\n const members = workspace[key];\n if (!Array.isArray(members)) continue;\n\n // Keep everything except literal (non-glob) members inside an excluded dir.\n const kept = members.filter(\n (m) => typeof m !== 'string' || m.includes('*') || !hasExcludedSegment(m),\n );\n\n if (kept.length !== members.length) {\n workspace[key] = kept;\n changed = true;\n }\n }\n return changed;\n};\n\n/** Rebase every path dep in `manifest` into the flat dependencies/ layout. Returns true if any changed. */\nexport const rewritePathDeps = async (\n manifest: Table,\n originalDir: string,\n manifestDir: string,\n ctx: RewriteContext,\n includeWorkspaceDeps: boolean,\n): Promise<boolean> => {\n let changed = false;\n for (const spec of pathDepSpecs(manifest, includeWorkspaceDeps)) {\n const target =\n (await resolveViaRealpath(originalDir, spec.path, ctx.pathMap)) ??\n resolveViaNameFallback(spec.path, ctx);\n if (!target) continue;\n\n const rewritten = relative(manifestDir, target);\n if (rewritten === spec.path) continue;\n\n logger.trace(`rewrite path dep ${spec.path} -> ${rewritten}`);\n spec.path = rewritten;\n changed = true;\n }\n\n return changed;\n};\n\n/**\n * Delete the `[workspace]` / `[patch.*]` / `[profile.*]` tables — invalid or ignored in a\n * vendored dependency (only honored at the real workspace root). Returns true if any was removed.\n */\nexport const stripRootOnlyTables = (manifest: Table): boolean => {\n let changed = false;\n for (const table of ['workspace', 'patch', 'profile'] as const) {\n if (manifest[table] != null) {\n delete manifest[table];\n changed = true;\n }\n }\n return changed;\n};\n\n/**\n * Rewrite one vendored Cargo.toml in place: rebase its path deps, then strip the root-only\n * tables — or, for a preserved workspace root (`stripRootTables = false`), prune excluded\n * members instead. Re-serialized only if something changed.\n *\n * @param originalDir source crate dir the manifest was copied from\n * @param cargoTomlPath the vendored Cargo.toml to rewrite\n */\nexport const rewriteCargoToml = async (\n originalDir: string,\n cargoTomlPath: string,\n ctx: RewriteContext,\n stripRootTables = true,\n): Promise<void> => {\n const manifest = parse(await readFile(cargoTomlPath, 'utf-8'));\n\n const pathsChanged = await rewritePathDeps(\n manifest,\n originalDir,\n dirname(cargoTomlPath),\n ctx,\n !stripRootTables,\n );\n\n const tablesChanged = stripRootTables\n ? stripRootOnlyTables(manifest)\n : pruneExcludedLiteralMembers(manifest);\n\n if (pathsChanged || tablesChanged) {\n await writeFile(cargoTomlPath, stringify(manifest));\n logger.debug(`rewrote ${cargoTomlPath}`);\n }\n};\n\n/** Primary resolution: realpath the path through pnpm symlinks, then look it up in pathMap. */\nconst resolveViaRealpath = async (\n originalDir: string,\n pathValue: string,\n pathMap: Map<string, string>,\n): Promise<string | undefined> => {\n const resolvedPath = await tryRealpath(join(originalDir, pathValue));\n return resolvedPath ? pathMap.get(resolvedPath) : undefined;\n};\n\n/**\n * Fallback: locate a discovered npm package stem in the path and preserve every\n * suffix segment after it (e.g. protocol-stellar-v2/message-libs/simple-message-lib).\n *\n * When several discovered package names appear as path segments, pick the\n * **rightmost** (deepest) match — insertion order must not win over specificity.\n */\nconst resolveViaNameFallback = (pathValue: string, ctx: RewriteContext): string | undefined => {\n const segments = pathValue.split('/').filter(Boolean);\n if (segments.length === 0) return undefined;\n\n let best:\n | {\n pkgIndex: number;\n vendoredBase: string;\n suffixSegments: string[];\n }\n | undefined;\n\n for (const [pkgName, realPath] of ctx.discovered) {\n const pkgIndex = segments.indexOf(pkgName);\n if (pkgIndex === -1) continue;\n\n const vendoredBase = ctx.pathMap.get(realPath);\n if (!vendoredBase) continue;\n\n // Prefer the deepest stem. Equal index cannot happen for distinct names.\n if (best != null && pkgIndex <= best.pkgIndex) continue;\n\n best = {\n pkgIndex,\n vendoredBase,\n suffixSegments: segments.slice(pkgIndex + 1),\n };\n }\n\n if (!best) return undefined;\n return best.suffixSegments.length === 0\n ? best.vendoredBase\n : join(best.vendoredBase, ...best.suffixSegments);\n};\n\n/**\n * Rewrite every Cargo.toml in a copied dependency tree. The root manifest keeps its\n * root-only tables when it's a workspace (members inherit from them); all others strip them.\n */\nexport const rewriteCargoTomls = async (\n srcRoot: string,\n destRoot: string,\n tree: CollectedTree,\n ctx: RewriteContext,\n): Promise<void> => {\n for (const manifestDir of tree.manifestDirs) {\n const preserve = manifestDir === '.' && (await isWorkspaceRoot(destRoot));\n\n await rewriteCargoToml(\n join(srcRoot, manifestDir),\n join(destRoot, manifestDir, 'Cargo.toml'),\n ctx,\n !preserve,\n );\n }\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/resolve/rewrite.ts"],"names":["isTable","value","Array","isArray","DEP_TABLE_KEYS","pathDepSpecs","manifest","includeWorkspaceDeps","containers","target","Object","values","filter","depTables","flatMap","container","map","key","workspace","dependencies","table","spec","path","pruneExcludedLiteralMembers","changed","members","kept","m","includes","hasExcludedSegment","length","rewritePathDeps","originalDir","manifestDir","ctx","resolveViaRealpath","pathMap","resolveViaNameFallback","rewritten","relative","logger","trace","stripRootOnlyTables","rewriteCargoToml","cargoTomlPath","stripRootTables","parse","readFile","pathsChanged","dirname","tablesChanged","writeFile","stringify","debug","pathValue","resolvedPath","tryRealpath","join","get","undefined","segments","split","Boolean","best","pkgName","realPath","discovered","pkgIndex","indexOf","vendoredBase","suffixSegments","slice","rewriteCargoTomls","srcRoot","destRoot","tree","manifestDirs","preserve","isWorkspaceRoot"],"mappings":";;;;;;;;;AAyBA,IAAMA,OAAAA,mBAAU,MAAA,CAAA,CAACC,KAAAA,KACb,OAAOA,KAAAA,KAAU,QAAA,IAAYA,KAAAA,KAAU,IAAA,IAAQ,CAACC,KAAAA,CAAMC,OAAAA,CAAQF,KAAAA,CAAAA,EADlD,SAAA,CAAA;AAGhB,IAAMG,cAAAA,GAAiB;AAAC,EAAA,cAAA;AAAgB,EAAA,kBAAA;AAAoB,EAAA;;AAO5D,IAAMC,YAAAA,mBAAe,MAAA,CAAA,CAACC,QAAAA,EAAiBC,oBAAAA,KAAAA;AAEnC,EAAA,MAAMC,UAAAA,GAAa;AACfF,IAAAA,QAAAA;OACIN,OAAAA,CAAQM,QAAAA,CAASG,MAAM,CAAA,GAAIC,MAAAA,CAAOC,MAAAA,CAAOL,QAAAA,CAASG,MAAM,CAAA,CAAEG,MAAAA,CAAOZ,OAAAA,CAAAA,GAAW;;AAGpF,EAAA,MAAMa,SAAAA,GAAY;OACXL,UAAAA,CAAWM,OAAAA,CAAQ,CAACC,SAAAA,KAAcX,cAAAA,CAAeY,GAAAA,CAAI,CAACC,GAAAA,KAAQF,SAAAA,CAAUE,GAAAA,CAAI,CAAA,CAAA;OAC3EV,oBAAAA,IAAwBP,OAAAA,CAAQM,QAAAA,CAASY,SAAS,CAAA,GAChD;AAACZ,MAAAA,QAAAA,CAASY,SAAAA,CAAUC;QACpB;;AAGV,EAAA,OAAON,SAAAA,CACFD,OAAOZ,OAAAA,CAAAA,CACPc,QAAQ,CAACM,KAAAA,KAAUV,OAAOC,MAAAA,CAAOS,KAAAA,CAAAA,CAAAA,CACjCR,MAAAA,CAAO,CAACS,IAAAA,KAA8BrB,OAAAA,CAAQqB,IAAAA,CAAAA,IAAS,OAAOA,IAAAA,CAAKC,IAAAA,KAAS,QAAA,CAAA;AACrF,CAAA,EAlBqB,cAAA,CAAA;AA0Bd,IAAMC,2BAAAA,2BAA+BjB,QAAAA,KAAAA;AACxC,EAAA,MAAMY,YAAYZ,QAAAA,CAASY,SAAAA;AAC3B,EAAA,IAAI,CAAClB,OAAAA,CAAQkB,SAAAA,CAAAA,EAAY,OAAO,KAAA;AAEhC,EAAA,IAAIM,OAAAA,GAAU,KAAA;AACd,EAAA,KAAA,MAAWP,GAAAA,IAAO;AAAC,IAAA,SAAA;AAAW,IAAA;AAA6B,GAAA,EAAA;AACvD,IAAA,MAAMQ,OAAAA,GAAUP,UAAUD,GAAAA,CAAAA;AAC1B,IAAA,IAAI,CAACf,KAAAA,CAAMC,OAAAA,CAAQsB,OAAAA,CAAAA,EAAU;AAG7B,IAAA,MAAMC,IAAAA,GAAOD,OAAAA,CAAQb,MAAAA,CACjB,CAACe,MAAM,OAAOA,CAAAA,KAAM,QAAA,IAAYA,CAAAA,CAAEC,SAAS,GAAA,CAAA,IAAQ,CAACC,kBAAAA,CAAmBF,CAAAA,CAAAA,CAAAA;AAG3E,IAAA,IAAID,IAAAA,CAAKI,MAAAA,KAAWL,OAAAA,CAAQK,MAAAA,EAAQ;AAChCZ,MAAAA,SAAAA,CAAUD,GAAAA,CAAAA,GAAOS,IAAAA;AACjBF,MAAAA,OAAAA,GAAU,IAAA;AACd,IAAA;AACJ,EAAA;AACA,EAAA,OAAOA,OAAAA;AACX,CAAA,EApB2C,6BAAA;AAuBpC,IAAMO,kCAAkB,MAAA,CAAA,OAC3BzB,QAAAA,EACA0B,WAAAA,EACAC,WAAAA,EACAC,KACA3B,oBAAAA,KAAAA;AAEA,EAAA,IAAIiB,OAAAA,GAAU,KAAA;AACd,EAAA,KAAA,MAAWH,IAAAA,IAAQhB,YAAAA,CAAaC,QAAAA,EAAUC,oBAAAA,CAAAA,EAAuB;AAC7D,IAAA,MAAME,MAAAA,GACD,MAAM0B,kBAAAA,CAAmBH,WAAAA,EAAaX,IAAAA,CAAKC,IAAAA,EAAMY,GAAAA,CAAIE,OAAO,CAAA,IAC7DC,sBAAAA,CAAuBhB,IAAAA,CAAKC,IAAAA,EAAMY,GAAAA,CAAAA;AACtC,IAAA,IAAI,CAACzB,MAAAA,EAAQ;AAEb,IAAA,MAAM6B,SAAAA,GAAYC,QAAAA,CAASN,WAAAA,EAAaxB,MAAAA,CAAAA;AACxC,IAAA,IAAI6B,SAAAA,KAAcjB,KAAKC,IAAAA,EAAM;AAE7BkB,IAAAA,MAAAA,CAAOC,MAAM,CAAA,iBAAA,EAAoBpB,IAAAA,CAAKC,IAAI,CAAA,IAAA,EAAOgB,SAAAA,CAAAA,CAAW,CAAA;AAC5DjB,IAAAA,IAAAA,CAAKC,IAAAA,GAAOgB,SAAAA;AACZd,IAAAA,OAAAA,GAAU,IAAA;AACd,EAAA;AAEA,EAAA,OAAOA,OAAAA;AACX,CAAA,EAvB+B,iBAAA;AA6BxB,IAAMkB,mBAAAA,2BAAuBpC,QAAAA,KAAAA;AAChC,EAAA,IAAIkB,OAAAA,GAAU,KAAA;AACd,EAAA,KAAA,MAAWJ,KAAAA,IAAS;AAAC,IAAA,WAAA;AAAa,IAAA,OAAA;AAAS,IAAA;AAAqB,GAAA,EAAA;AAC5D,IAAA,IAAId,QAAAA,CAASc,KAAAA,CAAAA,IAAU,IAAA,EAAM;AACzB,MAAA,OAAOd,SAASc,KAAAA,CAAAA;AAChBI,MAAAA,OAAAA,GAAU,IAAA;AACd,IAAA;AACJ,EAAA;AACA,EAAA,OAAOA,OAAAA;AACX,CAAA,EATmC,qBAAA;AAmB5B,IAAMmB,mCAAmB,MAAA,CAAA,OAC5BX,WAAAA,EACAY,aAAAA,EACAV,GAAAA,EACAW,kBAAkB,IAAA,KAAI;AAEtB,EAAA,MAAMvC,WAAWwC,KAAAA,CAAM,MAAMC,QAAAA,CAASH,aAAAA,EAAe,OAAA,CAAA,CAAA;AAErD,EAAA,MAAMI,YAAAA,GAAe,MAAMjB,eAAAA,CACvBzB,QAAAA,EACA0B,WAAAA,EACAiB,QAAQL,aAAAA,CAAAA,EACRV,GAAAA,EACA,CAACW,eAAAA,CAAAA;AAGL,EAAA,MAAMK,gBAAgBL,eAAAA,GAChBH,mBAAAA,CAAoBpC,QAAAA,CAAAA,GACpBiB,4BAA4BjB,QAAAA,CAAAA;AAElC,EAAA,IAAI0C,gBAAgBE,aAAAA,EAAe;AAC/B,IAAA,MAAMC,SAAAA,CAAUP,aAAAA,EAAeQ,SAAAA,CAAU9C,QAAAA,CAAAA,CAAAA;AACzCkC,IAAAA,MAAAA,CAAOa,KAAAA,CAAM,CAAA,QAAA,EAAWT,aAAAA,CAAAA,CAAe,CAAA;AAC3C,EAAA;AACJ,CAAA,EAxBgC,kBAAA;AA2BhC,IAAMT,kBAAAA,mBAAqB,MAAA,CAAA,OACvBH,WAAAA,EACAsB,SAAAA,EACAlB,OAAAA,KAAAA;AAEA,EAAA,MAAMmB,eAAe,MAAMC,WAAAA,CAAYC,IAAAA,CAAKzB,WAAAA,EAAasB,SAAAA,CAAAA,CAAAA;AACzD,EAAA,OAAOC,YAAAA,GAAenB,OAAAA,CAAQsB,GAAAA,CAAIH,YAAAA,CAAAA,GAAgBI,MAAAA;AACtD,CAAA,EAP2B,oBAAA,CAAA;AAgB3B,IAAMtB,sBAAAA,mBAAyB,MAAA,CAAA,CAACiB,SAAAA,EAAmBpB,GAAAA,KAAAA;AAC/C,EAAA,MAAM0B,WAAWN,SAAAA,CAAUO,KAAAA,CAAM,GAAA,CAAA,CAAKjD,OAAOkD,OAAAA,CAAAA;AAC7C,EAAA,IAAIF,QAAAA,CAAS9B,MAAAA,KAAW,CAAA,EAAG,OAAO6B,MAAAA;AAElC,EAAA,IAAII,IAAAA;AAQJ,EAAA,KAAA,MAAW,CAACC,OAAAA,EAASC,QAAAA,CAAAA,IAAa/B,IAAIgC,UAAAA,EAAY;AAC9C,IAAA,MAAMC,QAAAA,GAAWP,QAAAA,CAASQ,OAAAA,CAAQJ,OAAAA,CAAAA;AAClC,IAAA,IAAIG,aAAa,EAAA,EAAI;AAErB,IAAA,MAAME,YAAAA,GAAenC,GAAAA,CAAIE,OAAAA,CAAQsB,GAAAA,CAAIO,QAAAA,CAAAA;AACrC,IAAA,IAAI,CAACI,YAAAA,EAAc;AAGnB,IAAA,IAAIN,IAAAA,IAAQ,IAAA,IAAQI,QAAAA,IAAYJ,IAAAA,CAAKI,QAAAA,EAAU;AAE/CJ,IAAAA,IAAAA,GAAO;AACHI,MAAAA,QAAAA;AACAE,MAAAA,YAAAA;MACAC,cAAAA,EAAgBV,QAAAA,CAASW,KAAAA,CAAMJ,QAAAA,GAAW,CAAA;AAC9C,KAAA;AACJ,EAAA;AAEA,EAAA,IAAI,CAACJ,MAAM,OAAOJ,MAAAA;AAClB,EAAA,OAAOI,IAAAA,CAAKO,cAAAA,CAAexC,MAAAA,KAAW,CAAA,GAChCiC,IAAAA,CAAKM,YAAAA,GACLZ,IAAAA,CAAKM,IAAAA,CAAKM,YAAAA,EAAY,GAAKN,IAAAA,CAAKO,cAAc,CAAA;AACxD,CAAA,EAjC+B,wBAAA,CAAA;AAuCxB,IAAME,iBAAAA,mBAAoB,MAAA,CAAA,OAC7BC,OAAAA,EACAC,QAAAA,EACAC,MACAzC,GAAAA,KAAAA;AAEA,EAAA,KAAA,MAAWD,WAAAA,IAAe0C,KAAKC,YAAAA,EAAc;AACzC,IAAA,MAAMC,QAAAA,GAAW5C,WAAAA,KAAgB,GAAA,IAAQ,MAAM6C,gBAAgBJ,QAAAA,CAAAA;AAE/D,IAAA,MAAM/B,gBAAAA,CACFc,IAAAA,CAAKgB,OAAAA,EAASxC,WAAAA,CAAAA,EACdwB,IAAAA,CAAKiB,QAAAA,EAAUzC,WAAAA,EAAa,YAAA,CAAA,EAC5BC,GAAAA,EACA,CAAC2C,QAAAA,CAAAA;AAET,EAAA;AACJ,CAAA,EAhBiC,mBAAA","file":"NGWKHE67.js","sourcesContent":["/**\n * Rewrite a vendored Cargo.toml's path deps into the flat dependencies/ layout,\n * operating on the parsed TOML (via smol-toml) rather than text.\n */\n\nimport { readFile, writeFile } from 'fs/promises';\nimport { dirname, join, relative } from 'path';\nimport { parse, stringify } from 'smol-toml';\n\nimport { logger } from '../logger';\nimport { isWorkspaceRoot } from './discover';\nimport { hasExcludedSegment } from './exclude';\nimport { type CollectedTree, tryRealpath } from './io';\n\n/** Bundled resolution state passed through the rewrite pipeline. */\nexport interface RewriteContext {\n pathMap: Map<string, string>;\n discovered: Map<string, string>;\n}\n\ntype Table = Record<string, unknown>;\n\n/** A dependency spec that carries a `path` — an inline table like `{ path = \"…\" }`. */\ntype PathDepSpec = Table & { path: string };\n\nconst isTable = (value: unknown): value is Table =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst DEP_TABLE_KEYS = ['dependencies', 'dev-dependencies', 'build-dependencies'] as const;\n\n/**\n * Dependency specs that declare a `path`, across every dependency table (plus\n * `[workspace.dependencies]` when `includeWorkspaceDeps`). Specs are live references\n * into `manifest`, so mutating `.path` updates it.\n */\nconst pathDepSpecs = (manifest: Table, includeWorkspaceDeps: boolean): PathDepSpec[] => {\n // The root manifest and each [target.'cfg(...)'] table both hold DEP_TABLE_KEYS tables.\n const containers = [\n manifest,\n ...(isTable(manifest.target) ? Object.values(manifest.target).filter(isTable) : []),\n ];\n\n const depTables = [\n ...containers.flatMap((container) => DEP_TABLE_KEYS.map((key) => container[key])),\n ...(includeWorkspaceDeps && isTable(manifest.workspace)\n ? [manifest.workspace.dependencies]\n : []),\n ];\n\n return depTables\n .filter(isTable)\n .flatMap((table) => Object.values(table))\n .filter((spec): spec is PathDepSpec => isTable(spec) && typeof spec.path === 'string');\n};\n\n/**\n * Drop literal `members` / `default-members` entries whose path contains an excluded\n * directory segment (e.g. `tests/mock_vault`) — those dirs are never vendored, so the\n * member would dangle and fail Cargo's workspace load. Globs (`tests/*`) are kept; Cargo\n * re-expands them to a harmless empty match. Returns true if any member was removed.\n */\nexport const pruneExcludedLiteralMembers = (manifest: Table): boolean => {\n const workspace = manifest.workspace;\n if (!isTable(workspace)) return false;\n\n let changed = false;\n for (const key of ['members', 'default-members'] as const) {\n const members = workspace[key];\n if (!Array.isArray(members)) continue;\n\n // Keep everything except literal (non-glob) members inside an excluded dir.\n const kept = members.filter(\n (m) => typeof m !== 'string' || m.includes('*') || !hasExcludedSegment(m),\n );\n\n if (kept.length !== members.length) {\n workspace[key] = kept;\n changed = true;\n }\n }\n return changed;\n};\n\n/** Rebase every path dep in `manifest` into the flat dependencies/ layout. Returns true if any changed. */\nexport const rewritePathDeps = async (\n manifest: Table,\n originalDir: string,\n manifestDir: string,\n ctx: RewriteContext,\n includeWorkspaceDeps: boolean,\n): Promise<boolean> => {\n let changed = false;\n for (const spec of pathDepSpecs(manifest, includeWorkspaceDeps)) {\n const target =\n (await resolveViaRealpath(originalDir, spec.path, ctx.pathMap)) ??\n resolveViaNameFallback(spec.path, ctx);\n if (!target) continue;\n\n const rewritten = relative(manifestDir, target);\n if (rewritten === spec.path) continue;\n\n logger.trace(`rewrite path dep ${spec.path} -> ${rewritten}`);\n spec.path = rewritten;\n changed = true;\n }\n\n return changed;\n};\n\n/**\n * Delete the `[workspace]` / `[patch.*]` / `[profile.*]` tables — invalid or ignored in a\n * vendored dependency (only honored at the real workspace root). Returns true if any was removed.\n */\nexport const stripRootOnlyTables = (manifest: Table): boolean => {\n let changed = false;\n for (const table of ['workspace', 'patch', 'profile'] as const) {\n if (manifest[table] != null) {\n delete manifest[table];\n changed = true;\n }\n }\n return changed;\n};\n\n/**\n * Rewrite one vendored Cargo.toml in place: rebase its path deps, then strip the root-only\n * tables — or, for a preserved workspace root (`stripRootTables = false`), prune excluded\n * members instead. Re-serialized only if something changed.\n *\n * @param originalDir source crate dir the manifest was copied from\n * @param cargoTomlPath the vendored Cargo.toml to rewrite\n */\nexport const rewriteCargoToml = async (\n originalDir: string,\n cargoTomlPath: string,\n ctx: RewriteContext,\n stripRootTables = true,\n): Promise<void> => {\n const manifest = parse(await readFile(cargoTomlPath, 'utf-8'));\n\n const pathsChanged = await rewritePathDeps(\n manifest,\n originalDir,\n dirname(cargoTomlPath),\n ctx,\n !stripRootTables,\n );\n\n const tablesChanged = stripRootTables\n ? stripRootOnlyTables(manifest)\n : pruneExcludedLiteralMembers(manifest);\n\n if (pathsChanged || tablesChanged) {\n await writeFile(cargoTomlPath, stringify(manifest));\n logger.debug(`rewrote ${cargoTomlPath}`);\n }\n};\n\n/** Primary resolution: realpath the path through pnpm symlinks, then look it up in pathMap. */\nconst resolveViaRealpath = async (\n originalDir: string,\n pathValue: string,\n pathMap: Map<string, string>,\n): Promise<string | undefined> => {\n const resolvedPath = await tryRealpath(join(originalDir, pathValue));\n return resolvedPath ? pathMap.get(resolvedPath) : undefined;\n};\n\n/**\n * Fallback: locate a discovered npm package stem in the path and preserve every\n * suffix segment after it (e.g. protocol-stellar-v2/message-libs/simple-message-lib).\n *\n * When several discovered package names appear as path segments, pick the\n * **rightmost** (deepest) match — insertion order must not win over specificity.\n */\nconst resolveViaNameFallback = (pathValue: string, ctx: RewriteContext): string | undefined => {\n const segments = pathValue.split('/').filter(Boolean);\n if (segments.length === 0) return undefined;\n\n let best:\n | {\n pkgIndex: number;\n vendoredBase: string;\n suffixSegments: string[];\n }\n | undefined;\n\n for (const [pkgName, realPath] of ctx.discovered) {\n const pkgIndex = segments.indexOf(pkgName);\n if (pkgIndex === -1) continue;\n\n const vendoredBase = ctx.pathMap.get(realPath);\n if (!vendoredBase) continue;\n\n // Prefer the deepest stem. Equal index cannot happen for distinct names.\n if (best != null && pkgIndex <= best.pkgIndex) continue;\n\n best = {\n pkgIndex,\n vendoredBase,\n suffixSegments: segments.slice(pkgIndex + 1),\n };\n }\n\n if (!best) return undefined;\n return best.suffixSegments.length === 0\n ? best.vendoredBase\n : join(best.vendoredBase, ...best.suffixSegments);\n};\n\n/**\n * Rewrite every Cargo.toml in a copied dependency tree. The root manifest keeps its\n * root-only tables when it's a workspace (members inherit from them); all others strip them.\n */\nexport const rewriteCargoTomls = async (\n srcRoot: string,\n destRoot: string,\n tree: CollectedTree,\n ctx: RewriteContext,\n): Promise<void> => {\n for (const manifestDir of tree.manifestDirs) {\n const preserve = manifestDir === '.' && (await isWorkspaceRoot(destRoot));\n\n await rewriteCargoToml(\n join(srcRoot, manifestDir),\n join(destRoot, manifestDir, 'Cargo.toml'),\n ctx,\n !preserve,\n );\n }\n};\n"]}
|
package/dist/YTW4SL4W.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { tryLstat } from './HO3LEEDJ.js';
|
|
2
|
+
import { __name } from './VUOMXK5T.js';
|
|
3
|
+
import { rm, readdir, mkdir, readFile, copyFile } from 'fs/promises';
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
|
|
6
|
+
var syncTree = /* @__PURE__ */ __name(async (src, dest) => {
|
|
7
|
+
const destStat = await tryLstat(dest);
|
|
8
|
+
if (destStat && !destStat.isDirectory()) await rm(dest, {
|
|
9
|
+
recursive: true,
|
|
10
|
+
force: true
|
|
11
|
+
});
|
|
12
|
+
const srcEntries = await readdir(src, {
|
|
13
|
+
withFileTypes: true
|
|
14
|
+
});
|
|
15
|
+
const destEntries = destStat?.isDirectory() ? await readdir(dest, {
|
|
16
|
+
withFileTypes: true
|
|
17
|
+
}) : [];
|
|
18
|
+
const srcNames = new Set(srcEntries.map((entry) => entry.name));
|
|
19
|
+
const destByName = new Map(destEntries.map((entry) => [
|
|
20
|
+
entry.name,
|
|
21
|
+
entry
|
|
22
|
+
]));
|
|
23
|
+
await Promise.all(destEntries.filter((entry) => !srcNames.has(entry.name)).map((entry) => rm(join(dest, entry.name), {
|
|
24
|
+
recursive: true,
|
|
25
|
+
force: true
|
|
26
|
+
})));
|
|
27
|
+
await mkdir(dest, {
|
|
28
|
+
recursive: true
|
|
29
|
+
});
|
|
30
|
+
await Promise.all(srcEntries.map(async (srcEntry) => {
|
|
31
|
+
const from = join(src, srcEntry.name);
|
|
32
|
+
const to = join(dest, srcEntry.name);
|
|
33
|
+
if (srcEntry.isDirectory()) return syncTree(from, to);
|
|
34
|
+
const existing = destByName.get(srcEntry.name);
|
|
35
|
+
if (existing?.isFile() && (await readFile(from)).equals(await readFile(to))) return;
|
|
36
|
+
if (existing) await rm(to, {
|
|
37
|
+
recursive: true,
|
|
38
|
+
force: true
|
|
39
|
+
});
|
|
40
|
+
await copyFile(from, to);
|
|
41
|
+
}));
|
|
42
|
+
}, "syncTree");
|
|
43
|
+
|
|
44
|
+
export { syncTree };
|
|
45
|
+
//# sourceMappingURL=YTW4SL4W.js.map
|
|
46
|
+
//# sourceMappingURL=YTW4SL4W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/resolve/sync.ts"],"names":["syncTree","src","dest","destStat","tryLstat","isDirectory","rm","recursive","force","srcEntries","readdir","withFileTypes","destEntries","srcNames","Set","map","entry","name","destByName","Map","Promise","all","filter","has","join","mkdir","srcEntry","from","to","existing","get","isFile","readFile","equals","copyFile"],"mappings":";;;;;AAYO,IAAMA,QAAAA,mBAAW,MAAA,CAAA,OAAOC,GAAAA,EAAaC,IAAAA,KAAAA;AACxC,EAAA,MAAMC,QAAAA,GAAW,MAAMC,QAAAA,CAASF,IAAAA,CAAAA;AAChC,EAAA,IAAIC,YAAY,CAACA,QAAAA,CAASE,aAAW,EAAI,MAAMC,GAAGJ,IAAAA,EAAM;IAAEK,SAAAA,EAAW,IAAA;IAAMC,KAAAA,EAAO;GAAK,CAAA;AAEvF,EAAA,MAAMC,UAAAA,GAAa,MAAMC,OAAAA,CAAQT,GAAAA,EAAK;IAAEU,aAAAA,EAAe;GAAK,CAAA;AAC5D,EAAA,MAAMC,cAAcT,QAAAA,EAAUE,WAAAA,EAAAA,GAAgB,MAAMK,QAAQR,IAAAA,EAAM;IAAES,aAAAA,EAAe;AAAK,GAAA,IAAK,EAAA;AAC7F,EAAA,MAAME,QAAAA,GAAW,IAAIC,GAAAA,CAAIL,UAAAA,CAAWM,IAAI,CAACC,KAAAA,KAAUA,KAAAA,CAAMC,IAAI,CAAA,CAAA;AAC7D,EAAA,MAAMC,aAAa,IAAIC,GAAAA,CAAIP,WAAAA,CAAYG,GAAAA,CAAI,CAACC,KAAAA,KAAU;IAACA,KAAAA,CAAMC,IAAAA;AAAMD,IAAAA;GAAM,CAAA,CAAA;AAEzE,EAAA,MAAMI,OAAAA,CAAQC,IACVT,WAAAA,CACKU,MAAAA,CAAO,CAACN,KAAAA,KAAU,CAACH,SAASU,GAAAA,CAAIP,KAAAA,CAAMC,IAAI,CAAA,CAAA,CAC1CF,IAAI,CAACC,KAAAA,KAAUV,GAAGkB,IAAAA,CAAKtB,IAAAA,EAAMc,KAAAA,CAAMC,IAAI,CAAA,EAAG;IAAEV,SAAAA,EAAW,IAAA;IAAMC,KAAAA,EAAO;AAAK,GAAA,CAAA,CAAA,CAAA;AAGlF,EAAA,MAAMiB,MAAMvB,IAAAA,EAAM;IAAEK,SAAAA,EAAW;GAAK,CAAA;AACpC,EAAA,MAAMa,OAAAA,CAAQC,GAAAA,CACVZ,UAAAA,CAAWM,GAAAA,CAAI,OAAOW,QAAAA,KAAAA;AAClB,IAAA,MAAMC,IAAAA,GAAOH,IAAAA,CAAKvB,GAAAA,EAAKyB,QAAAA,CAAST,IAAI,CAAA;AACpC,IAAA,MAAMW,EAAAA,GAAKJ,IAAAA,CAAKtB,IAAAA,EAAMwB,QAAAA,CAAST,IAAI,CAAA;AAEnC,IAAA,IAAIS,SAASrB,WAAAA,EAAW,EAAI,OAAOL,QAAAA,CAAS2B,MAAMC,EAAAA,CAAAA;AAElD,IAAA,MAAMC,QAAAA,GAAWX,UAAAA,CAAWY,GAAAA,CAAIJ,QAAAA,CAAST,IAAI,CAAA;AAC7C,IAAA,IAAIY,QAAAA,EAAUE,MAAAA,EAAAA,IAAAA,CAAa,MAAMC,QAAAA,CAASL,IAAAA,CAAAA,EAAOM,MAAAA,CAAO,MAAMD,QAAAA,CAASJ,EAAAA,CAAAA,CAAAA,EAAM;AAE7E,IAAA,IAAIC,QAAAA,EAAU,MAAMvB,EAAAA,CAAGsB,EAAAA,EAAI;MAAErB,SAAAA,EAAW,IAAA;MAAMC,KAAAA,EAAO;KAAK,CAAA;AAC1D,IAAA,MAAM0B,QAAAA,CAASP,MAAMC,EAAAA,CAAAA;AACzB,EAAA,CAAA,CAAA,CAAA;AAER,CAAA,EA9BwB,UAAA","file":"YTW4SL4W.js","sourcesContent":["import { copyFile, mkdir, readdir, readFile, rm } from 'fs/promises';\nimport { join } from 'path';\n\nimport { tryLstat } from './io';\n\n/**\n * Make `dest` an exact copy of `src` (regular files and directories only), writing only files\n * whose bytes differ. Unchanged files keep their mtime: cargo judges path-dependency freshness by\n * source mtimes, so rewriting identical files would force a rebuild of every vendored crate and\n * everything that depends on it. Anything in `dest` that `src` lacks, or that differs in type\n * (including symlinks, which are replaced rather than written through), is removed.\n */\nexport const syncTree = async (src: string, dest: string): Promise<void> => {\n const destStat = await tryLstat(dest);\n if (destStat && !destStat.isDirectory()) await rm(dest, { recursive: true, force: true });\n\n const srcEntries = await readdir(src, { withFileTypes: true });\n const destEntries = destStat?.isDirectory() ? await readdir(dest, { withFileTypes: true }) : [];\n const srcNames = new Set(srcEntries.map((entry) => entry.name));\n const destByName = new Map(destEntries.map((entry) => [entry.name, entry]));\n\n await Promise.all(\n destEntries\n .filter((entry) => !srcNames.has(entry.name))\n .map((entry) => rm(join(dest, entry.name), { recursive: true, force: true })),\n );\n\n await mkdir(dest, { recursive: true });\n await Promise.all(\n srcEntries.map(async (srcEntry) => {\n const from = join(src, srcEntry.name);\n const to = join(dest, srcEntry.name);\n // The recursive call replaces a non-directory sitting at `to`.\n if (srcEntry.isDirectory()) return syncTree(from, to);\n\n const existing = destByName.get(srcEntry.name);\n if (existing?.isFile() && (await readFile(from)).equals(await readFile(to))) return;\n // Unlink first so a read-only or hard-linked copy is replaced, not written into.\n if (existing) await rm(to, { recursive: true, force: true });\n await copyFile(from, to);\n }),\n );\n};\n"]}
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { resolveDependencies } from './
|
|
2
|
-
import './
|
|
3
|
-
import './
|
|
4
|
-
import './
|
|
1
|
+
import { resolveDependencies } from './4JBQUMGT.js';
|
|
2
|
+
import './YTW4SL4W.js';
|
|
3
|
+
import './NGWKHE67.js';
|
|
4
|
+
import './2L4WSCE3.js';
|
|
5
|
+
import './HO3LEEDJ.js';
|
|
5
6
|
import { logger, setLogLevel, parseLogLevel } from './UDDAJZY4.js';
|
|
6
7
|
import './2T2WFWNM.js';
|
|
7
8
|
import { __name } from './VUOMXK5T.js';
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts"],"names":["main","program","Command","name","description","command","option","action","opts","setLogLevel","parseLogLevel","logLevel","resolveDependencies","cwd","cargoDir","parseAsync","process","argv","catch","err","logger","error","exit"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts"],"names":["main","program","Command","name","description","command","option","action","opts","setLogLevel","parseLogLevel","logLevel","resolveDependencies","cwd","cargoDir","parseAsync","process","argv","catch","err","logger","error","exit"],"mappings":";;;;;;;;;;AAKA,IAAMA,uBAAO,MAAA,CAAA,YAAA;AACT,EAAA,MAAMC,OAAAA,GAAU,IAAIC,OAAAA,EAAAA;AACpBD,EAAAA,OAAAA,CACKE,IAAAA,CAAK,kBAAA,CAAA,CACLC,WAAAA,CAAY,uDAAA,CAAA;AAEjBH,EAAAA,OAAAA,CACKI,OAAAA,CAAQ,SAAA,CAAA,CACRD,WAAAA,CACG,2HACI,CAAA,CAEPE,MAAAA,CAAO,gBAAgB,8DAAA,CAAA,CACvBA,OAAO,oBAAA,EAAsB,6DAAA,EAC7BA,MAAAA,CAAO,qBAAA,EAAuB,qDAAA,CAAA,CAC9BC,MAAAA,CAAO,OAAOC,IAAAA,KAAAA;AACXC,IAAAA,WAAAA,CAAYC,aAAAA,CAAcF,IAAAA,CAAKG,QAAQ,CAAA,CAAA;AACvC,IAAA,MAAMC,mBAAAA,CAAoB;AAAEC,MAAAA,GAAAA,EAAKL,IAAAA,CAAKK,GAAAA;AAAKC,MAAAA,QAAAA,EAAUN,IAAAA,CAAKM;KAAS,CAAA;EACvE,CAAA,CAAA;AAEJ,EAAA,MAAMb,OAAAA,CAAQc,UAAAA,CAAWC,OAAAA,CAAQC,IAAI,CAAA;AACzC,CAAA,EArBa,MAAA,CAAA;AAuBb,KAAKjB,IAAAA,EAAAA,CAAOkB,KAAAA,CAAM,CAACC,GAAAA,KAAAA;AACfC,EAAAA,MAAAA,CAAOC,KAAAA,CAAM,2BAA2BF,GAAAA,CAAAA;AACxCH,EAAAA,OAAAA,CAAQM,KAAK,CAAA,CAAA;AACjB,CAAA,CAAA","file":"cli.js","sourcesContent":["import { Command } from 'commander';\n\nimport { logger, parseLogLevel, setLogLevel } from './logger';\nimport { resolveDependencies } from './resolve';\n\nconst main = async (): Promise<void> => {\n const program = new Command();\n program\n .name('build-utils-rust')\n .description('Build utilities for Rust/Cargo packages in LayerZero.');\n\n program\n .command('resolve')\n .description(\n 'Resolve @layerzerolabs Cargo dependencies from node_modules into a flat ' +\n 'dependencies/ directory with rewritten path deps.',\n )\n .option('--cwd <path>', 'pnpm package root (where node_modules/ lives). Default: cwd.')\n .option('--cargo-dir <path>', 'Cargo crate directory to resolve. Defaults to package root.')\n .option('--log-level <level>', 'trace | debug | info | warn | error. Default: info.')\n .action(async (opts: { cwd?: string; cargoDir?: string; logLevel?: string }) => {\n setLogLevel(parseLogLevel(opts.logLevel));\n await resolveDependencies({ cwd: opts.cwd, cargoDir: opts.cargoDir });\n });\n\n await program.parseAsync(process.argv);\n};\n\nvoid main().catch((err: unknown) => {\n logger.error('build-utils-rust failed', err);\n process.exit(1);\n});\n"]}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
export { resolveDependencies } from './
|
|
2
|
-
import './
|
|
3
|
-
import './
|
|
4
|
-
import './
|
|
1
|
+
export { resolveDependencies } from './4JBQUMGT.js';
|
|
2
|
+
import './YTW4SL4W.js';
|
|
3
|
+
import './NGWKHE67.js';
|
|
4
|
+
import './2L4WSCE3.js';
|
|
5
|
+
import './HO3LEEDJ.js';
|
|
5
6
|
import './UDDAJZY4.js';
|
|
6
7
|
import './2T2WFWNM.js';
|
|
7
8
|
import './VUOMXK5T.js';
|
package/dist/logger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAE3E,YAAY,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,eAAO,IAAI,MAAM,6CAAqC,CAAC;AAEvD,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAE3E,YAAY,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,eAAO,IAAI,MAAM,6CAAqC,CAAC;AAEvD,eAAO,MAAM,WAAW,UAAW,QAAQ,KAAG,IAE7C,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,aAAa,WAAY,MAAM,KAAG,QAa9C,CAAC"}
|
|
@@ -6,7 +6,7 @@ export interface VendorTarget {
|
|
|
6
6
|
pkgName: string;
|
|
7
7
|
/** canonical source path (realpath through pnpm symlinks). */
|
|
8
8
|
npmPkgDir: string;
|
|
9
|
-
/**
|
|
9
|
+
/** where the package is assembled: <staging root>/<pkgName>, synced to dependencies/<pkgName>. */
|
|
10
10
|
depsPkgDir: string;
|
|
11
11
|
/** included file/dir tree (excluded subtrees already pruned). */
|
|
12
12
|
tree: CollectedTree;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/resolve/discover.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAO7F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAU1C,mFAAmF;AACnF,MAAM,WAAW,YAAY;IACzB,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/resolve/discover.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAO7F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAU1C,mFAAmF;AACnF,MAAM,WAAW,YAAY;IACzB,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,kGAAkG;IAClG,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,IAAI,EAAE,aAAa,CAAC;CACvB;AAID,qDAAqD;AACrD,eAAO,MAAM,OAAO,QAAe,MAAM,KAAG,OAAO,CAAC,OAAO,CAS1D,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,eAAe,cAAqB,MAAM,KAAG,OAAO,CAAC,OAAO,CAgBxE,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,QACpB,MAAM,cACC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,WACtB,GAAG,CAAC,MAAM,CAAC,KACrB,OAAO,CAAC,IAAI,CAoBd,CAAC"}
|
package/dist/resolve/discover.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { discoverPackages, isCrate, isWorkspaceRoot } from '../
|
|
2
|
-
import '../
|
|
1
|
+
export { discoverPackages, isCrate, isWorkspaceRoot } from '../2L4WSCE3.js';
|
|
2
|
+
import '../HO3LEEDJ.js';
|
|
3
3
|
import '../UDDAJZY4.js';
|
|
4
4
|
import '../2T2WFWNM.js';
|
|
5
5
|
import '../VUOMXK5T.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exclude.d.ts","sourceRoot":"","sources":["../../src/resolve/exclude.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,eAAO,MAAM,eAAe,aAAqC,CAAC;AA+ClE,sDAAsD;AACtD,eAAO,MAAM,mBAAmB,
|
|
1
|
+
{"version":3,"file":"exclude.d.ts","sourceRoot":"","sources":["../../src/resolve/exclude.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,eAAO,MAAM,eAAe,aAAqC,CAAC;AA+ClE,sDAAsD;AACtD,eAAO,MAAM,mBAAmB,YAAa,MAAM,EAAE,KAAG,MAAM,EACN,CAAC;AAEzD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,YAAa,MAAM,KAAG,OACkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resolve/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resolve/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAA6B,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAS1E,wFAAwF;AACxF,eAAO,MAAM,wBAAwB,YAAa,YAAY,EAAE,KAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAWpF,CAAC;AAoCF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,wBAG7B;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,KAAQ,OAAO,CAAC,IAAI,CAmDzD,CAAC"}
|
package/dist/resolve/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
export { buildDependenciesPathMap, resolveDependencies } from '../
|
|
2
|
-
import '../
|
|
3
|
-
import '../
|
|
4
|
-
import '../
|
|
1
|
+
export { buildDependenciesPathMap, resolveDependencies } from '../4JBQUMGT.js';
|
|
2
|
+
import '../YTW4SL4W.js';
|
|
3
|
+
import '../NGWKHE67.js';
|
|
4
|
+
import '../2L4WSCE3.js';
|
|
5
|
+
import '../HO3LEEDJ.js';
|
|
5
6
|
import '../UDDAJZY4.js';
|
|
6
7
|
import '../2T2WFWNM.js';
|
|
7
8
|
import '../VUOMXK5T.js';
|
package/dist/resolve/io.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import type { Stats } from 'fs';
|
|
1
2
|
export declare const tryRealpath: (path: string) => Promise<string | undefined>;
|
|
2
3
|
export declare const tryIsDirectory: (path: string) => Promise<boolean>;
|
|
4
|
+
export declare const tryLstat: (path: string) => Promise<Stats | undefined>;
|
|
3
5
|
export declare const tryReaddir: (dir: string) => Promise<string[]>;
|
|
4
6
|
export interface CollectedTree {
|
|
5
7
|
/** directories containing copyable content, relative to root (no empties) */
|
package/dist/resolve/io.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../../src/resolve/io.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../../src/resolve/io.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;AAOhC,eAAO,MAAM,WAAW,SAAgB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAM1E,CAAC;AAEF,eAAO,MAAM,cAAc,SAAgB,MAAM,KAAG,OAAO,CAAC,OAAO,CAMlE,CAAC;AAEF,eAAO,MAAM,QAAQ,SAAgB,MAAM,KAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAMtE,CAAC;AAEF,eAAO,MAAM,UAAU,QAAe,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAM9D,CAAC;AAEF,MAAM,WAAW,aAAa;IAC1B,6EAA6E;IAC7E,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,oFAAoF;IACpF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,+FAA+F;IAC/F,YAAY,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,SAAgB,MAAM,4BAAsB,OAAO,CAAC,aAAa,CAyBzF,CAAC"}
|
package/dist/resolve/io.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rewrite.d.ts","sourceRoot":"","sources":["../../src/resolve/rewrite.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EAAE,KAAK,aAAa,EAAe,MAAM,MAAM,CAAC;AAEvD,oEAAoE;AACpE,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAmCrC;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,
|
|
1
|
+
{"version":3,"file":"rewrite.d.ts","sourceRoot":"","sources":["../../src/resolve/rewrite.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EAAE,KAAK,aAAa,EAAe,MAAM,MAAM,CAAC;AAEvD,oEAAoE;AACpE,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAmCrC;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,aAAc,KAAK,KAAG,OAoB7D,CAAC;AAEF,2GAA2G;AAC3G,eAAO,MAAM,eAAe,aACd,KAAK,eACF,MAAM,eACN,MAAM,OACd,cAAc,wBACG,OAAO,KAC9B,OAAO,CAAC,OAAO,CAiBjB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,aAAc,KAAK,KAAG,OASrD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,gBACZ,MAAM,iBACJ,MAAM,OAChB,cAAc,gCAEpB,OAAO,CAAC,IAAI,CAmBd,CAAC;AAsDF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,YACjB,MAAM,YACL,MAAM,QACV,aAAa,OACd,cAAc,KACpB,OAAO,CAAC,IAAI,CAWd,CAAC"}
|
package/dist/resolve/rewrite.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { pruneExcludedLiteralMembers, rewriteCargoToml, rewriteCargoTomls, rewritePathDeps, stripRootOnlyTables } from '../
|
|
2
|
-
import '../
|
|
3
|
-
import '../
|
|
1
|
+
export { pruneExcludedLiteralMembers, rewriteCargoToml, rewriteCargoTomls, rewritePathDeps, stripRootOnlyTables } from '../NGWKHE67.js';
|
|
2
|
+
import '../2L4WSCE3.js';
|
|
3
|
+
import '../HO3LEEDJ.js';
|
|
4
4
|
import '../UDDAJZY4.js';
|
|
5
5
|
import '../2T2WFWNM.js';
|
|
6
6
|
import '../VUOMXK5T.js';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Make `dest` an exact copy of `src` (regular files and directories only), writing only files
|
|
3
|
+
* whose bytes differ. Unchanged files keep their mtime: cargo judges path-dependency freshness by
|
|
4
|
+
* source mtimes, so rewriting identical files would force a rebuild of every vendored crate and
|
|
5
|
+
* everything that depends on it. Anything in `dest` that `src` lacks, or that differs in type
|
|
6
|
+
* (including symlinks, which are replaced rather than written through), is removed.
|
|
7
|
+
*/
|
|
8
|
+
export declare const syncTree: (src: string, dest: string) => Promise<void>;
|
|
9
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/resolve/sync.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,QAAe,MAAM,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CA8BtE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"sync.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@layerzerolabs/build-utils-rust",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.85",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
"bin/**/*"
|
|
21
21
|
],
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@layerzerolabs/logger-node": "1.2.
|
|
23
|
+
"@layerzerolabs/logger-node": "1.2.85",
|
|
24
24
|
"commander": "13.1.0",
|
|
25
25
|
"smol-toml": "^1.7.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@layerzerolabs/tsup-configuration": "1.2.
|
|
29
|
-
"@layerzerolabs/typescript-configuration": "1.2.
|
|
28
|
+
"@layerzerolabs/tsup-configuration": "1.2.85",
|
|
29
|
+
"@layerzerolabs/typescript-configuration": "1.2.85",
|
|
30
30
|
"@types/node": "^24.13.3",
|
|
31
31
|
"tsup": "^8.4.0",
|
|
32
32
|
"vitest": "^4.1.10"
|
|
@@ -42,8 +42,7 @@
|
|
|
42
42
|
"gasolina-audit",
|
|
43
43
|
"lz-labs-sidecar",
|
|
44
44
|
"monorepo-external",
|
|
45
|
-
"onesig-client"
|
|
46
|
-
"value-transfer-external"
|
|
45
|
+
"onesig-client"
|
|
47
46
|
]
|
|
48
47
|
},
|
|
49
48
|
"scripts": {
|
package/dist/LIKDXWCR.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/resolve/index.ts"],"names":["buildDependenciesPathMap","targets","pathMap","Map","npmPkgDir","depsPkgDir","tree","dir","manifestDirs","set","join","logger","trace","debug","size","copyCollected","srcRoot","destRoot","mkdir","recursive","Promise","all","dirs","map","files","file","copyFile","resolveCargoRoot","packageRoot","cargoDir","resolved","resolve","isCrate","Error","resolveDependencies","cwd","process","depsRoot","discovered","discoverPackages","Set","info","rm","force","Array","from","pkgName","collectFiles","length","ctx","rewriteCargoTomls","relative"],"mappings":"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","file":"LIKDXWCR.js","sourcesContent":["/**\n * Vendor @layerzerolabs Cargo dependencies from node_modules into a flat\n * dependencies/ directory with rewritten path deps, so a Rust package builds\n * without the rest of the monorepo.\n */\n\nimport { copyFile, mkdir, rm } from 'fs/promises';\nimport { join, relative, resolve } from 'path';\n\nimport { logger } from '../logger';\nimport { discoverPackages, isCrate, type VendorTarget } from './discover';\nimport type { CollectedTree } from './io';\nimport { collectFiles } from './io';\nimport type { RewriteContext } from './rewrite';\nimport { rewriteCargoTomls } from './rewrite';\n\n// ─── Path Map ───\n\n/** Maps each crate's npm package source path to its vendored dependencies/ location. */\nexport const buildDependenciesPathMap = (targets: VendorTarget[]): Map<string, string> => {\n const pathMap = new Map<string, string>();\n\n for (const { npmPkgDir, depsPkgDir, tree } of targets) {\n for (const dir of tree.manifestDirs) {\n pathMap.set(join(npmPkgDir, dir), join(depsPkgDir, dir));\n logger.trace(`map ${join(npmPkgDir, dir)} -> ${join(depsPkgDir, dir)}`);\n }\n }\n logger.debug(`built dependency path map: ${pathMap.size} entries`);\n return pathMap;\n};\n\n// ─── File Operations ───\n\n/** Copy a collected tree into destRoot. */\nconst copyCollected = async (\n srcRoot: string,\n destRoot: string,\n tree: CollectedTree,\n): Promise<void> => {\n await mkdir(destRoot, { recursive: true });\n await Promise.all(tree.dirs.map((dir) => mkdir(join(destRoot, dir), { recursive: true })));\n await Promise.all(\n tree.files.map((file) => copyFile(join(srcRoot, file), join(destRoot, file))),\n );\n};\n\n/** Resolves the Cargo root: `cargoDir` if provided, else `packageRoot`. Throws if no Cargo.toml. */\nconst resolveCargoRoot = async (packageRoot: string, cargoDir?: string): Promise<string> => {\n if (cargoDir) {\n const resolved = resolve(packageRoot, cargoDir);\n if (!(await isCrate(resolved))) {\n throw new Error(`--cargo-dir ${cargoDir} does not contain a Cargo.toml`);\n }\n return resolved;\n }\n\n if (!(await isCrate(packageRoot))) {\n throw new Error(`${packageRoot} does not contain a Cargo.toml`);\n }\n\n return packageRoot;\n};\n\n// ─── Public API ───\n\n/**\n * Entry point: vendor every @layerzerolabs Cargo crate reachable through node_modules\n * into dependencies/, with path deps rewritten to resolve locally.\n *\n * @param cwd pnpm package root (where node_modules/ lives). Default: process.cwd()\n * @param cargoDir Cargo crate directory to vendor into. Default: packageRoot\n */\nexport const resolveDependencies = async ({\n cwd,\n cargoDir,\n}: { cwd?: string; cargoDir?: string } = {}): Promise<void> => {\n const packageRoot = resolve(cwd ?? process.cwd());\n\n const depsRoot = join(await resolveCargoRoot(packageRoot, cargoDir), 'dependencies');\n\n const discovered = new Map<string, string>();\n await discoverPackages(packageRoot, discovered, new Set());\n\n if (discovered.size === 0) {\n logger.info('No @layerzerolabs namespaced Cargo dependencies found in node_modules');\n return;\n }\n\n // Rebuild dependencies/ from scratch each run.\n await rm(depsRoot, { recursive: true, force: true });\n await mkdir(depsRoot, { recursive: true });\n\n // Collect each package's tree once — copy, path map, and rewrite all reuse it.\n const targets: VendorTarget[] = await Promise.all(\n Array.from(discovered, async ([pkgName, npmPkgDir]) => {\n const tree = await collectFiles(npmPkgDir);\n logger.debug(\n `${pkgName}: collected ${tree.files.length} files, ${tree.dirs.length} dirs`,\n );\n return { pkgName, npmPkgDir, depsPkgDir: join(depsRoot, pkgName), tree };\n }),\n );\n\n const ctx: RewriteContext = {\n pathMap: buildDependenciesPathMap(targets),\n discovered,\n };\n logger.debug(`path map: ${ctx.pathMap.size} entries`);\n\n await Promise.all(\n targets.map(async ({ pkgName, npmPkgDir, depsPkgDir, tree }) => {\n await copyCollected(npmPkgDir, depsPkgDir, tree);\n await rewriteCargoTomls(npmPkgDir, depsPkgDir, tree, ctx);\n logger.debug(` ${pkgName} -> ${npmPkgDir}`);\n }),\n );\n\n logger.info(\n `Resolved ${discovered.size} Cargo dependencies into ${relative(packageRoot, depsRoot) || './dependencies/'}`,\n );\n};\n"]}
|
package/dist/ZS7IDLZZ.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/resolve/io.ts"],"names":["tryRealpath","path","realpath","undefined","tryIsDirectory","stat","isDirectory","tryReaddir","dir","readdir","collectFiles","root","relativePath","dirs","files","manifestDirs","rawFileNames","join","fileNames","removeExcludedFiles","map","e","file","subDir","length","push","logger","trace","COPY_EXTENSIONS","has","extname","basename","dirname"],"mappings":";;;;;;AAMO,IAAMA,WAAAA,iCAAqBC,IAAAA,KAAAA;AAC9B,EAAA,IAAI;AACA,IAAA,OAAO,MAAMC,SAASD,IAAAA,CAAAA;EAC1B,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAOE,MAAAA;AACX,EAAA;AACJ,CAAA,EAN2B,aAAA;AAQpB,IAAMC,cAAAA,iCAAwBH,IAAAA,KAAAA;AACjC,EAAA,IAAI;AACA,IAAA,OAAA,CAAQ,MAAMI,IAAAA,CAAKJ,IAAAA,CAAAA,EAAOK,WAAAA,EAAW;EACzC,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,KAAA;AACX,EAAA;AACJ,CAAA,EAN8B,gBAAA;AAQvB,IAAMC,UAAAA,iCAAoBC,GAAAA,KAAAA;AAC7B,EAAA,IAAI;AACA,IAAA,OAAO,MAAMC,QAAQD,GAAAA,CAAAA;EACzB,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,EAAA;AACX,EAAA;AACJ,CAAA,EAN0B,YAAA;AAqBnB,IAAME,YAAAA,mBAAe,MAAA,CAAA,OAAOC,IAAAA,EAAcC,YAAAA,GAAe,EAAA,KAAE;AAC9D,EAAA,MAAMC,OAAiB,EAAA;AACvB,EAAA,MAAMC,QAAkB,EAAA;AACxB,EAAA,MAAMC,eAAyB,EAAA;AAE/B,EAAA,MAAMC,eAAe,MAAMT,UAAAA,CAAWU,IAAAA,CAAKN,IAAAA,EAAMC,YAAAA,CAAAA,CAAAA;AACjD,EAAA,MAAMM,SAAAA,GAAYC,mBAAAA,CAAoBH,YAAAA,CAAAA,CAAcI,GAAAA,CAAI,CAACC,CAAAA,KAAMJ,IAAAA,CAAKL,YAAAA,EAAcS,CAAAA,CAAAA,CAAAA;AAElF,EAAA,KAAA,MAAWC,QAAQJ,SAAAA,EAAW;AAC1B,IAAA,IAAI,MAAMd,cAAAA,CAAea,IAAAA,CAAKN,IAAAA,EAAMW,IAAAA,CAAAA,CAAAA,EAAQ;AACxC,MAAA,MAAMC,MAAAA,GAAS,MAAMb,YAAAA,CAAaC,IAAAA,EAAMW,IAAAA,CAAAA;AACxC,MAAA,IAAIC,MAAAA,CAAOT,KAAAA,CAAMU,MAAAA,GAAS,CAAA,EAAG;AACzBX,QAAAA,IAAAA,CAAKY,IAAAA,CAAKH,IAAAA,EAAAA,GAASC,MAAAA,CAAOV,IAAI,CAAA;AAC9BC,QAAAA,KAAAA,CAAMW,IAAAA,CAAI,GAAIF,MAAAA,CAAOT,KAAK,CAAA;AAC1BC,QAAAA,YAAAA,CAAaU,IAAAA,CAAI,GAAIF,MAAAA,CAAOR,YAAY,CAAA;MAC5C,CAAA,MAAO;AACHW,QAAAA,MAAAA,CAAOC,KAAAA,CAAM,CAAA,eAAA,EAAkBL,IAAAA,CAAAA,CAAM,CAAA;AACzC,MAAA;AACJ,IAAA,CAAA,MAAA,IAAWM,eAAAA,CAAgBC,GAAAA,CAAIC,OAAAA,CAAQR,IAAAA,CAAAA,CAAAA,EAAQ;AAC3CR,MAAAA,KAAAA,CAAMW,KAAKH,IAAAA,CAAAA;AACX,MAAA,IAAIS,QAAAA,CAAST,IAAAA,CAAAA,KAAU,YAAA,eAA2BG,IAAAA,CAAKO,OAAAA,CAAQV,IAAAA,CAAAA,CAAAA;AAC/DI,MAAAA,MAAAA,CAAOC,KAAAA,CAAM,CAAA,QAAA,EAAWL,IAAAA,CAAAA,CAAM,CAAA;AAClC,IAAA;AACJ,EAAA;AACA,EAAA,OAAO;AAAET,IAAAA,IAAAA;AAAMC,IAAAA,KAAAA;AAAOC,IAAAA;AAAa,GAAA;AACvC,CAAA,EAzB4B,cAAA","file":"ZS7IDLZZ.js","sourcesContent":["import { readdir, realpath, stat } from 'fs/promises';\nimport { basename, dirname, extname, join } from 'path';\n\nimport { logger } from '../logger';\nimport { COPY_EXTENSIONS, removeExcludedFiles } from './exclude';\n\nexport const tryRealpath = async (path: string): Promise<string | undefined> => {\n try {\n return await realpath(path);\n } catch {\n return undefined;\n }\n};\n\nexport const tryIsDirectory = async (path: string): Promise<boolean> => {\n try {\n return (await stat(path)).isDirectory();\n } catch {\n return false;\n }\n};\n\nexport const tryReaddir = async (dir: string): Promise<string[]> => {\n try {\n return await readdir(dir);\n } catch {\n return [];\n }\n};\n\nexport interface CollectedTree {\n /** directories containing copyable content, relative to root (no empties) */\n dirs: string[];\n /** copyable files (COPY_EXTENSIONS), relative to root (excluded subtrees pruned) */\n files: string[];\n /** dirs that directly contain a Cargo.toml (crate roots), relative to root; '.' is the root */\n manifestDirs: string[];\n}\n\n/**\n * Walk `root` once, applying exclusion per level and keeping only COPY_EXTENSIONS files.\n * Also records `manifestDirs` (dirs holding a Cargo.toml) so consumers don't re-scan.\n */\nexport const collectFiles = async (root: string, relativePath = ''): Promise<CollectedTree> => {\n const dirs: string[] = [];\n const files: string[] = [];\n const manifestDirs: string[] = [];\n\n const rawFileNames = await tryReaddir(join(root, relativePath));\n const fileNames = removeExcludedFiles(rawFileNames).map((e) => join(relativePath, e));\n\n for (const file of fileNames) {\n if (await tryIsDirectory(join(root, file))) {\n const subDir = await collectFiles(root, file);\n if (subDir.files.length > 0) {\n dirs.push(file, ...subDir.dirs);\n files.push(...subDir.files);\n manifestDirs.push(...subDir.manifestDirs);\n } else {\n logger.trace(`skip empty dir ${file}`);\n }\n } else if (COPY_EXTENSIONS.has(extname(file))) {\n files.push(file);\n if (basename(file) === 'Cargo.toml') manifestDirs.push(dirname(file));\n logger.trace(`collect ${file}`);\n }\n }\n return { dirs, files, manifestDirs };\n};\n"]}
|