From e1120d38d8dc07859ec17f345ef4e5fe24c50726 Mon Sep 17 00:00:00 2001 From: Kris Kowal Date: Mon, 8 Jul 2024 17:59:01 -0700 Subject: [PATCH 1/2] fix(agoric-cli): Fully generalize package name extractor from zip files --- packages/agoric-cli/src/lib/bundles.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/agoric-cli/src/lib/bundles.js b/packages/agoric-cli/src/lib/bundles.js index 04810ae0682..2bce340c010 100644 --- a/packages/agoric-cli/src/lib/bundles.js +++ b/packages/agoric-cli/src/lib/bundles.js @@ -11,7 +11,7 @@ import { ZipReader } from '@endo/zip'; /** @import {Bundle} from '@agoric/swingset-vat'; */ /** @import {CoreEvalPlan} from '@agoric/deploy-script-support/src/writeCoreEvalParts.js' */ -const PACKAGE_NAME_RE = /(?.*-v[\d.]+(?:-n\d+)?)\//; +const PACKAGE_NAME_RE = /^(?:@[^\/]+\/)?[^\/]+/; /** * @typedef {{ name: string, label: string, location: string, modules: Record}} Compartment @@ -70,7 +70,7 @@ export const statBundle = async bundleFilename => { if (filename === 'compartment-map.json') { continue; } - const { packageName } = filename.match(PACKAGE_NAME_RE)?.groups ?? {}; + const packageName = filename.match(PACKAGE_NAME_RE)?.[0]; assert(packageName, `invalid filename ${filename}`); byPackage[packageName] ||= 0; byPackage[packageName] += size; From 1de3fd4fb8dd8430891821bd638da056a0809771 Mon Sep 17 00:00:00 2001 From: Chris Hibbert Date: Tue, 9 Jul 2024 17:25:22 -0700 Subject: [PATCH 2/2] test: export PACKAGE_NAME_RE and add some tests --- packages/agoric-cli/src/lib/bundles.js | 3 +- .../agoric-cli/test/bundles-regExp.test.js | 39 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 packages/agoric-cli/test/bundles-regExp.test.js diff --git a/packages/agoric-cli/src/lib/bundles.js b/packages/agoric-cli/src/lib/bundles.js index 2bce340c010..e41eb21ef02 100644 --- a/packages/agoric-cli/src/lib/bundles.js +++ b/packages/agoric-cli/src/lib/bundles.js @@ -11,7 +11,8 @@ import { ZipReader } from '@endo/zip'; /** @import {Bundle} from '@agoric/swingset-vat'; */ /** @import {CoreEvalPlan} from '@agoric/deploy-script-support/src/writeCoreEvalParts.js' */ -const PACKAGE_NAME_RE = /^(?:@[^\/]+\/)?[^\/]+/; +// exported for testing +export const PACKAGE_NAME_RE = /^(?:@[^/]+\/)?[^/]+/; /** * @typedef {{ name: string, label: string, location: string, modules: Record}} Compartment diff --git a/packages/agoric-cli/test/bundles-regExp.test.js b/packages/agoric-cli/test/bundles-regExp.test.js new file mode 100644 index 00000000000..87b6f040b14 --- /dev/null +++ b/packages/agoric-cli/test/bundles-regExp.test.js @@ -0,0 +1,39 @@ +import test from 'ava'; +import { PACKAGE_NAME_RE } from '../src/lib/bundles.js'; + +const goodPatterns = [ + ['@agoric/assert-v0.6.0'], + ['@agoric/base-zone-v0.1.0/', '@agoric/base-zone-v0.1.0'], + ['@endo/base64-v1.0.5-n1/index.js', '@endo/base64-v1.0.5-n1'], + ['@endo/base64-v1.0.5-n1/decode.js', '@endo/base64-v1.0.5-n1'], + [ + '@agoric/store-v0.9.3-dev-37ec151.0+37ec151/src/legacy/legacyWeakMap.js', + '@agoric/store-v0.9.3-dev-37ec151.0+37ec151', + ], + [ + 'calypso-contract-v0.1.0/src/proposals/core-proposal.js', + 'calypso-contract-v0.1.0', + ], + ['/index.js', undefined], + ['/src', undefined], +]; + +test('simple positive', t => { + for (const pattern of goodPatterns) { + const name = pattern[0]; + const expected = pattern.length === 2 ? pattern[1] : pattern[0]; + + t.is(name.match(PACKAGE_NAME_RE)?.[0], expected); + } +}); + +const badPatterns = [ + '/user/name/sdk/node_modules/@agoric/assert-v0.6.0', + '/random/@agoric/base-zone-v0.1.0/', +]; + +test('simple negative', t => { + for (const pattern of badPatterns) { + t.falsy(pattern.match(PACKAGE_NAME_RE)?.[0], `expected ${pattern} to fail`); + } +});