@layerzerolabs/build-utils-rust 0.2.113

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.
Files changed (87) hide show
  1. package/.turbo/turbo-build.log +43 -0
  2. package/.turbo/turbo-lint.log +8 -0
  3. package/.turbo/turbo-test.log +58 -0
  4. package/README.md +111 -0
  5. package/dist/457ZJTJH.js +52 -0
  6. package/dist/457ZJTJH.js.map +1 -0
  7. package/dist/LQ26FJL3.js +112 -0
  8. package/dist/LQ26FJL3.js.map +1 -0
  9. package/dist/SPODHCGD.js +59 -0
  10. package/dist/SPODHCGD.js.map +1 -0
  11. package/dist/TOEFRNPD.js +83 -0
  12. package/dist/TOEFRNPD.js.map +1 -0
  13. package/dist/UDDAJZY4.js +26 -0
  14. package/dist/UDDAJZY4.js.map +1 -0
  15. package/dist/VUOMXK5T.js +6 -0
  16. package/dist/VUOMXK5T.js.map +1 -0
  17. package/dist/WKRDI535.js +51 -0
  18. package/dist/WKRDI535.js.map +1 -0
  19. package/dist/cli.d.ts +3 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +28 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/index.d.ts +2 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +9 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/logger.d.ts +8 -0
  28. package/dist/logger.d.ts.map +1 -0
  29. package/dist/logger.js +4 -0
  30. package/dist/logger.js.map +1 -0
  31. package/dist/resolve/discover.d.ts +23 -0
  32. package/dist/resolve/discover.d.ts.map +1 -0
  33. package/dist/resolve/discover.js +7 -0
  34. package/dist/resolve/discover.js.map +1 -0
  35. package/dist/resolve/exclude.d.ts +10 -0
  36. package/dist/resolve/exclude.d.ts.map +1 -0
  37. package/dist/resolve/exclude.js +4 -0
  38. package/dist/resolve/exclude.js.map +1 -0
  39. package/dist/resolve/index.d.ts +20 -0
  40. package/dist/resolve/index.d.ts.map +1 -0
  41. package/dist/resolve/index.js +9 -0
  42. package/dist/resolve/index.js.map +1 -0
  43. package/dist/resolve/io.d.ts +17 -0
  44. package/dist/resolve/io.d.ts.map +1 -0
  45. package/dist/resolve/io.js +6 -0
  46. package/dist/resolve/io.js.map +1 -0
  47. package/dist/resolve/rewrite.d.ts +41 -0
  48. package/dist/resolve/rewrite.d.ts.map +1 -0
  49. package/dist/resolve/rewrite.js +8 -0
  50. package/dist/resolve/rewrite.js.map +1 -0
  51. package/package.json +46 -0
  52. package/src/cli.ts +33 -0
  53. package/src/index.ts +1 -0
  54. package/src/logger.ts +26 -0
  55. package/src/resolve/discover.ts +93 -0
  56. package/src/resolve/exclude.ts +52 -0
  57. package/src/resolve/index.ts +122 -0
  58. package/src/resolve/io.ts +69 -0
  59. package/src/resolve/rewrite.ts +210 -0
  60. package/tests/resolve/discover.test.ts +206 -0
  61. package/tests/resolve/fixtures/index.ts +6 -0
  62. package/tests/resolve/fixtures/minimal.toml +2 -0
  63. package/tests/resolve/fixtures/mixed-deps.toml +4 -0
  64. package/tests/resolve/fixtures/multi-path-deps.toml +9 -0
  65. package/tests/resolve/fixtures/multi-section-path-deps.toml +13 -0
  66. package/tests/resolve/fixtures/no-path-deps.toml +3 -0
  67. package/tests/resolve/fixtures/oapp-with-stale-deps.toml +5 -0
  68. package/tests/resolve/fixtures/patch-multi-registry.toml +22 -0
  69. package/tests/resolve/fixtures/program-with-deps.toml +5 -0
  70. package/tests/resolve/fixtures/program-with-macros.toml +6 -0
  71. package/tests/resolve/fixtures/program-workspace-member.toml +5 -0
  72. package/tests/resolve/fixtures/root-only-sections.toml +13 -0
  73. package/tests/resolve/fixtures/stellar-consumer.toml +8 -0
  74. package/tests/resolve/fixtures/stellar-member-inheriting.toml +10 -0
  75. package/tests/resolve/fixtures/stellar-workspace-root.toml +17 -0
  76. package/tests/resolve/fixtures/stellar-workspace-with-tests.toml +15 -0
  77. package/tests/resolve/fixtures/target-cfg-path-dep.toml +10 -0
  78. package/tests/resolve/fixtures/with-features.toml +2 -0
  79. package/tests/resolve/fixtures/workspace-at-end.toml +6 -0
  80. package/tests/resolve/fixtures/workspace-at-top.toml +10 -0
  81. package/tests/resolve/fixtures/workspace-middle.toml +10 -0
  82. package/tests/resolve/fixtures/workspace-with-default-members.toml +8 -0
  83. package/tests/resolve/fixtures/workspace-with-path-deps.toml +8 -0
  84. package/tests/resolve/index.test.ts +298 -0
  85. package/tests/resolve/rewrite.test.ts +420 -0
  86. package/tsconfig.json +21 -0
  87. package/tsup.config.ts +8 -0
