upgrade typescript

This commit is contained in:
Bryan 2024-07-25 17:25:27 +08:00
parent dfb78f7bbc
commit 1a2d20a2bc
No known key found for this signature in database
GPG Key ID: 4EC3FD10E03041D7
4 changed files with 175 additions and 91 deletions

View File

@ -12,8 +12,8 @@
"license": "MIT OR Apache-2.0",
"devDependencies": {
"@cloudflare/workers-types": "^4.20240722.0",
"prettier": "^2.0.5",
"typescript": "^3.9.5",
"wrangler": "^3.60.0"
"prettier": "^3.3.3",
"typescript": "^5.5.4",
"wrangler": "^3.66.0"
}
}

View File

@ -9,26 +9,26 @@ devDependencies:
specifier: ^4.20240722.0
version: 4.20240722.0
prettier:
specifier: ^2.0.5
version: 2.0.5
specifier: ^3.3.3
version: 3.3.3
typescript:
specifier: ^3.9.5
version: 3.9.5
specifier: ^5.5.4
version: 5.5.4
wrangler:
specifier: ^3.60.0
version: 3.60.0(@cloudflare/workers-types@4.20240722.0)
specifier: ^3.66.0
version: 3.66.0(@cloudflare/workers-types@4.20240722.0)
packages:
/@cloudflare/kv-asset-handler@0.3.2:
resolution: {integrity: sha512-EeEjMobfuJrwoctj7FA1y1KEbM0+Q1xSjobIEyie9k4haVEBB7vkDvsasw1pM3rO39mL2akxIAzLMUAtrMHZhA==}
/@cloudflare/kv-asset-handler@0.3.4:
resolution: {integrity: sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==}
engines: {node: '>=16.13'}
dependencies:
mime: 3.0.0
dev: true
/@cloudflare/workerd-darwin-64@1.20240605.0:
resolution: {integrity: sha512-6V4Uze6jEM1mPBdPO6AevPwAOG2s+auEG1vPzZilwbrpn3BbYklEpQqcAZj05uUXaM6rnffnXerW8X8Fc8l4qQ==}
/@cloudflare/workerd-darwin-64@1.20240718.0:
resolution: {integrity: sha512-BsPZcSCgoGnufog2GIgdPuiKicYTNyO/Dp++HbpLRH+yQdX3x4aWx83M+a0suTl1xv76dO4g9aw7SIB6OSgIyQ==}
engines: {node: '>=16'}
cpu: [x64]
os: [darwin]
@ -36,8 +36,8 @@ packages:
dev: true
optional: true
/@cloudflare/workerd-darwin-arm64@1.20240605.0:
resolution: {integrity: sha512-ZNxjVSeMYUhTfVlrMsVjpN5eHA2kq3+S7ZMsGu5l44ZqFrDygsFDoc9C4anJVUEIHGFUB9LMu4ZTdS5S80hvPQ==}
/@cloudflare/workerd-darwin-arm64@1.20240718.0:
resolution: {integrity: sha512-nlr4gaOO5gcJerILJQph3+2rnas/nx/lYsuaot1ntHu4LAPBoQo1q/Pucj2cSIav4UiMzTbDmoDwPlls4Kteog==}
engines: {node: '>=16'}
cpu: [arm64]
os: [darwin]
@ -45,8 +45,8 @@ packages:
dev: true
optional: true
/@cloudflare/workerd-linux-64@1.20240605.0:
resolution: {integrity: sha512-zqOWDrYEudW5JCcU8lxCFQ96UHJJHrM+uvGaRS4u5nJaEgMr2z7u9I2286+l1R3JWvJdqj9ehGuHQvZkaTADxw==}
/@cloudflare/workerd-linux-64@1.20240718.0:
resolution: {integrity: sha512-LJ/k3y47pBcjax0ee4K+6ZRrSsqWlfU4lbU8Dn6u5tSC9yzwI4YFNXDrKWInB0vd7RT3w4Yqq1S6ZEbfRrqVUg==}
engines: {node: '>=16'}
cpu: [x64]
os: [linux]
@ -54,8 +54,8 @@ packages:
dev: true
optional: true
/@cloudflare/workerd-linux-arm64@1.20240605.0:
resolution: {integrity: sha512-qFTVNem7bMsU9P1dXUi+kb8EdU5aag1I9RQq6ZLS/zfiJ0a/UasihwQG8lrzT7k9x80VnpyCekNmd625qsVZjQ==}
/@cloudflare/workerd-linux-arm64@1.20240718.0:
resolution: {integrity: sha512-zBEZvy88EcAMGRGfuVtS00Yl7lJdUM9sH7i651OoL+q0Plv9kphlCC0REQPwzxrEYT1qibSYtWcD9IxQGgx2/g==}
engines: {node: '>=16'}
cpu: [arm64]
os: [linux]
@ -63,8 +63,8 @@ packages:
dev: true
optional: true
/@cloudflare/workerd-windows-64@1.20240605.0:
resolution: {integrity: sha512-s0U7d52ALQtb0enbHJ/AXmy+pyBQVoTIaAdAApy/PWrMiAnb8iJhf7A35pRTYfty5SUf7EX9BAPcKmeh+t3N5g==}
/@cloudflare/workerd-windows-64@1.20240718.0:
resolution: {integrity: sha512-YpCRvvT47XanFum7C3SedOZKK6BfVhqmwdAAVAQFyc4gsCdegZo0JkUkdloC/jwuWlbCACOG2HTADHOqyeolzQ==}
engines: {node: '>=16'}
cpu: [x64]
os: [win32]
@ -412,6 +412,10 @@ packages:
resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==}
dev: true
/date-fns@3.6.0:
resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==}
dev: true
/debug@4.3.5:
resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==}
engines: {node: '>=6.0'}
@ -558,8 +562,8 @@ packages:
hasBin: true
dev: true
/miniflare@3.20240605.0:
resolution: {integrity: sha512-wE59RULU5zo6eYhL8j3wYdoOQ5istlkMruEr5pYvykL0LJecjKlFc8/cu4WJ5JdkdhutE1320Awi7WEICcolEw==}
/miniflare@3.20240718.0:
resolution: {integrity: sha512-TKgSeyqPBeT8TBLxbDJOKPWlq/wydoJRHjAyDdgxbw59N6wbP8JucK6AU1vXCfu21eKhrEin77ssXOpbfekzPA==}
engines: {node: '>=16.13'}
hasBin: true
dependencies:
@ -571,8 +575,8 @@ packages:
glob-to-regexp: 0.4.1
stoppable: 1.1.0
undici: 5.28.4
workerd: 1.20240605.0
ws: 8.17.0
workerd: 1.20240718.0
ws: 8.18.0
youch: 3.3.3
zod: 3.23.8
transitivePeerDependencies:
@ -627,9 +631,9 @@ packages:
engines: {node: '>=8.6'}
dev: true
/prettier@2.0.5:
resolution: {integrity: sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg==}
engines: {node: '>=10.13.0'}
/prettier@3.3.3:
resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
engines: {node: '>=14'}
hasBin: true
dev: true
@ -726,9 +730,9 @@ packages:
resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
dev: true
/typescript@3.9.5:
resolution: {integrity: sha512-hSAifV3k+i6lEoCJ2k6R2Z/rp/H3+8sdmcn5NrS3/3kE7+RyZXm9aqvxWqjEXHAd8b0pShatpcdMTvEdvAJltQ==}
engines: {node: '>=4.2.0'}
/typescript@5.5.4:
resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
engines: {node: '>=14.17'}
hasBin: true
dev: true
@ -758,37 +762,38 @@ packages:
ufo: 1.5.3
dev: true
/workerd@1.20240605.0:
resolution: {integrity: sha512-2yhzgaprAOFm7H988xlRFmU4rOLXhSsq24wh6ayucMB3ORfe/nYJ2ysFn1mzjB+UxEJVt5PhixgHkZLv1S8UPQ==}
/workerd@1.20240718.0:
resolution: {integrity: sha512-w7lOLRy0XecQTg/ujTLWBiJJuoQvzB3CdQ6/8Wgex3QxFhV9Pbnh3UbwIuUfMw3OCCPQc4o7y+1P+mISAgp6yg==}
engines: {node: '>=16'}
hasBin: true
requiresBuild: true
optionalDependencies:
'@cloudflare/workerd-darwin-64': 1.20240605.0
'@cloudflare/workerd-darwin-arm64': 1.20240605.0
'@cloudflare/workerd-linux-64': 1.20240605.0
'@cloudflare/workerd-linux-arm64': 1.20240605.0
'@cloudflare/workerd-windows-64': 1.20240605.0
'@cloudflare/workerd-darwin-64': 1.20240718.0
'@cloudflare/workerd-darwin-arm64': 1.20240718.0
'@cloudflare/workerd-linux-64': 1.20240718.0
'@cloudflare/workerd-linux-arm64': 1.20240718.0
'@cloudflare/workerd-windows-64': 1.20240718.0
dev: true
/wrangler@3.60.0(@cloudflare/workers-types@4.20240722.0):
resolution: {integrity: sha512-8lW4E7VAhCVXy7AV7Vom2BsyjekIt15Aa8jnBLsfE2CxalzWQzx49BK25hOYhjHQT4GqBXeoNOZ43FrMQ+SUUA==}
/wrangler@3.66.0(@cloudflare/workers-types@4.20240722.0):
resolution: {integrity: sha512-5fEyXsP8qvrUeR13kCfA3OG1z/ABx+/a8hzIA55nCUM2/tjI67ZkfeN1VdOmG6cipZDvs4HfN8rp7j+e+21nKA==}
engines: {node: '>=16.17.0'}
hasBin: true
peerDependencies:
'@cloudflare/workers-types': ^4.20240605.0
'@cloudflare/workers-types': ^4.20240718.0
peerDependenciesMeta:
'@cloudflare/workers-types':
optional: true
dependencies:
'@cloudflare/kv-asset-handler': 0.3.2
'@cloudflare/kv-asset-handler': 0.3.4
'@cloudflare/workers-types': 4.20240722.0
'@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19)
'@esbuild-plugins/node-modules-polyfill': 0.2.2(esbuild@0.17.19)
blake3-wasm: 2.1.5
chokidar: 3.6.0
date-fns: 3.6.0
esbuild: 0.17.19
miniflare: 3.20240605.0
miniflare: 3.20240718.0
nanoid: 3.3.7
path-to-regexp: 6.2.2
resolve: 1.22.8
@ -796,6 +801,7 @@ packages:
selfsigned: 2.4.1
source-map: 0.6.1
unenv: /unenv-nightly@1.10.0-1717606461.a117952
workerd: 1.20240718.0
xxhash-wasm: 1.0.2
optionalDependencies:
fsevents: 2.3.3
@ -805,8 +811,8 @@ packages:
- utf-8-validate
dev: true
/ws@8.17.0:
resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==}
/ws@8.18.0:
resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1

