@layerzerolabs/vm-tooling 1.2.29 → 1.2.31

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 (125) hide show
  1. package/dist/{HIFVOL6G.js → 4PZQU6GV.js} +7 -9
  2. package/dist/4PZQU6GV.js.map +1 -0
  3. package/dist/{P52CW6DK.js → D3SKWSHN.js} +3 -5
  4. package/dist/D3SKWSHN.js.map +1 -0
  5. package/dist/{5SLPZRAL.js → D5ZLPMIL.js} +5 -7
  6. package/dist/D5ZLPMIL.js.map +1 -0
  7. package/dist/EKUFNO5X.js +3 -0
  8. package/dist/EKUFNO5X.js.map +1 -0
  9. package/dist/{XOVO3JKY.js → ELRX6BWW.js} +3 -5
  10. package/dist/ELRX6BWW.js.map +1 -0
  11. package/dist/{GNAXYUMP.js → FZ4WTZV4.js} +5 -6
  12. package/dist/FZ4WTZV4.js.map +1 -0
  13. package/dist/{CYP6J4VH.js → GSL2M6U4.js} +4 -6
  14. package/dist/GSL2M6U4.js.map +1 -0
  15. package/dist/{5PX53N66.js → GU2VLUXE.js} +3 -5
  16. package/dist/GU2VLUXE.js.map +1 -0
  17. package/dist/{VB2BOPPZ.js → IHHBJ2SZ.js} +3 -5
  18. package/dist/IHHBJ2SZ.js.map +1 -0
  19. package/dist/{H55JBB6F.js → IUE6WGKT.js} +12 -14
  20. package/dist/IUE6WGKT.js.map +1 -0
  21. package/dist/{HMZV72VO.js → J7BNVFS2.js} +5 -7
  22. package/dist/J7BNVFS2.js.map +1 -0
  23. package/dist/{SWKTHNWT.js → KBDBSTDG.js} +4 -6
  24. package/dist/KBDBSTDG.js.map +1 -0
  25. package/dist/{BVTEQOCW.js → L53SDSQA.js} +4 -6
  26. package/dist/L53SDSQA.js.map +1 -0
  27. package/dist/{GBCVVX6B.js → NCFTCSCO.js} +8 -10
  28. package/dist/NCFTCSCO.js.map +1 -0
  29. package/dist/{IGFQKKDO.js → UCR2ZBRF.js} +5 -6
  30. package/dist/UCR2ZBRF.js.map +1 -0
  31. package/dist/{TJ5HTUVM.js → UZOGNQDH.js} +3 -4
  32. package/dist/UZOGNQDH.js.map +1 -0
  33. package/dist/{XKW5QM54.js → V43YBQSF.js} +4 -6
  34. package/dist/V43YBQSF.js.map +1 -0
  35. package/dist/{6M3XVMYE.js → VAVK6AV3.js} +5 -7
  36. package/dist/VAVK6AV3.js.map +1 -0
  37. package/dist/{N3I7SNFG.js → VMHQSHJN.js} +3 -5
  38. package/dist/VMHQSHJN.js.map +1 -0
  39. package/dist/VUOMXK5T.js +6 -0
  40. package/dist/VUOMXK5T.js.map +1 -0
  41. package/dist/{XMRVBPGX.js → WP67XJRG.js} +3 -5
  42. package/dist/WP67XJRG.js.map +1 -0
  43. package/dist/{ADZG6QSC.js → YT4XAH7H.js} +3 -4
  44. package/dist/YT4XAH7H.js.map +1 -0
  45. package/dist/{H4RUI4N2.js → YZCMSN63.js} +5 -7
  46. package/dist/YZCMSN63.js.map +1 -0
  47. package/dist/ZEW74YLA.js +3 -0
  48. package/dist/ZEW74YLA.js.map +1 -0
  49. package/dist/{RRKFUBOS.js → ZTUNQIFK.js} +5 -7
  50. package/dist/ZTUNQIFK.js.map +1 -0
  51. package/dist/cli.js +22 -22
  52. package/dist/config.js +3 -3
  53. package/dist/context.js +0 -3
  54. package/dist/context.js.map +1 -1
  55. package/dist/core/index.js +18 -18
  56. package/dist/core/local-executor.js +2 -2
  57. package/dist/core/lock.js +2 -2
  58. package/dist/core/tool-executor.js +17 -17
  59. package/dist/core/version-resolver.js +4 -4
  60. package/dist/display/formatters.js +4 -4
  61. package/dist/display/index.js +6 -6
  62. package/dist/display/version-display.js +5 -5
  63. package/dist/environment.js +2 -2
  64. package/dist/github/index.js +7 -7
  65. package/dist/github/matrix.js +6 -6
  66. package/dist/index.js +25 -28
  67. package/dist/index.js.map +1 -1
  68. package/dist/scoped-workspace/exclude-workspace-dependency-sources-pruner.js +2 -2
  69. package/dist/scoped-workspace/index.js +9 -9
  70. package/dist/scoped-workspace/node-modules.js +2 -2
  71. package/dist/scoped-workspace/types.js +0 -3
  72. package/dist/scoped-workspace/types.js.map +1 -1
  73. package/dist/scoped-workspace/workspace-dependency-graph.js +5 -5
  74. package/dist/scoped-workspace/workspace-source-copy.js +4 -4
  75. package/dist/test.js +6 -6
  76. package/dist/utils/docker.js +5 -5
  77. package/dist/utils/error.js +2 -2
  78. package/dist/utils/finder.js +2 -2
  79. package/dist/utils/fs.js +2 -2
  80. package/dist/utils.js +3 -3
  81. package/package.json +6 -7
  82. package/dist/2GK3MDLX.js +0 -1341
  83. package/dist/2GK3MDLX.js.map +0 -1
  84. package/dist/5PX53N66.js.map +0 -1
  85. package/dist/5SLPZRAL.js.map +0 -1
  86. package/dist/6M3XVMYE.js.map +0 -1
  87. package/dist/ADZG6QSC.js.map +0 -1
  88. package/dist/BJVTHJLE.js +0 -6
  89. package/dist/BJVTHJLE.js.map +0 -1
  90. package/dist/BVTEQOCW.js.map +0 -1
  91. package/dist/CYP6J4VH.js.map +0 -1
  92. package/dist/GBCVVX6B.js.map +0 -1
  93. package/dist/GNAXYUMP.js.map +0 -1
  94. package/dist/H4RUI4N2.js.map +0 -1
  95. package/dist/H55JBB6F.js.map +0 -1
  96. package/dist/HIFVOL6G.js.map +0 -1
  97. package/dist/HMZV72VO.js.map +0 -1
  98. package/dist/IGFQKKDO.js.map +0 -1
  99. package/dist/JWJXCZMP.js +0 -40
  100. package/dist/JWJXCZMP.js.map +0 -1
  101. package/dist/LBCSKMFZ.js +0 -18392
  102. package/dist/LBCSKMFZ.js.map +0 -1
  103. package/dist/N3I7SNFG.js.map +0 -1
  104. package/dist/P52CW6DK.js.map +0 -1
  105. package/dist/RRKFUBOS.js.map +0 -1
  106. package/dist/SWKTHNWT.js.map +0 -1
  107. package/dist/TJ5HTUVM.js.map +0 -1
  108. package/dist/VB2BOPPZ.js.map +0 -1
  109. package/dist/XKW5QM54.js.map +0 -1
  110. package/dist/XMRVBPGX.js.map +0 -1
  111. package/dist/XOVO3JKY.js.map +0 -1
  112. package/dist/ZWMRQU7D.js +0 -6
  113. package/dist/ZWMRQU7D.js.map +0 -1
  114. package/dist/core/local-executor.test.js +0 -110
  115. package/dist/core/local-executor.test.js.map +0 -1
  116. package/dist/core/lock.test.js +0 -29
  117. package/dist/core/lock.test.js.map +0 -1
  118. package/dist/core/tool-executor.test.js +0 -186
  119. package/dist/core/tool-executor.test.js.map +0 -1
  120. package/dist/scoped-workspace/tests/exclude-workspace-dependency-sources-pruner.test.js +0 -49
  121. package/dist/scoped-workspace/tests/exclude-workspace-dependency-sources-pruner.test.js.map +0 -1
  122. package/dist/scoped-workspace/tests/scoped-workspace.test.js +0 -725
  123. package/dist/scoped-workspace/tests/scoped-workspace.test.js.map +0 -1
  124. package/dist/utils/docker.test.js +0 -272
  125. package/dist/utils/docker.test.js.map +0 -1
