From 186e168da7175521b2c00fb47e9a895826e72a5f Mon Sep 17 00:00:00 2001 From: Thang Vu Date: Sat, 16 Sep 2023 16:18:33 +0700 Subject: [PATCH] formatting the PR --- packages/adapter-d1/README.md | 28 + packages/adapter-d1/package.json | 10 +- packages/adapter-d1/src/index.ts | 369 ++++++----- .../src/{migrations/init.ts => migrations.ts} | 47 +- packages/adapter-d1/src/migrations/index.ts | 24 - packages/adapter-d1/tests/index.test.ts | 49 +- packages/adapter-d1/tsconfig.json | 19 +- pnpm-lock.yaml | 572 ++++++++++++------ 8 files changed, 724 insertions(+), 394 deletions(-) create mode 100644 packages/adapter-d1/README.md rename packages/adapter-d1/src/{migrations/init.ts => migrations.ts} (58%) delete mode 100644 packages/adapter-d1/src/migrations/index.ts diff --git a/packages/adapter-d1/README.md b/packages/adapter-d1/README.md new file mode 100644 index 00000000..1d4b76a8 --- /dev/null +++ b/packages/adapter-d1/README.md @@ -0,0 +1,28 @@ +

+
+ + + + + + +

Cloudflare D1 Adapter - NextAuth.js / Auth.js

+

+ + TypeScript + + + npm + + + Downloads + + + Github Stars + +

+