View File

@ -4,48 +4,48 @@ interface WwwAuthenticate {
scope: string
}
interface Token {
export interface Token {
token: string
expires_in: number
}
function parseAuthenticateStr(authenticateStr: string): WwwAuthenticate {
const bearer = authenticateStr.split(/\s+/, 2)
if (bearer.length != 2 && bearer[0].toLowerCase() !== "bearer") {
if (bearer.length != 2 && bearer[0].toLowerCase() !== 'bearer') {
throw new Error(`Invalid Www-Authenticate ${authenticateStr}`)
}
const params = bearer[1].split(",")
const params = bearer[1].split(',')
let get_param = function(name: string): string {
for (const param of params) {
const kvPair = param.split("=", 2)
const kvPair = param.split('=', 2)
if (kvPair.length !== 2 || kvPair[0] !== name) {
continue
}
return kvPair[1].replace(/['"]+/g, '')
}
return ""
return ''
}
return {
realm: get_param("realm"),
service: get_param("service"),
scope: get_param("scope"),
};
realm: get_param('realm'),
service: get_param('service'),
scope: get_param('scope'),
}
}
class TokenProvider {
private username: string|undefined;
private password: string|undefined;
export class TokenProvider {
private username: string | undefined
private password: string | undefined
constructor(username?: string, password?: string) {
this.username = username;
this.password = password;
this.username = username
this.password = password
}
private async authenticateCacheKey(wwwAuthenticate: WwwAuthenticate): Promise<string> {
const keyStr = `${this.username}:${this.password}/${wwwAuthenticate.realm}/${wwwAuthenticate.service}/${wwwAuthenticate.scope}`
const keyStrText = new TextEncoder().encode(keyStr)
const digestArray = await crypto.subtle.digest({name: "SHA-256"}, keyStrText)
const digestUint8Array = new Uint8Array(digestArray);
const digestArray = await crypto.subtle.digest({ name: 'SHA-256' }, keyStrText)
const digestUint8Array = new Uint8Array(digestArray)
let hexArray = []
for (const num of digestUint8Array) {
hexArray.push(num.toString(16))
@ -69,17 +69,17 @@ class TokenProvider {
private async fetchToken(wwwAuthenticate: WwwAuthenticate): Promise<Token> {
const url = new URL(wwwAuthenticate.realm)
if (wwwAuthenticate.service.length) {
url.searchParams.set("service", wwwAuthenticate.service)
url.searchParams.set('service', wwwAuthenticate.service)
}
if (wwwAuthenticate.scope.length) {
url.searchParams.set("scope", wwwAuthenticate.scope)
url.searchParams.set('scope', wwwAuthenticate.scope)
}
// TODO: support basic auth
const response = await fetch(url.toString(), {method: "GET", headers: {}})
const response = await fetch(url.toString(), { method: 'GET', headers: {} })
if (response.status !== 200) {
throw new Error(`Unable to fetch token from ${url.toString()} status code ${response.status}`)
}
const body = await response.json()
const body = await response.json<any>()
return { token: body.token, expires_in: body.expires_in }
}
@ -96,4 +96,3 @@ class TokenProvider {
}
}
export { TokenProvider, Token }

View File

@ -1,23 +1,102 @@
{
"compilerOptions": {
"outDir": "./dist",
"module": "commonjs",
"target": "esnext",
"lib": ["esnext", "webworker"],
"alwaysStrict": true,
"strict": true,
"preserveConstEnums": true,
"moduleResolution": "node",
"sourceMap": true,
"esModuleInterop": true,
"types": ["@cloudflare/workers-types"]
/* Visit https://aka.ms/tsconfig.json to read more about this file */
/* Projects */
// "incremental": true, /* Enable incremental compilation */
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
// "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
/* Language and Environment */
"target": "es2021" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
"lib": ["es2021"] /* Specify a set of bundled library declaration files that describe the target runtime environment. */,
"jsx": "react-jsx" /* Specify what JSX code is generated. */,
// "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */
// "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
/* Modules */
"module": "es2022" /* Specify what module code is generated. */,
// "rootDir": "./", /* Specify the root folder within your source files. */
"moduleResolution": "Bundler" /* Specify how TypeScript looks up a file from a given module specifier. */,
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
// "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */
"types": ["@cloudflare/workers-types"] /* Specify type package names to be included without being referenced in a source file. */,
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
"resolveJsonModule": true /* Enable importing .json files */,
// "noResolve": true, /* Disallow `import`s, `require`s or `<reference>`s from expanding the number of files TypeScript should add to a project. */
/* JavaScript Support */
"allowJs": true /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */,
"checkJs": false /* Enable error reporting in type-checked JavaScript files. */,
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */
/* Emit */
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */
// "outDir": "./", /* Specify an output folder for all emitted files. */
// "removeComments": true, /* Disable emitting comments. */
"noEmit": true /* Disable emitting files from a compilation. */,
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
// "newLine": "crlf", /* Set the newline character for emitting files. */
// "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */
// "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
// "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
/* Interop Constraints */
"isolatedModules": true /* Ensure that each file can be safely transpiled without relying on other imports. */,
"allowSyntheticDefaultImports": true /* Allow 'import x from y' when a module doesn't have a default export. */,
// "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */,
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
"forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
/* Type Checking */
"strict": true /* Enable all strict type-checking options. */,
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */
// "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
// "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
// "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */
// "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
// "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
// "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
/* Completeness */
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
"skipLibCheck": true /* Skip type checking all .d.ts files. */
},
"include": [
"./src/*.ts",
"./test/*.ts",
"./src/**/*.ts",
"./test/**/*.ts",
"./node_modules/@cloudflare/workers-types/index.d.ts"
],
"exclude": ["node_modules/", "dist/"]
"exclude": ["test"]
}