diff --git a/package-lock.json b/package-lock.json index e54413f0d..e16fd2bd5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10744,7 +10744,9 @@ } }, "node_modules/postcss": { - "version": "8.5.4", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "devOptional": true, "funding": [ { @@ -13809,9 +13811,11 @@ "version": "6.15.2", "license": "MIT", "devDependencies": { - "@vitest/browser": "^3.2.3", - "@vitest/coverage-v8": "^3.2.3", - "vitest": "^3.2.3" + "@vitest/browser": "^3.2.4", + "@vitest/coverage-v8": "^3.2.4", + "vite": "^7.0.0", + "vite-plugin-dts": "^4.5.4", + "vitest": "^3.2.4" } }, "packages/cname-prefix/node_modules/@ampproject/remapping": { @@ -14308,19 +14312,6 @@ "dev": true, "license": "MIT" }, - "packages/cname-prefix/node_modules/@types/chai": { - "version": "5.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/deep-eql": "*" - } - }, - "packages/cname-prefix/node_modules/@types/deep-eql": { - "version": "4.0.2", - "dev": true, - "license": "MIT" - }, "packages/cname-prefix/node_modules/@types/node": { "version": "22.15.30", "dev": true, @@ -14332,14 +14323,16 @@ } }, "packages/cname-prefix/node_modules/@vitest/browser": { - "version": "3.2.3", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-3.2.4.tgz", + "integrity": "sha512-tJxiPrWmzH8a+w9nLKlQMzAKX/7VjFs50MWgcAj7p9XQ7AQ9/35fByFYptgPELyLw+0aixTnC4pUWV+APcZ/kw==", "dev": true, "license": "MIT", "dependencies": { "@testing-library/dom": "^10.4.0", "@testing-library/user-event": "^14.6.1", - "@vitest/mocker": "3.2.3", - "@vitest/utils": "3.2.3", + "@vitest/mocker": "3.2.4", + "@vitest/utils": "3.2.4", "magic-string": "^0.30.17", "sirv": "^3.0.1", "tinyrainbow": "^2.0.0", @@ -14350,7 +14343,7 @@ }, "peerDependencies": { "playwright": "*", - "vitest": "3.2.3", + "vitest": "3.2.4", "webdriverio": "^7.0.0 || ^8.0.0 || ^9.0.0" }, "peerDependenciesMeta": { @@ -14366,7 +14359,9 @@ } }, "packages/cname-prefix/node_modules/@vitest/coverage-v8": { - "version": "3.2.3", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.4.tgz", + "integrity": "sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14388,8 +14383,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "3.2.3", - "vitest": "3.2.3" + "@vitest/browser": "3.2.4", + "vitest": "3.2.4" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -14397,27 +14392,14 @@ } } }, - "packages/cname-prefix/node_modules/@vitest/expect": { - "version": "3.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "^5.2.2", - "@vitest/spy": "3.2.3", - "@vitest/utils": "3.2.3", - "chai": "^5.2.0", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, "packages/cname-prefix/node_modules/@vitest/mocker": { - "version": "3.2.3", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "3.2.3", + "@vitest/spy": "3.2.4", "estree-walker": "^3.0.3", "magic-string": "^0.30.17" }, @@ -14437,67 +14419,6 @@ } } }, - "packages/cname-prefix/node_modules/@vitest/pretty-format": { - "version": "3.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "packages/cname-prefix/node_modules/@vitest/runner": { - "version": "3.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/utils": "3.2.3", - "pathe": "^2.0.3", - "strip-literal": "^3.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "packages/cname-prefix/node_modules/@vitest/snapshot": { - "version": "3.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "3.2.3", - "magic-string": "^0.30.17", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "packages/cname-prefix/node_modules/@vitest/spy": { - "version": "3.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyspy": "^4.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "packages/cname-prefix/node_modules/@vitest/utils": { - "version": "3.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "3.2.3", - "loupe": "^3.1.3", - "tinyrainbow": "^2.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, "packages/cname-prefix/node_modules/ansi-regex": { "version": "5.0.1", "dev": true, @@ -14528,14 +14449,6 @@ "dequal": "^2.0.3" } }, - "packages/cname-prefix/node_modules/assertion-error": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, "packages/cname-prefix/node_modules/ast-v8-to-istanbul": { "version": "0.3.3", "dev": true, @@ -14575,29 +14488,6 @@ "optional": true, "peer": true }, - "packages/cname-prefix/node_modules/cac": { - "version": "6.7.14", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "packages/cname-prefix/node_modules/chai": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^2.0.1", - "check-error": "^2.1.1", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, "packages/cname-prefix/node_modules/chalk": { "version": "4.1.2", "dev": true, @@ -14613,14 +14503,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "packages/cname-prefix/node_modules/check-error": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - } - }, "packages/cname-prefix/node_modules/color-convert": { "version": "2.0.1", "dev": true, @@ -14673,14 +14555,6 @@ } } }, - "packages/cname-prefix/node_modules/deep-eql": { - "version": "5.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "packages/cname-prefix/node_modules/dequal": { "version": "2.0.3", "dev": true, @@ -14704,11 +14578,6 @@ "dev": true, "license": "MIT" }, - "packages/cname-prefix/node_modules/es-module-lexer": { - "version": "1.7.0", - "dev": true, - "license": "MIT" - }, "packages/cname-prefix/node_modules/estree-walker": { "version": "3.0.3", "dev": true, @@ -14726,7 +14595,9 @@ } }, "packages/cname-prefix/node_modules/fdir": { - "version": "6.4.5", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", "dev": true, "license": "MIT", "peerDependencies": { @@ -14992,19 +14863,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "packages/cname-prefix/node_modules/pathe": { - "version": "2.0.3", - "dev": true, - "license": "MIT" - }, - "packages/cname-prefix/node_modules/pathval": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.16" - } - }, "packages/cname-prefix/node_modules/picocolors": { "version": "1.1.1", "dev": true, @@ -15021,50 +14879,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "packages/cname-prefix/node_modules/postcss": { - "version": "8.5.4", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "packages/cname-prefix/node_modules/postcss/node_modules/nanoid": { - "version": "3.3.11", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "packages/cname-prefix/node_modules/pretty-format": { "version": "27.5.1", "dev": true, @@ -15318,17 +15132,6 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "packages/cname-prefix/node_modules/strip-literal": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^9.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "packages/cname-prefix/node_modules/supports-color": { "version": "7.2.0", "dev": true, @@ -15405,14 +15208,6 @@ "node": ">=14.0.0" } }, - "packages/cname-prefix/node_modules/tinyspy": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, "packages/cname-prefix/node_modules/totalist": { "version": "3.0.1", "dev": true, @@ -15429,22 +15224,24 @@ "peer": true }, "packages/cname-prefix/node_modules/vite": { - "version": "6.3.5", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.0.tgz", + "integrity": "sha512-ixXJB1YRgDIw2OszKQS9WxGHKwLdCsbQNkpJN171udl6szi/rIySHL6/Os3s2+oE4P/FLD4dxg4mD7Wust+u5g==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.25.0", - "fdir": "^6.4.4", + "fdir": "^6.4.6", "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "node": "^20.19.0 || >=22.12.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -15453,14 +15250,14 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", - "less": "*", + "less": "^4.0.0", "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" @@ -15501,40 +15298,48 @@ } } }, - "packages/cname-prefix/node_modules/vite-node": { - "version": "3.2.3", + "packages/cname-prefix/node_modules/vite-plugin-dts": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/vite-plugin-dts/-/vite-plugin-dts-4.5.4.tgz", + "integrity": "sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==", "dev": true, "license": "MIT", "dependencies": { - "cac": "^6.7.14", - "debug": "^4.4.1", - "es-module-lexer": "^1.7.0", - "pathe": "^2.0.3", - "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" - }, - "bin": { - "vite-node": "vite-node.mjs" + "@microsoft/api-extractor": "^7.50.1", + "@rollup/pluginutils": "^5.1.4", + "@volar/typescript": "^2.4.11", + "@vue/language-core": "2.2.0", + "compare-versions": "^6.1.1", + "debug": "^4.4.0", + "kolorist": "^1.8.0", + "local-pkg": "^1.0.0", + "magic-string": "^0.30.17" }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "peerDependencies": { + "typescript": "*", + "vite": "*" }, - "funding": { - "url": "https://opencollective.com/vitest" + "peerDependenciesMeta": { + "vite": { + "optional": true + } } }, "packages/cname-prefix/node_modules/vitest": { - "version": "3.2.3", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", + "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", "dev": true, "license": "MIT", "dependencies": { "@types/chai": "^5.2.2", - "@vitest/expect": "3.2.3", - "@vitest/mocker": "3.2.3", - "@vitest/pretty-format": "^3.2.3", - "@vitest/runner": "3.2.3", - "@vitest/snapshot": "3.2.3", - "@vitest/spy": "3.2.3", - "@vitest/utils": "3.2.3", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@vitest/pretty-format": "^3.2.4", + "@vitest/runner": "3.2.4", + "@vitest/snapshot": "3.2.4", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", "chai": "^5.2.0", "debug": "^4.4.1", "expect-type": "^1.2.1", @@ -15545,10 +15350,10 @@ "tinybench": "^2.9.0", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.14", - "tinypool": "^1.1.0", + "tinypool": "^1.1.1", "tinyrainbow": "^2.0.0", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", - "vite-node": "3.2.3", + "vite-node": "3.2.4", "why-is-node-running": "^2.3.0" }, "bin": { @@ -15564,8 +15369,8 @@ "@edge-runtime/vm": "*", "@types/debug": "^4.1.12", "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "@vitest/browser": "3.2.3", - "@vitest/ui": "3.2.3", + "@vitest/browser": "3.2.4", + "@vitest/ui": "3.2.4", "happy-dom": "*", "jsdom": "*" }, @@ -15726,7 +15531,7 @@ "@vitest/coverage-v8": "^3.2.4", "playwright": "^1.41.2", "raw-body": "^2.5.2", - "vite": "^6.3.5", + "vite": "^7.0.0", "vitest": "^3.2.4" } }, @@ -15991,24 +15796,24 @@ } }, "packages/image-shrink/node_modules/vite": { - "version": "6.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", - "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.0.tgz", + "integrity": "sha512-ixXJB1YRgDIw2OszKQS9WxGHKwLdCsbQNkpJN171udl6szi/rIySHL6/Os3s2+oE4P/FLD4dxg4mD7Wust+u5g==", "dev": true, "license": "MIT", "dependencies": { "esbuild": "^0.25.0", - "fdir": "^6.4.4", + "fdir": "^6.4.6", "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "node": "^20.19.0 || >=22.12.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -16017,14 +15822,14 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", - "less": "*", + "less": "^4.0.0", "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" @@ -16150,7 +15955,7 @@ "@vitest/coverage-v8": "^3.2.4", "size-limit": "^11.2.0", "typescript": "~5.7.2", - "vite": "^6.3.5", + "vite": "^7.0.0", "vitest": "^3.2.4", "zod": "^3.24.3" } @@ -16393,23 +16198,24 @@ } }, "packages/quality-insights/node_modules/vite": { - "version": "6.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", - "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.0.tgz", + "integrity": "sha512-ixXJB1YRgDIw2OszKQS9WxGHKwLdCsbQNkpJN171udl6szi/rIySHL6/Os3s2+oE4P/FLD4dxg4mD7Wust+u5g==", "devOptional": true, + "license": "MIT", "dependencies": { "esbuild": "^0.25.0", - "fdir": "^6.4.4", + "fdir": "^6.4.6", "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "node": "^20.19.0 || >=22.12.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -16418,14 +16224,14 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", - "less": "*", + "less": "^4.0.0", "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" diff --git a/packages/cname-prefix/package.json b/packages/cname-prefix/package.json index 45cee0a2f..817e52231 100644 --- a/packages/cname-prefix/package.json +++ b/packages/cname-prefix/package.json @@ -8,8 +8,16 @@ "types": "./dist/index.d.ts", "exports": { ".": { - "import": "./dist/esm/index.browser.mjs", - "require": "./dist/cjs/index.browser.cjs" + "import": "./dist/index.js", + "require": "./dist/index.cjs" + }, + "./async": { + "import": "./dist/async.js", + "require": "./dist/async.cjs" + }, + "./sync": { + "import": "./dist/sync.js", + "require": "./dist/sync.cjs" } }, "sideEffects": false, @@ -24,9 +32,7 @@ "test": "npx playwright install-deps chromium && vitest --run --coverage", "test:watch": "npx playwright install-deps chromium && vitest", "prebuild": "npm run clean", - "build": "npm run build:types && npm run build:compile", - "build:types": "dts-bundle-generator --project tsconfig.dts.json -o dist/index.d.ts src/index.ts", - "build:compile": "rollup -c" + "build": "tsc && vite build" }, "repository": { "type": "git", @@ -46,8 +52,10 @@ "signature" ], "devDependencies": { - "@vitest/browser": "^3.2.3", - "@vitest/coverage-v8": "^3.2.3", - "vitest": "^3.2.3" + "@vitest/browser": "^3.2.4", + "@vitest/coverage-v8": "^3.2.4", + "vite": "^7.0.0", + "vite-plugin-dts": "^4.5.4", + "vitest": "^3.2.4" } } diff --git a/packages/cname-prefix/rollup.config.js b/packages/cname-prefix/rollup.config.js deleted file mode 100644 index 68b2bf908..000000000 --- a/packages/cname-prefix/rollup.config.js +++ /dev/null @@ -1,12 +0,0 @@ -import { - createRollupConfig, - RollupTargetEnv -} from '../../createRollupConfig.js' -import * as url from 'url' - -const __dirname = url.fileURLToPath(new URL('.', import.meta.url)) - -const config = ({ targetEnv }) => - createRollupConfig({ targetEnv, cwd: __dirname }) - -export default [...config({ targetEnv: RollupTargetEnv.BROWSER })] diff --git a/packages/cname-prefix/src/async/getCnamePrefix.test.ts b/packages/cname-prefix/src/async/getCnamePrefix.test.ts new file mode 100644 index 000000000..d1af2a5db --- /dev/null +++ b/packages/cname-prefix/src/async/getCnamePrefix.test.ts @@ -0,0 +1,9 @@ +import { getCnamePrefixAsync } from './getCnamePrefixAsync' +import { describe, it, expect } from 'vitest' + +describe('getCnamePrefixAsync', () => { + it('should generate a CNAME prefix from a public key', async () => { + expect(await getCnamePrefixAsync('demopublickey')).toBe('1s4oyld5dc') + expect(await getCnamePrefixAsync('c8c237984266090ff9b8')).toBe('127mbvwq3b') + }) +}) diff --git a/packages/cname-prefix/src/async/getCnamePrefixAsync.ts b/packages/cname-prefix/src/async/getCnamePrefixAsync.ts new file mode 100644 index 000000000..8f95dcb70 --- /dev/null +++ b/packages/cname-prefix/src/async/getCnamePrefixAsync.ts @@ -0,0 +1,10 @@ +import { base36Encode } from '../common/base36Encode' +import { sha256EncodeAsync } from './sha256EncodeAsync' + +const CNAME_PREFIX_LEN = 10 + +export const getCnamePrefixAsync = async (publicKey: string) => { + const sha256HexInt = await sha256EncodeAsync(publicKey) + const base36 = base36Encode(sha256HexInt) + return base36.slice(0, CNAME_PREFIX_LEN) +} diff --git a/packages/cname-prefix/src/getPrefixedCdnBase.test.ts b/packages/cname-prefix/src/async/getPrefixedCdnBaseAsync.test.ts similarity index 61% rename from packages/cname-prefix/src/getPrefixedCdnBase.test.ts rename to packages/cname-prefix/src/async/getPrefixedCdnBaseAsync.test.ts index 2ad086462..eabcb3a3f 100644 --- a/packages/cname-prefix/src/getPrefixedCdnBase.test.ts +++ b/packages/cname-prefix/src/async/getPrefixedCdnBaseAsync.test.ts @@ -1,13 +1,13 @@ -import { getPrefixedCdnBase } from './getPrefixedCdnBase' +import { getPrefixedCdnBaseAsync } from './getPrefixedCdnBaseAsync' import { describe, it, expect } from 'vitest' -describe('getPrefixedCdnBase', () => { +describe('getPrefixedCdnBaseAsync', () => { it('should return the prefixed CDN base URL', async () => { const publicKey = 'demopublickey' const cdnBase = 'https://ucarecdn.com' const expected = 'https://1s4oyld5dc.ucarecdn.com' - const result = await getPrefixedCdnBase(publicKey, cdnBase) + const result = await getPrefixedCdnBaseAsync(publicKey, cdnBase) expect(result).toBe(expected) }) }) diff --git a/packages/cname-prefix/src/async/getPrefixedCdnBaseAsync.ts b/packages/cname-prefix/src/async/getPrefixedCdnBaseAsync.ts new file mode 100644 index 000000000..6b7981afc --- /dev/null +++ b/packages/cname-prefix/src/async/getPrefixedCdnBaseAsync.ts @@ -0,0 +1,10 @@ +import { addPrefixToCdnBase } from '../common/addPrefixToCdnBase' +import { getCnamePrefixAsync } from './getCnamePrefixAsync' + +export const getPrefixedCdnBaseAsync = async ( + publicKey: string, + cdnBase: string +) => { + const prefix = await getCnamePrefixAsync(publicKey) + return addPrefixToCdnBase(prefix, cdnBase) +} diff --git a/packages/cname-prefix/src/async/index.ts b/packages/cname-prefix/src/async/index.ts new file mode 100644 index 000000000..343d55c24 --- /dev/null +++ b/packages/cname-prefix/src/async/index.ts @@ -0,0 +1 @@ +export { getPrefixedCdnBaseAsync } from './getPrefixedCdnBaseAsync' diff --git a/packages/cname-prefix/src/async/sha256EncodeAsync.test.ts b/packages/cname-prefix/src/async/sha256EncodeAsync.test.ts new file mode 100644 index 000000000..0ba72523b --- /dev/null +++ b/packages/cname-prefix/src/async/sha256EncodeAsync.test.ts @@ -0,0 +1,8 @@ +import { sha256EncodeAsync } from './sha256EncodeAsync' +import { describe, it, expect } from 'vitest' + +describe('sha256EncodeAsync', () => { + it('should encode a string to a SHA-256 hash and return it as an base 16 integer', async () => { + expect(await sha256EncodeAsync('demopublickey')).toBe(3.2328368644851214e76) + }) +}) diff --git a/packages/cname-prefix/src/sha256Encode.ts b/packages/cname-prefix/src/async/sha256EncodeAsync.ts similarity index 82% rename from packages/cname-prefix/src/sha256Encode.ts rename to packages/cname-prefix/src/async/sha256EncodeAsync.ts index 622293920..d9ab8c189 100644 --- a/packages/cname-prefix/src/sha256Encode.ts +++ b/packages/cname-prefix/src/async/sha256EncodeAsync.ts @@ -1,4 +1,4 @@ -export const sha256Encode = async (data: string): Promise => { +export const sha256EncodeAsync = async (data: string): Promise => { const msgUint8 = new TextEncoder().encode(data) const hashBuffer = await window.crypto.subtle.digest('SHA-256', msgUint8) const hashArray = Array.from(new Uint8Array(hashBuffer)) diff --git a/packages/cname-prefix/src/addPrefixToCdnBase.test.ts b/packages/cname-prefix/src/common/addPrefixToCdnBase.test.ts similarity index 100% rename from packages/cname-prefix/src/addPrefixToCdnBase.test.ts rename to packages/cname-prefix/src/common/addPrefixToCdnBase.test.ts diff --git a/packages/cname-prefix/src/addPrefixToCdnBase.ts b/packages/cname-prefix/src/common/addPrefixToCdnBase.ts similarity index 100% rename from packages/cname-prefix/src/addPrefixToCdnBase.ts rename to packages/cname-prefix/src/common/addPrefixToCdnBase.ts diff --git a/packages/cname-prefix/src/base36Encode.test.ts b/packages/cname-prefix/src/common/base36Encode.test.ts similarity index 100% rename from packages/cname-prefix/src/base36Encode.test.ts rename to packages/cname-prefix/src/common/base36Encode.test.ts diff --git a/packages/cname-prefix/src/base36Encode.ts b/packages/cname-prefix/src/common/base36Encode.ts similarity index 100% rename from packages/cname-prefix/src/base36Encode.ts rename to packages/cname-prefix/src/common/base36Encode.ts diff --git a/packages/cname-prefix/src/getCnamePrefix.test.ts b/packages/cname-prefix/src/getCnamePrefix.test.ts deleted file mode 100644 index ccdc8e82d..000000000 --- a/packages/cname-prefix/src/getCnamePrefix.test.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { getCnamePrefix } from './getCnamePrefix' -import { describe, it, expect } from 'vitest' - -describe('getCnamePrefix', () => { - it('should generate a CNAME prefix from a public key', async () => { - expect(await getCnamePrefix('demopublickey')).toBe('1s4oyld5dc') - expect(await getCnamePrefix('c8c237984266090ff9b8')).toBe('127mbvwq3b') - }) -}) diff --git a/packages/cname-prefix/src/getCnamePrefix.ts b/packages/cname-prefix/src/getCnamePrefix.ts deleted file mode 100644 index 8a08f946d..000000000 --- a/packages/cname-prefix/src/getCnamePrefix.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { base36Encode } from './base36Encode' -import { sha256Encode } from './sha256Encode' - -const CNAME_PREFIX_LEN = 10 - -export const getCnamePrefix = async (publicKey: string) => { - const sha256HexInt = await sha256Encode(publicKey) - const base36 = base36Encode(sha256HexInt) - return base36.slice(0, CNAME_PREFIX_LEN) -} diff --git a/packages/cname-prefix/src/getPrefixedCdnBase.ts b/packages/cname-prefix/src/getPrefixedCdnBase.ts deleted file mode 100644 index 5b84c7e37..000000000 --- a/packages/cname-prefix/src/getPrefixedCdnBase.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { addPrefixToCdnBase } from './addPrefixToCdnBase' -import { getCnamePrefix } from './getCnamePrefix' - -export const getPrefixedCdnBase = async ( - publicKey: string, - cdnBase: string -) => { - const prefix = await getCnamePrefix(publicKey) - return addPrefixToCdnBase(prefix, cdnBase) -} diff --git a/packages/cname-prefix/src/index.ts b/packages/cname-prefix/src/index.ts index 3f80919d5..b1d7f17c2 100644 --- a/packages/cname-prefix/src/index.ts +++ b/packages/cname-prefix/src/index.ts @@ -1 +1,2 @@ -export { getPrefixedCdnBase } from './getPrefixedCdnBase' +export { getPrefixedCdnBaseAsync } from './async' +export { getPrefixedCdnBaseSync } from './sync' diff --git a/packages/cname-prefix/src/sha256Encode.test.ts b/packages/cname-prefix/src/sha256Encode.test.ts deleted file mode 100644 index 102608d9a..000000000 --- a/packages/cname-prefix/src/sha256Encode.test.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { sha256Encode } from './sha256Encode' -import { describe, it, expect } from 'vitest' - -describe('sha256Encode', () => { - it('should encode a string to a SHA-256 hash and return it as an base 16 integer', async () => { - expect(await sha256Encode('demopublickey')).toBe(3.2328368644851214e76) - }) -}) diff --git a/packages/cname-prefix/src/sync/Sha256.ts b/packages/cname-prefix/src/sync/Sha256.ts new file mode 100644 index 000000000..21606a861 --- /dev/null +++ b/packages/cname-prefix/src/sync/Sha256.ts @@ -0,0 +1,332 @@ +/** + * [js-sha256]{@link https://github.com/emn178/js-sha256} + * + * @license MIT + * @version 0.11.1 + * @author Chen, Yi-Cyuan [emn178@gmail.com] + * @copyright Chen, Yi-Cyuan 2014-2025 + */ + +const HEX_CHARS: string[] = '0123456789abcdef'.split('') +const EXTRA: number[] = [-2147483648, 8388608, 32768, 128] +const SHIFT: number[] = [24, 16, 8, 0] +const K: number[] = [ + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, + 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, + 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, + 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, + 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, + 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, + 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, + 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, + 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 +] + +export class Sha256 { + blocks: number[] + h0: number + h1: number + h2: number + h3: number + h4: number + h5: number + h6: number + h7: number + block: number + start: number + bytes: number + hBytes: number + first: boolean + lastByteIndex: number + + constructor() { + this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + + // 256 + this.h0 = 0x6a09e667 + this.h1 = 0xbb67ae85 + this.h2 = 0x3c6ef372 + this.h3 = 0xa54ff53a + this.h4 = 0x510e527f + this.h5 = 0x9b05688c + this.h6 = 0x1f83d9ab + this.h7 = 0x5be0cd19 + + this.block = this.start = this.bytes = this.hBytes = 0 + this.first = true + this.lastByteIndex = 0 + } + + update(message: string): this { + let code: number + let index = 0 + let i: number + const length = message.length + const blocks = this.blocks + while (index < length) { + for (i = this.start; index < length && i < 64; ++index) { + code = message.charCodeAt(index) + if (code < 0x80) { + blocks[i >>> 2] |= code << SHIFT[i++ & 3] + } else if (code < 0x800) { + blocks[i >>> 2] |= (0xc0 | (code >>> 6)) << SHIFT[i++ & 3] + blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3] + } else if (code < 0xd800 || code >= 0xe000) { + blocks[i >>> 2] |= (0xe0 | (code >>> 12)) << SHIFT[i++ & 3] + blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3] + blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3] + } else { + code = + 0x10000 + + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff)) + blocks[i >>> 2] |= (0xf0 | (code >>> 18)) << SHIFT[i++ & 3] + blocks[i >>> 2] |= (0x80 | ((code >>> 12) & 0x3f)) << SHIFT[i++ & 3] + blocks[i >>> 2] |= (0x80 | ((code >>> 6) & 0x3f)) << SHIFT[i++ & 3] + blocks[i >>> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3] + } + } + + this.lastByteIndex = i + this.bytes += i - this.start + if (i >= 64) { + this.block = blocks[16] + this.start = i - 64 + this.hash() + } else { + this.start = i + } + } + if (this.bytes > 4294967295) { + this.hBytes += (this.bytes / 4294967296) << 0 + this.bytes = this.bytes % 4294967296 + } + return this + } + + finalize(): void { + const blocks = this.blocks + const i = this.lastByteIndex + blocks[16] = this.block + blocks[i >>> 2] |= EXTRA[i & 3] + this.block = blocks[16] + if (i >= 56) { + blocks[0] = this.block + blocks[16] = + blocks[1] = + blocks[2] = + blocks[3] = + blocks[4] = + blocks[5] = + blocks[6] = + blocks[7] = + blocks[8] = + blocks[9] = + blocks[10] = + blocks[11] = + blocks[12] = + blocks[13] = + blocks[14] = + blocks[15] = + 0 + } + blocks[14] = (this.hBytes << 3) | (this.bytes >>> 29) + blocks[15] = this.bytes << 3 + this.hash() + } + + hash(): void { + let a = this.h0, + b = this.h1, + c = this.h2, + d = this.h3, + e = this.h4, + f = this.h5, + g = this.h6, + h = this.h7, + j: number, + s0: number, + s1: number, + maj: number, + t1: number, + t2: number, + ch: number, + ab: number, + da: number, + cd: number, + bc: number + + const blocks = this.blocks + + for (j = 16; j < 64; ++j) { + // rightrotate + t1 = blocks[j - 15] + s0 = ((t1 >>> 7) | (t1 << 25)) ^ ((t1 >>> 18) | (t1 << 14)) ^ (t1 >>> 3) + t1 = blocks[j - 2] + s1 = ((t1 >>> 17) | (t1 << 15)) ^ ((t1 >>> 19) | (t1 << 13)) ^ (t1 >>> 10) + blocks[j] = (blocks[j - 16] + s0 + blocks[j - 7] + s1) << 0 + } + + bc = b & c + for (j = 0; j < 64; j += 4) { + if (this.first) { + ab = 704751109 + t1 = blocks[0] - 210244248 + h = (t1 - 1521486534) << 0 + d = (t1 + 143694565) << 0 + this.first = false + } else { + s0 = + ((a >>> 2) | (a << 30)) ^ + ((a >>> 13) | (a << 19)) ^ + ((a >>> 22) | (a << 10)) + s1 = + ((e >>> 6) | (e << 26)) ^ + ((e >>> 11) | (e << 21)) ^ + ((e >>> 25) | (e << 7)) + ab = a & b + maj = ab ^ (a & c) ^ bc + ch = (e & f) ^ (~e & g) + t1 = h + s1 + ch + K[j] + blocks[j] + t2 = s0 + maj + h = (d + t1) << 0 + d = (t1 + t2) << 0 + } + s0 = + ((d >>> 2) | (d << 30)) ^ + ((d >>> 13) | (d << 19)) ^ + ((d >>> 22) | (d << 10)) + s1 = + ((h >>> 6) | (h << 26)) ^ + ((h >>> 11) | (h << 21)) ^ + ((h >>> 25) | (h << 7)) + da = d & a + maj = da ^ (d & b) ^ ab + ch = (h & e) ^ (~h & f) + t1 = g + s1 + ch + K[j + 1] + blocks[j + 1] + t2 = s0 + maj + g = (c + t1) << 0 + c = (t1 + t2) << 0 + s0 = + ((c >>> 2) | (c << 30)) ^ + ((c >>> 13) | (c << 19)) ^ + ((c >>> 22) | (c << 10)) + s1 = + ((g >>> 6) | (g << 26)) ^ + ((g >>> 11) | (g << 21)) ^ + ((g >>> 25) | (g << 7)) + cd = c & d + maj = cd ^ (c & a) ^ da + ch = (g & h) ^ (~g & e) + t1 = f + s1 + ch + K[j + 2] + blocks[j + 2] + t2 = s0 + maj + f = (b + t1) << 0 + b = (t1 + t2) << 0 + s0 = + ((b >>> 2) | (b << 30)) ^ + ((b >>> 13) | (b << 19)) ^ + ((b >>> 22) | (b << 10)) + s1 = + ((f >>> 6) | (f << 26)) ^ + ((f >>> 11) | (f << 21)) ^ + ((f >>> 25) | (f << 7)) + bc = b & c + maj = bc ^ (b & d) ^ cd + ch = (f & g) ^ (~f & h) + t1 = e + s1 + ch + K[j + 3] + blocks[j + 3] + t2 = s0 + maj + e = (a + t1) << 0 + a = (t1 + t2) << 0 + } + + this.h0 = (this.h0 + a) << 0 + this.h1 = (this.h1 + b) << 0 + this.h2 = (this.h2 + c) << 0 + this.h3 = (this.h3 + d) << 0 + this.h4 = (this.h4 + e) << 0 + this.h5 = (this.h5 + f) << 0 + this.h6 = (this.h6 + g) << 0 + this.h7 = (this.h7 + h) << 0 + } + + hex(): string { + this.finalize() + + const h0 = this.h0, + h1 = this.h1, + h2 = this.h2, + h3 = this.h3, + h4 = this.h4, + h5 = this.h5, + h6 = this.h6, + h7 = this.h7 + + const hex = + HEX_CHARS[(h0 >>> 28) & 0x0f] + + HEX_CHARS[(h0 >>> 24) & 0x0f] + + HEX_CHARS[(h0 >>> 20) & 0x0f] + + HEX_CHARS[(h0 >>> 16) & 0x0f] + + HEX_CHARS[(h0 >>> 12) & 0x0f] + + HEX_CHARS[(h0 >>> 8) & 0x0f] + + HEX_CHARS[(h0 >>> 4) & 0x0f] + + HEX_CHARS[h0 & 0x0f] + + HEX_CHARS[(h1 >>> 28) & 0x0f] + + HEX_CHARS[(h1 >>> 24) & 0x0f] + + HEX_CHARS[(h1 >>> 20) & 0x0f] + + HEX_CHARS[(h1 >>> 16) & 0x0f] + + HEX_CHARS[(h1 >>> 12) & 0x0f] + + HEX_CHARS[(h1 >>> 8) & 0x0f] + + HEX_CHARS[(h1 >>> 4) & 0x0f] + + HEX_CHARS[h1 & 0x0f] + + HEX_CHARS[(h2 >>> 28) & 0x0f] + + HEX_CHARS[(h2 >>> 24) & 0x0f] + + HEX_CHARS[(h2 >>> 20) & 0x0f] + + HEX_CHARS[(h2 >>> 16) & 0x0f] + + HEX_CHARS[(h2 >>> 12) & 0x0f] + + HEX_CHARS[(h2 >>> 8) & 0x0f] + + HEX_CHARS[(h2 >>> 4) & 0x0f] + + HEX_CHARS[h2 & 0x0f] + + HEX_CHARS[(h3 >>> 28) & 0x0f] + + HEX_CHARS[(h3 >>> 24) & 0x0f] + + HEX_CHARS[(h3 >>> 20) & 0x0f] + + HEX_CHARS[(h3 >>> 16) & 0x0f] + + HEX_CHARS[(h3 >>> 12) & 0x0f] + + HEX_CHARS[(h3 >>> 8) & 0x0f] + + HEX_CHARS[(h3 >>> 4) & 0x0f] + + HEX_CHARS[h3 & 0x0f] + + HEX_CHARS[(h4 >>> 28) & 0x0f] + + HEX_CHARS[(h4 >>> 24) & 0x0f] + + HEX_CHARS[(h4 >>> 20) & 0x0f] + + HEX_CHARS[(h4 >>> 16) & 0x0f] + + HEX_CHARS[(h4 >>> 12) & 0x0f] + + HEX_CHARS[(h4 >>> 8) & 0x0f] + + HEX_CHARS[(h4 >>> 4) & 0x0f] + + HEX_CHARS[h4 & 0x0f] + + HEX_CHARS[(h5 >>> 28) & 0x0f] + + HEX_CHARS[(h5 >>> 24) & 0x0f] + + HEX_CHARS[(h5 >>> 20) & 0x0f] + + HEX_CHARS[(h5 >>> 16) & 0x0f] + + HEX_CHARS[(h5 >>> 12) & 0x0f] + + HEX_CHARS[(h5 >>> 8) & 0x0f] + + HEX_CHARS[(h5 >>> 4) & 0x0f] + + HEX_CHARS[h5 & 0x0f] + + HEX_CHARS[(h6 >>> 28) & 0x0f] + + HEX_CHARS[(h6 >>> 24) & 0x0f] + + HEX_CHARS[(h6 >>> 20) & 0x0f] + + HEX_CHARS[(h6 >>> 16) & 0x0f] + + HEX_CHARS[(h6 >>> 12) & 0x0f] + + HEX_CHARS[(h6 >>> 8) & 0x0f] + + HEX_CHARS[(h6 >>> 4) & 0x0f] + + HEX_CHARS[h6 & 0x0f] + + HEX_CHARS[(h7 >>> 28) & 0x0f] + + HEX_CHARS[(h7 >>> 24) & 0x0f] + + HEX_CHARS[(h7 >>> 20) & 0x0f] + + HEX_CHARS[(h7 >>> 16) & 0x0f] + + HEX_CHARS[(h7 >>> 12) & 0x0f] + + HEX_CHARS[(h7 >>> 8) & 0x0f] + + HEX_CHARS[(h7 >>> 4) & 0x0f] + + HEX_CHARS[h7 & 0x0f] + return hex + } +} diff --git a/packages/cname-prefix/src/sync/getCnamePrefixSync.test.ts b/packages/cname-prefix/src/sync/getCnamePrefixSync.test.ts new file mode 100644 index 000000000..0739a5ebd --- /dev/null +++ b/packages/cname-prefix/src/sync/getCnamePrefixSync.test.ts @@ -0,0 +1,9 @@ +import { getCnamePrefixSync } from './getCnamePrefixSync' +import { describe, it, expect } from 'vitest' + +describe('getCnamePrefixSync', () => { + it('should generate a CNAME prefix from a public key', () => { + expect(getCnamePrefixSync('demopublickey')).toBe('1s4oyld5dc') + expect(getCnamePrefixSync('c8c237984266090ff9b8')).toBe('127mbvwq3b') + }) +}) diff --git a/packages/cname-prefix/src/sync/getCnamePrefixSync.ts b/packages/cname-prefix/src/sync/getCnamePrefixSync.ts new file mode 100644 index 000000000..b014b1fb7 --- /dev/null +++ b/packages/cname-prefix/src/sync/getCnamePrefixSync.ts @@ -0,0 +1,10 @@ +import { base36Encode } from '../common/base36Encode' +import { sha256EncodeSync } from './sha256EncodeSync' + +const CNAME_PREFIX_LEN = 10 + +export const getCnamePrefixSync = (publicKey: string) => { + const sha256HexInt = sha256EncodeSync(publicKey) + const base36 = base36Encode(sha256HexInt) + return base36.slice(0, CNAME_PREFIX_LEN) +} diff --git a/packages/cname-prefix/src/sync/getPrefixedCdnBaseSync.test.ts b/packages/cname-prefix/src/sync/getPrefixedCdnBaseSync.test.ts new file mode 100644 index 000000000..34e0b04ca --- /dev/null +++ b/packages/cname-prefix/src/sync/getPrefixedCdnBaseSync.test.ts @@ -0,0 +1,13 @@ +import { getPrefixedCdnBaseSync } from './getPrefixedCdnBaseSync' +import { describe, it, expect } from 'vitest' + +describe('getPrefixedCdnBaseSync', () => { + it('should return the prefixed CDN base URL', () => { + const publicKey = 'demopublickey' + const cdnBase = 'https://ucarecdn.com' + const expected = 'https://1s4oyld5dc.ucarecdn.com' + + const result = getPrefixedCdnBaseSync(publicKey, cdnBase) + expect(result).toBe(expected) + }) +}) diff --git a/packages/cname-prefix/src/sync/getPrefixedCdnBaseSync.ts b/packages/cname-prefix/src/sync/getPrefixedCdnBaseSync.ts new file mode 100644 index 000000000..e8c5dd33c --- /dev/null +++ b/packages/cname-prefix/src/sync/getPrefixedCdnBaseSync.ts @@ -0,0 +1,7 @@ +import { addPrefixToCdnBase } from '../common/addPrefixToCdnBase' +import { getCnamePrefixSync } from './getCnamePrefixSync' + +export const getPrefixedCdnBaseSync = (publicKey: string, cdnBase: string) => { + const prefix = getCnamePrefixSync(publicKey) + return addPrefixToCdnBase(prefix, cdnBase) +} diff --git a/packages/cname-prefix/src/sync/index.ts b/packages/cname-prefix/src/sync/index.ts new file mode 100644 index 000000000..4cc509ea7 --- /dev/null +++ b/packages/cname-prefix/src/sync/index.ts @@ -0,0 +1 @@ +export { getPrefixedCdnBaseSync } from './getPrefixedCdnBaseSync' diff --git a/packages/cname-prefix/src/sync/sha256EncodeSync.test.ts b/packages/cname-prefix/src/sync/sha256EncodeSync.test.ts new file mode 100644 index 000000000..de7697f24 --- /dev/null +++ b/packages/cname-prefix/src/sync/sha256EncodeSync.test.ts @@ -0,0 +1,8 @@ +import { sha256EncodeSync } from './sha256EncodeSync' +import { describe, it, expect } from 'vitest' + +describe('sha256EncodeSync', () => { + it('should encode a string to a SHA-256 hash and return it as an base 16 integer', async () => { + expect(sha256EncodeSync('demopublickey')).toBe(3.2328368644851214e76) + }) +}) diff --git a/packages/cname-prefix/src/sync/sha256EncodeSync.ts b/packages/cname-prefix/src/sync/sha256EncodeSync.ts new file mode 100644 index 000000000..636871cb1 --- /dev/null +++ b/packages/cname-prefix/src/sync/sha256EncodeSync.ts @@ -0,0 +1,9 @@ +import { Sha256 } from './Sha256' + +export function sha256EncodeSync(message: string): number { + const hash = new Sha256() + hash.update(message) + const hashHexStr = hash.hex() + const hashHexInt = parseInt(hashHexStr, 16) + return hashHexInt +} diff --git a/packages/cname-prefix/tsconfig.json b/packages/cname-prefix/tsconfig.json index daf609c3b..e7dd0fe47 100644 --- a/packages/cname-prefix/tsconfig.json +++ b/packages/cname-prefix/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { + "noEmit": true, "types": ["vitest"] }, } diff --git a/packages/cname-prefix/vite.config.js b/packages/cname-prefix/vite.config.js new file mode 100644 index 000000000..2541dad0a --- /dev/null +++ b/packages/cname-prefix/vite.config.js @@ -0,0 +1,28 @@ +import { dirname, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' +import { defineConfig } from 'vite' +import dts from 'vite-plugin-dts' + +const __dirname = dirname(fileURLToPath(import.meta.url)) + +export default defineConfig({ + plugins: [dts({ insertTypesEntry: true })], + build: { + lib: { + entry: { + index: resolve(__dirname, 'src/index.ts'), + async: resolve(__dirname, 'src/async/index.ts'), + sync: resolve(__dirname, 'src/sync/index.ts') + }, + fileName: '[name]' + }, + rollupOptions: { + treeshake: 'smallest' + } + }, + resolve: { + alias: { + '@': resolve(__dirname, 'src') + } + } +}) diff --git a/packages/image-shrink/package.json b/packages/image-shrink/package.json index 970269bf6..6405d9bd2 100644 --- a/packages/image-shrink/package.json +++ b/packages/image-shrink/package.json @@ -50,7 +50,7 @@ "@vitest/coverage-v8": "^3.2.4", "playwright": "^1.41.2", "raw-body": "^2.5.2", - "vite": "^6.3.5", + "vite": "^7.0.0", "vitest": "^3.2.4" } } diff --git a/packages/quality-insights/package.json b/packages/quality-insights/package.json index cdb878981..8e4c32b57 100644 --- a/packages/quality-insights/package.json +++ b/packages/quality-insights/package.json @@ -56,7 +56,7 @@ "@vitest/coverage-v8": "^3.2.4", "size-limit": "^11.2.0", "typescript": "~5.7.2", - "vite": "^6.3.5", + "vite": "^7.0.0", "vitest": "^3.2.4", "zod": "^3.24.3" },