@layerzerolabs/vm-tooling 1.2.30 → 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.
- package/dist/{HIFVOL6G.js → 4PZQU6GV.js} +7 -9
- package/dist/4PZQU6GV.js.map +1 -0
- package/dist/{P52CW6DK.js → D3SKWSHN.js} +3 -5
- package/dist/D3SKWSHN.js.map +1 -0
- package/dist/{5SLPZRAL.js → D5ZLPMIL.js} +5 -7
- package/dist/D5ZLPMIL.js.map +1 -0
- package/dist/EKUFNO5X.js +3 -0
- package/dist/EKUFNO5X.js.map +1 -0
- package/dist/{XOVO3JKY.js → ELRX6BWW.js} +3 -5
- package/dist/ELRX6BWW.js.map +1 -0
- package/dist/{GNAXYUMP.js → FZ4WTZV4.js} +5 -6
- package/dist/FZ4WTZV4.js.map +1 -0
- package/dist/{CYP6J4VH.js → GSL2M6U4.js} +4 -6
- package/dist/GSL2M6U4.js.map +1 -0
- package/dist/{5PX53N66.js → GU2VLUXE.js} +3 -5
- package/dist/GU2VLUXE.js.map +1 -0
- package/dist/{VB2BOPPZ.js → IHHBJ2SZ.js} +3 -5
- package/dist/IHHBJ2SZ.js.map +1 -0
- package/dist/{H55JBB6F.js → IUE6WGKT.js} +12 -14
- package/dist/IUE6WGKT.js.map +1 -0
- package/dist/{HMZV72VO.js → J7BNVFS2.js} +5 -7
- package/dist/J7BNVFS2.js.map +1 -0
- package/dist/{SWKTHNWT.js → KBDBSTDG.js} +4 -6
- package/dist/KBDBSTDG.js.map +1 -0
- package/dist/{BVTEQOCW.js → L53SDSQA.js} +4 -6
- package/dist/L53SDSQA.js.map +1 -0
- package/dist/{GBCVVX6B.js → NCFTCSCO.js} +8 -10
- package/dist/NCFTCSCO.js.map +1 -0
- package/dist/{IGFQKKDO.js → UCR2ZBRF.js} +5 -6
- package/dist/UCR2ZBRF.js.map +1 -0
- package/dist/{TJ5HTUVM.js → UZOGNQDH.js} +3 -4
- package/dist/UZOGNQDH.js.map +1 -0
- package/dist/{XKW5QM54.js → V43YBQSF.js} +4 -6
- package/dist/V43YBQSF.js.map +1 -0
- package/dist/{6M3XVMYE.js → VAVK6AV3.js} +5 -7
- package/dist/VAVK6AV3.js.map +1 -0
- package/dist/{N3I7SNFG.js → VMHQSHJN.js} +3 -5
- package/dist/VMHQSHJN.js.map +1 -0
- package/dist/VUOMXK5T.js +6 -0
- package/dist/VUOMXK5T.js.map +1 -0
- package/dist/{XMRVBPGX.js → WP67XJRG.js} +3 -5
- package/dist/WP67XJRG.js.map +1 -0
- package/dist/{ADZG6QSC.js → YT4XAH7H.js} +3 -4
- package/dist/YT4XAH7H.js.map +1 -0
- package/dist/{H4RUI4N2.js → YZCMSN63.js} +5 -7
- package/dist/YZCMSN63.js.map +1 -0
- package/dist/ZEW74YLA.js +3 -0
- package/dist/ZEW74YLA.js.map +1 -0
- package/dist/{RRKFUBOS.js → ZTUNQIFK.js} +5 -7
- package/dist/ZTUNQIFK.js.map +1 -0
- package/dist/cli.js +22 -22
- package/dist/config.js +3 -3
- package/dist/context.js +0 -3
- package/dist/context.js.map +1 -1
- package/dist/core/index.js +18 -18
- package/dist/core/local-executor.js +2 -2
- package/dist/core/lock.js +2 -2
- package/dist/core/tool-executor.js +17 -17
- package/dist/core/version-resolver.js +4 -4
- package/dist/display/formatters.js +4 -4
- package/dist/display/index.js +6 -6
- package/dist/display/version-display.js +5 -5
- package/dist/environment.js +2 -2
- package/dist/github/index.js +7 -7
- package/dist/github/matrix.js +6 -6
- package/dist/index.js +25 -28
- package/dist/index.js.map +1 -1
- package/dist/scoped-workspace/exclude-workspace-dependency-sources-pruner.js +2 -2
- package/dist/scoped-workspace/index.js +9 -9
- package/dist/scoped-workspace/node-modules.js +2 -2
- package/dist/scoped-workspace/types.js +0 -3
- package/dist/scoped-workspace/types.js.map +1 -1
- package/dist/scoped-workspace/workspace-dependency-graph.js +5 -5
- package/dist/scoped-workspace/workspace-source-copy.js +4 -4
- package/dist/test.js +6 -6
- package/dist/utils/docker.js +5 -5
- package/dist/utils/error.js +2 -2
- package/dist/utils/finder.js +2 -2
- package/dist/utils/fs.js +2 -2
- package/dist/utils.js +3 -3
- package/package.json +6 -7
- package/dist/2GK3MDLX.js +0 -1341
- package/dist/2GK3MDLX.js.map +0 -1
- package/dist/5PX53N66.js.map +0 -1
- package/dist/5SLPZRAL.js.map +0 -1
- package/dist/6M3XVMYE.js.map +0 -1
- package/dist/ADZG6QSC.js.map +0 -1
- package/dist/BJVTHJLE.js +0 -6
- package/dist/BJVTHJLE.js.map +0 -1
- package/dist/BVTEQOCW.js.map +0 -1
- package/dist/CYP6J4VH.js.map +0 -1
- package/dist/GBCVVX6B.js.map +0 -1
- package/dist/GNAXYUMP.js.map +0 -1
- package/dist/H4RUI4N2.js.map +0 -1
- package/dist/H55JBB6F.js.map +0 -1
- package/dist/HIFVOL6G.js.map +0 -1
- package/dist/HMZV72VO.js.map +0 -1
- package/dist/IGFQKKDO.js.map +0 -1
- package/dist/JWJXCZMP.js +0 -40
- package/dist/JWJXCZMP.js.map +0 -1
- package/dist/LBCSKMFZ.js +0 -18392
- package/dist/LBCSKMFZ.js.map +0 -1
- package/dist/N3I7SNFG.js.map +0 -1
- package/dist/P52CW6DK.js.map +0 -1
- package/dist/RRKFUBOS.js.map +0 -1
- package/dist/SWKTHNWT.js.map +0 -1
- package/dist/TJ5HTUVM.js.map +0 -1
- package/dist/VB2BOPPZ.js.map +0 -1
- package/dist/XKW5QM54.js.map +0 -1
- package/dist/XMRVBPGX.js.map +0 -1
- package/dist/XOVO3JKY.js.map +0 -1
- package/dist/ZWMRQU7D.js +0 -6
- package/dist/ZWMRQU7D.js.map +0 -1
- package/dist/core/local-executor.test.js +0 -110
- package/dist/core/local-executor.test.js.map +0 -1
- package/dist/core/lock.test.js +0 -29
- package/dist/core/lock.test.js.map +0 -1
- package/dist/core/tool-executor.test.js +0 -186
- package/dist/core/tool-executor.test.js.map +0 -1
- package/dist/scoped-workspace/tests/exclude-workspace-dependency-sources-pruner.test.js +0 -49
- package/dist/scoped-workspace/tests/exclude-workspace-dependency-sources-pruner.test.js.map +0 -1
- package/dist/scoped-workspace/tests/scoped-workspace.test.js +0 -725
- package/dist/scoped-workspace/tests/scoped-workspace.test.js.map +0 -1
- package/dist/utils/docker.test.js +0 -272
- package/dist/utils/docker.test.js.map +0 -1
package/dist/N3I7SNFG.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/finder.ts"],"names":["findToolByName","tools","toolName","tool","find","name","Error","getImageName","basename","getToolDefaultVersion","context","combination","versionCombinations","version","findToolVersionsForCombination","console","warn","images","Object","fromEntries","entries","map","imageId","versions","getToolSupportedVersions","Set","filter","isString","sort"],"mappings":";;;;AAAA,cAAA,EAAA;AAMO,IAAMA,cAAAA,mBAAiB,MAAA,CAAA,CAC1B,EAAEC,KAAAA,IACFC,QAAAA,KAAAA;AAEA,EAAA,MAAMC,OAAOF,KAAAA,CAAMG,IAAAA,CAAK,CAACD,KAAAA,KAASA,KAAAA,CAAKE,SAASH,QAAAA,CAAAA;AAEhD,EAAA,IAAI,CAACC,IAAAA,EAAM;AACP,IAAA,MAAM,IAAIG,KAAAA,CAAM,CAAA,MAAA,EAASJ,QAAAA,CAAAA,WAAAA,CAAqB,CAAA;AAClD,EAAA;AAEA,EAAA,OAAOC,IAAAA;AACX,CAAA,EAX8B,gBAAA;AAavB,IAAMI,YAAAA,mBAAe,MAAA,CAAA,CAACC,QAAAA,KAA6B,CAAA,EAAGA,QAAAA,CAAAA,QAAAA,CAAAA,EAAjC,cAAA;AAKrB,IAAMC,qBAAAA,mBAAwB,MAAA,CAAA,CACjCC,OAAAA,EACAR,QAAAA,KAAAA;AAEA,EAAA,MAAMS,WAAAA,GAAcD,OAAAA,CAAQE,mBAAAA,CAAoB,CAAA,CAAA;AAEhD,EAAA,IAAI,CAACD,WAAAA,EAAa;AACd,IAAA,OAAO,IAAA;AACX,EAAA;AAEA,EAAA,MAAME,OAAAA,GAAUC,8BAAAA,CAA+BJ,OAAAA,EAASC,WAAAA,EAAaT,QAAAA,CAAAA;AAErE,EAAA,IAAI,CAACW,OAAAA,EAAS;AACVE,IAAAA,OAAAA,CAAQC,IAAAA,CAAK,CAAA,mCAAA,EAAsCd,QAAAA,CAAAA,WAAAA,CAAqB,CAAA;AACxE,IAAA,OAAO,IAAA;AACX,EAAA;AAEA,EAAA,OAAOW,OAAAA;AACX,CAAA,EAlBqC,uBAAA;AAoB9B,IAAMC,iDAAiC,MAAA,CAAA,CAC1C,EAAEG,QAAM,EACRN,WAAAA,KAEAO,OAAOC,WAAAA,CACHD,MAAAA,CAAOE,OAAAA,CAAQT,WAAAA,CAAYM,MAAM,CAAA,CAAEI,GAAAA,CAAI,CAAC,CAAClB,IAAAA,EAAMmB,OAAAA,CAAAA,KAAQ;AACnD,EAAA,MAAMT,OAAAA,GAAUI,MAAAA,CAAOK,OAAAA,CAAAA,CAASC,SAASpB,IAAAA,CAAAA;AAEzC,EAAA,IAAI,CAACU,OAAAA,EAAS;AACV,IAAA,MAAM,IAAIP,KAAAA,CAAM,CAAA,KAAA,EAAQH,IAAAA,CAAAA,4BAAAA,EAAmCmB,OAAAA,CAAAA,CAAS,CAAA;AACxE,EAAA;AAEA,EAAA,OAAO;AAACnB,IAAAA,IAAAA;AAAMU,IAAAA;;AAClB,CAAA,CAAA,CAAA,EAbsC,gCAAA;AAmBvC,IAAMW,wBAAAA,mBAA2B,MAAA,CAAA,CACpCd,OAAAA,EACAR,QAAAA,KAEA;AACO,EAAA,GAAA,IAAIuB,GAAAA,CACHf,OAAAA,CAAQE,mBAAAA,CACHS,GAAAA,CACG,CAACV,WAAAA,KAAgBG,8BAAAA,CAA+BJ,OAAAA,EAASC,WAAAA,EAAaT,QAAAA,CAAS,CAAA,CAElFwB,MAAAA,CAAOC,QAAAA,CAAAA;AAElBC,CAAAA,CAAAA,IAAAA,EAAI,EAZ8B,0BAAA","file":"N3I7SNFG.js","sourcesContent":["import { isString } from 'es-toolkit';\n\nimport type { VersionCombination } from '../config';\nimport type { Tool } from '../config';\nimport type { ChainContext } from '../context';\n\nexport const findToolByName = <TImageId extends string>(\n { tools }: ChainContext<TImageId>,\n toolName: string,\n): Tool => {\n const tool = tools.find((tool) => tool.name === toolName);\n\n if (!tool) {\n throw new Error(`Tool '${toolName}' not found`);\n }\n\n return tool;\n};\n\nexport const getImageName = (basename: string): string => `${basename}-tooling`;\n\n/**\n * Get default version for a specific tool from version matrix\n */\nexport const getToolDefaultVersion = <TImageId extends string>(\n context: ChainContext<TImageId>,\n toolName: string,\n): string | null => {\n const combination = context.versionCombinations[0];\n\n if (!combination) {\n return null;\n }\n\n const version = findToolVersionsForCombination(context, combination)[toolName];\n\n if (!version) {\n console.warn(`No default version found for tool '${toolName}' in matrix`);\n return null;\n }\n\n return version;\n};\n\nexport const findToolVersionsForCombination = <TImageId extends string>(\n { images }: ChainContext<TImageId>,\n combination: VersionCombination<TImageId>,\n): Record<string, string> =>\n Object.fromEntries(\n Object.entries(combination.images).map(([tool, imageId]) => {\n const version = images[imageId].versions[tool];\n\n if (!version) {\n throw new Error(`Tool ${tool} not found in Docker image: ${imageId}`);\n }\n\n return [tool, version];\n }),\n );\n\n/**\n * Get supported versions for a specific tool from version matrix\n */\nexport const getToolSupportedVersions = <TImageId extends string>(\n context: ChainContext<TImageId>,\n toolName: string,\n): string[] =>\n [\n ...new Set(\n context.versionCombinations\n .map(\n (combination) => findToolVersionsForCombination(context, combination)[toolName],\n )\n .filter(isString),\n ),\n ].sort();\n"]}
|
package/dist/P52CW6DK.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/environment.ts"],"names":["parseBoolean","value","JSON","parse","local","env","VM_TOOLING_LOCAL","registry","VM_TOOLING_REGISTRY","imageDirectory","VM_TOOLING_IMAGE_DIRECTORY"],"mappings":";;;;AAAA,cAAA,EAAA;AAEA,IAAMA,YAAAA,mBAAe,MAAA,CAAA,CAACC,KAAAA,KAAuC,CAAC,CAACA,KAAAA,IAAS,CAAC,CAACC,IAAAA,CAAKC,KAAAA,CAAMF,KAAAA,CAAAA,EAAhE,cAAA,CAAA;AAEd,IAAMG,KAAAA,GAAiBJ,YAAAA,CAAaK,GAAAA,CAAIC,gBAAgB;AACxD,IAAMC,WAA+BF,GAAAA,CAAIG;AACzC,IAAMC,iBAAqCJ,GAAAA,CAAIK","file":"P52CW6DK.js","sourcesContent":["import { env } from 'node:process';\n\nconst parseBoolean = (value: string | undefined): boolean => !!value && !!JSON.parse(value);\n\nexport const local: boolean = parseBoolean(env.VM_TOOLING_LOCAL);\nexport const registry: string | undefined = env.VM_TOOLING_REGISTRY;\nexport const imageDirectory: string | undefined = env.VM_TOOLING_IMAGE_DIRECTORY;\n"]}
|
package/dist/RRKFUBOS.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/github/matrix.ts"],"names":["generateGithubMatrix","images","directory","versionCombinations","createImageEntry","imageId","image","tag","getImageTag","Error","entry","id","name","build_args","Object","entries","versions","dependencies","sort","map","key","value","constantCase","join","image_name","getImageName","tags","results","imageEntries","r","mirroredImages","filter","result","mirrorRegistries","length","flatMap","mirror","activeImages","activeImageIds","Set","combo","values","push"],"mappings":";;;;;;;AAAA,cAAA,EAAA;AA8BO,IAAMA,oBAAAA,mBAAuB,MAAA,CAAA,CAChCC,MAAAA,EACAC,SAAAA,EACAC,mBAAAA,KAAAA;AAEA,EAAA,MAAMC,gBAAAA,mBAAmB,MAAA,CAAA,CAAC,CAACC,OAAAA,EAASC,KAAAA,CAAAA,KAAuB;AAIvD,IAAA,MAAMC,GAAAA,GAAMC,YAAYF,KAAAA,CAAAA;AAExB,IAAA,IAAI,CAACC,GAAAA,EAAK;AACN,MAAA,MAAM,IAAIE,KAAAA,CACN,CAAA,OAAA,EAAUJ,OAAAA,CAAAA,qEAAAA,CAA8E,CAAA;AAEhG,IAAA;AAEA,IAAA,OAAO;MACHK,KAAAA,EAAO;QACHC,EAAAA,EAAIN,OAAAA;AACJO,QAAAA,IAAAA,EAAMN,KAAAA,CAAMM,IAAAA;AACZC,QAAAA,UAAAA,EAAYC,OAAOC,OAAAA,CAAQ;AAAE,UAAA,GAAGT,KAAAA,CAAMU,QAAAA;AAAU,UAAA,GAAGV,KAAAA,CAAMW;AAAa,SAAA,CAAA,CACjEC,IAAAA,EAAI,CACJC,GAAAA,CAAI,CAAC,CAACC,GAAAA,EAAKC,KAAAA,CAAAA,KAAW,GAAGC,YAAAA,CAAaF,GAAAA,CAAAA,CAAAA,SAAAA,EAAgBC,KAAAA,CAAAA,CAAO,CAAA;AAClEnB,QAAAA,SAAAA,EAAWqB,IAAAA,CAAKrB,SAAAA,EAAW,QAAA,EAAUI,KAAAA,CAAMM,IAAI,CAAA;QAC/CY,UAAAA,EAAYC,YAAAA,CAAanB,MAAMM,IAAI,CAAA;QACnCc,IAAAA,EAAM;AAACnB,UAAAA;;AACX,OAAA;AACAD,MAAAA;AACJ,KAAA;EACJ,CAAA,EAzByB,kBAAA,CAAA;AA2BzB,EAAA,MAAMqB,UAAUb,MAAAA,CAAOC,OAAAA,CAAQd,MAAAA,CAAAA,CAAQkB,IAAIf,gBAAAA,CAAAA;AAE3C,EAAA,MAAMwB,eAAeD,OAAAA,CAAQR,GAAAA,CAAI,CAACU,CAAAA,KAAMA,EAAEnB,KAAK,CAAA;AAE/C,EAAA,MAAMoB,cAAAA,GAAiBH,QAClBI,MAAAA,CAAO,CAACC,WAAWA,MAAAA,CAAO1B,KAAAA,CAAM2B,kBAAkBC,MAAAA,CAAAA,CAClDC,QAAQ,CAAC,EAAEzB,OAAOJ,KAAAA,EAAK,KACpBA,MAAM2B,gBAAAA,CAAkBd,GAAAA,CAAI,CAACiB,MAAAA,MAAY;AACrCzB,IAAAA,EAAAA,EAAID,KAAAA,CAAMC,EAAAA;AACVC,IAAAA,IAAAA,EAAMF,KAAAA,CAAME,IAAAA;AACZY,IAAAA,UAAAA,EAAYd,KAAAA,CAAMc,UAAAA;AAClBE,IAAAA,IAAAA,EAAMhB,KAAAA,CAAMgB,IAAAA;AACZU,IAAAA;AACJ,GAAA,CAAA,CAAA,CAAA;AAGR,EAAA,MAAMC,eAAyB,EAAA;AAC/B,EAAA,IAAIlC,mBAAAA,EAAqB;AACrB,IAAA,MAAMmC,cAAAA,GAAiB,IAAIC,GAAAA,CACvBpC,mBAAAA,CAAoBgC,OAAAA,CAAQ,CAACK,KAAAA,KAAU1B,MAAAA,CAAO2B,MAAAA,CAAOD,KAAAA,CAAMvC,MAAM,CAAA,CAAA,CAAA;AAErEoC,IAAAA,YAAAA,CAAaK,IAAAA,CAAI,GAAIJ,cAAAA,CAAAA;AACzB,EAAA;AAEA,EAAA,OAAO;IAAErC,MAAAA,EAAQ2B,YAAAA;AAAcE,IAAAA,cAAAA;AAAgBO,IAAAA;AAAa,GAAA;AAChE,CAAA,EAzDoC,sBAAA","file":"RRKFUBOS.js","sourcesContent":["import { constantCase } from 'es-toolkit';\nimport { join } from 'node:path';\n\nimport { type Image, type VersionCombination } from '../config';\nimport { getImageTag } from '../utils/docker';\nimport { getImageName } from '../utils/finder';\n\ninterface ImageEntry {\n id: string;\n name: string;\n build_args: string[];\n image_name: string;\n tags: string[];\n directory: string;\n}\n\ninterface MirroredImageEntry {\n id: string;\n name: string;\n image_name: string;\n tags: string[];\n mirror: string;\n}\n\ninterface GithubMatrixOutput {\n images: ImageEntry[];\n mirroredImages: MirroredImageEntry[];\n activeImages: string[];\n}\n\nexport const generateGithubMatrix = (\n images: Record<string, Image>,\n directory: string,\n versionCombinations?: VersionCombination<string>[],\n): GithubMatrixOutput => {\n const createImageEntry = ([imageId, image]: [string, Image]): {\n entry: ImageEntry;\n image: Image;\n } => {\n const tag = getImageTag(image);\n\n if (!tag) {\n throw new Error(\n `Image \"${imageId}\" produced no tags. Every image must have at least one non-empty tag.`,\n );\n }\n\n return {\n entry: {\n id: imageId,\n name: image.name,\n build_args: Object.entries({ ...image.versions, ...image.dependencies })\n .sort()\n .map(([key, value]) => `${constantCase(key)}_VERSION=${value}`),\n directory: join(directory, 'docker', image.name),\n image_name: getImageName(image.name),\n tags: [tag],\n },\n image,\n };\n };\n\n const results = Object.entries(images).map(createImageEntry);\n\n const imageEntries = results.map((r) => r.entry);\n\n const mirroredImages = results\n .filter((result) => result.image.mirrorRegistries?.length)\n .flatMap(({ entry, image }) =>\n image.mirrorRegistries!.map((mirror) => ({\n id: entry.id,\n name: entry.name,\n image_name: entry.image_name,\n tags: entry.tags,\n mirror,\n })),\n );\n\n const activeImages: string[] = [];\n if (versionCombinations) {\n const activeImageIds = new Set(\n versionCombinations.flatMap((combo) => Object.values(combo.images)),\n );\n activeImages.push(...activeImageIds);\n }\n\n return { images: imageEntries, mirroredImages, activeImages };\n};\n"]}
|
package/dist/SWKTHNWT.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts"],"names":["registryConfigCache","getRegistryConfig","registry","imageDirectory","workspaceRoot","getFullyQualifiedRepoRootPath","configPath","join","module","default","CARGO_TARGET_CACHE_PATH","volumeMappingBaseSchema","object","containerPath","string","readOnly","optional","boolean","hostVolumeMappingSchema","extend","type","literal","hostPath","isolateVolumeMappingSchema","name","shared","locked","toolchainKeyed","architectureIndependent","volumeMappingSchema","union","DOCKER_PLATFORM_VALUES","DOCKER_PLATFORM_NATIVE","DOCKER_PLATFORM_OVERRIDE_VALUES","DOCKER_PLATFORM_OVERRIDE_VALUES_DESCRIPTION","dockerPlatformOverrideValueSet","Set","isDockerPlatformOverride","input","has","DockerRegistryMirror","getImageDirectory","getRegistry"],"mappings":";;;;;;;AAAA,cAAA,EAAA;AAeA,IAAIA,mBAAAA;AAEJ,IAAMC,oCAAoB,MAAA,CAAA,YAAA;AACtB,EAAA,IAAI,CAACD,mBAAAA,EAAqB;AACtB,IAAA,IAAgBE,YAAwBC,cAAAA,EAAgB;AACpDH,MAAAA,mBAAAA,GAAsB;AAClBE,QAAAA,QAAAA;AACAC,QAAAA;AACJ,OAAA;IACJ,CAAA,MAAO;AACH,MAAA,MAAMC,aAAAA,GAAgB,MAAMC,6BAAAA,EAAAA;AAC5B,MAAA,MAAMC,aAAaC,IAAAA,CACfH,aAAAA,EACA,SAAA,EACA,YAAA,EACA,UACA,sBAAA,CAAA;AAGJ,MAAA,MAAMI,MAAAA,GAAS,MAAM,OAAOF,UAAAA,CAAAA;AAC5BN,MAAAA,mBAAAA,GAAsBQ,MAAAA,CAAOC,OAAAA;AACjC,IAAA;AACJ,EAAA;AACA,EAAA,OAAOT,mBAAAA;AACX,CAAA,EAtB0B,mBAAA,CAAA;AA2BnB,IAAMU,uBAAAA,GAA0B;AAEvC,IAAMC,0BAA4BC,CAAAA,CAAAA,MAAAA,CAAO;AACrCC,EAAAA,aAAAA,EAAiBC,CAAAA,CAAAA,MAAAA,EAAM;EACvBC,QAAAA,EAAYC,CAAAA,CAAAA,QAAAA,CAAWC,WAAO;AAClC,CAAA,CAAA;AAEA,IAAMC,uBAAAA,GAA0BP,wBAAwBQ,MAAAA,CAAO;AAC3DC,EAAAA,IAAAA,EAAQC,UAAQ,MAAA,CAAA;AAChBC,EAAAA,QAAAA,EAAYR,CAAAA,CAAAA,MAAAA;AAChB,CAAA,CAAA;AAEA,IAAMS,0BAAAA,GAA6BZ,wBAAwBQ,MAAAA,CAAO;AAC9DC,EAAAA,IAAAA,EAAQC,UAAQ,SAAA,CAAA;AAChBG,EAAAA,IAAAA,EAAQV,CAAAA,CAAAA,MAAAA,EAAM;EACdW,MAAAA,EAAUT,CAAAA,CAAAA,QAAAA,CAAWC,WAAO,CAAA;EAC5BS,MAAAA,EAAUV,CAAAA,CAAAA,QAAAA,CAAWC,WAAO,CAAA;;;EAG5BU,cAAAA,EAAkBX,CAAAA,CAAAA,QAAAA,CAAWC,WAAO,CAAA;;;EAGpCW,uBAAAA,EAA2BZ,CAAAA,CAAAA,QAAAA,CAAWC,WAAO;AACjD,CAAA,CAAA;AAEO,IAAMY,sBAAwBC,CAAAA,CAAAA,KAAAA,CAAM;AAACZ,EAAAA,uBAAAA;AAAyBK,EAAAA;AAA2B,CAAA;AAYzF,IAAMQ,sBAAAA,GAAyB;AAAC,EAAA,aAAA;AAAe,EAAA;;AAC/C,IAAMC,sBAAAA,GAAyB;AAC/B,IAAMC,+BAAAA,GAAkC;AAC3CD,EAAAA,sBAAAA;AACGD,EAAAA,GAAAA;;AAEA,IAAMG,2CAAAA,GACTD,+BAAAA,CAAgC1B,IAAAA,CAAK,IAAA;AAEzC,IAAM4B,8BAAAA,GAAiC,IAAIC,GAAAA,CAAYH,+BAAAA,CAAAA;AAKhD,IAAMI,wBAAAA,2BAA4BC,KAAAA,KACrC,OAAOA,UAAU,QAAA,IAAYH,8BAAAA,CAA+BI,GAAAA,CAAID,KAAAA,CAAAA,EAD5B,0BAAA;AA+BjC,IAAWE,oBAAAA,6BAAAA,qBAAAA,EAAAA;;AAAAA,EAAAA,OAAAA,qBAAAA;;AAkBX,IAAMC,iBAAAA,mBAAoB,MAAA,CAAA,YAAA,CAAa,MAAMxC,iBAAAA,IAAqBE,cAAAA,EAAxC,mBAAA;AAC1B,IAAMuC,WAAAA,mBAAc,MAAA,CAAA,YAAA,CAAa,MAAMzC,iBAAAA,IAAqBC,QAAAA,EAAxC,aAAA","file":"SWKTHNWT.js","sourcesContent":["import { join } from 'node:path';\nimport * as z from 'zod';\n\nimport { getFullyQualifiedRepoRootPath } from '@layerzerolabs/common-node-utils';\n\nimport type { ChainContext } from './context';\nimport type { ToolCommandExecutionOptions } from './core/tool-executor';\nimport * as environment from './environment';\nimport type { ScopedWorkspacePruner } from './scoped-workspace';\n\ninterface RegistryConfig {\n registry: string;\n imageDirectory: string;\n}\n\nlet registryConfigCache: RegistryConfig | undefined;\n\nconst getRegistryConfig = async (): Promise<RegistryConfig> => {\n if (!registryConfigCache) {\n if (environment.registry && environment.imageDirectory) {\n registryConfigCache = {\n registry: environment.registry,\n imageDirectory: environment.imageDirectory,\n };\n } else {\n const workspaceRoot = await getFullyQualifiedRepoRootPath();\n const configPath = join(\n workspaceRoot,\n 'configs',\n 'vm-tooling',\n 'values',\n 'docker-image-repo.ts',\n );\n\n const module = await import(configPath);\n registryConfigCache = module.default;\n }\n }\n return registryConfigCache!;\n};\n\n// Container path for the shared cargo build-artifact cache. A VM mounts its toolchain `target/`\n// cache at this path; resolveCargoCacheEnv keys on it to inject CARGO_TARGET_DIR. Single source so\n// the helper's lookup and each VM config's containerPath can't drift apart.\nexport const CARGO_TARGET_CACHE_PATH = '/cargo-target';\n\nconst volumeMappingBaseSchema = z.object({\n containerPath: z.string(),\n readOnly: z.optional(z.boolean()),\n});\n\nconst hostVolumeMappingSchema = volumeMappingBaseSchema.extend({\n type: z.literal('host'),\n hostPath: z.string(),\n});\n\nconst isolateVolumeMappingSchema = volumeMappingBaseSchema.extend({\n type: z.literal('isolate'),\n name: z.string(),\n shared: z.optional(z.boolean()),\n locked: z.optional(z.boolean()),\n // Share this cache across packages on the same toolchain instead of per-package. See\n // qualifyVolumeName. Opt-in — omit to keep it package-private.\n toolchainKeyed: z.optional(z.boolean()),\n // Opt out of arch-namespacing for volumes holding no compiled artifacts (config/state).\n // Suffixing is the safe default: under-splitting an arch-sensitive cache poisons it.\n architectureIndependent: z.optional(z.boolean()),\n});\n\nexport const volumeMappingSchema = z.union([hostVolumeMappingSchema, isolateVolumeMappingSchema]);\n\nexport type VolumeMapping = z.infer<typeof volumeMappingSchema>;\n\nexport interface EnvironmentVariable {\n name: string;\n value: string;\n}\n\n// Explicit platform pins currently supported by tool config and the CLI.\n// `native` is a CLI-only escape hatch that runs Docker without `--platform`\n// and clears DOCKER_DEFAULT_PLATFORM for that invocation.\nexport const DOCKER_PLATFORM_VALUES = ['linux/amd64', 'linux/arm64'] as const;\nexport const DOCKER_PLATFORM_NATIVE = 'native';\nexport const DOCKER_PLATFORM_OVERRIDE_VALUES = [\n DOCKER_PLATFORM_NATIVE,\n ...DOCKER_PLATFORM_VALUES,\n] as const;\nexport const DOCKER_PLATFORM_OVERRIDE_VALUES_DESCRIPTION =\n DOCKER_PLATFORM_OVERRIDE_VALUES.join(', ');\n\nconst dockerPlatformOverrideValueSet = new Set<string>(DOCKER_PLATFORM_OVERRIDE_VALUES);\n\nexport type DockerPlatformValue = (typeof DOCKER_PLATFORM_VALUES)[number];\nexport type DockerPlatformOverride = (typeof DOCKER_PLATFORM_OVERRIDE_VALUES)[number];\n\nexport const isDockerPlatformOverride = (input: unknown): input is DockerPlatformOverride =>\n typeof input === 'string' && dockerPlatformOverrideValueSet.has(input);\n\nexport interface Tool {\n name: string;\n privileged?: boolean;\n\n // Docker platform to use when running this tool's image\n dockerPlatform?: DockerPlatformValue;\n\n // Default isolate volumes for caching (user volumes can override these)\n defaultVolumes?: readonly VolumeMapping[];\n\n // Default environment variables (user env vars can override these)\n defaultEnv?: readonly EnvironmentVariable[];\n\n // Optional VM-specific scoped-workspace pruning/validation hook.\n scopedWorkspacePruner?: ScopedWorkspacePruner;\n\n // Optional version parsing and validation functions\n getSecondaryVersion?: (args: { cwd: string }) => Promise<string>;\n\n getLocalVersion?: (args: { cwd: string }) => Promise<string>;\n\n // Optional hook called before every tool command execution (e.g., toolchain sync)\n preExecute?: (\n context: ChainContext<string>,\n options: ToolCommandExecutionOptions,\n ) => Promise<void>;\n}\n\nexport const enum DockerRegistryMirror {\n PUBLIC_GAR = 'public-gar',\n}\n\nexport interface Image {\n name: string;\n versions: Record<string, string>;\n dependencies?: Record<string, string>;\n patch?: number;\n mirrorRegistries?: DockerRegistryMirror[];\n}\n\nexport interface VersionCombination<TImageId> {\n images: Record<string, TImageId>;\n description?: string;\n stable?: boolean;\n}\n\nexport const getImageDirectory = async () => (await getRegistryConfig()).imageDirectory;\nexport const getRegistry = async () => (await getRegistryConfig()).registry;\n"]}
|
package/dist/TJ5HTUVM.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/scoped-workspace/exclude-workspace-dependency-sources-pruner.ts"],"names":["createExcludeWorkspaceDependencySourcesPruner","name","createPrunePlan","dependencyGraph","excludedPackageCount","includedWorkspaceDependencies","length","patterns","packagePatterns","diagnostics"],"mappings":";;;AAEA,cAAA,EAAA;AAQO,IAAMA,6CAAAA,2BACTC,IAAAA,MACyB;AACzBA,EAAAA,IAAAA;EACAC,eAAAA,kBAAiB,MAAA,CAAA,OAAO,EAAEC,eAAAA,EAAe,KAAE;AACvC,IAAA,MAAMC,oBAAAA,GAAuBD,gBAAgBE,6BAAAA,CAA8BC,MAAAA;AAE3E,IAAA,OAAO;MACHC,QAAAA,EAAU;AAAC,QAAA;;AACXC,MAAAA,eAAAA,EAAiB,EAAC;MAClBC,WAAAA,EAAa;QACT,CAAA,EAAGR,IAAAA,uDAA2DG,oBAAAA,CAAAA,iCAAAA;;AAEtE,KAAA;EACJ,CAAA,EAViB,iBAAA;AAWrB,CAAA,CAAA,EAf6D,+CAAA","file":"TJ5HTUVM.js","sourcesContent":["import type { ScopedWorkspacePruner } from './types';\n\n/**\n * Create a pruner for containerized VM tool invocations that do not need source files from other\n * workspace packages.\n *\n * Only workspace dependency source copies are excluded. The current package remains bind-mounted,\n * and the repo-shaped directory structure, root node_modules symlinks, and pnpm virtual-store mount\n * are preserved for tool execution.\n */\nexport const createExcludeWorkspaceDependencySourcesPruner = (\n name: string,\n): ScopedWorkspacePruner => ({\n name,\n createPrunePlan: async ({ dependencyGraph }) => {\n const excludedPackageCount = dependencyGraph.includedWorkspaceDependencies.length;\n\n return {\n patterns: ['!**/**'],\n packagePatterns: {},\n diagnostics: [\n `${name} scoped-workspace pruner excluded source files from ${excludedPackageCount} workspace dependency package(s).`,\n ],\n };\n },\n});\n"]}
|
package/dist/VB2BOPPZ.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/local-executor.ts"],"names":["executeLocally","tool","resolvedVersion","cwd","args","env","script","getLocalVersion","Error","name","localVersion","console","info","commandLine","trim","label","join","time","output","$","process","Object","fromEntries","defaultEnv","map","value","nothrow","timeEnd","exitCode","stdout"],"mappings":";;;;;AAAA,cAAA,EAAA;AAYO,IAAMA,cAAAA,iCACTC,IAAAA,EACAC,eAAAA,EACA,EAAEC,GAAAA,EAAKC,IAAAA,EAAMC,GAAAA,EAAKC,MAAAA,EAAM,KAAyB;AAEjD,EAAA,IAAI,CAACL,KAAKM,eAAAA,EAAiB;AACvB,IAAA,MAAM,IAAIC,KAAAA,CAAM,CAAA,qCAAA,EAAwCP,IAAAA,CAAKQ,IAAI,CAAA,CAAE,CAAA;AACvE,EAAA;AAEA,EAAA,MAAMC,YAAAA,GAAe,MAAMT,IAAAA,CAAKM,eAAAA,CAAgB;AAAEJ,IAAAA;GAAI,CAAA;AAEtD,EAAA,IAAID,oBAAoBQ,YAAAA,EAAc;AAClC,IAAA,MAAM,IAAIF,MACN,CAAA,MAAA,EAASP,IAAAA,CAAKQ,IAAI,CAAA,UAAA,EAAaC,YAAAA,CAAAA,uCAAAA,EAAsDR,eAAAA,CAAAA,CAAAA,CAAkB,CAAA;AAE/G,EAAA;AAEAS,EAAAA,OAAAA,CAAQC,KAAK,CAAA,6BAAA,EAAoBX,IAAAA,CAAKQ,IAAI,CAAA,CAAA,EAAIC,YAAAA,CAAAA,CAAc,CAAA;AAE5D,EAAA,MAAMG,WAAAA,GAAcP,MAAAA,EAAQQ,IAAAA,EAAAA,GAAS;AAAC,IAAA,MAAA;AAAQ,IAAA,IAAA;AAAMR,IAAAA;AAAU,GAAA,GAAA;IAACL,IAAAA,CAAKQ,IAAAA;AAASL,IAAAA,GAAAA;;AAE7E,EAAA,MAAMW,KAAAA,GAAQ,CAAA,OAAA,EAAKF,WAAAA,CAAYG,IAAAA,CAAK,GAAA,CAAA,CAAA,CAAA;AACpCL,EAAAA,OAAAA,CAAQM,KAAKF,KAAAA,CAAAA;AACb,EAAA,MAAMG,MAAAA,GAAS,MAAMC,CAAAA,CAAE;AACnBhB,IAAAA,GAAAA;IACAE,GAAAA,EAAK;AACD,MAAA,GAAGe,OAAAA,CAAQf,GAAAA;MACX,GAAGgB,MAAAA,CAAOC,WAAAA,CAAAA,CAAarB,IAAAA,CAAKsB,UAAAA,IAAc,EAAA,EAAIC,GAAAA,CAAI,CAAC,EAAEf,IAAAA,EAAMgB,KAAAA,EAAK,KAAO;AAAChB,QAAAA,IAAAA;AAAMgB,QAAAA;OAAM,CAAA,CAAA;MACpF,GAAGJ,MAAAA,CAAOC,YAAYjB,GAAAA,CAAImB,GAAAA,CAAI,CAAC,EAAEf,IAAAA,EAAMgB,OAAK,KAAO;AAAChB,QAAAA,IAAAA;AAAMgB,QAAAA;OAAM,CAAA;AACpE;GACJ,CAAA,CAAA,EAAKZ,WAAAA,CAAAA,CAAAA,CAAca,OAAAA,EAAO;AAC1Bf,EAAAA,OAAAA,CAAQgB,QAAQZ,KAAAA,CAAAA;AAEhB,EAAA,IAAIG,MAAAA,CAAOU,aAAa,CAAA,EAAG;AACvB,IAAA,MAAMC,MAAAA,GAASX,MAAAA,CAAOW,MAAAA,CAAOf,IAAAA,EAAI;AAEjC,IAAA,MAAM,IAAIN,MACN,CAAA,oBAAA,EAAuBP,IAAAA,CAAKQ,IAAI,CAAA,aAAA,EAAgBS,MAAAA,CAAOU,QAAQ,CAAA,CAAA,EAAIC,MAAAA,GAAS;EAAKA,MAAAA,CAAAA,CAAAA,GAAW,EAAA,CAAA,CAAI,CAAA;AAExG,EAAA;AAEA,EAAA,OAAOX,MAAAA;AACX,CAAA,EA1C8B,gBAAA","file":"VB2BOPPZ.js","sourcesContent":["import process from 'node:process';\nimport { $, type ProcessOutput } from 'zx';\n\nimport type { EnvironmentVariable, Tool } from '../config';\n\ninterface LocalExecutionOptions {\n cwd: string;\n args: string[];\n env: readonly EnvironmentVariable[];\n script?: string;\n}\n\nexport const executeLocally = async (\n tool: Tool,\n resolvedVersion: string,\n { cwd, args, env, script }: LocalExecutionOptions,\n): Promise<ProcessOutput> => {\n if (!tool.getLocalVersion) {\n throw new Error(`Local execution is not supported for ${tool.name}`);\n }\n\n const localVersion = await tool.getLocalVersion({ cwd });\n\n if (resolvedVersion !== localVersion) {\n throw new Error(\n `Local ${tool.name} version (${localVersion}) does not match the required version (${resolvedVersion})`,\n );\n }\n\n console.info(`🖥️ Using local ${tool.name} ${localVersion}`);\n\n const commandLine = script?.trim() ? ['bash', '-c', script] : [tool.name, ...args];\n\n const label = `⏳ ${commandLine.join(' ')}`;\n console.time(label);\n const output = await $({\n cwd,\n env: {\n ...process.env,\n ...Object.fromEntries((tool.defaultEnv ?? []).map(({ name, value }) => [name, value])),\n ...Object.fromEntries(env.map(({ name, value }) => [name, value])),\n },\n })`${commandLine}`.nothrow();\n console.timeEnd(label);\n\n if (output.exitCode !== 0) {\n const stdout = output.stdout.trim();\n\n throw new Error(\n `Failed to run local ${tool.name} (exit code: ${output.exitCode})${stdout ? `\\n${stdout}` : ''}`,\n );\n }\n\n return output;\n};\n"]}
|
package/dist/XKW5QM54.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/github/index.ts"],"names":["runGithubMatrixGenerator","images","directory","versionCombinations","entries","generateGithubMatrix","console","warn","JSON","stringify","stdout","write"],"mappings":";;;;;AAAA,cAAA,EAAA;AAKO,IAAMA,wBAAAA,mBAA2B,MAAA,CAAA,OACpCC,MAAAA,EACAC,SAAAA,EACAC,mBAAAA,KAAAA;AAEA,EAAA,MAAMC,OAAAA,GAAUC,oBAAAA,CAAqBJ,MAAAA,EAAQC,SAAAA,EAAWC,mBAAAA,CAAAA;AAExDG,EAAAA,OAAAA,CAAQC,KAAK,iCAAA,EAAmCC,IAAAA,CAAKC,UAAUL,OAAAA,EAAS,IAAA,EAAM,CAAA,CAAA,CAAA;AAC9EM,EAAAA,MAAAA,CAAOC,KAAAA,CAAMH,IAAAA,CAAKC,SAAAA,CAAUL,OAAAA,CAAAA,CAAAA;AAChC,CAAA,EATwC,0BAAA","file":"XKW5QM54.js","sourcesContent":["import { stdout } from 'node:process';\n\nimport type { Image, VersionCombination } from '../config';\nimport { generateGithubMatrix } from './matrix';\n\nexport const runGithubMatrixGenerator = async (\n images: Record<string, Image>,\n directory: string,\n versionCombinations?: VersionCombination<string>[],\n): Promise<void> => {\n const entries = generateGithubMatrix(images, directory, versionCombinations);\n\n console.warn('GitHub Action matrix generated:', JSON.stringify(entries, null, 2));\n stdout.write(JSON.stringify(entries));\n};\n"]}
|
package/dist/XMRVBPGX.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/fs.ts"],"names":["DEFAULT_SAFE_REMOVE_RETRYABLE_ERROR_CODES","Set","DEFAULT_SAFE_REMOVE_MAX_RETRIES","DEFAULT_SAFE_REMOVE_RETRY_DELAY_MS","getErrorCode","error","String","code","undefined","isInside","parent","child","rel","relative","startsWith","isAbsolute","safeRemove","path","maxRetries","retryDelayMs","retries","rm","recursive","force","removed","has","delay"],"mappings":";;;;;;AAAA,cAAA,EAAA;AAcA,IAAMA,yCAAAA,uBAAgDC,GAAAA,CAAI;AACtD,EAAA,QAAA;AACA,EAAA,OAAA;AACA,EAAA,QAAA;AACA,EAAA,QAAA;AACA,EAAA,WAAA;AACA,EAAA;AACH,CAAA,CAAA;AAED,IAAMC,+BAAAA,GAAkC,CAAA;AACxC,IAAMC,kCAAAA,GAAqC,GAAA;AAE3C,IAAMC,YAAAA,mBAAe,MAAA,CAAA,CAACC,KAAAA,KAClB,OAAOA,UAAU,QAAA,IAAYA,KAAAA,KAAU,IAAA,IAAQ,MAAA,IAAUA,KAAAA,GACnDC,MAAAA,CAAQD,KAAAA,CAA6BE,IAAI,IACzCC,MAAAA,EAHW,cAAA,CAAA;AAKd,IAAMC,QAAAA,mBAAW,MAAA,CAAA,CAACC,MAAAA,EAAgBC,KAAAA,KAAAA;AACrC,EAAA,MAAMC,GAAAA,GAAMC,QAAAA,CAASH,MAAAA,EAAQC,KAAAA,CAAAA;AAC7B,EAAA,OAAOC,GAAAA,KAAQ,MAAO,CAACA,GAAAA,CAAIE,WAAW,IAAA,CAAA,IAAS,CAACC,UAAAA,CAAWH,GAAAA,CAAAA;AAC/D,CAAA,EAHwB,UAAA;AAOjB,IAAMI,UAAAA,mBAAa,MAAA,CAAA,OACtBC,IAAAA,EACA,EACIC,UAAAA,GAAahB,iCACbiB,YAAAA,GAAehB,kCAAAA,EAAkC,GAC9B,EAAC,KAAC;AAEzB,EAAA,IAAIiB,OAAAA,GAAU,CAAA;AAEd,EAAA,WAAS;AACL,IAAA,IAAI;AACA,MAAA,MAAMC,GAAGJ,IAAAA,EAAM;QAAEK,SAAAA,EAAW,IAAA;QAAMC,KAAAA,EAAO;OAAK,CAAA;AAC9C,MAAA,OAAO;QAAEC,OAAAA,EAAS;AAAK,OAAA;AAC3B,IAAA,CAAA,CAAA,OAASnB,KAAAA,EAAO;AACZ,MAAA,IACI,CAACL,0CAA0CyB,GAAAA,CAAIrB,YAAAA,CAAaC,KAAAA,CAAAA,IAAU,EAAA,CAAA,IACtEe,OAAAA,IAAWF,UAAAA,EACb;AACE,QAAA,OAAO;UAAEM,OAAAA,EAAS,KAAA;AAAOnB,UAAAA;AAAM,SAAA;AACnC,MAAA;AAEAe,MAAAA,OAAAA,EAAAA;AACA,MAAA,MAAMM,UAAAA,CAAMN,UAAUD,YAAAA,CAAAA;AAC1B,IAAA;AACJ,EAAA;AACJ,CAAA,EAzB0B,YAAA","file":"XMRVBPGX.js","sourcesContent":["import { rm } from 'node:fs/promises';\nimport { isAbsolute, relative } from 'node:path';\nimport { setTimeout as delay } from 'node:timers/promises';\n\ninterface SafeRemoveOptions {\n maxRetries?: number;\n retryDelayMs?: number;\n}\n\ninterface SafeRemoveResult {\n removed: boolean;\n error?: unknown;\n}\n\nconst DEFAULT_SAFE_REMOVE_RETRYABLE_ERROR_CODES = new Set([\n 'EACCES',\n 'EBUSY',\n 'EMFILE',\n 'ENFILE',\n 'ENOTEMPTY',\n 'EPERM',\n]);\n\nconst DEFAULT_SAFE_REMOVE_MAX_RETRIES = 3;\nconst DEFAULT_SAFE_REMOVE_RETRY_DELAY_MS = 100;\n\nconst getErrorCode = (error: unknown): string | undefined =>\n typeof error === 'object' && error !== null && 'code' in error\n ? String((error as { code?: unknown }).code)\n : undefined;\n\nexport const isInside = (parent: string, child: string): boolean => {\n const rel = relative(parent, child);\n return rel === '' || (!rel.startsWith('..') && !isAbsolute(rel));\n};\n\n// fs.rm({ maxRetries }) does not retry EACCES, which is the Docker bind-mount cleanup\n// failure seen in scoped-workspaces. Mirror Node's retry behavior and add EACCES.\nexport const safeRemove = async (\n path: string,\n {\n maxRetries = DEFAULT_SAFE_REMOVE_MAX_RETRIES,\n retryDelayMs = DEFAULT_SAFE_REMOVE_RETRY_DELAY_MS,\n }: SafeRemoveOptions = {},\n): Promise<SafeRemoveResult> => {\n let retries = 0;\n\n for (;;) {\n try {\n await rm(path, { recursive: true, force: true });\n return { removed: true };\n } catch (error) {\n if (\n !DEFAULT_SAFE_REMOVE_RETRYABLE_ERROR_CODES.has(getErrorCode(error) ?? '') ||\n retries >= maxRetries\n ) {\n return { removed: false, error };\n }\n\n retries++;\n await delay(retries * retryDelayMs);\n }\n }\n};\n"]}
|
package/dist/XOVO3JKY.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/lock.ts"],"names":["directory","join","homedir","defaultOptions","interval","timeout","signals","buildLockFilePath","key","lock","run","options","path","packageName","env","npm_package_name","info","unlock","rmSync","force","lockError","mkdir","recursive","handle","open","constants","O_CREAT","O_EXCL","close","error","time","stat","birthtime","_error","Date","now","getTime","Error","message","delay","signal","process","addListener","console","log","removeListener","lockMany","keys","sort","reduce"],"mappings":"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","file":"XOVO3JKY.js","sourcesContent":["import { delay } from 'es-toolkit';\nimport * as console from 'node:console';\nimport { rmSync } from 'node:fs';\nimport { stat } from 'node:fs/promises';\nimport { constants, mkdir, open } from 'node:fs/promises';\nimport { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { env } from 'node:process';\n\ninterface LockOptions {\n interval?: number;\n timeout?: number;\n}\n\nconst directory = join(homedir(), '.cache/vm-tooling/locks');\nconst defaultOptions = { interval: 1000, timeout: 30 * 60_000 };\nconst signals = ['SIGINT', 'SIGTERM', 'SIGHUP'] as const;\n\nexport const buildLockFilePath = (key: string): string => join(directory, key);\n\nexport const lock = async <T>(key: string, run: () => Promise<T>, options: LockOptions = {}) => {\n const { interval, timeout } = { ...defaultOptions, ...options };\n\n const path = buildLockFilePath(key);\n const packageName = env.npm_package_name;\n const info = [...(packageName ? ['for', packageName] : []), 'at', path].join(' ');\n\n const unlock = () => rmSync(path, { force: true });\n\n while (true) {\n let lockError;\n\n try {\n await mkdir(directory, { recursive: true });\n const handle = await open(path, constants.O_CREAT | constants.O_EXCL);\n await handle.close();\n break;\n } catch (error: unknown) {\n lockError = error as Error;\n }\n\n let time: Date | undefined;\n\n try {\n time = (await stat(path)).birthtime;\n } catch (_error) {\n // \"Crush\" errors as the lock is unlocked between the `open` and `stat`.\n }\n\n if (time && Date.now() - time.getTime() > timeout) {\n // If the timeout is reached, we assume that the previous run is\n // in a bad state and recover automatically by removing the lock file\n // even when it is actually running still.\n unlock();\n throw new Error(`Timeout waiting for lock file ${info}: ${lockError.message}`);\n }\n\n await delay(interval);\n }\n\n for (const signal of signals) {\n process.addListener(signal, unlock);\n }\n\n console.log(`🔒 Acquired lock ${info}`);\n\n try {\n return await run();\n } finally {\n for (const signal of signals) {\n process.removeListener(signal, unlock);\n }\n\n unlock();\n\n console.log(`🔓 Released lock ${info}`);\n }\n};\n\nexport const lockMany = async <T>(keys: string[], run: () => Promise<T>): Promise<T> =>\n // Sort keys to avoid deadlocks.\n keys.sort().reduce((run, key) => () => lock(key, run), run)();\n"]}
|
package/dist/ZWMRQU7D.js
DELETED
package/dist/ZWMRQU7D.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/display/index.ts"],"names":[],"mappings":";;;AAAA,cAAA,EAAA","file":"ZWMRQU7D.js","sourcesContent":["// Export formatters\nexport { formatVersionCombination } from './formatters';\n\n// Export version display functions\nexport { displayToolVersionInfo, displayVersionCombinations } from './version-display';\n"]}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { describe, it, globalExpect } from '../LBCSKMFZ.js';
|
|
2
|
-
import { executeLocally } from '../VB2BOPPZ.js';
|
|
3
|
-
import { init_esm_shims, __name } from '../JWJXCZMP.js';
|
|
4
|
-
import process from 'process';
|
|
5
|
-
|
|
6
|
-
// src/core/local-executor.test.ts
|
|
7
|
-
init_esm_shims();
|
|
8
|
-
describe(executeLocally, () => {
|
|
9
|
-
const cwd = process.cwd();
|
|
10
|
-
it("throws when the tool does not support local execution", async () => {
|
|
11
|
-
const tool = {
|
|
12
|
-
name: "forge"
|
|
13
|
-
};
|
|
14
|
-
await globalExpect(executeLocally(tool, "1.0.0", {
|
|
15
|
-
cwd,
|
|
16
|
-
args: [],
|
|
17
|
-
env: []
|
|
18
|
-
})).rejects.toThrowError(/not supported/);
|
|
19
|
-
});
|
|
20
|
-
it("throws when the local version does not match", async () => {
|
|
21
|
-
const tool = {
|
|
22
|
-
name: "forge",
|
|
23
|
-
getLocalVersion: /* @__PURE__ */ __name(async () => "1.0.0", "getLocalVersion")
|
|
24
|
-
};
|
|
25
|
-
await globalExpect(executeLocally(tool, "2.0.0", {
|
|
26
|
-
cwd,
|
|
27
|
-
args: [],
|
|
28
|
-
env: []
|
|
29
|
-
})).rejects.toThrowError(/does not match the required version/);
|
|
30
|
-
});
|
|
31
|
-
it("propagates the error raised while probing the local version", async () => {
|
|
32
|
-
const tool = {
|
|
33
|
-
name: "forge",
|
|
34
|
-
getLocalVersion: /* @__PURE__ */ __name(async () => {
|
|
35
|
-
throw new Error("forge is not installed locally");
|
|
36
|
-
}, "getLocalVersion")
|
|
37
|
-
};
|
|
38
|
-
await globalExpect(executeLocally(tool, "1.0.0", {
|
|
39
|
-
cwd,
|
|
40
|
-
args: [],
|
|
41
|
-
env: []
|
|
42
|
-
})).rejects.toThrowError(/not installed locally/);
|
|
43
|
-
});
|
|
44
|
-
it("runs the host tool when the version matches", async () => {
|
|
45
|
-
const tool = {
|
|
46
|
-
name: "node",
|
|
47
|
-
getLocalVersion: /* @__PURE__ */ __name(async () => "1.0.0", "getLocalVersion")
|
|
48
|
-
};
|
|
49
|
-
const output = await executeLocally(tool, "1.0.0", {
|
|
50
|
-
cwd,
|
|
51
|
-
args: [
|
|
52
|
-
"-e",
|
|
53
|
-
'process.stdout.write("ran")'
|
|
54
|
-
],
|
|
55
|
-
env: []
|
|
56
|
-
});
|
|
57
|
-
globalExpect(output.exitCode).toBe(0);
|
|
58
|
-
globalExpect(output.stdout).toContain("ran");
|
|
59
|
-
});
|
|
60
|
-
it("passes custom environment variables to the host tool", async () => {
|
|
61
|
-
const tool = {
|
|
62
|
-
name: "node",
|
|
63
|
-
getLocalVersion: /* @__PURE__ */ __name(async () => "1.0.0", "getLocalVersion")
|
|
64
|
-
};
|
|
65
|
-
const output = await executeLocally(tool, "1.0.0", {
|
|
66
|
-
cwd,
|
|
67
|
-
args: [
|
|
68
|
-
"-e",
|
|
69
|
-
'process.stdout.write(process.env.LZ_LOCAL_TEST ?? "")'
|
|
70
|
-
],
|
|
71
|
-
env: [
|
|
72
|
-
{
|
|
73
|
-
name: "LZ_LOCAL_TEST",
|
|
74
|
-
value: "present"
|
|
75
|
-
}
|
|
76
|
-
]
|
|
77
|
-
});
|
|
78
|
-
globalExpect(output.stdout).toContain("present");
|
|
79
|
-
});
|
|
80
|
-
it("runs a custom script via bash without prefixing the tool name", async () => {
|
|
81
|
-
const tool = {
|
|
82
|
-
name: "node",
|
|
83
|
-
getLocalVersion: /* @__PURE__ */ __name(async () => "1.0.0", "getLocalVersion")
|
|
84
|
-
};
|
|
85
|
-
const output = await executeLocally(tool, "1.0.0", {
|
|
86
|
-
cwd,
|
|
87
|
-
args: [],
|
|
88
|
-
env: [],
|
|
89
|
-
script: "printf scripted"
|
|
90
|
-
});
|
|
91
|
-
globalExpect(output.exitCode).toBe(0);
|
|
92
|
-
globalExpect(output.stdout).toContain("scripted");
|
|
93
|
-
});
|
|
94
|
-
it("throws when the host tool exits with a non-zero code", async () => {
|
|
95
|
-
const tool = {
|
|
96
|
-
name: "node",
|
|
97
|
-
getLocalVersion: /* @__PURE__ */ __name(async () => "1.0.0", "getLocalVersion")
|
|
98
|
-
};
|
|
99
|
-
await globalExpect(executeLocally(tool, "1.0.0", {
|
|
100
|
-
cwd,
|
|
101
|
-
args: [
|
|
102
|
-
"-e",
|
|
103
|
-
"process.exit(2)"
|
|
104
|
-
],
|
|
105
|
-
env: []
|
|
106
|
-
})).rejects.toThrowError(/exit code: 2/);
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
//# sourceMappingURL=local-executor.test.js.map
|
|
110
|
-
//# sourceMappingURL=local-executor.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/local-executor.test.ts"],"names":["describe","executeLocally","cwd","process","it","tool","name","expect","args","env","rejects","toThrowError","getLocalVersion","Error","output","exitCode","toBe","stdout","toContain","value","script"],"mappings":"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","file":"local-executor.test.js","sourcesContent":["import process from 'node:process';\nimport { describe, expect, it } from 'vitest';\n\nimport type { Tool } from '../config';\nimport { executeLocally } from './local-executor';\n\ndescribe(executeLocally, () => {\n const cwd = process.cwd();\n\n it('throws when the tool does not support local execution', async () => {\n const tool: Tool = { name: 'forge' };\n\n await expect(\n executeLocally(tool, '1.0.0', { cwd, args: [], env: [] }),\n ).rejects.toThrowError(/not supported/);\n });\n\n it('throws when the local version does not match', async () => {\n const tool: Tool = { name: 'forge', getLocalVersion: async () => '1.0.0' };\n\n await expect(\n executeLocally(tool, '2.0.0', { cwd, args: [], env: [] }),\n ).rejects.toThrowError(/does not match the required version/);\n });\n\n it('propagates the error raised while probing the local version', async () => {\n const tool: Tool = {\n name: 'forge',\n getLocalVersion: async () => {\n throw new Error('forge is not installed locally');\n },\n };\n\n await expect(\n executeLocally(tool, '1.0.0', { cwd, args: [], env: [] }),\n ).rejects.toThrowError(/not installed locally/);\n });\n\n it('runs the host tool when the version matches', async () => {\n const tool: Tool = { name: 'node', getLocalVersion: async () => '1.0.0' };\n\n const output = await executeLocally(tool, '1.0.0', {\n cwd,\n args: ['-e', 'process.stdout.write(\"ran\")'],\n env: [],\n });\n\n expect(output.exitCode).toBe(0);\n expect(output.stdout).toContain('ran');\n });\n\n it('passes custom environment variables to the host tool', async () => {\n const tool: Tool = { name: 'node', getLocalVersion: async () => '1.0.0' };\n\n const output = await executeLocally(tool, '1.0.0', {\n cwd,\n args: ['-e', 'process.stdout.write(process.env.LZ_LOCAL_TEST ?? \"\")'],\n env: [{ name: 'LZ_LOCAL_TEST', value: 'present' }],\n });\n\n expect(output.stdout).toContain('present');\n });\n\n it('runs a custom script via bash without prefixing the tool name', async () => {\n const tool: Tool = { name: 'node', getLocalVersion: async () => '1.0.0' };\n\n const output = await executeLocally(tool, '1.0.0', {\n cwd,\n args: [],\n env: [],\n script: 'printf scripted',\n });\n\n expect(output.exitCode).toBe(0);\n expect(output.stdout).toContain('scripted');\n });\n\n it('throws when the host tool exits with a non-zero code', async () => {\n const tool: Tool = { name: 'node', getLocalVersion: async () => '1.0.0' };\n\n await expect(\n executeLocally(tool, '1.0.0', {\n cwd,\n args: ['-e', 'process.exit(2)'],\n env: [],\n }),\n ).rejects.toThrowError(/exit code: 2/);\n });\n});\n"]}
|
package/dist/core/lock.test.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { it, globalExpect } from '../LBCSKMFZ.js';
|
|
2
|
-
import { lock, buildLockFilePath } from '../XOVO3JKY.js';
|
|
3
|
-
import { init_esm_shims } from '../JWJXCZMP.js';
|
|
4
|
-
import { mkdir, writeFile, stat } from 'fs/promises';
|
|
5
|
-
import { dirname } from 'path';
|
|
6
|
-
|
|
7
|
-
// src/core/lock.test.ts
|
|
8
|
-
init_esm_shims();
|
|
9
|
-
it("runs a callback", async () => {
|
|
10
|
-
await lock("once", async () => null);
|
|
11
|
-
});
|
|
12
|
-
it("runs a callback twice", async () => {
|
|
13
|
-
await lock("twice", async () => null);
|
|
14
|
-
await lock("twice", async () => null);
|
|
15
|
-
});
|
|
16
|
-
it("throws an error on timeout", async () => {
|
|
17
|
-
const key = "timeout";
|
|
18
|
-
const path = buildLockFilePath(key);
|
|
19
|
-
await mkdir(dirname(path), {
|
|
20
|
-
recursive: true
|
|
21
|
-
});
|
|
22
|
-
await writeFile(path, Date.now().toString());
|
|
23
|
-
await globalExpect(lock(key, async () => null, {
|
|
24
|
-
timeout: 1
|
|
25
|
-
})).rejects.toThrowError(/timeout/i);
|
|
26
|
-
await globalExpect(stat(path)).rejects.toThrowError(/ENOENT/);
|
|
27
|
-
});
|
|
28
|
-
//# sourceMappingURL=lock.test.js.map
|
|
29
|
-
//# sourceMappingURL=lock.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/lock.test.ts"],"names":["it","lock","key","path","buildLockFilePath","mkdir","dirname","recursive","writeFile","Date","now","toString","expect","timeout","rejects","toThrowError","stat"],"mappings":";;;;;;;AAAA,cAAA,EAAA;AAMAA,EAAAA,CAAG,mBAAmB,YAAA;AAClB,EAAA,MAAMC,IAAAA,CAAK,MAAA,EAAQ,YAAY,IAAA,CAAA;AACnC,CAAA,CAAA;AAEAD,EAAAA,CAAG,yBAAyB,YAAA;AACxB,EAAA,MAAMC,IAAAA,CAAK,OAAA,EAAS,YAAY,IAAA,CAAA;AAChC,EAAA,MAAMA,IAAAA,CAAK,OAAA,EAAS,YAAY,IAAA,CAAA;AACpC,CAAA,CAAA;AAEAD,EAAAA,CAAG,8BAA8B,YAAA;AAC7B,EAAA,MAAME,GAAAA,GAAM,SAAA;AACZ,EAAA,MAAMC,IAAAA,GAAOC,kBAAkBF,GAAAA,CAAAA;AAC/B,EAAA,MAAMG,KAAAA,CAAMC,OAAAA,CAAQH,IAAAA,CAAAA,EAAO;IAAEI,SAAAA,EAAW;GAAK,CAAA;AAC7C,EAAA,MAAMC,UAAUL,IAAAA,EAAMM,IAAAA,CAAKC,GAAAA,EAAG,CAAGC,UAAQ,CAAA;AAEzC,EAAA,MAAMC,YAAAA,CAAOX,IAAAA,CAAKC,GAAAA,EAAK,YAAY,IAAA,EAAM;IAAEW,OAAAA,EAAS;AAAE,GAAA,CAAA,CAAA,CAAIC,OAAAA,CAAQC,YAAAA,CAAa,UAAA,CAAA;AAG/E,EAAA,MAAMH,aAAOI,IAAAA,CAAKb,IAAAA,CAAAA,CAAAA,CAAOW,OAAAA,CAAQC,aAAa,QAAA,CAAA;AAClD,CAAA,CAAA","file":"lock.test.js","sourcesContent":["import { mkdir, stat, writeFile } from 'node:fs/promises';\nimport { dirname } from 'node:path';\nimport { expect, it } from 'vitest';\n\nimport { buildLockFilePath, lock } from './lock';\n\nit('runs a callback', async () => {\n await lock('once', async () => null);\n});\n\nit('runs a callback twice', async () => {\n await lock('twice', async () => null);\n await lock('twice', async () => null);\n});\n\nit('throws an error on timeout', async () => {\n const key = 'timeout';\n const path = buildLockFilePath(key);\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, Date.now().toString());\n\n await expect(lock(key, async () => null, { timeout: 1 })).rejects.toThrowError(/timeout/i);\n\n // The `lock` function call cleans up the lock file of a bad state.\n await expect(stat(path)).rejects.toThrowError(/ENOENT/);\n});\n"]}
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
import { describe, it, globalExpect } from '../LBCSKMFZ.js';
|
|
2
|
-
import { resolveCargoCacheEnv, mergeToolEnv } from '../H55JBB6F.js';
|
|
3
|
-
import '../ADZG6QSC.js';
|
|
4
|
-
import '../HIFVOL6G.js';
|
|
5
|
-
import '../HMZV72VO.js';
|
|
6
|
-
import '../5SLPZRAL.js';
|
|
7
|
-
import '../XMRVBPGX.js';
|
|
8
|
-
import '../TJ5HTUVM.js';
|
|
9
|
-
import '../5PX53N66.js';
|
|
10
|
-
import '../VB2BOPPZ.js';
|
|
11
|
-
import '../XOVO3JKY.js';
|
|
12
|
-
import '../6M3XVMYE.js';
|
|
13
|
-
import '../H4RUI4N2.js';
|
|
14
|
-
import { CARGO_TARGET_CACHE_PATH } from '../SWKTHNWT.js';
|
|
15
|
-
import '../P52CW6DK.js';
|
|
16
|
-
import '../CYP6J4VH.js';
|
|
17
|
-
import '../N3I7SNFG.js';
|
|
18
|
-
import { init_esm_shims } from '../JWJXCZMP.js';
|
|
19
|
-
|
|
20
|
-
// src/core/tool-executor.test.ts
|
|
21
|
-
init_esm_shims();
|
|
22
|
-
var cacheVolume = {
|
|
23
|
-
type: "isolate",
|
|
24
|
-
containerPath: CARGO_TARGET_CACHE_PATH,
|
|
25
|
-
name: "solana-target"
|
|
26
|
-
};
|
|
27
|
-
var withCache = [
|
|
28
|
-
cacheVolume
|
|
29
|
-
];
|
|
30
|
-
var cacheEnv = [
|
|
31
|
-
{
|
|
32
|
-
name: "CARGO_TARGET_DIR",
|
|
33
|
-
value: CARGO_TARGET_CACHE_PATH
|
|
34
|
-
}
|
|
35
|
-
];
|
|
36
|
-
describe(resolveCargoCacheEnv, () => {
|
|
37
|
-
describe("cache-safe scripts redirect at the shared cache", () => {
|
|
38
|
-
it.each([
|
|
39
|
-
"cargo test -p anchor-trait --lib --tests",
|
|
40
|
-
"cargo test --manifest-path macros/examples/vault/Cargo.toml --lib --tests",
|
|
41
|
-
"cargo test -p rbac --test trybuild -- --ignored",
|
|
42
|
-
"cargo test --package onesig -- tests --nocapture",
|
|
43
|
-
"cargo test-ellipse",
|
|
44
|
-
"cargo test-triangle",
|
|
45
|
-
"cargo check",
|
|
46
|
-
"cargo nextest run",
|
|
47
|
-
"cargo +nightly-2025-06-01 fmt -- --check && cargo clippy --all-targets",
|
|
48
|
-
// builtin t=test / c=check aliases.
|
|
49
|
-
"cargo t",
|
|
50
|
-
"cargo c",
|
|
51
|
-
"cargo +nightly-2025-06-01 t --lib"
|
|
52
|
-
])("%s", (script) => {
|
|
53
|
-
globalExpect(resolveCargoCacheEnv(script, withCache)).toEqual(cacheEnv);
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
describe("artifact-producing builds are never redirected", () => {
|
|
57
|
-
it.each([
|
|
58
|
-
"anchor build --no-idl --ignore-keys",
|
|
59
|
-
"cargo build",
|
|
60
|
-
"cargo build-sbf",
|
|
61
|
-
// test-sbf/test-bpf build .so despite the `test-` prefix.
|
|
62
|
-
"cargo test-sbf",
|
|
63
|
-
"cargo test-bpf --features foo",
|
|
64
|
-
// Dashed binary forms (the real protocol `test` script is `cargo-test-sbf`) — the
|
|
65
|
-
// space-anchored cargo branch misses these, so they need their own alternative.
|
|
66
|
-
"cargo-test-sbf",
|
|
67
|
-
"cargo-build-sbf",
|
|
68
|
-
"cargo-build-bpf --features x"
|
|
69
|
-
])("%s", (script) => {
|
|
70
|
-
globalExpect(resolveCargoCacheEnv(script, withCache)).toEqual([]);
|
|
71
|
-
});
|
|
72
|
-
it("skips when a build and a test share one script (build half must reach the host)", () => {
|
|
73
|
-
globalExpect(resolveCargoCacheEnv("cargo build && cargo test", withCache)).toEqual([]);
|
|
74
|
-
globalExpect(resolveCargoCacheEnv("anchor build && cargo test --lib", withCache)).toEqual([]);
|
|
75
|
-
globalExpect(resolveCargoCacheEnv("cargo b && cargo test", withCache)).toEqual([]);
|
|
76
|
-
globalExpect(resolveCargoCacheEnv("cargo b && cargo t", withCache)).toEqual([]);
|
|
77
|
-
globalExpect(resolveCargoCacheEnv("cargo test --lib && anchor idl build -o x.json", withCache)).toEqual([]);
|
|
78
|
-
globalExpect(resolveCargoCacheEnv("cargo test --lib && cargo-build-sbf", withCache)).toEqual([]);
|
|
79
|
-
globalExpect(resolveCargoCacheEnv("anchor test && cargo test --lib", withCache)).toEqual([]);
|
|
80
|
-
globalExpect(resolveCargoCacheEnv("cargo rustc -- --emit=obj && cargo test", withCache)).toEqual([]);
|
|
81
|
-
});
|
|
82
|
-
it.each([
|
|
83
|
-
"cargo build; cargo test",
|
|
84
|
-
"cargo build&&cargo test",
|
|
85
|
-
"cargo build-sbf;cargo test",
|
|
86
|
-
"cargo b;cargo test",
|
|
87
|
-
"cargo b&&cargo t"
|
|
88
|
-
])("%s", (script) => {
|
|
89
|
-
globalExpect(resolveCargoCacheEnv(script, withCache)).toEqual([]);
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
describe("commands outside the cache-safe allowlist are not redirected", () => {
|
|
93
|
-
it.each([
|
|
94
|
-
"cargo +nightly-2025-06-01 fmt",
|
|
95
|
-
"cargo +nightly-2025-06-01 fmt -- --check"
|
|
96
|
-
])("%s", (script) => {
|
|
97
|
-
globalExpect(resolveCargoCacheEnv(script, withCache)).toEqual([]);
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
it("does nothing when the tool mounts no /cargo-target cache volume", () => {
|
|
101
|
-
const otherVolumes = [
|
|
102
|
-
{
|
|
103
|
-
type: "isolate",
|
|
104
|
-
containerPath: "/usr/local/cargo",
|
|
105
|
-
name: "solana-cargo"
|
|
106
|
-
}
|
|
107
|
-
];
|
|
108
|
-
globalExpect(resolveCargoCacheEnv("cargo test -p oft --lib --tests", otherVolumes)).toEqual([]);
|
|
109
|
-
});
|
|
110
|
-
it("returns nothing for an empty or absent script (non --script invocations)", () => {
|
|
111
|
-
globalExpect(resolveCargoCacheEnv(void 0, withCache)).toEqual([]);
|
|
112
|
-
globalExpect(resolveCargoCacheEnv("", withCache)).toEqual([]);
|
|
113
|
-
});
|
|
114
|
-
it("does not match cargo substrings inside other words", () => {
|
|
115
|
-
globalExpect(resolveCargoCacheEnv("mycargo testlike", withCache)).toEqual([]);
|
|
116
|
-
});
|
|
117
|
-
it("tolerates irregular whitespace around the command", () => {
|
|
118
|
-
globalExpect(resolveCargoCacheEnv(" cargo test --lib", withCache)).toEqual(cacheEnv);
|
|
119
|
-
globalExpect(resolveCargoCacheEnv("cargo test", withCache)).toEqual(cacheEnv);
|
|
120
|
-
globalExpect(resolveCargoCacheEnv("cargo build && cargo test", withCache)).toEqual([]);
|
|
121
|
-
});
|
|
122
|
-
it("finds the cache volume by containerPath, regardless of its name", () => {
|
|
123
|
-
const renamed = [
|
|
124
|
-
{
|
|
125
|
-
type: "isolate",
|
|
126
|
-
containerPath: CARGO_TARGET_CACHE_PATH,
|
|
127
|
-
name: "custom-target"
|
|
128
|
-
}
|
|
129
|
-
];
|
|
130
|
-
globalExpect(resolveCargoCacheEnv("cargo test", renamed)).toEqual([
|
|
131
|
-
{
|
|
132
|
-
name: "CARGO_TARGET_DIR",
|
|
133
|
-
value: CARGO_TARGET_CACHE_PATH
|
|
134
|
-
}
|
|
135
|
-
]);
|
|
136
|
-
});
|
|
137
|
-
});
|
|
138
|
-
describe(mergeToolEnv, () => {
|
|
139
|
-
const cacheEnv2 = [
|
|
140
|
-
{
|
|
141
|
-
name: "CARGO_TARGET_DIR",
|
|
142
|
-
value: CARGO_TARGET_CACHE_PATH
|
|
143
|
-
}
|
|
144
|
-
];
|
|
145
|
-
it("keeps the higher-precedence (earlier) layer on a name collision", () => {
|
|
146
|
-
const userEnv = [
|
|
147
|
-
{
|
|
148
|
-
name: "CARGO_TARGET_DIR",
|
|
149
|
-
value: "/host/target"
|
|
150
|
-
}
|
|
151
|
-
];
|
|
152
|
-
globalExpect(mergeToolEnv(userEnv, [], [], cacheEnv2)).toEqual(userEnv);
|
|
153
|
-
});
|
|
154
|
-
it("applies the cache redirect only when nothing upstream sets the var", () => {
|
|
155
|
-
globalExpect(mergeToolEnv([], [], [], cacheEnv2)).toEqual(cacheEnv2);
|
|
156
|
-
});
|
|
157
|
-
it("preserves order and de-dupes across layers", () => {
|
|
158
|
-
globalExpect(mergeToolEnv([
|
|
159
|
-
{
|
|
160
|
-
name: "A",
|
|
161
|
-
value: "1"
|
|
162
|
-
}
|
|
163
|
-
], [
|
|
164
|
-
{
|
|
165
|
-
name: "B",
|
|
166
|
-
value: "2"
|
|
167
|
-
}
|
|
168
|
-
], [
|
|
169
|
-
{
|
|
170
|
-
name: "A",
|
|
171
|
-
value: "shadowed"
|
|
172
|
-
}
|
|
173
|
-
])).toEqual([
|
|
174
|
-
{
|
|
175
|
-
name: "A",
|
|
176
|
-
value: "1"
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
name: "B",
|
|
180
|
-
value: "2"
|
|
181
|
-
}
|
|
182
|
-
]);
|
|
183
|
-
});
|
|
184
|
-
});
|
|
185
|
-
//# sourceMappingURL=tool-executor.test.js.map
|
|
186
|
-
//# sourceMappingURL=tool-executor.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/tool-executor.test.ts"],"names":["cacheVolume","type","containerPath","CARGO_TARGET_CACHE_PATH","name","withCache","cacheEnv","value","describe","resolveCargoCacheEnv","it","each","script","expect","toEqual","otherVolumes","undefined","renamed","mergeToolEnv","userEnv"],"mappings":"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","file":"tool-executor.test.js","sourcesContent":["import { describe, expect, it } from 'vitest';\n\nimport type { EnvironmentVariable, VolumeMapping } from '../config';\nimport { CARGO_TARGET_CACHE_PATH } from '../config';\nimport { mergeToolEnv, resolveCargoCacheEnv } from './tool-executor';\n\nconst cacheVolume: VolumeMapping = {\n type: 'isolate',\n containerPath: CARGO_TARGET_CACHE_PATH,\n name: 'solana-target',\n};\n\nconst withCache: readonly VolumeMapping[] = [cacheVolume];\nconst cacheEnv = [{ name: 'CARGO_TARGET_DIR', value: CARGO_TARGET_CACHE_PATH }];\n\ndescribe(resolveCargoCacheEnv, () => {\n describe('cache-safe scripts redirect at the shared cache', () => {\n it.each([\n 'cargo test -p anchor-trait --lib --tests',\n 'cargo test --manifest-path macros/examples/vault/Cargo.toml --lib --tests',\n 'cargo test -p rbac --test trybuild -- --ignored',\n 'cargo test --package onesig -- tests --nocapture',\n 'cargo test-ellipse',\n 'cargo test-triangle',\n 'cargo check',\n 'cargo nextest run',\n 'cargo +nightly-2025-06-01 fmt -- --check && cargo clippy --all-targets',\n // builtin t=test / c=check aliases.\n 'cargo t',\n 'cargo c',\n 'cargo +nightly-2025-06-01 t --lib',\n ])('%s', (script) => {\n expect(resolveCargoCacheEnv(script, withCache)).toEqual(cacheEnv);\n });\n });\n\n describe('artifact-producing builds are never redirected', () => {\n it.each([\n 'anchor build --no-idl --ignore-keys',\n 'cargo build',\n 'cargo build-sbf',\n // test-sbf/test-bpf build .so despite the `test-` prefix.\n 'cargo test-sbf',\n 'cargo test-bpf --features foo',\n // Dashed binary forms (the real protocol `test` script is `cargo-test-sbf`) — the\n // space-anchored cargo branch misses these, so they need their own alternative.\n 'cargo-test-sbf',\n 'cargo-build-sbf',\n 'cargo-build-bpf --features x',\n ])('%s', (script) => {\n expect(resolveCargoCacheEnv(script, withCache)).toEqual([]);\n });\n\n it('skips when a build and a test share one script (build half must reach the host)', () => {\n expect(resolveCargoCacheEnv('cargo build && cargo test', withCache)).toEqual([]);\n expect(resolveCargoCacheEnv('anchor build && cargo test --lib', withCache)).toEqual([]);\n // builtin b=build alias must still defeat the redirect when paired with a test.\n expect(resolveCargoCacheEnv('cargo b && cargo test', withCache)).toEqual([]);\n expect(resolveCargoCacheEnv('cargo b && cargo t', withCache)).toEqual([]);\n // `anchor idl build` emits host IDL JSON — must defeat the redirect like any build.\n expect(\n resolveCargoCacheEnv('cargo test --lib && anchor idl build -o x.json', withCache),\n ).toEqual([]);\n // Dashed sbf binary glued to a cache-safe verb must still defeat the redirect.\n expect(resolveCargoCacheEnv('cargo test --lib && cargo-build-sbf', withCache)).toEqual(\n [],\n );\n // `anchor test` builds the program + IDL before running, and `cargo rustc` compiles —\n // both must defeat the redirect when paired with a cache-safe verb.\n expect(resolveCargoCacheEnv('anchor test && cargo test --lib', withCache)).toEqual([]);\n expect(\n resolveCargoCacheEnv('cargo rustc -- --emit=obj && cargo test', withCache),\n ).toEqual([]);\n });\n\n // The build must be detected even when glued straight to a shell separator with no space\n // (`;`, `&&`) — otherwise the build half silently redirects its .so/IDL into the cache.\n it.each([\n 'cargo build; cargo test',\n 'cargo build&&cargo test',\n 'cargo build-sbf;cargo test',\n 'cargo b;cargo test',\n 'cargo b&&cargo t',\n ])('%s', (script) => {\n expect(resolveCargoCacheEnv(script, withCache)).toEqual([]);\n });\n });\n\n describe('commands outside the cache-safe allowlist are not redirected', () => {\n it.each(['cargo +nightly-2025-06-01 fmt', 'cargo +nightly-2025-06-01 fmt -- --check'])(\n '%s',\n (script) => {\n expect(resolveCargoCacheEnv(script, withCache)).toEqual([]);\n },\n );\n });\n\n it('does nothing when the tool mounts no /cargo-target cache volume', () => {\n const otherVolumes: readonly VolumeMapping[] = [\n { type: 'isolate', containerPath: '/usr/local/cargo', name: 'solana-cargo' },\n ];\n expect(resolveCargoCacheEnv('cargo test -p oft --lib --tests', otherVolumes)).toEqual([]);\n });\n\n it('returns nothing for an empty or absent script (non --script invocations)', () => {\n expect(resolveCargoCacheEnv(undefined, withCache)).toEqual([]);\n expect(resolveCargoCacheEnv('', withCache)).toEqual([]);\n });\n\n it('does not match cargo substrings inside other words', () => {\n expect(resolveCargoCacheEnv('mycargo testlike', withCache)).toEqual([]);\n });\n\n it('tolerates irregular whitespace around the command', () => {\n // \\s+ / \\b mean extra spaces, tabs, and leading whitespace do not defeat matching.\n expect(resolveCargoCacheEnv(' cargo test --lib', withCache)).toEqual(cacheEnv);\n expect(resolveCargoCacheEnv('cargo\\ttest', withCache)).toEqual(cacheEnv);\n // ...and the build exclusion is equally whitespace-insensitive.\n expect(resolveCargoCacheEnv('cargo build && cargo test', withCache)).toEqual([]);\n });\n\n it('finds the cache volume by containerPath, regardless of its name', () => {\n // Lookup is keyed on the mount path, not the 'solana-target' name — any isolate volume\n // mounted at the cache path triggers the redirect.\n const renamed: readonly VolumeMapping[] = [\n { type: 'isolate', containerPath: CARGO_TARGET_CACHE_PATH, name: 'custom-target' },\n ];\n expect(resolveCargoCacheEnv('cargo test', renamed)).toEqual([\n { name: 'CARGO_TARGET_DIR', value: CARGO_TARGET_CACHE_PATH },\n ]);\n });\n});\n\ndescribe(mergeToolEnv, () => {\n const cacheEnv: EnvironmentVariable[] = [\n { name: 'CARGO_TARGET_DIR', value: CARGO_TARGET_CACHE_PATH },\n ];\n\n it('keeps the higher-precedence (earlier) layer on a name collision', () => {\n const userEnv: EnvironmentVariable[] = [\n { name: 'CARGO_TARGET_DIR', value: '/host/target' },\n ];\n // cacheEnv is passed last (lowest precedence); a user override must survive.\n expect(mergeToolEnv(userEnv, [], [], cacheEnv)).toEqual(userEnv);\n });\n\n it('applies the cache redirect only when nothing upstream sets the var', () => {\n expect(mergeToolEnv([], [], [], cacheEnv)).toEqual(cacheEnv);\n });\n\n it('preserves order and de-dupes across layers', () => {\n expect(\n mergeToolEnv(\n [{ name: 'A', value: '1' }],\n [{ name: 'B', value: '2' }],\n [{ name: 'A', value: 'shadowed' }],\n ),\n ).toEqual([\n { name: 'A', value: '1' },\n { name: 'B', value: '2' },\n ]);\n });\n});\n"]}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { describe, it, globalExpect } from '../../LBCSKMFZ.js';
|
|
2
|
-
import { createExcludeWorkspaceDependencySourcesPruner } from '../../TJ5HTUVM.js';
|
|
3
|
-
import { init_esm_shims } from '../../JWJXCZMP.js';
|
|
4
|
-
|
|
5
|
-
// src/scoped-workspace/tests/exclude-workspace-dependency-sources-pruner.test.ts
|
|
6
|
-
init_esm_shims();
|
|
7
|
-
describe(createExcludeWorkspaceDependencySourcesPruner, () => {
|
|
8
|
-
it("excludes workspace dependency sources and reports the excluded package count", async () => {
|
|
9
|
-
const pruner = createExcludeWorkspaceDependencySourcesPruner("test-vm");
|
|
10
|
-
const plan = await pruner.createPrunePlan({
|
|
11
|
-
repoRoot: "/repo",
|
|
12
|
-
packageRoot: "/repo/apps/current",
|
|
13
|
-
packageRelativePath: "apps/current",
|
|
14
|
-
cwd: "/repo/apps/current",
|
|
15
|
-
dependencyGraph: {
|
|
16
|
-
repoRoot: "/repo",
|
|
17
|
-
packageRoot: "/repo/apps/current",
|
|
18
|
-
packageRelativePath: "apps/current",
|
|
19
|
-
rootNodeModulesDependencyNames: [],
|
|
20
|
-
includedWorkspaceDependencies: [
|
|
21
|
-
{
|
|
22
|
-
name: "@layerzerolabs/dep-a",
|
|
23
|
-
importerRelativePath: "apps/current",
|
|
24
|
-
relativePath: "packages/dep-a",
|
|
25
|
-
absolutePath: "/repo/packages/dep-a",
|
|
26
|
-
version: "link:../../packages/dep-a"
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
name: "@layerzerolabs/dep-b",
|
|
30
|
-
importerRelativePath: "apps/current",
|
|
31
|
-
relativePath: "packages/dep-b",
|
|
32
|
-
absolutePath: "/repo/packages/dep-b",
|
|
33
|
-
version: "link:../../packages/dep-b"
|
|
34
|
-
}
|
|
35
|
-
]
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
globalExpect(pruner.name).toBe("test-vm");
|
|
39
|
-
globalExpect(plan.patterns).toEqual([
|
|
40
|
-
"!**/**"
|
|
41
|
-
]);
|
|
42
|
-
globalExpect(plan.packagePatterns).toEqual({});
|
|
43
|
-
globalExpect(plan.diagnostics).toEqual([
|
|
44
|
-
"test-vm scoped-workspace pruner excluded source files from 2 workspace dependency package(s)."
|
|
45
|
-
]);
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
//# sourceMappingURL=exclude-workspace-dependency-sources-pruner.test.js.map
|
|
49
|
-
//# sourceMappingURL=exclude-workspace-dependency-sources-pruner.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/scoped-workspace/tests/exclude-workspace-dependency-sources-pruner.test.ts"],"names":["describe","createExcludeWorkspaceDependencySourcesPruner","it","pruner","plan","createPrunePlan","repoRoot","packageRoot","packageRelativePath","cwd","dependencyGraph","rootNodeModulesDependencyNames","includedWorkspaceDependencies","name","importerRelativePath","relativePath","absolutePath","version","expect","toBe","patterns","toEqual","packagePatterns","diagnostics"],"mappings":";;;;;AAAA,cAAA,EAAA;AAIAA,QAAAA,CAASC,+CAA+C,MAAA;AACpDC,EAAAA,EAAAA,CAAG,gFAAgF,YAAA;AAC/E,IAAA,MAAMC,MAAAA,GAASF,8CAA8C,SAAA,CAAA;AAE7D,IAAA,MAAMG,IAAAA,GAAO,MAAMD,MAAAA,CAAOE,eAAAA,CAAgB;MACtCC,QAAAA,EAAU,OAAA;MACVC,WAAAA,EAAa,oBAAA;MACbC,mBAAAA,EAAqB,cAAA;MACrBC,GAAAA,EAAK,oBAAA;MACLC,eAAAA,EAAiB;QACbJ,QAAAA,EAAU,OAAA;QACVC,WAAAA,EAAa,oBAAA;QACbC,mBAAAA,EAAqB,cAAA;AACrBG,QAAAA,8BAAAA,EAAgC,EAAA;QAChCC,6BAAAA,EAA+B;AAC3B,UAAA;YACIC,IAAAA,EAAM,sBAAA;YACNC,oBAAAA,EAAsB,cAAA;YACtBC,YAAAA,EAAc,gBAAA;YACdC,YAAAA,EAAc,sBAAA;YACdC,OAAAA,EAAS;AACb,WAAA;AACA,UAAA;YACIJ,IAAAA,EAAM,sBAAA;YACNC,oBAAAA,EAAsB,cAAA;YACtBC,YAAAA,EAAc,gBAAA;YACdC,YAAAA,EAAc,sBAAA;YACdC,OAAAA,EAAS;AACb;;AAER;KACJ,CAAA;AAEAC,IAAAA,YAAAA,CAAOf,MAAAA,CAAOU,IAAI,CAAA,CAAEM,IAAAA,CAAK,SAAA,CAAA;AACzBD,IAAAA,YAAAA,CAAOd,IAAAA,CAAKgB,QAAQ,CAAA,CAAEC,OAAAA,CAAQ;AAAC,MAAA;AAAS,KAAA,CAAA;AACxCH,IAAAA,YAAAA,CAAOd,IAAAA,CAAKkB,eAAe,CAAA,CAAED,OAAAA,CAAQ,EAAC,CAAA;AACtCH,IAAAA,YAAAA,CAAOd,IAAAA,CAAKmB,WAAW,CAAA,CAAEF,OAAAA,CAAQ;AAC7B,MAAA;AACH,KAAA,CAAA;EACL,CAAA,CAAA;AACJ,CAAA,CAAA","file":"exclude-workspace-dependency-sources-pruner.test.js","sourcesContent":["import { describe, expect, it } from 'vitest';\n\nimport { createExcludeWorkspaceDependencySourcesPruner } from '../exclude-workspace-dependency-sources-pruner';\n\ndescribe(createExcludeWorkspaceDependencySourcesPruner, () => {\n it('excludes workspace dependency sources and reports the excluded package count', async () => {\n const pruner = createExcludeWorkspaceDependencySourcesPruner('test-vm');\n\n const plan = await pruner.createPrunePlan({\n repoRoot: '/repo',\n packageRoot: '/repo/apps/current',\n packageRelativePath: 'apps/current',\n cwd: '/repo/apps/current',\n dependencyGraph: {\n repoRoot: '/repo',\n packageRoot: '/repo/apps/current',\n packageRelativePath: 'apps/current',\n rootNodeModulesDependencyNames: [],\n includedWorkspaceDependencies: [\n {\n name: '@layerzerolabs/dep-a',\n importerRelativePath: 'apps/current',\n relativePath: 'packages/dep-a',\n absolutePath: '/repo/packages/dep-a',\n version: 'link:../../packages/dep-a',\n },\n {\n name: '@layerzerolabs/dep-b',\n importerRelativePath: 'apps/current',\n relativePath: 'packages/dep-b',\n absolutePath: '/repo/packages/dep-b',\n version: 'link:../../packages/dep-b',\n },\n ],\n },\n });\n\n expect(pruner.name).toBe('test-vm');\n expect(plan.patterns).toEqual(['!**/**']);\n expect(plan.packagePatterns).toEqual({});\n expect(plan.diagnostics).toEqual([\n 'test-vm scoped-workspace pruner excluded source files from 2 workspace dependency package(s).',\n ]);\n });\n});\n"]}
|