@@ -24,10 +24,8 @@ jobs:
|
||||
- run: npm config set -- '//gitea.sugoidogo.com/api/packages/sugoidogo/npm/:_authToken' "$PACKAGES_KEY"
|
||||
env:
|
||||
PACKAGES_KEY: ${{ secrets.PACKAGES_KEY }}
|
||||
- run: mv npm-readme.md readme.md
|
||||
- run: mv src/lib/LICENCE.md licence.md
|
||||
- run: npm publish
|
||||
- run: npm run publish
|
||||
- run: npm run docs
|
||||
- run: npx wrangler deploy
|
||||
- run: npx -w lib wrangler deploy
|
||||
env:
|
||||
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
|
||||
|
||||
+2
-1
@@ -5,4 +5,5 @@ dist
|
||||
.env
|
||||
*.tgz
|
||||
docs
|
||||
bin
|
||||
bin
|
||||
deno.lock
|
||||
+2
-3
@@ -2,8 +2,7 @@
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"test": "node scripts/test.ts",
|
||||
"compile": "node scripts/compile.ts",
|
||||
"prepack": "tsc"
|
||||
"compile": "node scripts/compile.ts"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^25.2.3",
|
||||
@@ -16,4 +15,4 @@
|
||||
"commander": "^14.0.3",
|
||||
"dotenv": "^17.3.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+21
-14
@@ -1,16 +1,23 @@
|
||||
import spawnSync from "./spawnSync.ts"
|
||||
import * as fs from "node:fs"
|
||||
|
||||
const deno_targets = [
|
||||
'x86_64-apple-darwin',
|
||||
'aarch64-apple-darwin',
|
||||
'x86_64-pc-windows-msvc',
|
||||
'x86_64-unknown-linux-gnu',
|
||||
'aarch64-unknown-linux-gnu'
|
||||
]
|
||||
for (const target of deno_targets) {
|
||||
spawnSync('deno', [
|
||||
'compile', '--allow-all', '--target', target,
|
||||
'--output', 'bin/deno/packwiz-extras-' + target,
|
||||
'--no-check', 'src/main.ts'
|
||||
], { stdio: 'inherit', shell: true })
|
||||
}
|
||||
if (fs.existsSync('dist')) fs.rmSync("dist", { "recursive": true })
|
||||
spawnSync('deno', ["bundle", "--sourcemap=inline", "--code-splitting", "src/main.ts", "--outdir", "dist"])
|
||||
fs.copyFileSync('../node_modules/workerless/dist/worker.js', "dist/worker.js")
|
||||
|
||||
const deno_targets = [
|
||||
'x86_64-apple-darwin',
|
||||
'aarch64-apple-darwin',
|
||||
'x86_64-pc-windows-msvc',
|
||||
'x86_64-unknown-linux-gnu',
|
||||
'aarch64-unknown-linux-gnu'
|
||||
]
|
||||
for (const target of deno_targets) {
|
||||
spawnSync('deno', [
|
||||
'compile', '--allow-all', '--target', target,
|
||||
'--output', 'bin/deno/packwiz-extras-' + target,
|
||||
'--include', 'dist/worker.js',
|
||||
'--no-check', 'dist/main.js'
|
||||
//'--no-check', 'src/main.ts'
|
||||
], { stdio: 'inherit', shell: true })
|
||||
}
|
||||
|
||||
+61
-57
@@ -1,73 +1,77 @@
|
||||
import { program } from "commander"
|
||||
import { config } from "dotenv"
|
||||
import packwiz, { type PackwizPack } from "@sugoidogo/packwiz-extras-lib"
|
||||
import packwiz from "@sugoidogo/packwiz-extras-lib"
|
||||
import NodeFileSystemDirectoryHandle from "@sugoidogo/node-file-system-adapter"
|
||||
|
||||
const pathSeperatorRegex = /[\\\/]/
|
||||
try {
|
||||
const pathSeperatorRegex = /[\\\/]/
|
||||
|
||||
config({ 'quiet': true })
|
||||
config({ 'quiet': true })
|
||||
|
||||
async function getPack() {
|
||||
const packFile: string = program.opts().packFile
|
||||
const packFilePathSegments = packFile.split(pathSeperatorRegex)
|
||||
const packFileBasename = packFilePathSegments.pop()
|
||||
const packFileDirname = packFilePathSegments.join("/")
|
||||
const packDirectoryHandle = new NodeFileSystemDirectoryHandle(packFileDirname)
|
||||
return packwiz.loadPack(packDirectoryHandle, packFileBasename)
|
||||
}
|
||||
async function getPack() {
|
||||
const packFile: string = program.opts().packFile
|
||||
const packFilePathSegments = packFile.split(pathSeperatorRegex)
|
||||
const packFileBasename = packFilePathSegments.pop()
|
||||
const packFileDirname = packFilePathSegments.join("/")
|
||||
const packDirectoryHandle = new NodeFileSystemDirectoryHandle(packFileDirname)
|
||||
return packwiz.loadPack(packDirectoryHandle, packFileBasename)
|
||||
}
|
||||
|
||||
program.name('packwiz-extras')
|
||||
.description('extra utilities for packwiz')
|
||||
.option('--pack-file <string>', 'The modpack file to use', 'pack.toml')
|
||||
program.name('packwiz-extras')
|
||||
.description('extra utilities for packwiz')
|
||||
.option('--pack-file <string>', 'The modpack file to use', 'pack.toml')
|
||||
|
||||
const curseforge = program.command('curseforge').alias('cf')
|
||||
.description('manage curseforge files')
|
||||
const curseforge = program.command('curseforge').alias('cf')
|
||||
.description('manage curseforge files')
|
||||
|
||||
const cfKey: string[] = ['--api-key <string>',
|
||||
'Your curseforge api key. This is required by curseforge to access their API. ' +
|
||||
'Can also be provided via environment variable or .env file as CF_API_KEY',]
|
||||
const cfKey: string[] = ['--api-key <string>',
|
||||
'Your curseforge api key. This is required by curseforge to access their API. ' +
|
||||
'Can also be provided via environment variable or .env file as CF_API_KEY',]
|
||||
|
||||
if (process.env.CF_API_KEY) {
|
||||
curseforge.option(cfKey[0], cfKey[1])
|
||||
} else {
|
||||
curseforge.requiredOption(cfKey[0], cfKey[1])
|
||||
}
|
||||
if (process.env.CF_API_KEY) {
|
||||
curseforge.option(cfKey[0], cfKey[1])
|
||||
} else {
|
||||
curseforge.requiredOption(cfKey[0], cfKey[1])
|
||||
}
|
||||
|
||||
curseforge.command('detect')
|
||||
.description('detect and replace files availible on curseforge')
|
||||
.action(async () => {
|
||||
const apiKey: string = curseforge.opts().apiKey || process.env.CF_API_KEY
|
||||
const pack = await getPack()
|
||||
await pack.findAndReplaceCurseforgeFiles(apiKey)
|
||||
})
|
||||
curseforge.command('detect')
|
||||
.description('detect and replace files availible on curseforge')
|
||||
.action(async () => {
|
||||
const apiKey: string = curseforge.opts().apiKey || process.env.CF_API_KEY
|
||||
const pack = await getPack()
|
||||
await pack.findAndReplaceCurseforgeFiles(apiKey)
|
||||
})
|
||||
|
||||
curseforge.command('urls')
|
||||
.description('cache curseforge download urls to speed up packwiz-installer')
|
||||
.action(async () => {
|
||||
const apiKey = curseforge.opts().apiKey || process.env.CF_API_KEY
|
||||
const pack = await getPack()
|
||||
await pack.cacheCurseforgeDownloadURLs(apiKey)
|
||||
await pack.savePack()
|
||||
})
|
||||
curseforge.command('urls')
|
||||
.description('cache curseforge download urls to speed up packwiz-installer')
|
||||
.action(async () => {
|
||||
const apiKey = curseforge.opts().apiKey || process.env.CF_API_KEY
|
||||
const pack = await getPack()
|
||||
await pack.cacheCurseforgeDownloadURLs(apiKey)
|
||||
await pack.savePack()
|
||||
})
|
||||
|
||||
const modrith = program.command('modrinth').alias('mr')
|
||||
.description('manage modrinth files')
|
||||
const modrith = program.command('modrinth').alias('mr')
|
||||
.description('manage modrinth files')
|
||||
|
||||
//modrith.option('--api-key <string>', 'Your modrinth api key, optional.')
|
||||
modrith.command('detect')
|
||||
.description('detect and replace files availible on modrinth')
|
||||
.action(async () => {
|
||||
const pack = await getPack()
|
||||
await pack.findAndReplaceModrinthFiles()
|
||||
})
|
||||
|
||||
modrith.command('detect')
|
||||
.description('detect and replace files availible on modrinth')
|
||||
.action(async () => {
|
||||
const pack = await getPack()
|
||||
await pack.findAndReplaceModrinthFiles()
|
||||
})
|
||||
modrith.command('merge')
|
||||
.description('detect curseforge metafiles which are also availible on modrinth and merge their metadata')
|
||||
.action(async () => {
|
||||
const pack = await getPack()
|
||||
await pack.mergeModrinthMetadata()
|
||||
await pack.savePack()
|
||||
})
|
||||
|
||||
modrith.command('merge')
|
||||
.description('detect curseforge metafiles which are also availible on modrinth and merge their metadata')
|
||||
.action(async () => {
|
||||
const pack = await getPack()
|
||||
await pack.mergeModrinthMetadata()
|
||||
await pack.savePack()
|
||||
})
|
||||
|
||||
await program.parseAsync()
|
||||
await program.parseAsync()
|
||||
} catch (error) {
|
||||
if (error instanceof Error) console.log(error.message)
|
||||
else console.log(error)
|
||||
process.exit(1)
|
||||
}
|
||||
@@ -9,9 +9,6 @@
|
||||
"types": [
|
||||
"node"
|
||||
],
|
||||
"declaration": true,
|
||||
"declarationMap": true,
|
||||
"sourceMap": true,
|
||||
"outDir": "dist",
|
||||
"rewriteRelativeImportExtensions": true,
|
||||
"erasableSyntaxOnly": true,
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"$schema": "https://raw.githubusercontent.com/denoland/deno/refs/heads/main/cli/schemas/config-file.v1.json",
|
||||
"nodeModulesDir":"none"
|
||||
}
|
||||
+57
-21
@@ -77,14 +77,28 @@ async function assertHashMatch(bytes: Uint8Array<ArrayBuffer>, hashFormat: HashF
|
||||
return true
|
||||
}
|
||||
|
||||
/**
|
||||
* This object contains all the functionality of packwiz-extras, and is the default export of this library.
|
||||
*
|
||||
* All instancing methods (new PackwizPack, loadPack, refreshPack, fetchPack) require a FileSystemDirectoryHandle as their first argument.
|
||||
*
|
||||
* In web browsers, you can use [navigator.storage.getDirectory](https://developer.mozilla.org/en-US/docs/Web/API/StorageManager/getDirectory)
|
||||
* to use browser storage, or [showDirectoryPicker](https://developer.mozilla.org/en-US/docs/Web/API/Window/showDirectoryPicker)
|
||||
* to allow the user to select a folder on the host system.
|
||||
*
|
||||
* In node, you can use [my node file system adapter](https://gitea.sugoidogo.com/sugoidogo/-/packages/npm/@sugoidogo%2Fnode-file-system-adapter)
|
||||
* (or any pollyfill/ponyfill that provides the Web File System API) to grant this library access to a host folder.
|
||||
*/
|
||||
export class PackwizPack {
|
||||
|
||||
/** The directory in which all pack files are stored */
|
||||
packDirectoryHandle: FileSystemDirectoryHandle
|
||||
/** The name of the {@link PackMetaData} file */
|
||||
packFileName: Path
|
||||
packMetaData: PackMetaData
|
||||
packIndex: PackIndex
|
||||
/** This object stores the contents of {@link PackFileMetaData} files referenced in the {@link PackIndex} */
|
||||
packFiles: { [key: Path]: PackFileMetaData | undefined }
|
||||
|
||||
/** Creates a new, empty modpack */
|
||||
constructor(packDirectoryHandle: FileSystemDirectoryHandle, packName: string, versions: PackMetaData["versions"]) {
|
||||
this.packDirectoryHandle = packDirectoryHandle
|
||||
this.packFileName = "pack.toml"
|
||||
@@ -103,9 +117,9 @@ export class PackwizPack {
|
||||
}
|
||||
this.packFiles = {}
|
||||
}
|
||||
|
||||
/** Fetches a modpack from an HTTP/HTTPS url */
|
||||
static async fetchPack(packDirectoryHandle: FileSystemDirectoryHandle, packUrl: Url): Promise<PackwizPack> {
|
||||
console.debug("fetching pack from "+packUrl)
|
||||
console.debug("fetching pack from " + packUrl)
|
||||
const { packMetaData, packFileName } = await fetch(packUrl).then(async response => {
|
||||
const packFileText = await assertOK(response).text()
|
||||
const packMetaData = parseTOML(packFileText) as PackMetaData
|
||||
@@ -147,7 +161,7 @@ export class PackwizPack {
|
||||
console.log("pack fetched")
|
||||
return pack
|
||||
}
|
||||
|
||||
/** Loads a modpack from storage */
|
||||
static async loadPack(packDirectoryHandle: FileSystemDirectoryHandle, packFileName = "pack.toml"): Promise<PackwizPack> {
|
||||
console.debug("loading pack")
|
||||
const packMetaData = await getFileHandle(packDirectoryHandle, packFileName).then(async packDirectoryHandle => {
|
||||
@@ -185,7 +199,7 @@ export class PackwizPack {
|
||||
console.log("pack loaded")
|
||||
return pack
|
||||
}
|
||||
|
||||
/** Loads a modpack from storage, ignoring and rebuilding the index so that changes made outside of packwiz(-extras) are included. */
|
||||
static async refreshPack(packDirectoryHandle: FileSystemDirectoryHandle, packFileName = "pack.toml"): Promise<PackwizPack> {
|
||||
console.log("refreshing pack")
|
||||
const { packMetaData, packFileHandle } = await getFileHandle(packDirectoryHandle, packFileName).then(async packDirectoryHandle => {
|
||||
@@ -236,7 +250,13 @@ export class PackwizPack {
|
||||
console.log("pack refreshed")
|
||||
return pack
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the in-memory modpack changes to storage.
|
||||
* You must call this function after making any changes to the pack in order to preserve those changes.
|
||||
* @param hashes whether to calculate and include file hashes in the output.
|
||||
* You should only change this to true when saving the pack for serving over HTTP, where hashes are required.
|
||||
* Otherwise, this option is automatically set from pack options.
|
||||
*/
|
||||
async savePack(hashes?: boolean): Promise<PackwizPack> {
|
||||
console.log("saving changes")
|
||||
if (typeof hashes !== "boolean") {
|
||||
@@ -279,7 +299,11 @@ export class PackwizPack {
|
||||
console.log("changes saved")
|
||||
return this
|
||||
}
|
||||
|
||||
/**
|
||||
* Hashes all non-metafiles in the pack and makes a request to curseforge to find matching files.
|
||||
* Any file that matches is removed from the modpack and replaced with a metafile referencing the curseforge file.
|
||||
* @param apiKey required to access the curseforge api, can be retreived from [the curseforge console](https://console.curseforge.com/#/api-keys)
|
||||
*/
|
||||
async findAndReplaceCurseforgeFiles(apiKey: string): Promise<PackwizPack> {
|
||||
console.log("finding and replacing curseforge files")
|
||||
const workerlessPool = new WorkerlessPool()
|
||||
@@ -298,7 +322,7 @@ export class PackwizPack {
|
||||
hashPaths.set(hash, entry.file)
|
||||
})
|
||||
workerlessPool.terminate()
|
||||
console.log("requesting info on "+hashPaths.size+" files")
|
||||
console.log("requesting info on " + hashPaths.size + " files")
|
||||
const curseforge = new CurseforgeV1Client(apiKey)
|
||||
const result = await curseforge.getFingerprintsMatchesByGameId(minecrafCurseforgeGameID, [...hashPaths.keys()])
|
||||
const modIDs: number[] = []
|
||||
@@ -346,10 +370,13 @@ export class PackwizPack {
|
||||
this.packIndex.files.splice(i, 1)
|
||||
}
|
||||
}
|
||||
console.log("replaced "+replacedFilePaths.length+" files")
|
||||
console.log("replaced " + replacedFilePaths.length + " files")
|
||||
return this.savePack()
|
||||
}
|
||||
|
||||
/**
|
||||
* Hashes all non-metafiles in the pack and makes a request to modrinth to find matching files.
|
||||
* Any file that matches is removed from the modpack and replaced with a metafile referencing the modrinth file.
|
||||
*/
|
||||
async findAndReplaceModrinthFiles(): Promise<PackwizPack> {
|
||||
console.log("finding and replacing modrinth files")
|
||||
const indexPathSegments = this.packMetaData.index.file.split(pathSeperatorRegex)
|
||||
@@ -366,7 +393,7 @@ export class PackwizPack {
|
||||
const hash = await getHash(bytes, "sha512") as string
|
||||
hashPaths.set(hash, entry.file)
|
||||
})
|
||||
console.log("requesting info on "+hashPaths.size+" files")
|
||||
console.log("requesting info on " + hashPaths.size + " files")
|
||||
const modrinth = new ModrinthV2Client()
|
||||
const matches = await modrinth.getProjectVersionsByHash([...hashPaths.keys()])
|
||||
const projectIDs: string[] = []
|
||||
@@ -420,10 +447,14 @@ export class PackwizPack {
|
||||
this.packIndex.files.splice(i, 1)
|
||||
}
|
||||
}
|
||||
console.log("replaced "+replacedFilePaths.length+" files")
|
||||
console.log("replaced " + replacedFilePaths.length + " files")
|
||||
return this.savePack()
|
||||
}
|
||||
|
||||
/**
|
||||
* In order to comply with curseforge API requirements, direct download URLs to curseforge files cannot be saved into the pack.
|
||||
* Instead, you may use this function beforehand to cache the download URLs in memory before attempting to install the pack.
|
||||
* @param apiKey required to access the curseforge api, can be retreived from [the curseforge console](https://console.curseforge.com/#/api-keys)
|
||||
*/
|
||||
async cacheCurseforgeDownloadURLs(apiKey: string): Promise<PackwizPack> {
|
||||
console.log("caching curseforge download URLs")
|
||||
const fileIDPaths = new Map<number, Path>()
|
||||
@@ -431,9 +462,9 @@ export class PackwizPack {
|
||||
if (!metafiledata.download.mode) continue
|
||||
fileIDPaths.set(metafiledata.update.curseforge["file-id"], filePath)
|
||||
}
|
||||
console.log("requesting info on "+fileIDPaths.size+" files")
|
||||
console.log("requesting info on " + fileIDPaths.size + " files")
|
||||
const curseforge = new CurseforgeV1Client(apiKey)
|
||||
let cachedURLcount=0
|
||||
let cachedURLcount = 0
|
||||
for (const file of await curseforge.getFiles([...fileIDPaths.keys()])) {
|
||||
if (file.downloadUrl) {
|
||||
cachedURLcount++
|
||||
@@ -441,10 +472,15 @@ export class PackwizPack {
|
||||
delete this.packFiles[fileIDPaths.get(file.id)].download.mode
|
||||
}
|
||||
}
|
||||
console.log("cached "+cachedURLcount+" URLs")
|
||||
console.log("cached " + cachedURLcount + " URLs")
|
||||
return this
|
||||
}
|
||||
|
||||
/**
|
||||
* Uses the hashes stored in any non-modrinth metafiles to find files that are also availible from modrinth,
|
||||
* then adds modrinth metadata (client/server side, download url, etc) to that file.
|
||||
*
|
||||
* Useful for metafiles that don't already have that meatadata availible, or for exporting your pack to multiple platforms.
|
||||
*/
|
||||
async mergeModrinthMetadata(): Promise<PackwizPack> {
|
||||
console.log("merging modrinth metadata with curseforge files")
|
||||
const hashPaths = new Map<Hash, Path>()
|
||||
@@ -452,14 +488,14 @@ export class PackwizPack {
|
||||
if (metafiledata.update.modrinth) continue
|
||||
hashPaths.set(metafiledata.download.hash, filePath)
|
||||
}
|
||||
console.log("requesting info on "+hashPaths.size+" files")
|
||||
console.log("requesting info on " + hashPaths.size + " files")
|
||||
const modrinth = new ModrinthV2Client()
|
||||
const matches = await modrinth.getProjectVersionsByHash([...hashPaths.keys()])
|
||||
const projectIDs: string[] = []
|
||||
for (const match of Object.values(matches)) projectIDs.push(match.project_id)
|
||||
const projects = new Map<string, Project>()
|
||||
for (const project of await modrinth.getProjects(projectIDs)) projects.set(project.id, project)
|
||||
let mergedFileCount=0
|
||||
let mergedFileCount = 0
|
||||
for (const record of Object.entries(matches)) {
|
||||
const [hash, match] = record
|
||||
const filePath = hashPaths.get(hash)
|
||||
@@ -486,7 +522,7 @@ export class PackwizPack {
|
||||
}
|
||||
}
|
||||
}
|
||||
console.log("merged "+mergedFileCount+" files")
|
||||
console.log("merged " + mergedFileCount + " files")
|
||||
return this
|
||||
}
|
||||
}
|
||||
Generated
+41
-41
@@ -55,14 +55,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@cloudflare/unenv-preset": {
|
||||
"version": "2.12.1",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.12.1.tgz",
|
||||
"integrity": "sha512-tP/Wi+40aBJovonSNJSsS7aFJY0xjuckKplmzDs2Xat06BJ68B6iG7YDUWXJL8gNn0gqW7YC5WhlYhO3QbugQA==",
|
||||
"version": "2.13.0",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.13.0.tgz",
|
||||
"integrity": "sha512-bT2rnecesLjDBHgouMEPW9EQ7iLE8OG58srMuCEpAGp75xabi6j124SdS8XZ+dzB3sYBW4iQvVeCTCbAnMMVtA==",
|
||||
"dev": true,
|
||||
"license": "MIT OR Apache-2.0",
|
||||
"peerDependencies": {
|
||||
"unenv": "2.0.0-rc.24",
|
||||
"workerd": "^1.20260115.0"
|
||||
"workerd": "^1.20260213.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"workerd": {
|
||||
@@ -71,9 +71,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@cloudflare/workerd-darwin-64": {
|
||||
"version": "1.20260212.0",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20260212.0.tgz",
|
||||
"integrity": "sha512-kLxuYutk88Wlo7edp8mlkN68TgZZ9237SUnuX9kNaD5jcOdblUqiBctMRZeRcPsuoX/3g2t0vS4ga02NBEVRNg==",
|
||||
"version": "1.20260217.0",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20260217.0.tgz",
|
||||
"integrity": "sha512-t1KRT0j4gwLntixMoNujv/UaS89Q7+MPRhkklaSup5tNhl3zBZOIlasBUSir69eXetqLZu8sypx3i7zE395XXA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -88,9 +88,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@cloudflare/workerd-darwin-arm64": {
|
||||
"version": "1.20260212.0",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20260212.0.tgz",
|
||||
"integrity": "sha512-fqoqQWMA1D0ZzDOD8sp0allREM2M8GHdpxMXQ8EdZpZ70z5bJbJ9Vr4qe35++FNIZJspsDHfTw3Xm/M4ELm/dQ==",
|
||||
"version": "1.20260217.0",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20260217.0.tgz",
|
||||
"integrity": "sha512-9pEZ15BmELt0Opy79LTxUvbo55QAI4GnsnsvmgBxaQlc4P0dC8iycBGxbOpegkXnRx/LFj51l2zunfTo0EdATg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -105,9 +105,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@cloudflare/workerd-linux-64": {
|
||||
"version": "1.20260212.0",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20260212.0.tgz",
|
||||
"integrity": "sha512-bCSQoZzDzV5MSh4ueWo1DgmOn4Hf3QBu4Yo3eQFXA2llYFIu/sZgRtkEehw1X2/SY5Sn6O0EMCqxJYRf82Wdeg==",
|
||||
"version": "1.20260217.0",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20260217.0.tgz",
|
||||
"integrity": "sha512-IrZfxQ4b/4/RDQCJsyoxKrCR+cEqKl81yZOirMOKoRrDOmTjn4evYXaHoLBh2PjUKY1Imly7ZiC6G1p0xNIOwg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -122,9 +122,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@cloudflare/workerd-linux-arm64": {
|
||||
"version": "1.20260212.0",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20260212.0.tgz",
|
||||
"integrity": "sha512-GPvp1iiKQodtbUDi6OmR5I0vD75lawB54tdYGtmypuHC7ZOI2WhBmhb3wCxgnQNOG1z7mhCQrzRCoqrKwYbVWQ==",
|
||||
"version": "1.20260217.0",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20260217.0.tgz",
|
||||
"integrity": "sha512-RGU1wq69ym4sFBVWhQeddZrRrG0hJM/SlZ5DwVDga/zBJ3WXxcDsFAgg1dToDfildTde5ySXN7jAasSmWko9rg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -139,9 +139,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@cloudflare/workerd-windows-64": {
|
||||
"version": "1.20260212.0",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20260212.0.tgz",
|
||||
"integrity": "sha512-wHRI218Xn4ndgWJCUHH4Zx0YlU5q/o6OmcxXkcw95tJOsQn4lDrhppioPh4eScxJZALf2X+ODeZcyQTCq5exGw==",
|
||||
"version": "1.20260217.0",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20260217.0.tgz",
|
||||
"integrity": "sha512-4T65u1321z1Zet9n7liQsSW7g3EXM5SWIT7kJ/uqkEtkPnIzZBIowMQgkvL5W9SpGZks9t3mTQj7hiUia8Gq9Q==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -1346,9 +1346,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@sugoidogo/node-file-system-adapter": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://gitea.sugoidogo.com/api/packages/sugoidogo/npm/%40sugoidogo%2Fnode-file-system-adapter/-/1.0.8/node-file-system-adapter-1.0.8.tgz",
|
||||
"integrity": "sha512-6eW1oFiZdE2kJ4jmMSvh3S1mFWJCNUbPBGXMwXKqsBef/riqqS0fEUbLe/2jzIV2VKt4fTdnj0xqnfUi58pS0Q==",
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://gitea.sugoidogo.com/api/packages/sugoidogo/npm/%40sugoidogo%2Fnode-file-system-adapter/-/1.2.0/node-file-system-adapter-1.2.0.tgz",
|
||||
"integrity": "sha512-OesOjXwP31yg0iWLOE8IgjW0SPZdxsjXPx0wiK1vztgvXzFxSNDi/jYbmJ7WfHGOlOfQGJg/PGjkICCW6W4MTw==",
|
||||
"dependencies": {
|
||||
"mime": "^4.1.0"
|
||||
}
|
||||
@@ -1729,16 +1729,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/miniflare": {
|
||||
"version": "4.20260212.0",
|
||||
"resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20260212.0.tgz",
|
||||
"integrity": "sha512-Lgxq83EuR2q/0/DAVOSGXhXS1V7GDB04HVggoPsenQng8sqEDR3hO4FigIw5ZI2Sv2X7kIc30NCzGHJlCFIYWg==",
|
||||
"version": "4.20260217.0",
|
||||
"resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20260217.0.tgz",
|
||||
"integrity": "sha512-t2v02Vi9SUiiXoHoxLvsntli7N35e/35PuRAYEqHWtHOdDX3bqQ73dBQ0tI12/8ThCb2by2tVs7qOvgwn6xSBQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@cspotcode/source-map-support": "0.8.1",
|
||||
"sharp": "^0.34.5",
|
||||
"undici": "7.18.2",
|
||||
"workerd": "1.20260212.0",
|
||||
"workerd": "1.20260217.0",
|
||||
"ws": "8.18.0",
|
||||
"youch": "4.1.0-beta.10"
|
||||
},
|
||||
@@ -1964,9 +1964,9 @@
|
||||
"license": "Apache-2.0"
|
||||
},
|
||||
"node_modules/workerd": {
|
||||
"version": "1.20260212.0",
|
||||
"resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20260212.0.tgz",
|
||||
"integrity": "sha512-4B9BoZUzKSRv3pVZGEPh7OX+Q817hpUqAUtz5O0TxJVqo4OsYJAUA/sY177Q5ha/twjT9KaJt2DtQzE+oyCOzw==",
|
||||
"version": "1.20260217.0",
|
||||
"resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20260217.0.tgz",
|
||||
"integrity": "sha512-6jVisS6wB6KbF+F9DVoDUy9p7MON8qZCFSaL8OcDUioMwknsUPFojUISu3/c30ZOZ24D4h7oqaahFc5C6huilw==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"license": "Apache-2.0",
|
||||
@@ -1978,11 +1978,11 @@
|
||||
"node": ">=16"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@cloudflare/workerd-darwin-64": "1.20260212.0",
|
||||
"@cloudflare/workerd-darwin-arm64": "1.20260212.0",
|
||||
"@cloudflare/workerd-linux-64": "1.20260212.0",
|
||||
"@cloudflare/workerd-linux-arm64": "1.20260212.0",
|
||||
"@cloudflare/workerd-windows-64": "1.20260212.0"
|
||||
"@cloudflare/workerd-darwin-64": "1.20260217.0",
|
||||
"@cloudflare/workerd-darwin-arm64": "1.20260217.0",
|
||||
"@cloudflare/workerd-linux-64": "1.20260217.0",
|
||||
"@cloudflare/workerd-linux-arm64": "1.20260217.0",
|
||||
"@cloudflare/workerd-windows-64": "1.20260217.0"
|
||||
}
|
||||
},
|
||||
"node_modules/workerless": {
|
||||
@@ -1995,20 +1995,20 @@
|
||||
}
|
||||
},
|
||||
"node_modules/wrangler": {
|
||||
"version": "4.65.0",
|
||||
"resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.65.0.tgz",
|
||||
"integrity": "sha512-R+n3o3tlGzLK9I4fGocPReOuvcnjhtOL2aCVKkHMeuEwt9pPbOO4FxJtx/ec5cIUG/otRyJnfQGCAr9DplBVng==",
|
||||
"version": "4.66.0",
|
||||
"resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.66.0.tgz",
|
||||
"integrity": "sha512-b9RVIdKai0BXDuYg0iN0zwVnVbULkvdKGP7Bf1uFY2GhJ/nzDGqgwQbCwgDIOhmaBC8ynhk/p22M2jc8tJy+dQ==",
|
||||
"dev": true,
|
||||
"license": "MIT OR Apache-2.0",
|
||||
"dependencies": {
|
||||
"@cloudflare/kv-asset-handler": "0.4.2",
|
||||
"@cloudflare/unenv-preset": "2.12.1",
|
||||
"@cloudflare/unenv-preset": "2.13.0",
|
||||
"blake3-wasm": "2.1.5",
|
||||
"esbuild": "0.27.3",
|
||||
"miniflare": "4.20260212.0",
|
||||
"miniflare": "4.20260217.0",
|
||||
"path-to-regexp": "6.3.0",
|
||||
"unenv": "2.0.0-rc.24",
|
||||
"workerd": "1.20260212.0"
|
||||
"workerd": "1.20260217.0"
|
||||
},
|
||||
"bin": {
|
||||
"wrangler": "bin/wrangler.js",
|
||||
@@ -2021,7 +2021,7 @@
|
||||
"fsevents": "~2.3.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@cloudflare/workers-types": "^4.20260212.0"
|
||||
"@cloudflare/workers-types": "^4.20260217.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@cloudflare/workers-types": {
|
||||
|
||||
+10
-2
@@ -2,5 +2,13 @@
|
||||
"workspaces": [
|
||||
"lib",
|
||||
"cli"
|
||||
]
|
||||
}
|
||||
],
|
||||
"scripts": {
|
||||
"pretest": "npx -w lib tsc",
|
||||
"test": "npm -w cli test",
|
||||
"precompile": "npx -w lib tsc",
|
||||
"compile": "npm -w cli run compile",
|
||||
"publish":"npm -w lib publish",
|
||||
"docs": "npx -w lib typedoc src/index.ts"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user