@@ -1,725 +0,0 @@
1
- import { afterAll, describe, it, globalExpect } from '../../LBCSKMFZ.js';
2
- import { createScopedWorkspace } from '../../HIFVOL6G.js';
3
- import { resolveWorkspaceDependencyGraph } from '../../HMZV72VO.js';
4
- import { copyWorkspaceSources, DEFAULT_SOURCE_COPY_PATTERNS, DEFAULT_SOURCE_COPY_EXCLUDE_PATTERNS } from '../../5SLPZRAL.js';
5
- import '../../XMRVBPGX.js';
6
- import '../../TJ5HTUVM.js';
7
- import { copyRootNodeModulesSymlinks, getPnpmVirtualStoreMount } from '../../5PX53N66.js';
8
- import '../../CYP6J4VH.js';
9
- import '../../N3I7SNFG.js';
10
- import { init_esm_shims, __name } from '../../JWJXCZMP.js';
11
- import { mkdtempSync, rmSync, mkdirSync, realpathSync, symlinkSync, existsSync, lstatSync, readlinkSync, writeFileSync } from 'fs';
12
- import { tmpdir } from 'os';
13
- import { join } from 'path';
14
-
15
- // src/scoped-workspace/tests/scoped-workspace.test.ts
16
- init_esm_shims();
17
- var TMP = mkdtempSync(join(tmpdir(), "lz-scoped-workspace-test-"));
18
- var GENERATED_SCOPED_ROOTS = [];
19
- var trackScopedRoot = /* @__PURE__ */ __name((scopedRoot) => {
20
- GENERATED_SCOPED_ROOTS.push(scopedRoot);
21
- return scopedRoot;
22
- }, "trackScopedRoot");
23
- var createPackage = /* @__PURE__ */ __name((dir, name, files = {}) => {
24
- mkdirSync(dir, {
25
- recursive: true
26
- });
27
- writeFileSync(join(dir, "package.json"), JSON.stringify({
28
- name,
29
- version: "0.0.0"
30
- }));
31
- for (const [file, content] of Object.entries(files)) {
32
- const filePath = join(dir, file);
33
- mkdirSync(join(filePath, ".."), {
34
- recursive: true
35
- });
36
- writeFileSync(filePath, content);
37
- }
38
- }, "createPackage");
39
- var createRepo = /* @__PURE__ */ __name((name) => {
40
- const repo = join(TMP, name);
41
- mkdirSync(repo, {
42
- recursive: true
43
- });
44
- writeFileSync(join(repo, "pnpm-workspace.yaml"), 'packages:\n - "**"\n');
45
- return repo;
46
- }, "createRepo");
47
- var writeLockfile = /* @__PURE__ */ __name((repo, body) => {
48
- writeFileSync(join(repo, "pnpm-lock.yaml"), [
49
- "lockfileVersion: '9.0'",
50
- "",
51
- "settings:",
52
- " autoInstallPeers: true",
53
- "",
54
- "importers:",
55
- body.trimEnd(),
56
- "",
57
- "packages:",
58
- ""
59
- ].join("\n"));
60
- }, "writeLockfile");
61
- afterAll(() => {
62
- rmSync(TMP, {
63
- recursive: true,
64
- force: true
65
- });
66
- for (const scopedRoot of GENERATED_SCOPED_ROOTS) {
67
- rmSync(scopedRoot, {
68
- recursive: true,
69
- force: true
70
- });
71
- }
72
- });
73
- describe(resolveWorkspaceDependencyGraph, () => {
74
- it("follows transitive workspace link deps", async () => {
75
- const repo = createRepo("dependency-graph");
76
- const current = join(repo, "apps", "current");
77
- const depA = join(repo, "packages", "dep-a");
78
- const depB = join(repo, "packages", "dep-b");
79
- const tooling = join(repo, "tools", "vm-utils", "solana", "build-utils");
80
- createPackage(current, "@layerzerolabs/current");
81
- createPackage(depA, "@layerzerolabs/dep-a");
82
- createPackage(depB, "@layerzerolabs/dep-b");
83
- createPackage(tooling, "@layerzerolabs/build-utils-solana");
84
- writeLockfile(repo, `
85
- apps/current:
86
- dependencies:
87
- '@layerzerolabs/dep-a':
88
- specifier: workspace:*
89
- version: link:../../packages/dep-a
90
- '@layerzerolabs/build-utils-solana':
91
- specifier: workspace:*
92
- version: link:../../tools/vm-utils/solana/build-utils
93
-
94
- .:
95
- devDependencies:
96
- eslint:
97
- specifier: ^9.0.0
98
- version: 9.0.0
99
- '@layerzerolabs/dep-a':
100
- specifier: workspace:*
101
- version: link:packages/dep-a
102
- '@layerzerolabs/build-utils-solana':
103
- specifier: workspace:*
104
- version: link:tools/vm-utils/solana/build-utils
105
-
106
- packages/dep-a:
107
- dependencies:
108
- eslint:
109
- specifier: ^9.0.0
110
- version: 9.0.0
111
- '@layerzerolabs/dep-b':
112
- specifier: workspace:*
113
- version: link:../dep-b
114
-
115
- packages/dep-b:
116
- dependencies:
117
- '@layerzerolabs/dep-a':
118
- specifier: workspace:*
119
- version: link:../dep-a
120
-
121
- tools/vm-utils/solana/build-utils:
122
- devDependencies: {}
123
- `);
124
- const dependencyGraph = await resolveWorkspaceDependencyGraph({
125
- cwd: current,
126
- repoRoot: repo
127
- });
128
- const includedRelativePaths = dependencyGraph.includedWorkspaceDependencies.map((dependency) => dependency.relativePath);
129
- globalExpect(includedRelativePaths).toHaveLength(3);
130
- globalExpect(includedRelativePaths).toEqual(globalExpect.arrayContaining([
131
- "packages/dep-a",
132
- "packages/dep-b",
133
- "tools/vm-utils/solana/build-utils"
134
- ]));
135
- globalExpect(dependencyGraph.rootNodeModulesDependencyNames).toHaveLength(3);
136
- globalExpect(dependencyGraph.rootNodeModulesDependencyNames).toEqual(globalExpect.arrayContaining([
137
- "@layerzerolabs/build-utils-solana",
138
- "@layerzerolabs/dep-a",
139
- "eslint"
140
- ]));
141
- });
142
- it("resolves nested command directories to their ancestor package importer", async () => {
143
- const repo = createRepo("nested-current");
144
- const current = join(repo, "packages", "onesig", "onesig-starknet");
145
- const contracts = join(current, "contracts");
146
- const dep = join(repo, "packages", "protocol-starknet-v2");
147
- createPackage(current, "@layerzerolabs/onesig-starknet", {
148
- "contracts/Scarb.toml": '[package]\nname = "onesig"\n'
149
- });
150
- createPackage(dep, "@layerzerolabs/protocol-starknet-v2");
151
- mkdirSync(contracts, {
152
- recursive: true
153
- });
154
- writeLockfile(repo, `
155
- packages/onesig/onesig-starknet:
156
- devDependencies:
157
- '@layerzerolabs/protocol-starknet-v2':
158
- specifier: workspace:*
159
- version: link:../../protocol-starknet-v2
160
-
161
- .:
162
- devDependencies:
163
- '@layerzerolabs/protocol-starknet-v2':
164
- specifier: workspace:*
165
- version: link:packages/protocol-starknet-v2
166
-
167
- packages/protocol-starknet-v2:
168
- devDependencies: {}
169
- `);
170
- const dependencyGraph = await resolveWorkspaceDependencyGraph({
171
- cwd: contracts,
172
- repoRoot: repo
173
- });
174
- globalExpect(dependencyGraph.packageRoot).toBe(realpathSync(current));
175
- globalExpect(dependencyGraph.packageRelativePath).toBe("packages/onesig/onesig-starknet");
176
- globalExpect(dependencyGraph.includedWorkspaceDependencies.map((dependency) => dependency.relativePath)).toEqual([
177
- "packages/protocol-starknet-v2"
178
- ]);
179
- globalExpect(dependencyGraph.rootNodeModulesDependencyNames).toEqual([
180
- "@layerzerolabs/protocol-starknet-v2"
181
- ]);
182
- });
183
- it("invalidates cached lockfile importers when the lockfile changes", async () => {
184
- const repo = createRepo("dependency-graph-cache-invalidation");
185
- const current = join(repo, "apps", "current");
186
- const depA = join(repo, "packages", "dep-a");
187
- const depB = join(repo, "packages", "dep-b");
188
- createPackage(current, "@layerzerolabs/current");
189
- createPackage(depA, "@layerzerolabs/dep-a");
190
- createPackage(depB, "@layerzerolabs/dep-b");
191
- writeLockfile(repo, `
192
- apps/current:
193
- dependencies:
194
- '@layerzerolabs/dep-a':
195
- specifier: workspace:*
196
- version: link:../../packages/dep-a
197
-
198
- packages/dep-a:
199
- devDependencies: {}
200
- `);
201
- const firstGraph = await resolveWorkspaceDependencyGraph({
202
- cwd: current,
203
- repoRoot: repo
204
- });
205
- writeLockfile(repo, `
206
- apps/current:
207
- dependencies:
208
- '@layerzerolabs/dep-b':
209
- specifier: workspace:*
210
- version: link:../../packages/dep-b
211
-
212
- packages/dep-b:
213
- devDependencies: {}
214
-
215
- # Keep the rewritten lockfile size different so mtime+size invalidation is exercised.
216
- `);
217
- const secondGraph = await resolveWorkspaceDependencyGraph({
218
- cwd: current,
219
- repoRoot: repo
220
- });
221
- globalExpect(firstGraph.includedWorkspaceDependencies.map((dependency) => dependency.relativePath)).toEqual([
222
- "packages/dep-a"
223
- ]);
224
- globalExpect(secondGraph.includedWorkspaceDependencies.map((dependency) => dependency.relativePath)).toEqual([
225
- "packages/dep-b"
226
- ]);
227
- });
228
- });
229
- describe(copyWorkspaceSources, () => {
230
- it("copies dependency sources and dist outputs while excluding the current package and heavyweight generated output directories", async () => {
231
- const repo = createRepo("workspace-source-copy");
232
- const current = join(repo, "apps", "current");
233
- const dep = join(repo, "packages", "dep");
234
- createPackage(current, "@layerzerolabs/current", {
235
- "src/index.ts": "export const current = true",
236
- "target/deploy/current.so": "compiled"
237
- });
238
- createPackage(dep, "@layerzerolabs/dep", {
239
- "src/index.ts": "export const dep = true",
240
- "dependencies/generated-crate/src/lib.rs": "pub fn generated() {}",
241
- "target/deploy/program.so": "compiled",
242
- "node_modules/pkg/index.js": "module.exports = {}",
243
- "dist/index.js": "module.exports = {}",
244
- "artifacts/contracts/Contract.json": "{}"
245
- });
246
- symlinkSync("../../../../node_modules/.pnpm/linked-pkg@1.0.0/node_modules/linked-pkg", join(dep, "node_modules", "linked-pkg"));
247
- symlinkSync("src/index.ts", join(dep, "src-link.ts"));
248
- const dependencyGraph = {
249
- repoRoot: repo,
250
- packageRoot: current,
251
- packageRelativePath: "apps/current",
252
- rootNodeModulesDependencyNames: [],
253
- includedWorkspaceDependencies: [
254
- {
255
- name: "@layerzerolabs/dep",
256
- importerRelativePath: "apps/current",
257
- relativePath: "packages/dep",
258
- absolutePath: dep,
259
- version: "link:../../packages/dep"
260
- }
261
- ]
262
- };
263
- const result = await copyWorkspaceSources({
264
- dependencyGraph
265
- });
266
- const scopedRoot = trackScopedRoot(result.scopedRoot);
267
- globalExpect(result.copiedWorkspaceDependencies).toHaveLength(1);
268
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "src", "index.ts"))).toBe(true);
269
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "dependencies"))).toBe(false);
270
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "target"))).toBe(false);
271
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "node_modules"))).toBe(true);
272
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "node_modules", "pkg", "index.js"))).toBe(false);
273
- globalExpect(lstatSync(join(scopedRoot, "packages", "dep", "node_modules", "linked-pkg")).isSymbolicLink()).toBe(true);
274
- globalExpect(readlinkSync(join(scopedRoot, "packages", "dep", "node_modules", "linked-pkg"))).toBe("../../../../node_modules/.pnpm/linked-pkg@1.0.0/node_modules/linked-pkg");
275
- globalExpect(lstatSync(join(scopedRoot, "packages", "dep", "src-link.ts")).isSymbolicLink()).toBe(true);
276
- globalExpect(readlinkSync(join(scopedRoot, "packages", "dep", "src-link.ts"))).toBe("src/index.ts");
277
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "dist", "index.js"))).toBe(true);
278
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "artifacts"))).toBe(false);
279
- globalExpect(existsSync(join(scopedRoot, "apps", "current"))).toBe(false);
280
- });
281
- it("applies glob-compatible scoped-workspace prune patterns to dependency source copies", async () => {
282
- const repo = createRepo("workspace-source-pattern-copy");
283
- const current = join(repo, "apps", "current");
284
- const dep = join(repo, "packages", "dep");
285
- createPackage(current, "@layerzerolabs/current");
286
- createPackage(dep, "@layerzerolabs/dep", {
287
- "src/index.ts": "export const dep = true",
288
- "README.md": "# dep",
289
- LICENSE: "MIT",
290
- "sdk/client.ts": "export const sdk = true",
291
- "scripts/dev.ts": "export const dev = true",
292
- "tests/fixture.ts": "export const secret = true",
293
- "node_modules/pkg/index.js": "module.exports = {}",
294
- "programs/demo/src/lib.rs": "pub fn process() {}",
295
- "programs/demo/tests/integration.rs": "#[test] fn it_works() {}",
296
- "target/deploy/program.so": "compiled"
297
- });
298
- symlinkSync("../src/index.ts", join(dep, "node_modules", "dep-link"));
299
- const dependencyGraph = {
300
- repoRoot: repo,
301
- packageRoot: current,
302
- packageRelativePath: "apps/current",
303
- rootNodeModulesDependencyNames: [],
304
- includedWorkspaceDependencies: [
305
- {
306
- name: "@layerzerolabs/dep",
307
- importerRelativePath: "apps/current",
308
- relativePath: "packages/dep",
309
- absolutePath: dep,
310
- version: "link:../../packages/dep"
311
- }
312
- ]
313
- };
314
- const result = await copyWorkspaceSources({
315
- dependencyGraph,
316
- prunePatterns: [
317
- ...DEFAULT_SOURCE_COPY_PATTERNS,
318
- "!**/*.md",
319
- "!**/LICENSE",
320
- "!sdk/**",
321
- "!scripts/**",
322
- "!tests/**",
323
- "!programs/**/tests/**",
324
- ...DEFAULT_SOURCE_COPY_EXCLUDE_PATTERNS
325
- ]
326
- });
327
- const scopedRoot = trackScopedRoot(result.scopedRoot);
328
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "src", "index.ts"))).toBe(true);
329
- globalExpect(existsSync(join(scopedRoot, "apps", "current"))).toBe(false);
330
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "programs", "demo", "src", "lib.rs"))).toBe(true);
331
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "README.md"))).toBe(false);
332
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "LICENSE"))).toBe(false);
333
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "sdk"))).toBe(false);
334
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "scripts"))).toBe(false);
335
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "tests"))).toBe(false);
336
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "programs", "demo", "tests"))).toBe(false);
337
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "node_modules", "pkg"))).toBe(false);
338
- globalExpect(lstatSync(join(scopedRoot, "packages", "dep", "node_modules", "dep-link")).isSymbolicLink()).toBe(true);
339
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "target"))).toBe(false);
340
- });
341
- it("tolerates identical package-local symlinks copied twice (nested workspace package layout)", async () => {
342
- const repo = createRepo("workspace-source-duplicate-symlink");
343
- const current = join(repo, "apps", "current");
344
- const parent = join(repo, "apps", "parent");
345
- const nested = join(parent, "nested-pkg");
346
- createPackage(current, "@layerzerolabs/current");
347
- createPackage(parent, "@layerzerolabs/parent", {
348
- "src/index.ts": "export const parent = true"
349
- });
350
- createPackage(nested, "@layerzerolabs/nested", {
351
- "src/index.ts": "export const nested = true"
352
- });
353
- mkdirSync(join(nested, "node_modules", "@layerzerolabs"), {
354
- recursive: true
355
- });
356
- symlinkSync("../../../../../../tools/vm-tooling/vm-tooling-stellar", join(nested, "node_modules", "@layerzerolabs", "vm-tooling-stellar"));
357
- mkdirSync(join(parent, "node_modules", "@layerzerolabs"), {
358
- recursive: true
359
- });
360
- symlinkSync("../../../../tools/vm-tooling/vm-tooling-stellar", join(parent, "node_modules", "@layerzerolabs", "vm-tooling-stellar"));
361
- const dependencyGraph = {
362
- repoRoot: repo,
363
- packageRoot: current,
364
- packageRelativePath: "apps/current",
365
- rootNodeModulesDependencyNames: [],
366
- includedWorkspaceDependencies: [
367
- {
368
- name: "@layerzerolabs/parent",
369
- importerRelativePath: "apps/current",
370
- relativePath: "apps/parent",
371
- absolutePath: parent,
372
- version: "link:../parent"
373
- },
374
- {
375
- name: "@layerzerolabs/nested",
376
- importerRelativePath: "apps/parent",
377
- relativePath: "apps/parent/nested-pkg",
378
- absolutePath: nested,
379
- version: "link:./nested-pkg"
380
- }
381
- ]
382
- };
383
- const result = await copyWorkspaceSources({
384
- dependencyGraph
385
- });
386
- const scopedRoot = trackScopedRoot(result.scopedRoot);
387
- const nestedLink = join(scopedRoot, "apps", "parent", "nested-pkg", "node_modules", "@layerzerolabs", "vm-tooling-stellar");
388
- globalExpect(lstatSync(nestedLink).isSymbolicLink()).toBe(true);
389
- globalExpect(readlinkSync(nestedLink)).toBe("../../../../../../tools/vm-tooling/vm-tooling-stellar");
390
- });
391
- it("falls back to default patterns when global prune patterns are empty", async () => {
392
- const repo = createRepo("workspace-source-package-pattern-copy");
393
- const current = join(repo, "apps", "current");
394
- const anchorDep = join(repo, "packages", "anchor-dep");
395
- const utilityDep = join(repo, "packages", "utility-dep");
396
- createPackage(current, "@layerzerolabs/current", {
397
- "src/index.ts": "export const current = true",
398
- "tests/secret.ts": "export const secret = true"
399
- });
400
- createPackage(anchorDep, "@layerzerolabs/anchor-dep", {
401
- "Anchor.toml": '[programs.localnet]\nanchor_dep = "11111111111111111111111111111111"',
402
- "programs/demo/Cargo.toml": '[package]\nname = "demo"',
403
- "programs/demo/src/lib.rs": "pub fn process() {}",
404
- "programs/demo/tests/integration.rs": "#[test] fn it_works() {}"
405
- });
406
- createPackage(utilityDep, "@layerzerolabs/utility-dep", {
407
- "src/index.ts": "export const utility = true"
408
- });
409
- const dependencyGraph = {
410
- repoRoot: repo,
411
- packageRoot: current,
412
- packageRelativePath: "apps/current",
413
- rootNodeModulesDependencyNames: [],
414
- includedWorkspaceDependencies: [
415
- {
416
- name: "@layerzerolabs/anchor-dep",
417
- importerRelativePath: "apps/current",
418
- relativePath: "packages/anchor-dep",
419
- absolutePath: anchorDep,
420
- version: "link:../../packages/anchor-dep"
421
- },
422
- {
423
- name: "@layerzerolabs/utility-dep",
424
- importerRelativePath: "apps/current",
425
- relativePath: "packages/utility-dep",
426
- absolutePath: utilityDep,
427
- version: "link:../../packages/utility-dep"
428
- }
429
- ]
430
- };
431
- const result = await copyWorkspaceSources({
432
- dependencyGraph,
433
- prunePatterns: [],
434
- packagePrunePatterns: {
435
- "apps/current": [
436
- "src/**"
437
- ],
438
- "packages/anchor-dep": [
439
- "Anchor.toml",
440
- "programs/*/Cargo.toml",
441
- "programs/*/src/**"
442
- ]
443
- }
444
- });
445
- const scopedRoot = trackScopedRoot(result.scopedRoot);
446
- globalExpect(existsSync(join(scopedRoot, "apps", "current"))).toBe(false);
447
- globalExpect(existsSync(join(scopedRoot, "packages", "anchor-dep", "Anchor.toml"))).toBe(true);
448
- globalExpect(existsSync(join(scopedRoot, "packages", "anchor-dep", "programs", "demo", "Cargo.toml"))).toBe(true);
449
- globalExpect(existsSync(join(scopedRoot, "packages", "anchor-dep", "programs", "demo", "src", "lib.rs"))).toBe(true);
450
- globalExpect(existsSync(join(scopedRoot, "packages", "anchor-dep", "programs", "demo", "tests"))).toBe(false);
451
- globalExpect(existsSync(join(scopedRoot, "packages", "utility-dep", "src", "index.ts"))).toBe(true);
452
- });
453
- it("copies pruner-selected build outputs under otherwise-excluded directories", async () => {
454
- const repo = createRepo("workspace-source-build-output-copy");
455
- const current = join(repo, "apps", "current");
456
- const dep = join(repo, "packages", "dep");
457
- createPackage(current, "@layerzerolabs/current");
458
- createPackage(dep, "@layerzerolabs/dep", {
459
- "src/index.ts": "export const dep = true",
460
- "target/wasm32v1-none/release/dep.wasm": "wasm",
461
- "target/wasm32v1-none/release/dep.d": "deps"
462
- });
463
- const dependencyGraph = {
464
- repoRoot: repo,
465
- packageRoot: current,
466
- packageRelativePath: "apps/current",
467
- rootNodeModulesDependencyNames: [],
468
- includedWorkspaceDependencies: [
469
- {
470
- name: "@layerzerolabs/dep",
471
- importerRelativePath: "apps/current",
472
- relativePath: "packages/dep",
473
- absolutePath: dep,
474
- version: "link:../../packages/dep"
475
- }
476
- ]
477
- };
478
- const result = await copyWorkspaceSources({
479
- dependencyGraph,
480
- packagePrunePatterns: {
481
- "packages/dep": [
482
- "target/wasm32v1-none/release/*.d",
483
- "target/wasm32v1-none/release/*.wasm"
484
- ]
485
- }
486
- });
487
- const scopedRoot = trackScopedRoot(result.scopedRoot);
488
- const releaseDir = join(scopedRoot, "packages", "dep", "target", "wasm32v1-none", "release");
489
- globalExpect(existsSync(join(releaseDir, "dep.wasm"))).toBe(true);
490
- globalExpect(existsSync(join(releaseDir, "dep.d"))).toBe(true);
491
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "src"))).toBe(false);
492
- });
493
- });
494
- describe(createScopedWorkspace, () => {
495
- it("uses the unpruned source-copy fallback when no pruner is configured", async () => {
496
- const repo = createRepo("scoped-workspace-fallback");
497
- const current = join(repo, "apps", "current");
498
- const dep = join(repo, "packages", "dep");
499
- mkdirSync(join(repo, "node_modules", ".pnpm"), {
500
- recursive: true
501
- });
502
- createPackage(current, "@layerzerolabs/current", {
503
- "src/index.ts": "export const current = true"
504
- });
505
- createPackage(dep, "@layerzerolabs/dep", {
506
- "src/index.ts": "export const dep = true"
507
- });
508
- writeLockfile(repo, `
509
- apps/current:
510
- dependencies:
511
- '@layerzerolabs/dep':
512
- specifier: workspace:*
513
- version: link:../../packages/dep
514
-
515
- packages/dep:
516
- devDependencies: {}
517
- `);
518
- const result = await createScopedWorkspace({
519
- cwd: current
520
- });
521
- const scopedRoot = trackScopedRoot(result.scopedRoot);
522
- globalExpect(result.prunerName).toBeUndefined();
523
- globalExpect(result.diagnostics).toEqual([
524
- "No scoped-workspace pruner configured; using unpruned package-level source copy fallback."
525
- ]);
526
- globalExpect(result.copiedWorkspacePackageCount).toBe(1);
527
- globalExpect(result.copiedWorkspacePackagePaths).toEqual({
528
- "packages/dep": realpathSync(dep)
529
- });
530
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "src", "index.ts"))).toBe(true);
531
- globalExpect(existsSync(join(scopedRoot, "apps", "current"))).toBe(false);
532
- });
533
- it("uses a configured pruner to filter dependency package copies", async () => {
534
- const repo = createRepo("scoped-workspace-pruner");
535
- const current = join(repo, "apps", "current");
536
- const dep = join(repo, "packages", "dep");
537
- const inputs = [];
538
- const pruner = {
539
- name: "test-pruner",
540
- createPrunePlan: /* @__PURE__ */ __name(async (input) => {
541
- inputs.push(input);
542
- return {
543
- patterns: [],
544
- packagePatterns: {
545
- "apps/current": [
546
- "src/**"
547
- ],
548
- "packages/dep": [
549
- ...DEFAULT_SOURCE_COPY_PATTERNS,
550
- "!tests/**"
551
- ]
552
- },
553
- diagnostics: [
554
- "planned current package inputs"
555
- ]
556
- };
557
- }, "createPrunePlan")
558
- };
559
- mkdirSync(join(repo, "node_modules", ".pnpm"), {
560
- recursive: true
561
- });
562
- createPackage(current, "@layerzerolabs/current", {
563
- "src/index.ts": "export const current = true",
564
- "tests/secret.ts": "export const secret = true"
565
- });
566
- createPackage(dep, "@layerzerolabs/dep", {
567
- "src/index.ts": "export const dep = true",
568
- "tests/fixture.ts": "export const secret = true"
569
- });
570
- writeLockfile(repo, `
571
- apps/current:
572
- dependencies:
573
- '@layerzerolabs/dep':
574
- specifier: workspace:*
575
- version: link:../../packages/dep
576
-
577
- packages/dep:
578
- devDependencies: {}
579
- `);
580
- const result = await createScopedWorkspace({
581
- cwd: current,
582
- pruner
583
- });
584
- const scopedRoot = trackScopedRoot(result.scopedRoot);
585
- globalExpect(inputs).toHaveLength(1);
586
- const firstInput = inputs[0];
587
- globalExpect(firstInput).toMatchObject({
588
- repoRoot: realpathSync(repo),
589
- packageRoot: realpathSync(current),
590
- packageRelativePath: "apps/current",
591
- cwd: current
592
- });
593
- globalExpect(firstInput.dependencyGraph.includedWorkspaceDependencies.map(({ relativePath }) => relativePath)).toEqual([
594
- "packages/dep"
595
- ]);
596
- globalExpect(result.prunerName).toBe("test-pruner");
597
- globalExpect(result.diagnostics).toEqual([
598
- "planned current package inputs"
599
- ]);
600
- globalExpect(result.copiedWorkspacePackageCount).toBe(1);
601
- globalExpect(result.copiedWorkspacePackagePaths).toEqual({
602
- "packages/dep": realpathSync(dep)
603
- });
604
- globalExpect(existsSync(join(scopedRoot, "apps", "current"))).toBe(false);
605
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "src", "index.ts"))).toBe(true);
606
- globalExpect(existsSync(join(scopedRoot, "packages", "dep", "tests"))).toBe(false);
607
- });
608
- it("uses default dependency copies for pruned packages without package-specific patterns", async () => {
609
- const repo = createRepo("scoped-workspace-empty-global-patterns");
610
- const current = join(repo, "apps", "current");
611
- const prunedDep = join(repo, "packages", "pruned-dep");
612
- const defaultDep = join(repo, "packages", "default-dep");
613
- const pruner = {
614
- name: "test-pruner",
615
- createPrunePlan: /* @__PURE__ */ __name(async () => ({
616
- patterns: [],
617
- packagePatterns: {
618
- "packages/pruned-dep": [
619
- "src/**"
620
- ]
621
- }
622
- }), "createPrunePlan")
623
- };
624
- mkdirSync(join(repo, "node_modules", ".pnpm"), {
625
- recursive: true
626
- });
627
- createPackage(current, "@layerzerolabs/current", {
628
- "src/index.ts": "export const current = true"
629
- });
630
- createPackage(prunedDep, "@layerzerolabs/pruned-dep", {
631
- "src/index.ts": "export const pruned = true",
632
- "tests/fixture.ts": "export const fixture = true"
633
- });
634
- createPackage(defaultDep, "@layerzerolabs/default-dep", {
635
- "src/index.ts": "export const defaultDep = true"
636
- });
637
- writeLockfile(repo, `
638
- apps/current:
639
- dependencies:
640
- '@layerzerolabs/pruned-dep':
641
- specifier: workspace:*
642
- version: link:../../packages/pruned-dep
643
- '@layerzerolabs/default-dep':
644
- specifier: workspace:*
645
- version: link:../../packages/default-dep
646
-
647
- packages/default-dep:
648
- devDependencies: {}
649
-
650
- packages/pruned-dep:
651
- devDependencies: {}
652
- `);
653
- const result = await createScopedWorkspace({
654
- cwd: current,
655
- pruner
656
- });
657
- const scopedRoot = trackScopedRoot(result.scopedRoot);
658
- globalExpect(existsSync(join(scopedRoot, "packages", "pruned-dep", "src", "index.ts"))).toBe(true);
659
- globalExpect(existsSync(join(scopedRoot, "packages", "pruned-dep", "tests"))).toBe(false);
660
- globalExpect(existsSync(join(scopedRoot, "packages", "default-dep", "src", "index.ts"))).toBe(true);
661
- });
662
- });
663
- describe(copyRootNodeModulesSymlinks, () => {
664
- it("copies only selected root dependency symlinks without copying dependency contents", async () => {
665
- const repo = createRepo("node-modules-symlinks");
666
- const scopedRoot = join(TMP, "scoped-node-modules-symlinks");
667
- const dep = join(repo, "apps", "oapp-app", "contracts", "solana");
668
- createPackage(dep, "@layerzerolabs/oapp-solana-contracts");
669
- mkdirSync(join(repo, "node_modules", ".pnpm"), {
670
- recursive: true
671
- });
672
- mkdirSync(join(repo, "node_modules", ".bin"), {
673
- recursive: true
674
- });
675
- mkdirSync(join(repo, "node_modules", "@types"), {
676
- recursive: true
677
- });
678
- mkdirSync(join(repo, "node_modules", "@layerzerolabs"), {
679
- recursive: true
680
- });
681
- writeFileSync(join(repo, "node_modules", ".bin", "real-file"), "do not copy");
682
- mkdirSync(join(scopedRoot, "apps", "oapp-app", "contracts", "solana"), {
683
- recursive: true
684
- });
685
- symlinkSync(".pnpm/eslint@1.0.0/node_modules/eslint", join(repo, "node_modules", "eslint"));
686
- symlinkSync("../.pnpm/typescript@1.0.0/node_modules/typescript/bin/tsc", join(repo, "node_modules", ".bin", "tsc"));
687
- symlinkSync("../.pnpm/@types+node@1.0.0/node_modules/@types/node", join(repo, "node_modules", "@types", "node"));
688
- symlinkSync("../../apps/oapp-app/contracts/solana", join(repo, "node_modules", "@layerzerolabs", "oapp-solana-contracts"));
689
- symlinkSync("../..", join(repo, "node_modules", "@layerzerolabs", "whole-repo-link"));
690
- const result = await copyRootNodeModulesSymlinks({
691
- repoRoot: repo,
692
- scopedRoot,
693
- dependencyNames: [
694
- "@layerzerolabs/oapp-solana-contracts",
695
- "@types/node",
696
- "eslint"
697
- ]
698
- });
699
- globalExpect(result.nodeModulesPath).toBe(join(scopedRoot, "node_modules"));
700
- globalExpect(result.symlinks).toEqual([
701
- "@layerzerolabs/oapp-solana-contracts",
702
- "@types/node",
703
- "eslint"
704
- ]);
705
- globalExpect(readlinkSync(join(scopedRoot, "node_modules", "eslint"))).toBe(".pnpm/eslint@1.0.0/node_modules/eslint");
706
- globalExpect(lstatSync(join(scopedRoot, "node_modules", ".pnpm")).isDirectory()).toBe(true);
707
- globalExpect(existsSync(join(scopedRoot, "node_modules", ".bin", "real-file"))).toBe(false);
708
- globalExpect(existsSync(join(scopedRoot, "node_modules", ".bin", "tsc"))).toBe(false);
709
- globalExpect(lstatSync(join(scopedRoot, "node_modules", "@types", "node")).isSymbolicLink()).toBe(true);
710
- globalExpect(lstatSync(join(scopedRoot, "node_modules", "@layerzerolabs", "oapp-solana-contracts")).isSymbolicLink()).toBe(true);
711
- globalExpect(readlinkSync(join(scopedRoot, "node_modules", "@layerzerolabs", "oapp-solana-contracts"))).toBe("../../apps/oapp-app/contracts/solana");
712
- globalExpect(existsSync(join(scopedRoot, "node_modules", "@layerzerolabs", "whole-repo-link"))).toBe(false);
713
- });
714
- });
715
- describe(getPnpmVirtualStoreMount, () => {
716
- it("describes a read-only .pnpm mount without requiring root node_modules copy", () => {
717
- globalExpect(getPnpmVirtualStoreMount("/repo")).toEqual({
718
- hostPath: "/repo/node_modules/.pnpm",
719
- containerPath: "/workspace/node_modules/.pnpm",
720
- readOnly: true
721
- });
722
- });
723
- });
724
- //# sourceMappingURL=scoped-workspace.test.js.map
725
- //# sourceMappingURL=scoped-workspace.test.js.map