@@ -0,0 +1,43 @@
1
+  WARN  Issue while reading "/home/runner/work/monorepo-internal/monorepo-internal/.npmrc". Failed to replace env in config: ${NPM_TOKEN}
2
+
3
+ > @layerzerolabs/build-utils-rust@0.0.0 build /home/runner/work/monorepo-internal/monorepo-internal/tools/vm-utils/rust/build-utils
4
+ > tsup
5
+
6
+ CLI Building entry: src/cli.ts, src/index.ts, src/logger.ts, src/resolve/discover.ts, src/resolve/exclude.ts, src/resolve/index.ts, src/resolve/io.ts, src/resolve/rewrite.ts
7
+ CLI Using tsconfig: tsconfig.json
8
+ CLI tsup v8.5.1
9
+ CLI Using tsup config: /home/runner/work/monorepo-internal/monorepo-internal/tools/vm-utils/rust/build-utils/tsup.config.ts
10
+ CLI Target: ES2023
11
+ CLI Cleaning output folder
12
+ ESM Build start
13
+ ESM dist/cli.js 1.29 KB
14
+ ESM dist/resolve/exclude.js 187.00 B
15
+ ESM dist/logger.js 171.00 B
16
+ ESM dist/index.js 264.00 B
17
+ ESM dist/resolve/io.js 224.00 B
18
+ ESM dist/resolve/discover.js 250.00 B
19
+ ESM dist/TOEFRNPD.js 3.20 KB
20
+ ESM dist/resolve/rewrite.js 333.00 B
21
+ ESM dist/457ZJTJH.js 1.71 KB
22
+ ESM dist/UDDAJZY4.js 796.00 B
23
+ ESM dist/resolve/index.js 297.00 B
24
+ ESM dist/SPODHCGD.js 1.78 KB
25
+ ESM dist/LQ26FJL3.js 4.54 KB
26
+ ESM dist/VUOMXK5T.js 222.00 B
27
+ ESM dist/WKRDI535.js 1.20 KB
28
+ ESM dist/cli.js.map 2.44 KB
29
+ ESM dist/logger.js.map 70.00 B
30
+ ESM dist/resolve/exclude.js.map 71.00 B
31
+ ESM dist/resolve/io.js.map 66.00 B
32
+ ESM dist/resolve/discover.js.map 72.00 B
33
+ ESM dist/index.js.map 69.00 B
34
+ ESM dist/457ZJTJH.js.map 5.33 KB
35
+ ESM dist/resolve/rewrite.js.map 71.00 B
36
+ ESM dist/SPODHCGD.js.map 4.67 KB
37
+ ESM dist/TOEFRNPD.js.map 8.64 KB
38
+ ESM dist/UDDAJZY4.js.map 1.55 KB
39
+ ESM dist/resolve/index.js.map 69.00 B
40
+ ESM dist/VUOMXK5T.js.map 72.00 B
41
+ ESM dist/WKRDI535.js.map 2.67 KB
42
+ ESM dist/LQ26FJL3.js.map 13.31 KB
43
+ ESM ⚡️ Build success in 214ms
@@ -0,0 +1,8 @@
1
+
2
+ > @layerzerolabs/build-utils-rust@0.0.0 lint /home/runner/work/monorepo-internal/monorepo-internal/tools/vm-utils/rust/build-utils
3
+ > eslint . --max-warnings 0 || (eslint . --fix --max-warnings 0 && false)
4
+
5
+ (node:136810) [MODULE_TYPELESS_PACKAGE_JSON] Warning: Module type of file:///home/runner/work/monorepo-internal/monorepo-internal/eslint.config.js?mtime=1783402791983 is not specified and it doesn't parse as CommonJS.
6
+ Reparsing as ES module because module syntax was detected. This incurs a performance overhead.
7
+ To eliminate this warning, add "type": "module" to /home/runner/work/monorepo-internal/monorepo-internal/package.json.
8
+ (Use `node --trace-warnings ...` to show where the warning was created)
@@ -0,0 +1,58 @@
1
+
2
+ > @layerzerolabs/build-utils-rust@0.0.0 test /home/runner/work/monorepo-internal/monorepo-internal/tools/vm-utils/rust/build-utils
3
+ > vitest --run --pass-with-no-tests --typecheck
4
+
5
+ Testing types with tsc and vue-tsc is an experimental feature.
6
+ Breaking changes might not follow SemVer, please pin Vitest's version when using it.
7
+
8
+  RUN  v3.2.6 /home/runner/work/monorepo-internal/monorepo-internal/tools/vm-utils/rust/build-utils
9
+
10
+ stdout | tests/resolve/index.test.ts > resolveDependencies — single crate mode > copies discovered packages into dependencies/ and rewrites transitive paths
11
+ [INFO] Resolved 1 Cargo dependencies into dependencies
12
+
13
+ stdout | tests/resolve/index.test.ts > resolveDependencies — workspace mode ([workspace] members) > places dependencies/ at workspace root when root Cargo.toml has [workspace]
14
+ [INFO] Resolved 1 Cargo dependencies into dependencies
15
+
16
+ ✓ tests/resolve/discover.test.ts (16 tests) 26ms
17
+ stdout | tests/resolve/index.test.ts > resolveDependencies — transitive dep rewriting > rewrites paths inside copied crates to point to flat siblings
18
+ [INFO] Resolved 2 Cargo dependencies into dependencies
19
+
20
+ stdout | tests/resolve/index.test.ts > resolveDependencies — transitive dep rewriting > strips root-only Cargo tables from copied dependency manifests
21
+ [INFO] Resolved 1 Cargo dependencies into dependencies
22
+
23
+ stdout | tests/resolve/index.test.ts > resolveDependencies — Stellar workspace dependency vendoring > copies the whole workspace tree, including deeply nested members
24
+ [INFO] Resolved 1 Cargo dependencies into dependencies
25
+
26
+ ✓ tests/resolve/rewrite.test.ts (20 tests) 45ms
27
+ stdout | tests/resolve/index.test.ts > resolveDependencies — Stellar workspace dependency vendoring > preserves the [workspace] root manifest so member inheritance still resolves
28
+ [INFO] Resolved 1 Cargo dependencies into dependencies
29
+
30
+ stdout | tests/resolve/index.test.ts > resolveDependencies — Stellar workspace dependency vendoring > leaves the consumer manifest untouched (it already points at dependencies/)
31
+ [INFO] Resolved 1 Cargo dependencies into dependencies
32
+
33
+ stdout | tests/resolve/index.test.ts > resolveDependencies — Stellar workspace dependency vendoring > vendors the deep member the consumer path-deps into
34
+ [INFO] Resolved 1 Cargo dependencies into dependencies
35
+
36
+ stdout | tests/resolve/index.test.ts > resolveDependencies — prune excluded workspace members > drops the excluded member from the preserved root manifest, keeps real members
37
+ [INFO] Resolved 1 Cargo dependencies into dependencies
38
+
39
+ stdout | tests/resolve/index.test.ts > resolveDependencies — prune excluded workspace members > does not vendor the excluded subtree at all
40
+ [INFO] Resolved 1 Cargo dependencies into dependencies
41
+
42
+ stdout | tests/resolve/index.test.ts > resolveDependencies — single-crate consumer (no [workspace]) > places dependencies/ next to the crate Cargo.toml
43
+ [INFO] Resolved 1 Cargo dependencies into dependencies
44
+
45
+ stdout | tests/resolve/index.test.ts > resolveDependencies — error handling > empty node_modules does not change dependencies state > dependencies does not exist
46
+ [INFO] No @layerzerolabs namespaced Cargo dependencies found in node_modules
47
+
48
+ stdout | tests/resolve/index.test.ts > resolveDependencies — error handling > empty node_modules does not change dependencies state > dependencies already exists
49
+ [INFO] No @layerzerolabs namespaced Cargo dependencies found in node_modules
50
+
51
+ ✓ tests/resolve/index.test.ts (14 tests) 111ms
52
+
53
+  Test Files  3 passed (3)
54
+  Tests  50 passed (50)
55
+ Type Errors  no errors
56
+  Start at  05:46:59
57
+  Duration  781ms (transform 333ms, setup 0ms, collect 844ms, tests 182ms, environment 1ms, prepare 423ms)
58
+
package/README.md ADDED
@@ -0,0 +1,111 @@
1
+ # @layerzerolabs/build-utils-rust
2
+
3
+ Build utilities for Rust/Cargo packages in the LayerZero monorepo.
4
+
5
+ These helpers bridge the gap between the npm/pnpm package graph and Cargo's
6
+ build model, so Rust-based VM packages (Solana, Stellar, …) can be compiled
7
+ using their normal monorepo dependencies. Today the package exposes a single
8
+ command — `resolve` — with more to follow as the Rust build story grows.
9
+
10
+ ## Installation
11
+
12
+ Add it as a dev dependency of the Rust package you want to build:
13
+
14
+ ```jsonc
15
+ // package.json
16
+ "devDependencies": {
17
+ "@layerzerolabs/build-utils-rust": "workspace:*"
18
+ }
19
+ ```
20
+
21
+ ## Commands
22
+
23
+ ### `resolve`
24
+
25
+ Resolves all `@layerzerolabs` Cargo crates reachable through `node_modules`
26
+ (direct and transitive) into a flat `dependencies/` directory next to your
27
+ package, rewriting the `path = "…"` deps inside each copied `Cargo.toml` so the
28
+ vendored crates resolve each other locally.
29
+
30
+ The point is a self-contained package: instead of Cargo path deps reaching out
31
+ through `node_modules` (pnpm symlinks that point outside the package), every
32
+ dependency lives under the package root. This lets a build container mount only
33
+ the package — no monorepo, no registry publish, no git deps.
34
+
35
+ ```bash
36
+ # From the Rust package root (auto-discovers layout)
37
+ build-utils-rust resolve
38
+
39
+ # Point at a specific package root / crate explicitly
40
+ build-utils-rust resolve --cwd ./path/to/package --cargo-dir ./contracts/my-crate
41
+ ```
42
+
43
+ | Option | Description |
44
+ | -------------------- | -------------------------------------------------------------------------------------------- |
45
+ | `--cwd <path>` | pnpm package root (where `node_modules/` lives). Defaults to the current dir. |
46
+ | `--cargo-dir <path>` | Cargo crate directory to write `dependencies/` into. Defaults to the package root (`--cwd`). |
47
+ | `--log-level <lvl>` | `trace` \| `debug` \| `info` \| `warn` \| `error`. Defaults to `info`. |
48
+
49
+ #### Where `dependencies/` is written
50
+
51
+ `dependencies/` is created at the resolved Cargo root — `--cargo-dir` if given,
52
+ otherwise the package root (`--cwd`). There's no VM-specific convention (no
53
+ hardcoded `programs/`, no `Anchor.toml`); it works for whatever layout the root
54
+ `Cargo.toml` describes:
55
+
56
+ - **Workspace root** (`[workspace]` at the package root) — one shared
57
+ `dependencies/` at the root, referenced by members via relative paths (Solana
58
+ `programs/*`, Stellar workspaces).
59
+ - **Single crate** (bare `[package]`) — `dependencies/` sits next to that
60
+ crate's `Cargo.toml` (Solana library crates, a standalone Stellar crate).
61
+
62
+ #### What gets vendored (and what doesn't)
63
+
64
+ - **Files:** only `.rs`, `.toml`, and `.json` are copied. Prebuilt or non-source
65
+ assets a build might read (`.wasm`, `.bin`, `.proto`, `.md`, …) are **not**
66
+ vendored. If a crate's build genuinely needs one, add its extension to
67
+ `COPY_EXTENSIONS` in `src/resolve/exclude.ts`.
68
+ - **Path deps:** rewritten by parsing the manifest (via `smol-toml`), so every TOML
69
+ form is handled — inline tables (`dep = { path = "…" }`), the table-header form
70
+ (`[dependencies.dep]` + `path = "…"`), `[dev-/build-dependencies]`,
71
+ `[target.'cfg(…)'.dependencies]`, and `[workspace.dependencies]`. A rewritten manifest
72
+ is re-serialized (comments/formatting are not preserved), which is invisible because
73
+ `dependencies/` is regenerated every build; unchanged manifests are left untouched.
74
+ - **Scope:** every `@layerzerolabs` Cargo crate reachable through `node_modules`
75
+ is vendored. That set is already pruned by pnpm to your package's declared deps,
76
+ and a workspace dependency is copied **whole** (all members) to keep
77
+ `workspace = true` inheritance intact — so some unused member crates may be copied.
78
+
79
+ #### Workspace dependencies
80
+
81
+ When a resolved dependency is itself a Cargo workspace (e.g.
82
+ `@layerzerolabs/protocol-stellar-v2`, whose member crates use
83
+ `version.workspace = true` / `dep = { workspace = true }`), it is copied **whole**
84
+ into `dependencies/<pkg>/` with its `[workspace]` root manifest preserved. That
85
+ keeps the vendored member crates' workspace inheritance intact, and lets a
86
+ consumer path-dep into a sub-crate any number of levels deep, e.g.
87
+ `dependencies/protocol-stellar-v2/contracts/oapps/oft-core`.
88
+
89
+ #### Consuming the vendored crates
90
+
91
+ `resolve` only **fills** `dependencies/` — it does **not** edit the consuming
92
+ package's own `Cargo.toml`. Point your package's path deps at `dependencies/…`
93
+ directly (the same way the Solana packages do):
94
+
95
+ ```toml
96
+ # package Cargo.toml
97
+ [dependencies]
98
+ utils = { path = "dependencies/protocol-stellar-v2/contracts/utils" }
99
+ oft-core = { path = "dependencies/protocol-stellar-v2/contracts/oapps/oft-core" }
100
+ ```
101
+
102
+ Typically wired into a package's `build` script ahead of the Cargo build so
103
+ dependencies are resolved fresh each time.
104
+
105
+ ## Development
106
+
107
+ ```bash
108
+ pnpm build # bundle with tsup
109
+ pnpm test # run the vitest suite
110
+ pnpm lint # eslint
111
+ ```
@@ -0,0 +1,52 @@
1
+ import { tryRealpath, tryReaddir } from './SPODHCGD.js';
2
+ import { logger } from './UDDAJZY4.js';
3
+ import { __name } from './VUOMXK5T.js';
4
+ import { stat, access, readFile } from 'fs/promises';
5
+ import { join } from 'path';
6
+ import { parse } from 'smol-toml';
7
+
8
+ var LZ_SCOPE = "@layerzerolabs";
9
+ var isCrate = /* @__PURE__ */ __name(async (dir) => {
10
+ try {
11
+ const stats = await stat(dir);
12
+ if (!stats.isDirectory()) return false;
13
+ await access(join(dir, "Cargo.toml"));
14
+ return true;
15
+ } catch {
16
+ return false;
17
+ }
18
+ }, "isCrate");
19
+ var isWorkspaceRoot = /* @__PURE__ */ __name(async (crateRoot) => {
20
+ const manifestPath = join(crateRoot, "Cargo.toml");
21
+ let raw;
22
+ try {
23
+ raw = await readFile(manifestPath, "utf-8");
24
+ } catch {
25
+ return false;
26
+ }
27
+ try {
28
+ return parse(raw).workspace != null;
29
+ } catch (err) {
30
+ logger.warn(`failed to parse ${manifestPath}; treating as non-workspace`, err);
31
+ return false;
32
+ }
33
+ }, "isWorkspaceRoot");
34
+ var discoverPackages = /* @__PURE__ */ __name(async (dir, discovered, visited) => {
35
+ const realDir = await tryRealpath(dir);
36
+ if (!realDir || visited.has(realDir)) return;
37
+ visited.add(realDir);
38
+ const nodeModulesDir = join(dir, "node_modules", LZ_SCOPE);
39
+ for (const pkgName of await tryReaddir(nodeModulesDir)) {
40
+ const realPath = await tryRealpath(join(nodeModulesDir, pkgName));
41
+ const isValidCratePath = realPath && await isCrate(realPath);
42
+ if (!isValidCratePath) continue;
43
+ if (!discovered.has(pkgName)) {
44
+ discovered.set(pkgName, realPath);
45
+ }
46
+ await discoverPackages(realPath, discovered, visited);
47
+ }
48
+ }, "discoverPackages");
49
+
50
+ export { discoverPackages, isCrate, isWorkspaceRoot };
51
+ //# sourceMappingURL=457ZJTJH.js.map
52
+ //# sourceMappingURL=457ZJTJH.js.map
@@ -0,0 +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","realPath","isValidCratePath","set"],"mappings":";;;;;;;AAaA,IAAMA,QAAAA,GAAW,gBAAA;AAmBV,IAAMC,OAAAA,iCAAiBC,GAAAA,KAAAA;AAC1B,EAAA,IAAI;AACA,IAAA,MAAMC,KAAAA,GAAQ,MAAMC,IAAAA,CAAKF,GAAAA,CAAAA;AACzB,IAAA,IAAI,CAACC,KAAAA,CAAME,WAAAA,EAAW,EAAI,OAAO,KAAA;AACjC,IAAA,MAAMC,MAAAA,CAAOC,IAAAA,CAAKL,GAAAA,EAAK,YAAA,CAAA,CAAA;AACvB,IAAA,OAAO,IAAA;EACX,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,KAAA;AACX,EAAA;AACJ,CAAA,EATuB,SAAA;AAYhB,IAAMM,eAAAA,iCAAyBC,SAAAA,KAAAA;AAClC,EAAA,MAAMC,YAAAA,GAAeH,IAAAA,CAAKE,SAAAA,EAAW,YAAA,CAAA;AACrC,EAAA,IAAIE,GAAAA;AACJ,EAAA,IAAI;AACAA,IAAAA,GAAAA,GAAM,MAAMC,QAAAA,CAASF,YAAAA,EAAc,OAAA,CAAA;EACvC,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,KAAA;AACX,EAAA;AACA,EAAA,IAAI;AACA,IAAA,OAAOG,KAAAA,CAAMF,GAAAA,CAAAA,CAAKG,SAAAA,IAAa,IAAA;AACnC,EAAA,CAAA,CAAA,OAASC,GAAAA,EAAK;AAGVC,IAAAA,MAAAA,CAAOC,IAAAA,CAAK,CAAA,gBAAA,EAAmBP,YAAAA,CAAAA,2BAAAA,CAAAA,EAA2CK,GAAAA,CAAAA;AAC1E,IAAA,OAAO,KAAA;AACX,EAAA;AACJ,CAAA,EAhB+B,iBAAA;AAwBxB,IAAMG,gBAAAA,mBAAmB,MAAA,CAAA,OAC5BhB,GAAAA,EACAiB,UAAAA,EACAC,OAAAA,KAAAA;AAEA,EAAA,MAAMC,OAAAA,GAAU,MAAMC,WAAAA,CAAYpB,GAAAA,CAAAA;AAClC,EAAA,IAAI,CAACmB,OAAAA,IAAWD,OAAAA,CAAQG,GAAAA,CAAIF,OAAAA,CAAAA,EAAU;AACtCD,EAAAA,OAAAA,CAAQI,IAAIH,OAAAA,CAAAA;AAEZ,EAAA,MAAMI,cAAAA,GAAiBlB,IAAAA,CAAKL,GAAAA,EAAK,cAAA,EAAgBF,QAAAA,CAAAA;AAEjD,EAAA,KAAA,MAAW0B,OAAAA,IAAW,MAAMC,UAAAA,CAAWF,cAAAA,CAAAA,EAAiB;AAEpD,IAAA,MAAMG,WAAW,MAAMN,WAAAA,CAAYf,IAAAA,CAAKkB,cAAAA,EAAgBC,OAAAA,CAAAA,CAAAA;AACxD,IAAA,MAAMG,gBAAAA,GAAmBD,QAAAA,IAAa,MAAM3B,OAAAA,CAAQ2B,QAAAA,CAAAA;AACpD,IAAA,IAAI,CAACC,gBAAAA,EAAkB;AAEvB,IAAA,IAAI,CAACV,UAAAA,CAAWI,GAAAA,CAAIG,OAAAA,CAAAA,EAAU;AAC1BP,MAAAA,UAAAA,CAAWW,GAAAA,CAAIJ,SAASE,QAAAA,CAAAA;AAC5B,IAAA;AAGA,IAAA,MAAMV,gBAAAA,CAAiBU,QAAAA,EAAUT,UAAAA,EAAYC,OAAAA,CAAAA;AACjD,EAAA;AACJ,CAAA,EAxBgC,kBAAA","file":"457ZJTJH.js","sourcesContent":["/** Discovery — walk node_modules/@layerzerolabs/ to find all @layerzerolabs Cargo crates. */\n\nimport { access, readFile, stat } from 'fs/promises';\nimport { 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 /** vendored location: 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`'s node_modules.\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\n for (const pkgName of await tryReaddir(nodeModulesDir)) {\n // Resolve pnpm symlink to canonical path (deduplicates across dep chains)\n const realPath = await tryRealpath(join(nodeModulesDir, pkgName));\n const isValidCratePath = realPath && (await isCrate(realPath));\n if (!isValidCratePath) continue;\n\n if (!discovered.has(pkgName)) {\n discovered.set(pkgName, realPath);\n }\n\n // Walk this package's own node_modules for transitive Cargo deps\n await discoverPackages(realPath, discovered, visited);\n }\n};\n"]}
@@ -0,0 +1,112 @@
1
+ import { isWorkspaceRoot } from './457ZJTJH.js';
2
+ import { tryRealpath } from './SPODHCGD.js';
3
+ import { logger } from './UDDAJZY4.js';
4
+ import { hasExcludedSegment } from './WKRDI535.js';
5
+ import { __name } from './VUOMXK5T.js';
6
+ import { readFile, writeFile } from 'fs/promises';
7
+ import { relative, dirname, join } from 'path';
8
+ import { parse, stringify } from 'smol-toml';
9
+
10
+ var isTable = /* @__PURE__ */ __name((value) => typeof value === "object" && value !== null && !Array.isArray(value), "isTable");
11
+ var DEP_TABLE_KEYS = [
12
+ "dependencies",
13
+ "dev-dependencies",
14
+ "build-dependencies"
15
+ ];
16
+ var pathDepSpecs = /* @__PURE__ */ __name((manifest, includeWorkspaceDeps) => {
17
+ const containers = [
18
+ manifest,
19
+ ...isTable(manifest.target) ? Object.values(manifest.target).filter(isTable) : []
20
+ ];
21
+ const depTables = [
22
+ ...containers.flatMap((container) => DEP_TABLE_KEYS.map((key) => container[key])),
23
+ ...includeWorkspaceDeps && isTable(manifest.workspace) ? [
24
+ manifest.workspace.dependencies
25
+ ] : []
26
+ ];
27
+ return depTables.filter(isTable).flatMap((table) => Object.values(table)).filter((spec) => isTable(spec) && typeof spec.path === "string");
28
+ }, "pathDepSpecs");
29
+ var pruneExcludedLiteralMembers = /* @__PURE__ */ __name((manifest) => {
30
+ const workspace = manifest.workspace;
31
+ if (!isTable(workspace)) return false;
32
+ let changed = false;
33
+ for (const key of [
34
+ "members",
35
+ "default-members"
36
+ ]) {
37
+ const members = workspace[key];
38
+ if (!Array.isArray(members)) continue;
39
+ const kept = members.filter((m) => typeof m !== "string" || m.includes("*") || !hasExcludedSegment(m));
40
+ if (kept.length !== members.length) {
41
+ workspace[key] = kept;
42
+ changed = true;
43
+ }
44
+ }
45
+ return changed;
46
+ }, "pruneExcludedLiteralMembers");
47
+ var rewritePathDeps = /* @__PURE__ */ __name(async (manifest, originalDir, manifestDir, ctx, includeWorkspaceDeps) => {
48
+ let changed = false;
49
+ for (const spec of pathDepSpecs(manifest, includeWorkspaceDeps)) {
50
+ const target = await resolveViaRealpath(originalDir, spec.path, ctx.pathMap) ?? resolveViaNameFallback(spec.path, ctx);
51
+ if (!target) continue;
52
+ const rewritten = relative(manifestDir, target);
53
+ if (rewritten === spec.path) continue;
54
+ logger.trace(`rewrite path dep ${spec.path} -> ${rewritten}`);
55
+ spec.path = rewritten;
56
+ changed = true;
57
+ }
58
+ return changed;
59
+ }, "rewritePathDeps");
60
+ var stripRootOnlyTables = /* @__PURE__ */ __name((manifest) => {
61
+ let changed = false;
62
+ for (const table of [
63
+ "workspace",
64
+ "patch",
65
+ "profile"
66
+ ]) {
67
+ if (manifest[table] != null) {
68
+ delete manifest[table];
69
+ changed = true;
70
+ }
71
+ }
72
+ return changed;
73
+ }, "stripRootOnlyTables");
74
+ var rewriteCargoToml = /* @__PURE__ */ __name(async (originalDir, cargoTomlPath, ctx, stripRootTables = true) => {
75
+ const manifest = parse(await readFile(cargoTomlPath, "utf-8"));
76
+ const pathsChanged = await rewritePathDeps(manifest, originalDir, dirname(cargoTomlPath), ctx, !stripRootTables);
77
+ const tablesChanged = stripRootTables ? stripRootOnlyTables(manifest) : pruneExcludedLiteralMembers(manifest);
78
+ if (pathsChanged || tablesChanged) {
79
+ await writeFile(cargoTomlPath, stringify(manifest));
80
+ logger.debug(`rewrote ${cargoTomlPath}`);
81
+ }
82
+ }, "rewriteCargoToml");
83
+ var resolveViaRealpath = /* @__PURE__ */ __name(async (originalDir, pathValue, pathMap) => {
84
+ const resolvedPath = await tryRealpath(join(originalDir, pathValue));
85
+ return resolvedPath ? pathMap.get(resolvedPath) : void 0;
86
+ }, "resolveViaRealpath");
87
+ var resolveViaNameFallback = /* @__PURE__ */ __name((pathValue, ctx) => {
88
+ const segments = pathValue.split("/").filter(Boolean);
89
+ const leafDir = segments.at(-1);
90
+ if (!leafDir) return void 0;
91
+ for (const [pkgName, realPath] of ctx.discovered) {
92
+ if (pkgName === leafDir) {
93
+ return ctx.pathMap.get(realPath);
94
+ }
95
+ const parentDir = segments.at(-2);
96
+ if (parentDir && pkgName === parentDir) {
97
+ const subTarget = ctx.pathMap.get(join(realPath, leafDir));
98
+ if (subTarget) return subTarget;
99
+ }
100
+ }
101
+ return void 0;
102
+ }, "resolveViaNameFallback");
103
+ var rewriteCargoTomls = /* @__PURE__ */ __name(async (srcRoot, destRoot, tree, ctx) => {
104
+ for (const manifestDir of tree.manifestDirs) {
105
+ const preserve = manifestDir === "." && await isWorkspaceRoot(destRoot);
106
+ await rewriteCargoToml(join(srcRoot, manifestDir), join(destRoot, manifestDir, "Cargo.toml"), ctx, !preserve);
107
+ }
108
+ }, "rewriteCargoTomls");
109
+
110
+ export { pruneExcludedLiteralMembers, rewriteCargoToml, rewriteCargoTomls, rewritePathDeps, stripRootOnlyTables };
111
+ //# sourceMappingURL=LQ26FJL3.js.map
112
+ //# sourceMappingURL=LQ26FJL3.js.map
@@ -0,0 +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","leafDir","at","pkgName","realPath","discovered","parentDir","subTarget","rewriteCargoTomls","srcRoot","destRoot","tree","manifestDirs","preserve","isWorkspaceRoot"],"mappings":"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","file":"LQ26FJL3.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/** Fallback: match the path's leaf dir name against a discovered package (for already-`dependencies/…` paths). */\nconst resolveViaNameFallback = (pathValue: string, ctx: RewriteContext): string | undefined => {\n const segments = pathValue.split('/').filter(Boolean);\n const leafDir = segments.at(-1);\n if (!leafDir) return undefined;\n\n for (const [pkgName, realPath] of ctx.discovered) {\n // Direct match: \"dependencies/utils-solana-rbac\" → match \"utils-solana-rbac\"\n if (pkgName === leafDir) {\n return ctx.pathMap.get(realPath);\n }\n // Subdir match: \"dependencies/utils-solana-rbac/macros\" → match parent\n const parentDir = segments.at(-2);\n if (parentDir && pkgName === parentDir) {\n const subTarget = ctx.pathMap.get(join(realPath, leafDir));\n if (subTarget) return subTarget;\n }\n }\n return undefined;\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"]}
@@ -0,0 +1,59 @@
1
+ import { logger } from './UDDAJZY4.js';
2
+ import { removeExcludedFiles, COPY_EXTENSIONS } from './WKRDI535.js';
3
+ import { __name } from './VUOMXK5T.js';
4
+ import { realpath, stat, readdir } from 'fs/promises';
5
+ import { join, extname, basename, dirname } from 'path';
6
+
7
+ var tryRealpath = /* @__PURE__ */ __name(async (path) => {
8
+ try {
9
+ return await realpath(path);
10
+ } catch {
11
+ return void 0;
12
+ }
13
+ }, "tryRealpath");
14
+ var tryIsDirectory = /* @__PURE__ */ __name(async (path) => {
15
+ try {
16
+ return (await stat(path)).isDirectory();
17
+ } catch {
18
+ return false;
19
+ }
20
+ }, "tryIsDirectory");
21
+ var tryReaddir = /* @__PURE__ */ __name(async (dir) => {
22
+ try {
23
+ return await readdir(dir);
24
+ } catch {
25
+ return [];
26
+ }
27
+ }, "tryReaddir");
28
+ var collectFiles = /* @__PURE__ */ __name(async (root, relativePath = "") => {
29
+ const dirs = [];
30
+ const files = [];
31
+ const manifestDirs = [];
32
+ const rawFileNames = await tryReaddir(join(root, relativePath));
33
+ const fileNames = removeExcludedFiles(rawFileNames).map((e) => join(relativePath, e));
34
+ for (const file of fileNames) {
35
+ if (await tryIsDirectory(join(root, file))) {
36
+ const subDir = await collectFiles(root, file);
37
+ if (subDir.files.length > 0) {
38
+ dirs.push(file, ...subDir.dirs);
39
+ files.push(...subDir.files);
40
+ manifestDirs.push(...subDir.manifestDirs);
41
+ } else {
42
+ logger.trace(`skip empty dir ${file}`);
43
+ }
44
+ } else if (COPY_EXTENSIONS.has(extname(file))) {
45
+ files.push(file);
46
+ if (basename(file) === "Cargo.toml") manifestDirs.push(dirname(file));
47
+ logger.trace(`collect ${file}`);
48
+ }
49
+ }
50
+ return {
51
+ dirs,
52
+ files,
53
+ manifestDirs
54
+ };
55
+ }, "collectFiles");
56
+
57
+ export { collectFiles, tryIsDirectory, tryReaddir, tryRealpath };
58
+ //# sourceMappingURL=SPODHCGD.js.map
59
+ //# sourceMappingURL=SPODHCGD.js.map
@@ -0,0 +1 @@
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":"SPODHCGD.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"]}
@@ -0,0 +1,83 @@
1
+ import { rewriteCargoTomls } from './LQ26FJL3.js';
2
+ import { discoverPackages, isCrate } from './457ZJTJH.js';
3
+ import { collectFiles } from './SPODHCGD.js';
4
+ import { logger } from './UDDAJZY4.js';
5
+ import { __name } from './VUOMXK5T.js';
6
+ import { rm, mkdir, copyFile } from 'fs/promises';
7
+ import { join, resolve, relative } from 'path';
8
+
9
+ var buildDependenciesPathMap = /* @__PURE__ */ __name((targets) => {
10
+ const pathMap = /* @__PURE__ */ new Map();
11
+ for (const { npmPkgDir, depsPkgDir, tree } of targets) {
12
+ for (const dir of tree.manifestDirs) {
13
+ pathMap.set(join(npmPkgDir, dir), join(depsPkgDir, dir));
14
+ logger.trace(`map ${join(npmPkgDir, dir)} -> ${join(depsPkgDir, dir)}`);
15
+ }
16
+ }
17
+ logger.debug(`built dependency path map: ${pathMap.size} entries`);
18
+ return pathMap;
19
+ }, "buildDependenciesPathMap");
20
+ var copyCollected = /* @__PURE__ */ __name(async (srcRoot, destRoot, tree) => {
21
+ await mkdir(destRoot, {
22
+ recursive: true
23
+ });
24
+ await Promise.all(tree.dirs.map((dir) => mkdir(join(destRoot, dir), {
25
+ recursive: true
26
+ })));
27
+ await Promise.all(tree.files.map((file) => copyFile(join(srcRoot, file), join(destRoot, file))));
28
+ }, "copyCollected");
29
+ var resolveCargoRoot = /* @__PURE__ */ __name(async (packageRoot, cargoDir) => {
30
+ if (cargoDir) {
31
+ const resolved = resolve(packageRoot, cargoDir);
32
+ if (!await isCrate(resolved)) {
33
+ throw new Error(`--cargo-dir ${cargoDir} does not contain a Cargo.toml`);
34
+ }
35
+ return resolved;
36
+ }
37
+ if (!await isCrate(packageRoot)) {
38
+ throw new Error(`${packageRoot} does not contain a Cargo.toml`);
39
+ }
40
+ return packageRoot;
41
+ }, "resolveCargoRoot");
42
+ var resolveDependencies = /* @__PURE__ */ __name(async ({ cwd, cargoDir } = {}) => {
43
+ const packageRoot = resolve(cwd ?? process.cwd());
44
+ const depsRoot = join(await resolveCargoRoot(packageRoot, cargoDir), "dependencies");
45
+ const discovered = /* @__PURE__ */ new Map();
46
+ await discoverPackages(packageRoot, discovered, /* @__PURE__ */ new Set());
47
+ if (discovered.size === 0) {
48
+ logger.info("No @layerzerolabs namespaced Cargo dependencies found in node_modules");
49
+ return;
50
+ }
51
+ await rm(depsRoot, {
52
+ recursive: true,
53
+ force: true
54
+ });
55
+ await mkdir(depsRoot, {
56
+ recursive: true
57
+ });
58
+ const targets = await Promise.all(Array.from(discovered, async ([pkgName, npmPkgDir]) => {
59
+ const tree = await collectFiles(npmPkgDir);
60
+ logger.debug(`${pkgName}: collected ${tree.files.length} files, ${tree.dirs.length} dirs`);
61
+ return {
62
+ pkgName,
63
+ npmPkgDir,
64
+ depsPkgDir: join(depsRoot, pkgName),
65
+ tree
66
+ };
67
+ }));
68
+ const ctx = {
69
+ pathMap: buildDependenciesPathMap(targets),
70
+ discovered
71
+ };
72
+ logger.debug(`path map: ${ctx.pathMap.size} entries`);
73
+ await Promise.all(targets.map(async ({ pkgName, npmPkgDir, depsPkgDir, tree }) => {
74
+ await copyCollected(npmPkgDir, depsPkgDir, tree);
75
+ await rewriteCargoTomls(npmPkgDir, depsPkgDir, tree, ctx);
76
+ logger.debug(` ${pkgName} -> ${npmPkgDir}`);
77
+ }));
78
+ logger.info(`Resolved ${discovered.size} Cargo dependencies into ${relative(packageRoot, depsRoot) || "./dependencies/"}`);
79
+ }, "resolveDependencies");
80
+
81
+ export { buildDependenciesPathMap, resolveDependencies };
82
+ //# sourceMappingURL=TOEFRNPD.js.map
83
+ //# sourceMappingURL=TOEFRNPD.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","rm","force","Array","from","pkgName","collectFiles","length","ctx","rewriteCargoTomls","relative"],"mappings":"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","file":"TOEFRNPD.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"]}
@@ -0,0 +1,26 @@
1
+ import { __name } from './VUOMXK5T.js';
2
+ import { createConsoleLogger, LogLevel } from '@layerzerolabs/logger-node';
3
+ export { LogLevel } from '@layerzerolabs/logger-node';
4
+
5
+ var logger = createConsoleLogger(LogLevel.INFO);
6
+ var setLogLevel = /* @__PURE__ */ __name((level) => {
7
+ logger = createConsoleLogger(level);
8
+ }, "setLogLevel");
9
+ var parseLogLevel = /* @__PURE__ */ __name((value) => {
10
+ switch (value?.toLowerCase()) {
11
+ case "trace":
12
+ return LogLevel.TRACE;
13
+ case "debug":
14
+ return LogLevel.DEBUG;
15
+ case "warn":
16
+ return LogLevel.WARN;
17
+ case "error":
18
+ return LogLevel.ERROR;
19
+ default:
20
+ return LogLevel.INFO;
21
+ }
22
+ }, "parseLogLevel");
23
+
24
+ export { logger, parseLogLevel, setLogLevel };
25
+ //# sourceMappingURL=UDDAJZY4.js.map
26
+ //# sourceMappingURL=UDDAJZY4.js.map