mirror of
https://github.com/SrIzan10/next-auth.git
synced 2026-05-01 10:55:20 +00:00
Compare commits
7 Commits
@auth/pg-a
...
@auth/core
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e274c51807 | ||
|
|
2b3836d945 | ||
|
|
b729f8af0b | ||
|
|
9f54222c0e | ||
|
|
a5ac491cb8 | ||
|
|
a96dcdbca3 | ||
|
|
bec01a82ea |
3
.github/ISSUE_TEMPLATE/3_bug_adapter.yml
vendored
3
.github/ISSUE_TEMPLATE/3_bug_adapter.yml
vendored
@@ -21,6 +21,9 @@ body:
|
|||||||
multiple: true
|
multiple: true
|
||||||
options:
|
options:
|
||||||
- "Custom adapter"
|
- "Custom adapter"
|
||||||
|
- "@auth/azure-tables-adapter"
|
||||||
|
- "@auth/edgedb-adapter"
|
||||||
|
- "@auth/d1-adapter"
|
||||||
- "@auth/dgraph-adapter"
|
- "@auth/dgraph-adapter"
|
||||||
- "@auth/drizzle-adapter"
|
- "@auth/drizzle-adapter"
|
||||||
- "@auth/dynamodb-adapter"
|
- "@auth/dynamodb-adapter"
|
||||||
|
|||||||
5
.github/pr-labeler.yml
vendored
5
.github/pr-labeler.yml
vendored
@@ -1,7 +1,11 @@
|
|||||||
# https://github.com/actions/labeler#create-githublabeleryml
|
# https://github.com/actions/labeler#create-githublabeleryml
|
||||||
adapters: ["packages/core/src/adapters.ts", "packages/adapter-*/**/*"]
|
adapters: ["packages/core/src/adapters.ts", "packages/adapter-*/**/*"]
|
||||||
core: ["packages/core/src/**/*"]
|
core: ["packages/core/src/**/*"]
|
||||||
|
azure-tables: ["packages/adapter-azure-tables/**/*"]
|
||||||
|
edgedb: ["packages/adapter-edgedb/**/*"]
|
||||||
|
d1: ["packages/adapter-d1/**/*"]
|
||||||
dgraph: ["packages/adapter-dgraph/**/*"]
|
dgraph: ["packages/adapter-dgraph/**/*"]
|
||||||
|
drizzle: ["packages/adapter-drizzle/**/*"]
|
||||||
documentation: ["packages/docs/docs/**/*"]
|
documentation: ["packages/docs/docs/**/*"]
|
||||||
dynamodb: ["packages/adapter-dynamodb/**/*"]
|
dynamodb: ["packages/adapter-dynamodb/**/*"]
|
||||||
examples: ["apps/examples/**/*"]
|
examples: ["apps/examples/**/*"]
|
||||||
@@ -21,6 +25,7 @@ providers: ["packages/core/src/providers/**/*"]
|
|||||||
sequelize: ["packages/adapter-sequelize/**/*"]
|
sequelize: ["packages/adapter-sequelize/**/*"]
|
||||||
solidjs: ["packages/frameworks-solid-start/**/*"]
|
solidjs: ["packages/frameworks-solid-start/**/*"]
|
||||||
supabase: ["packages/adapter-supabase/**/*"]
|
supabase: ["packages/adapter-supabase/**/*"]
|
||||||
|
surrealdb: ["packages/adapter-surrealdb/**/*"]
|
||||||
svelte: ["packages/frameworks-sveltekit/**/*"]
|
svelte: ["packages/frameworks-sveltekit/**/*"]
|
||||||
test: ["**test**/*"]
|
test: ["**test**/*"]
|
||||||
typeorm: ["packages/adapter-typeorm/**/*"]
|
typeorm: ["packages/adapter-typeorm/**/*"]
|
||||||
|
|||||||
1
.github/workflows/release.yml
vendored
1
.github/workflows/release.yml
vendored
@@ -39,6 +39,7 @@ on:
|
|||||||
options:
|
options:
|
||||||
- "core"
|
- "core"
|
||||||
- "frameworks-nextjs"
|
- "frameworks-nextjs"
|
||||||
|
- "adapter-edgedb"
|
||||||
- "adapter-dgraph"
|
- "adapter-dgraph"
|
||||||
- "adapter-drizzle"
|
- "adapter-drizzle"
|
||||||
- "adapter-dynamodb"
|
- "adapter-dynamodb"
|
||||||
|
|||||||
@@ -5,6 +5,10 @@ title: Overview
|
|||||||
Using an Auth.js / NextAuth.js adapter you can connect to any database service or even several different services at the same time. The following listed official adapters are created and maintained by the community:
|
Using an Auth.js / NextAuth.js adapter you can connect to any database service or even several different services at the same time. The following listed official adapters are created and maintained by the community:
|
||||||
|
|
||||||
<div class="adapter-card-list">
|
<div class="adapter-card-list">
|
||||||
|
<a href="/reference/adapter/azure-tables" class="adapter-card">
|
||||||
|
<img src="/img/adapters/azure-tables.svg" width="40" />
|
||||||
|
<h4 class="adapter-card__title">Azure Table Storage Adapter</h4>
|
||||||
|
</a>
|
||||||
<a href="/reference/adapter/d1" class="adapter-card">
|
<a href="/reference/adapter/d1" class="adapter-card">
|
||||||
<img src="/img/adapters/d1.svg" width="40" />
|
<img src="/img/adapters/d1.svg" width="40" />
|
||||||
<h4 class="adapter-card__title">D1 Adapter</h4>
|
<h4 class="adapter-card__title">D1 Adapter</h4>
|
||||||
@@ -69,6 +73,10 @@ Using an Auth.js / NextAuth.js adapter you can connect to any database service o
|
|||||||
<img src="/img/adapters/supabase.svg" width="25" />
|
<img src="/img/adapters/supabase.svg" width="25" />
|
||||||
<h4 class="adapter-card__title">Supabase Adapter</h4>
|
<h4 class="adapter-card__title">Supabase Adapter</h4>
|
||||||
</a>
|
</a>
|
||||||
|
<a href="/reference/adapter/surrealdb" class="adapter-card">
|
||||||
|
<img src="/img/adapters/surreal.png" width="25" />
|
||||||
|
<h4 class="adapter-card__title">SurrealDB Adapter</h4>
|
||||||
|
</a>
|
||||||
<a href="/reference/adapter/typeorm" class="adapter-card">
|
<a href="/reference/adapter/typeorm" class="adapter-card">
|
||||||
<img src="/img/adapters/typeorm.png" width="30" />
|
<img src="/img/adapters/typeorm.png" width="30" />
|
||||||
<h4 class="adapter-card__title">TypeORM Adapter</h4>
|
<h4 class="adapter-card__title">TypeORM Adapter</h4>
|
||||||
|
|||||||
@@ -282,6 +282,7 @@ const docusaurusConfig = {
|
|||||||
...(process.env.TYPEDOC_SKIP_ADAPTERS
|
...(process.env.TYPEDOC_SKIP_ADAPTERS
|
||||||
? []
|
? []
|
||||||
: [
|
: [
|
||||||
|
typedocAdapter("Azure Tables"),
|
||||||
typedocAdapter("D1"),
|
typedocAdapter("D1"),
|
||||||
typedocAdapter("EdgeDb"),
|
typedocAdapter("EdgeDb"),
|
||||||
typedocAdapter("Dgraph"),
|
typedocAdapter("Dgraph"),
|
||||||
@@ -299,6 +300,7 @@ const docusaurusConfig = {
|
|||||||
typedocAdapter("TypeORM"),
|
typedocAdapter("TypeORM"),
|
||||||
typedocAdapter("Sequelize"),
|
typedocAdapter("Sequelize"),
|
||||||
typedocAdapter("Supabase"),
|
typedocAdapter("Supabase"),
|
||||||
|
typedocAdapter("SurrealDB"),
|
||||||
typedocAdapter("Upstash Redis"),
|
typedocAdapter("Upstash Redis"),
|
||||||
typedocAdapter("Xata"),
|
typedocAdapter("Xata"),
|
||||||
]),
|
]),
|
||||||
|
|||||||
@@ -46,6 +46,8 @@ module.exports = {
|
|||||||
label: "Database Adapters",
|
label: "Database Adapters",
|
||||||
link: { type: "doc", id: "reference/adapters/index" },
|
link: { type: "doc", id: "reference/adapters/index" },
|
||||||
items: [
|
items: [
|
||||||
|
{ type: "doc", id: "reference/adapter/azure-tables/index" },
|
||||||
|
{ type: "doc", id: "reference/adapter/d1/index" },
|
||||||
{ type: "doc", id: "reference/adapter/edgedb/index" },
|
{ type: "doc", id: "reference/adapter/edgedb/index" },
|
||||||
{ type: "doc", id: "reference/adapter/dgraph/index" },
|
{ type: "doc", id: "reference/adapter/dgraph/index" },
|
||||||
{ type: "doc", id: "reference/adapter/drizzle/index" },
|
{ type: "doc", id: "reference/adapter/drizzle/index" },
|
||||||
@@ -61,6 +63,7 @@ module.exports = {
|
|||||||
{ type: "doc", id: "reference/adapter/prisma/index" },
|
{ type: "doc", id: "reference/adapter/prisma/index" },
|
||||||
{ type: "doc", id: "reference/adapter/sequelize/index" },
|
{ type: "doc", id: "reference/adapter/sequelize/index" },
|
||||||
{ type: "doc", id: "reference/adapter/supabase/index" },
|
{ type: "doc", id: "reference/adapter/supabase/index" },
|
||||||
|
{ type: "doc", id: "reference/adapter/surrealdb/index" },
|
||||||
{ type: "doc", id: "reference/adapter/typeorm/index" },
|
{ type: "doc", id: "reference/adapter/typeorm/index" },
|
||||||
{ type: "doc", id: "reference/adapter/upstash-redis/index" },
|
{ type: "doc", id: "reference/adapter/upstash-redis/index" },
|
||||||
{ type: "doc", id: "reference/adapter/xata/index" },
|
{ type: "doc", id: "reference/adapter/xata/index" },
|
||||||
|
|||||||
1
docs/static/img/adapters/azure-tables.svg
vendored
Normal file
1
docs/static/img/adapters/azure-tables.svg
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 91 81" fill="#fff" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round"><use xlink:href="#A" x=".5" y=".5"/><symbol id="A" overflow="visible"><path d="M67.678 0H22.559L0 40l22.559 40h44.881L90 40 67.678 0zM42.982 20.976H53.43v10.732H42.982V20.976zm0 13.415H53.43v10.732H42.982V34.39zm0 13.414H53.43v10.732H42.982V47.805zM29.921 20.976h10.448v10.732H29.921V20.976zm0 13.415h10.448v10.732H29.921V34.39zm0 13.414h10.448v10.732H29.921V47.805zM66.254 64.39H23.747V20.732h2.849v40.732h0 0 39.657v2.927zm.237-5.854H56.042V47.805h10.448v10.732zm0-13.414H56.042V34.39h10.448v10.732zm0-13.415H56.042V20.976h10.448v10.732z" fill="#0078d7" stroke="none"/></symbol></svg>
|
||||||
|
After Width: | Height: | Size: 782 B |
BIN
docs/static/img/adapters/surreal.png
vendored
Normal file
BIN
docs/static/img/adapters/surreal.png
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 121 KiB |
26
packages/adapter-azure-tables/README.md
Normal file
26
packages/adapter-azure-tables/README.md
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<p align="center">
|
||||||
|
<br/>
|
||||||
|
<a href="https://authjs.dev" target="_blank">
|
||||||
|
<img height="64px" src="https://authjs.dev/img/logo/logo-sm.png" />
|
||||||
|
</a>
|
||||||
|
<a href="https://azure.microsoft.com/en-us/products/storage/tables" target="_blank">
|
||||||
|
<img height="64px" src="https://authjs.dev/img/adapters/azure-tables.svg"/>
|
||||||
|
</a>
|
||||||
|
<h3 align="center"><b>Azure Table Storage Adapter</b> - NextAuth.js / Auth.js</a></h3>
|
||||||
|
<p align="center" style="align: center;">
|
||||||
|
<a href="https://npm.im/@auth/azure-tables-adapter">
|
||||||
|
<img src="https://img.shields.io/badge/TypeScript-blue?style=flat-square" alt="TypeScript" />
|
||||||
|
</a>
|
||||||
|
<a href="https://npm.im/@auth/azure-tables-adapter">
|
||||||
|
<img alt="npm" src="https://img.shields.io/npm/v/@auth/azure-tables-adapter?color=green&label=@auth/azure-tables-adapter&style=flat-square">
|
||||||
|
</a>
|
||||||
|
<a href="https://www.npmtrends.com/@auth/azure-tables-adapter">
|
||||||
|
<img src="https://img.shields.io/npm/dm/@auth/azure-tables-adapter?label=%20downloads&style=flat-square" alt="Downloads" />
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/nextauthjs/next-auth/stargazers">
|
||||||
|
<img src="https://img.shields.io/github/stars/nextauthjs/next-auth?style=flat-square" alt="Github Stars" />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
---
|
||||||
59
packages/adapter-azure-tables/package.json
Normal file
59
packages/adapter-azure-tables/package.json
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
{
|
||||||
|
"name": "@auth/azure-tables-adapter",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "Azure Tables Storage adapter for next-auth.",
|
||||||
|
"homepage": "https://authjs.dev",
|
||||||
|
"repository": "https://github.com/nextauthjs/next-auth",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/nextauthjs/next-auth/issues"
|
||||||
|
},
|
||||||
|
"author": "Nikita Dmitrijev <nikitadmitry@gmail.com>",
|
||||||
|
"contributors": [
|
||||||
|
"Thang Huu Vu <hi@thvu.dev>"
|
||||||
|
],
|
||||||
|
"license": "ISC",
|
||||||
|
"keywords": [
|
||||||
|
"next-auth",
|
||||||
|
"next.js",
|
||||||
|
"oauth",
|
||||||
|
"azure-tables",
|
||||||
|
"adapter"
|
||||||
|
],
|
||||||
|
"type": "module",
|
||||||
|
"types": "./index.d.ts",
|
||||||
|
"exports": {
|
||||||
|
".": {
|
||||||
|
"types": "./index.d.ts",
|
||||||
|
"import": "./index.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"*.d.ts*",
|
||||||
|
"*.js",
|
||||||
|
"src"
|
||||||
|
],
|
||||||
|
"private": false,
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "./tests/test.sh",
|
||||||
|
"test:watch": "./tests/test.sh -w",
|
||||||
|
"build": "tsc"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@auth/core": "workspace:*"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@azure/data-tables": "^13.2.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@auth/adapter-test": "workspace:*",
|
||||||
|
"@auth/tsconfig": "workspace:*",
|
||||||
|
"jest": "^27.4.3",
|
||||||
|
"@azure/data-tables": "^13.2.1"
|
||||||
|
},
|
||||||
|
"jest": {
|
||||||
|
"preset": "@auth/adapter-test/jest"
|
||||||
|
}
|
||||||
|
}
|
||||||
303
packages/adapter-azure-tables/src/index.ts
Normal file
303
packages/adapter-azure-tables/src/index.ts
Normal file
@@ -0,0 +1,303 @@
|
|||||||
|
/**
|
||||||
|
* <div style={{display: "flex", justifyContent: "space-between", alignItems: "center", padding: 16}}>
|
||||||
|
* <p style={{fontWeight: "normal"}}>An official <a href="https://azure.microsoft.com/en-us/products/storage/tables">Azure Table Storage</a> adapter for Auth.js / NextAuth.js.</p>
|
||||||
|
* <a href="https://azure.microsoft.com/en-us/products/storage/tables">
|
||||||
|
* <img style={{display: "block"}} src="/img/adapters/azure-tables.svg" width="48" />
|
||||||
|
* </a>
|
||||||
|
* </div>
|
||||||
|
*
|
||||||
|
* ## Installation
|
||||||
|
*
|
||||||
|
* ```bash npm2yarn2pnpm
|
||||||
|
* npm install next-auth @auth/azure-tables-adapter
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @module @auth/azure-tables-adapter
|
||||||
|
*/
|
||||||
|
|
||||||
|
import type {
|
||||||
|
Adapter,
|
||||||
|
AdapterUser,
|
||||||
|
AdapterAccount,
|
||||||
|
AdapterSession,
|
||||||
|
VerificationToken,
|
||||||
|
} from "@auth/core/adapters"
|
||||||
|
import {
|
||||||
|
GetTableEntityResponse,
|
||||||
|
TableClient,
|
||||||
|
TableEntityResult,
|
||||||
|
} from "@azure/data-tables"
|
||||||
|
|
||||||
|
globalThis.crypto ??= require("node:crypto").webcrypto
|
||||||
|
|
||||||
|
export const keys = {
|
||||||
|
user: "user",
|
||||||
|
userByEmail: "userByEmail",
|
||||||
|
account: "account",
|
||||||
|
accountByUserId: "accountByUserId",
|
||||||
|
session: "session",
|
||||||
|
sessionByUserId: "sessionByUserId",
|
||||||
|
verificationToken: "verificationToken",
|
||||||
|
}
|
||||||
|
|
||||||
|
export function withoutKeys<T>(
|
||||||
|
entity: GetTableEntityResponse<TableEntityResult<T>>
|
||||||
|
): T {
|
||||||
|
delete entity.partitionKey
|
||||||
|
delete entity.rowKey
|
||||||
|
// @ts-expect-error
|
||||||
|
delete entity.etag
|
||||||
|
delete entity.timestamp
|
||||||
|
// @ts-expect-error
|
||||||
|
delete entity["odata.metadata"]
|
||||||
|
|
||||||
|
return entity
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* 1. Create a table for authentication data, `auth` in the example below.
|
||||||
|
*
|
||||||
|
* ```js title="auth.ts"
|
||||||
|
* import type { AuthConfig } from "next-auth"
|
||||||
|
* import { TableStorageAdapter } from "@next-auth/azure-tables-adapter"
|
||||||
|
* import { AzureNamedKeyCredential, TableClient } from "@azure/data-tables"
|
||||||
|
*
|
||||||
|
* const credential = new AzureNamedKeyCredential(
|
||||||
|
* process.env.AZURE_ACCOUNT,
|
||||||
|
* process.env.AZURE_ACCESS_KEY
|
||||||
|
* )
|
||||||
|
* const authClient = new TableClient(
|
||||||
|
* process.env.AZURE_TABLES_ENDPOINT,
|
||||||
|
* "auth",
|
||||||
|
* credential
|
||||||
|
* )
|
||||||
|
*
|
||||||
|
* // For more information on each option (and a full list of options) go to
|
||||||
|
* // https://authjs.dev/reference/configuration/auth-options
|
||||||
|
* export default const authConfig = {
|
||||||
|
* // https://authjs.dev/reference/providers/oauth-builtin
|
||||||
|
* providers: [
|
||||||
|
* // ...
|
||||||
|
* ],
|
||||||
|
* adapter: TableStorageAdapter(authClient),
|
||||||
|
* // ...
|
||||||
|
* } satisfies AuthConfig
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* Environment variable are as follows:
|
||||||
|
*
|
||||||
|
* ```
|
||||||
|
* AZURE_ACCOUNT=storageaccountname
|
||||||
|
* AZURE_ACCESS_KEY=longRandomKey
|
||||||
|
* AZURE_TABLES_ENDPOINT=https://$AZURE_ACCOUNT.table.core.windows.net
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
export const TableStorageAdapter = (client: TableClient): Adapter => {
|
||||||
|
return {
|
||||||
|
async createUser(user) {
|
||||||
|
const id = crypto.randomUUID()
|
||||||
|
const newUser = {
|
||||||
|
...user,
|
||||||
|
id,
|
||||||
|
}
|
||||||
|
await Promise.all([
|
||||||
|
client.createEntity({
|
||||||
|
...newUser,
|
||||||
|
partitionKey: keys.userByEmail,
|
||||||
|
rowKey: user.email,
|
||||||
|
}),
|
||||||
|
client.createEntity({
|
||||||
|
...newUser,
|
||||||
|
partitionKey: keys.user,
|
||||||
|
rowKey: id,
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
return newUser
|
||||||
|
},
|
||||||
|
async getUser(id: string) {
|
||||||
|
try {
|
||||||
|
const user = await client.getEntity<AdapterUser>(keys.user, id)
|
||||||
|
return withoutKeys(user)
|
||||||
|
} catch {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async getUserByEmail(email) {
|
||||||
|
try {
|
||||||
|
const user = await client.getEntity<AdapterUser>(
|
||||||
|
keys.userByEmail,
|
||||||
|
email
|
||||||
|
)
|
||||||
|
return withoutKeys(user)
|
||||||
|
} catch {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async getUserByAccount({ providerAccountId, provider }) {
|
||||||
|
try {
|
||||||
|
const rowKey = `${providerAccountId}_${provider}`
|
||||||
|
const account = await client.getEntity<AdapterAccount>(
|
||||||
|
keys.account,
|
||||||
|
rowKey
|
||||||
|
)
|
||||||
|
const user = await client.getEntity<AdapterUser>(
|
||||||
|
keys.user,
|
||||||
|
account.userId
|
||||||
|
)
|
||||||
|
return withoutKeys(user)
|
||||||
|
} catch {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async updateUser(user) {
|
||||||
|
const _user = await client.getEntity<AdapterUser>(keys.user, user.id)
|
||||||
|
const updatedUser = {
|
||||||
|
...user,
|
||||||
|
partitionKey: keys.user,
|
||||||
|
rowKey: _user.id,
|
||||||
|
}
|
||||||
|
await client.updateEntity(updatedUser, "Merge")
|
||||||
|
return { ..._user, ...updatedUser }
|
||||||
|
},
|
||||||
|
async deleteUser(userId) {
|
||||||
|
try {
|
||||||
|
const user = await client.getEntity<AdapterUser>(keys.user, userId)
|
||||||
|
const { sessionToken } = await client.getEntity<AdapterSession>(
|
||||||
|
keys.sessionByUserId,
|
||||||
|
userId
|
||||||
|
)
|
||||||
|
const accounts = withoutKeys(
|
||||||
|
await client.getEntity<AdapterAccount>(keys.accountByUserId, userId)
|
||||||
|
)
|
||||||
|
const deleteAccounts = Object.keys(accounts).map((property) =>
|
||||||
|
client.deleteEntity(keys.account, `${accounts[property]}_${property}`)
|
||||||
|
)
|
||||||
|
await Promise.allSettled([
|
||||||
|
client.deleteEntity(keys.userByEmail, user.email),
|
||||||
|
client.deleteEntity(keys.user, userId),
|
||||||
|
client.deleteEntity(keys.session, sessionToken),
|
||||||
|
client.deleteEntity(keys.sessionByUserId, userId),
|
||||||
|
...deleteAccounts,
|
||||||
|
client.deleteEntity(keys.accountByUserId, userId),
|
||||||
|
])
|
||||||
|
return withoutKeys(user)
|
||||||
|
} catch {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async linkAccount(account) {
|
||||||
|
try {
|
||||||
|
await client.createEntity({
|
||||||
|
...account,
|
||||||
|
partitionKey: keys.account,
|
||||||
|
rowKey: `${account.providerAccountId}_${account.provider}`,
|
||||||
|
})
|
||||||
|
await client.upsertEntity({
|
||||||
|
partitionKey: keys.accountByUserId,
|
||||||
|
rowKey: account.userId,
|
||||||
|
[account.provider]: account.providerAccountId,
|
||||||
|
})
|
||||||
|
return account
|
||||||
|
} catch {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async unlinkAccount({ providerAccountId, provider }) {
|
||||||
|
const rowKey = `${providerAccountId}_${provider}`
|
||||||
|
const account = await client.getEntity<AdapterAccount>(
|
||||||
|
keys.account,
|
||||||
|
rowKey
|
||||||
|
)
|
||||||
|
await client.deleteEntity(keys.account, rowKey)
|
||||||
|
await client.deleteEntity(keys.accountByUserId, account.userId)
|
||||||
|
},
|
||||||
|
async createSession(session) {
|
||||||
|
await client.createEntity({
|
||||||
|
...session,
|
||||||
|
partitionKey: keys.session,
|
||||||
|
rowKey: session.sessionToken,
|
||||||
|
})
|
||||||
|
await client.upsertEntity({
|
||||||
|
partitionKey: keys.sessionByUserId,
|
||||||
|
rowKey: session.userId,
|
||||||
|
sessionToken: session.sessionToken,
|
||||||
|
})
|
||||||
|
return session
|
||||||
|
},
|
||||||
|
async getSessionAndUser(sessionToken) {
|
||||||
|
try {
|
||||||
|
const session = await client.getEntity<AdapterSession>(
|
||||||
|
keys.session,
|
||||||
|
sessionToken
|
||||||
|
)
|
||||||
|
if (session.expires.valueOf() < Date.now()) {
|
||||||
|
await client.deleteEntity(keys.session, sessionToken)
|
||||||
|
}
|
||||||
|
const user = await client.getEntity<AdapterUser>(
|
||||||
|
keys.user,
|
||||||
|
session.userId
|
||||||
|
)
|
||||||
|
return {
|
||||||
|
session: withoutKeys(session),
|
||||||
|
user: withoutKeys(user),
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async updateSession(session) {
|
||||||
|
const _session = await client.getEntity<AdapterSession>(
|
||||||
|
keys.session,
|
||||||
|
session.sessionToken
|
||||||
|
)
|
||||||
|
const newSession = {
|
||||||
|
expires: session.expires ?? _session.expires,
|
||||||
|
}
|
||||||
|
await client.updateEntity({
|
||||||
|
...newSession,
|
||||||
|
partitionKey: keys.session,
|
||||||
|
rowKey: session.sessionToken,
|
||||||
|
})
|
||||||
|
return { ...withoutKeys(_session), ...newSession }
|
||||||
|
},
|
||||||
|
async deleteSession(sessionToken) {
|
||||||
|
try {
|
||||||
|
const session = await client.getEntity<AdapterSession>(
|
||||||
|
keys.session,
|
||||||
|
sessionToken
|
||||||
|
)
|
||||||
|
await Promise.allSettled([
|
||||||
|
client.deleteEntity(keys.session, sessionToken),
|
||||||
|
client.deleteEntity(keys.sessionByUserId, session.userId),
|
||||||
|
])
|
||||||
|
return withoutKeys(session)
|
||||||
|
} catch {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async createVerificationToken(token) {
|
||||||
|
await client.createEntity({
|
||||||
|
...token,
|
||||||
|
partitionKey: keys.verificationToken,
|
||||||
|
rowKey: token.token,
|
||||||
|
})
|
||||||
|
return token
|
||||||
|
},
|
||||||
|
async useVerificationToken({ identifier, token }) {
|
||||||
|
try {
|
||||||
|
const tokenEntity = await client.getEntity<VerificationToken>(
|
||||||
|
keys.verificationToken,
|
||||||
|
token
|
||||||
|
)
|
||||||
|
if (tokenEntity.identifier !== identifier) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
await client.deleteEntity(keys.verificationToken, token)
|
||||||
|
return withoutKeys(tokenEntity)
|
||||||
|
} catch {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
90
packages/adapter-azure-tables/tests/index.test.ts
Normal file
90
packages/adapter-azure-tables/tests/index.test.ts
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
import { runBasicTests } from "@auth/adapter-test"
|
||||||
|
import {
|
||||||
|
AzureNamedKeyCredential,
|
||||||
|
TableServiceClient,
|
||||||
|
TableClient,
|
||||||
|
} from "@azure/data-tables"
|
||||||
|
import { keys, TableStorageAdapter, withoutKeys } from "../src"
|
||||||
|
import type { AdapterUser, VerificationToken } from "@auth/core/adapters"
|
||||||
|
|
||||||
|
const testAccount = {
|
||||||
|
// default constants used by a dev instance of azurite
|
||||||
|
name: "devstoreaccount1",
|
||||||
|
key: "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==",
|
||||||
|
tableEndpoint: "http://127.0.0.1:10002/devstoreaccount1",
|
||||||
|
}
|
||||||
|
|
||||||
|
const authTableName = "authTest"
|
||||||
|
|
||||||
|
const credential = new AzureNamedKeyCredential(
|
||||||
|
testAccount.name,
|
||||||
|
testAccount.key
|
||||||
|
)
|
||||||
|
|
||||||
|
const authClient = new TableClient(
|
||||||
|
testAccount.tableEndpoint,
|
||||||
|
authTableName,
|
||||||
|
credential,
|
||||||
|
{ allowInsecureConnection: true }
|
||||||
|
)
|
||||||
|
|
||||||
|
runBasicTests({
|
||||||
|
adapter: TableStorageAdapter(authClient),
|
||||||
|
db: {
|
||||||
|
async connect() {
|
||||||
|
const serviceClient = new TableServiceClient(
|
||||||
|
testAccount.tableEndpoint,
|
||||||
|
credential,
|
||||||
|
{ allowInsecureConnection: true }
|
||||||
|
)
|
||||||
|
await serviceClient.createTable(authTableName)
|
||||||
|
},
|
||||||
|
async user(id) {
|
||||||
|
try {
|
||||||
|
const userById = await authClient.getEntity<AdapterUser>(keys.user, id)
|
||||||
|
|
||||||
|
return withoutKeys(userById)
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e)
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async account(provider_providerAccountId) {
|
||||||
|
try {
|
||||||
|
const account = await authClient.getEntity(
|
||||||
|
keys.account,
|
||||||
|
`${provider_providerAccountId.providerAccountId}_${provider_providerAccountId.provider}`
|
||||||
|
)
|
||||||
|
|
||||||
|
return withoutKeys(account)
|
||||||
|
} catch {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async session(sessionToken) {
|
||||||
|
try {
|
||||||
|
const session = await authClient.getEntity(keys.session, sessionToken)
|
||||||
|
|
||||||
|
return withoutKeys(session)
|
||||||
|
} catch {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async verificationToken(identifier_token) {
|
||||||
|
try {
|
||||||
|
const verificationToken = await authClient.getEntity<VerificationToken>(
|
||||||
|
keys.verificationToken,
|
||||||
|
identifier_token.token
|
||||||
|
)
|
||||||
|
|
||||||
|
if (verificationToken.identifier !== identifier_token.identifier) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
return withoutKeys(verificationToken)
|
||||||
|
} catch {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
34
packages/adapter-azure-tables/tests/test.sh
Executable file
34
packages/adapter-azure-tables/tests/test.sh
Executable file
@@ -0,0 +1,34 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
CONTAINER_NAME=next-auth-azure-tables-test
|
||||||
|
|
||||||
|
JEST_WATCH=false
|
||||||
|
|
||||||
|
# Is the watch flag passed to the script?
|
||||||
|
while getopts w flag
|
||||||
|
do
|
||||||
|
case "${flag}" in
|
||||||
|
w) JEST_WATCH=true;;
|
||||||
|
*) continue;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Start db
|
||||||
|
docker run -d -p 10002:10002 --name ${CONTAINER_NAME} mcr.microsoft.com/azure-storage/azurite azurite-table -l /workspace -d /workspace/debug.log --tableHost 0.0.0.0 --loose
|
||||||
|
|
||||||
|
echo "Waiting 3 sec for db to start..."
|
||||||
|
sleep 3
|
||||||
|
|
||||||
|
if $JEST_WATCH; then
|
||||||
|
# Run jest in watch mode
|
||||||
|
npx jest tests --watch
|
||||||
|
# Only stop the container after jest has been quit
|
||||||
|
docker stop "${CONTAINER_NAME}"
|
||||||
|
else
|
||||||
|
# Always stop container, but exit with 1 when tests are failing
|
||||||
|
if npx jest;then
|
||||||
|
docker stop ${CONTAINER_NAME}
|
||||||
|
else
|
||||||
|
docker stop ${CONTAINER_NAME} && exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
20
packages/adapter-azure-tables/tsconfig.json
Normal file
20
packages/adapter-azure-tables/tsconfig.json
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"extends": "@auth/tsconfig/tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"allowJs": true,
|
||||||
|
"baseUrl": ".",
|
||||||
|
"isolatedModules": true,
|
||||||
|
"target": "ES2020",
|
||||||
|
"module": "ESNext",
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"outDir": ".",
|
||||||
|
"rootDir": "src",
|
||||||
|
"skipDefaultLibCheck": true,
|
||||||
|
"strictNullChecks": true,
|
||||||
|
"stripInternal": true,
|
||||||
|
"declarationMap": true,
|
||||||
|
"declaration": true
|
||||||
|
},
|
||||||
|
"include": ["src/**/*"],
|
||||||
|
"exclude": ["*.js", "*.d.ts"]
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
* <div style={{display: "flex", justifyContent: "space-between", alignItems: "center", padding: 16}}>
|
* <div style={{display: "flex", justifyContent: "space-between", alignItems: "center", padding: 16}}>
|
||||||
* <p style={{fontWeight: "normal"}}>An official <a href="https://www.postgresql.org/">PostgreSQL</a> adapter for Auth.js / NextAuth.js.</p>
|
* <p style={{fontWeight: "normal"}}>An official <a href="https://www.postgresql.org/">PostgreSQL</a> adapter for Auth.js / NextAuth.js.</p>
|
||||||
* <a href="https://www.postgresql.org/">
|
* <a href="https://www.postgresql.org/">
|
||||||
* <img style={{display: "block"}} src="/img/adapters/pg.svg" width="48" />
|
* <img style={{display: "block"}} src="/img/adapters/pg.png" width="48" />
|
||||||
* </a>
|
* </a>
|
||||||
* </div>
|
* </div>
|
||||||
*
|
*
|
||||||
|
|||||||
28
packages/adapter-surrealdb/README.md
Normal file
28
packages/adapter-surrealdb/README.md
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<p align="center">
|
||||||
|
<br/>
|
||||||
|
<a href="https://authjs.dev" target="_blank">
|
||||||
|
<img height="64px" src="https://authjs.dev/img/logo/logo-sm.png" />
|
||||||
|
</a>
|
||||||
|
<a href="https://surrealdb.com/" target="_blank">
|
||||||
|
<img height="64px" src="https://authjs.dev/img/adapters/surrealdb.png"/>
|
||||||
|
</a>
|
||||||
|
<h3 align="center"><b>Surreal DB Adapter</b> - NextAuth.js / Auth.js</a></h3>
|
||||||
|
<p align="center" style="align: center;">
|
||||||
|
<a href="https://npm.im/@auth/surrealdb-adapter">
|
||||||
|
<img src="https://img.shields.io/badge/TypeScript-blue?style=flat-square" alt="TypeScript" />
|
||||||
|
</a>
|
||||||
|
<a href="https://npm.im/@auth/surrealdb-adapter">
|
||||||
|
<img alt="npm" src="https://img.shields.io/npm/v/@auth/surrealdb-adapter?color=green&label=@auth/surrealdb-adapter&style=flat-square">
|
||||||
|
</a>
|
||||||
|
<a href="https://www.npmtrends.com/@auth/surrealdb-adapter">
|
||||||
|
<img src="https://img.shields.io/npm/dm/@auth/surrealdb-adapter?label=%20downloads&style=flat-square" alt="Downloads" />
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/nextauthjs/next-auth/stargazers">
|
||||||
|
<img src="https://img.shields.io/github/stars/nextauthjs/next-auth?style=flat-square" alt="Github Stars" />
|
||||||
|
</a>
|
||||||
|
</p>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Check out the documentation at [authjs.dev](https://authjs.dev/reference/adapter/surrealdb).
|
||||||
58
packages/adapter-surrealdb/package.json
Normal file
58
packages/adapter-surrealdb/package.json
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
"name": "@auth/surrealdb-adapter",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"description": "SurrealDB adapter for next-auth.",
|
||||||
|
"homepage": "https://authjs.dev",
|
||||||
|
"repository": "https://github.com/nextauthjs/next-auth",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/nextauthjs/next-auth/issues"
|
||||||
|
},
|
||||||
|
"author": "Martin Schaer <martin@schaerweb.com>",
|
||||||
|
"contributors": [
|
||||||
|
"Thang Huu Vu <hi@thvu.dev>"
|
||||||
|
],
|
||||||
|
"type": "module",
|
||||||
|
"types": "./index.d.ts",
|
||||||
|
"files": [
|
||||||
|
"*.js",
|
||||||
|
"*.d.ts*",
|
||||||
|
"src"
|
||||||
|
],
|
||||||
|
"exports": {
|
||||||
|
".": {
|
||||||
|
"types": "./index.d.ts",
|
||||||
|
"import": "./index.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"license": "ISC",
|
||||||
|
"keywords": [
|
||||||
|
"next-auth",
|
||||||
|
"next.js",
|
||||||
|
"oauth",
|
||||||
|
"mongodb",
|
||||||
|
"adapter"
|
||||||
|
],
|
||||||
|
"private": false,
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "./tests/test.sh",
|
||||||
|
"test:watch": "./tests/test.sh -w",
|
||||||
|
"build": "tsc"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@auth/core": "workspace:*"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"surrealdb.js": "^0.9.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@auth/adapter-test": "workspace:*",
|
||||||
|
"@auth/tsconfig": "workspace:*",
|
||||||
|
"jest": "^27.4.3"
|
||||||
|
},
|
||||||
|
"jest": {
|
||||||
|
"preset": "@auth/adapter-test/jest"
|
||||||
|
}
|
||||||
|
}
|
||||||
366
packages/adapter-surrealdb/src/index.ts
Normal file
366
packages/adapter-surrealdb/src/index.ts
Normal file
@@ -0,0 +1,366 @@
|
|||||||
|
import Surreal, { ExperimentalSurrealHTTP } from "surrealdb.js"
|
||||||
|
import type {
|
||||||
|
Adapter,
|
||||||
|
AdapterUser,
|
||||||
|
AdapterAccount,
|
||||||
|
AdapterSession,
|
||||||
|
VerificationToken,
|
||||||
|
} from "@auth/core/adapters"
|
||||||
|
import type { ProviderType } from "@auth/core/providers"
|
||||||
|
|
||||||
|
type Document = Record<string, string | null | undefined> & { id: string }
|
||||||
|
export type UserDoc = Document & { email: string }
|
||||||
|
export type AccountDoc<T = string> = {
|
||||||
|
id: string
|
||||||
|
userId: T
|
||||||
|
refresh_token?: string
|
||||||
|
access_token?: string
|
||||||
|
type: Extract<ProviderType, "oauth" | "oidc" | "email">
|
||||||
|
provider: string
|
||||||
|
providerAccountId: string
|
||||||
|
expires_at?: number
|
||||||
|
}
|
||||||
|
export type SessionDoc<T = string> = Document & { userId: T }
|
||||||
|
|
||||||
|
const extractId = (surrealId: string) => surrealId.split(":")[1] ?? surrealId
|
||||||
|
|
||||||
|
// Convert DB object to AdapterUser
|
||||||
|
export const docToUser = (doc: UserDoc): AdapterUser => ({
|
||||||
|
...doc,
|
||||||
|
id: extractId(doc.id),
|
||||||
|
emailVerified: doc.emailVerified ? new Date(doc.emailVerified) : null,
|
||||||
|
})
|
||||||
|
|
||||||
|
// Convert DB object to AdapterAccount
|
||||||
|
export const docToAccount = (doc: AccountDoc) => {
|
||||||
|
const account: AdapterAccount = {
|
||||||
|
...doc,
|
||||||
|
id: extractId(doc.id),
|
||||||
|
userId: doc.userId ? extractId(doc.userId) : "",
|
||||||
|
}
|
||||||
|
return account
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert DB object to AdapterSession
|
||||||
|
export const docToSession = (
|
||||||
|
doc: SessionDoc<string | UserDoc>
|
||||||
|
): AdapterSession => ({
|
||||||
|
userId: extractId(
|
||||||
|
typeof doc.userId === "string" ? doc.userId : doc.userId.id
|
||||||
|
),
|
||||||
|
expires: new Date(doc.expires ?? ""),
|
||||||
|
sessionToken: doc.sessionToken ?? "",
|
||||||
|
})
|
||||||
|
|
||||||
|
// Convert AdapterUser to DB object
|
||||||
|
const userToDoc = (
|
||||||
|
user: Omit<AdapterUser, "id"> | Partial<AdapterUser>
|
||||||
|
): Omit<UserDoc, "id"> => {
|
||||||
|
const doc = {
|
||||||
|
...user,
|
||||||
|
emailVerified: user.emailVerified?.toISOString(),
|
||||||
|
}
|
||||||
|
return doc
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert AdapterAccount to DB object
|
||||||
|
const accountToDoc = (account: AdapterAccount): Omit<AccountDoc, "id"> => {
|
||||||
|
const doc = {
|
||||||
|
...account,
|
||||||
|
userId: `user:${account.userId}`,
|
||||||
|
}
|
||||||
|
return doc
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert AdapterSession to DB object
|
||||||
|
export const sessionToDoc = (
|
||||||
|
session: AdapterSession
|
||||||
|
): Omit<SessionDoc, "id"> => {
|
||||||
|
const doc = {
|
||||||
|
...session,
|
||||||
|
expires: session.expires.toISOString(),
|
||||||
|
}
|
||||||
|
return doc
|
||||||
|
}
|
||||||
|
|
||||||
|
export function SurrealDBAdapter<T>(
|
||||||
|
client: Promise<Surreal | ExperimentalSurrealHTTP<T>>
|
||||||
|
// options = {}
|
||||||
|
): Adapter {
|
||||||
|
return {
|
||||||
|
async createUser(user: Omit<AdapterUser, "id">) {
|
||||||
|
const surreal = await client
|
||||||
|
const doc = userToDoc(user)
|
||||||
|
const userDoc = await surreal.create<UserDoc, Omit<UserDoc, "id">>("user", doc)
|
||||||
|
if (userDoc.length) {
|
||||||
|
return docToUser(userDoc[0])
|
||||||
|
}
|
||||||
|
throw new Error("User not created")
|
||||||
|
},
|
||||||
|
async getUser(id: string) {
|
||||||
|
const surreal = await client
|
||||||
|
try {
|
||||||
|
const queryResult = await surreal.query<[UserDoc[]]>(
|
||||||
|
"SELECT * FROM $user",
|
||||||
|
{
|
||||||
|
user: `user:${id}`,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
const doc = queryResult[0].result?.[0]
|
||||||
|
if (doc) {
|
||||||
|
return docToUser(doc)
|
||||||
|
}
|
||||||
|
} catch (e) { }
|
||||||
|
return null
|
||||||
|
},
|
||||||
|
async getUserByEmail(email: string) {
|
||||||
|
const surreal = await client
|
||||||
|
try {
|
||||||
|
const users = await surreal.query<[UserDoc[]]>(
|
||||||
|
`SELECT * FROM user WHERE email = $email`,
|
||||||
|
{ email }
|
||||||
|
)
|
||||||
|
const doc = users[0].result?.[0]
|
||||||
|
if (doc) return docToUser(doc)
|
||||||
|
} catch (e) { }
|
||||||
|
return null
|
||||||
|
},
|
||||||
|
async getUserByAccount({
|
||||||
|
providerAccountId,
|
||||||
|
provider,
|
||||||
|
}: Pick<AdapterAccount, "provider" | "providerAccountId">) {
|
||||||
|
const surreal = await client
|
||||||
|
try {
|
||||||
|
const users = await surreal.query<[AccountDoc<UserDoc>[]]>(
|
||||||
|
`SELECT userId
|
||||||
|
FROM account
|
||||||
|
WHERE providerAccountId = $providerAccountId
|
||||||
|
AND provider = $provider
|
||||||
|
FETCH userId`,
|
||||||
|
{ providerAccountId, provider }
|
||||||
|
)
|
||||||
|
const user = users[0].result?.[0]
|
||||||
|
?.userId
|
||||||
|
if (user) return docToUser(user)
|
||||||
|
} catch (e) { }
|
||||||
|
return null
|
||||||
|
},
|
||||||
|
async updateUser(user: Partial<AdapterUser>) {
|
||||||
|
const surreal = await client
|
||||||
|
const doc = { ...user, emailVerified: user.emailVerified?.toISOString(), id: undefined }
|
||||||
|
let updatedUser = await surreal.merge<UserDoc, Omit<UserDoc, "id">>(`user:${user.id}`, doc)
|
||||||
|
if (updatedUser.length) {
|
||||||
|
return docToUser(updatedUser[0])
|
||||||
|
} else {
|
||||||
|
throw new Error("User not updated")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async deleteUser(userId: string) {
|
||||||
|
const surreal = await client
|
||||||
|
|
||||||
|
// delete account
|
||||||
|
try {
|
||||||
|
const accounts = await surreal.query<[AccountDoc[]]>(
|
||||||
|
`SELECT *
|
||||||
|
FROM account
|
||||||
|
WHERE userId = $userId
|
||||||
|
LIMIT 1`,
|
||||||
|
{ userId: `user:${userId}` }
|
||||||
|
)
|
||||||
|
const account = accounts[0].result?.[0]
|
||||||
|
if (account) {
|
||||||
|
const accountId = extractId(account.id)
|
||||||
|
await surreal.delete(`account:${accountId}`)
|
||||||
|
}
|
||||||
|
} catch (e) { }
|
||||||
|
|
||||||
|
// delete session
|
||||||
|
try {
|
||||||
|
const sessions = await surreal.query<[SessionDoc[]]>(
|
||||||
|
`SELECT *
|
||||||
|
FROM session
|
||||||
|
WHERE userId = $userId
|
||||||
|
LIMIT 1`,
|
||||||
|
{ userId: `user:${userId}` }
|
||||||
|
)
|
||||||
|
const session = sessions[0].result?.[0]
|
||||||
|
if (session) {
|
||||||
|
const sessionId = extractId(session.id)
|
||||||
|
await surreal.delete(`session:${sessionId}`)
|
||||||
|
}
|
||||||
|
} catch (e) { }
|
||||||
|
|
||||||
|
// delete user
|
||||||
|
await surreal.delete(`user:${userId}`)
|
||||||
|
|
||||||
|
// TODO: put all 3 deletes inside a Promise all
|
||||||
|
},
|
||||||
|
async linkAccount(account: AdapterAccount) {
|
||||||
|
const surreal = await client
|
||||||
|
const doc = await surreal.create("account", accountToDoc(account))
|
||||||
|
return docToAccount(doc[0])
|
||||||
|
},
|
||||||
|
async unlinkAccount({
|
||||||
|
providerAccountId,
|
||||||
|
provider,
|
||||||
|
}: Pick<AdapterAccount, "provider" | "providerAccountId">) {
|
||||||
|
const surreal = await client
|
||||||
|
try {
|
||||||
|
const accounts = await surreal.query<[AccountDoc[]]>(
|
||||||
|
`SELECT *
|
||||||
|
FROM account
|
||||||
|
WHERE providerAccountId = $providerAccountId
|
||||||
|
AND provider = $provider
|
||||||
|
LIMIT 1`,
|
||||||
|
{ providerAccountId, provider }
|
||||||
|
)
|
||||||
|
const account = accounts[0].result?.[0]
|
||||||
|
if (account) {
|
||||||
|
const accountId = extractId(account.id)
|
||||||
|
await surreal.delete(`account:${accountId}`)
|
||||||
|
}
|
||||||
|
} catch (e) { }
|
||||||
|
},
|
||||||
|
async createSession({
|
||||||
|
sessionToken,
|
||||||
|
userId,
|
||||||
|
expires,
|
||||||
|
}: {
|
||||||
|
sessionToken: string
|
||||||
|
userId: string
|
||||||
|
expires: Date
|
||||||
|
}) {
|
||||||
|
const surreal = await client
|
||||||
|
const doc = {
|
||||||
|
sessionToken,
|
||||||
|
userId: `user:${userId}`,
|
||||||
|
expires,
|
||||||
|
}
|
||||||
|
const result = await surreal.create("session", doc)
|
||||||
|
return result[0] ?? null
|
||||||
|
},
|
||||||
|
async getSessionAndUser(sessionToken: string) {
|
||||||
|
const surreal = await client
|
||||||
|
try {
|
||||||
|
// Can't use limit 1 because it prevent userId to be fetched.
|
||||||
|
// Works setting limit to 2
|
||||||
|
const sessions = await surreal.query<[SessionDoc<UserDoc>[]]>(
|
||||||
|
`SELECT *
|
||||||
|
FROM session
|
||||||
|
WHERE sessionToken = $sessionToken
|
||||||
|
FETCH userId`,
|
||||||
|
{ sessionToken }
|
||||||
|
)
|
||||||
|
const session = sessions[0].result?.[0]
|
||||||
|
if (session) {
|
||||||
|
const userDoc = session.userId
|
||||||
|
if (!userDoc) return null
|
||||||
|
return {
|
||||||
|
user: docToUser(userDoc),
|
||||||
|
session: docToSession({
|
||||||
|
...session,
|
||||||
|
userId: userDoc.id,
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) { }
|
||||||
|
return null
|
||||||
|
},
|
||||||
|
async updateSession(
|
||||||
|
session: Partial<AdapterSession> & Pick<AdapterSession, "sessionToken">
|
||||||
|
) {
|
||||||
|
const surreal = await client
|
||||||
|
try {
|
||||||
|
const sessions = await surreal.query<[SessionDoc[]]>(
|
||||||
|
`SELECT *
|
||||||
|
FROM session
|
||||||
|
WHERE sessionToken = $sessionToken
|
||||||
|
LIMIT 1`,
|
||||||
|
{ sessionToken: session.sessionToken }
|
||||||
|
)
|
||||||
|
const sessionDoc = sessions[0].result?.[0]
|
||||||
|
if (sessionDoc && session.expires) {
|
||||||
|
const sessionId = extractId(sessionDoc.id)
|
||||||
|
let updatedSession = await surreal.merge<SessionDoc, Omit<SessionDoc, "id">>(
|
||||||
|
`session:${sessionId}`,
|
||||||
|
sessionToDoc({
|
||||||
|
...sessionDoc,
|
||||||
|
...session,
|
||||||
|
userId: sessionDoc.userId,
|
||||||
|
expires: session.expires,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
if (updatedSession.length) {
|
||||||
|
return docToSession(updatedSession[0])
|
||||||
|
} else {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) { }
|
||||||
|
return null
|
||||||
|
},
|
||||||
|
async deleteSession(sessionToken: string) {
|
||||||
|
const surreal = await client
|
||||||
|
try {
|
||||||
|
const sessions = await surreal.query<[SessionDoc[]]>(
|
||||||
|
`SELECT *
|
||||||
|
FROM session
|
||||||
|
WHERE sessionToken = $sessionToken
|
||||||
|
LIMIT 1`,
|
||||||
|
{ sessionToken }
|
||||||
|
)
|
||||||
|
const session = sessions[0].result?.[0]
|
||||||
|
if (session) {
|
||||||
|
const sessionId = extractId(session.id)
|
||||||
|
await surreal.delete(`session:${sessionId}`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} catch (e) { }
|
||||||
|
},
|
||||||
|
async createVerificationToken({
|
||||||
|
identifier,
|
||||||
|
expires,
|
||||||
|
token,
|
||||||
|
}: VerificationToken) {
|
||||||
|
const surreal = await client
|
||||||
|
const doc = {
|
||||||
|
identifier,
|
||||||
|
expires,
|
||||||
|
token,
|
||||||
|
}
|
||||||
|
const result = await surreal.create("verification_token", doc)
|
||||||
|
return result[0] ?? null
|
||||||
|
},
|
||||||
|
async useVerificationToken({
|
||||||
|
identifier,
|
||||||
|
token,
|
||||||
|
}: {
|
||||||
|
identifier: string
|
||||||
|
token: string
|
||||||
|
}) {
|
||||||
|
const surreal = await client
|
||||||
|
try {
|
||||||
|
const tokens = await surreal.query<[{ identifier: string, expires: string, token: string, id: string }[]]>(
|
||||||
|
`SELECT *
|
||||||
|
FROM verification_token
|
||||||
|
WHERE identifier = $identifier
|
||||||
|
AND token = $verificationToken
|
||||||
|
LIMIT 1`,
|
||||||
|
{ identifier, verificationToken: token }
|
||||||
|
)
|
||||||
|
if (tokens.length && tokens[0].result) {
|
||||||
|
const vt = tokens[0].result[0]
|
||||||
|
if (vt) {
|
||||||
|
await surreal.delete(vt.id)
|
||||||
|
return {
|
||||||
|
identifier: vt.identifier,
|
||||||
|
expires: new Date(vt.expires),
|
||||||
|
token: vt.token,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else { return null }
|
||||||
|
} catch (e) { }
|
||||||
|
return null
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
77
packages/adapter-surrealdb/tests/common.ts
Normal file
77
packages/adapter-surrealdb/tests/common.ts
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
import Surreal, { ExperimentalSurrealHTTP } from "surrealdb.js"
|
||||||
|
|
||||||
|
import {
|
||||||
|
SurrealDBAdapter,
|
||||||
|
docToUser,
|
||||||
|
docToAccount,
|
||||||
|
docToSession,
|
||||||
|
} from "../src/index"
|
||||||
|
import type { UserDoc, AccountDoc, SessionDoc } from "../src/index"
|
||||||
|
|
||||||
|
export const config = (
|
||||||
|
clientPromise: Promise<Surreal | ExperimentalSurrealHTTP<typeof fetch>>
|
||||||
|
) => ({
|
||||||
|
adapter: SurrealDBAdapter(clientPromise),
|
||||||
|
db: {
|
||||||
|
async disconnect() {
|
||||||
|
const surreal = await clientPromise
|
||||||
|
if (surreal.close) surreal.close()
|
||||||
|
},
|
||||||
|
async user(id: string) {
|
||||||
|
const surreal = await clientPromise
|
||||||
|
try {
|
||||||
|
const users = await surreal.query<[UserDoc[]]>("SELECT * FROM $user", {
|
||||||
|
user: `user:${id}`,
|
||||||
|
})
|
||||||
|
const user = users[0]
|
||||||
|
if (user.result?.[0] !== undefined) return docToUser(user.result[0])
|
||||||
|
} catch (e) {}
|
||||||
|
return null
|
||||||
|
},
|
||||||
|
async account({ provider, providerAccountId }) {
|
||||||
|
const surreal = await clientPromise
|
||||||
|
const accounts = await surreal.query<[AccountDoc[]]>(
|
||||||
|
`SELECT * FROM account WHERE provider = $provider AND providerAccountId = $providerAccountId`,
|
||||||
|
{ provider, providerAccountId }
|
||||||
|
)
|
||||||
|
const account = accounts[0]
|
||||||
|
if (account.result?.[0] !== undefined)
|
||||||
|
return docToAccount(account.result[0])
|
||||||
|
return null
|
||||||
|
},
|
||||||
|
async session(sessionToken: string) {
|
||||||
|
const surreal = await clientPromise
|
||||||
|
const sessions = await surreal.query<[SessionDoc[]]>(
|
||||||
|
`SELECT * FROM session WHERE sessionToken = $sessionToken`,
|
||||||
|
{ sessionToken }
|
||||||
|
)
|
||||||
|
const session = sessions[0].result?.[0]
|
||||||
|
if (session !== undefined) {
|
||||||
|
return docToSession(session)
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
},
|
||||||
|
async verificationToken({ identifier, token }) {
|
||||||
|
const surreal = await clientPromise
|
||||||
|
const tokens = await surreal.query<
|
||||||
|
[{ identifier: string; expires: string; token: string; id: string }[]]
|
||||||
|
>(
|
||||||
|
`SELECT *
|
||||||
|
FROM verification_token
|
||||||
|
WHERE identifier = $identifier
|
||||||
|
AND token = $verificationToken
|
||||||
|
LIMIT 1`,
|
||||||
|
{ identifier, verificationToken: token }
|
||||||
|
)
|
||||||
|
const verificationToken = tokens[0].result?.[0]
|
||||||
|
if (verificationToken) {
|
||||||
|
return {
|
||||||
|
identifier: verificationToken.identifier,
|
||||||
|
expires: new Date(verificationToken.expires),
|
||||||
|
token: verificationToken.token,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
23
packages/adapter-surrealdb/tests/index.test.ts
Normal file
23
packages/adapter-surrealdb/tests/index.test.ts
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
import Surreal from "surrealdb.js"
|
||||||
|
import { runBasicTests } from "@auth/adapter-test"
|
||||||
|
|
||||||
|
import { config } from "./common"
|
||||||
|
|
||||||
|
const clientPromise = new Promise<Surreal>(async (resolve, reject) => {
|
||||||
|
const db = new Surreal();
|
||||||
|
try {
|
||||||
|
await db.connect('http://0.0.0.0:8000/rpc', {
|
||||||
|
ns: "test",
|
||||||
|
db: "test",
|
||||||
|
auth: {
|
||||||
|
user: "test",
|
||||||
|
pass: "test",
|
||||||
|
}
|
||||||
|
})
|
||||||
|
resolve(db)
|
||||||
|
} catch (e) {
|
||||||
|
reject(e)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
runBasicTests(config(clientPromise))
|
||||||
27
packages/adapter-surrealdb/tests/rest.test.ts
Normal file
27
packages/adapter-surrealdb/tests/rest.test.ts
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
test("TODO: test rest", () => {
|
||||||
|
expect(true).toBe(true)
|
||||||
|
})
|
||||||
|
// import { ExperimentalSurrealHTTP } from "surrealdb.js"
|
||||||
|
// import { runBasicTests } from "@auth/adapter-test"
|
||||||
|
// import fetch from "node-fetch"
|
||||||
|
|
||||||
|
// import { config } from "./common"
|
||||||
|
|
||||||
|
// const clientPromise = new Promise<ExperimentalSurrealHTTP<typeof fetch>>(async (resolve, reject) => {
|
||||||
|
// try {
|
||||||
|
// const db = new ExperimentalSurrealHTTP("http://0.0.0.0:8000", {
|
||||||
|
// fetch,
|
||||||
|
// auth: {
|
||||||
|
// user: "test",
|
||||||
|
// pass: "test",
|
||||||
|
// },
|
||||||
|
// ns: "test",
|
||||||
|
// db: "test",
|
||||||
|
// })
|
||||||
|
// resolve(db)
|
||||||
|
// } catch (e) {
|
||||||
|
// reject(e)
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
|
||||||
|
// runBasicTests(config(clientPromise))
|
||||||
34
packages/adapter-surrealdb/tests/test.sh
Executable file
34
packages/adapter-surrealdb/tests/test.sh
Executable file
@@ -0,0 +1,34 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
CONTAINER_NAME=next-auth-surrealdb-test
|
||||||
|
|
||||||
|
JEST_WATCH=false
|
||||||
|
|
||||||
|
# Is the watch flag passed to the script?
|
||||||
|
while getopts w flag
|
||||||
|
do
|
||||||
|
case "${flag}" in
|
||||||
|
w) JEST_WATCH=true;;
|
||||||
|
*) continue;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Start db
|
||||||
|
docker run -d --rm -p 8000:8000 --name ${CONTAINER_NAME} surrealdb/surrealdb:latest start --log debug --user test --pass test memory
|
||||||
|
|
||||||
|
echo "Waiting 3 sec for db to start..."
|
||||||
|
sleep 3
|
||||||
|
|
||||||
|
if $JEST_WATCH; then
|
||||||
|
# Run jest in watch mode
|
||||||
|
npx jest tests --watch
|
||||||
|
# Only stop the container after jest has been quit
|
||||||
|
docker stop "${CONTAINER_NAME}"
|
||||||
|
else
|
||||||
|
# Always stop container, but exit with 1 when tests are failing
|
||||||
|
if npx jest;then
|
||||||
|
docker stop ${CONTAINER_NAME}
|
||||||
|
else
|
||||||
|
docker stop ${CONTAINER_NAME} && exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
25
packages/adapter-surrealdb/tsconfig.json
Normal file
25
packages/adapter-surrealdb/tsconfig.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"extends": "@auth/tsconfig/tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"allowJs": true,
|
||||||
|
"baseUrl": ".",
|
||||||
|
"isolatedModules": true,
|
||||||
|
"target": "ES2020",
|
||||||
|
"module": "ESNext",
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"outDir": ".",
|
||||||
|
"rootDir": "src",
|
||||||
|
"skipDefaultLibCheck": true,
|
||||||
|
"strictNullChecks": true,
|
||||||
|
"stripInternal": true,
|
||||||
|
"declarationMap": true,
|
||||||
|
"declaration": true
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"src/**/*"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"*.js",
|
||||||
|
"*.d.ts",
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@auth/typeorm-adapter",
|
"name": "@auth/typeorm-adapter",
|
||||||
"version": "1.0.1",
|
"version": "1.0.2",
|
||||||
"description": "TypeORM adapter for Auth.js.",
|
"description": "TypeORM adapter for Auth.js.",
|
||||||
"homepage": "https://authjs.dev/reference/adapter/typeorm",
|
"homepage": "https://authjs.dev/reference/adapter/typeorm",
|
||||||
"repository": "https://github.com/nextauthjs/next-auth",
|
"repository": "https://github.com/nextauthjs/next-auth",
|
||||||
|
|||||||
@@ -42,15 +42,16 @@ export async function getManager(options: {
|
|||||||
dataSource: string | DataSourceOptions
|
dataSource: string | DataSourceOptions
|
||||||
entities: Entities
|
entities: Entities
|
||||||
}): Promise<EntityManager> {
|
}): Promise<EntityManager> {
|
||||||
const { dataSource, entities } = options
|
|
||||||
|
|
||||||
const config = {
|
if (!_dataSource) {
|
||||||
...parseDataSourceConfig(dataSource),
|
const { dataSource, entities } = options
|
||||||
entities: Object.values(entities),
|
const config = {
|
||||||
|
...parseDataSourceConfig(dataSource),
|
||||||
|
entities: Object.values(entities),
|
||||||
|
}
|
||||||
|
_dataSource = new DataSource(config)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_dataSource) _dataSource = new DataSource(config)
|
|
||||||
|
|
||||||
const manager = _dataSource?.manager
|
const manager = _dataSource?.manager
|
||||||
|
|
||||||
if (!manager.connection.isInitialized) {
|
if (!manager.connection.isInitialized) {
|
||||||
@@ -58,7 +59,7 @@ export async function getManager(options: {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (process.env.NODE_ENV !== "production") {
|
if (process.env.NODE_ENV !== "production") {
|
||||||
await updateConnectionEntities(_dataSource, config.entities)
|
await updateConnectionEntities(_dataSource, Object.values(options.entities))
|
||||||
}
|
}
|
||||||
return manager
|
return manager
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@auth/core",
|
"name": "@auth/core",
|
||||||
"version": "0.15.1",
|
"version": "0.15.2",
|
||||||
"description": "Authentication for the Web.",
|
"description": "Authentication for the Web.",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"authentication",
|
"authentication",
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ export default function AzureADB2C(
|
|||||||
return {
|
return {
|
||||||
id: profile.sub,
|
id: profile.sub,
|
||||||
name: profile.name,
|
name: profile.name,
|
||||||
email: profile.emails[0],
|
email: profile?.emails?.[0],
|
||||||
image: null,
|
image: null,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
668
pnpm-lock.yaml
generated
668
pnpm-lock.yaml
generated
@@ -312,6 +312,25 @@ importers:
|
|||||||
specifier: 4.0.0-next.6
|
specifier: 4.0.0-next.6
|
||||||
version: 4.0.0-next.6(prettier@2.8.1)(typedoc@0.24.8)
|
version: 4.0.0-next.6(prettier@2.8.1)(typedoc@0.24.8)
|
||||||
|
|
||||||
|
packages/adapter-azure-tables:
|
||||||
|
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
|
||||||
|
'@azure/data-tables':
|
||||||
|
specifier: ^13.2.1
|
||||||
|
version: 13.2.2
|
||||||
|
jest:
|
||||||
|
specifier: ^27.4.3
|
||||||
|
version: 27.5.1
|
||||||
|
|
||||||
packages/adapter-d1:
|
packages/adapter-d1:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@auth/core':
|
'@auth/core':
|
||||||
@@ -709,6 +728,25 @@ importers:
|
|||||||
specifier: ^27.4.3
|
specifier: ^27.4.3
|
||||||
version: 27.5.1
|
version: 27.5.1
|
||||||
|
|
||||||
|
packages/adapter-surrealdb:
|
||||||
|
dependencies:
|
||||||
|
'@auth/core':
|
||||||
|
specifier: workspace:*
|
||||||
|
version: link:../core
|
||||||
|
surrealdb.js:
|
||||||
|
specifier: ^0.9.0
|
||||||
|
version: 0.9.0
|
||||||
|
devDependencies:
|
||||||
|
'@auth/adapter-test':
|
||||||
|
specifier: workspace:*
|
||||||
|
version: link:../adapter-test
|
||||||
|
'@auth/tsconfig':
|
||||||
|
specifier: workspace:*
|
||||||
|
version: link:../tsconfig
|
||||||
|
jest:
|
||||||
|
specifier: ^27.4.3
|
||||||
|
version: 27.5.1
|
||||||
|
|
||||||
packages/adapter-test:
|
packages/adapter-test:
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@auth/core':
|
'@auth/core':
|
||||||
@@ -2526,6 +2564,31 @@ packages:
|
|||||||
tslib: 2.5.2
|
tslib: 2.5.2
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/@azure/core-xml@1.3.4:
|
||||||
|
resolution: {integrity: sha512-B1xI79Ur/u+KR69fGTcsMNj8KDjBSqAy0Ys6Byy4Qm1CqoUy7gCT5A7Pej0EBWRskuH6bpCwrAnosfmQEalkcg==}
|
||||||
|
engines: {node: '>=14.0.0'}
|
||||||
|
dependencies:
|
||||||
|
fast-xml-parser: 4.2.5
|
||||||
|
tslib: 2.5.2
|
||||||
|
dev: true
|
||||||
|
|
||||||
|
/@azure/data-tables@13.2.2:
|
||||||
|
resolution: {integrity: sha512-Dq2Aq0mMMF0BPzYQKdBY/OtO7VemP/foh6z+mJpUO1hRL+65C1rGQUJf20LJHotSyU8wHb4HJzOs+Z50GXSy1w==}
|
||||||
|
engines: {node: '>=14.0.0'}
|
||||||
|
dependencies:
|
||||||
|
'@azure/core-auth': 1.3.2
|
||||||
|
'@azure/core-client': 1.6.0
|
||||||
|
'@azure/core-paging': 1.3.0
|
||||||
|
'@azure/core-rest-pipeline': 1.9.0
|
||||||
|
'@azure/core-tracing': 1.0.1
|
||||||
|
'@azure/core-xml': 1.3.4
|
||||||
|
'@azure/logger': 1.0.3
|
||||||
|
tslib: 2.5.2
|
||||||
|
uuid: 8.3.2
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
dev: true
|
||||||
|
|
||||||
/@azure/identity@1.5.2(debug@4.3.4):
|
/@azure/identity@1.5.2(debug@4.3.4):
|
||||||
resolution: {integrity: sha512-vqyeRbd2i0h9F4mqW5JbkP1xfabqKQ21l/81osKhpOQ2LtwaJW6nw4+0PsVYnxcbPHFCIZt6EWAk74a3OGYZJA==}
|
resolution: {integrity: sha512-vqyeRbd2i0h9F4mqW5JbkP1xfabqKQ21l/81osKhpOQ2LtwaJW6nw4+0PsVYnxcbPHFCIZt6EWAk74a3OGYZJA==}
|
||||||
engines: {node: '>=12.0.0'}
|
engines: {node: '>=12.0.0'}
|
||||||
@@ -8942,30 +9005,6 @@ packages:
|
|||||||
slash: 3.0.0
|
slash: 3.0.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@jest/console@29.2.1:
|
|
||||||
resolution: {integrity: sha512-MF8Adcw+WPLZGBiNxn76DOuczG3BhODTcMlDCA4+cFi41OkaY/lyI0XUUhi73F88Y+7IHoGmD80pN5CtxQUdSw==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
'@jest/types': 29.5.0
|
|
||||||
'@types/node': 17.0.45
|
|
||||||
chalk: 4.1.2
|
|
||||||
jest-message-util: 29.5.0
|
|
||||||
jest-util: 29.5.0
|
|
||||||
slash: 3.0.0
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@jest/console@29.3.1:
|
|
||||||
resolution: {integrity: sha512-IRE6GD47KwcqA09RIWrabKdHPiKDGgtAL31xDxbi/RjQMsr+lY+ppxmHwY0dUEV3qvvxZzoe5Hl0RXZJOjQNUg==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
'@jest/types': 29.5.0
|
|
||||||
'@types/node': 17.0.45
|
|
||||||
chalk: 4.1.2
|
|
||||||
jest-message-util: 29.5.0
|
|
||||||
jest-util: 29.5.0
|
|
||||||
slash: 3.0.0
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@jest/console@29.5.0:
|
/@jest/console@29.5.0:
|
||||||
resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==}
|
resolution: {integrity: sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==}
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
||||||
@@ -9115,10 +9154,10 @@ packages:
|
|||||||
node-notifier:
|
node-notifier:
|
||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@jest/console': 29.2.1
|
'@jest/console': 29.5.0
|
||||||
'@jest/reporters': 29.3.0
|
'@jest/reporters': 29.5.0
|
||||||
'@jest/test-result': 29.5.0
|
'@jest/test-result': 29.5.0
|
||||||
'@jest/transform': 29.3.0
|
'@jest/transform': 29.5.0
|
||||||
'@jest/types': 29.5.0
|
'@jest/types': 29.5.0
|
||||||
'@types/node': 17.0.45
|
'@types/node': 17.0.45
|
||||||
ansi-escapes: 4.3.2
|
ansi-escapes: 4.3.2
|
||||||
@@ -9126,19 +9165,19 @@ packages:
|
|||||||
ci-info: 3.7.0
|
ci-info: 3.7.0
|
||||||
exit: 0.1.2
|
exit: 0.1.2
|
||||||
graceful-fs: 4.2.10
|
graceful-fs: 4.2.10
|
||||||
jest-changed-files: 29.2.0
|
jest-changed-files: 29.5.0
|
||||||
jest-config: 29.5.0(@types/node@17.0.45)
|
jest-config: 29.5.0(@types/node@17.0.45)
|
||||||
jest-haste-map: 29.3.0
|
jest-haste-map: 29.5.0
|
||||||
jest-message-util: 29.2.1
|
jest-message-util: 29.5.0
|
||||||
jest-regex-util: 29.2.0
|
jest-regex-util: 29.4.3
|
||||||
jest-resolve: 29.3.0
|
jest-resolve: 29.5.0
|
||||||
jest-resolve-dependencies: 29.3.0
|
jest-resolve-dependencies: 29.5.0
|
||||||
jest-runner: 29.3.0
|
jest-runner: 29.5.0
|
||||||
jest-runtime: 29.3.0
|
jest-runtime: 29.5.0
|
||||||
jest-snapshot: 29.3.0
|
jest-snapshot: 29.5.0
|
||||||
jest-util: 29.5.0
|
jest-util: 29.5.0
|
||||||
jest-validate: 29.5.0
|
jest-validate: 29.5.0
|
||||||
jest-watcher: 29.2.2
|
jest-watcher: 29.5.0
|
||||||
micromatch: 4.0.5
|
micromatch: 4.0.5
|
||||||
pretty-format: 29.2.1
|
pretty-format: 29.2.1
|
||||||
slash: 3.0.0
|
slash: 3.0.0
|
||||||
@@ -9157,10 +9196,10 @@ packages:
|
|||||||
node-notifier:
|
node-notifier:
|
||||||
optional: true
|
optional: true
|
||||||
dependencies:
|
dependencies:
|
||||||
'@jest/console': 29.3.1
|
'@jest/console': 29.5.0
|
||||||
'@jest/reporters': 29.3.1
|
'@jest/reporters': 29.5.0
|
||||||
'@jest/test-result': 29.5.0
|
'@jest/test-result': 29.5.0
|
||||||
'@jest/transform': 29.3.1
|
'@jest/transform': 29.5.0
|
||||||
'@jest/types': 29.5.0
|
'@jest/types': 29.5.0
|
||||||
'@types/node': 17.0.45
|
'@types/node': 17.0.45
|
||||||
ansi-escapes: 4.3.2
|
ansi-escapes: 4.3.2
|
||||||
@@ -9168,19 +9207,19 @@ packages:
|
|||||||
ci-info: 3.7.0
|
ci-info: 3.7.0
|
||||||
exit: 0.1.2
|
exit: 0.1.2
|
||||||
graceful-fs: 4.2.10
|
graceful-fs: 4.2.10
|
||||||
jest-changed-files: 29.2.0
|
jest-changed-files: 29.5.0
|
||||||
jest-config: 29.5.0(@types/node@17.0.45)
|
jest-config: 29.5.0(@types/node@17.0.45)
|
||||||
jest-haste-map: 29.3.1
|
jest-haste-map: 29.5.0
|
||||||
jest-message-util: 29.3.1
|
jest-message-util: 29.5.0
|
||||||
jest-regex-util: 29.2.0
|
jest-regex-util: 29.4.3
|
||||||
jest-resolve: 29.3.1
|
jest-resolve: 29.5.0
|
||||||
jest-resolve-dependencies: 29.3.1
|
jest-resolve-dependencies: 29.5.0
|
||||||
jest-runner: 29.3.1
|
jest-runner: 29.5.0
|
||||||
jest-runtime: 29.3.1
|
jest-runtime: 29.5.0
|
||||||
jest-snapshot: 29.3.1
|
jest-snapshot: 29.5.0
|
||||||
jest-util: 29.5.0
|
jest-util: 29.5.0
|
||||||
jest-validate: 29.5.0
|
jest-validate: 29.5.0
|
||||||
jest-watcher: 29.3.1
|
jest-watcher: 29.5.0
|
||||||
micromatch: 4.0.5
|
micromatch: 4.0.5
|
||||||
pretty-format: 29.3.1
|
pretty-format: 29.3.1
|
||||||
slash: 3.0.0
|
slash: 3.0.0
|
||||||
@@ -9263,10 +9302,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-9auVQ2GzQ7nrU+lAr8KyY838YahElTX9HVjbQPPS2XjlxQ+na18G113OoBhyBGBtD6ZnO/SrUy5WR8EzOj1/Uw==}
|
resolution: {integrity: sha512-9auVQ2GzQ7nrU+lAr8KyY838YahElTX9HVjbQPPS2XjlxQ+na18G113OoBhyBGBtD6ZnO/SrUy5WR8EzOj1/Uw==}
|
||||||
engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0}
|
engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@jest/fake-timers': 28.1.1
|
'@jest/fake-timers': 28.1.3
|
||||||
'@jest/types': 28.1.3
|
'@jest/types': 28.1.3
|
||||||
'@types/node': 17.0.45
|
'@types/node': 17.0.45
|
||||||
jest-mock: 28.1.1
|
jest-mock: 28.1.3
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@jest/environment@28.1.3:
|
/@jest/environment@28.1.3:
|
||||||
@@ -9362,7 +9401,7 @@ packages:
|
|||||||
'@sinonjs/fake-timers': 9.1.2
|
'@sinonjs/fake-timers': 9.1.2
|
||||||
'@types/node': 17.0.45
|
'@types/node': 17.0.45
|
||||||
jest-message-util: 28.1.3
|
jest-message-util: 28.1.3
|
||||||
jest-mock: 28.1.1
|
jest-mock: 28.1.3
|
||||||
jest-util: 28.1.3
|
jest-util: 28.1.3
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
@@ -9541,80 +9580,6 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@jest/reporters@29.3.0:
|
|
||||||
resolution: {integrity: sha512-MV76tB3Kd80vcv2yMDZfQpMkwkHaY9hlvVhCtHXkVRCWwN+SX3EOmCdX8pT/X4Xh+NusA7l2Rc3yhx4q5p3+Fg==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
peerDependencies:
|
|
||||||
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
|
|
||||||
peerDependenciesMeta:
|
|
||||||
node-notifier:
|
|
||||||
optional: true
|
|
||||||
dependencies:
|
|
||||||
'@bcoe/v8-coverage': 0.2.3
|
|
||||||
'@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
|
|
||||||
chalk: 4.1.2
|
|
||||||
collect-v8-coverage: 1.0.1
|
|
||||||
exit: 0.1.2
|
|
||||||
glob: 7.2.3
|
|
||||||
graceful-fs: 4.2.10
|
|
||||||
istanbul-lib-coverage: 3.2.0
|
|
||||||
istanbul-lib-instrument: 5.2.0
|
|
||||||
istanbul-lib-report: 3.0.0
|
|
||||||
istanbul-lib-source-maps: 4.0.1
|
|
||||||
istanbul-reports: 3.1.4
|
|
||||||
jest-message-util: 29.5.0
|
|
||||||
jest-util: 29.5.0
|
|
||||||
jest-worker: 29.5.0
|
|
||||||
slash: 3.0.0
|
|
||||||
string-length: 4.0.2
|
|
||||||
strip-ansi: 6.0.1
|
|
||||||
v8-to-istanbul: 9.0.1
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@jest/reporters@29.3.1:
|
|
||||||
resolution: {integrity: sha512-GhBu3YFuDrcAYW/UESz1JphEAbvUjaY2vShRZRoRY1mxpCMB3yGSJ4j9n0GxVlEOdCf7qjvUfBCrTUUqhVfbRA==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
peerDependencies:
|
|
||||||
node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
|
|
||||||
peerDependenciesMeta:
|
|
||||||
node-notifier:
|
|
||||||
optional: true
|
|
||||||
dependencies:
|
|
||||||
'@bcoe/v8-coverage': 0.2.3
|
|
||||||
'@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
|
|
||||||
chalk: 4.1.2
|
|
||||||
collect-v8-coverage: 1.0.1
|
|
||||||
exit: 0.1.2
|
|
||||||
glob: 7.2.3
|
|
||||||
graceful-fs: 4.2.10
|
|
||||||
istanbul-lib-coverage: 3.2.0
|
|
||||||
istanbul-lib-instrument: 5.2.0
|
|
||||||
istanbul-lib-report: 3.0.0
|
|
||||||
istanbul-lib-source-maps: 4.0.1
|
|
||||||
istanbul-reports: 3.1.4
|
|
||||||
jest-message-util: 29.5.0
|
|
||||||
jest-util: 29.5.0
|
|
||||||
jest-worker: 29.5.0
|
|
||||||
slash: 3.0.0
|
|
||||||
string-length: 4.0.2
|
|
||||||
strip-ansi: 6.0.1
|
|
||||||
v8-to-istanbul: 9.0.1
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@jest/reporters@29.5.0:
|
/@jest/reporters@29.5.0:
|
||||||
resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==}
|
resolution: {integrity: sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==}
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
||||||
@@ -9860,52 +9825,6 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@jest/transform@29.3.0:
|
|
||||||
resolution: {integrity: sha512-4T8h61ItCakAlJkdYa7XVWP3r39QldlCeOSNmRpiJisi5PrrlzwZdpJDIH13ZZjh+MlSPQ2cq8YbUs3TuH+tRA==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
'@babel/core': 7.22.1
|
|
||||||
'@jest/types': 29.5.0
|
|
||||||
'@jridgewell/trace-mapping': 0.3.17
|
|
||||||
babel-plugin-istanbul: 6.1.1
|
|
||||||
chalk: 4.1.2
|
|
||||||
convert-source-map: 2.0.0
|
|
||||||
fast-json-stable-stringify: 2.1.0
|
|
||||||
graceful-fs: 4.2.10
|
|
||||||
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
|
|
||||||
write-file-atomic: 4.0.2
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@jest/transform@29.3.1:
|
|
||||||
resolution: {integrity: sha512-8wmCFBTVGYqFNLWfcOWoVuMuKYPUBTnTMDkdvFtAYELwDOl9RGwOsvQWGPFxDJ8AWY9xM/8xCXdqmPK3+Q5Lug==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
'@babel/core': 7.22.1
|
|
||||||
'@jest/types': 29.5.0
|
|
||||||
'@jridgewell/trace-mapping': 0.3.17
|
|
||||||
babel-plugin-istanbul: 6.1.1
|
|
||||||
chalk: 4.1.2
|
|
||||||
convert-source-map: 2.0.0
|
|
||||||
fast-json-stable-stringify: 2.1.0
|
|
||||||
graceful-fs: 4.2.10
|
|
||||||
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
|
|
||||||
write-file-atomic: 4.0.2
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@jest/transform@29.5.0:
|
/@jest/transform@29.5.0:
|
||||||
resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==}
|
resolution: {integrity: sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==}
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
||||||
@@ -18578,7 +18497,7 @@ packages:
|
|||||||
'@jest/expect-utils': 29.3.1
|
'@jest/expect-utils': 29.3.1
|
||||||
jest-get-type: 29.2.0
|
jest-get-type: 29.2.0
|
||||||
jest-matcher-utils: 29.3.1
|
jest-matcher-utils: 29.3.1
|
||||||
jest-message-util: 29.3.1
|
jest-message-util: 29.5.0
|
||||||
jest-util: 29.5.0
|
jest-util: 29.5.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
@@ -18810,7 +18729,6 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
strnum: 1.0.5
|
strnum: 1.0.5
|
||||||
dev: true
|
dev: true
|
||||||
optional: true
|
|
||||||
|
|
||||||
/fastq@1.15.0:
|
/fastq@1.15.0:
|
||||||
resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
|
resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
|
||||||
@@ -21179,7 +21097,7 @@ packages:
|
|||||||
/isomorphic-fetch@3.0.0:
|
/isomorphic-fetch@3.0.0:
|
||||||
resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==}
|
resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
node-fetch: 2.6.7
|
node-fetch: 2.6.9
|
||||||
whatwg-fetch: 3.6.2
|
whatwg-fetch: 3.6.2
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- encoding
|
- encoding
|
||||||
@@ -21275,14 +21193,6 @@ packages:
|
|||||||
throat: 6.0.1
|
throat: 6.0.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/jest-changed-files@29.2.0:
|
|
||||||
resolution: {integrity: sha512-qPVmLLyBmvF5HJrY7krDisx6Voi8DmlV3GZYX0aFNbaQsZeoz1hfxcCMbqDGuQCxU1dJy9eYc2xscE8QrCCYaA==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
execa: 5.1.1
|
|
||||||
p-limit: 3.1.0
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-changed-files@29.5.0:
|
/jest-changed-files@29.5.0:
|
||||||
resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==}
|
resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==}
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
||||||
@@ -21993,44 +21903,6 @@ packages:
|
|||||||
fsevents: 2.3.2
|
fsevents: 2.3.2
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/jest-haste-map@29.3.0:
|
|
||||||
resolution: {integrity: sha512-ugdLIreycMRRg3+6AjiExECmuFI2D9PS+BmNU7eGvBt3fzVMKybb9USAZXN6kw4Q6Mn8DSK+7OFCloY2rN820Q==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
'@jest/types': 29.5.0
|
|
||||||
'@types/graceful-fs': 4.1.5
|
|
||||||
'@types/node': 17.0.45
|
|
||||||
anymatch: 3.1.3
|
|
||||||
fb-watchman: 2.0.1
|
|
||||||
graceful-fs: 4.2.10
|
|
||||||
jest-regex-util: 29.4.3
|
|
||||||
jest-util: 29.5.0
|
|
||||||
jest-worker: 29.5.0
|
|
||||||
micromatch: 4.0.5
|
|
||||||
walker: 1.0.8
|
|
||||||
optionalDependencies:
|
|
||||||
fsevents: 2.3.2
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-haste-map@29.3.1:
|
|
||||||
resolution: {integrity: sha512-/FFtvoG1xjbbPXQLFef+WSU4yrc0fc0Dds6aRPBojUid7qlPqZvxdUBA03HW0fnVHXVCnCdkuoghYItKNzc/0A==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
'@jest/types': 29.5.0
|
|
||||||
'@types/graceful-fs': 4.1.5
|
|
||||||
'@types/node': 17.0.45
|
|
||||||
anymatch: 3.1.3
|
|
||||||
fb-watchman: 2.0.1
|
|
||||||
graceful-fs: 4.2.10
|
|
||||||
jest-regex-util: 29.4.3
|
|
||||||
jest-util: 29.5.0
|
|
||||||
jest-worker: 29.5.0
|
|
||||||
micromatch: 4.0.5
|
|
||||||
walker: 1.0.8
|
|
||||||
optionalDependencies:
|
|
||||||
fsevents: 2.3.2
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-haste-map@29.5.0:
|
/jest-haste-map@29.5.0:
|
||||||
resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==}
|
resolution: {integrity: sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==}
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
||||||
@@ -22250,36 +22122,6 @@ packages:
|
|||||||
stack-utils: 2.0.5
|
stack-utils: 2.0.5
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/jest-message-util@29.2.1:
|
|
||||||
resolution: {integrity: sha512-Dx5nEjw9V8C1/Yj10S/8ivA8F439VS8vTq1L7hEgwHFn9ovSKNpYW/kwNh7UglaEgXO42XxzKJB+2x0nSglFVw==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
'@babel/code-frame': 7.21.4
|
|
||||||
'@jest/types': 29.5.0
|
|
||||||
'@types/stack-utils': 2.0.1
|
|
||||||
chalk: 4.1.2
|
|
||||||
graceful-fs: 4.2.10
|
|
||||||
micromatch: 4.0.5
|
|
||||||
pretty-format: 29.5.0
|
|
||||||
slash: 3.0.0
|
|
||||||
stack-utils: 2.0.5
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-message-util@29.3.1:
|
|
||||||
resolution: {integrity: sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
'@babel/code-frame': 7.21.4
|
|
||||||
'@jest/types': 29.5.0
|
|
||||||
'@types/stack-utils': 2.0.1
|
|
||||||
chalk: 4.1.2
|
|
||||||
graceful-fs: 4.2.10
|
|
||||||
micromatch: 4.0.5
|
|
||||||
pretty-format: 29.5.0
|
|
||||||
slash: 3.0.0
|
|
||||||
stack-utils: 2.0.5
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-message-util@29.5.0:
|
/jest-message-util@29.5.0:
|
||||||
resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==}
|
resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==}
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
||||||
@@ -22372,30 +22214,6 @@ packages:
|
|||||||
jest-resolve: 28.1.1
|
jest-resolve: 28.1.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/jest-pnp-resolver@1.2.2(jest-resolve@29.3.0):
|
|
||||||
resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
peerDependencies:
|
|
||||||
jest-resolve: '*'
|
|
||||||
peerDependenciesMeta:
|
|
||||||
jest-resolve:
|
|
||||||
optional: true
|
|
||||||
dependencies:
|
|
||||||
jest-resolve: 29.3.0
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-pnp-resolver@1.2.2(jest-resolve@29.3.1):
|
|
||||||
resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
peerDependencies:
|
|
||||||
jest-resolve: '*'
|
|
||||||
peerDependenciesMeta:
|
|
||||||
jest-resolve:
|
|
||||||
optional: true
|
|
||||||
dependencies:
|
|
||||||
jest-resolve: 29.3.1
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-pnp-resolver@1.2.2(jest-resolve@29.5.0):
|
/jest-pnp-resolver@1.2.2(jest-resolve@29.5.0):
|
||||||
resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==}
|
resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
@@ -22423,11 +22241,6 @@ packages:
|
|||||||
engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0}
|
engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/jest-regex-util@29.2.0:
|
|
||||||
resolution: {integrity: sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-regex-util@29.4.3:
|
/jest-regex-util@29.4.3:
|
||||||
resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==}
|
resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==}
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
||||||
@@ -22465,26 +22278,6 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/jest-resolve-dependencies@29.3.0:
|
|
||||||
resolution: {integrity: sha512-ykSbDbWmIaHprOBig57AExw7i6Fj0y69M6baiAd75Ivx1UMQt4wsM6A+SNqIhycV6Zy8XV3L40Ac3HYSrDSq7w==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
jest-regex-util: 29.4.3
|
|
||||||
jest-snapshot: 29.5.0
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-resolve-dependencies@29.3.1:
|
|
||||||
resolution: {integrity: sha512-Vk0cYq0byRw2WluNmNWGqPeRnZ3p3hHmjJMp2dyyZeYIfiBskwq4rpiuGFR6QGAdbj58WC7HN4hQHjf2mpvrLA==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
jest-regex-util: 29.4.3
|
|
||||||
jest-snapshot: 29.5.0
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-resolve-dependencies@29.5.0:
|
/jest-resolve-dependencies@29.5.0:
|
||||||
resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==}
|
resolution: {integrity: sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==}
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
||||||
@@ -22540,36 +22333,6 @@ packages:
|
|||||||
slash: 3.0.0
|
slash: 3.0.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/jest-resolve@29.3.0:
|
|
||||||
resolution: {integrity: sha512-xH6C6loDlOWEWHdCgioLDlbpmsolNdNsV/UR35ChuK217x0ttHuhyEPdh5wa6CTQ/Eq4OGW2/EZTlh0ay5aojQ==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
chalk: 4.1.2
|
|
||||||
graceful-fs: 4.2.10
|
|
||||||
jest-haste-map: 29.5.0
|
|
||||||
jest-pnp-resolver: 1.2.2(jest-resolve@29.3.0)
|
|
||||||
jest-util: 29.5.0
|
|
||||||
jest-validate: 29.5.0
|
|
||||||
resolve: 1.22.1
|
|
||||||
resolve.exports: 1.1.0
|
|
||||||
slash: 3.0.0
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-resolve@29.3.1:
|
|
||||||
resolution: {integrity: sha512-amXJgH/Ng712w3Uz5gqzFBBjxV8WFLSmNjoreBGMqxgCz5cH7swmBZzgBaCIOsvb0NbpJ0vgaSFdJqMdT+rADw==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
chalk: 4.1.2
|
|
||||||
graceful-fs: 4.2.10
|
|
||||||
jest-haste-map: 29.5.0
|
|
||||||
jest-pnp-resolver: 1.2.2(jest-resolve@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
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-resolve@29.5.0:
|
/jest-resolve@29.5.0:
|
||||||
resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==}
|
resolution: {integrity: sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==}
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
||||||
@@ -22678,64 +22441,6 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/jest-runner@29.3.0:
|
|
||||||
resolution: {integrity: sha512-E/ROzAVj7gy44FvIe+Tbz0xGWG1sa8WLkhUg/hsXHewPC0Z48kqWySdfYRtXkB7RmMn4OcWE+hIBfsRAMVV+sQ==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
'@jest/console': 29.5.0
|
|
||||||
'@jest/environment': 29.5.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
|
|
||||||
emittery: 0.13.1
|
|
||||||
graceful-fs: 4.2.10
|
|
||||||
jest-docblock: 29.4.3
|
|
||||||
jest-environment-node: 29.5.0
|
|
||||||
jest-haste-map: 29.5.0
|
|
||||||
jest-leak-detector: 29.5.0
|
|
||||||
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.5.0
|
|
||||||
p-limit: 3.1.0
|
|
||||||
source-map-support: 0.5.13
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-runner@29.3.1:
|
|
||||||
resolution: {integrity: sha512-oFvcwRNrKMtE6u9+AQPMATxFcTySyKfLhvso7Sdk/rNpbhg4g2GAGCopiInk1OP4q6gz3n6MajW4+fnHWlU3bA==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
'@jest/console': 29.5.0
|
|
||||||
'@jest/environment': 29.5.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
|
|
||||||
emittery: 0.13.1
|
|
||||||
graceful-fs: 4.2.10
|
|
||||||
jest-docblock: 29.4.3
|
|
||||||
jest-environment-node: 29.5.0
|
|
||||||
jest-haste-map: 29.5.0
|
|
||||||
jest-leak-detector: 29.5.0
|
|
||||||
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.5.0
|
|
||||||
p-limit: 3.1.0
|
|
||||||
source-map-support: 0.5.13
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-runner@29.5.0:
|
/jest-runner@29.5.0:
|
||||||
resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==}
|
resolution: {integrity: sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==}
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
||||||
@@ -22865,66 +22570,6 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/jest-runtime@29.3.0:
|
|
||||||
resolution: {integrity: sha512-ufgX/hbpa7MLnjWRW82T5mVF73FBk3W38dGCLPXWtYZ5Zr1ZFh8QnaAtITKJt0p3kGXR8ZqlIjadSiBTk/QJ/A==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
'@jest/environment': 29.5.0
|
|
||||||
'@jest/fake-timers': 29.5.0
|
|
||||||
'@jest/globals': 29.5.0
|
|
||||||
'@jest/source-map': 29.4.3
|
|
||||||
'@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
|
|
||||||
cjs-module-lexer: 1.2.2
|
|
||||||
collect-v8-coverage: 1.0.1
|
|
||||||
glob: 7.2.3
|
|
||||||
graceful-fs: 4.2.10
|
|
||||||
jest-haste-map: 29.5.0
|
|
||||||
jest-message-util: 29.5.0
|
|
||||||
jest-mock: 29.5.0
|
|
||||||
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:
|
|
||||||
- supports-color
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-runtime@29.3.1:
|
|
||||||
resolution: {integrity: sha512-jLzkIxIqXwBEOZx7wx9OO9sxoZmgT2NhmQKzHQm1xwR1kNW/dn0OjxR424VwHHf1SPN6Qwlb5pp1oGCeFTQ62A==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
'@jest/environment': 29.5.0
|
|
||||||
'@jest/fake-timers': 29.5.0
|
|
||||||
'@jest/globals': 29.5.0
|
|
||||||
'@jest/source-map': 29.4.3
|
|
||||||
'@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
|
|
||||||
cjs-module-lexer: 1.2.2
|
|
||||||
collect-v8-coverage: 1.0.1
|
|
||||||
glob: 7.2.3
|
|
||||||
graceful-fs: 4.2.10
|
|
||||||
jest-haste-map: 29.5.0
|
|
||||||
jest-message-util: 29.5.0
|
|
||||||
jest-mock: 29.5.0
|
|
||||||
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:
|
|
||||||
- supports-color
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-runtime@29.5.0:
|
/jest-runtime@29.5.0:
|
||||||
resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==}
|
resolution: {integrity: sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==}
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
||||||
@@ -23056,70 +22701,6 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/jest-snapshot@29.3.0:
|
|
||||||
resolution: {integrity: sha512-+4mX3T8XI3ABbZFzBd/AM74mfwOb6gMpYVFNTc0Cgg2F2fGYvHii8D6jWWka99a3wyNFmni3ov8meEVTF8n13Q==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
'@babel/core': 7.22.1
|
|
||||||
'@babel/generator': 7.22.3
|
|
||||||
'@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.1)
|
|
||||||
'@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.22.1)
|
|
||||||
'@babel/traverse': 7.22.4
|
|
||||||
'@babel/types': 7.22.4
|
|
||||||
'@jest/expect-utils': 29.5.0
|
|
||||||
'@jest/transform': 29.5.0
|
|
||||||
'@jest/types': 29.5.0
|
|
||||||
'@types/babel__traverse': 7.17.1
|
|
||||||
'@types/prettier': 2.6.3
|
|
||||||
babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.1)
|
|
||||||
chalk: 4.1.2
|
|
||||||
expect: 29.5.0
|
|
||||||
graceful-fs: 4.2.10
|
|
||||||
jest-diff: 29.5.0
|
|
||||||
jest-get-type: 29.4.3
|
|
||||||
jest-haste-map: 29.5.0
|
|
||||||
jest-matcher-utils: 29.5.0
|
|
||||||
jest-message-util: 29.5.0
|
|
||||||
jest-util: 29.5.0
|
|
||||||
natural-compare: 1.4.0
|
|
||||||
pretty-format: 29.5.0
|
|
||||||
semver: 7.5.1
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-snapshot@29.3.1:
|
|
||||||
resolution: {integrity: sha512-+3JOc+s28upYLI2OJM4PWRGK9AgpsMs/ekNryUV0yMBClT9B1DF2u2qay8YxcQd338PPYSFNb0lsar1B49sLDA==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
'@babel/core': 7.22.1
|
|
||||||
'@babel/generator': 7.22.3
|
|
||||||
'@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.1)
|
|
||||||
'@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.22.1)
|
|
||||||
'@babel/traverse': 7.22.4
|
|
||||||
'@babel/types': 7.22.4
|
|
||||||
'@jest/expect-utils': 29.5.0
|
|
||||||
'@jest/transform': 29.5.0
|
|
||||||
'@jest/types': 29.5.0
|
|
||||||
'@types/babel__traverse': 7.17.1
|
|
||||||
'@types/prettier': 2.6.3
|
|
||||||
babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.1)
|
|
||||||
chalk: 4.1.2
|
|
||||||
expect: 29.5.0
|
|
||||||
graceful-fs: 4.2.10
|
|
||||||
jest-diff: 29.5.0
|
|
||||||
jest-get-type: 29.4.3
|
|
||||||
jest-haste-map: 29.5.0
|
|
||||||
jest-matcher-utils: 29.5.0
|
|
||||||
jest-message-util: 29.5.0
|
|
||||||
jest-util: 29.5.0
|
|
||||||
natural-compare: 1.4.0
|
|
||||||
pretty-format: 29.5.0
|
|
||||||
semver: 7.5.1
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-snapshot@29.5.0:
|
/jest-snapshot@29.5.0:
|
||||||
resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==}
|
resolution: {integrity: sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==}
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
||||||
@@ -23329,34 +22910,6 @@ packages:
|
|||||||
string-length: 4.0.2
|
string-length: 4.0.2
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/jest-watcher@29.2.2:
|
|
||||||
resolution: {integrity: sha512-j2otfqh7mOvMgN2WlJ0n7gIx9XCMWntheYGlBK7+5g3b1Su13/UAK7pdKGyd4kDlrLwtH2QPvRv5oNIxWvsJ1w==}
|
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
||||||
dependencies:
|
|
||||||
'@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.5.0
|
|
||||||
string-length: 4.0.2
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-watcher@29.3.1:
|
|
||||||
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.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.5.0
|
|
||||||
string-length: 4.0.2
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/jest-watcher@29.5.0:
|
/jest-watcher@29.5.0:
|
||||||
resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==}
|
resolution: {integrity: sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==}
|
||||||
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
||||||
@@ -23721,7 +23274,7 @@ packages:
|
|||||||
whatwg-encoding: 2.0.0
|
whatwg-encoding: 2.0.0
|
||||||
whatwg-mimetype: 3.0.0
|
whatwg-mimetype: 3.0.0
|
||||||
whatwg-url: 10.0.0
|
whatwg-url: 10.0.0
|
||||||
ws: 8.11.0
|
ws: 8.14.1
|
||||||
xml-name-validator: 4.0.0
|
xml-name-validator: 4.0.0
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- bufferutil
|
- bufferutil
|
||||||
@@ -25405,7 +24958,7 @@ packages:
|
|||||||
inquirer: 8.2.4
|
inquirer: 8.2.4
|
||||||
is-node-process: 1.0.1
|
is-node-process: 1.0.1
|
||||||
js-levenshtein: 1.1.6
|
js-levenshtein: 1.1.6
|
||||||
node-fetch: 2.6.7
|
node-fetch: 2.6.9
|
||||||
outvariant: 1.3.0
|
outvariant: 1.3.0
|
||||||
path-to-regexp: 6.2.1
|
path-to-regexp: 6.2.1
|
||||||
statuses: 2.0.1
|
statuses: 2.0.1
|
||||||
@@ -30195,7 +29748,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==}
|
resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==}
|
||||||
requiresBuild: true
|
requiresBuild: true
|
||||||
dev: true
|
dev: true
|
||||||
optional: true
|
|
||||||
|
|
||||||
/stubs@3.0.0:
|
/stubs@3.0.0:
|
||||||
resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==}
|
resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==}
|
||||||
@@ -30363,6 +29915,16 @@ packages:
|
|||||||
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
|
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
|
|
||||||
|
/surrealdb.js@0.9.0:
|
||||||
|
resolution: {integrity: sha512-JV1lSzeSF4GftfxSvrOd0fDAw0AwRTSTsn+smp4BzhVuvcfJH/2zceEMwsMLzQcUao386pq4xk5JKoieayFJqQ==}
|
||||||
|
dependencies:
|
||||||
|
unws: 0.2.4(ws@8.14.1)
|
||||||
|
ws: 8.14.1
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- bufferutil
|
||||||
|
- utf-8-validate
|
||||||
|
dev: false
|
||||||
|
|
||||||
/svelte-check@2.10.1(svelte@3.54.0):
|
/svelte-check@2.10.1(svelte@3.54.0):
|
||||||
resolution: {integrity: sha512-uscZovyuOPA89NuAkc4vO27mzx//2wFBNtwTsgYcNs7JwaFpJ2TqBawQ/avG7gkieYQ3QXqFUggJZ+s51fQGDQ==}
|
resolution: {integrity: sha512-uscZovyuOPA89NuAkc4vO27mzx//2wFBNtwTsgYcNs7JwaFpJ2TqBawQ/avG7gkieYQ3QXqFUggJZ+s51fQGDQ==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
@@ -31806,6 +31368,15 @@ packages:
|
|||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/unws@0.2.4(ws@8.14.1):
|
||||||
|
resolution: {integrity: sha512-/N1ajiqrSp0A/26/LBg7r10fOcPtGXCqJRJ61sijUFoGZMr6ESWGYn7i0cwr7fR7eEECY5HsitqtjGHDZLAu2w==}
|
||||||
|
engines: {node: '>=16.14.0'}
|
||||||
|
peerDependencies:
|
||||||
|
ws: '*'
|
||||||
|
dependencies:
|
||||||
|
ws: 8.14.1
|
||||||
|
dev: false
|
||||||
|
|
||||||
/unzipper@0.10.11:
|
/unzipper@0.10.11:
|
||||||
resolution: {integrity: sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==}
|
resolution: {integrity: sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -32483,7 +32054,7 @@ packages:
|
|||||||
spdy: 4.0.2
|
spdy: 4.0.2
|
||||||
webpack: 5.75.0
|
webpack: 5.75.0
|
||||||
webpack-dev-middleware: 5.3.3(webpack@5.75.0)
|
webpack-dev-middleware: 5.3.3(webpack@5.75.0)
|
||||||
ws: 8.11.0
|
ws: 8.14.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- bufferutil
|
- bufferutil
|
||||||
- debug
|
- debug
|
||||||
@@ -32827,18 +32398,17 @@ packages:
|
|||||||
utf-8-validate:
|
utf-8-validate:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
/ws@8.11.0:
|
/ws@8.14.1:
|
||||||
resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==}
|
resolution: {integrity: sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==}
|
||||||
engines: {node: '>=10.0.0'}
|
engines: {node: '>=10.0.0'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
bufferutil: ^4.0.1
|
bufferutil: ^4.0.1
|
||||||
utf-8-validate: ^5.0.2
|
utf-8-validate: '>=5.0.2'
|
||||||
peerDependenciesMeta:
|
peerDependenciesMeta:
|
||||||
bufferutil:
|
bufferutil:
|
||||||
optional: true
|
optional: true
|
||||||
utf-8-validate:
|
utf-8-validate:
|
||||||
optional: true
|
optional: true
|
||||||
dev: true
|
|
||||||
|
|
||||||
/xdg-basedir@4.0.0:
|
/xdg-basedir@4.0.0:
|
||||||
resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==}
|
resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==}
|
||||||
|
|||||||
@@ -60,11 +60,12 @@
|
|||||||
"@auth/prisma-adapter#build",
|
"@auth/prisma-adapter#build",
|
||||||
"@auth/solid-start#build",
|
"@auth/solid-start#build",
|
||||||
"@auth/sveltekit#build",
|
"@auth/sveltekit#build",
|
||||||
|
"@auth/azure-tables-adapter#build",
|
||||||
"@auth/d1-adapter#build",
|
"@auth/d1-adapter#build",
|
||||||
|
"@auth/edgedb-adapter#build",
|
||||||
"@auth/dgraph-adapter#build",
|
"@auth/dgraph-adapter#build",
|
||||||
"@auth/drizzle-adapter#build",
|
"@auth/drizzle-adapter#build",
|
||||||
"@auth/dynamodb-adapter#build",
|
"@auth/dynamodb-adapter#build",
|
||||||
"@auth/edgedb-adapter#build",
|
|
||||||
"@auth/fauna-adapter#build",
|
"@auth/fauna-adapter#build",
|
||||||
"@auth/firebase-adapter#build",
|
"@auth/firebase-adapter#build",
|
||||||
"@auth/kysely-adapter#build",
|
"@auth/kysely-adapter#build",
|
||||||
@@ -75,6 +76,7 @@
|
|||||||
"@auth/pouchdb-adapter#build",
|
"@auth/pouchdb-adapter#build",
|
||||||
"@auth/sequelize-adapter#build",
|
"@auth/sequelize-adapter#build",
|
||||||
"@auth/supabase-adapter#build",
|
"@auth/supabase-adapter#build",
|
||||||
|
"@auth/surrealdb-adapter#build",
|
||||||
"@auth/typeorm-adapter#build",
|
"@auth/typeorm-adapter#build",
|
||||||
"@auth/upstash-redis-adapter#build",
|
"@auth/upstash-redis-adapter#build",
|
||||||
"@auth/xata-adapter#build",
|
"@auth/xata-adapter#build",
|
||||||
@@ -88,6 +90,9 @@
|
|||||||
"@auth/prisma-adapter#build",
|
"@auth/prisma-adapter#build",
|
||||||
"@auth/solid-start#build",
|
"@auth/solid-start#build",
|
||||||
"@auth/sveltekit#build",
|
"@auth/sveltekit#build",
|
||||||
|
"@auth/azure-tables-adapter#build",
|
||||||
|
"@auth/d1-adapter#build",
|
||||||
|
"@auth/edgedb-adapter#build",
|
||||||
"@auth/dgraph-adapter#build",
|
"@auth/dgraph-adapter#build",
|
||||||
"@auth/drizzle-adapter#build",
|
"@auth/drizzle-adapter#build",
|
||||||
"@auth/dynamodb-adapter#build",
|
"@auth/dynamodb-adapter#build",
|
||||||
@@ -97,9 +102,11 @@
|
|||||||
"@auth/mikro-orm-adapter#build",
|
"@auth/mikro-orm-adapter#build",
|
||||||
"@auth/mongodb-adapter#build",
|
"@auth/mongodb-adapter#build",
|
||||||
"@auth/neo4j-adapter#build",
|
"@auth/neo4j-adapter#build",
|
||||||
|
"@auth/pg-adapter#build",
|
||||||
"@auth/pouchdb-adapter#build",
|
"@auth/pouchdb-adapter#build",
|
||||||
"@auth/sequelize-adapter#build",
|
"@auth/sequelize-adapter#build",
|
||||||
"@auth/supabase-adapter#build",
|
"@auth/supabase-adapter#build",
|
||||||
|
"@auth/surrealdb-adapter#build",
|
||||||
"@auth/typeorm-adapter#build",
|
"@auth/typeorm-adapter#build",
|
||||||
"@auth/upstash-redis-adapter#build",
|
"@auth/upstash-redis-adapter#build",
|
||||||
"@auth/xata-adapter#build",
|
"@auth/xata-adapter#build",
|
||||||
|
|||||||
Reference in New Issue
Block a user