diff --git a/package.json b/package.json index 8ed858e48c8..a10afd9ade6 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "test:one": "polkadot-dev-run-test --env browser" }, "devDependencies": { - "@polkadot/dev": "^0.78.1", + "@polkadot/dev": "^0.78.2", "@types/node": "^20.10.5" }, "resolutions": { diff --git a/packages/hw-ledger-transports/src/detectOther.ts b/packages/hw-ledger-transports/src/detectOther.ts deleted file mode 100644 index 23bbab40939..00000000000 --- a/packages/hw-ledger-transports/src/detectOther.ts +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors -// SPDX-License-Identifier: Apache-2.0 - -export default []; diff --git a/packages/hw-ledger-transports/src/detectPackage.ts b/packages/hw-ledger-transports/src/packageDetect.ts similarity index 73% rename from packages/hw-ledger-transports/src/detectPackage.ts rename to packages/hw-ledger-transports/src/packageDetect.ts index e0ee7d976df..ee80c35778d 100644 --- a/packages/hw-ledger-transports/src/detectPackage.ts +++ b/packages/hw-ledger-transports/src/packageDetect.ts @@ -2,10 +2,10 @@ // SPDX-License-Identifier: Apache-2.0 // Do not edit, auto-generated by @polkadot/dev +// (packageInfo imports will be kept as-is, user-editable) import { detectPackage } from '@polkadot/util'; -import others from './detectOther.js'; import { packageInfo } from './packageInfo.js'; -detectPackage(packageInfo, null, others); +detectPackage(packageInfo, null, []); diff --git a/packages/hw-ledger/src/detectPackage.ts b/packages/hw-ledger/src/detectPackage.ts deleted file mode 100644 index 478f92f9e25..00000000000 --- a/packages/hw-ledger/src/detectPackage.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2017-2023 @polkadot/hw-ledger authors & contributors -// SPDX-License-Identifier: Apache-2.0 - -// Do not edit, auto-generated by @polkadot/dev - -import { detectPackage } from '@polkadot/util'; - -import others from './detectOther.js'; -import { packageInfo } from './packageInfo.js'; - -detectPackage(packageInfo, null, others); diff --git a/packages/hw-ledger/src/index.ts b/packages/hw-ledger/src/index.ts index 496da2467e3..16d812043bd 100644 --- a/packages/hw-ledger/src/index.ts +++ b/packages/hw-ledger/src/index.ts @@ -1,6 +1,6 @@ // Copyright 2017-2023 @polkadot/hw-ledger authors & contributors // SPDX-License-Identifier: Apache-2.0 -import './detectPackage.js'; +import './packageDetect.js'; export * from './bundle.js'; diff --git a/packages/hw-ledger/src/detectOther.ts b/packages/hw-ledger/src/packageDetect.ts similarity index 50% rename from packages/hw-ledger/src/detectOther.ts rename to packages/hw-ledger/src/packageDetect.ts index 1f0c61aba46..028ad9731a7 100644 --- a/packages/hw-ledger/src/detectOther.ts +++ b/packages/hw-ledger/src/packageDetect.ts @@ -1,7 +1,13 @@ // Copyright 2017-2023 @polkadot/hw-ledger authors & contributors // SPDX-License-Identifier: Apache-2.0 +// Do not edit, auto-generated by @polkadot/dev +// (packageInfo imports will be kept as-is, user-editable) + import { packageInfo as transportInfo } from '@polkadot/hw-ledger-transports/packageInfo'; +import { detectPackage } from '@polkadot/util'; import { packageInfo as utilInfo } from '@polkadot/util/packageInfo'; -export default [transportInfo, utilInfo]; +import { packageInfo } from './packageInfo.js'; + +detectPackage(packageInfo, null, [transportInfo, utilInfo]); diff --git a/packages/keyring/src/detectOther.ts b/packages/keyring/src/detectOther.ts deleted file mode 100644 index 99505ecfc12..00000000000 --- a/packages/keyring/src/detectOther.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright 2017-2023 @polkadot/keyring authors & contributors -// SPDX-License-Identifier: Apache-2.0 - -import { packageInfo as utilInfo } from '@polkadot/util/packageInfo'; -import { packageInfo as cryptoInfo } from '@polkadot/util-crypto/packageInfo'; - -export default [utilInfo, cryptoInfo]; diff --git a/packages/keyring/src/detectPackage.ts b/packages/keyring/src/detectPackage.ts deleted file mode 100644 index 9e2af53e6f3..00000000000 --- a/packages/keyring/src/detectPackage.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2017-2023 @polkadot/keyring authors & contributors -// SPDX-License-Identifier: Apache-2.0 - -// Do not edit, auto-generated by @polkadot/dev - -import { detectPackage } from '@polkadot/util'; - -import others from './detectOther.js'; -import { packageInfo } from './packageInfo.js'; - -detectPackage(packageInfo, null, others); diff --git a/packages/keyring/src/index.ts b/packages/keyring/src/index.ts index c1d097b7d80..3c23333b5dd 100644 --- a/packages/keyring/src/index.ts +++ b/packages/keyring/src/index.ts @@ -1,7 +1,7 @@ // Copyright 2017-2023 @polkadot/keyring authors & contributors // SPDX-License-Identifier: Apache-2.0 -import './detectPackage.js'; +import './packageDetect.js'; import { Keyring } from './bundle.js'; diff --git a/packages/keyring/src/packageDetect.ts b/packages/keyring/src/packageDetect.ts new file mode 100644 index 00000000000..d71f10e40c3 --- /dev/null +++ b/packages/keyring/src/packageDetect.ts @@ -0,0 +1,13 @@ +// Copyright 2017-2023 @polkadot/keyring authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +// Do not edit, auto-generated by @polkadot/dev +// (packageInfo imports will be kept as-is, user-editable) + +import { detectPackage } from '@polkadot/util'; +import { packageInfo as utilInfo } from '@polkadot/util/packageInfo'; +import { packageInfo as cryptoInfo } from '@polkadot/util-crypto/packageInfo'; + +import { packageInfo } from './packageInfo.js'; + +detectPackage(packageInfo, null, [cryptoInfo, utilInfo]); diff --git a/packages/networks/src/detectOther.ts b/packages/networks/src/detectOther.ts deleted file mode 100644 index 06a3eb1d46e..00000000000 --- a/packages/networks/src/detectOther.ts +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright 2017-2023 @polkadot/networks authors & contributors -// SPDX-License-Identifier: Apache-2.0 - -export default []; diff --git a/packages/networks/src/index.ts b/packages/networks/src/index.ts index b29f4c15aed..88a9edbc90c 100644 --- a/packages/networks/src/index.ts +++ b/packages/networks/src/index.ts @@ -3,7 +3,7 @@ // TODO: This was removed, really cannot recall the reason... // ... put it back, but keep it removed -// import './detectPackage'; +// import './packageDetect.js'; export * from './interfaces.js'; export { packageInfo } from './packageInfo.js'; diff --git a/packages/networks/src/detectPackage.ts b/packages/networks/src/packageDetect.ts similarity index 72% rename from packages/networks/src/detectPackage.ts rename to packages/networks/src/packageDetect.ts index 31dbcad1e8a..ccd689adf36 100644 --- a/packages/networks/src/detectPackage.ts +++ b/packages/networks/src/packageDetect.ts @@ -2,10 +2,10 @@ // SPDX-License-Identifier: Apache-2.0 // Do not edit, auto-generated by @polkadot/dev +// (packageInfo imports will be kept as-is, user-editable) import { detectPackage } from '@polkadot/util'; -import others from './detectOther.js'; import { packageInfo } from './packageInfo.js'; -detectPackage(packageInfo, null, others); +detectPackage(packageInfo, null, []); diff --git a/packages/util-crypto/src/detectPackage.ts b/packages/util-crypto/src/detectPackage.ts deleted file mode 100644 index 4dc9465f54e..00000000000 --- a/packages/util-crypto/src/detectPackage.ts +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2017-2023 @polkadot/util-crypto authors & contributors -// SPDX-License-Identifier: Apache-2.0 - -// Do not edit, auto-generated by @polkadot/dev - -import { detectPackage } from '@polkadot/util'; - -import others from './detectOther.js'; -import { packageInfo } from './packageInfo.js'; - -detectPackage(packageInfo, null, others); diff --git a/packages/util-crypto/src/index.ts b/packages/util-crypto/src/index.ts index 98894c16e47..89c9afd1806 100644 --- a/packages/util-crypto/src/index.ts +++ b/packages/util-crypto/src/index.ts @@ -1,6 +1,6 @@ // Copyright 2017-2023 @polkadot/util-crypto authors & contributors // SPDX-License-Identifier: Apache-2.0 -import './detectPackage.js'; +import './packageDetect.js'; export * from './bundle.js'; diff --git a/packages/util-crypto/src/detectOther.ts b/packages/util-crypto/src/packageDetect.ts similarity index 54% rename from packages/util-crypto/src/detectOther.ts rename to packages/util-crypto/src/packageDetect.ts index 0bb536be611..d8da70c2eb2 100644 --- a/packages/util-crypto/src/detectOther.ts +++ b/packages/util-crypto/src/packageDetect.ts @@ -1,8 +1,14 @@ // Copyright 2017-2023 @polkadot/util-crypto authors & contributors // SPDX-License-Identifier: Apache-2.0 +// Do not edit, auto-generated by @polkadot/dev +// (packageInfo imports will be kept as-is, user-editable) + import { packageInfo as netInfo } from '@polkadot/networks/packageInfo'; +import { detectPackage } from '@polkadot/util'; import { packageInfo as utilInfo } from '@polkadot/util/packageInfo'; import { packageInfo as randomInfo } from '@polkadot/x-randomvalues'; -export default [netInfo, utilInfo, randomInfo]; +import { packageInfo } from './packageInfo.js'; + +detectPackage(packageInfo, null, [netInfo, randomInfo, utilInfo]); diff --git a/packages/util/src/bundle.ts b/packages/util/src/bundle.ts index f1a15513d1d..394d3056fd1 100644 --- a/packages/util/src/bundle.ts +++ b/packages/util/src/bundle.ts @@ -15,6 +15,7 @@ export * from './bi/index.js'; export * from './bn/index.js'; export * from './buffer/index.js'; export * from './compact/index.js'; +export * from './detectPackage.js'; export * from './extractTime.js'; export * from './float/index.js'; export * from './format/index.js'; @@ -32,4 +33,3 @@ export * from './promisify.js'; export * from './string/index.js'; export * from './stringify.js'; export * from './u8a/index.js'; -export * from './versionDetect.js'; diff --git a/packages/util/src/versionDetect.spec.ts b/packages/util/src/detectPackage.spec.ts similarity index 99% rename from packages/util/src/versionDetect.spec.ts rename to packages/util/src/detectPackage.spec.ts index ff6511c5ba5..8757dbe98cc 100644 --- a/packages/util/src/versionDetect.spec.ts +++ b/packages/util/src/detectPackage.spec.ts @@ -3,7 +3,7 @@ /// -import { detectPackage, POLKADOTJS_DISABLE_ESM_CJS_WARNING_FLAG } from './versionDetect.js'; +import { detectPackage, POLKADOTJS_DISABLE_ESM_CJS_WARNING_FLAG } from './detectPackage.js'; describe('detectPackage', (): void => { const PKG = '@polkadot/util'; diff --git a/packages/util/src/detectPackage.ts b/packages/util/src/detectPackage.ts index 1c795a5aad5..b9b36c159f8 100644 --- a/packages/util/src/detectPackage.ts +++ b/packages/util/src/detectPackage.ts @@ -1,8 +1,138 @@ // Copyright 2017-2023 @polkadot/util authors & contributors // SPDX-License-Identifier: Apache-2.0 -import others from './detectOther.js'; -import { packageInfo } from './packageInfo.js'; -import { detectPackage } from './versionDetect.js'; +import { xglobal } from '@polkadot/x-global'; -detectPackage(packageInfo, null, others); +import { isFunction } from './is/function.js'; + +type This = typeof globalThis; + +interface VersionPath { + path: string; + type: string; + version: string; +} + +interface PackageInfo extends VersionPath { + name: string; +} + +interface PjsChecks extends This { + __polkadotjs: Record; +} + +type PjsGlobal = This & PjsChecks & Record; +type FnString = () => string | undefined; + +const DEDUPE = 'Either remove and explicitly install matching versions or dedupe using your package manager.\nThe following conflicting packages were found:'; + +export const POLKADOTJS_DISABLE_ESM_CJS_WARNING_FLAG = 'POLKADOTJS_DISABLE_ESM_CJS_WARNING'; + +/** @internal */ +function getEntry (name: string): VersionPath[] { + const _global = xglobal as PjsGlobal; + + if (!_global.__polkadotjs) { + _global.__polkadotjs = {}; + } + + if (!_global.__polkadotjs[name]) { + _global.__polkadotjs[name] = []; + } + + return _global.__polkadotjs[name]; +} + +/** @internal */ +function formatDisplay (all: T[], fmt: (version: string, data: T) => string[]): string { + let max = 0; + + for (let i = 0, count = all.length; i < count; i++) { + max = Math.max(max, all[i].version.length); + } + + return all + .map((d) => `\t${fmt(d.version.padEnd(max), d).join('\t')}`) + .join('\n'); +} + +/** @internal */ +function formatInfo (version: string, { name }: PackageInfo): string[] { + return [ + version, + name + ]; +} + +/** @internal */ +function formatVersion (version: string, { path, type }: VersionPath): string[] { + let extracted: string; + + if (path && path.length >= 5) { + const nmIndex = path.indexOf('node_modules'); + + extracted = nmIndex === -1 + ? path + : path.substring(nmIndex); + } else { + extracted = ''; + } + + return [ + `${`${type || ''}`.padStart(3)} ${version}`, + extracted + ]; +} + +/** @internal */ +function getPath (infoPath?: string, pathOrFn?: FnString | string | false | null): string { + if (infoPath) { + return infoPath; + } else if (isFunction(pathOrFn)) { + try { + return pathOrFn() || ''; + } catch { + return ''; + } + } + + return pathOrFn || ''; +} + +/** @internal */ +function warn (pre: string, all: T[], fmt: (version: string, data: T) => string[]): void { + console.warn(`${pre}\n${DEDUPE}\n${formatDisplay(all, fmt)}`); +} + +/** + * @name detectPackage + * @summary Checks that a specific package is only imported once + * @description A `@polkadot/*` version detection utility, checking for one occurrence of a package in addition to checking for dependency versions. + */ +export function detectPackage ({ name, path, type, version }: PackageInfo, pathOrFn?: FnString | string | false | null, deps: PackageInfo[] = []): void { + if (!name.startsWith('@polkadot')) { + throw new Error(`Invalid package descriptor ${name}`); + } + + const entry = getEntry(name); + + entry.push({ path: getPath(path, pathOrFn), type, version }); + + // if we have more than one entry at DIFFERENT version types then warn. If there is + // more than one entry at the same version and ESM/CJS dual warnings are disabled, + // then do not display warnings + const entriesSameVersion = entry.every((e) => e.version === version); + const esmCjsWarningDisabled = xglobal.process?.env?.[POLKADOTJS_DISABLE_ESM_CJS_WARNING_FLAG] === '1'; + const multipleEntries = entry.length !== 1; + const disableWarnings = esmCjsWarningDisabled && entriesSameVersion; + + if (multipleEntries && !disableWarnings) { + warn(`${name} has multiple versions, ensure that there is only one installed.`, entry, formatVersion); + } else { + const mismatches = deps.filter((d) => d && d.version !== version); + + if (mismatches.length) { + warn(`${name} requires direct dependencies exactly matching version ${version}.`, mismatches, formatInfo); + } + } +} diff --git a/packages/util/src/index.ts b/packages/util/src/index.ts index c16234dd10b..32ae74ede2f 100644 --- a/packages/util/src/index.ts +++ b/packages/util/src/index.ts @@ -1,6 +1,6 @@ // Copyright 2017-2023 @polkadot/util authors & contributors // SPDX-License-Identifier: Apache-2.0 -import './detectPackage.js'; +import './packageDetect.js'; export * from './bundle.js'; diff --git a/packages/util/src/detectOther.ts b/packages/util/src/packageDetect.ts similarity index 59% rename from packages/util/src/detectOther.ts rename to packages/util/src/packageDetect.ts index 8b1667d5d54..29750ac487a 100644 --- a/packages/util/src/detectOther.ts +++ b/packages/util/src/packageDetect.ts @@ -4,4 +4,7 @@ import { packageInfo as decoderInfo } from '@polkadot/x-textdecoder'; import { packageInfo as encoderInfo } from '@polkadot/x-textencoder'; -export default [decoderInfo, encoderInfo]; +import { detectPackage } from './detectPackage.js'; +import { packageInfo } from './packageInfo.js'; + +detectPackage(packageInfo, null, [decoderInfo, encoderInfo]); diff --git a/packages/util/src/versionDetect.ts b/packages/util/src/versionDetect.ts deleted file mode 100644 index 97a03062beb..00000000000 --- a/packages/util/src/versionDetect.ts +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright 2017-2023 @polkadot/util authors & contributors -// SPDX-License-Identifier: Apache-2.0 - -import { xglobal } from '@polkadot/x-global'; - -import { isFunction } from './is/function.js'; - -type This = typeof globalThis; - -interface VersionPath { - path: string; - type: string; - version: string; -} - -interface PackageInfo extends VersionPath { - name: string; -} - -interface PjsChecks extends This { - __polkadotjs: Record; -} - -type PjsGlobal = This & PjsChecks & Record; -type FnString = () => string | undefined; - -const DEDUPE = 'Either remove and explicitly install matching versions or dedupe using your package manager.\nThe following conflicting packages were found:'; - -export const POLKADOTJS_DISABLE_ESM_CJS_WARNING_FLAG = 'POLKADOTJS_DISABLE_ESM_CJS_WARNING'; - -/** @internal */ -function getEntry (name: string): VersionPath[] { - const _global = xglobal as PjsGlobal; - - if (!_global.__polkadotjs) { - _global.__polkadotjs = {}; - } - - if (!_global.__polkadotjs[name]) { - _global.__polkadotjs[name] = []; - } - - return _global.__polkadotjs[name]; -} - -/** @internal */ -function formatDisplay (all: T[], fmt: (version: string, data: T) => string[]): string { - let max = 0; - - for (let i = 0, count = all.length; i < count; i++) { - max = Math.max(max, all[i].version.length); - } - - return all - .map((d) => `\t${fmt(d.version.padEnd(max), d).join('\t')}`) - .join('\n'); -} - -/** @internal */ -function formatInfo (version: string, { name }: PackageInfo): string[] { - return [ - version, - name - ]; -} - -/** @internal */ -function formatVersion (version: string, { path, type }: VersionPath): string[] { - let extracted: string; - - if (path && path.length >= 5) { - const nmIndex = path.indexOf('node_modules'); - - extracted = nmIndex === -1 - ? path - : path.substring(nmIndex); - } else { - extracted = ''; - } - - return [ - `${`${type || ''}`.padStart(3)} ${version}`, - extracted - ]; -} - -/** @internal */ -function getPath (infoPath?: string, pathOrFn?: FnString | string | false | null): string { - if (infoPath) { - return infoPath; - } else if (isFunction(pathOrFn)) { - try { - return pathOrFn() || ''; - } catch { - return ''; - } - } - - return pathOrFn || ''; -} - -/** @internal */ -function warn (pre: string, all: T[], fmt: (version: string, data: T) => string[]): void { - console.warn(`${pre}\n${DEDUPE}\n${formatDisplay(all, fmt)}`); -} - -/** - * @name detectPackage - * @summary Checks that a specific package is only imported once - * @description A `@polkadot/*` version detection utility, checking for one occurrence of a package in addition to checking for dependency versions. - */ -export function detectPackage ({ name, path, type, version }: PackageInfo, pathOrFn?: FnString | string | false | null, deps: PackageInfo[] = []): void { - if (!name.startsWith('@polkadot')) { - throw new Error(`Invalid package descriptor ${name}`); - } - - const entry = getEntry(name); - - entry.push({ path: getPath(path, pathOrFn), type, version }); - - // if we have more than one entry at DIFFERENT version types then warn. If there is more than one entry at the same - // version and ESM/CJS dual warnings are disabled, then do not display warnings - const entriesSameVersion = entry.every((e) => e.version === version); - const esmCjsWarningDisabled = xglobal.process?.env?.[POLKADOTJS_DISABLE_ESM_CJS_WARNING_FLAG] === '1'; - const multipleEntries = entry.length !== 1; - const disableWarnings = esmCjsWarningDisabled && entriesSameVersion; - - if (multipleEntries && !disableWarnings) { - warn(`${name} has multiple versions, ensure that there is only one installed.`, entry, formatVersion); - } else { - const mismatches = deps.filter((d) => d && d.version !== version); - - if (mismatches.length) { - warn(`${name} requires direct dependencies exactly matching version ${version}.`, mismatches, formatInfo); - } - } -} diff --git a/yarn.lock b/yarn.lock index 2fb83745cdb..7d41e3b85fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -470,34 +470,34 @@ __metadata: languageName: node linkType: hard -"@polkadot/dev-test@npm:^0.78.1": - version: 0.78.1 - resolution: "@polkadot/dev-test@npm:0.78.1" +"@polkadot/dev-test@npm:^0.78.2": + version: 0.78.2 + resolution: "@polkadot/dev-test@npm:0.78.2" dependencies: jsdom: "npm:^23.0.1" tslib: "npm:^2.6.2" - checksum: 5ead8120872943af282f53f7c319787f87961dad324280de136447bc07c85b59c31657da0ff8699d0dd26fd2dd8e0bba3a87ae0097473e1eeb97f20a52ef564e + checksum: eb05a44cf9d94bb8df278eb14eb30814854de5c5508fb14dcff9269aa29a53ff5e74f17aea40abd5a981a3a4530e38f6d26ce546ac4c72a81c1ee5e9296b7e9d languageName: node linkType: hard -"@polkadot/dev-ts@npm:^0.78.1": - version: 0.78.1 - resolution: "@polkadot/dev-ts@npm:0.78.1" +"@polkadot/dev-ts@npm:^0.78.2": + version: 0.78.2 + resolution: "@polkadot/dev-ts@npm:0.78.2" dependencies: json5: "npm:^2.2.3" tslib: "npm:^2.6.2" typescript: "npm:^5.3.3" - checksum: 1b965ac9d842e049b732240a52f714791416a405341901545e1b5069211deec5940267a61e35d868ad693fe503b06db093f869b6b42a3dad0d40848820a6dd79 + checksum: 80e2139c931be9e4747c4fac05b07cd903b75364a5df0f84bd162a084f2ad795c91b867048992dbdc943c43c3ace156d6c3d0bf91bc73fcdb31d7acc20b05e1c languageName: node linkType: hard -"@polkadot/dev@npm:^0.78.1": - version: 0.78.1 - resolution: "@polkadot/dev@npm:0.78.1" +"@polkadot/dev@npm:^0.78.2": + version: 0.78.2 + resolution: "@polkadot/dev@npm:0.78.2" dependencies: "@eslint/js": "npm:^8.56.0" - "@polkadot/dev-test": "npm:^0.78.1" - "@polkadot/dev-ts": "npm:^0.78.1" + "@polkadot/dev-test": "npm:^0.78.2" + "@polkadot/dev-ts": "npm:^0.78.2" "@rollup/plugin-alias": "npm:^5.1.0" "@rollup/plugin-commonjs": "npm:^25.0.7" "@rollup/plugin-dynamic-import-vars": "npm:^2.1.2" @@ -562,7 +562,7 @@ __metadata: polkadot-exec-rollup: scripts/polkadot-exec-rollup.mjs polkadot-exec-tsc: scripts/polkadot-exec-tsc.mjs polkadot-exec-webpack: scripts/polkadot-exec-webpack.mjs - checksum: 95c9c4e94fb62ca8041a73283d16165cfc09da8fa4beb3051af45141f6f0d0c51373f2ce8c84eace0939119c128525df39df94a32a8d6b66e32a2fe6a9c659f6 + checksum: 64a6628e6cd6843e91a481f246845d2def41eb217b67604b9b3d0e7eb39e6a0e1d2ca2d7149a1347f0edd1a928678abe0b2de0c03c5839b2e9773485c8b166db languageName: node linkType: hard @@ -8062,7 +8062,7 @@ __metadata: version: 0.0.0-use.local resolution: "root-workspace-0b6124@workspace:." dependencies: - "@polkadot/dev": "npm:^0.78.1" + "@polkadot/dev": "npm:^0.78.2" "@types/node": "npm:^20.10.5" languageName: unknown linkType: soft