+ +--- + +Check out the documentation at [authjs.dev](https://authjs.dev/reference/adapter/d1). diff --git a/packages/adapter-d1/package.json b/packages/adapter-d1/package.json index dd0b1513..b2cb9171 100644 --- a/packages/adapter-d1/package.json +++ b/packages/adapter-d1/package.json @@ -37,18 +37,18 @@ "test": "jest" }, "peerDependencies": { - "next-auth": "^4" + "@auth/core": "workspace:*" }, "devDependencies": { "@cloudflare/workers-types": "^4.20230321.0", "@miniflare/d1": "^2.12.2", - "@next-auth/adapter-test": "workspace:*", - "@next-auth/tsconfig": "workspace:*", + "@auth/adapter-test": "workspace:*", + "@auth/tsconfig": "workspace:*", "better-sqlite3": "^7.0.0", "jest": "^27.0.3", "next-auth": "workspace:*" }, "jest": { - "preset": "@next-auth/adapter-test/jest" + "preset": "@auth/adapter-test/jest" } -} \ No newline at end of file +} diff --git a/packages/adapter-d1/src/index.ts b/packages/adapter-d1/src/index.ts index b530484b..90ecbb3c 100644 --- a/packages/adapter-d1/src/index.ts +++ b/packages/adapter-d1/src/index.ts @@ -5,89 +5,81 @@ * * * - * + * * ## Warning * This adapter is not developed or maintained by Clouflare and they haven't declared the D1 api stable. The author will make an effort to keep this adapter up to date. * The adapter is compatible with the D1 api as of March 22, 2023. - * + * * ## Installation * * ```bash npm2yarn2pnpm - * npm install next-auth @next-auth/d1-adapter + * npm install next-auth @auth/d1-adapter * ``` * - * @module @next-auth/d1-adapter + * @module @auth/d1-adapter */ -import { D1Database } from "@cloudflare/workers-types"; -import { D1Database as MiniflareD1Database } from "@miniflare/d1"; -import * as crypto from 'crypto'; -import { +import type { D1Database as WorkerDatabase } from "@cloudflare/workers-types" +import type { D1Database as MiniflareD1Database } from "@miniflare/d1" +import type { Adapter, AdapterSession, AdapterUser, AdapterAccount, -} from "next-auth/adapters"; + VerificationToken as AdapterVerificationToken, +} from "@auth/core/adapters" - -export { up } from "./migrations"; - -// some handy internal type aliases +export { up } from "./migrations" /** * @type @cloudflare/workers-types.D1Database | @miniflare/d1.D1Database */ -export type BothDB = D1Database | MiniflareD1Database; - -interface AdapterVerificationToken { - expires: Date; - identifier: string; - token: string; -} +export type D1Database = WorkerDatabase | MiniflareD1Database // all the sqls // USER -export const CREATE_USER_SQL = `INSERT INTO authjs_users (id, name, email, emailVerified, image) VALUES (?, ?, ?, ?, ?)`; -export const GET_USER_BY_ID_SQL = `SELECT * FROM authjs_users WHERE id = ?`; -export const GET_USER_BY_EMAIL_SQL = `SELECT * FROM authjs_users WHERE email = ?`; +export const CREATE_USER_SQL = `INSERT INTO users (id, name, email, emailVerified, image) VALUES (?, ?, ?, ?, ?)` +export const GET_USER_BY_ID_SQL = `SELECT * FROM users WHERE id = ?` +export const GET_USER_BY_EMAIL_SQL = `SELECT * FROM users WHERE email = ?` export const GET_USER_BY_ACCOUNTL_SQL = ` SELECT u.* - FROM authjs_users u JOIN authjs_accounts a ON a.userId = u.id - WHERE a.providerAccountId = ? AND a.provider = ?`; + FROM users u JOIN accounts a ON a.userId = u.id + WHERE a.providerAccountId = ? AND a.provider = ?` export const UPDATE_USER_BY_ID_SQL = ` - UPDATE authjs_users + UPDATE users SET name = ?, email = ?, emailVerified = ?, image = ? - WHERE id = ? `; -export const DELETE_USER_SQL = `DELETE FROM authjs_users WHERE id = ?`; + WHERE id = ? ` +export const DELETE_USER_SQL = `DELETE FROM users WHERE id = ?` - // SESSION -export const CREATE_SESSION_SQL = 'INSERT INTO authjs_sessions (id, sessionToken, userId, expires) VALUES (?,?,?,?)'; +// SESSION +export const CREATE_SESSION_SQL = + "INSERT INTO sessions (id, sessionToken, userId, expires) VALUES (?,?,?,?)" export const GET_SESSION_BY_TOKEN_SQL = ` SELECT id, sessionToken, userId, expires - FROM authjs_sessions - WHERE sessionToken = ?`; -export const UPDATE_SESSION_BY_SESSION_TOKEN_SQL = `UPDATE authjs_sessions SET expires = ? WHERE sessionToken = ?`; -export const DELETE_SESSION_SQL = `DELETE FROM authjs_sessions WHERE sessionToken = ?`; -export const DELETE_SESSION_BY_USER_ID_SQL = `DELETE FROM authjs_sessions WHERE userId = ?`; + FROM sessions + WHERE sessionToken = ?` +export const UPDATE_SESSION_BY_SESSION_TOKEN_SQL = `UPDATE sessions SET expires = ? WHERE sessionToken = ?` +export const DELETE_SESSION_SQL = `DELETE FROM sessions WHERE sessionToken = ?` +export const DELETE_SESSION_BY_USER_ID_SQL = `DELETE FROM sessions WHERE userId = ?` // ACCOUNT export const CREATE_ACCOUNT_SQL = ` - INSERT INTO authjs_accounts ( + INSERT INTO accounts ( id, userId, type, provider, providerAccountId, refresh_token, access_token, expires_at, token_type, scope, id_token, session_state, oauth_token, oauth_token_secret ) - VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)`; -export const GET_ACCOUNT_BY_ID_SQL = `SELECT * FROM authjs_accounts WHERE id = ? ` -export const GET_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = `SELECT * FROM authjs_accounts WHERE provider = ? AND providerAccountId = ?`; -export const DELETE_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = `DELETE FROM authjs_accounts WHERE provider = ? AND providerAccountId = ?`; -export const DELETE_ACCOUNT_BY_USER_ID_SQL = `DELETE FROM authjs_accounts WHERE userId = ?`; + VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)` +export const GET_ACCOUNT_BY_ID_SQL = `SELECT * FROM accounts WHERE id = ? ` +export const GET_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = `SELECT * FROM accounts WHERE provider = ? AND providerAccountId = ?` +export const DELETE_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = `DELETE FROM accounts WHERE provider = ? AND providerAccountId = ?` +export const DELETE_ACCOUNT_BY_USER_ID_SQL = `DELETE FROM accounts WHERE userId = ?` // VERIFICATION_TOKEN -export const GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL= `SELECT * FROM authjs_verification_tokens WHERE identifier = ? AND token = ?`; -export const CREATE_VERIFICATION_TOKEN_SQL = `INSERT INTO authjs_verification_tokens (identifier, expires, token) VALUES (?,?,?)`; -export const DELETE_VERIFICATION_TOKEN_SQL = `DELETE FROM authjs_verification_tokens WHERE identifier = ? and token = ?`; +export const GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL = `SELECT * FROM verification_tokens WHERE identifier = ? AND token = ?` +export const CREATE_VERIFICATION_TOKEN_SQL = `INSERT INTO verification_tokens (identifier, expires, token) VALUES (?,?,?)` +export const DELETE_VERIFICATION_TOKEN_SQL = `DELETE FROM verification_tokens WHERE identifier = ? and token = ?` // helper functions @@ -104,11 +96,11 @@ function format(obj: Record): T { for (const [key, value] of Object.entries(obj)) { if (value === null) { // eslint-disable-next-line @typescript-eslint/no-dynamic-delete - delete obj[key]; + delete obj[key] } if (isDate(value)) { - obj[key] = new Date(value); + obj[key] = new Date(value) } } @@ -117,56 +109,82 @@ function format(obj: Record): T { // D1 doesnt like undefined, it wants null when calling bind function cleanBindings(bindings: any[]) { - return bindings.map(e=> e === undefined ? null : e) + return bindings.map((e) => (e === undefined ? null : e)) } -export async function createRecord(db:BothDB, CREATE_SQL:string, bindings: any[], GET_SQL:string, getBindings: any[]):Promise { +export async function createRecord( + db: D1Database, + CREATE_SQL: string, + bindings: any[], + GET_SQL: string, + getBindings: any[] +) { try { bindings = cleanBindings(bindings) - await db.prepare(CREATE_SQL).bind(...bindings).run() + await db + .prepare(CREATE_SQL) + .bind(...bindings) + .run() return await getRecord(db, GET_SQL, getBindings) - } catch(e:any) { - console.log(`Error creating record with ${CREATE_SQL} and bindings ${bindings}`) - console.log(`D1 ERROR MESSAGE`, e.message, e.cause?.message) + } catch (e: any) { + console.error(e.message, e.cause?.message) throw e } } -export async function getRecord(db:BothDB, SQL:string, bindings:any[]):Promise { +export async function getRecord( + db: D1Database, + SQL: string, + bindings: any[] +): Promise { try { bindings = cleanBindings(bindings) - const res:any = await db.prepare(SQL).bind(...bindings).first() - if(res) { + const res: any = await db + .prepare(SQL) + .bind(...bindings) + .first() + if (res) { return format(res) } else { return null } - } catch(e:any) { - console.log(`Error getting record with ${SQL} and bindings ${bindings}`) - console.log(`D1 ERROR MESSAGE`, e.message, e.cause?.message) + } catch (e: any) { + console.error(e.message, e.cause?.message) throw e } } -export async function updateRecord(db:BothDB, SQL:string, bindings:any[]) { +export async function updateRecord( + db: D1Database, + SQL: string, + bindings: any[] +) { try { bindings = cleanBindings(bindings) - return await db.prepare(SQL).bind(...bindings).run() - } catch(e:any) { - console.log(`Error updating record with ${SQL} and bindings ${bindings}`) - console.log(`D1 ERROR MESSAGE`, e.message, e.cause?.message) + return await db + .prepare(SQL) + .bind(...bindings) + .run() + } catch (e: any) { + console.error(e.message, e.cause?.message) throw e } } -export async function deleteRecord(db:BothDB, SQL:string, bindings:any[]) { +export async function deleteRecord( + db: D1Database, + SQL: string, + bindings: any[] +) { // eslint-disable-next-line no-useless-catch try { bindings = cleanBindings(bindings) - await db.prepare(SQL).bind(...bindings).run() - } catch(e:any) { - console.log(`Error deleting record with ${SQL} and bindings ${bindings}`) - console.log(`D1 ERROR MESSAGE`, e.message, e.cause?.message) + await db + .prepare(SQL) + .bind(...bindings) + .run() + } catch (e: any) { + console.error(e.message, e.cause?.message) throw e } } @@ -181,7 +199,7 @@ export async function deleteRecord(db:BothDB, SQL:string, bindings:any[]) { * * ```javascript title="pages/api/auth/[...nextauth].js" * import NextAuth from "next-auth" - * import { D1Adapter, up } from "@next-auth/d1-adapter" + * import { D1Adapter, up } from "@auth/d1-adapter" * * * // For more information on each option (and a full list of options) go to @@ -198,14 +216,14 @@ export async function deleteRecord(db:BothDB, SQL:string, bindings:any[]) { * * Somewhere in the initialization of your application you need to run the `up(env.db)` function to create the tables in D1. * It will create 4 tables if they don't already exist: - * `authjs_accounts`, `authjs_sessions`, `authjs_users`, `authjs_verification_tokens`. - * - * The table prefix "authjs_" is not configurable at this time. - * + * `accounts`, `sessions`, `users`, `verification_tokens`. + * + * The table prefix "" is not configurable at this time. + * * You can use something like the following to attempt the migration once each time your worker starts up. Running migrations more than once will not erase your existing tables. * ```javascript - * import { up } from "@next-auth/d1-adapter" - * + * import { up } from "@auth/d1-adapter" + * * let migrated = false; * async function migrationHandle({event, resolve}) { * if(!migrated) { @@ -219,118 +237,173 @@ export async function deleteRecord(db:BothDB, SQL:string, bindings:any[]) { * return resolve(event) * } * ``` - * + * * * You can also initialize your tables manually. Look in [init.ts](https://github.com/nextauthjs/next-auth/packages/adapter-d1/src/migrations/init.ts) for the relevant sql. * Paste and run the SQL into your D1 dashboard query tool. - * + * **/ -export function D1Adapter(db:BothDB): Adapter { - +export function D1Adapter(db: D1Database): Adapter { // we need to run migrations if we dont have the right tables return { async createUser(user) { - console.log('Creating User:', user) - const id: string = crypto.randomUUID(); - const createBindings = [id, user.name , user.email, user.emailVerified?.toISOString(), user.image]; - const getBindings = [id]; + const id: string = crypto.randomUUID() + const createBindings = [ + id, + user.name, + user.email, + user.emailVerified?.toISOString(), + user.image, + ] + const getBindings = [id] + const newUser = await createRecord( - db, - CREATE_USER_SQL, createBindings, - GET_USER_BY_ID_SQL, getBindings - ); - // this method cant return null, gotta throw - if(newUser) return newUser; - throw new Error(`Couldn't create a new user`); + db, + CREATE_USER_SQL, + createBindings, + GET_USER_BY_ID_SQL, + getBindings + ) + if (newUser) return newUser + throw new Error("Error creating user: Cannot get user after creation.") }, async getUser(id) { - return await getRecord(db,GET_USER_BY_ID_SQL,[id]); + return await getRecord(db, GET_USER_BY_ID_SQL, [id]) }, async getUserByEmail(email) { - return await getRecord(db,GET_USER_BY_EMAIL_SQL,[email]); + return await getRecord(db, GET_USER_BY_EMAIL_SQL, [email]) }, async getUserByAccount({ providerAccountId, provider }) { - return await getRecord(db,GET_USER_BY_ACCOUNTL_SQL,[providerAccountId,provider]); - + return await getRecord(db, GET_USER_BY_ACCOUNTL_SQL, [ + providerAccountId, + provider, + ]) }, async updateUser(user) { - const params = await getRecord(db,GET_USER_BY_ID_SQL,[user.id]); - if(params) { + const params = await getRecord(db, GET_USER_BY_ID_SQL, [ + user.id, + ]) + if (params) { // copy any properties not in the update into the existing one and use that for bind params // covers the scenario where the user arg doesnt have all of the current users properties - Object.assign(params,user); - const res = await updateRecord(db,UPDATE_USER_BY_ID_SQL,[params.name, params.email, params.emailVerified?.toISOString(), params.image, params.id]); - if(res.success) { - // we could probably just return - const user = await getRecord(db,GET_USER_BY_ID_SQL,[params.id]); - if(user) return user; - throw new Error(`couldnt find user after update with id ${params.id}`); - } - throw new Error(`couldnt update user with data ${JSON.stringify(user)}`); + Object.assign(params, user) + const res = await updateRecord(db, UPDATE_USER_BY_ID_SQL, [ + params.name, + params.email, + params.emailVerified?.toISOString(), + params.image, + params.id, + ]) + if (res.success) { + // we could probably just return + const user = await getRecord(db, GET_USER_BY_ID_SQL, [ + params.id, + ]) + if (user) return user + throw new Error( + "Error updating user: Cannot get user after updating." + ) + } } - throw new Error(`couldnt find user to update from id ${user.id}`); + throw new Error("Error updating user: Failed to run the update SQL.") }, async deleteUser(userId) { // this should probably be in a db.batch but batch has problems right now in miniflare // no multi line sql statements - await deleteRecord(db, DELETE_ACCOUNT_BY_USER_ID_SQL, [userId]); - await deleteRecord(db, DELETE_SESSION_BY_USER_ID_SQL, [userId]); - await deleteRecord(db, DELETE_USER_SQL, [userId]); - return null; + await deleteRecord(db, DELETE_ACCOUNT_BY_USER_ID_SQL, [userId]) + await deleteRecord(db, DELETE_SESSION_BY_USER_ID_SQL, [userId]) + await deleteRecord(db, DELETE_USER_SQL, [userId]) + return null }, async linkAccount(a) { // convert user_id to userId and provider_account_id to providerAccountId - const id = crypto.randomUUID(); - const createBindings = [id, a.userId, a.type, a.provider, - a.providerAccountId, a.refresh_token , a.access_token, - a.expires_at, a.token_type, a.scope, a.id_token, a.session_state, - a.oauth_token?? null, a.oauth_token_secret?? null]; - const getBindings = [id]; + const id = crypto.randomUUID() + const createBindings = [ + id, + a.userId, + a.type, + a.provider, + a.providerAccountId, + a.refresh_token, + a.access_token, + a.expires_at, + a.token_type, + a.scope, + a.id_token, + a.session_state, + a.oauth_token ?? null, + a.oauth_token_secret ?? null, + ] + const getBindings = [id] return await createRecord( db, - CREATE_ACCOUNT_SQL, createBindings, - GET_ACCOUNT_BY_ID_SQL, getBindings - ); + CREATE_ACCOUNT_SQL, + createBindings, + GET_ACCOUNT_BY_ID_SQL, + getBindings + ) }, async unlinkAccount({ providerAccountId, provider }) { - await deleteRecord(db, DELETE_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL, [provider, providerAccountId]); + await deleteRecord( + db, + DELETE_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL, + [provider, providerAccountId] + ) }, async createSession({ sessionToken, userId, expires }) { - const id = crypto.randomUUID(); - const createBindings = [id, sessionToken, userId, expires.toISOString()]; - const getBindings = [sessionToken]; - const session = await createRecord( + const id = crypto.randomUUID() + const createBindings = [id, sessionToken, userId, expires.toISOString()] + const getBindings = [sessionToken] + const session = await createRecord( db, - CREATE_SESSION_SQL, createBindings, - GET_SESSION_BY_TOKEN_SQL, getBindings - ); - if(session) return session; - throw new Error(`Couldn't create session`); + CREATE_SESSION_SQL, + createBindings, + GET_SESSION_BY_TOKEN_SQL, + getBindings + ) + if (session) return session + throw new Error(`Couldn't create session`) }, async getSessionAndUser(sessionToken) { - const session:any = await getRecord(db,GET_SESSION_BY_TOKEN_SQL,[sessionToken]); + const session: any = await getRecord( + db, + GET_SESSION_BY_TOKEN_SQL, + [sessionToken] + ) // no session? no user! - if(session === null) return null; + if (session === null) return null // this shouldnt happen, but just in case - const user = await getRecord(db,GET_USER_BY_ID_SQL,[session.userId]); - if(user === null) return null; + const user = await getRecord(db, GET_USER_BY_ID_SQL, [ + session.userId, + ]) + if (user === null) return null - return {session, user}; + return { session, user } }, async updateSession({ sessionToken, expires }) { // kinda strange that we have to deal with an undefined expires, // we dont have any policy to enforce, lets just expire it now. - if(expires === undefined) { + if (expires === undefined) { await deleteRecord(db, DELETE_SESSION_SQL, [sessionToken]) return null } - const session = await getRecord(db, GET_SESSION_BY_TOKEN_SQL,[sessionToken]) - if(!session) return null - session.expires = expires; - await updateRecord(db, UPDATE_SESSION_BY_SESSION_TOKEN_SQL, [expires?.toISOString(), sessionToken]) - return await db.prepare(UPDATE_SESSION_BY_SESSION_TOKEN_SQL).bind(expires?.toISOString(), sessionToken).first() + const session = await getRecord( + db, + GET_SESSION_BY_TOKEN_SQL, + [sessionToken] + ) + if (!session) return null + session.expires = expires + await updateRecord(db, UPDATE_SESSION_BY_SESSION_TOKEN_SQL, [ + expires?.toISOString(), + sessionToken, + ]) + return await db + .prepare(UPDATE_SESSION_BY_SESSION_TOKEN_SQL) + .bind(expires?.toISOString(), sessionToken) + .first() }, async deleteSession(sessionToken) { await deleteRecord(db, DELETE_SESSION_SQL, [sessionToken]) @@ -338,14 +411,20 @@ export function D1Adapter(db:BothDB): Adapter { }, async createVerificationToken({ identifier, expires, token }) { return await createRecord( - db, - CREATE_VERIFICATION_TOKEN_SQL,[identifier, expires.toISOString(), token], - GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL,[identifier, token] + db, + CREATE_VERIFICATION_TOKEN_SQL, + [identifier, expires.toISOString(), token], + GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL, + [identifier, token] ) }, async useVerificationToken({ identifier, token }) { - const verificationToken = await getRecord(db, GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL, [identifier, token]) - if(!verificationToken) return null + const verificationToken = await getRecord( + db, + GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL, + [identifier, token] + ) + if (!verificationToken) return null await deleteRecord(db, DELETE_VERIFICATION_TOKEN_SQL, [identifier, token]) return verificationToken }, diff --git a/packages/adapter-d1/src/migrations/init.ts b/packages/adapter-d1/src/migrations.ts similarity index 58% rename from packages/adapter-d1/src/migrations/init.ts rename to packages/adapter-d1/src/migrations.ts index 283e574b..483c0cba 100644 --- a/packages/adapter-d1/src/migrations/init.ts +++ b/packages/adapter-d1/src/migrations.ts @@ -1,5 +1,7 @@ -export const up = [ -`CREATE TABLE IF NOT EXISTS "authjs_accounts" ( +import type { D1Database } from "." + +export const upSQLStatements = [ + `CREATE TABLE IF NOT EXISTS "accounts" ( "id" text NOT NULL, "userId" text NOT NULL DEFAULT NULL, "type" text NOT NULL DEFAULT NULL, @@ -16,14 +18,14 @@ export const up = [ "oauth_token" text DEFAULT NULL, PRIMARY KEY (id) );`, -`CREATE TABLE IF NOT EXISTS "authjs_sessions" ( + `CREATE TABLE IF NOT EXISTS "sessions" ( "id" text NOT NULL, "sessionToken" text NOT NULL, "userId" text NOT NULL DEFAULT NULL, "expires" datetime NOT NULL DEFAULT NULL, PRIMARY KEY (sessionToken) );`, -`CREATE TABLE IF NOT EXISTS "authjs_users" ( + `CREATE TABLE IF NOT EXISTS "users" ( "id" text NOT NULL DEFAULT '', "name" text DEFAULT NULL, "email" text DEFAULT NULL, @@ -31,23 +33,36 @@ export const up = [ "image" text DEFAULT NULL, PRIMARY KEY (id) );`, -`CREATE TABLE IF NOT EXISTS "authjs_verification_tokens" ( + `CREATE TABLE IF NOT EXISTS "verification_tokens" ( "identifier" text NOT NULL, "token" text NOT NULL DEFAULT NULL, "expires" datetime NOT NULL DEFAULT NULL, PRIMARY KEY (token) -);` -]; +);`, +] export const down = [ -`DROP TABLE IF EXISTS "authjs_accounts";`, -`DROP TABLE IF EXISTS "authjs_sessions";`, -`DROP TABLE IF EXISTS "authjs_users";`, -`DROP TABLE IF EXISTS "authjs_verification_token";` -]; - - - - + `DROP TABLE IF EXISTS "accounts";`, + `DROP TABLE IF EXISTS "sessions";`, + `DROP TABLE IF EXISTS "users";`, + `DROP TABLE IF EXISTS "verification_token";`, +] +/** + * + * @param db + */ +async function up(db: D1Database) { + // run the migration + upSQLStatements.forEach(async (sql) => { + try { + console.log("applying db migration sql", sql) + const res = await db.prepare(sql).run() + console.log("migration result", res) + } catch (e: any) { + console.log(e.cause?.message, e.message) + } + }) +} +export { up } diff --git a/packages/adapter-d1/src/migrations/index.ts b/packages/adapter-d1/src/migrations/index.ts deleted file mode 100644 index 7aa2f1b9..00000000 --- a/packages/adapter-d1/src/migrations/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {up as upSQLStatements} from "./init"; -// @ts-ignore -import { D1Database, D1PreparedStatement } from "@cloudflare/workers-types"; -import type { BothDB } from ".."; - -/** - * - * @param db - */ -async function up(db: BothDB) { - // run the migration - upSQLStatements.forEach(async (sql)=>{ - try { - console.log('applying db migration sql', sql) - const res = await db.prepare(sql).run(); - console.log('migration result', res) - } catch(e:any) { - console.log(e.cause?.message, e.message) - } - - }) -} - -export { up } \ No newline at end of file diff --git a/packages/adapter-d1/tests/index.test.ts b/packages/adapter-d1/tests/index.test.ts index b0f09c39..25e82a29 100644 --- a/packages/adapter-d1/tests/index.test.ts +++ b/packages/adapter-d1/tests/index.test.ts @@ -1,33 +1,46 @@ -import { +import { D1Adapter, up, getRecord, GET_USER_BY_ID_SQL, GET_SESSION_BY_TOKEN_SQL, GET_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL, - GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL -} from "../src"; + GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL, +} from "../src" import { AdapterSession, AdapterUser, - AdapterAccount -} from "next-auth/adapters"; -import { D1Database, D1DatabaseAPI } from "@miniflare/d1"; -import { runBasicTests } from "@next-auth/adapter-test"; -import Database from "better-sqlite3"; + AdapterAccount, +} from "@auth/core/adapters" +import { D1Database, D1DatabaseAPI } from "@miniflare/d1" +import { runBasicTests } from "@auth/adapter-test" +import Database from "better-sqlite3" -const sqliteDB = new Database(":memory:"); -let db = new D1Database(new D1DatabaseAPI(sqliteDB)); -let adapter = D1Adapter(db); +const sqliteDB = new Database(":memory:") +let db = new D1Database(new D1DatabaseAPI(sqliteDB as any)) +let adapter = D1Adapter(db) // put stuff here if we need some async init -beforeAll(async ()=> await up(db)) +beforeAll(async () => await up(db)) runBasicTests({ - adapter: adapter, + adapter, db: { - user: async id => await getRecord(db,GET_USER_BY_ID_SQL,[id]), - session: async sessionToken => await getRecord(db,GET_SESSION_BY_TOKEN_SQL,[sessionToken]), - account: async ({ provider, providerAccountId }) => await getRecord(db,GET_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL,[provider, providerAccountId]), - verificationToken: async ({ identifier, token }) => await getRecord(db,GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL,[identifier, token]) + user: async (id) => + await getRecord(db, GET_USER_BY_ID_SQL, [id]), + session: async (sessionToken) => + await getRecord(db, GET_SESSION_BY_TOKEN_SQL, [ + sessionToken, + ]), + account: async ({ provider, providerAccountId }) => + await getRecord( + db, + GET_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL, + [provider, providerAccountId] + ), + verificationToken: async ({ identifier, token }) => + await getRecord(db, GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL, [ + identifier, + token, + ]), }, -}); +}) diff --git a/packages/adapter-d1/tsconfig.json b/packages/adapter-d1/tsconfig.json index b7d20a1f..d6b067c5 100644 --- a/packages/adapter-d1/tsconfig.json +++ b/packages/adapter-d1/tsconfig.json @@ -1,9 +1,20 @@ { - "extends": "@next-auth/tsconfig/tsconfig.adapters.json", + "extends": "@auth/tsconfig/tsconfig.base.json", "compilerOptions": { + "allowJs": true, + "baseUrl": ".", + "isolatedModules": true, + "target": "ES2020", + "module": "ESNext", + "moduleResolution": "node", + "outDir": ".", "rootDir": "src", - "outDir": "dist", - "types": ["@cloudflare/workers-types"] + "skipDefaultLibCheck": true, + "strictNullChecks": true, + "stripInternal": true, + "declarationMap": true, + "declaration": true }, - "exclude": ["tests", "dist", "jest.config.js"] + "include": ["src/**/*", "tests/migrations"], + "exclude": ["*.js", "*.d.ts"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bace0ec4..69fce654 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -312,6 +312,34 @@ importers: specifier: 4.0.0-next.6 version: 4.0.0-next.6(prettier@2.8.1)(typedoc@0.24.8) + packages/adapter-d1: + dependencies: + '@auth/core': + specifier: workspace:* + version: link:../core + devDependencies: + '@auth/adapter-test': + specifier: workspace:* + version: link:../adapter-test + '@auth/tsconfig': + specifier: workspace:* + version: link:../tsconfig + '@cloudflare/workers-types': + specifier: ^4.20230321.0 + version: 4.20230914.0 + '@miniflare/d1': + specifier: ^2.12.2 + version: 2.14.1 + better-sqlite3: + specifier: ^7.0.0 + version: 7.6.2 + jest: + specifier: ^27.0.3 + version: 27.5.1 + next-auth: + specifier: workspace:* + version: link:../next-auth + packages/adapter-dgraph: dependencies: '@auth/core': @@ -2717,6 +2745,7 @@ packages: semver: 6.3.0 transitivePeerDependencies: - supports-color + dev: true /@babel/core@7.22.1: resolution: {integrity: sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==} @@ -2830,6 +2859,7 @@ packages: browserslist: 4.21.4 lru-cache: 5.1.1 semver: 6.3.0 + dev: true /@babel/helper-compilation-targets@7.20.7(@babel/core@7.22.1): resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} @@ -2845,6 +2875,20 @@ packages: semver: 6.3.0 dev: true + /@babel/helper-compilation-targets@7.22.1(@babel/core@7.20.12): + resolution: {integrity: sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.22.3 + '@babel/core': 7.20.12 + '@babel/helper-validator-option': 7.21.0 + browserslist: 4.21.4 + lru-cache: 5.1.1 + semver: 6.3.0 + dev: true + /@babel/helper-compilation-targets@7.22.1(@babel/core@7.22.1): resolution: {integrity: sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==} engines: {node: '>=6.9.0'} @@ -3005,7 +3049,7 @@ packages: resolution: {integrity: sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.22.4 dev: true /@babel/helper-function-name@7.19.0: @@ -3032,7 +3076,7 @@ packages: resolution: {integrity: sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.22.4 dev: true /@babel/helper-module-imports@7.16.0: @@ -3090,6 +3134,7 @@ packages: '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color + dev: true /@babel/helper-module-transforms@7.22.1: resolution: {integrity: sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==} @@ -3182,9 +3227,9 @@ packages: '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-member-expression-to-functions': 7.20.7 '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 + '@babel/template': 7.21.9 + '@babel/traverse': 7.22.4 + '@babel/types': 7.22.4 transitivePeerDependencies: - supports-color dev: true @@ -3245,8 +3290,8 @@ packages: dependencies: '@babel/helper-function-name': 7.19.0 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 + '@babel/traverse': 7.22.4 + '@babel/types': 7.22.4 transitivePeerDependencies: - supports-color dev: true @@ -3265,11 +3310,12 @@ packages: resolution: {integrity: sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 - '@babel/types': 7.20.7 + '@babel/template': 7.21.9 + '@babel/traverse': 7.22.4 + '@babel/types': 7.22.4 transitivePeerDependencies: - supports-color + dev: true /@babel/helpers@7.22.3: resolution: {integrity: sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==} @@ -3875,7 +3921,7 @@ packages: dependencies: '@babel/compat-data': 7.20.10 '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.20.12) + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.20.12) '@babel/plugin-transform-parameters': 7.20.3(@babel/core@7.20.12) @@ -3889,7 +3935,7 @@ packages: dependencies: '@babel/compat-data': 7.20.10 '@babel/core': 7.22.1 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.1) + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.22.1) '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.1) '@babel/plugin-transform-parameters': 7.20.3(@babel/core@7.22.1) @@ -4198,7 +4244,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.21.5 dev: true /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.1): @@ -4207,7 +4253,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.1 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.21.5 /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.18.5): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} @@ -4365,7 +4411,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.21.5 dev: true /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.1): @@ -4374,7 +4420,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.1 - '@babel/helper-plugin-utils': 7.20.2 + '@babel/helper-plugin-utils': 7.21.5 /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.18.5): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} @@ -4695,6 +4741,16 @@ packages: '@babel/helper-plugin-utils': 7.20.2 dev: true + /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.20.12): + resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + /@babel/plugin-syntax-typescript@7.21.4(@babel/core@7.22.1): resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} engines: {node: '>=6.9.0'} @@ -4927,7 +4983,7 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.20.12) + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.20.12) '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 '@babel/helper-optimise-call-expression': 7.18.6 @@ -4947,7 +5003,7 @@ packages: dependencies: '@babel/core': 7.22.1 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.1) + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.22.1) '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 '@babel/helper-optimise-call-expression': 7.18.6 @@ -5249,7 +5305,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.20.12) + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.20.12) '@babel/helper-function-name': 7.19.0 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5261,7 +5317,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.1 - '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.1) + '@babel/helper-compilation-targets': 7.22.1(@babel/core@7.22.1) '@babel/helper-function-name': 7.19.0 '@babel/helper-plugin-utils': 7.20.2 dev: true @@ -5381,7 +5437,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-module-transforms': 7.20.11 + '@babel/helper-module-transforms': 7.22.1 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color @@ -5394,7 +5450,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.1 - '@babel/helper-module-transforms': 7.20.11 + '@babel/helper-module-transforms': 7.22.1 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color @@ -5437,7 +5493,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-module-transforms': 7.20.11 + '@babel/helper-module-transforms': 7.22.1 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-simple-access': 7.20.2 transitivePeerDependencies: @@ -5451,7 +5507,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.1 - '@babel/helper-module-transforms': 7.20.11 + '@babel/helper-module-transforms': 7.22.1 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-simple-access': 7.20.2 transitivePeerDependencies: @@ -5498,7 +5554,7 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.20.11 + '@babel/helper-module-transforms': 7.22.1 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-identifier': 7.19.1 transitivePeerDependencies: @@ -5513,7 +5569,7 @@ packages: dependencies: '@babel/core': 7.22.1 '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-module-transforms': 7.20.11 + '@babel/helper-module-transforms': 7.22.1 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-validator-identifier': 7.19.1 transitivePeerDependencies: @@ -5553,7 +5609,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-module-transforms': 7.20.11 + '@babel/helper-module-transforms': 7.22.1 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color @@ -5566,7 +5622,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.1 - '@babel/helper-module-transforms': 7.20.11 + '@babel/helper-module-transforms': 7.22.1 '@babel/helper-plugin-utils': 7.20.2 transitivePeerDependencies: - supports-color @@ -5897,7 +5953,7 @@ packages: '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.1) - '@babel/types': 7.20.7 + '@babel/types': 7.22.4 dev: true /@babel/plugin-transform-react-pure-annotations@7.18.0(@babel/core@7.18.5): @@ -6284,7 +6340,7 @@ packages: '@babel/core': 7.20.12 '@babel/helper-create-class-features-plugin': 7.20.2(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.20.12) + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.20.12) transitivePeerDependencies: - supports-color dev: true @@ -6298,7 +6354,7 @@ packages: '@babel/core': 7.22.1 '@babel/helper-create-class-features-plugin': 7.20.2(@babel/core@7.22.1) '@babel/helper-plugin-utils': 7.20.2 - '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.1) + '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.22.1) transitivePeerDependencies: - supports-color dev: true @@ -6901,14 +6957,14 @@ packages: resolution: {integrity: sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.14 + '@babel/code-frame': 7.21.4 + '@babel/generator': 7.22.3 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.20.15 - '@babel/types': 7.20.7 + '@babel/parser': 7.22.4 + '@babel/types': 7.22.4 debug: 4.3.4(supports-color@7.2.0) globals: 11.12.0 transitivePeerDependencies: @@ -6990,6 +7046,10 @@ packages: /@braintree/sanitize-url@6.0.2: resolution: {integrity: sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==} + /@cloudflare/workers-types@4.20230914.0: + resolution: {integrity: sha512-OVeN4lFVu1O0PJGZ2d0FwpK8lelFcr33qYOgCh77ErEYmEBO4adwnIxcIsdQbFbhF0ffN6joiVcljD4zakdaeQ==} + dev: true + /@cnakazawa/watch@1.0.4: resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==} engines: {node: '>=0.1.95'} @@ -8861,6 +8921,10 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true + /@iarna/toml@2.2.5: + resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + dev: true + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -8906,7 +8970,7 @@ packages: '@jest/types': 28.1.3 '@types/node': 17.0.45 chalk: 4.1.2 - jest-message-util: 28.1.1 + jest-message-util: 28.1.3 jest-util: 28.1.3 slash: 3.0.0 dev: true @@ -8918,8 +8982,8 @@ packages: '@jest/types': 29.5.0 '@types/node': 17.0.45 chalk: 4.1.2 - jest-message-util: 29.2.1 - jest-util: 29.2.1 + jest-message-util: 29.5.0 + jest-util: 29.5.0 slash: 3.0.0 dev: true @@ -8930,8 +8994,8 @@ packages: '@jest/types': 29.5.0 '@types/node': 17.0.45 chalk: 4.1.2 - jest-message-util: 29.3.1 - jest-util: 29.3.1 + jest-message-util: 29.5.0 + jest-util: 29.5.0 slash: 3.0.0 dev: true @@ -9289,7 +9353,7 @@ packages: resolution: {integrity: sha512-vwnVmrVhTmGgQzyvcpze08br91OL61t9O0lJMDyb6Y/D8EKQ9V7rGUb/p7PDt0GPzK0zFYqXWFo4EO2legXmkg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-get-type: 29.2.0 + jest-get-type: 29.4.3 dev: true /@jest/expect-utils@29.3.1: @@ -9320,7 +9384,7 @@ packages: resolution: {integrity: sha512-Lz/3x4Se5g6nBuLjTO+xE8D4OXY9fFmosZPwkXXZUJUsp9r9seN81cJa54wOGr1QjCQnhngMqclblhM4X/hcCg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - expect: 29.3.1 + expect: 29.5.0 jest-snapshot: 29.5.0 transitivePeerDependencies: - supports-color @@ -9330,7 +9394,7 @@ packages: resolution: {integrity: sha512-QivM7GlSHSsIAWzgfyP8dgeExPRZ9BIe2LsdPyEhCGkZkoyA+kGsoIzbKAfZCvvRzfZioKwPtCZIt5SaoxYCvg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - expect: 29.3.1 + expect: 29.5.0 jest-snapshot: 29.5.0 transitivePeerDependencies: - supports-color @@ -9401,7 +9465,7 @@ packages: '@jest/types': 29.5.0 '@sinonjs/fake-timers': 9.1.2 '@types/node': 17.0.45 - jest-message-util: 29.3.1 + jest-message-util: 29.5.0 jest-mock: 29.3.0 jest-util: 29.5.0 dev: true @@ -9413,7 +9477,7 @@ packages: '@jest/types': 29.5.0 '@sinonjs/fake-timers': 9.1.2 '@types/node': 17.0.45 - jest-message-util: 29.3.1 + jest-message-util: 29.5.0 jest-mock: 29.3.1 jest-util: 29.5.0 dev: true @@ -9452,7 +9516,7 @@ packages: resolution: {integrity: sha512-dEgl/6v7ToB4vXItdvcltJBgny0xBE6xy6IYQrPJAJggdEinGxCDMivNv7sFzPcTITGquXD6UJwYxfJ/5ZwDSg==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@jest/environment': 28.1.1 + '@jest/environment': 28.1.3 '@jest/expect': 28.1.1 '@jest/types': 28.1.3 transitivePeerDependencies: @@ -9463,7 +9527,7 @@ packages: resolution: {integrity: sha512-okYDVzYNrt/4ysR8XnX6u0I1bGG4kmfdXtUu7kwWHZ9OP13RCjmphgve0tfOrNluwksWvOPYS1f/HOrFTHLygQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.3.0 + '@jest/environment': 29.5.0 '@jest/expect': 29.3.0 '@jest/types': 29.5.0 jest-mock: 29.3.0 @@ -9593,7 +9657,7 @@ packages: istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.4 - jest-message-util: 28.1.1 + jest-message-util: 28.1.3 jest-util: 28.1.3 jest-worker: 28.1.1 slash: 3.0.0 @@ -9615,9 +9679,9 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.2.1 - '@jest/test-result': 29.2.1 - '@jest/transform': 29.3.0 + '@jest/console': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.17 '@types/node': 17.0.45 @@ -9631,8 +9695,8 @@ packages: istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.4 - jest-message-util: 29.2.1 - jest-util: 29.2.1 + jest-message-util: 29.5.0 + jest-util: 29.5.0 jest-worker: 29.3.1 slash: 3.0.0 string-length: 4.0.2 @@ -9652,9 +9716,9 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.3.1 - '@jest/test-result': 29.3.1 - '@jest/transform': 29.3.1 + '@jest/console': 29.5.0 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.17 '@types/node': 17.0.45 @@ -9668,8 +9732,8 @@ packages: istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.4 - jest-message-util: 29.3.1 - jest-util: 29.3.1 + jest-message-util: 29.5.0 + jest-util: 29.5.0 jest-worker: 29.3.1 slash: 3.0.0 string-length: 4.0.2 @@ -9823,7 +9887,7 @@ packages: resolution: {integrity: sha512-lS4+H+VkhbX6z64tZP7PAUwPqhwj3kbuEHcaLuaBuB+riyaX7oa1txe0tXgrFj5hRWvZKvqO7LZDlNWeJ7VTPA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.2.1 + '@jest/console': 29.5.0 '@jest/types': 29.5.0 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 @@ -9833,7 +9897,7 @@ packages: resolution: {integrity: sha512-qeLa6qc0ddB0kuOZyZIhfN5q0e2htngokyTWsGriedsDhItisW7SDYZ7ceOe57Ii03sL988/03wAcBh3TChMGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.3.1 + '@jest/console': 29.5.0 '@jest/types': 29.5.0 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 @@ -9894,7 +9958,7 @@ packages: dependencies: '@jest/test-result': 29.5.0 graceful-fs: 4.2.10 - jest-haste-map: 29.3.1 + jest-haste-map: 29.5.0 slash: 3.0.0 dev: true @@ -9904,7 +9968,7 @@ packages: dependencies: '@jest/test-result': 29.5.0 graceful-fs: 4.2.10 - jest-haste-map: 29.3.1 + jest-haste-map: 29.5.0 slash: 3.0.0 dev: true @@ -9968,7 +10032,7 @@ packages: resolution: {integrity: sha512-PkfaTUuvjUarl1EDr5ZQcCA++oXkFCP9QFUkG0yVKVmNObjhrqDy0kbMpMebfHWm3CCDHjYNem9eUSH8suVNHQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.22.1 '@jest/types': 28.1.3 '@jridgewell/trace-mapping': 0.3.17 babel-plugin-istanbul: 6.1.1 @@ -9982,7 +10046,7 @@ packages: micromatch: 4.0.5 pirates: 4.0.5 slash: 3.0.0 - write-file-atomic: 4.0.1 + write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color dev: true @@ -9999,9 +10063,9 @@ packages: convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.10 - jest-haste-map: 29.3.0 - jest-regex-util: 29.2.0 - jest-util: 29.2.1 + jest-haste-map: 29.5.0 + jest-regex-util: 29.4.3 + jest-util: 29.5.0 micromatch: 4.0.5 pirates: 4.0.5 slash: 3.0.0 @@ -10368,6 +10432,54 @@ packages: - tedious dev: true + /@miniflare/core@2.14.1: + resolution: {integrity: sha512-d+SGAda/VoXq+SKz04oq8ATUwQw5755L87fgPR8pTdR2YbWkxdbmEm1z2olOpDiUjcR86aN6NtCjY6tUC7fqaw==} + engines: {node: '>=16.13'} + dependencies: + '@iarna/toml': 2.2.5 + '@miniflare/queues': 2.14.1 + '@miniflare/shared': 2.14.1 + '@miniflare/watcher': 2.14.1 + busboy: 1.6.0 + dotenv: 10.0.0 + kleur: 4.1.5 + set-cookie-parser: 2.5.1 + undici: 5.20.0 + urlpattern-polyfill: 4.0.3 + dev: true + + /@miniflare/d1@2.14.1: + resolution: {integrity: sha512-MulDDBsDD8o5DwiqdMeJZy2vLoMji+NWnLcuibSag2mayA0LJcp0eHezseZNkW+knciWR1gMP8Xpa4Q1KwkbKA==} + engines: {node: '>=16.7'} + dependencies: + '@miniflare/core': 2.14.1 + '@miniflare/shared': 2.14.1 + dev: true + + /@miniflare/queues@2.14.1: + resolution: {integrity: sha512-uBzrbBkIgtNoztDpmMMISg/brYtxLHRE7oTaN8OVnq3bG+3nF9kQC42HUz+Vg+sf65UlvhSaqkjllgx+fNtOxQ==} + engines: {node: '>=16.7'} + dependencies: + '@miniflare/shared': 2.14.1 + dev: true + + /@miniflare/shared@2.14.1: + resolution: {integrity: sha512-73GnLtWn5iP936ctE6ZJrMqGu134KOoIIveq5Yd/B+NnbFfzpuzjCpkLrnqjkDdsxDbruXSb5eTR/SmAdpJxZQ==} + engines: {node: '>=16.13'} + dependencies: + '@types/better-sqlite3': 7.6.4 + kleur: 4.1.5 + npx-import: 1.1.4 + picomatch: 2.3.1 + dev: true + + /@miniflare/watcher@2.14.1: + resolution: {integrity: sha512-dkFvetm5wk6pwunlYb/UkI0yFNb3otLpRm5RDywMUzqObEf+rCiNNAbJe3HUspr2ncZVAaRWcEaDh82vYK5cmw==} + engines: {node: '>=16.13'} + dependencies: + '@miniflare/shared': 2.14.1 + dev: true + /@mongodb-js/saslprep@1.1.0: resolution: {integrity: sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==} requiresBuild: true @@ -11936,7 +12048,7 @@ packages: /@types/babel__traverse@7.17.1: resolution: {integrity: sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==} dependencies: - '@babel/types': 7.20.7 + '@babel/types': 7.22.4 /@types/better-sqlite3@7.6.4: resolution: {integrity: sha512-dzrRZCYPXIXfSR1/surNbJ/grU3scTaygS0OMzjlGf71i9sc2fGyHPXXiXmEvNIoE0cGwsanEFMVJxPXmco9Eg==} @@ -13745,17 +13857,17 @@ packages: - supports-color dev: true - /babel-jest@28.1.1(@babel/core@7.20.12): + /babel-jest@28.1.1(@babel/core@7.22.1): resolution: {integrity: sha512-MEt0263viUdAkTq5D7upHPNxvt4n9uLUGa6pPz3WviNBMtOmStb1lIXS3QobnoqM+qnH+vr4EKlvhe8QcmxIYw==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.22.1 '@jest/transform': 28.1.1 '@types/babel__core': 7.1.19 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 28.1.1(@babel/core@7.20.12) + babel-preset-jest: 28.1.1(@babel/core@7.22.1) chalk: 4.1.2 graceful-fs: 4.2.10 slash: 3.0.0 @@ -13770,7 +13882,7 @@ packages: '@babel/core': ^7.8.0 dependencies: '@babel/core': 7.20.12 - '@jest/transform': 29.3.1 + '@jest/transform': 29.5.0 '@types/babel__core': 7.1.19 babel-plugin-istanbul: 6.1.1 babel-preset-jest: 29.2.0(@babel/core@7.20.12) @@ -13788,7 +13900,7 @@ packages: '@babel/core': ^7.8.0 dependencies: '@babel/core': 7.20.12 - '@jest/transform': 29.3.1 + '@jest/transform': 29.5.0 '@types/babel__core': 7.1.19 babel-plugin-istanbul: 6.1.1 babel-preset-jest: 29.2.0(@babel/core@7.20.12) @@ -14155,15 +14267,15 @@ packages: babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.1) dev: true - /babel-preset-jest@28.1.1(@babel/core@7.20.12): + /babel-preset-jest@28.1.1(@babel/core@7.22.1): resolution: {integrity: sha512-FCq9Oud0ReTeWtcneYf/48981aTfXYuB9gbU4rBNNJVBSQ6ssv7E6v/qvbBxtOWwZFXjLZwpg+W3q7J6vhH25g==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.22.1 babel-plugin-jest-hoist: 28.1.1 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.20.12) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.1) dev: true /babel-preset-jest@29.2.0(@babel/core@7.20.12): @@ -14257,6 +14369,14 @@ packages: dependencies: tweetnacl: 0.14.5 + /better-sqlite3@7.6.2: + resolution: {integrity: sha512-S5zIU1Hink2AH4xPsN0W43T1/AJ5jrPh7Oy07ocuW/AKYYY02GWzz9NH0nbSMn/gw6fDZ5jZ1QsHt1BXAwJ6Lg==} + requiresBuild: true + dependencies: + bindings: 1.5.0 + prebuild-install: 7.1.1 + dev: true + /better-sqlite3@8.5.0: resolution: {integrity: sha512-vbPcv/Hx5WYdyNg/NbcfyaBZyv9s/NVbxb7yCeC5Bq1pVocNxeL2tZmSu3Rlm4IEOTjYdGyzWQgyx0OSdORBzw==} requiresBuild: true @@ -14543,6 +14663,12 @@ packages: dependencies: node-gyp-build: 4.5.0 + /builtins@5.0.1: + resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} + dependencies: + semver: 7.5.1 + dev: true + /bundle-require@3.1.2(esbuild@0.15.16): resolution: {integrity: sha512-Of6l6JBAxiyQ5axFxUM6dYeP/W7X2Sozeo/4EYB9sJhL+dqL7TKjg+shwxp6jlu/6ZSERfsYtIpSJ1/x3XkAEA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -18601,6 +18727,21 @@ packages: strip-final-newline: 2.0.0 dev: true + /execa@6.1.0: + resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 3.0.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + dev: true + /executable@4.1.1: resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} engines: {node: '>=4'} @@ -20575,6 +20716,11 @@ packages: engines: {node: '>=10.17.0'} dev: true + /human-signals@3.0.1: + resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==} + engines: {node: '>=12.20.0'} + dev: true + /humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} requiresBuild: true @@ -21174,6 +21320,11 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -21339,8 +21490,8 @@ packages: resolution: {integrity: sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.20.12 - '@babel/parser': 7.20.15 + '@babel/core': 7.22.1 + '@babel/parser': 7.22.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -21453,7 +21604,7 @@ packages: resolution: {integrity: sha512-75+BBVTsL4+p2w198DQpCeyh1RdaS2lhEG87HkaFX/UG0gJExVq2skG2pT7XZEGBubNj2CytcWSPan4QEPNosw==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@jest/environment': 28.1.1 + '@jest/environment': 28.1.3 '@jest/expect': 28.1.1 '@jest/test-result': 28.1.1 '@jest/types': 28.1.3 @@ -21480,7 +21631,7 @@ packages: resolution: {integrity: sha512-xL1cmbUGBGy923KBZpZ2LRKspHlIhrltrwGaefJ677HXCPY5rTF758BtweamBype2ogcSEK/oqcp1SmYZ/ATig==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.3.0 + '@jest/environment': 29.5.0 '@jest/expect': 29.3.0 '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 @@ -21490,13 +21641,13 @@ packages: dedent: 0.7.0 is-generator-fn: 2.1.0 jest-each: 29.2.1 - jest-matcher-utils: 29.3.1 - jest-message-util: 29.3.1 - jest-runtime: 29.3.1 - jest-snapshot: 29.3.1 + jest-matcher-utils: 29.5.0 + jest-message-util: 29.5.0 + jest-runtime: 29.5.0 + jest-snapshot: 29.5.0 jest-util: 29.5.0 p-limit: 3.1.0 - pretty-format: 29.3.1 + pretty-format: 29.5.0 slash: 3.0.0 stack-utils: 2.0.5 transitivePeerDependencies: @@ -21517,13 +21668,13 @@ packages: dedent: 0.7.0 is-generator-fn: 2.1.0 jest-each: 29.3.1 - jest-matcher-utils: 29.3.1 - jest-message-util: 29.3.1 - jest-runtime: 29.3.1 - jest-snapshot: 29.3.1 + jest-matcher-utils: 29.5.0 + jest-message-util: 29.5.0 + jest-runtime: 29.5.0 + jest-snapshot: 29.5.0 jest-util: 29.5.0 p-limit: 3.1.0 - pretty-format: 29.3.1 + pretty-format: 29.5.0 slash: 3.0.0 stack-utils: 2.0.5 transitivePeerDependencies: @@ -21652,7 +21803,7 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.3.0 + '@jest/core': 29.5.0 '@jest/test-result': 29.2.1 '@jest/types': 29.2.1 chalk: 4.1.2 @@ -21680,7 +21831,7 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.3.1 + '@jest/core': 29.5.0 '@jest/test-result': 29.3.1 '@jest/types': 29.3.1 chalk: 4.1.2 @@ -21812,11 +21963,11 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.22.1 '@jest/test-sequencer': 28.1.1 '@jest/types': 28.1.3 '@types/node': 17.0.45 - babel-jest: 28.1.1(@babel/core@7.20.12) + babel-jest: 28.1.1(@babel/core@7.22.1) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.3.0 @@ -21864,11 +22015,11 @@ packages: jest-circus: 29.3.0 jest-environment-node: 29.3.0 jest-get-type: 29.2.0 - jest-regex-util: 29.2.0 - jest-resolve: 29.3.0 - jest-runner: 29.3.0 - jest-util: 29.2.1 - jest-validate: 29.2.2 + jest-regex-util: 29.4.3 + jest-resolve: 29.5.0 + jest-runner: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 micromatch: 4.0.5 parse-json: 5.2.0 pretty-format: 29.3.1 @@ -21903,11 +22054,11 @@ packages: jest-circus: 29.3.1 jest-environment-node: 29.3.1 jest-get-type: 29.2.0 - jest-regex-util: 29.2.0 - jest-resolve: 29.3.1 - jest-runner: 29.3.1 - jest-util: 29.3.1 - jest-validate: 29.3.1 + jest-regex-util: 29.4.3 + jest-resolve: 29.5.0 + jest-runner: 29.5.0 + jest-util: 29.5.0 + jest-validate: 29.5.0 micromatch: 4.0.5 parse-json: 5.2.0 pretty-format: 29.3.1 @@ -21991,8 +22142,8 @@ packages: dependencies: chalk: 4.1.2 diff-sequences: 29.2.0 - jest-get-type: 29.2.0 - pretty-format: 29.3.1 + jest-get-type: 29.4.3 + pretty-format: 29.5.0 dev: true /jest-diff@29.3.1: @@ -22001,8 +22152,8 @@ packages: dependencies: chalk: 4.1.2 diff-sequences: 29.3.1 - jest-get-type: 29.2.0 - pretty-format: 29.3.1 + jest-get-type: 29.4.3 + pretty-format: 29.5.0 dev: true /jest-diff@29.5.0: @@ -22089,7 +22240,7 @@ packages: dependencies: '@jest/types': 29.5.0 chalk: 4.1.2 - jest-get-type: 29.2.0 + jest-get-type: 29.4.3 jest-util: 29.5.0 pretty-format: 29.5.0 dev: true @@ -22100,7 +22251,7 @@ packages: dependencies: '@jest/types': 29.5.0 chalk: 4.1.2 - jest-get-type: 29.2.0 + jest-get-type: 29.4.3 jest-util: 29.5.0 pretty-format: 29.5.0 dev: true @@ -22199,11 +22350,11 @@ packages: resolution: {integrity: sha512-2aV/eeY/WNgUUJrrkDJ3cFEigjC5fqT1+fCclrY6paqJ5zVPoM//sHmfgUUp7WLYxIdbPwMiVIzejpN56MxnNA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@jest/environment': 28.1.1 - '@jest/fake-timers': 28.1.1 + '@jest/environment': 28.1.3 + '@jest/fake-timers': 28.1.3 '@jest/types': 28.1.3 '@types/node': 17.0.45 - jest-mock: 28.1.1 + jest-mock: 28.1.3 jest-util: 28.1.3 dev: true @@ -22211,7 +22362,7 @@ packages: resolution: {integrity: sha512-oikVE5pyiBUMrqi7J/kFGd1zeT14+EnJulyqzopDNijLX13ygwjiOF/GVpVKSGyBrrAwSkaj/ohEQJCcjkCtOA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.3.0 + '@jest/environment': 29.5.0 '@jest/fake-timers': 29.3.0 '@jest/types': 29.5.0 '@types/node': 17.0.45 @@ -22339,8 +22490,8 @@ packages: anymatch: 3.1.3 fb-watchman: 2.0.1 graceful-fs: 4.2.10 - jest-regex-util: 29.2.0 - jest-util: 29.2.1 + jest-regex-util: 29.4.3 + jest-util: 29.5.0 jest-worker: 29.3.1 micromatch: 4.0.5 walker: 1.0.8 @@ -22358,8 +22509,8 @@ packages: anymatch: 3.1.3 fb-watchman: 2.0.1 graceful-fs: 4.2.10 - jest-regex-util: 29.2.0 - jest-util: 29.3.1 + jest-regex-util: 29.4.3 + jest-util: 29.5.0 jest-worker: 29.3.1 micromatch: 4.0.5 walker: 1.0.8 @@ -22487,16 +22638,16 @@ packages: resolution: {integrity: sha512-1YvSqYoiurxKOJtySc+CGVmw/e1v4yNY27BjWTVzp0aTduQeA7pdieLiW05wTYG/twlKOp2xS/pWuikQEmklug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-get-type: 29.2.0 - pretty-format: 29.3.1 + jest-get-type: 29.4.3 + pretty-format: 29.5.0 dev: true /jest-leak-detector@29.3.1: resolution: {integrity: sha512-3DA/VVXj4zFOPagGkuqHnSQf1GZBmmlagpguxEERO6Pla2g84Q1MaVIB3YMxgUaFIaYag8ZnTyQgiZ35YEqAQA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-get-type: 29.2.0 - pretty-format: 29.3.1 + jest-get-type: 29.4.3 + pretty-format: 29.5.0 dev: true /jest-leak-detector@29.5.0: @@ -22542,9 +22693,9 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 - jest-diff: 29.2.1 - jest-get-type: 29.2.0 - pretty-format: 29.3.1 + jest-diff: 29.5.0 + jest-get-type: 29.4.3 + pretty-format: 29.5.0 dev: true /jest-matcher-utils@29.3.1: @@ -22864,8 +23015,8 @@ packages: resolution: {integrity: sha512-ykSbDbWmIaHprOBig57AExw7i6Fj0y69M6baiAd75Ivx1UMQt4wsM6A+SNqIhycV6Zy8XV3L40Ac3HYSrDSq7w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-regex-util: 29.2.0 - jest-snapshot: 29.3.0 + jest-regex-util: 29.4.3 + jest-snapshot: 29.5.0 transitivePeerDependencies: - supports-color dev: true @@ -22874,8 +23025,8 @@ packages: resolution: {integrity: sha512-Vk0cYq0byRw2WluNmNWGqPeRnZ3p3hHmjJMp2dyyZeYIfiBskwq4rpiuGFR6QGAdbj58WC7HN4hQHjf2mpvrLA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-regex-util: 29.2.0 - jest-snapshot: 29.3.1 + jest-regex-util: 29.4.3 + jest-snapshot: 29.5.0 transitivePeerDependencies: - supports-color dev: true @@ -22941,10 +23092,10 @@ packages: dependencies: chalk: 4.1.2 graceful-fs: 4.2.10 - jest-haste-map: 29.3.0 + jest-haste-map: 29.5.0 jest-pnp-resolver: 1.2.2(jest-resolve@29.3.0) - jest-util: 29.2.1 - jest-validate: 29.2.2 + jest-util: 29.5.0 + jest-validate: 29.5.0 resolve: 1.22.1 resolve.exports: 1.1.0 slash: 3.0.0 @@ -22956,10 +23107,10 @@ packages: dependencies: chalk: 4.1.2 graceful-fs: 4.2.10 - jest-haste-map: 29.3.1 + jest-haste-map: 29.5.0 jest-pnp-resolver: 1.2.2(jest-resolve@29.3.1) - jest-util: 29.3.1 - jest-validate: 29.3.1 + jest-util: 29.5.0 + jest-validate: 29.5.0 resolve: 1.22.1 resolve.exports: 1.1.0 slash: 3.0.0 @@ -23061,7 +23212,7 @@ packages: jest-environment-node: 28.1.1 jest-haste-map: 28.1.1 jest-leak-detector: 28.1.1 - jest-message-util: 28.1.1 + jest-message-util: 28.1.3 jest-resolve: 28.1.1 jest-runtime: 28.1.1 jest-util: 28.1.3 @@ -23077,10 +23228,10 @@ packages: resolution: {integrity: sha512-E/ROzAVj7gy44FvIe+Tbz0xGWG1sa8WLkhUg/hsXHewPC0Z48kqWySdfYRtXkB7RmMn4OcWE+hIBfsRAMVV+sQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.2.1 + '@jest/console': 29.5.0 '@jest/environment': 29.3.0 - '@jest/test-result': 29.2.1 - '@jest/transform': 29.3.0 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@types/node': 17.0.45 chalk: 4.1.2 @@ -23088,13 +23239,13 @@ packages: graceful-fs: 4.2.10 jest-docblock: 29.2.0 jest-environment-node: 29.3.0 - jest-haste-map: 29.3.0 + jest-haste-map: 29.5.0 jest-leak-detector: 29.2.1 - jest-message-util: 29.2.1 - jest-resolve: 29.3.0 - jest-runtime: 29.3.0 - jest-util: 29.2.1 - jest-watcher: 29.2.2 + jest-message-util: 29.5.0 + jest-resolve: 29.5.0 + jest-runtime: 29.5.0 + jest-util: 29.5.0 + jest-watcher: 29.5.0 jest-worker: 29.3.1 p-limit: 3.1.0 source-map-support: 0.5.13 @@ -23106,10 +23257,10 @@ packages: resolution: {integrity: sha512-oFvcwRNrKMtE6u9+AQPMATxFcTySyKfLhvso7Sdk/rNpbhg4g2GAGCopiInk1OP4q6gz3n6MajW4+fnHWlU3bA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.3.1 + '@jest/console': 29.5.0 '@jest/environment': 29.3.1 - '@jest/test-result': 29.3.1 - '@jest/transform': 29.3.1 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@types/node': 17.0.45 chalk: 4.1.2 @@ -23117,13 +23268,13 @@ packages: graceful-fs: 4.2.10 jest-docblock: 29.2.0 jest-environment-node: 29.3.1 - jest-haste-map: 29.3.1 + jest-haste-map: 29.5.0 jest-leak-detector: 29.3.1 - jest-message-util: 29.3.1 - jest-resolve: 29.3.1 - jest-runtime: 29.3.1 - jest-util: 29.3.1 - jest-watcher: 29.3.1 + jest-message-util: 29.5.0 + jest-resolve: 29.5.0 + jest-runtime: 29.5.0 + jest-util: 29.5.0 + jest-watcher: 29.5.0 jest-worker: 29.3.1 p-limit: 3.1.0 source-map-support: 0.5.13 @@ -23248,7 +23399,7 @@ packages: glob: 7.2.3 graceful-fs: 4.2.10 jest-haste-map: 28.1.1 - jest-message-util: 28.1.1 + jest-message-util: 28.1.3 jest-mock: 28.1.1 jest-regex-util: 28.0.2 jest-resolve: 28.1.1 @@ -23268,8 +23419,8 @@ packages: '@jest/fake-timers': 29.3.0 '@jest/globals': 29.3.0 '@jest/source-map': 29.2.0 - '@jest/test-result': 29.2.1 - '@jest/transform': 29.3.0 + '@jest/test-result': 29.5.0 + '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@types/node': 17.0.45 chalk: 4.1.2 @@ -23277,13 +23428,13 @@ packages: collect-v8-coverage: 1.0.1 glob: 7.2.3 graceful-fs: 4.2.10 - jest-haste-map: 29.3.0 - jest-message-util: 29.2.1 + jest-haste-map: 29.5.0 + jest-message-util: 29.5.0 jest-mock: 29.3.0 - jest-regex-util: 29.2.0 - jest-resolve: 29.3.0 - jest-snapshot: 29.3.0 - jest-util: 29.2.1 + jest-regex-util: 29.4.3 + jest-resolve: 29.5.0 + jest-snapshot: 29.5.0 + jest-util: 29.5.0 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: @@ -23424,9 +23575,9 @@ packages: resolution: {integrity: sha512-1KjqHJ98adRcbIdMizjF5DipwZFbvxym/kFO4g4fVZCZRxH/dqV8TiBFCa6rqic3p0karsy8RWS1y4E07b7P0A==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@babel/core': 7.20.12 + '@babel/core': 7.22.1 '@babel/generator': 7.20.14 - '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.20.12) + '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.1) '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 '@jest/expect-utils': 28.1.1 @@ -23434,7 +23585,7 @@ packages: '@jest/types': 28.1.3 '@types/babel__traverse': 7.17.1 '@types/prettier': 2.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.20.12) + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.1) chalk: 4.1.2 expect: 28.1.1 graceful-fs: 4.2.10 @@ -23442,7 +23593,7 @@ packages: jest-get-type: 28.0.2 jest-haste-map: 28.1.1 jest-matcher-utils: 28.1.1 - jest-message-util: 28.1.1 + jest-message-util: 28.1.3 jest-util: 28.1.3 natural-compare: 1.4.0 pretty-format: 28.1.3 @@ -23462,7 +23613,7 @@ packages: '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 '@jest/expect-utils': 29.2.2 - '@jest/transform': 29.3.0 + '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@types/babel__traverse': 7.17.1 '@types/prettier': 2.6.3 @@ -23472,10 +23623,10 @@ packages: graceful-fs: 4.2.10 jest-diff: 29.2.1 jest-get-type: 29.2.0 - jest-haste-map: 29.3.0 + jest-haste-map: 29.5.0 jest-matcher-utils: 29.2.2 - jest-message-util: 29.2.1 - jest-util: 29.2.1 + jest-message-util: 29.5.0 + jest-util: 29.5.0 natural-compare: 1.4.0 pretty-format: 29.3.1 semver: 7.5.1 @@ -23776,13 +23927,13 @@ packages: resolution: {integrity: sha512-j2otfqh7mOvMgN2WlJ0n7gIx9XCMWntheYGlBK7+5g3b1Su13/UAK7pdKGyd4kDlrLwtH2QPvRv5oNIxWvsJ1w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.2.1 + '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 '@types/node': 17.0.45 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 - jest-util: 29.2.1 + jest-util: 29.5.0 string-length: 4.0.2 dev: true @@ -23790,13 +23941,13 @@ packages: resolution: {integrity: sha512-RspXG2BQFDsZSRKGCT/NiNa8RkQ1iKAjrO0//soTMWx/QUt+OcxMqMSBxz23PYGqUuWm2+m2mNNsmj0eIoOaFg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.3.1 + '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 '@types/node': 17.0.45 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 - jest-util: 29.3.1 + jest-util: 29.5.0 string-length: 4.0.2 dev: true @@ -24126,7 +24277,7 @@ packages: parse5: 6.0.1 saxes: 5.0.1 symbol-tree: 3.2.4 - tough-cookie: 4.0.0 + tough-cookie: 4.1.3 w3c-hr-time: 1.0.2 w3c-xmlserializer: 2.0.0 webidl-conversions: 6.1.0 @@ -25484,6 +25635,11 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + /mimic-response@1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} @@ -26317,6 +26473,13 @@ packages: dependencies: path-key: 3.1.1 + /npm-run-path@5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + /npmlog@5.0.1: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} dependencies: @@ -26342,6 +26505,15 @@ packages: resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} dev: true + /npx-import@1.1.4: + resolution: {integrity: sha512-3ShymTWOgqGyNlh5lMJAejLuIv3W1K3fbI5Ewc6YErZU3Sp0PqsNs8UIU1O8z5+KVl/Du5ag56Gza9vdorGEoA==} + dependencies: + execa: 6.1.0 + parse-package-name: 1.0.0 + semver: 7.5.1 + validate-npm-package-name: 4.0.0 + dev: true + /nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} dependencies: @@ -26527,6 +26699,13 @@ packages: dependencies: mimic-fn: 2.1.0 + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + /open@6.4.0: resolution: {integrity: sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==} engines: {node: '>=8'} @@ -26785,6 +26964,10 @@ packages: resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} dev: true + /parse-package-name@1.0.0: + resolution: {integrity: sha512-kBeTUtcj+SkyfaW4+KBe0HtsloBJ/mKTPoxpVdA57GZiPerREsUWJOhVj9anXweFiJkm5y8FG1sxFZkZ0SN6wg==} + dev: true + /parse-passwd@1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} @@ -26857,6 +27040,11 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -28525,7 +28713,6 @@ packages: /querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - dev: false /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -30002,9 +30189,9 @@ packages: peerDependencies: solid-js: ^1.3 dependencies: - '@babel/generator': 7.20.14 + '@babel/generator': 7.22.3 '@babel/helper-module-imports': 7.18.6 - '@babel/types': 7.20.7 + '@babel/types': 7.22.4 solid-js: 1.6.6 dev: true @@ -30579,6 +30766,11 @@ packages: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + /strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -31415,6 +31607,7 @@ packages: psl: 1.8.0 punycode: 2.1.1 universalify: 0.1.2 + dev: true /tough-cookie@4.1.3: resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} @@ -31424,7 +31617,6 @@ packages: punycode: 2.1.1 universalify: 0.2.0 url-parse: 1.5.10 - dev: false /toxic@1.0.1: resolution: {integrity: sha512-WI3rIGdcaKULYg7KVoB0zcjikqvcYYvcuT6D89bFPz2rVR0Rl0PK6x8/X62rtdLtBKIE985NzVf/auTtGegIIg==} @@ -32030,6 +32222,13 @@ packages: busboy: 1.6.0 dev: true + /undici@5.20.0: + resolution: {integrity: sha512-J3j60dYzuo6Eevbawwp1sdg16k5Tf768bxYK4TUJRH7cBM4kFCbf3mOnM/0E3vQYXvpxITbbWmBafaDbxLDz3g==} + engines: {node: '>=12.18'} + dependencies: + busboy: 1.6.0 + dev: true + /undici@5.21.0: resolution: {integrity: sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==} engines: {node: '>=12.18'} @@ -32194,7 +32393,6 @@ packages: /universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} - dev: false /universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} @@ -32327,7 +32525,6 @@ packages: dependencies: querystringify: 2.2.0 requires-port: 1.0.0 - dev: false /url@0.11.1: resolution: {integrity: sha512-rWS3H04/+mzzJkv0eZ7vEDGiQbgquI1fGfOad6zKvgYQi1SzMmhl7c/DdRGxhaWrVH6z0qWITo8rpnxK/RfEhA==} @@ -32336,6 +32533,10 @@ packages: qs: 6.11.0 dev: false + /urlpattern-polyfill@4.0.3: + resolution: {integrity: sha512-DOE84vZT2fEcl9gqCUTcnAw5ZY5Id55ikUcziSUntuEFL3pRvavg5kwDmTEUJkeCHInTlV/HexFomgYnzO5kdQ==} + dev: true + /use-composed-ref@1.3.0(react@18.2.0): resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} peerDependencies: @@ -32458,6 +32659,13 @@ packages: spdx-correct: 3.1.1 spdx-expression-parse: 3.0.1 + /validate-npm-package-name@4.0.0: + resolution: {integrity: sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + builtins: 5.0.1 + dev: true + /validator@13.7.0: resolution: {integrity: sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==} engines: {node: '>= 0.10'}