diff --git a/.changeset/six-readers-draw.md b/.changeset/six-readers-draw.md new file mode 100644 index 0000000000..30d6fdff0c --- /dev/null +++ b/.changeset/six-readers-draw.md @@ -0,0 +1,5 @@ +--- +"dependency-path": patch +--- + +Use @pnpm/crypto.base32-hash. diff --git a/.changeset/smart-games-rest.md b/.changeset/smart-games-rest.md new file mode 100644 index 0000000000..8d5d920ef1 --- /dev/null +++ b/.changeset/smart-games-rest.md @@ -0,0 +1,5 @@ +--- +"@pnpm/crypto.base32-hash": major +--- + +Initial release. diff --git a/packages/crypto.base32-hash/README.md b/packages/crypto.base32-hash/README.md new file mode 100644 index 0000000000..94edddce48 --- /dev/null +++ b/packages/crypto.base32-hash/README.md @@ -0,0 +1,13 @@ +# @pnpm/crypto.base32-hash + +> Create a base32 hash + +## Installation + +```sh +pnpm add @pnpm/crypto.base32-hash +``` + +## License + +MIT diff --git a/packages/crypto.base32-hash/jest.config.js b/packages/crypto.base32-hash/jest.config.js new file mode 100644 index 0000000000..9b65513eba --- /dev/null +++ b/packages/crypto.base32-hash/jest.config.js @@ -0,0 +1,3 @@ +const config = require('../../jest.config.js'); + +module.exports = Object.assign({}, config, {}); diff --git a/packages/crypto.base32-hash/package.json b/packages/crypto.base32-hash/package.json new file mode 100644 index 0000000000..76f7a00716 --- /dev/null +++ b/packages/crypto.base32-hash/package.json @@ -0,0 +1,43 @@ +{ + "name": "@pnpm/crypto.base32-hash", + "version": "0.0.0", + "description": "Create a base32 hash", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": [ + "lib", + "!*.map" + ], + "scripts": { + "lint": "eslint src/**/*.ts test/**/*.ts", + "_test": "jest", + "test": "pnpm run compile && pnpm run _test", + "prepublishOnly": "pnpm run compile", + "compile": "tsc --build && pnpm run lint --fix" + }, + "repository": "https://github.com/pnpm/pnpm/blob/main/packages/crypto.base32-hash", + "keywords": [ + "pnpm7", + "hash", + "crypto", + "base32" + ], + "engines": { + "node": ">=14.6" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/pnpm/pnpm/issues" + }, + "homepage": "https://github.com/pnpm/pnpm/blob/main/packages/crypto.base32-hash#readme", + "dependencies": { + "rfc4648": "^1.5.1" + }, + "devDependencies": { + "@pnpm/crypto.base32-hash": "workspace:0.0.0" + }, + "funding": "https://opencollective.com/pnpm", + "exports": { + ".": "./lib/index.js" + } +} diff --git a/packages/crypto.base32-hash/src/index.ts b/packages/crypto.base32-hash/src/index.ts new file mode 100644 index 0000000000..45fb1af677 --- /dev/null +++ b/packages/crypto.base32-hash/src/index.ts @@ -0,0 +1,11 @@ +import crypto from 'crypto' +import fs from 'fs' +import { base32 } from 'rfc4648' + +export function createBase32Hash (str: string): string { + return base32.stringify(crypto.createHash('md5').update(str).digest()).replace(/(=+)$/, '').toLowerCase() +} + +export async function createBase32HashFromFile (file: string): Promise { + return createBase32Hash(await fs.promises.readFile(file, 'utf8')) +} diff --git a/packages/crypto.base32-hash/test/index.ts b/packages/crypto.base32-hash/test/index.ts new file mode 100644 index 0000000000..f77e2fa8d0 --- /dev/null +++ b/packages/crypto.base32-hash/test/index.ts @@ -0,0 +1,6 @@ +/// +import { createBase32Hash } from '@pnpm/crypto.base32-hash' + +test('createBase32Hash()', () => { + expect(createBase32Hash('AAA')).toEqual('4h5p7m7gcttmf65hikljmi4gw4') +}) diff --git a/packages/crypto.base32-hash/tsconfig.json b/packages/crypto.base32-hash/tsconfig.json new file mode 100644 index 0000000000..41aa731a88 --- /dev/null +++ b/packages/crypto.base32-hash/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "@pnpm/tsconfig", + "compilerOptions": { + "outDir": "lib", + "rootDir": "src" + }, + "include": [ + "src/**/*.ts", + "../../typings/**/*.d.ts" + ], + "references": [] +} diff --git a/packages/crypto.base32-hash/tsconfig.lint.json b/packages/crypto.base32-hash/tsconfig.lint.json new file mode 100644 index 0000000000..0dc5add6b7 --- /dev/null +++ b/packages/crypto.base32-hash/tsconfig.lint.json @@ -0,0 +1,8 @@ +{ + "extends": "./tsconfig.json", + "include": [ + "src/**/*.ts", + "test/**/*.ts", + "../../typings/**/*.d.ts" + ] +} diff --git a/packages/dependency-path/package.json b/packages/dependency-path/package.json index a2cdf23200..9576f23feb 100644 --- a/packages/dependency-path/package.json +++ b/packages/dependency-path/package.json @@ -31,9 +31,9 @@ }, "homepage": "https://github.com/pnpm/pnpm/blob/main/packages/dependency-path#readme", "dependencies": { + "@pnpm/crypto.base32-hash": "workspace:0.0.0", "@pnpm/types": "workspace:8.1.0", "encode-registry": "^3.0.0", - "rfc4648": "^1.5.1", "semver": "^7.3.4" }, "devDependencies": { diff --git a/packages/dependency-path/src/index.ts b/packages/dependency-path/src/index.ts index 91dda650ff..ee2759d937 100644 --- a/packages/dependency-path/src/index.ts +++ b/packages/dependency-path/src/index.ts @@ -1,7 +1,6 @@ -import crypto from 'crypto' +import { createBase32Hash } from '@pnpm/crypto.base32-hash' import { Registries } from '@pnpm/types' import encodeRegistry from 'encode-registry' -import { base32 } from 'rfc4648' import semver from 'semver' export function isAbsolute (dependencyPath: string) { @@ -163,7 +162,3 @@ export function createPeersFolderSuffix (peers: Array<{name: string, version: st } return `_${folderName}` } - -function createBase32Hash (str: string): string { - return base32.stringify(crypto.createHash('md5').update(str).digest()).replace(/(=+)$/, '').toLowerCase() -} diff --git a/packages/dependency-path/tsconfig.json b/packages/dependency-path/tsconfig.json index 7fa294a1eb..b0ff7d9678 100644 --- a/packages/dependency-path/tsconfig.json +++ b/packages/dependency-path/tsconfig.json @@ -9,6 +9,9 @@ "../../typings/**/*.d.ts" ], "references": [ + { + "path": "../crypto.base32-hash" + }, { "path": "../types" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9c62d640e1..9818eb5d65 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -610,6 +610,15 @@ importers: '@pnpm/logger': 4.0.0 '@pnpm/prepare': link:../../privatePackages/prepare + packages/crypto.base32-hash: + specifiers: + '@pnpm/crypto.base32-hash': workspace:0.0.0 + rfc4648: ^1.5.1 + dependencies: + rfc4648: 1.5.2 + devDependencies: + '@pnpm/crypto.base32-hash': 'link:' + packages/default-reporter: specifiers: '@pnpm/config': workspace:15.2.1 @@ -729,16 +738,16 @@ importers: packages/dependency-path: specifiers: + '@pnpm/crypto.base32-hash': workspace:0.0.0 '@pnpm/types': workspace:8.1.0 '@types/semver': ^7.3.4 dependency-path: workspace:9.1.3 encode-registry: ^3.0.0 - rfc4648: ^1.5.1 semver: ^7.3.4 dependencies: + '@pnpm/crypto.base32-hash': link:../crypto.base32-hash '@pnpm/types': link:../types encode-registry: 3.0.0 - rfc4648: 1.5.2 semver: 7.3.7 devDependencies: '@types/semver': 7.3.9