From 50fb11ba094c486b5b40c36f24d7d231d95b2d4b Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Tue, 6 Jul 2021 15:39:20 -0500 Subject: [PATCH 01/52] feat(engine-core): add transaction capability --- src/packages/engine-core/src/BinaryEngine.ts | 89 ++++++++++----- src/packages/engine-core/src/Connection.ts | 107 ++++++++++++++++++ src/packages/engine-core/src/Engine.ts | 23 ++-- src/packages/engine-core/src/LibraryEngine.ts | 14 ++- .../src/definitions/Transaction.d.ts | 8 ++ src/packages/engine-core/src/undici.ts | 71 ------------ src/pnpm-lock.yaml | 36 +++--- 7 files changed, 217 insertions(+), 131 deletions(-) create mode 100644 src/packages/engine-core/src/Connection.ts create mode 100644 src/packages/engine-core/src/definitions/Transaction.d.ts delete mode 100644 src/packages/engine-core/src/undici.ts diff --git a/src/packages/engine-core/src/BinaryEngine.ts b/src/packages/engine-core/src/BinaryEngine.ts index 0e0dd960c9d8..7eb9043e5acb 100644 --- a/src/packages/engine-core/src/BinaryEngine.ts +++ b/src/packages/engine-core/src/BinaryEngine.ts @@ -40,8 +40,9 @@ import { } from './log' import { omit } from './omit' import { printGeneratorConfig } from './printGeneratorConfig' -import { Undici } from './undici' +import { Connection } from './Connection' import { fixBinaryTargets, getRandomString, plusX } from './util' +import type * as Tx from './definitions/Transaction' const debug = Debug('prisma:engine') const exists = promisify(fs.exists) @@ -73,7 +74,7 @@ const socketPaths: string[] = [] const MAX_STARTS = process.env.PRISMA_CLIENT_NO_RETRY ? 1 : 2 const MAX_REQUEST_RETRIES = process.env.PRISMA_CLIENT_NO_RETRY ? 1 : 2 -export class BinaryEngine implements Engine { +export class BinaryEngine extends Engine { private logEmitter: EventEmitter private showColors: boolean private logQueries: boolean @@ -108,11 +109,11 @@ export class BinaryEngine implements Engine { private generator?: GeneratorConfig private incorrectlyPinnedBinaryTarget?: string private datasources?: DatasourceOverwrite[] - private startPromise?: Promise + private startPromise?: Promise private versionPromise?: Promise private engineStartDeferred?: Deferred private engineStopDeferred?: StopDeferred - private undici?: Undici + private connection: Connection private lastQuery?: string private lastVersion?: string private lastActiveProvider?: ConnectorType @@ -141,6 +142,8 @@ export class BinaryEngine implements Engine { useUds, activeProvider, }: EngineConfig) { + super() + this.dirname = dirname this.useUds = useUds ?? false // === undefined ? process.platform !== 'win32' : useUds this.env = env @@ -162,6 +165,8 @@ export class BinaryEngine implements Engine { this.flags = flags ?? [] this.previewFeatures = previewFeatures ?? [] this.activeProvider = activeProvider + this.connection = new Connection() + initHooks() const removedFlags = [ 'middlewares', @@ -506,11 +511,24 @@ ${chalk.dim("In case we're mistaken, please report this to us 🙏.")}`) * Starts the engine, returns the url that it runs on */ async start(): Promise { - // eslint-disable-next-line @typescript-eslint/no-misused-promises + if (this.stopPromise) { + await this.stopPromise + } + if (!this.startPromise) { this.startCount++ this.startPromise = this.internalStart() } + + await this.startPromise + + if (!this.child && !this.engineEndpoint) { + throw new PrismaClientUnknownRequestError( + `Can't perform request, as the Engine has already been stopped`, + this.clientVersion!, + ) + } + return this.startPromise } @@ -552,7 +570,7 @@ ${chalk.dim("In case we're mistaken, please report this to us 🙏.")}`) } if (this.engineEndpoint) { try { - await pRetry(() => this.undici!.status(), { + await pRetry(() => this.connection.get('/'), { retries: 10, }) } catch (e) { @@ -642,11 +660,11 @@ ${chalk.dim("In case we're mistaken, please report this to us 🙏.")}`) json.fields?.message?.startsWith('Started http server') ) { if (this.useUds) { - this.undici = new Undici('http://localhost', { + this.connection.open('http://localhost', { socketPath: this.socketPath, }) } else { - this.undici = new Undici(`http://localhost:${this.port}`) + this.connection.open(`http://localhost:${this.port}`) } this.engineStartDeferred.resolve() this.engineStartDeferred = undefined @@ -679,7 +697,7 @@ ${chalk.dim("In case we're mistaken, please report this to us 🙏.")}`) this.engineStopDeferred.resolve(code) return } - this.undici?.close() + this.connection.close() // don't error in restarts if (code !== 0 && this.engineStartDeferred && this.startCount === 1) { @@ -739,7 +757,7 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. }) this.child.on('close', (code, signal): void => { - this.undici?.close() + this.connection.close() if (code === null && signal === 'SIGABRT' && this.child) { const error = new PrismaClientRustPanicError( this.getErrorMessageWithLink( @@ -849,7 +867,7 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. stopChildPromise = new Promise((resolve, reject) => { this.engineStopDeferred = { resolve, reject } }) - this.undici?.close() + this.connection.close() this.child?.kill() this.child = undefined } @@ -865,7 +883,7 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. this.getConfigPromise = undefined this.globalKillSignalReceived = signal this.child?.kill() - this.undici?.close() + this.connection.close() } /** @@ -934,19 +952,10 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. headers: Record, numTry = 1, ): Promise { - if (this.stopPromise) { - await this.stopPromise - } await this.start() - if (!this.child && !this.engineEndpoint) { - throw new PrismaClientUnknownRequestError( - `Can't perform request, as the Engine has already been stopped`, - this.clientVersion!, - ) - } - - this.currentRequestPromise = this.undici!.request( + this.currentRequestPromise = this.connection.post( + '/', stringifyQuery(query), headers, ) @@ -999,13 +1008,6 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. ): Promise { await this.start() - if (!this.child && !this.engineEndpoint) { - throw new PrismaClientUnknownRequestError( - `Can't perform request, as the Engine has already been stopped`, - this.clientVersion!, - ) - } - const variables = {} const body = { batch: queries.map((query) => ({ query, variables })), @@ -1014,7 +1016,7 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. const stringifiedQuery = JSON.stringify(body) - this.currentRequestPromise = this.undici!.request(stringifiedQuery) + this.currentRequestPromise = this.connection.post('/', stringifiedQuery) this.lastQuery = stringifiedQuery @@ -1053,6 +1055,31 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. }) } + async transaction(action: 'start', options?: Tx.Options): Promise + async transaction(action: 'commit', id: number): Promise + async transaction(action: 'rollback', id: number): Promise + async transaction(action: any, arg?: any) { + await this.start() + + if (action === 'start') { + const stringifiedOptions = JSON.stringify({ + max_wait: arg?.maxWait ?? 2000, // default + timeout: arg?.maxWait ?? 5000, // default + }) + + const res = await this.connection.post( + '/transaction/start', + stringifiedOptions, + ) + + return res.data + } else if (action === 'commit') { + await this.connection.post(`/transaction/${arg}/commit`) + } else if (action === 'rollback') { + await this.connection.post(`/transaction/${arg}/rollback`) + } + } + private get hasMaxRestarts() { return this.startCount >= MAX_STARTS } diff --git a/src/packages/engine-core/src/Connection.ts b/src/packages/engine-core/src/Connection.ts new file mode 100644 index 000000000000..53443fe67ec9 --- /dev/null +++ b/src/packages/engine-core/src/Connection.ts @@ -0,0 +1,107 @@ +import getStream = require('get-stream') +import { Client, Pool } from 'undici' +import { URL } from 'url' + +/** + * Assertion function to make sure that we have a pool + * @param pool + */ +function assertHasPool(pool: A): asserts pool is NonNullable { + if (pool === undefined) { + throw new Error('Connection has not been opened') + } +} + +/** + * Open an HTTP connection pool + */ +export class Connection { + private _pool: Pool | undefined + + constructor() {} + + open(url: string | URL, options?: Pool.Options) { + if (this._pool) return + + this._pool = new Pool(url, { + connections: 100, + pipelining: 10, + keepAliveMaxTimeout: 600e3, + headersTimeout: 0, + ...options, + }) + } + + /** + * Perform a request + * @param method + * @param endpoint + * @param headers + * @param body + * @returns + */ + async raw( + method: 'POST' | 'GET', + endpoint: string, + headers?: Client.DispatchOptions['headers'], + body?: Client.DispatchOptions['body'], + ) { + assertHasPool(this._pool) + + const res = await this._pool.request({ + path: endpoint, + method: method, + headers: { + 'Content-Type': 'application/json', + ...headers, + }, + body, + bodyTimeout: 0, + }) + + return { + statusCode: res.statusCode, + headers: res.headers, + data: JSON.parse(await getStream(res.body)) as R, + } + } + + /** + * Perform a POST request + * @param endpoint + * @param body + * @param headers + * @returns + */ + post( + endpoint: string, + body?: Client.DispatchOptions['body'], + headers?: Client.DispatchOptions['headers'], + ) { + return this.raw('POST', endpoint, headers, body) + } + + /** + * Perform a GET request + * @param endpoint + * @param body + * @param headers + * @returns + */ + get(path: string, headers?: Client.DispatchOptions['headers']) { + return this.raw('GET', path, headers) + } + + /** + * Close the connections + */ + close() { + if (this._pool) { + this._pool.close(() => { + // ignore close errors + }) + } + + this._pool = undefined + } +} diff --git a/src/packages/engine-core/src/Engine.ts b/src/packages/engine-core/src/Engine.ts index 31d9f8622db1..39c62262810c 100644 --- a/src/packages/engine-core/src/Engine.ts +++ b/src/packages/engine-core/src/Engine.ts @@ -1,25 +1,30 @@ import { DataSource, GeneratorConfig } from '@prisma/generator-helper' +import type * as Tx from './definitions/Transaction' export interface FilterConstructor { new (config: EngineConfig): Engine } -// TODO Make in to abstract class -export interface Engine { - on(event: EngineEventType, listener: (args?: any) => any): void - start(): Promise - stop(): Promise - getConfig(): Promise - version(forceRun?: boolean): Promise | string - request( + +// TODO Move shared logic in here +export abstract class Engine { + abstract on(event: EngineEventType, listener: (args?: any) => any): void + abstract start(): Promise + abstract stop(): Promise + abstract getConfig(): Promise + abstract version(forceRun?: boolean): Promise | string + abstract request( query: string, headers: Record, numTry: number, ): Promise<{ data: T; elapsed: number }> - requestBatch( + abstract requestBatch( queries: string[], transaction?: boolean, numTry?: number, ): Promise<{ data: T; elapsed: number }> + abstract transaction(action: 'start', options?: Tx.Options): Promise + abstract transaction(action: 'commit', id: number): Promise + abstract transaction(action: 'rollback', id: number): Promise } export type EngineEventType = 'query' | 'info' | 'warn' | 'error' | 'beforeExit' diff --git a/src/packages/engine-core/src/LibraryEngine.ts b/src/packages/engine-core/src/LibraryEngine.ts index 4dd425289570..f642a8b32a0a 100644 --- a/src/packages/engine-core/src/LibraryEngine.ts +++ b/src/packages/engine-core/src/LibraryEngine.ts @@ -11,7 +11,7 @@ import chalk from 'chalk' import EventEmitter from 'events' import fs from 'fs' import path from 'path' -import type { +import { DatasourceOverwrite, Engine, EngineConfig, @@ -42,6 +42,7 @@ import { } from './NodeAPILibraryTypes' import { printGeneratorConfig } from './printGeneratorConfig' import { fixBinaryTargets } from './util' +import type * as Tx from './definitions/Transaction' const debug = Debug('prisma:client:napi') @@ -53,7 +54,7 @@ function isPanicEvent(event: QueryEngineEvent): event is QueryEnginePanicEvent { } const knownPlatforms: Platform[] = [...platforms, 'native'] -export class LibraryEngine implements Engine { +export class LibraryEngine extends Engine { private engine?: QueryEngine private libraryInstantiationPromise?: Promise private libraryStartingPromise?: Promise @@ -80,6 +81,8 @@ export class LibraryEngine implements Engine { } constructor(config: EngineConfig) { + super() + this.datamodel = fs.readFileSync(config.datamodelPath, 'utf-8') this.config = config this.libraryStarted = false @@ -100,6 +103,13 @@ export class LibraryEngine implements Engine { initHooks(this) } + async transaction(action: 'start', options?: Tx.Options): Promise + async transaction(action: 'commit', id: number): Promise + async transaction(action: 'rollback', id: number): Promise + async transaction(action: any, id?: any) { + return (await Promise.resolve()) as any + } + private async instantiateLibrary(): Promise { debug('internalSetup') if (this.libraryInstantiationPromise) { diff --git a/src/packages/engine-core/src/definitions/Transaction.d.ts b/src/packages/engine-core/src/definitions/Transaction.d.ts new file mode 100644 index 000000000000..12dea2f28b7a --- /dev/null +++ b/src/packages/engine-core/src/definitions/Transaction.d.ts @@ -0,0 +1,8 @@ +export type Options = { + maxWait?: number + timeout?: number +} + +export type Info = { + id: string +} diff --git a/src/packages/engine-core/src/undici.ts b/src/packages/engine-core/src/undici.ts deleted file mode 100644 index 8382b86b8e95..000000000000 --- a/src/packages/engine-core/src/undici.ts +++ /dev/null @@ -1,71 +0,0 @@ -import getStream = require('get-stream') -import { Client, Pool } from 'undici' -import { URL } from 'url' -export class Undici { - private pool: Pool - private closed = false - constructor(url: string | URL, moreArgs?: Pool.Options) { - this.pool = new Pool(url, { - connections: 100, - pipelining: 10, - keepAliveMaxTimeout: 600e3, - headersTimeout: 0, - ...moreArgs, - }) - } - request( - body: Client.DispatchOptions['body'], - customHeaders?: Record, - ) { - return new Promise((resolve, reject) => { - this.pool.request( - { - path: '/', - method: 'POST', - headers: { - 'Content-Type': 'application/json', - ...customHeaders, - }, - body, - bodyTimeout: 0, - }, - async (err, result) => { - if (err) { - reject(err) - } else { - const { statusCode, headers, body } = result - const data = JSON.parse(await getStream(body)) - resolve({ statusCode, headers, data }) - } - }, - ) - }) - } - status() { - return new Promise((resolve, reject) => { - this.pool.request( - { - path: '/', - method: 'GET', - }, - async (err, result) => { - if (err) { - reject(err) - } else { - const { statusCode, headers, body } = result - const data = JSON.parse(await getStream(body)) - resolve({ statusCode, headers, data }) - } - }, - ) - }) - } - close() { - if (!this.closed) { - this.pool.close(() => { - // ignore close error - }) - } - this.closed = true - } -} diff --git a/src/pnpm-lock.yaml b/src/pnpm-lock.yaml index 49afbb6b860c..f0f3b5ccf1f4 100644 --- a/src/pnpm-lock.yaml +++ b/src/pnpm-lock.yaml @@ -1519,8 +1519,8 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/debug/2.27.0-dev.28: - resolution: {integrity: sha512-Ix6vfVJPYSRcE/C6JyZBwoF8DrMvS3sbl2CCMwIO0DslJKz3dPeobMJ+Mf4IoFA0+a5OIYsyZFE1h4Ut8sr5rg==} + /@prisma/debug/2.27.0-dev.29: + resolution: {integrity: sha512-3OHjzZrqlr0A+3Et2gkToT/NLsZAWnyhatzzXBj20ny5y/w+/00iMYdjpcSLG740nFVZ7UdATgcq9z7bzbyycA==} dependencies: debug: 4.3.2 ms: 2.1.3 @@ -1528,12 +1528,12 @@ packages: - supports-color dev: true - /@prisma/engine-core/2.27.0-dev.28: - resolution: {integrity: sha512-u2HIV7AsSxNSYbR72tnwCRaR4/HME2NeZFZJ7r4jbXKcwB4GXr5gzDs0UNFb+YGU4V1v/gxQAugreBFqYmHbrQ==} + /@prisma/engine-core/2.27.0-dev.29: + resolution: {integrity: sha512-7LJK9YYTAqTT1gMQg8hJPfEBuObsb6Mq3Vta3lzhJN6T7i0meoflWn5t2+9zfq62B7ath1sFVT5qDimKGEe4XA==} dependencies: - '@prisma/debug': 2.27.0-dev.28 + '@prisma/debug': 2.27.0-dev.29 '@prisma/engines': 2.27.0-24.0c2898954d761d1c92f304ff1b7917c601c2e3d8 - '@prisma/generator-helper': 2.27.0-dev.28 + '@prisma/generator-helper': 2.27.0-dev.29 '@prisma/get-platform': 2.27.0-24.0c2898954d761d1c92f304ff1b7917c601c2e3d8 chalk: 4.1.1 execa: 5.1.1 @@ -1577,10 +1577,10 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/generator-helper/2.27.0-dev.28: - resolution: {integrity: sha512-Q7Tu2JMX5ceRAoCMb/Rk8wjLBzLV6ORQ9p+JWvqZmqGVCl8+JYRYeNZJlh1tZGiw6SLjuG3BsR2ik4lUKaiNmQ==} + /@prisma/generator-helper/2.27.0-dev.29: + resolution: {integrity: sha512-QUsYQQEptSaSkoYCRQaPcz4wvHqcusPXiNhPUuLFD0RwDicnE8MuU7H1lgi8wFR8mWOtywxUjo8j8zRSqAL1mw==} dependencies: - '@prisma/debug': 2.27.0-dev.28 + '@prisma/debug': 2.27.0-dev.29 '@types/cross-spawn': 6.0.2 chalk: 4.1.1 cross-spawn: 7.0.3 @@ -1595,14 +1595,14 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/sdk/2.27.0-dev.28: - resolution: {integrity: sha512-tSLJntwMa+VQnq+v73T14fyecz3XHyLavi6+OFzJP/kSwgoT+rxd3Fpy/kZxkdEewvs+FX3L8SgbHwjDZLIEMw==} + /@prisma/sdk/2.27.0-dev.29: + resolution: {integrity: sha512-iEtVthjNeM6WQFJ94EMiYo0UwOxymdaaYjDhsAs0+ppClvQh0ROs9CoGUJSamvsT7PQaPCevKKIU+To4c1yY6A==} dependencies: - '@prisma/debug': 2.27.0-dev.28 - '@prisma/engine-core': 2.27.0-dev.28 + '@prisma/debug': 2.27.0-dev.29 + '@prisma/engine-core': 2.27.0-dev.29 '@prisma/engines': 2.27.0-24.0c2898954d761d1c92f304ff1b7917c601c2e3d8 '@prisma/fetch-engine': 2.27.0-24.0c2898954d761d1c92f304ff1b7917c601c2e3d8 - '@prisma/generator-helper': 2.27.0-dev.28 + '@prisma/generator-helper': 2.27.0-dev.29 '@prisma/get-platform': 2.27.0-24.0c2898954d761d1c92f304ff1b7917c601c2e3d8 '@timsuchanek/copy': 1.4.5 archiver: 4.0.2 @@ -1637,7 +1637,7 @@ packages: - supports-color dev: true - /@prisma/studio-pcw/0.409.0_bb47cadc8135e4f107589ebc47297a2d: + /@prisma/studio-pcw/0.409.0_dd6baa82c688b4069fb9fbe3336119f7: resolution: {integrity: sha512-uvYbUTipCagfNlohuUxrcdLR3zfXtFxcKQ0c4xi6e7rD9ROrqxfDou/90z123vzjlqEAN0SLCa4QIcnxLP1EJA==} peerDependencies: '@prisma/client': '*' @@ -1645,7 +1645,7 @@ packages: '@prisma/sdk': '*' dependencies: '@prisma/get-platform': 2.27.0-24.0c2898954d761d1c92f304ff1b7917c601c2e3d8 - '@prisma/sdk': 2.27.0-dev.28 + '@prisma/sdk': 2.27.0-dev.29 debug: 4.3.1 lodash: 4.17.21 transitivePeerDependencies: @@ -1655,8 +1655,8 @@ packages: /@prisma/studio-server/0.409.0_88330d0c5316413595bc61a1d0da9762: resolution: {integrity: sha512-d1O5z/Ah29JBvr0xApqWgyFG4eiYWycAX0qhKtrASwnKTuHgXCI4eGoRULEVVtwT8ssG9CKhthzJH0+SukVFZg==} dependencies: - '@prisma/sdk': 2.27.0-dev.28 - '@prisma/studio-pcw': 0.409.0_bb47cadc8135e4f107589ebc47297a2d + '@prisma/sdk': 2.27.0-dev.29 + '@prisma/studio-pcw': 0.409.0_dd6baa82c688b4069fb9fbe3336119f7 '@prisma/studio-transports': 0.409.0 '@sentry/node': 6.2.5 checkpoint-client: 1.1.20 From ee9d2674c487f85c18aa451dc85b900d7db2c61a Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Tue, 6 Jul 2021 17:36:31 -0500 Subject: [PATCH 02/52] chore(client): implement scheduler --- src/packages/client/src/runtime/Scheduler.ts | 77 ++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 src/packages/client/src/runtime/Scheduler.ts diff --git a/src/packages/client/src/runtime/Scheduler.ts b/src/packages/client/src/runtime/Scheduler.ts new file mode 100644 index 000000000000..c6b56f0fd3d7 --- /dev/null +++ b/src/packages/client/src/runtime/Scheduler.ts @@ -0,0 +1,77 @@ +/* eslint-disable no-async-promise-executor */ +type Task = () => R + +/** + * Generate a random taskId + * @returns taskId + */ +function getTaskId() { + return Math.floor(Math.random() * Date.now()).toString() +} + +/** + * Execute [[Task]]s one after another + */ +class Scheduler { + private _results: { [id: string]: Promise } + + constructor() { + this._results = {} + } + + /** + * Queue a [[Task]] to be executed + * @param task to execute + * @returns taskId + */ + queue(task: Task): string { + const taskId = getTaskId() // unique task id for management + + // this promise ensures that thing execute one after another + this._results[taskId] = new Promise(async (resolve, reject) => { + const taskIds = Object.keys(this._results) + + if (taskIds.length > 0) { + // if we have a promise before us, we make sure to wait + await this._results[taskIds[taskIds.length - 1]] + } + + // this way, we are effectively pipelining our execution + try { + resolve(task()) + } catch (e) { + reject(e) + } + }) + + return taskId + } + + /** + * Wait for a [[Task]] to execute + * @param taskId taskId from [[queue]] + * @returns task return value + */ + async wait(taskId: string): Promise { + const result = await this._results[taskId] + + // a result can only be retrieved once + delete this._results[taskId] + + return result + } + + /** + * Queue and wait for task + * @param task to execute + * @returns task return value + */ + async exec(task: Task): Promise { + const taskId = this.queue(task) + const result = await this.wait(taskId) + + return result as R + } +} + +export { Scheduler } From a8aad771e1702c16e82717b6a5d0bf66f000997c Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Tue, 6 Jul 2021 21:09:27 -0500 Subject: [PATCH 03/52] chore(client): implement $transaction async --- .../client/src/runtime/getPrismaClient.ts | 103 +++++++++++++++++- src/packages/engine-core/src/BinaryEngine.ts | 4 +- src/packages/engine-core/src/Engine.ts | 4 +- src/packages/engine-core/src/LibraryEngine.ts | 4 +- .../{Transaction.d.ts => Transaction.ts} | 0 5 files changed, 104 insertions(+), 11 deletions(-) rename src/packages/engine-core/src/definitions/{Transaction.d.ts => Transaction.ts} (100%) diff --git a/src/packages/client/src/runtime/getPrismaClient.ts b/src/packages/client/src/runtime/getPrismaClient.ts index 7df6dd4aa989..10e3bdf2459d 100644 --- a/src/packages/client/src/runtime/getPrismaClient.ts +++ b/src/packages/client/src/runtime/getPrismaClient.ts @@ -43,6 +43,7 @@ import { } from './utils/rejectOnNotFound' import { serializeRawParameters } from './utils/serializeRawParameters' import { validatePrismaClientOptions } from './utils/validatePrismaClientOptions' +import { Scheduler } from './Scheduler' const debug = Debug('prisma:client') const ALTER_RE = /^(\s*alter\s)/i @@ -282,10 +283,13 @@ export function getPrismaClient(config: GetPrismaClientOptions): any { private _activeProvider: string private _transactionId = 1 private _rejectOnNotFound?: InstanceRejectOnNotFound + private _transactionScheduler: Scheduler + constructor(optionsArg?: PrismaClientOptions) { if (optionsArg) { validatePrismaClientOptions(optionsArg, config.datasourceNames) } + this._transactionScheduler = new Scheduler() this._rejectOnNotFound = optionsArg?.rejectOnNotFound this._clientVersion = config.clientVersion ?? clientVersion this._activeProvider = config.activeProvider @@ -859,11 +863,17 @@ new PrismaClient({ }) } - private getTransactionId() { + /** + * @deprecated + */ + private ___getTransactionId() { return this._transactionId++ } - private async $transactionInternal(promises: Array): Promise { + /** + * @deprecated + */ + private async $___transactionInternal(promises: Array): Promise { for (const p of promises) { if (!p) { throw new Error( @@ -882,7 +892,7 @@ new PrismaClient({ } } - const transactionId = this.getTransactionId() + const transactionId = this.___getTransactionId() const requests = await Promise.all( promises.map((p) => { @@ -907,15 +917,98 @@ new PrismaClient({ ) } - async $transaction(promises: Array): Promise { + /** + * @deprecated + */ + async $___transaction(promises: Array): Promise { try { - return this.$transactionInternal(promises) + return this.$___transactionInternal(promises) } catch (e) { e.clientVersion = this._clientVersion throw e } } + /** + * Execute queries within a transaction + * @param input a callback or a query list + * @param options to set timeouts + * @returns + */ + async $transaction(input: any, options?: any) { + try { + return this._transaction(input, options) + } catch (e) { + e.clientVersion = this._clientVersion + + throw e + } + } + + /** + * Decide upon which transaction logic to use + * @param input + * @param options + * @returns + */ + private async _transaction(input: any, options?: any) { + if (typeof input === 'function') { + return this._transactionWithCallback(input, options) + } + + return this._transactionWithRequests(input, options) + } + + /** + * Perform a long-running transaction + * @param callback + * @param options + * @returns + */ + private async _transactionWithCallback( + callback: (client: NewPrismaClient) => Promise, + options?: { maxWait: number; timeout: number }, + ) { + // transactions are inlined through their scheduler + return this._transactionScheduler.exec(async () => { + // we ask the query engine to open a transaction + const info = await this._engine.transaction('start', options) + + let result: unknown + try { + result = await callback(this) // execute logic + + // it went well then we commit the transaction + await this._engine.transaction('commit', info) + } catch (e) { + // it went bad then we rollback the transaction + await this._engine.transaction('rollback', info) + + throw e + } + + return result + }) + } + + /** + * Execute a batch of requests in a LRT + * @param requests + * @param options + */ + private async _transactionWithRequests( + requests: Array, + options?: { maxWait: number; timeout: number }, + ) { + return this._transactionWithCallback(async () => { + // we execute all of the requests one by one + for (const request of requests) await request + + // we return the result of the last request + return requests[requests.length - 1] + }, options) + } + /** * Runs the middlewares over params before executing a request * @param internalParams diff --git a/src/packages/engine-core/src/BinaryEngine.ts b/src/packages/engine-core/src/BinaryEngine.ts index 7eb9043e5acb..0ceae0b56580 100644 --- a/src/packages/engine-core/src/BinaryEngine.ts +++ b/src/packages/engine-core/src/BinaryEngine.ts @@ -1056,8 +1056,8 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. } async transaction(action: 'start', options?: Tx.Options): Promise - async transaction(action: 'commit', id: number): Promise - async transaction(action: 'rollback', id: number): Promise + async transaction(action: 'commit', info: Tx.Info): Promise + async transaction(action: 'rollback', info: Tx.Info): Promise async transaction(action: any, arg?: any) { await this.start() diff --git a/src/packages/engine-core/src/Engine.ts b/src/packages/engine-core/src/Engine.ts index 39c62262810c..1350929e58a7 100644 --- a/src/packages/engine-core/src/Engine.ts +++ b/src/packages/engine-core/src/Engine.ts @@ -23,8 +23,8 @@ export abstract class Engine { numTry?: number, ): Promise<{ data: T; elapsed: number }> abstract transaction(action: 'start', options?: Tx.Options): Promise - abstract transaction(action: 'commit', id: number): Promise - abstract transaction(action: 'rollback', id: number): Promise + abstract transaction(action: 'commit', info: Tx.Info): Promise + abstract transaction(action: 'rollback', info: Tx.Info): Promise } export type EngineEventType = 'query' | 'info' | 'warn' | 'error' | 'beforeExit' diff --git a/src/packages/engine-core/src/LibraryEngine.ts b/src/packages/engine-core/src/LibraryEngine.ts index f642a8b32a0a..d9a2fdf20590 100644 --- a/src/packages/engine-core/src/LibraryEngine.ts +++ b/src/packages/engine-core/src/LibraryEngine.ts @@ -104,8 +104,8 @@ export class LibraryEngine extends Engine { } async transaction(action: 'start', options?: Tx.Options): Promise - async transaction(action: 'commit', id: number): Promise - async transaction(action: 'rollback', id: number): Promise + async transaction(action: 'commit', info: Tx.Info): Promise + async transaction(action: 'rollback', info: Tx.Info): Promise async transaction(action: any, id?: any) { return (await Promise.resolve()) as any } diff --git a/src/packages/engine-core/src/definitions/Transaction.d.ts b/src/packages/engine-core/src/definitions/Transaction.ts similarity index 100% rename from src/packages/engine-core/src/definitions/Transaction.d.ts rename to src/packages/engine-core/src/definitions/Transaction.ts From d463d3f00003c567d8c818dac16872c672bb3937 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Wed, 7 Jul 2021 16:24:56 -0500 Subject: [PATCH 04/52] chore(client): guard lrt functionality --- .../client/src/runtime/getPrismaClient.ts | 12 ++- src/pnpm-lock.yaml | 83 ++++++++++++++----- 2 files changed, 68 insertions(+), 27 deletions(-) diff --git a/src/packages/client/src/runtime/getPrismaClient.ts b/src/packages/client/src/runtime/getPrismaClient.ts index 10e3bdf2459d..5b77767c4fbe 100644 --- a/src/packages/client/src/runtime/getPrismaClient.ts +++ b/src/packages/client/src/runtime/getPrismaClient.ts @@ -935,7 +935,11 @@ new PrismaClient({ * @param options to set timeouts * @returns */ - async $transaction(input: any, options?: any) { + $transaction(input: any, options?: any) { + if (!process.env.PRISMA_FORCE_LRT) { + return this.$___transaction(input) + } + try { return this._transaction(input, options) } catch (e) { @@ -951,7 +955,7 @@ new PrismaClient({ * @param options * @returns */ - private async _transaction(input: any, options?: any) { + private _transaction(input: any, options?: any) { if (typeof input === 'function') { return this._transactionWithCallback(input, options) } @@ -965,7 +969,7 @@ new PrismaClient({ * @param options * @returns */ - private async _transactionWithCallback( + private _transactionWithCallback( callback: (client: NewPrismaClient) => Promise, options?: { maxWait: number; timeout: number }, ) { @@ -996,7 +1000,7 @@ new PrismaClient({ * @param requests * @param options */ - private async _transactionWithRequests( + private _transactionWithRequests( requests: Array, options?: { maxWait: number; timeout: number }, ) { diff --git a/src/pnpm-lock.yaml b/src/pnpm-lock.yaml index f0f3b5ccf1f4..515617c92b80 100644 --- a/src/pnpm-lock.yaml +++ b/src/pnpm-lock.yaml @@ -1519,8 +1519,8 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/debug/2.27.0-dev.29: - resolution: {integrity: sha512-3OHjzZrqlr0A+3Et2gkToT/NLsZAWnyhatzzXBj20ny5y/w+/00iMYdjpcSLG740nFVZ7UdATgcq9z7bzbyycA==} + /@prisma/debug/2.27.0-dev.46: + resolution: {integrity: sha512-FRPAjY13ecFT7X17zHFFNUl10X7QFuTzE+i0mk+Eb+tXVJjG6pT8mlOXOmrcgPQjcjzD/XOTxbCvrrpQTDx53Q==} dependencies: debug: 4.3.2 ms: 2.1.3 @@ -1528,13 +1528,13 @@ packages: - supports-color dev: true - /@prisma/engine-core/2.27.0-dev.29: - resolution: {integrity: sha512-7LJK9YYTAqTT1gMQg8hJPfEBuObsb6Mq3Vta3lzhJN6T7i0meoflWn5t2+9zfq62B7ath1sFVT5qDimKGEe4XA==} + /@prisma/engine-core/2.27.0-dev.46: + resolution: {integrity: sha512-VjCkRyO8BceOb7yNwyja7SgCM4axy9P2xQgMZKDxpAovuLAmSK1DWz2R1jWccR8FXjDgO002O4bWm/T+MEm+cQ==} dependencies: - '@prisma/debug': 2.27.0-dev.29 - '@prisma/engines': 2.27.0-24.0c2898954d761d1c92f304ff1b7917c601c2e3d8 - '@prisma/generator-helper': 2.27.0-dev.29 - '@prisma/get-platform': 2.27.0-24.0c2898954d761d1c92f304ff1b7917c601c2e3d8 + '@prisma/debug': 2.27.0-dev.46 + '@prisma/engines': 2.27.0-34.339cec4d523bb71e89922ae4b96371395e0b8f2b + '@prisma/generator-helper': 2.27.0-dev.46 + '@prisma/get-platform': 2.27.0-34.339cec4d523bb71e89922ae4b96371395e0b8f2b chalk: 4.1.1 execa: 5.1.1 get-stream: 6.0.1 @@ -1554,6 +1554,11 @@ packages: resolution: {integrity: sha512-eNM+2hfta0AdwK/1isZa2hOjS9ITuQnTcllUvXEUwRLYSsYtXK0z2yKhuZoFLOA+oBzQi9+6sbuZXX4ozn3ysg==} requiresBuild: true + /@prisma/engines/2.27.0-34.339cec4d523bb71e89922ae4b96371395e0b8f2b: + resolution: {integrity: sha512-Perh/b/4LKXozEZpgQ77HE4YNXLPBcY7qmtFJMQLug0FuEt+qS5ZGIbDHHvK3HgljaPFc93ZjeR9u20WDslGfg==} + requiresBuild: true + dev: true + /@prisma/fetch-engine/2.27.0-24.0c2898954d761d1c92f304ff1b7917c601c2e3d8: resolution: {integrity: sha512-knoqBTtgSELsPTLSWqOd9Uk8iUOFBIXFpIeiugTAcgsJV06H0ryO8wG2nIghOL3/CVYRhK90UgjlW9CzEjLg7Q==} dependencies: @@ -1577,10 +1582,34 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/generator-helper/2.27.0-dev.29: - resolution: {integrity: sha512-QUsYQQEptSaSkoYCRQaPcz4wvHqcusPXiNhPUuLFD0RwDicnE8MuU7H1lgi8wFR8mWOtywxUjo8j8zRSqAL1mw==} + /@prisma/fetch-engine/2.27.0-34.339cec4d523bb71e89922ae4b96371395e0b8f2b: + resolution: {integrity: sha512-qaYG/AGe+V2Qg86WKJJxJRk3R3yzvLx9KAeNLCmBAWW60v7FACn6aEahHgE6UaMdEr6SGMEOU31cZI1oaGx4ow==} dependencies: - '@prisma/debug': 2.27.0-dev.29 + '@prisma/debug': 2.26.0 + '@prisma/get-platform': 2.27.0-34.339cec4d523bb71e89922ae4b96371395e0b8f2b + chalk: 4.1.1 + execa: 5.1.1 + find-cache-dir: 3.3.1 + hasha: 5.2.2 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.0 + make-dir: 3.1.0 + node-fetch: 2.6.1 + p-filter: 2.1.0 + p-map: 4.0.0 + p-retry: 4.6.0 + progress: 2.0.3 + rimraf: 3.0.2 + temp-dir: 2.0.0 + tempy: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@prisma/generator-helper/2.27.0-dev.46: + resolution: {integrity: sha512-iDUQ8ADpae4HiAUndgGmU0e3I34Vb2W1mK3ercFFZ0xIC98YhGQs8AcqNFvLKzu538nBunnTqIzHIYG237lJdQ==} + dependencies: + '@prisma/debug': 2.27.0-dev.46 '@types/cross-spawn': 6.0.2 chalk: 4.1.1 cross-spawn: 7.0.3 @@ -1595,15 +1624,23 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/sdk/2.27.0-dev.29: - resolution: {integrity: sha512-iEtVthjNeM6WQFJ94EMiYo0UwOxymdaaYjDhsAs0+ppClvQh0ROs9CoGUJSamvsT7PQaPCevKKIU+To4c1yY6A==} + /@prisma/get-platform/2.27.0-34.339cec4d523bb71e89922ae4b96371395e0b8f2b: + resolution: {integrity: sha512-J3RfnQ5V3JA0AgBogWmlJeskMFHpV/zvqaqvqIzf0PJh3abt/pXjZvRGPuds0zGiBKHQbBtefynvL4nX4eJOew==} dependencies: - '@prisma/debug': 2.27.0-dev.29 - '@prisma/engine-core': 2.27.0-dev.29 - '@prisma/engines': 2.27.0-24.0c2898954d761d1c92f304ff1b7917c601c2e3d8 - '@prisma/fetch-engine': 2.27.0-24.0c2898954d761d1c92f304ff1b7917c601c2e3d8 - '@prisma/generator-helper': 2.27.0-dev.29 - '@prisma/get-platform': 2.27.0-24.0c2898954d761d1c92f304ff1b7917c601c2e3d8 + '@prisma/debug': 2.26.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@prisma/sdk/2.27.0-dev.46: + resolution: {integrity: sha512-COPIEutss3zP+Vck2r3Sv0tTUjaBxFO0AOrscsUkxuEiPpKM7a/FT3/m9IemTyTJjUwid+HNWFSLUTb++lKRCQ==} + dependencies: + '@prisma/debug': 2.27.0-dev.46 + '@prisma/engine-core': 2.27.0-dev.46 + '@prisma/engines': 2.27.0-34.339cec4d523bb71e89922ae4b96371395e0b8f2b + '@prisma/fetch-engine': 2.27.0-34.339cec4d523bb71e89922ae4b96371395e0b8f2b + '@prisma/generator-helper': 2.27.0-dev.46 + '@prisma/get-platform': 2.27.0-34.339cec4d523bb71e89922ae4b96371395e0b8f2b '@timsuchanek/copy': 1.4.5 archiver: 4.0.2 arg: 5.0.0 @@ -1637,7 +1674,7 @@ packages: - supports-color dev: true - /@prisma/studio-pcw/0.409.0_dd6baa82c688b4069fb9fbe3336119f7: + /@prisma/studio-pcw/0.409.0_c2a45a219ccf87d76a354ec61d93246d: resolution: {integrity: sha512-uvYbUTipCagfNlohuUxrcdLR3zfXtFxcKQ0c4xi6e7rD9ROrqxfDou/90z123vzjlqEAN0SLCa4QIcnxLP1EJA==} peerDependencies: '@prisma/client': '*' @@ -1645,7 +1682,7 @@ packages: '@prisma/sdk': '*' dependencies: '@prisma/get-platform': 2.27.0-24.0c2898954d761d1c92f304ff1b7917c601c2e3d8 - '@prisma/sdk': 2.27.0-dev.29 + '@prisma/sdk': 2.27.0-dev.46 debug: 4.3.1 lodash: 4.17.21 transitivePeerDependencies: @@ -1655,8 +1692,8 @@ packages: /@prisma/studio-server/0.409.0_88330d0c5316413595bc61a1d0da9762: resolution: {integrity: sha512-d1O5z/Ah29JBvr0xApqWgyFG4eiYWycAX0qhKtrASwnKTuHgXCI4eGoRULEVVtwT8ssG9CKhthzJH0+SukVFZg==} dependencies: - '@prisma/sdk': 2.27.0-dev.29 - '@prisma/studio-pcw': 0.409.0_dd6baa82c688b4069fb9fbe3336119f7 + '@prisma/sdk': 2.27.0-dev.46 + '@prisma/studio-pcw': 0.409.0_c2a45a219ccf87d76a354ec61d93246d '@prisma/studio-transports': 0.409.0 '@sentry/node': 6.2.5 checkpoint-client: 1.1.20 From a24e37573b6a89aa4b059aaef28eedcf27debb40 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Wed, 7 Jul 2021 16:25:26 -0500 Subject: [PATCH 05/52] test(lrt): init first test --- .../happy/long-running-transaction/.gitignore | 1 + .../long-running-transaction/schema.prisma | 28 +++++++++++++++++++ .../happy/long-running-transaction/test.ts | 21 ++++++++++++++ .../client/src/runtime/getPrismaClient.ts | 18 ++++++------ 4 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 src/packages/client/src/__tests__/integration/happy/long-running-transaction/.gitignore create mode 100644 src/packages/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma create mode 100644 src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts diff --git a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/.gitignore b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/.gitignore new file mode 100644 index 000000000000..97952752a72b --- /dev/null +++ b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/.gitignore @@ -0,0 +1 @@ +!dev.db \ No newline at end of file diff --git a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma new file mode 100644 index 000000000000..2b0879c1f46c --- /dev/null +++ b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma @@ -0,0 +1,28 @@ +datasource db { + provider = "sqlite" + url = "file:dev.db" +} + +generator client { + provider = "prisma-client-js" +} + +// / User model comment +model User { + id String @id @default(uuid()) + email String @unique + // / name comment + name String? + posts Post[] +} + +model Post { + id String @id @default(cuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + published Boolean + title String + content String? + authorId String? + author User? @relation(fields: [authorId], references: [id]) +} diff --git a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts new file mode 100644 index 000000000000..27af908261a9 --- /dev/null +++ b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts @@ -0,0 +1,21 @@ +import { getTestClient } from '../../../../utils/getTestClient' + +test('long-running transaction', async () => { + const PrismaClient = await getTestClient() + const prisma = new PrismaClient() + + await prisma.user.deleteMany() + + + const result = await prisma.$transaction([ + prisma.user.create({ + data: { + email: 'test@hey.com', + }, + }) + ]) + + console.log(result) + + await prisma.$disconnect() +}) diff --git a/src/packages/client/src/runtime/getPrismaClient.ts b/src/packages/client/src/runtime/getPrismaClient.ts index 5b77767c4fbe..c95a66283069 100644 --- a/src/packages/client/src/runtime/getPrismaClient.ts +++ b/src/packages/client/src/runtime/getPrismaClient.ts @@ -936,7 +936,7 @@ new PrismaClient({ * @returns */ $transaction(input: any, options?: any) { - if (!process.env.PRISMA_FORCE_LRT) { + if (process.env.PRISMA_FORCE_LRT !== 'true') { return this.$___transaction(input) } @@ -955,12 +955,12 @@ new PrismaClient({ * @param options * @returns */ - private _transaction(input: any, options?: any) { + private async _transaction(input: any, options?: any) { if (typeof input === 'function') { - return this._transactionWithCallback(input, options) + return await this._transactionWithCallback(input, options) } - return this._transactionWithRequests(input, options) + return await this._transactionWithRequests(input, options) } /** @@ -969,12 +969,12 @@ new PrismaClient({ * @param options * @returns */ - private _transactionWithCallback( + private async _transactionWithCallback( callback: (client: NewPrismaClient) => Promise, options?: { maxWait: number; timeout: number }, ) { // transactions are inlined through their scheduler - return this._transactionScheduler.exec(async () => { + return await this._transactionScheduler.exec(async () => { // we ask the query engine to open a transaction const info = await this._engine.transaction('start', options) @@ -991,7 +991,7 @@ new PrismaClient({ throw e } - return result + return await result }) } @@ -1000,11 +1000,11 @@ new PrismaClient({ * @param requests * @param options */ - private _transactionWithRequests( + private async _transactionWithRequests( requests: Array, options?: { maxWait: number; timeout: number }, ) { - return this._transactionWithCallback(async () => { + return await this._transactionWithCallback(async () => { // we execute all of the requests one by one for (const request of requests) await request From d877d6c69ecbdac000c5984ed15b2a3502badb0e Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Wed, 7 Jul 2021 19:08:00 -0500 Subject: [PATCH 06/52] chore(engine-core): integrate mock server --- src/packages/engine-core/src/BinaryEngine.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/packages/engine-core/src/BinaryEngine.ts b/src/packages/engine-core/src/BinaryEngine.ts index 0ceae0b56580..2eb78461bb2e 100644 --- a/src/packages/engine-core/src/BinaryEngine.ts +++ b/src/packages/engine-core/src/BinaryEngine.ts @@ -114,6 +114,7 @@ export class BinaryEngine extends Engine { private engineStartDeferred?: Deferred private engineStopDeferred?: StopDeferred private connection: Connection + private txConnection: Connection private lastQuery?: string private lastVersion?: string private lastActiveProvider?: ConnectorType @@ -166,6 +167,7 @@ export class BinaryEngine extends Engine { this.previewFeatures = previewFeatures ?? [] this.activeProvider = activeProvider this.connection = new Connection() + this.txConnection = new Connection() initHooks() const removedFlags = [ @@ -1061,22 +1063,24 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. async transaction(action: any, arg?: any) { await this.start() + this.txConnection.open('http://localhost:3000') + if (action === 'start') { const stringifiedOptions = JSON.stringify({ max_wait: arg?.maxWait ?? 2000, // default - timeout: arg?.maxWait ?? 5000, // default + timeout: arg?.timeout ?? 5000, // default }) - const res = await this.connection.post( + const res = await this.txConnection.post( '/transaction/start', stringifiedOptions, ) return res.data } else if (action === 'commit') { - await this.connection.post(`/transaction/${arg}/commit`) + await this.txConnection.post(`/transaction/${arg.id}/commit`) } else if (action === 'rollback') { - await this.connection.post(`/transaction/${arg}/rollback`) + await this.txConnection.post(`/transaction/${arg.id}/rollback`) } } From 4e78e3bd9c331449f870f0912896019193c6190d Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Wed, 7 Jul 2021 19:08:53 -0500 Subject: [PATCH 07/52] chore(client): change scheduler id gen --- src/packages/client/src/runtime/Scheduler.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/packages/client/src/runtime/Scheduler.ts b/src/packages/client/src/runtime/Scheduler.ts index c6b56f0fd3d7..7703ba34a002 100644 --- a/src/packages/client/src/runtime/Scheduler.ts +++ b/src/packages/client/src/runtime/Scheduler.ts @@ -1,4 +1,6 @@ /* eslint-disable no-async-promise-executor */ +import Crypto from 'crypto' + type Task = () => R /** @@ -6,13 +8,14 @@ type Task = () => R * @returns taskId */ function getTaskId() { - return Math.floor(Math.random() * Date.now()).toString() + return Crypto.randomBytes(10).toString('hex') } /** * Execute [[Task]]s one after another */ class Scheduler { + private _results: { [id: string]: Promise } constructor() { From 77cee6a924eec8d88d44317486199a0e1fca9873 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Wed, 7 Jul 2021 19:09:32 -0500 Subject: [PATCH 08/52] test(client, lrt): cleanup --- .../happy/long-running-transaction/dev.db | Bin 0 -> 45056 bytes .../happy/long-running-transaction/test.ts | 1 - 2 files changed, 1 deletion(-) create mode 100644 src/packages/client/src/__tests__/integration/happy/long-running-transaction/dev.db diff --git a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/dev.db b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/dev.db new file mode 100644 index 0000000000000000000000000000000000000000..6f0cd1789757db450fc1f263f7b9a5daddb6a100 GIT binary patch literal 45056 zcmeHQUvC@75hpGGm0`0+VYrXy4FXF5X^^sHSuBc}mQH~XiApFjNZ<&>k++l%KHkxH zM>(o01WnNt=wpGt_q`AO0R0Ae=ySe6pZd^zgwE{!TON5L8Bvm}j37$9y}g~?-^|X= z?C$OCe70$LTxr`*NAr|tnO|hG+008t$z(Eh_}qoh9r#>>&-LH~|HMx={Bp|wdgkf& z@9y3ICUf)d-!k|Abnl<{Kfn9mdw+oo`XK}e0YZQfAOr{jLVyq;1PFlv1h#J8eDwHX z)-^1he_eOE^OScq!^CelS8HlzS5@lOjnC?;vQb@Azff45hbh}t|C-G)@f4f?gL3`W zqlXW(-+ka|O_P6WyB>aS1x4*vUTvxh!z8B6%_{K2w4QfhJ51SCzu1NAyr0^#EstA} zE0OGQ&Et9nZmeP5s@uCtwZ6Hjtf}jj`sS|kq_nbJEEG%ds}zf6@%tn!)X;EY z)ld`$QGhngoYn@cQlo@_XF%R>qs)JMn7#Gr@#E|tmql9|TgJYld4_Gp->&tyE4~4( zV-7zwT*%I#8|4>r26F*CN&@g08&8+w2rNFGa)f>%k?y`=MJW8-L7e%JSGXk zGmdSVTyHeB)|;XCBXSMbJV}_>Y@~_Ccsv+pt70 zif+!|1MsuAzsbNa{SX3#03kpK5CVh%A#f20{L9JaGE3iSh3xIW&-~|u2RClK)4bL} zVWGHCES8EZrGUgMXE^t&QsJ$?Pl|ORn8>T3peaB1hM; z4-K6=%5T7a6Baas2YQZ)4vm7TZNubcogY5cn|Mp-ZLMc|c*}Eo97`4Epn^uKDALgJ z$sNxztbIj!89Xr8>lymo{Jiqg(4iP%UdNewmhlz}Qxr5h!-qeD>n@n@u7XDV>%Ev3 zUQ4uOdNILPAHi1WZYgWv#_SqECaRiczk`|qwaCYjGDT@vo6xsXUfF=LW8pRfi& zYal7`_@X3ii0|NFHU#RU*^|g_-|4kl+;wMOA2UzeXJxi3s;UAfS)L(7Aq`mySBIL} z<1Q<|X2@Dd5Ugc;C;9$|cLbB+zRzta0JxXTRB`ru9rR4|%(Pp=hhXKfoRkun7CuyF zq3ne90xDkxLi81zIyI2VK0=aQo&&W&Y9)#&?E{V45}r_=`5sYOOeqXxS~s|<8OP01I|;Dd25i`@{B{23YmLd%{z#>IGXfH zp6O9hASQnIW+zE{rwWT)nQ2u3F$m7J3W>(|Sg^u@ zUJ|Y;tJBmvTrPiOEYj+c#%5s&4RCox$BHbZON2hIL!!yjjS2NdWbDPw3aq|y1Zo6k z{-k@lZcP=`5#@%94e2G1t+f-v9n8>21)~`&0TCCwcg&g`c1eLfgT^GRouI*b?9V5c znKT=nXD!?8b*#So;cPJwLX+s2IodlI_Jg@&pxD+rhKaV3AxziMQgUKTDY9b9R?jp+ z)?rOx!-8HRtlhF${Xk(5;~UsKgHy-};<$1nQ+9=OBeni)#C^l?5@-gK>K8{jn2EnQ zg7P$ef-0`M$xHVi07Z0|yDILIF_0 z?U28z;t-E}!2lmqjcOH-^rkKCid5rROWHl7`?9LcI|6=y~hy4$YNvxsay7tBHw;8_zIR7(jzYVSY6oWqfm~2sKgnl(J25ToMLn;%vC-Af9j_I;1qzz0+R+JZN$+$ z;NomiIWV}31zk#mkXBWQfa?eE=nDuEbV(rP@HTfa;)}j3ViN^XN97xbv7x341(X?Z8L#@WGA>6Ad{qV$ zNlk26I{!L~ECypvFk=Kw_0y&CVgg+zC{%QPJqmLs(+Fom{hN(9Vd%6=8eLD2w=LVj zQ%Si_V<_7B13mm_<9bP*Bh`AMF*MEPoce)Ypn2mcbQgBqVBfMrT3g8}GeJ>IVhzz4 zdZouu3^&` { await prisma.user.deleteMany() - const result = await prisma.$transaction([ prisma.user.create({ data: { From a5162c3c55fb14c15aaa20d1c5d110ea85d40dd6 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Thu, 8 Jul 2021 18:21:19 -0500 Subject: [PATCH 09/52] chore(jest): allow to run specs --- src/packages/client/jest.config.js | 24 ++++---- .../client/src/runtime/Scheduler.spec.ts | 58 +++++++++++++++++++ 2 files changed, 70 insertions(+), 12 deletions(-) create mode 100644 src/packages/client/src/runtime/Scheduler.spec.ts diff --git a/src/packages/client/jest.config.js b/src/packages/client/jest.config.js index 39e6e9555646..fe0fc71e2bb4 100644 --- a/src/packages/client/jest.config.js +++ b/src/packages/client/jest.config.js @@ -5,23 +5,23 @@ module.exports = { coverageReporters: ['clover'], coverageDirectory: 'src/__tests__/coverage', modulePathIgnorePatterns: [ - 'build/', - 'dist/', - 'generator/', - 'runtime/', - '@prisma', + '/dist/', + '/fixtures/', + '/generator-build/', + '/runtime/', + '/runtime-dist/', + '/sandbox/', + '/scripts/', + '/src/__tests__/benchmarks/', + '/src/__tests__/types/.*/test.ts', + '/src/__tests__/integration/happy/exhaustive-schema/generated-dmmf.ts', + '__helpers__/', + 'node_modules/', 'index.ts', 'index.d.ts', 'index.js', 'index.test-d.ts', '.bench.ts', - '__tests__/benchmarks/', - '__tests__/types/.*/test.ts', - 'stack.js', - 'runner.js', - 'node_modules/', - 'exhaustive-schema/generated-dmmf.ts', - '__helpers__', ], collectCoverageFrom: ['src/**/*.ts', '!**/__tests__/**/*'], snapshotSerializers: ['./helpers/jestSnapshotSerializer'], diff --git a/src/packages/client/src/runtime/Scheduler.spec.ts b/src/packages/client/src/runtime/Scheduler.spec.ts new file mode 100644 index 000000000000..bbcab51d6473 --- /dev/null +++ b/src/packages/client/src/runtime/Scheduler.spec.ts @@ -0,0 +1,58 @@ +import { Scheduler } from './Scheduler' + +describe('Scheduler', () => { + it('should be ordered', async () => { + const scheduler = new Scheduler() + + const taskIds = [ + scheduler.queue( + () => + new Promise((resolve) => { + setTimeout(() => resolve(1), 10) + }), + ), + + scheduler.queue( + () => + new Promise((resolve) => { + setTimeout(() => resolve(2), 1) + }), + ), + + scheduler.queue( + () => + new Promise((resolve) => { + setTimeout(() => resolve(3), 100) + }), + ), + + scheduler.queue(() => 4), + + scheduler.queue( + () => + new Promise((resolve) => { + setTimeout(() => resolve(5), 25) + }), + ), + + scheduler.queue( + () => + new Promise((resolve) => { + setTimeout(() => resolve(6), 25) + }), + ), + + scheduler.queue( + () => + new Promise((resolve) => { + setTimeout(() => resolve(7), 3) + }), + ), + ].reverse() // we should be able to await in any order + + const taskPromises = taskIds.map((id) => scheduler.wait(id)) + const taskResults = await Promise.all(taskPromises) + + expect(taskResults).toStrictEqual([7, 6, 5, 4, 3, 2, 1]) + }) +}) From 27c839f1ded68122c787a00017b46f466d158196 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Thu, 8 Jul 2021 18:26:45 -0500 Subject: [PATCH 10/52] fix(client): handle http error codes --- src/packages/engine-core/src/BinaryEngine.ts | 36 ++++++++++++---- src/packages/engine-core/src/Connection.ts | 44 +++++++++++++++++--- 2 files changed, 67 insertions(+), 13 deletions(-) diff --git a/src/packages/engine-core/src/BinaryEngine.ts b/src/packages/engine-core/src/BinaryEngine.ts index 2eb78461bb2e..bb0bbfdd5967 100644 --- a/src/packages/engine-core/src/BinaryEngine.ts +++ b/src/packages/engine-core/src/BinaryEngine.ts @@ -40,7 +40,7 @@ import { } from './log' import { omit } from './omit' import { printGeneratorConfig } from './printGeneratorConfig' -import { Connection } from './Connection' +import { Connection, Result } from './Connection' import { fixBinaryTargets, getRandomString, plusX } from './util' import type * as Tx from './definitions/Transaction' @@ -1057,6 +1057,12 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. }) } + /** + * Send START, COMMIT, or ROLLBACK to the Query Engine + * @param action START, COMMIT, or ROLLBACK + * @param options to change the default timeouts + * @param info transaction information for the QE + */ async transaction(action: 'start', options?: Tx.Options): Promise async transaction(action: 'commit', info: Tx.Info): Promise async transaction(action: 'rollback', info: Tx.Info): Promise @@ -1066,21 +1072,27 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. this.txConnection.open('http://localhost:3000') if (action === 'start') { - const stringifiedOptions = JSON.stringify({ + const jsonOptions = JSON.stringify({ max_wait: arg?.maxWait ?? 2000, // default timeout: arg?.timeout ?? 5000, // default }) - const res = await this.txConnection.post( - '/transaction/start', - stringifiedOptions, + const result = await Connection.onHttpError( + this.txConnection.post('/transaction/start', jsonOptions), + transactionHttpErrorHandler, ) - return res.data + return result.data } else if (action === 'commit') { - await this.txConnection.post(`/transaction/${arg.id}/commit`) + await Connection.onHttpError( + this.txConnection.post(`/transaction/${arg.id}/commit`), + transactionHttpErrorHandler, + ) } else if (action === 'rollback') { - await this.txConnection.post(`/transaction/${arg.id}/rollback`) + await Connection.onHttpError( + this.txConnection.post(`/transaction/${arg.id}/rollback`), + transactionHttpErrorHandler, + ) } } @@ -1258,3 +1270,11 @@ function initHooks() { hooksInitialized = true } } + +/** + * Decides how to handle error reponses for transactions + * @param result + */ +function transactionHttpErrorHandler(result: Result): never { + throw new Error(`Transaction error ${result.statusCode}`) +} diff --git a/src/packages/engine-core/src/Connection.ts b/src/packages/engine-core/src/Connection.ts index 53443fe67ec9..28214fe22337 100644 --- a/src/packages/engine-core/src/Connection.ts +++ b/src/packages/engine-core/src/Connection.ts @@ -2,6 +2,12 @@ import getStream = require('get-stream') import { Client, Pool } from 'undici' import { URL } from 'url' +export type Result = { + statusCode: Client.ResponseData['statusCode'] + headers: Client.ResponseData['headers'] + data: R +} + /** * Assertion function to make sure that we have a pool * @param pool @@ -20,6 +26,32 @@ export class Connection { constructor() {} + /** + * Wrapper to handle HTTP error codes. HTTP errors don't trigger any + * execptions because it is optional to handle error status codes. + * @param response to handle + * @param handler to execute + * @returns + */ + static async onHttpError( + response: Promise>, + handler: (result: Result) => HR, + ) { + const _response = await response + + if (_response.statusCode >= 400) { + return handler(_response) + } + + return _response + } + + /** + * Initiates a new connection pool + * @param url + * @param options + * @returns + */ open(url: string | URL, options?: Pool.Options) { if (this._pool) return @@ -48,7 +80,7 @@ export class Connection { ) { assertHasPool(this._pool) - const res = await this._pool.request({ + const response = await this._pool.request({ path: endpoint, method: method, headers: { @@ -59,11 +91,13 @@ export class Connection { bodyTimeout: 0, }) - return { - statusCode: res.statusCode, - headers: res.headers, - data: JSON.parse(await getStream(res.body)) as R, + const result: Result = { + statusCode: response.statusCode, + headers: response.headers, + data: JSON.parse(await getStream(response.body)) as R, } + + return result } /** From 6862fe47e51e2174df1e2bc1e043369637a5c315 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Thu, 8 Jul 2021 18:27:37 -0500 Subject: [PATCH 11/52] refactor(client, scheduler): avoid promise anti pattern --- src/packages/client/src/runtime/Scheduler.ts | 23 ++++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/packages/client/src/runtime/Scheduler.ts b/src/packages/client/src/runtime/Scheduler.ts index 7703ba34a002..5458fd5a1c0b 100644 --- a/src/packages/client/src/runtime/Scheduler.ts +++ b/src/packages/client/src/runtime/Scheduler.ts @@ -15,7 +15,6 @@ function getTaskId() { * Execute [[Task]]s one after another */ class Scheduler { - private _results: { [id: string]: Promise } constructor() { @@ -31,21 +30,21 @@ class Scheduler { const taskId = getTaskId() // unique task id for management // this promise ensures that thing execute one after another - this._results[taskId] = new Promise(async (resolve, reject) => { + this._results[taskId] = (async () => { const taskIds = Object.keys(this._results) - if (taskIds.length > 0) { - // if we have a promise before us, we make sure to wait - await this._results[taskIds[taskIds.length - 1]] - } - - // this way, we are effectively pipelining our execution try { - resolve(task()) - } catch (e) { - reject(e) + if (taskIds.length > 0) { + // if we have a promise before us, we make sure to wait + // this way, we are effectively pipelining our execution + await this._results[taskIds[taskIds.length - 1]] + } + } catch { + // we don't want to throw prev error onto the next promise } - }) + + return task() // but we do want our current promise to throw + })() return taskId } From 511a81ab8cc9b5f420e94dce3db48fb02b39b909 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 9 Jul 2021 20:21:56 -0500 Subject: [PATCH 12/52] chore: begin code split --- .../happy/long-running-transaction/test.ts | 6 + src/packages/client/src/runtime/Dataloader.ts | 2 +- .../client/src/runtime/RequestHandler.ts | 208 ++++++++++++++++++ .../client/src/runtime/getPrismaClient.ts | 4 +- 4 files changed, 217 insertions(+), 3 deletions(-) create mode 100644 src/packages/client/src/runtime/RequestHandler.ts diff --git a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts index bd8899f70951..77466211bbae 100644 --- a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts +++ b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts @@ -7,6 +7,12 @@ test('long-running transaction', async () => { await prisma.user.deleteMany() const result = await prisma.$transaction([ + prisma.user.create({ + data: { + email: 'test@hey.com', + }, + }), + (new Promise((res) => setTimeout(res, 1000))) as any, prisma.user.create({ data: { email: 'test@hey.com', diff --git a/src/packages/client/src/runtime/Dataloader.ts b/src/packages/client/src/runtime/Dataloader.ts index eeaff15691ae..86d54221d219 100644 --- a/src/packages/client/src/runtime/Dataloader.ts +++ b/src/packages/client/src/runtime/Dataloader.ts @@ -7,7 +7,7 @@ interface Job { export type DataloaderOptions = { singleLoader: (request: T) => Promise batchLoader: (request: T[]) => Promise - batchBy: (request: T) => string | null + batchBy: (request: T) => string | undefined } export class Dataloader { diff --git a/src/packages/client/src/runtime/RequestHandler.ts b/src/packages/client/src/runtime/RequestHandler.ts new file mode 100644 index 000000000000..e1b281cfad51 --- /dev/null +++ b/src/packages/client/src/runtime/RequestHandler.ts @@ -0,0 +1,208 @@ +import Debug from '@prisma/debug' +import stripAnsi from 'strip-ansi' +import { + PrismaClientInitializationError, + PrismaClientKnownRequestError, + PrismaClientRustPanicError, + PrismaClientUnknownRequestError, +} from '.' +import { Dataloader } from './Dataloader' +import { RequestParams, Unpacker } from './getPrismaClient' +import { Args, Document, unpack } from './query' +import { printStack } from './utils/printStack' +import { throwIfNotFound } from './utils/rejectOnNotFound' +const debug = Debug('prisma:client:fetcher') + +export class RequestHandler { + prisma: any + hooks: any + dataloader: Dataloader<{ + document: Document + runInTransaction?: boolean + transactionId?: number + headers?: Record + }> + + constructor(prisma, hooks?: any) { + this.prisma = prisma + this.hooks = hooks + this.dataloader = new Dataloader({ + batchLoader: (requests) => { + const queries = requests.map((r) => String(r.document)) + + return this.prisma._engine.requestBatch(queries) + }, + singleLoader: (request) => { + const query = String(request.document) + + return this.prisma._engine.request(query, request.headers) + }, + batchBy: (request) => { + if (!request.document.children[0].name.startsWith('findUnique')) { + return + } + + const selectionSet = request.document.children[0].children!.join(',') + + const args = request.document.children[0].args?.args + .map((a) => { + if (a.value instanceof Args) { + return `${a.key}-${a.value.args.map((a) => a.key).join(',')}` + } + return a.key + }) + .join(',') + + return `${request.document.children[0].name}|${args}|${selectionSet}` + }, + }) + } + + async request({ + document, + dataPath = [], + rootField, + typeName, + isList, + callsite, + rejectOnNotFound, + clientMethod, + runInTransaction, + showColors, + engineHook, + args, + headers, + transactionId, + unpacker, + }: RequestParams) { + if (this.hooks && this.hooks.beforeRequest) { + const query = String(document) + this.hooks.beforeRequest({ + query, + path: dataPath, + rootField, + typeName, + document, + isList, + clientMethod, + args, + }) + } + try { + /** + * If there's an engine hook, use it here + */ + let data, elapsed + if (engineHook) { + const result = await engineHook( + { + document, + runInTransaction, + }, + (params) => this.dataloader.request(params), + ) + data = result.data + elapsed = result.elapsed + } else { + const result = await this.dataloader.request({ + document, + runInTransaction, + headers, + transactionId, + }) + data = result?.data + elapsed = result?.elapsed + } + + /** + * Unpack + */ + const unpackResult = this.unpack( + document, + data, + dataPath, + rootField, + unpacker, + ) + throwIfNotFound(unpackResult, clientMethod, typeName, rejectOnNotFound) + if (process.env.PRISMA_CLIENT_GET_TIME) { + return { data: unpackResult, elapsed } + } + return unpackResult + } catch (e) { + debug(e) + let message = e.message + if (callsite) { + const { stack } = printStack({ + callsite, + originalMethod: clientMethod, + onUs: e.isPanic, + showColors, + }) + message = `${stack}\n ${e.message}` + } + + message = this.sanitizeMessage(message) + // TODO: Do request with callsite instead, so we don't need to rethrow + if (e.code) { + throw new PrismaClientKnownRequestError( + message, + e.code, + this.prisma._clientVersion, + e.meta, + ) + } else if (e.isPanic) { + throw new PrismaClientRustPanicError( + message, + this.prisma._clientVersion, + ) + } else if (e instanceof PrismaClientUnknownRequestError) { + throw new PrismaClientUnknownRequestError( + message, + this.prisma._clientVersion, + ) + } else if (e instanceof PrismaClientInitializationError) { + throw new PrismaClientInitializationError( + message, + this.prisma._clientVersion, + ) + } else if (e instanceof PrismaClientRustPanicError) { + throw new PrismaClientRustPanicError( + message, + this.prisma._clientVersion, + ) + } + + e.clientVersion = this.prisma._clientVersion + + throw e + } + } + + sanitizeMessage(message) { + if (this.prisma._errorFormat && this.prisma._errorFormat !== 'pretty') { + return stripAnsi(message) + } + return message + } + unpack(document, data, path, rootField, unpacker?: Unpacker) { + if (data?.data) { + data = data.data + } + // to lift up _all in count + if (unpacker) { + data[rootField] = unpacker(data[rootField]) + } + + const getPath: any[] = [] + if (rootField) { + getPath.push(rootField) + } + getPath.push(...path.filter((p) => p !== 'select' && p !== 'include')) + return unpack({ document, data, path: getPath }) + } + + get [Symbol.toStringTag]() { + return 'PrismaClientFetcher' + } +} diff --git a/src/packages/client/src/runtime/getPrismaClient.ts b/src/packages/client/src/runtime/getPrismaClient.ts index c95a66283069..cc107e4a1325 100644 --- a/src/packages/client/src/runtime/getPrismaClient.ts +++ b/src/packages/client/src/runtime/getPrismaClient.ts @@ -440,7 +440,7 @@ export function getPrismaClient(config: GetPrismaClientOptions): any { * @param middleware to hook */ $use(middleware: QueryMiddleware) - $use(namespace: 'all', cb: QueryMiddleware) + $use(namespace: 'all', cb: QueryMiddleware) // TODO: 'all' actually means 'query', to be changed $use(namespace: 'engine', cb: EngineMiddleware) $use( arg0: Namespace | QueryMiddleware, @@ -1045,7 +1045,7 @@ new PrismaClient({ const changedInternalParams = { ...internalParams, ...params } - // TODO remove this, because transactionId should be passed? + // TODO remove this once LRT is the default transaction mode if (index > 0) delete changedInternalParams['transactionId'] // no middleware? then we just proceed with request execution From 796690da07dab567d266fa87eb968c1c73b73f4b Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Sat, 10 Jul 2021 16:18:52 -0500 Subject: [PATCH 13/52] chore(client): rename dataloader --- .../src/runtime/{Dataloader.ts => DataLoader.ts} | 14 ++++++++------ .../client/src/runtime/PrismaClientFetcher.ts | 8 ++++---- src/packages/client/src/runtime/RequestHandler.ts | 4 ++-- 3 files changed, 14 insertions(+), 12 deletions(-) rename src/packages/client/src/runtime/{Dataloader.ts => DataLoader.ts} (93%) diff --git a/src/packages/client/src/runtime/Dataloader.ts b/src/packages/client/src/runtime/DataLoader.ts similarity index 93% rename from src/packages/client/src/runtime/Dataloader.ts rename to src/packages/client/src/runtime/DataLoader.ts index 86d54221d219..2c92a4070c45 100644 --- a/src/packages/client/src/runtime/Dataloader.ts +++ b/src/packages/client/src/runtime/DataLoader.ts @@ -4,21 +4,19 @@ interface Job { request: any } -export type DataloaderOptions = { +export type DataLoaderOptions = { singleLoader: (request: T) => Promise batchLoader: (request: T[]) => Promise batchBy: (request: T) => string | undefined } -export class Dataloader { +export class DataLoader { batches: { [key: string]: Job[] } private tickActive = false - constructor(private options: DataloaderOptions) { + constructor(private options: DataLoaderOptions) { this.batches = {} } - get [Symbol.toStringTag]() { - return 'Dataloader' - } + request(request: T): Promise { const hash = this.options.batchBy(request) if (!hash) { @@ -93,4 +91,8 @@ export class Dataloader { } } } + + get [Symbol.toStringTag]() { + return 'DataLoader' + } } diff --git a/src/packages/client/src/runtime/PrismaClientFetcher.ts b/src/packages/client/src/runtime/PrismaClientFetcher.ts index b836fe1a5f7d..f0d2f70b6588 100644 --- a/src/packages/client/src/runtime/PrismaClientFetcher.ts +++ b/src/packages/client/src/runtime/PrismaClientFetcher.ts @@ -6,7 +6,7 @@ import { PrismaClientRustPanicError, PrismaClientUnknownRequestError, } from '.' -import { Dataloader } from './Dataloader' +import { DataLoader } from './DataLoader' import { RequestParams, Unpacker } from './getPrismaClient' import { Args, Document, unpack } from './query' import { printStack } from './utils/printStack' @@ -17,7 +17,7 @@ export class PrismaClientFetcher { prisma: any debug: boolean hooks: any - dataloader: Dataloader<{ + dataloader: DataLoader<{ document: Document runInTransaction?: boolean transactionId?: number @@ -28,7 +28,7 @@ export class PrismaClientFetcher { this.prisma = prisma this.debug = enableDebug this.hooks = hooks - this.dataloader = new Dataloader({ + this.dataloader = new DataLoader({ batchLoader: (requests) => { const queries = requests.map((r) => String(r.document)) const runTransaction = requests[0].runInTransaction @@ -47,7 +47,7 @@ export class PrismaClientFetcher { } if (!request.document.children[0].name.startsWith('findUnique')) { - return null + return undefined } const selectionSet = request.document.children[0].children!.join(',') diff --git a/src/packages/client/src/runtime/RequestHandler.ts b/src/packages/client/src/runtime/RequestHandler.ts index e1b281cfad51..0ca81d7fff6c 100644 --- a/src/packages/client/src/runtime/RequestHandler.ts +++ b/src/packages/client/src/runtime/RequestHandler.ts @@ -6,7 +6,7 @@ import { PrismaClientRustPanicError, PrismaClientUnknownRequestError, } from '.' -import { Dataloader } from './Dataloader' +import { DataLoader } from './DataLoader' import { RequestParams, Unpacker } from './getPrismaClient' import { Args, Document, unpack } from './query' import { printStack } from './utils/printStack' @@ -16,7 +16,7 @@ const debug = Debug('prisma:client:fetcher') export class RequestHandler { prisma: any hooks: any - dataloader: Dataloader<{ + dataloader: DataLoader<{ document: Document runInTransaction?: boolean transactionId?: number From 4148f1057777d2f1a8f6cf75905ece778d989837 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Sat, 10 Jul 2021 16:20:02 -0500 Subject: [PATCH 14/52] chore(client): rename dataloader --- src/packages/client/src/runtime/PrismaClientFetcher.ts | 8 ++++---- src/packages/client/src/runtime/RequestHandler.ts | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/packages/client/src/runtime/PrismaClientFetcher.ts b/src/packages/client/src/runtime/PrismaClientFetcher.ts index f0d2f70b6588..39ed1120c1b9 100644 --- a/src/packages/client/src/runtime/PrismaClientFetcher.ts +++ b/src/packages/client/src/runtime/PrismaClientFetcher.ts @@ -17,7 +17,7 @@ export class PrismaClientFetcher { prisma: any debug: boolean hooks: any - dataloader: DataLoader<{ + dataLoader: DataLoader<{ document: Document runInTransaction?: boolean transactionId?: number @@ -28,7 +28,7 @@ export class PrismaClientFetcher { this.prisma = prisma this.debug = enableDebug this.hooks = hooks - this.dataloader = new DataLoader({ + this.dataLoader = new DataLoader({ batchLoader: (requests) => { const queries = requests.map((r) => String(r.document)) const runTransaction = requests[0].runInTransaction @@ -111,12 +111,12 @@ export class PrismaClientFetcher { document, runInTransaction, }, - (params) => this.dataloader.request(params), + (params) => this.dataLoader.request(params), ) data = result.data elapsed = result.elapsed } else { - const result = await this.dataloader.request({ + const result = await this.dataLoader.request({ document, runInTransaction, headers, diff --git a/src/packages/client/src/runtime/RequestHandler.ts b/src/packages/client/src/runtime/RequestHandler.ts index 0ca81d7fff6c..5c466dde46df 100644 --- a/src/packages/client/src/runtime/RequestHandler.ts +++ b/src/packages/client/src/runtime/RequestHandler.ts @@ -16,7 +16,7 @@ const debug = Debug('prisma:client:fetcher') export class RequestHandler { prisma: any hooks: any - dataloader: DataLoader<{ + dataLoader: DataLoader<{ document: Document runInTransaction?: boolean transactionId?: number @@ -26,7 +26,7 @@ export class RequestHandler { constructor(prisma, hooks?: any) { this.prisma = prisma this.hooks = hooks - this.dataloader = new Dataloader({ + this.dataLoader = new DataLoader({ batchLoader: (requests) => { const queries = requests.map((r) => String(r.document)) @@ -99,12 +99,12 @@ export class RequestHandler { document, runInTransaction, }, - (params) => this.dataloader.request(params), + (params) => this.dataLoader.request(params), ) data = result.data elapsed = result.elapsed } else { - const result = await this.dataloader.request({ + const result = await this.dataLoader.request({ document, runInTransaction, headers, From d82e56588ed78501de796fff70782df902f3afe3 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Sat, 10 Jul 2021 16:23:43 -0500 Subject: [PATCH 15/52] chore(client): add types for client --- .../client/src/runtime/PrismaClientFetcher.ts | 31 +++++-- .../client/src/runtime/RequestHandler.ts | 89 ++++++++++--------- .../client/src/runtime/getPrismaClient.ts | 66 ++++++++------ 3 files changed, 111 insertions(+), 75 deletions(-) diff --git a/src/packages/client/src/runtime/PrismaClientFetcher.ts b/src/packages/client/src/runtime/PrismaClientFetcher.ts index 39ed1120c1b9..c3a1b647e891 100644 --- a/src/packages/client/src/runtime/PrismaClientFetcher.ts +++ b/src/packages/client/src/runtime/PrismaClientFetcher.ts @@ -7,17 +7,36 @@ import { PrismaClientUnknownRequestError, } from '.' import { DataLoader } from './DataLoader' -import { RequestParams, Unpacker } from './getPrismaClient' +import { Unpacker } from './getPrismaClient' +import { EngineMiddleware } from './MiddlewareHandler' import { Args, Document, unpack } from './query' import { printStack } from './utils/printStack' -import { throwIfNotFound } from './utils/rejectOnNotFound' +import { RejectOnNotFound, throwIfNotFound } from './utils/rejectOnNotFound' const debug = Debug('prisma:client:fetcher') +export type RequestParams = { + document: Document + dataPath: string[] + rootField: string + typeName: string + isList: boolean + clientMethod: string + callsite?: string + rejectOnNotFound?: RejectOnNotFound + runInTransaction?: boolean + showColors?: boolean + engineHook?: EngineMiddleware + args: any + headers?: Record + transactionId?: number + unpacker?: Unpacker +} + export class PrismaClientFetcher { prisma: any debug: boolean hooks: any - dataLoader: DataLoader<{ + dataloader: DataLoader<{ document: Document runInTransaction?: boolean transactionId?: number @@ -28,7 +47,7 @@ export class PrismaClientFetcher { this.prisma = prisma this.debug = enableDebug this.hooks = hooks - this.dataLoader = new DataLoader({ + this.dataloader = new DataLoader({ batchLoader: (requests) => { const queries = requests.map((r) => String(r.document)) const runTransaction = requests[0].runInTransaction @@ -111,12 +130,12 @@ export class PrismaClientFetcher { document, runInTransaction, }, - (params) => this.dataLoader.request(params), + (params) => this.dataloader.request(params), ) data = result.data elapsed = result.elapsed } else { - const result = await this.dataLoader.request({ + const result = await this.dataloader.request({ document, runInTransaction, headers, diff --git a/src/packages/client/src/runtime/RequestHandler.ts b/src/packages/client/src/runtime/RequestHandler.ts index 5c466dde46df..2f159ded09f4 100644 --- a/src/packages/client/src/runtime/RequestHandler.ts +++ b/src/packages/client/src/runtime/RequestHandler.ts @@ -7,53 +7,60 @@ import { PrismaClientUnknownRequestError, } from '.' import { DataLoader } from './DataLoader' -import { RequestParams, Unpacker } from './getPrismaClient' -import { Args, Document, unpack } from './query' +import { Client, Unpacker } from './getPrismaClient' +import { EngineMiddleware } from './MiddlewareHandler' +import { Document, unpack } from './query' import { printStack } from './utils/printStack' -import { throwIfNotFound } from './utils/rejectOnNotFound' +import { RejectOnNotFound, throwIfNotFound } from './utils/rejectOnNotFound' const debug = Debug('prisma:client:fetcher') +export type RequestParams = { + document: Document + dataPath: string[] + rootField: string + typeName: string + isList: boolean + clientMethod: string + callsite?: string + rejectOnNotFound?: RejectOnNotFound + runInTransaction?: boolean + showColors?: boolean + engineHook?: EngineMiddleware + args: any + headers?: Record + transactionId?: string + unpacker?: Unpacker +} + +export type Request = { + document: Document + runInTransaction?: boolean + transactionId?: string + headers?: Record +} + export class RequestHandler { - prisma: any + client: Client hooks: any - dataLoader: DataLoader<{ - document: Document - runInTransaction?: boolean - transactionId?: number - headers?: Record - }> + dataloader: DataLoader - constructor(prisma, hooks?: any) { - this.prisma = prisma + constructor(client: Client, hooks?: any) { + this.client = client this.hooks = hooks - this.dataLoader = new DataLoader({ + this.dataloader = new DataLoader({ batchLoader: (requests) => { + const headers = {transaction_id: requests[0].transactionId} const queries = requests.map((r) => String(r.document)) - return this.prisma._engine.requestBatch(queries) + return this.client._engine.requestBatch(queries, headers) }, singleLoader: (request) => { const query = String(request.document) - return this.prisma._engine.request(query, request.headers) + return this.client._engine.request(query, request.headers) }, batchBy: (request) => { - if (!request.document.children[0].name.startsWith('findUnique')) { - return - } - - const selectionSet = request.document.children[0].children!.join(',') - - const args = request.document.children[0].args?.args - .map((a) => { - if (a.value instanceof Args) { - return `${a.key}-${a.value.args.map((a) => a.key).join(',')}` - } - return a.key - }) - .join(',') - - return `${request.document.children[0].name}|${args}|${selectionSet}` + return `${request.transactionId}` ?? 'batch' }, }) } @@ -99,12 +106,12 @@ export class RequestHandler { document, runInTransaction, }, - (params) => this.dataLoader.request(params), + (params) => this.dataloader.request(params), ) data = result.data elapsed = result.elapsed } else { - const result = await this.dataLoader.request({ + const result = await this.dataloader.request({ document, runInTransaction, headers, @@ -148,39 +155,39 @@ export class RequestHandler { throw new PrismaClientKnownRequestError( message, e.code, - this.prisma._clientVersion, + this.client._clientVersion, e.meta, ) } else if (e.isPanic) { throw new PrismaClientRustPanicError( message, - this.prisma._clientVersion, + this.client._clientVersion, ) } else if (e instanceof PrismaClientUnknownRequestError) { throw new PrismaClientUnknownRequestError( message, - this.prisma._clientVersion, + this.client._clientVersion, ) } else if (e instanceof PrismaClientInitializationError) { throw new PrismaClientInitializationError( message, - this.prisma._clientVersion, + this.client._clientVersion, ) } else if (e instanceof PrismaClientRustPanicError) { throw new PrismaClientRustPanicError( message, - this.prisma._clientVersion, + this.client._clientVersion, ) } - e.clientVersion = this.prisma._clientVersion + e.clientVersion = this.client._clientVersion throw e } } sanitizeMessage(message) { - if (this.prisma._errorFormat && this.prisma._errorFormat !== 'pretty') { + if (this.client._errorFormat && this.client._errorFormat !== 'pretty') { return stripAnsi(message) } return message @@ -203,6 +210,6 @@ export class RequestHandler { } get [Symbol.toStringTag]() { - return 'PrismaClientFetcher' + return 'RequestHandler' } } diff --git a/src/packages/client/src/runtime/getPrismaClient.ts b/src/packages/client/src/runtime/getPrismaClient.ts index cc107e4a1325..e59d0902dd46 100644 --- a/src/packages/client/src/runtime/getPrismaClient.ts +++ b/src/packages/client/src/runtime/getPrismaClient.ts @@ -30,7 +30,7 @@ import { QueryMiddlewareParams, } from './MiddlewareHandler' import { PrismaClientFetcher } from './PrismaClientFetcher' -import { Document, makeDocument, transformDocument } from './query' +import { makeDocument, transformDocument } from './query' import { clientVersion } from './utils/clientVersion' import { getOutputTypeName, lowerCase } from './utils/common' import { deepSet } from './utils/deep-set' @@ -139,6 +139,8 @@ export type HookParams = { args: any } + +// TODO: can we replace this with DMMF.ModelAction? export type Action = | 'findUnique' | 'findFirst' @@ -260,25 +262,51 @@ const aggregateKeys = { max: true, } -// TODO: We **may** be able to get real types. However, we have both a bootstrapping -// problem here, that we want to return a type that's not yet defined -// and we're typecasting this anyway later -export function getPrismaClient(config: GetPrismaClientOptions): any { - class NewPrismaClient { +export interface Client { + _dmmf: DMMFClass + _engine: Engine + _fetcher: PrismaClientFetcher + _connectionPromise?: Promise + _disconnectionPromise?: Promise + _engineConfig: EngineConfig + _clientVersion: string + _errorFormat: ErrorFormat + $use( + arg0: Namespace | QueryMiddleware, + arg1?: QueryMiddleware | EngineMiddleware + ); + $on(eventType: EngineEventType, callback: (event: any) => void) + $connect() + $disconnect() + _runDisconnect() + $executeRaw( + stringOrTemplateStringsArray: + | ReadonlyArray + | string + | sqlTemplateTag.Sql + ) + $queryRaw(stringOrTemplateStringsArray) + __internal_triggerPanic(fatal: boolean) + $___transaction(promises: Array): Promise + $transaction(input: any, options?: any) +} + +export function getPrismaClient(config: GetPrismaClientOptions) { + class PrismaClient implements Client { _dmmf: DMMFClass _engine: Engine _fetcher: PrismaClientFetcher _connectionPromise?: Promise _disconnectionPromise?: Promise _engineConfig: EngineConfig - private _errorFormat: ErrorFormat + _clientVersion: string + _errorFormat: ErrorFormat private _hooks?: Hooks // private _getConfigPromise?: Promise<{ datasources: DataSource[] generators: GeneratorConfig[] }> private _middlewares: Middlewares = new Middlewares() - private _clientVersion: string private _previewFeatures: string[] private _activeProvider: string private _transactionId = 1 @@ -970,7 +998,7 @@ new PrismaClient({ * @returns */ private async _transactionWithCallback( - callback: (client: NewPrismaClient) => Promise, + callback: (client: PrismaClient) => Promise, options?: { maxWait: number; timeout: number }, ) { // transactions are inlined through their scheduler @@ -1471,25 +1499,7 @@ new PrismaClient({ } } - return NewPrismaClient -} - -export type RequestParams = { - document: Document - dataPath: string[] - rootField: string - typeName: string - isList: boolean - clientMethod: string - callsite?: string - rejectOnNotFound?: RejectOnNotFound - runInTransaction?: boolean - showColors?: boolean - engineHook?: EngineMiddleware - args: any - headers?: Record - transactionId?: number - unpacker?: Unpacker + return PrismaClient as (new (optionsArg?: PrismaClientOptions) => Client) } export function getOperation(action: DMMF.ModelAction): 'query' | 'mutation' { From 701d00062ab792c4f324aa840268c64ca2602484 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Sat, 10 Jul 2021 16:33:34 -0500 Subject: [PATCH 16/52] chore(client, engine-core): allow headers for batching --- .../client/src/runtime/PrismaClientFetcher.ts | 2 +- .../client/src/runtime/RequestHandler.ts | 2 +- src/packages/engine-core/src/BinaryEngine.ts | 8 +++++--- src/packages/engine-core/src/Engine.ts | 18 ++++++++++-------- src/packages/engine-core/src/LibraryEngine.ts | 7 ++++--- .../engine-core/src/NodeAPILibraryTypes.ts | 7 +++++++ 6 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/packages/client/src/runtime/PrismaClientFetcher.ts b/src/packages/client/src/runtime/PrismaClientFetcher.ts index c3a1b647e891..15e68cadbfb5 100644 --- a/src/packages/client/src/runtime/PrismaClientFetcher.ts +++ b/src/packages/client/src/runtime/PrismaClientFetcher.ts @@ -51,7 +51,7 @@ export class PrismaClientFetcher { batchLoader: (requests) => { const queries = requests.map((r) => String(r.document)) const runTransaction = requests[0].runInTransaction - return this.prisma._engine.requestBatch(queries, runTransaction) + return this.prisma._engine.requestBatch(queries, {}, runTransaction) }, singleLoader: (request) => { const query = String(request.document) diff --git a/src/packages/client/src/runtime/RequestHandler.ts b/src/packages/client/src/runtime/RequestHandler.ts index 2f159ded09f4..3544663ab45f 100644 --- a/src/packages/client/src/runtime/RequestHandler.ts +++ b/src/packages/client/src/runtime/RequestHandler.ts @@ -49,7 +49,7 @@ export class RequestHandler { this.hooks = hooks this.dataloader = new DataLoader({ batchLoader: (requests) => { - const headers = {transaction_id: requests[0].transactionId} + const headers = {transactionId: requests[0].transactionId} const queries = requests.map((r) => String(r.document)) return this.client._engine.requestBatch(queries, headers) diff --git a/src/packages/engine-core/src/BinaryEngine.ts b/src/packages/engine-core/src/BinaryEngine.ts index bb0bbfdd5967..23023a91ee8a 100644 --- a/src/packages/engine-core/src/BinaryEngine.ts +++ b/src/packages/engine-core/src/BinaryEngine.ts @@ -43,6 +43,7 @@ import { printGeneratorConfig } from './printGeneratorConfig' import { Connection, Result } from './Connection' import { fixBinaryTargets, getRandomString, plusX } from './util' import type * as Tx from './definitions/Transaction' +import { QueryEngineRequestHeaders, QueryEngineResult } from './NodeAPILibraryTypes' const debug = Debug('prisma:engine') const exists = promisify(fs.exists) @@ -953,7 +954,7 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. query: string, headers: Record, numTry = 1, - ): Promise { + ): Promise> { await this.start() this.currentRequestPromise = this.connection.post( @@ -1005,9 +1006,10 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. async requestBatch( queries: string[], + headers: QueryEngineRequestHeaders = {}, transaction = false, numTry = 1, - ): Promise { + ): Promise[]> { await this.start() const variables = {} @@ -1049,7 +1051,7 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. if (!isError) { // retry if (numTry <= MAX_REQUEST_RETRIES) { - return this.requestBatch(queries, transaction, numTry + 1) + return this.requestBatch(queries, headers, transaction, numTry + 1) } } diff --git a/src/packages/engine-core/src/Engine.ts b/src/packages/engine-core/src/Engine.ts index 1350929e58a7..8b43e58154cb 100644 --- a/src/packages/engine-core/src/Engine.ts +++ b/src/packages/engine-core/src/Engine.ts @@ -1,5 +1,6 @@ import { DataSource, GeneratorConfig } from '@prisma/generator-helper' -import type * as Tx from './definitions/Transaction' +import type * as Transaction from './definitions/Transaction' +import { QueryEngineRequestHeaders, QueryEngineResult } from './NodeAPILibraryTypes' export interface FilterConstructor { new (config: EngineConfig): Engine @@ -14,17 +15,18 @@ export abstract class Engine { abstract version(forceRun?: boolean): Promise | string abstract request( query: string, - headers: Record, - numTry: number, - ): Promise<{ data: T; elapsed: number }> + headers?: QueryEngineRequestHeaders, + numTry?: number, + ): Promise> abstract requestBatch( queries: string[], + headers?: QueryEngineRequestHeaders, transaction?: boolean, numTry?: number, - ): Promise<{ data: T; elapsed: number }> - abstract transaction(action: 'start', options?: Tx.Options): Promise - abstract transaction(action: 'commit', info: Tx.Info): Promise - abstract transaction(action: 'rollback', info: Tx.Info): Promise + ): Promise[]> + abstract transaction(action: 'start', options?: Transaction.Options): Promise + abstract transaction(action: 'commit', info: Transaction.Info): Promise + abstract transaction(action: 'rollback', info: Transaction.Info): Promise } export type EngineEventType = 'query' | 'info' | 'warn' | 'error' | 'beforeExit' diff --git a/src/packages/engine-core/src/LibraryEngine.ts b/src/packages/engine-core/src/LibraryEngine.ts index d9a2fdf20590..cb16ad2ec796 100644 --- a/src/packages/engine-core/src/LibraryEngine.ts +++ b/src/packages/engine-core/src/LibraryEngine.ts @@ -37,6 +37,7 @@ import { QueryEngineQueryEvent, QueryEngineRequest, QueryEngineRequestHeaders, + QueryEngineResult, RustRequestError, SyncRustError, } from './NodeAPILibraryTypes' @@ -455,13 +456,13 @@ You may have to run ${chalk.greenBright( } } - async requestBatch( + async requestBatch( queries: string[], + headers: QueryEngineRequestHeaders = {}, transaction = false, numTry = 1, - ): Promise { + ): Promise[]> { debug('requestBatch') - const headers: QueryEngineRequestHeaders = {} const request: QueryEngineBatchRequest = { batch: queries.map((query) => ({ query, variables: {} })), transaction, diff --git a/src/packages/engine-core/src/NodeAPILibraryTypes.ts b/src/packages/engine-core/src/NodeAPILibraryTypes.ts index b4c53cb4a54d..8f1f3cb29707 100644 --- a/src/packages/engine-core/src/NodeAPILibraryTypes.ts +++ b/src/packages/engine-core/src/NodeAPILibraryTypes.ts @@ -59,8 +59,15 @@ export type QueryEngineRequest = { query: string variables: Object } + +export type QueryEngineResult = { + data: T + elapsed: number +} + export type QueryEngineRequestHeaders = { traceparent?: string + transactionId?: string } export type QueryEngineBatchRequest = { From 41cbcee84ce40306832897b4a5ada8cc4a90b6c6 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Sat, 10 Jul 2021 16:44:27 -0500 Subject: [PATCH 17/52] chore(client): guard for fetcher --- src/packages/client/src/runtime/getPrismaClient.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/packages/client/src/runtime/getPrismaClient.ts b/src/packages/client/src/runtime/getPrismaClient.ts index e59d0902dd46..57e023b3a6a3 100644 --- a/src/packages/client/src/runtime/getPrismaClient.ts +++ b/src/packages/client/src/runtime/getPrismaClient.ts @@ -44,6 +44,7 @@ import { import { serializeRawParameters } from './utils/serializeRawParameters' import { validatePrismaClientOptions } from './utils/validatePrismaClientOptions' import { Scheduler } from './Scheduler' +import { RequestHandler } from './RequestHandler' const debug = Debug('prisma:client') const ALTER_RE = /^(\s*alter\s)/i @@ -422,7 +423,12 @@ export function getPrismaClient(config: GetPrismaClientOptions) { this._engine = this.getEngine() void this._getActiveProvider() - this._fetcher = new PrismaClientFetcher(this, false, this._hooks) + + if (process.env.PRISMA_FORCE_LRT !== 'true') { + this._fetcher = new PrismaClientFetcher(this, false, this._hooks) + } else { + this._fetcher = new RequestHandler(this, this._hooks) as any + } if (options.log) { for (const log of options.log) { From b9fbc31aaa869a3563f9101e9bae22bb1b5ba9c4 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Mon, 12 Jul 2021 11:58:03 -0500 Subject: [PATCH 18/52] chore(client): provide first lrt definition --- src/packages/client/src/generation/TSClient/PrismaClient.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/packages/client/src/generation/TSClient/PrismaClient.ts b/src/packages/client/src/generation/TSClient/PrismaClient.ts index 17b6ace4c581..077bbfa38c6b 100644 --- a/src/packages/client/src/generation/TSClient/PrismaClient.ts +++ b/src/packages/client/src/generation/TSClient/PrismaClient.ts @@ -8,6 +8,10 @@ import { TAB_SIZE } from './constants' import { Datasources } from './Datasources' import { Generatable } from './Generatable' +function longRunningTransactionDefinition() { + return `$transaction(fn: (prisma: PrismaClient) => Promise): Promise` +} + export class PrismaClientClass implements Generatable { constructor( protected readonly dmmf: DMMFClass, @@ -136,6 +140,7 @@ export class PrismaClient< * Read more in our [docs](https://www.prisma.io/docs/concepts/components/prisma-client/transactions). */ $transaction

[]>(arg: [...P]): Promise> + ${process.env.PRISMA_FORCE_LRT === 'true' ? longRunningTransactionDefinition(): ''} ${indent( dmmf.mappings.modelOperations From 38c1f9ffea380cad6875a106ad36f8c776492ca5 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Mon, 12 Jul 2021 17:47:55 -0500 Subject: [PATCH 19/52] chore: update locks --- src/pnpm-lock.yaml | 84 +++++++++++++--------------------------------- 1 file changed, 23 insertions(+), 61 deletions(-) diff --git a/src/pnpm-lock.yaml b/src/pnpm-lock.yaml index 9705b28b04d4..4eb6fb7d11b0 100644 --- a/src/pnpm-lock.yaml +++ b/src/pnpm-lock.yaml @@ -1536,8 +1536,8 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/debug/2.27.0-dev.57: - resolution: {integrity: sha512-Wy+L/QKtOLfyfW8HftAqWh7LGo38GnpAFsZEEsywtl8NtKZbSZnljxw9FL8vCdDHxVAR2+Jf+edA9QqLJ7t+ZA==} + /@prisma/debug/2.27.0-dev.63: + resolution: {integrity: sha512-6w0AKFznOasHNTlhw8lQoHioiFywJjwkfmE4CMAweV00Va84rfQEk7p/pUXYt7lIE1p8Qq85dOUp8CNlqKfULA==} dependencies: debug: 4.3.2 ms: 2.1.3 @@ -1545,13 +1545,13 @@ packages: - supports-color dev: true - /@prisma/engine-core/2.27.0-dev.57: - resolution: {integrity: sha512-m6iMbSG9oDmEPhlhDXn4lid0GNK2ooJT6yP9Wz1CbU6dckerYiidvUWg0Gf+yafZLq6FgfC7vlaFPM9fQtygiw==} + /@prisma/engine-core/2.27.0-dev.63: + resolution: {integrity: sha512-lbzDFsCU4PVPnAHmTCPilkvaydrjPK3luPBPDVsa7HA3yYqVN54mUhE4xzUlbkEIVHhL4cNjZLODO6moq/AVyw==} dependencies: - '@prisma/debug': 2.27.0-dev.57 - '@prisma/engines': 2.27.0-42.8d5fae9e9f94c60926420216a4ca9c400c3d2947 - '@prisma/generator-helper': 2.27.0-dev.57 - '@prisma/get-platform': 2.27.0-42.8d5fae9e9f94c60926420216a4ca9c400c3d2947 + '@prisma/debug': 2.27.0-dev.63 + '@prisma/engines': 2.27.0-43.cdba6ec525e0213cce26f8e4bb23cf556d1479bb + '@prisma/generator-helper': 2.27.0-dev.63 + '@prisma/get-platform': 2.27.0-43.cdba6ec525e0213cce26f8e4bb23cf556d1479bb chalk: 4.1.1 execa: 5.1.1 get-stream: 6.0.1 @@ -1567,39 +1567,10 @@ packages: /@prisma/engines-version/2.27.0-43.cdba6ec525e0213cce26f8e4bb23cf556d1479bb: resolution: {integrity: sha512-pwOsYdzw8+cwKlUrCzasiRh96RhNuJ/QcKr0HwjxxlUWTmbEayDKjqRRz5fsUYIpSv5fW1B3SsbzHOqVtFZ6XQ==} - /@prisma/engines/2.27.0-42.8d5fae9e9f94c60926420216a4ca9c400c3d2947: - resolution: {integrity: sha512-yV4pBeWRPa3yj7UdP/fa1FITarDjnMESY3xDUH318kskIKnELx3K38G7NmI4JMOo3wWAU16pD6yytXspGNKNVg==} - requiresBuild: true - dev: true - /@prisma/engines/2.27.0-43.cdba6ec525e0213cce26f8e4bb23cf556d1479bb: resolution: {integrity: sha512-AIbIhAxmd2CHZO5XzQTPrfk+Tp/5eoNoSledOG3yc6Dk97siLvnBuSEv7prggUbedCufDwZLAvwxV4PEw3zOlQ==} requiresBuild: true - /@prisma/fetch-engine/2.27.0-42.8d5fae9e9f94c60926420216a4ca9c400c3d2947: - resolution: {integrity: sha512-iGMFEBGONH+wjHgGzMhI0y03RKc/ai/yVHw3T0U4mv/YfJ5qjh3wPAHEpo0UsW/PuLbFMfPIdNZMSmvyr+mrkA==} - dependencies: - '@prisma/debug': 2.26.0 - '@prisma/get-platform': 2.27.0-42.8d5fae9e9f94c60926420216a4ca9c400c3d2947 - chalk: 4.1.1 - execa: 5.1.1 - find-cache-dir: 3.3.1 - hasha: 5.2.2 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.0 - make-dir: 3.1.0 - node-fetch: 2.6.1 - p-filter: 2.1.0 - p-map: 4.0.0 - p-retry: 4.6.0 - progress: 2.0.3 - rimraf: 3.0.2 - temp-dir: 2.0.0 - tempy: 1.0.1 - transitivePeerDependencies: - - supports-color - dev: true - /@prisma/fetch-engine/2.27.0-43.cdba6ec525e0213cce26f8e4bb23cf556d1479bb: resolution: {integrity: sha512-KdZZ5hUnMrCuImhvoHNnhnTlDY76mnKdEnM4QtaTF9HptwbPWaX/NZ5hwGC6WZf3PjWYr4BiQoC0v8Q7RF88Kg==} dependencies: @@ -1623,10 +1594,10 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/generator-helper/2.27.0-dev.57: - resolution: {integrity: sha512-8saKUQ4g21/FuNKqF6qhwVYos/xB17wsbNfq0V/Q/hfO6f78/pTQWHU7aDdF7lpsJskOFbXTXHX5K9Sa2ZPFeQ==} + /@prisma/generator-helper/2.27.0-dev.63: + resolution: {integrity: sha512-Zcwk/qZkGTUuyAoVB/B0LRjHkPnTFpflHJpvPQNKLNs7m2R+tsnnnxYa5H9hrqvoHZCdebjxViiSkQO8WnIx6w==} dependencies: - '@prisma/debug': 2.27.0-dev.57 + '@prisma/debug': 2.27.0-dev.63 '@types/cross-spawn': 6.0.2 chalk: 4.1.1 cross-spawn: 7.0.3 @@ -1634,14 +1605,6 @@ packages: - supports-color dev: true - /@prisma/get-platform/2.27.0-42.8d5fae9e9f94c60926420216a4ca9c400c3d2947: - resolution: {integrity: sha512-fSsoZU2r0Zz6hQ4cIfq7ROwP+HZuwp56WZeWovFt8a0HbEF3OxMRTJgtgh2Vs2cGkCvGxQqUskRTLUUB8FULSQ==} - dependencies: - '@prisma/debug': 2.26.0 - transitivePeerDependencies: - - supports-color - dev: true - /@prisma/get-platform/2.27.0-43.cdba6ec525e0213cce26f8e4bb23cf556d1479bb: resolution: {integrity: sha512-N+akWuGHmgCaTfnD4YUum57wd4+GfOvKiTYYIMY2CIEJbxvFw/GF9v8rozl3WRZPgL+Hx3D0ZPB8E4NgvaLy0g==} dependencies: @@ -1649,15 +1612,15 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/sdk/2.27.0-dev.57: - resolution: {integrity: sha512-c8hKthd93rkAIVMeio23L5hTLd9es3YLigLzArChkm2oZQLvjx7cmBsVstIoL+ZlbWzoZ8g+QuDx5v42py6iDw==} + /@prisma/sdk/2.27.0-dev.63: + resolution: {integrity: sha512-8wi0h1SJ+NT6sJyNn9Gx1Z3Vtt0mZY6Wudsp2qOkxmB6+BnzkPgcWDgdbHDjqT6Sb57TCNBFlau1bf0l7HQ4Ww==} dependencies: - '@prisma/debug': 2.27.0-dev.57 - '@prisma/engine-core': 2.27.0-dev.57 - '@prisma/engines': 2.27.0-42.8d5fae9e9f94c60926420216a4ca9c400c3d2947 - '@prisma/fetch-engine': 2.27.0-42.8d5fae9e9f94c60926420216a4ca9c400c3d2947 - '@prisma/generator-helper': 2.27.0-dev.57 - '@prisma/get-platform': 2.27.0-42.8d5fae9e9f94c60926420216a4ca9c400c3d2947 + '@prisma/debug': 2.27.0-dev.63 + '@prisma/engine-core': 2.27.0-dev.63 + '@prisma/engines': 2.27.0-43.cdba6ec525e0213cce26f8e4bb23cf556d1479bb + '@prisma/fetch-engine': 2.27.0-43.cdba6ec525e0213cce26f8e4bb23cf556d1479bb + '@prisma/generator-helper': 2.27.0-dev.63 + '@prisma/get-platform': 2.27.0-43.cdba6ec525e0213cce26f8e4bb23cf556d1479bb '@timsuchanek/copy': 1.4.5 archiver: 4.0.2 arg: 5.0.0 @@ -1691,13 +1654,13 @@ packages: - supports-color dev: true - /@prisma/studio-pcw/0.410.0_@prisma+sdk@2.27.0-dev.57: + /@prisma/studio-pcw/0.410.0_@prisma+sdk@2.27.0-dev.63: resolution: {integrity: sha512-WiO2SFnurzsW8P9ipW3ltCWnmiEfg4k/UJfMywmU/uklAYUxJ+2dH25M8nMLDrPgo2nNQRYdmF2FDdLFNcT3gQ==} peerDependencies: '@prisma/client': '*' '@prisma/sdk': '*' dependencies: - '@prisma/sdk': 2.27.0-dev.57 + '@prisma/sdk': 2.27.0-dev.63 debug: 4.3.1 lodash: 4.17.21 transitivePeerDependencies: @@ -1707,8 +1670,8 @@ packages: /@prisma/studio-server/0.410.0: resolution: {integrity: sha512-grj5Ip5z0405utmcvXT1uCyUAq454MOxqvbkJJdCZjlilzWjKIxdaMLlGreIgIl0fsGZenZ35HjaByLx8F9Kxg==} dependencies: - '@prisma/sdk': 2.27.0-dev.57 - '@prisma/studio-pcw': 0.410.0_@prisma+sdk@2.27.0-dev.57 + '@prisma/sdk': 2.27.0-dev.63 + '@prisma/studio-pcw': 0.410.0_@prisma+sdk@2.27.0-dev.63 '@prisma/studio-transports': 0.410.0 '@sentry/node': 6.2.5 checkpoint-client: 1.1.20 @@ -1717,7 +1680,6 @@ packages: express: 4.17.1 untildify: 4.0.0 transitivePeerDependencies: - - '@prisma/client' - supports-color dev: true From 67679b5a32962622660e01769af47e18f1c7776f Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Mon, 12 Jul 2021 17:48:17 -0500 Subject: [PATCH 20/52] fix(client): type gen line breaks for tx --- .../client/src/generation/TSClient/PrismaClient.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/packages/client/src/generation/TSClient/PrismaClient.ts b/src/packages/client/src/generation/TSClient/PrismaClient.ts index 077bbfa38c6b..56484360633b 100644 --- a/src/packages/client/src/generation/TSClient/PrismaClient.ts +++ b/src/packages/client/src/generation/TSClient/PrismaClient.ts @@ -139,8 +139,11 @@ export class PrismaClient< * * Read more in our [docs](https://www.prisma.io/docs/concepts/components/prisma-client/transactions). */ - $transaction

[]>(arg: [...P]): Promise> - ${process.env.PRISMA_FORCE_LRT === 'true' ? longRunningTransactionDefinition(): ''} + $transaction

[]>(arg: [...P]): Promise>${ + process.env.PRISMA_FORCE_LRT === 'true' + ? longRunningTransactionDefinition() + : '' + } ${indent( dmmf.mappings.modelOperations From b23aa5c641c946b5eacd708d74d5d69d0fb3a85d Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Tue, 13 Jul 2021 18:57:45 -0500 Subject: [PATCH 21/52] fix(client): batching for regular tx --- .../client/src/runtime/RequestHandler.ts | 44 +++++- src/packages/client/src/runtime/Scheduler.ts | 9 +- .../client/src/runtime/getPrismaClient.ts | 136 +++++++++--------- src/packages/engine-core/src/BinaryEngine.ts | 5 +- 4 files changed, 117 insertions(+), 77 deletions(-) diff --git a/src/packages/client/src/runtime/RequestHandler.ts b/src/packages/client/src/runtime/RequestHandler.ts index 3544663ab45f..0dc2a30fe413 100644 --- a/src/packages/client/src/runtime/RequestHandler.ts +++ b/src/packages/client/src/runtime/RequestHandler.ts @@ -9,7 +9,7 @@ import { import { DataLoader } from './DataLoader' import { Client, Unpacker } from './getPrismaClient' import { EngineMiddleware } from './MiddlewareHandler' -import { Document, unpack } from './query' +import { Args, Document, unpack } from './query' import { printStack } from './utils/printStack' import { RejectOnNotFound, throwIfNotFound } from './utils/rejectOnNotFound' const debug = Debug('prisma:client:fetcher') @@ -49,7 +49,7 @@ export class RequestHandler { this.hooks = hooks this.dataloader = new DataLoader({ batchLoader: (requests) => { - const headers = {transactionId: requests[0].transactionId} + const headers = { transactionId: requests[0].transactionId } const queries = requests.map((r) => String(r.document)) return this.client._engine.requestBatch(queries, headers) @@ -60,7 +60,11 @@ export class RequestHandler { return this.client._engine.request(query, request.headers) }, batchBy: (request) => { - return `${request.transactionId}` ?? 'batch' + if (request.transactionId) { + return `transaction-${request.transactionId}` + } + + return batchFindUniqueBy(request) }, }) } @@ -213,3 +217,37 @@ export class RequestHandler { return 'RequestHandler' } } + +/** + * Determines which `findUnique` queries can be batched together so that the + * query engine can collapse/optimize the queries into a single one. This is + * especially useful for GQL to generate more efficient queries. + * + * @see https://www.prisma.io/docs/guides/performance-and-optimization/query-optimization-performance + * @param request + * @returns + */ +function batchFindUniqueBy(request: Request) { + // if it's not a findUnique query then we don't attempt optimizing + if (!request.document.children[0].name.startsWith('findUnique')) { + return undefined + } + + // we generate a string for the fields we have used in the `where` + const args = request.document.children[0].args?.args + .map((a) => { + if (a.value instanceof Args) { + return `${a.key}-${a.value.args.map((a) => a.key).join(',')}` + } + return a.key + }) + .join(',') + + // we generate a string for the fields we have used in the `includes` + const selectionSet = request.document.children[0].children!.join(',') + + // queries that share this token will be batched and collapsed alltogether + return `${request.document.children[0].name}|${args}|${selectionSet}` + // this way, the query engine will be able to collapse into a single call + // and that is because all the queries share their `where` and `includes` +} diff --git a/src/packages/client/src/runtime/Scheduler.ts b/src/packages/client/src/runtime/Scheduler.ts index 5458fd5a1c0b..6ab732080f19 100644 --- a/src/packages/client/src/runtime/Scheduler.ts +++ b/src/packages/client/src/runtime/Scheduler.ts @@ -54,8 +54,8 @@ class Scheduler { * @param taskId taskId from [[queue]] * @returns task return value */ - async wait(taskId: string): Promise { - const result = await this._results[taskId] + wait(taskId: string): Promise { + const result = this._results[taskId] // a result can only be retrieved once delete this._results[taskId] @@ -64,15 +64,14 @@ class Scheduler { } /** - * Queue and wait for task + * Queue and wait for a [[Task]] * @param task to execute * @returns task return value */ async exec(task: Task): Promise { const taskId = this.queue(task) - const result = await this.wait(taskId) - return result as R + return this.wait(taskId) as Promise } } diff --git a/src/packages/client/src/runtime/getPrismaClient.ts b/src/packages/client/src/runtime/getPrismaClient.ts index 57e023b3a6a3..63f013c2d7b4 100644 --- a/src/packages/client/src/runtime/getPrismaClient.ts +++ b/src/packages/client/src/runtime/getPrismaClient.ts @@ -140,22 +140,7 @@ export type HookParams = { args: any } - -// TODO: can we replace this with DMMF.ModelAction? -export type Action = - | 'findUnique' - | 'findFirst' - | 'findMany' - | 'create' - | 'createMany' - | 'update' - | 'updateMany' - | 'upsert' - | 'delete' - | 'deleteMany' - | 'executeRaw' - | 'queryRaw' - | 'aggregate' +export type Action = DMMF.ModelAction | 'executeRaw' | 'queryRaw' export type InternalRequestParams = { /** @@ -274,8 +259,8 @@ export interface Client { _errorFormat: ErrorFormat $use( arg0: Namespace | QueryMiddleware, - arg1?: QueryMiddleware | EngineMiddleware - ); + arg1?: QueryMiddleware | EngineMiddleware, + ) $on(eventType: EngineEventType, callback: (event: any) => void) $connect() $disconnect() @@ -284,7 +269,7 @@ export interface Client { stringOrTemplateStringsArray: | ReadonlyArray | string - | sqlTemplateTag.Sql + | sqlTemplateTag.Sql, ) $queryRaw(stringOrTemplateStringsArray) __internal_triggerPanic(fatal: boolean) @@ -991,10 +976,10 @@ new PrismaClient({ */ private async _transaction(input: any, options?: any) { if (typeof input === 'function') { - return await this._transactionWithCallback(input, options) + return this._transactionWithCallback(input, options) } - return await this._transactionWithRequests(input, options) + return this._transactionWithRequests(input, options) } /** @@ -1004,46 +989,53 @@ new PrismaClient({ * @returns */ private async _transactionWithCallback( - callback: (client: PrismaClient) => Promise, + callback: (client: Client) => Promise, options?: { maxWait: number; timeout: number }, ) { // transactions are inlined through their scheduler - return await this._transactionScheduler.exec(async () => { + return this._transactionScheduler.exec(async () => { // we ask the query engine to open a transaction const info = await this._engine.transaction('start', options) let result: unknown try { - result = await callback(this) // execute logic + // execute user logic with a proxied the client + result = await callback(transactionProxy(this, info.id)) - // it went well then we commit the transaction + // it went well, then we commit the transaction await this._engine.transaction('commit', info) } catch (e) { - // it went bad then we rollback the transaction + // it went bad, then we rollback the transaction await this._engine.transaction('rollback', info) throw e } - return await result + return result }) } /** - * Execute a batch of requests in a LRT + * Execute a batch of requests in a transaction * @param requests * @param options */ private async _transactionWithRequests( - requests: Array, + requests: Array>, options?: { maxWait: number; timeout: number }, ) { - return await this._transactionWithCallback(async () => { - // we execute all of the requests one by one - for (const request of requests) await request + return this._transactionWithCallback(async (prisma) => { + const transactionId: string = prisma[TX_ID] // some proxy magic + + const _requests = requests.map((request) => { + return new Promise((resolve, reject) => { + // each request has already been called with `prisma.` + // so we inject `transactionId` by intercepting that promise + ;(request as any).then(resolve, reject, transactionId) + }) + }) - // we return the result of the last request - return requests[requests.length - 1] + return Promise.all(_requests) // get results from `BatchLoader` }, options) } @@ -1239,7 +1231,7 @@ new PrismaClient({ const requestModelName = modelName ?? model.name const clientImplementation = { - then: (onfulfilled, onrejected) => { + then: (onfulfilled, onrejected, transactionId?: number) => { if (!requestPromise) { requestPromise = this._request({ args, @@ -1249,6 +1241,7 @@ new PrismaClient({ clientMethod, callsite, runInTransaction: false, + transactionId: transactionId, unpacker, }) } @@ -1272,38 +1265,8 @@ new PrismaClient({ return requestPromise }, - catch: (onrejected) => { - if (!requestPromise) { - requestPromise = this._request({ - args, - dataPath, - action: actionName, - model: requestModelName, - clientMethod, - callsite, - runInTransaction: false, - unpacker, - }) - } - - return requestPromise.catch(onrejected) - }, - finally: (onfinally) => { - if (!requestPromise) { - requestPromise = this._request({ - args, - dataPath, - action: actionName, - model: requestModelName, - clientMethod, - callsite, - runInTransaction: false, - unpacker, - }) - } - - return requestPromise.finally(onfinally) - }, + catch: (onrejected) => requestPromise?.catch(onrejected), + finally: (onfinally) => requestPromise?.finally(onfinally), } // add relation fields @@ -1505,9 +1468,46 @@ new PrismaClient({ } } - return PrismaClient as (new (optionsArg?: PrismaClientOptions) => Client) + return PrismaClient as new (optionsArg?: PrismaClientOptions) => Client +} + +/** + * Proxy that takes over client promises to pass `transactionId` + * @param thing to be proxied + * @param transactionId to be passed down to `_query` + * @returns + */ +function transactionProxy(thing: T, transactionId: string): T { + // we only wrap within a proxy if it's posible, if it's an object + if (typeof thing !== 'object') return thing + + return new Proxy(thing as any as object, { + get: (target, prop) => { + // secret accessor to get the `transactionId` in a transaction + if (prop === TX_ID) return transactionId + + if (typeof target[prop] === 'function') { + // we override & handle every function call within the proxy + return (...args: unknown[]) => { + if (prop === 'then') { + // this is our promise, we pass it an extra info argument + // this will call "our" `then` which will call `_request` + return target[prop](...args, transactionId) + } + + // if it's not the end promise, continue wrapping as it goes + return transactionProxy(target[prop](...args), transactionId) + } + } + + // probably an object, not the end, continue wrapping as it goes + return transactionProxy(target[prop], transactionId) + }, + }) as any as T } +const TX_ID = Symbol.for('prisma.client.tx_id') + export function getOperation(action: DMMF.ModelAction): 'query' | 'mutation' { if ( action === DMMF.ModelAction.findMany || diff --git a/src/packages/engine-core/src/BinaryEngine.ts b/src/packages/engine-core/src/BinaryEngine.ts index 23023a91ee8a..3029adf30ac2 100644 --- a/src/packages/engine-core/src/BinaryEngine.ts +++ b/src/packages/engine-core/src/BinaryEngine.ts @@ -43,7 +43,10 @@ import { printGeneratorConfig } from './printGeneratorConfig' import { Connection, Result } from './Connection' import { fixBinaryTargets, getRandomString, plusX } from './util' import type * as Tx from './definitions/Transaction' -import { QueryEngineRequestHeaders, QueryEngineResult } from './NodeAPILibraryTypes' +import { + QueryEngineRequestHeaders, + QueryEngineResult, +} from './NodeAPILibraryTypes' const debug = Debug('prisma:engine') const exists = promisify(fs.exists) From 28d9cf36867be16d8da15bbe3b088ae6d5ec2a19 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Tue, 20 Jul 2021 22:15:51 -0500 Subject: [PATCH 22/52] refactor(engine-core): organize --- .../client/src/__tests__/binaryEngine.test.ts | 3 +- .../happy/long-running-transaction/test.ts | 6 +- .../integration/happy/restart/test.ts | 4 +- .../client/src/runtime/getPrismaClient.ts | 6 +- .../src/{ => binary}/BinaryEngine.ts | 32 ++- .../src/{ => binary}/Connection.ts | 0 .../engine-core/src/{ => common}/Engine.ts | 17 +- .../errors/PrismaClientInitializationError.ts | 14 ++ .../errors/PrismaClientKnownRequestError.ts | 21 ++ .../common/errors/PrismaClientRustError.ts | 28 +++ .../errors/PrismaClientRustPanicError.ts | 12 + .../errors/PrismaClientUnknownRequestError.ts | 12 + .../common/errors/types/ErrorWithLinkInput.ts | 11 + .../errors/types/PrismaClientRustErrorArgs.ts | 7 + .../src/common/errors/types/RequestError.ts | 9 + .../errors/utils/getErrorMessageWithLink.ts | 69 ++++++ .../src/{ => common/errors/utils}/log.ts | 0 .../{ => common/errors/utils}/maskQuery.ts | 0 .../src/common/errors/utils/normalizeLogs.ts | 17 ++ .../types/QueryEngine.ts} | 45 +--- .../types}/Transaction.ts | 0 .../utils}/getInternalDatamodelJson.ts | 2 +- .../utils}/printGeneratorConfig.ts | 0 .../src/{ => common/utils}/util.ts | 0 src/packages/engine-core/src/errors.ts | 207 ------------------ src/packages/engine-core/src/index.ts | 30 +-- .../src/{ => library}/LibraryEngine.ts | 31 ++- .../engine-core/src/library/types/Library.ts | 43 ++++ .../engine-core/src/{ => tools}/byline.ts | 11 +- .../engine-core/src/{ => tools}/omit.ts | 0 .../sdk/src/__tests__/__utils__/fixtures.ts | 4 +- src/packages/sdk/src/resolveBinary.ts | 2 +- src/packages/sdk/src/utils/load.ts | 4 +- src/pnpm-lock.yaml | 92 ++++++-- 34 files changed, 401 insertions(+), 338 deletions(-) rename src/packages/engine-core/src/{ => binary}/BinaryEngine.ts (97%) rename src/packages/engine-core/src/{ => binary}/Connection.ts (100%) rename src/packages/engine-core/src/{ => common}/Engine.ts (83%) create mode 100644 src/packages/engine-core/src/common/errors/PrismaClientInitializationError.ts create mode 100644 src/packages/engine-core/src/common/errors/PrismaClientKnownRequestError.ts create mode 100644 src/packages/engine-core/src/common/errors/PrismaClientRustError.ts create mode 100644 src/packages/engine-core/src/common/errors/PrismaClientRustPanicError.ts create mode 100644 src/packages/engine-core/src/common/errors/PrismaClientUnknownRequestError.ts create mode 100644 src/packages/engine-core/src/common/errors/types/ErrorWithLinkInput.ts create mode 100644 src/packages/engine-core/src/common/errors/types/PrismaClientRustErrorArgs.ts create mode 100644 src/packages/engine-core/src/common/errors/types/RequestError.ts create mode 100644 src/packages/engine-core/src/common/errors/utils/getErrorMessageWithLink.ts rename src/packages/engine-core/src/{ => common/errors/utils}/log.ts (100%) rename src/packages/engine-core/src/{ => common/errors/utils}/maskQuery.ts (100%) create mode 100644 src/packages/engine-core/src/common/errors/utils/normalizeLogs.ts rename src/packages/engine-core/src/{NodeAPILibraryTypes.ts => common/types/QueryEngine.ts} (70%) rename src/packages/engine-core/src/{definitions => common/types}/Transaction.ts (100%) rename src/packages/engine-core/src/{ => common/utils}/getInternalDatamodelJson.ts (96%) rename src/packages/engine-core/src/{ => common/utils}/printGeneratorConfig.ts (100%) rename src/packages/engine-core/src/{ => common/utils}/util.ts (100%) delete mode 100644 src/packages/engine-core/src/errors.ts rename src/packages/engine-core/src/{ => library}/LibraryEngine.ts (95%) create mode 100644 src/packages/engine-core/src/library/types/Library.ts rename src/packages/engine-core/src/{ => tools}/byline.ts (94%) rename src/packages/engine-core/src/{ => tools}/omit.ts (100%) diff --git a/src/packages/client/src/__tests__/binaryEngine.test.ts b/src/packages/client/src/__tests__/binaryEngine.test.ts index 2707f3e45b4c..6212eaa12036 100644 --- a/src/packages/client/src/__tests__/binaryEngine.test.ts +++ b/src/packages/client/src/__tests__/binaryEngine.test.ts @@ -1,9 +1,8 @@ -import { BinaryEngine } from '@prisma/engine-core/dist/BinaryEngine' +import { BinaryEngine } from '@prisma/engine-core' import path from 'path' describe('BinaryEngine', () => { test('should error correctly with invalid flags', async () => { - // Skip for Node-API library // TODO Better scoping when to run this test so this conditional is not necessary if (process.env.PRISMA_FORCE_NAPI === 'true') { diff --git a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts index 77466211bbae..7b6393521a92 100644 --- a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts +++ b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts @@ -12,14 +12,14 @@ test('long-running transaction', async () => { email: 'test@hey.com', }, }), - (new Promise((res) => setTimeout(res, 1000))) as any, + new Promise((res) => setTimeout(res, 1000)) as any, prisma.user.create({ data: { email: 'test@hey.com', }, - }) + }), ]) - + console.log(result) await prisma.$disconnect() diff --git a/src/packages/client/src/__tests__/integration/happy/restart/test.ts b/src/packages/client/src/__tests__/integration/happy/restart/test.ts index 1359e8e2c74b..2b095bb96a48 100644 --- a/src/packages/client/src/__tests__/integration/happy/restart/test.ts +++ b/src/packages/client/src/__tests__/integration/happy/restart/test.ts @@ -3,7 +3,7 @@ import { getTestClient } from '../../../../utils/getTestClient' // Does Prisma Client restart the QE when it is killed for some reason? test('restart', async () => { // No child process for Node-API, so nothing that can be killed or tested - if(process.env.PRISMA_FORCE_NAPI === 'true') { + if (process.env.PRISMA_FORCE_NAPI === 'true') { return } @@ -25,7 +25,7 @@ test('restart', async () => { db._engine.child.kill() await new Promise((r) => setTimeout(r, 200)) } - + const result2 = await db.user.findMany() expect(result2).toMatchInlineSnapshot(` Array [ diff --git a/src/packages/client/src/runtime/getPrismaClient.ts b/src/packages/client/src/runtime/getPrismaClient.ts index 63f013c2d7b4..9f3943707ed1 100644 --- a/src/packages/client/src/runtime/getPrismaClient.ts +++ b/src/packages/client/src/runtime/getPrismaClient.ts @@ -4,9 +4,9 @@ import { Engine, EngineConfig, EngineEventType, -} from '@prisma/engine-core/dist/Engine' -import { LibraryEngine } from '@prisma/engine-core/dist/LibraryEngine' -import { BinaryEngine } from '@prisma/engine-core/dist/BinaryEngine' +} from '@prisma/engine-core' +import { LibraryEngine } from '@prisma/engine-core' +import { BinaryEngine } from '@prisma/engine-core' import { DataSource, GeneratorConfig, diff --git a/src/packages/engine-core/src/BinaryEngine.ts b/src/packages/engine-core/src/binary/BinaryEngine.ts similarity index 97% rename from src/packages/engine-core/src/BinaryEngine.ts rename to src/packages/engine-core/src/binary/BinaryEngine.ts index 3029adf30ac2..7657dad2e506 100644 --- a/src/packages/engine-core/src/BinaryEngine.ts +++ b/src/packages/engine-core/src/binary/BinaryEngine.ts @@ -13,23 +13,21 @@ import path from 'path' import { Readable } from 'stream' import { URL } from 'url' import { promisify } from 'util' -import byline from './byline' +import byline from '../tools/byline' import { DatasourceOverwrite, Engine, EngineConfig, EngineEventType, GetConfigResult, -} from './Engine' -import { - getErrorMessageWithLink, - PrismaClientInitializationError, - PrismaClientKnownRequestError, - PrismaClientRustError, - PrismaClientRustPanicError, - PrismaClientUnknownRequestError, - RequestError, -} from './errors' +} from '../common/Engine' +import { RequestError } from '../common/errors/types/RequestError' +import { PrismaClientKnownRequestError } from '../common/errors/PrismaClientKnownRequestError' +import { PrismaClientInitializationError } from '../common/errors/PrismaClientInitializationError' +import { PrismaClientRustError } from '../common/errors/PrismaClientRustError' +import { PrismaClientRustPanicError } from '../common/errors/PrismaClientRustPanicError' +import { PrismaClientUnknownRequestError } from '../common/errors/PrismaClientUnknownRequestError' +import { getErrorMessageWithLink } from '../common/errors/utils/getErrorMessageWithLink' import { convertLog, getMessage, @@ -37,16 +35,16 @@ import { isRustErrorLog, RustError, RustLog, -} from './log' -import { omit } from './omit' -import { printGeneratorConfig } from './printGeneratorConfig' +} from '../common/errors/utils/log' +import { omit } from '../tools/omit' +import { printGeneratorConfig } from '../common/utils/printGeneratorConfig' import { Connection, Result } from './Connection' -import { fixBinaryTargets, getRandomString, plusX } from './util' -import type * as Tx from './definitions/Transaction' +import { fixBinaryTargets, getRandomString, plusX } from '../common/utils/util' +import type * as Tx from '../common/types/Transaction' import { QueryEngineRequestHeaders, QueryEngineResult, -} from './NodeAPILibraryTypes' +} from '../common/types/QueryEngine' const debug = Debug('prisma:engine') const exists = promisify(fs.exists) diff --git a/src/packages/engine-core/src/Connection.ts b/src/packages/engine-core/src/binary/Connection.ts similarity index 100% rename from src/packages/engine-core/src/Connection.ts rename to src/packages/engine-core/src/binary/Connection.ts diff --git a/src/packages/engine-core/src/Engine.ts b/src/packages/engine-core/src/common/Engine.ts similarity index 83% rename from src/packages/engine-core/src/Engine.ts rename to src/packages/engine-core/src/common/Engine.ts index 8b43e58154cb..46d86c01eba8 100644 --- a/src/packages/engine-core/src/Engine.ts +++ b/src/packages/engine-core/src/common/Engine.ts @@ -1,6 +1,9 @@ import { DataSource, GeneratorConfig } from '@prisma/generator-helper' -import type * as Transaction from './definitions/Transaction' -import { QueryEngineRequestHeaders, QueryEngineResult } from './NodeAPILibraryTypes' +import type * as Transaction from './types/Transaction' +import { + QueryEngineRequestHeaders, + QueryEngineResult, +} from './types/QueryEngine' export interface FilterConstructor { new (config: EngineConfig): Engine @@ -24,9 +27,15 @@ export abstract class Engine { transaction?: boolean, numTry?: number, ): Promise[]> - abstract transaction(action: 'start', options?: Transaction.Options): Promise + abstract transaction( + action: 'start', + options?: Transaction.Options, + ): Promise abstract transaction(action: 'commit', info: Transaction.Info): Promise - abstract transaction(action: 'rollback', info: Transaction.Info): Promise + abstract transaction( + action: 'rollback', + info: Transaction.Info, + ): Promise } export type EngineEventType = 'query' | 'info' | 'warn' | 'error' | 'beforeExit' diff --git a/src/packages/engine-core/src/common/errors/PrismaClientInitializationError.ts b/src/packages/engine-core/src/common/errors/PrismaClientInitializationError.ts new file mode 100644 index 000000000000..9077bb4c434d --- /dev/null +++ b/src/packages/engine-core/src/common/errors/PrismaClientInitializationError.ts @@ -0,0 +1,14 @@ +export class PrismaClientInitializationError extends Error { + clientVersion: string + errorCode?: string + + constructor(message: string, clientVersion: string, errorCode?: string) { + super(message) + this.clientVersion = clientVersion + this.errorCode = errorCode + Error.captureStackTrace(PrismaClientInitializationError) + } + get [Symbol.toStringTag]() { + return 'PrismaClientInitializationError' + } +} diff --git a/src/packages/engine-core/src/common/errors/PrismaClientKnownRequestError.ts b/src/packages/engine-core/src/common/errors/PrismaClientKnownRequestError.ts new file mode 100644 index 000000000000..1b6919da0b9c --- /dev/null +++ b/src/packages/engine-core/src/common/errors/PrismaClientKnownRequestError.ts @@ -0,0 +1,21 @@ +export class PrismaClientKnownRequestError extends Error { + code: string + meta?: object + clientVersion: string + + constructor( + message: string, + code: string, + clientVersion: string, + meta?: any, + ) { + super(message) + + this.code = code + this.clientVersion = clientVersion + this.meta = meta + } + get [Symbol.toStringTag]() { + return 'PrismaClientKnownRequestError' + } +} diff --git a/src/packages/engine-core/src/common/errors/PrismaClientRustError.ts b/src/packages/engine-core/src/common/errors/PrismaClientRustError.ts new file mode 100644 index 000000000000..d76edb5fb359 --- /dev/null +++ b/src/packages/engine-core/src/common/errors/PrismaClientRustError.ts @@ -0,0 +1,28 @@ +import { getBacktraceFromLog, getBacktraceFromRustError } from './utils/log' +import { PrismaClientRustErrorArgs } from './types/PrismaClientRustErrorArgs' + +/** + * A generic Prisma Client Rust error. + * This error is being exposed via the `prisma.$on('error')` interface + */ +export class PrismaClientRustError extends Error { + clientVersion: string + + constructor({ clientVersion, log, error }: PrismaClientRustErrorArgs) { + if (log) { + const backtrace = getBacktraceFromLog(log) + super(backtrace ?? 'Unkown error') + } else if (error) { + const backtrace = getBacktraceFromRustError(error) + super(backtrace) + } else { + // this should never happen + super(`Unknown error`) + } + + this.clientVersion = clientVersion + } + get [Symbol.toStringTag]() { + return 'PrismaClientRustPanicError' + } +} diff --git a/src/packages/engine-core/src/common/errors/PrismaClientRustPanicError.ts b/src/packages/engine-core/src/common/errors/PrismaClientRustPanicError.ts new file mode 100644 index 000000000000..99873318f64d --- /dev/null +++ b/src/packages/engine-core/src/common/errors/PrismaClientRustPanicError.ts @@ -0,0 +1,12 @@ +export class PrismaClientRustPanicError extends Error { + clientVersion: string + + constructor(message: string, clientVersion: string) { + super(message) + + this.clientVersion = clientVersion + } + get [Symbol.toStringTag]() { + return 'PrismaClientRustPanicError' + } +} diff --git a/src/packages/engine-core/src/common/errors/PrismaClientUnknownRequestError.ts b/src/packages/engine-core/src/common/errors/PrismaClientUnknownRequestError.ts new file mode 100644 index 000000000000..b0fca3a2f92e --- /dev/null +++ b/src/packages/engine-core/src/common/errors/PrismaClientUnknownRequestError.ts @@ -0,0 +1,12 @@ +export class PrismaClientUnknownRequestError extends Error { + clientVersion: string + + constructor(message: string, clientVersion: string) { + super(message) + + this.clientVersion = clientVersion + } + get [Symbol.toStringTag]() { + return 'PrismaClientUnknownRequestError' + } +} diff --git a/src/packages/engine-core/src/common/errors/types/ErrorWithLinkInput.ts b/src/packages/engine-core/src/common/errors/types/ErrorWithLinkInput.ts new file mode 100644 index 000000000000..4dbf7810c2ab --- /dev/null +++ b/src/packages/engine-core/src/common/errors/types/ErrorWithLinkInput.ts @@ -0,0 +1,11 @@ +import { ConnectorType } from '@prisma/generator-helper' + +export interface ErrorWithLinkInput { + version: string + engineVersion?: string + database?: ConnectorType + query?: string + platform?: string + title: string + description?: string +} diff --git a/src/packages/engine-core/src/common/errors/types/PrismaClientRustErrorArgs.ts b/src/packages/engine-core/src/common/errors/types/PrismaClientRustErrorArgs.ts new file mode 100644 index 000000000000..bcaf616cb795 --- /dev/null +++ b/src/packages/engine-core/src/common/errors/types/PrismaClientRustErrorArgs.ts @@ -0,0 +1,7 @@ +import { RustLog, RustError } from '../utils/log' + +export type PrismaClientRustErrorArgs = { + clientVersion: string + log?: RustLog + error?: RustError +} diff --git a/src/packages/engine-core/src/common/errors/types/RequestError.ts b/src/packages/engine-core/src/common/errors/types/RequestError.ts new file mode 100644 index 000000000000..41f4cecabf93 --- /dev/null +++ b/src/packages/engine-core/src/common/errors/types/RequestError.ts @@ -0,0 +1,9 @@ +export interface RequestError { + error: string + user_facing_error: { + is_panic: boolean + message: string + meta?: object + error_code?: string + } +} diff --git a/src/packages/engine-core/src/common/errors/utils/getErrorMessageWithLink.ts b/src/packages/engine-core/src/common/errors/utils/getErrorMessageWithLink.ts new file mode 100644 index 000000000000..2b8dd6b99db0 --- /dev/null +++ b/src/packages/engine-core/src/common/errors/utils/getErrorMessageWithLink.ts @@ -0,0 +1,69 @@ +import { getLogs } from '@prisma/debug' +import { getGithubIssueUrl, link } from '../../utils/util' +import stripAnsi from 'strip-ansi' +import { maskQuery } from './maskQuery' +import { normalizeLogs } from './normalizeLogs' +import { ErrorWithLinkInput } from '../types/ErrorWithLinkInput' + +export function getErrorMessageWithLink({ + version, + platform, + title, + description, + engineVersion, + database, + query, +}: ErrorWithLinkInput) { + const gotLogs = getLogs(6000 - (query?.length ?? 0)) + const logs = normalizeLogs(stripAnsi(gotLogs)) + const moreInfo = description + ? `# Description\n\`\`\`\n${description}\n\`\`\`` + : '' + const body = stripAnsi( + `Hi Prisma Team! My Prisma Client just crashed. This is the report: +## Versions + +| Name | Version | +|-----------------|--------------------| +| Node | ${process.version?.padEnd(19)}| +| OS | ${platform?.padEnd(19)}| +| Prisma Client | ${version?.padEnd(19)}| +| Query Engine | ${engineVersion?.padEnd(19)}| +| Database | ${database?.padEnd(19)}| + +${moreInfo} + +## Query +\`\`\` +${query ? maskQuery(query) : ''} +\`\`\` + +## Logs +\`\`\` +${logs} +\`\`\` + +## Client Snippet +\`\`\`ts +// PLEASE FILL YOUR CODE SNIPPET HERE +\`\`\` + +## Schema +\`\`\`prisma +// PLEASE ADD YOUR SCHEMA HERE IF POSSIBLE +\`\`\` +`, + ) + + const url = getGithubIssueUrl({ title, body }) + return `${title} + +This is a non-recoverable error which probably happens when the Prisma Query Engine has a panic. + +${link(url)} + +If you want the Prisma team to look into it, please open the link above 🙏 +To increase the chance of success, please post your schema and a snippet of +how you used Prisma Client in the issue. +` +} diff --git a/src/packages/engine-core/src/log.ts b/src/packages/engine-core/src/common/errors/utils/log.ts similarity index 100% rename from src/packages/engine-core/src/log.ts rename to src/packages/engine-core/src/common/errors/utils/log.ts diff --git a/src/packages/engine-core/src/maskQuery.ts b/src/packages/engine-core/src/common/errors/utils/maskQuery.ts similarity index 100% rename from src/packages/engine-core/src/maskQuery.ts rename to src/packages/engine-core/src/common/errors/utils/maskQuery.ts diff --git a/src/packages/engine-core/src/common/errors/utils/normalizeLogs.ts b/src/packages/engine-core/src/common/errors/utils/normalizeLogs.ts new file mode 100644 index 000000000000..a96f0c36958a --- /dev/null +++ b/src/packages/engine-core/src/common/errors/utils/normalizeLogs.ts @@ -0,0 +1,17 @@ +/** + * Removes the leading timestamps (from docker) and trailing ms (from debug) + * @param logs logs to normalize + */ +export function normalizeLogs(logs: string): string { + return logs + .split('\n') + .map((l) => { + return l + .replace( + /^\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)\s*/, + '', + ) + .replace(/\+\d+\s*ms$/, '') + }) + .join('\n') +} diff --git a/src/packages/engine-core/src/NodeAPILibraryTypes.ts b/src/packages/engine-core/src/common/types/QueryEngine.ts similarity index 70% rename from src/packages/engine-core/src/NodeAPILibraryTypes.ts rename to src/packages/engine-core/src/common/types/QueryEngine.ts index 8f1f3cb29707..7348a6d4bcc0 100644 --- a/src/packages/engine-core/src/NodeAPILibraryTypes.ts +++ b/src/packages/engine-core/src/common/types/QueryEngine.ts @@ -11,6 +11,7 @@ export type QueryEngineLogEvent = { module_path: string message: string } + export type QueryEngineQueryEvent = { level: 'info' module_path: string @@ -20,6 +21,7 @@ export type QueryEngineQueryEvent = { duration_ms: string result: string } + export type QueryEnginePanicEvent = { level: 'error' module_path: string @@ -29,6 +31,7 @@ export type QueryEnginePanicEvent = { line: string column: string } + // Configuration export type QueryEngineLogLevel = | 'trace' @@ -37,6 +40,7 @@ export type QueryEngineLogLevel = | 'warn' | 'error' | 'off' + export type QueryEngineConfig = { datamodel: string configDir: string @@ -47,13 +51,11 @@ export type QueryEngineConfig = { logLevel: QueryEngineLogLevel telemetry?: QueryEngineTelemetry } + export type QueryEngineTelemetry = { enabled: Boolean endpoint: string } -export type ConnectArgs = { - enableRawQueries: boolean -} export type QueryEngineRequest = { query: string @@ -74,16 +76,19 @@ export type QueryEngineBatchRequest = { batch: QueryEngineRequest[] transaction: boolean } + export type GetConfigOptions = { datamodel: string ignoreEnvVarErrors: boolean datasourceOverrides: Record env: NodeJS.ProcessEnv | Record } + export type GetDMMFOptions = { datamodel: string enableRawQueries: boolean } + // Errors export type SyncRustError = { is_panic: boolean @@ -99,45 +104,13 @@ export type RustRequestError = { message: string backtrace: string } + // Responses export type ConfigMetaFormat = { datasources: DataSource[] generators: GeneratorConfig[] warnings: string[] } -// Main -export type Library = { - QueryEngine: QueryEngineConstructor - version: () => { - commit: string - version: string - } - getConfig: (options: GetConfigOptions) => Promise - /** - * This returns a string representation of `DMMF.Document` - */ - dmmf: (datamodel: string) => Promise -} - -export interface QueryEngineConstructor { - new ( - config: QueryEngineConfig, - logger: (err: string, log: string) => void, - ): QueryEngine -} - -export type QueryEngine = { - connect(connectArgs: ConnectArgs): Promise - disconnect(): Promise - /** - * - * @param request JSON.stringified `QueryEngineRequest | QueryEngineBatchRequest` - * - * @param headers JSON.stringified `QueryEngineRequestHeaders` - */ - query(request: string, headers: string): Promise - sdlSchema(): Promise -} export type ServerInfo = { commit: string diff --git a/src/packages/engine-core/src/definitions/Transaction.ts b/src/packages/engine-core/src/common/types/Transaction.ts similarity index 100% rename from src/packages/engine-core/src/definitions/Transaction.ts rename to src/packages/engine-core/src/common/types/Transaction.ts diff --git a/src/packages/engine-core/src/getInternalDatamodelJson.ts b/src/packages/engine-core/src/common/utils/getInternalDatamodelJson.ts similarity index 96% rename from src/packages/engine-core/src/getInternalDatamodelJson.ts rename to src/packages/engine-core/src/common/utils/getInternalDatamodelJson.ts index 03c735f2b743..9a3f940a1ba9 100644 --- a/src/packages/engine-core/src/getInternalDatamodelJson.ts +++ b/src/packages/engine-core/src/common/utils/getInternalDatamodelJson.ts @@ -1,6 +1,6 @@ import path from 'path' import { spawn } from 'child_process' -import byline from './byline' +import byline from '../../tools/byline' export function getInternalDatamodelJson( datamodel: string, diff --git a/src/packages/engine-core/src/printGeneratorConfig.ts b/src/packages/engine-core/src/common/utils/printGeneratorConfig.ts similarity index 100% rename from src/packages/engine-core/src/printGeneratorConfig.ts rename to src/packages/engine-core/src/common/utils/printGeneratorConfig.ts diff --git a/src/packages/engine-core/src/util.ts b/src/packages/engine-core/src/common/utils/util.ts similarity index 100% rename from src/packages/engine-core/src/util.ts rename to src/packages/engine-core/src/common/utils/util.ts diff --git a/src/packages/engine-core/src/errors.ts b/src/packages/engine-core/src/errors.ts deleted file mode 100644 index 2f5c10113ad3..000000000000 --- a/src/packages/engine-core/src/errors.ts +++ /dev/null @@ -1,207 +0,0 @@ -import { - RustLog, - RustError, - getBacktraceFromLog, - getBacktraceFromRustError, -} from './log' -import { getLogs } from '@prisma/debug' -import { getGithubIssueUrl, link } from './util' -import stripAnsi from 'strip-ansi' -import { ConnectorType } from '@prisma/generator-helper' -import { maskQuery } from './maskQuery' - -export interface RequestError { - error: string - user_facing_error: { - is_panic: boolean - message: string - meta?: object - error_code?: string - } -} - -export class PrismaClientKnownRequestError extends Error { - code: string - meta?: object - clientVersion: string - - constructor( - message: string, - code: string, - clientVersion: string, - meta?: any, - ) { - super(message) - - this.code = code - this.clientVersion = clientVersion - this.meta = meta - } - get [Symbol.toStringTag]() { - return 'PrismaClientKnownRequestError' - } -} - -export class PrismaClientUnknownRequestError extends Error { - clientVersion: string - - constructor(message: string, clientVersion: string) { - super(message) - - this.clientVersion = clientVersion - } - get [Symbol.toStringTag]() { - return 'PrismaClientUnknownRequestError' - } -} - -export class PrismaClientRustPanicError extends Error { - clientVersion: string - - constructor(message: string, clientVersion: string) { - super(message) - - this.clientVersion = clientVersion - } - get [Symbol.toStringTag]() { - return 'PrismaClientRustPanicError' - } -} - -export type PrismaClientRustErrorArgs = { - clientVersion: string - log?: RustLog - error?: RustError -} - -/** - * A generic Prisma Client Rust error. - * This error is being exposed via the `prisma.$on('error')` interface - */ -export class PrismaClientRustError extends Error { - clientVersion: string - - constructor({ clientVersion, log, error }: PrismaClientRustErrorArgs) { - if (log) { - const backtrace = getBacktraceFromLog(log) - super(backtrace ?? 'Unkown error') - } else if (error) { - const backtrace = getBacktraceFromRustError(error) - super(backtrace) - } else { - // this should never happen - super(`Unknown error`) - } - - this.clientVersion = clientVersion - } - get [Symbol.toStringTag]() { - return 'PrismaClientRustPanicError' - } -} - -export class PrismaClientInitializationError extends Error { - clientVersion: string - errorCode?: string - - constructor(message: string, clientVersion: string, errorCode?: string) { - super(message) - this.clientVersion = clientVersion - this.errorCode = errorCode - Error.captureStackTrace(PrismaClientInitializationError) - } - get [Symbol.toStringTag]() { - return 'PrismaClientInitializationError' - } -} - -export interface ErrorWithLinkInput { - version: string - engineVersion?: string - database?: ConnectorType - query?: string - platform?: string - title: string - description?: string -} - -export function getErrorMessageWithLink({ - version, - platform, - title, - description, - engineVersion, - database, - query, -}: ErrorWithLinkInput) { - const gotLogs = getLogs(6000 - (query?.length ?? 0)) - const logs = normalizeLogs(stripAnsi(gotLogs)) - const moreInfo = description - ? `# Description\n\`\`\`\n${description}\n\`\`\`` - : '' - const body = stripAnsi( - `Hi Prisma Team! My Prisma Client just crashed. This is the report: -## Versions - -| Name | Version | -|-----------------|--------------------| -| Node | ${process.version?.padEnd(19)}| -| OS | ${platform?.padEnd(19)}| -| Prisma Client | ${version?.padEnd(19)}| -| Query Engine | ${engineVersion?.padEnd(19)}| -| Database | ${database?.padEnd(19)}| - -${moreInfo} - -## Query -\`\`\` -${query ? maskQuery(query) : ''} -\`\`\` - -## Logs -\`\`\` -${logs} -\`\`\` - -## Client Snippet -\`\`\`ts -// PLEASE FILL YOUR CODE SNIPPET HERE -\`\`\` - -## Schema -\`\`\`prisma -// PLEASE ADD YOUR SCHEMA HERE IF POSSIBLE -\`\`\` -`, - ) - - const url = getGithubIssueUrl({ title, body }) - return `${title} - -This is a non-recoverable error which probably happens when the Prisma Query Engine has a panic. - -${link(url)} - -If you want the Prisma team to look into it, please open the link above 🙏 -To increase the chance of success, please post your schema and a snippet of -how you used Prisma Client in the issue. -` -} - -/** - * Removes the leading timestamps (from docker) and trailing ms (from debug) - * @param logs logs to normalize - */ -function normalizeLogs(logs: string): string { - return logs - .split('\n') - .map((l) => { - return l - .replace( - /^\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)\s*/, - '', - ) - .replace(/\+\d+\s*ms$/, '') - }) - .join('\n') -} diff --git a/src/packages/engine-core/src/index.ts b/src/packages/engine-core/src/index.ts index 506772c5a917..30122b163e4a 100644 --- a/src/packages/engine-core/src/index.ts +++ b/src/packages/engine-core/src/index.ts @@ -1,16 +1,20 @@ -export { - PrismaClientInitializationError, - PrismaClientKnownRequestError, - PrismaClientRustPanicError, - PrismaClientUnknownRequestError, -} from './errors' -export { getInternalDatamodelJson } from './getInternalDatamodelJson' -export { LibraryEngine } from './LibraryEngine' -export { BinaryEngine } from './BinaryEngine' -export { Engine } from './Engine' +export { PrismaClientInitializationError } from './common/errors/PrismaClientInitializationError' +export { PrismaClientKnownRequestError } from './common/errors/PrismaClientKnownRequestError' +export { PrismaClientRustPanicError } from './common/errors/PrismaClientRustPanicError' +export { PrismaClientUnknownRequestError } from './common/errors/PrismaClientUnknownRequestError' + +export { Engine } from './common/Engine' +export { EngineConfig } from './common/Engine' +export { EngineEventType } from './common/Engine' +export { DatasourceOverwrite } from './common/Engine' +export { LibraryEngine } from './library/LibraryEngine' +export { BinaryEngine } from './binary/BinaryEngine' +export * as NodeAPILibraryTypes from './library/types/Library' + export { printGeneratorConfig, getOriginalBinaryTargetsValue, -} from './printGeneratorConfig' -export * as NodeAPILibraryTypes from './NodeAPILibraryTypes' -export { fixBinaryTargets } from './util' +} from './common/utils/printGeneratorConfig' +export { getInternalDatamodelJson } from './common/utils/getInternalDatamodelJson' +export { fixBinaryTargets } from './common/utils/util' +export { plusX } from './common/utils/util' diff --git a/src/packages/engine-core/src/LibraryEngine.ts b/src/packages/engine-core/src/library/LibraryEngine.ts similarity index 95% rename from src/packages/engine-core/src/LibraryEngine.ts rename to src/packages/engine-core/src/library/LibraryEngine.ts index c3c0432de987..38a932e15958 100644 --- a/src/packages/engine-core/src/LibraryEngine.ts +++ b/src/packages/engine-core/src/library/LibraryEngine.ts @@ -16,21 +16,16 @@ import { Engine, EngineConfig, EngineEventType, -} from './Engine' -import { - getErrorMessageWithLink, - PrismaClientInitializationError, - PrismaClientKnownRequestError, - PrismaClientRustPanicError, - PrismaClientUnknownRequestError, - RequestError, -} from './errors' +} from '../common/Engine' +import { RequestError } from '../common/errors/types/RequestError' +import { PrismaClientKnownRequestError } from '../common/errors/PrismaClientKnownRequestError' +import { PrismaClientInitializationError } from '../common/errors/PrismaClientInitializationError' +import { PrismaClientRustPanicError } from '../common/errors/PrismaClientRustPanicError' +import { PrismaClientUnknownRequestError } from '../common/errors/PrismaClientUnknownRequestError' +import { getErrorMessageWithLink } from '../common/errors/utils/getErrorMessageWithLink' import { ConfigMetaFormat, - Library, - QueryEngine, QueryEngineBatchRequest, - QueryEngineConstructor, QueryEngineEvent, QueryEngineLogLevel, QueryEnginePanicEvent, @@ -40,10 +35,12 @@ import { QueryEngineResult, RustRequestError, SyncRustError, -} from './NodeAPILibraryTypes' -import { printGeneratorConfig } from './printGeneratorConfig' -import { fixBinaryTargets } from './util' -import type * as Tx from './definitions/Transaction' +} from '../common/types/QueryEngine' +import { QueryEngineInstance, QueryEngineConstructor } from './types/Library' +import { Library } from './types/Library' +import { printGeneratorConfig } from '../common/utils/printGeneratorConfig' +import { fixBinaryTargets } from '../common/utils/util' +import type * as Tx from '../common/types/Transaction' const debug = Debug('prisma:client:libraryEngine') @@ -56,7 +53,7 @@ function isPanicEvent(event: QueryEngineEvent): event is QueryEnginePanicEvent { const knownPlatforms: Platform[] = [...platforms, 'native'] export class LibraryEngine extends Engine { - private engine?: QueryEngine + private engine?: QueryEngineInstance private libraryInstantiationPromise?: Promise private libraryStartingPromise?: Promise private libraryStoppingPromise?: Promise diff --git a/src/packages/engine-core/src/library/types/Library.ts b/src/packages/engine-core/src/library/types/Library.ts new file mode 100644 index 000000000000..543d25dca895 --- /dev/null +++ b/src/packages/engine-core/src/library/types/Library.ts @@ -0,0 +1,43 @@ +import { + GetConfigOptions, + ConfigMetaFormat, + QueryEngineConfig, +} from '../../common/types/QueryEngine' + +export type ConnectArgs = { + enableRawQueries: boolean +} + +export type QueryEngineInstance = { + connect(connectArgs: ConnectArgs): Promise + disconnect(): Promise + /** + * + * @param request JSON.stringified `QueryEngineRequest | QueryEngineBatchRequest` + * + * @param headers JSON.stringified `QueryEngineRequestHeaders` + */ + query(request: string, headers: string): Promise + sdlSchema(): Promise +} + +export interface QueryEngineConstructor { + new ( + config: QueryEngineConfig, + logger: (err: string, log: string) => void, + ): QueryEngineInstance +} + +// Main +export type Library = { + QueryEngine: QueryEngineConstructor + version: () => { + commit: string + version: string + } + getConfig: (options: GetConfigOptions) => Promise + /** + * This returns a string representation of `DMMF.Document` + */ + dmmf: (datamodel: string) => Promise +} diff --git a/src/packages/engine-core/src/byline.ts b/src/packages/engine-core/src/tools/byline.ts similarity index 94% rename from src/packages/engine-core/src/byline.ts rename to src/packages/engine-core/src/tools/byline.ts index ad4bf1e39193..5ab0c768382f 100644 --- a/src/packages/engine-core/src/byline.ts +++ b/src/packages/engine-core/src/tools/byline.ts @@ -18,7 +18,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS // IN THE SOFTWARE. -var stream = require('stream'), +const stream = require('stream'), util = require('util') // convinience API @@ -42,7 +42,7 @@ export function createLineStream(readStream, options) { if (!readStream.readable) { throw new Error('readStream must be readable') } - var ls = new LineStream(options) + const ls = new LineStream(options) readStream.pipe(ls) return ls } @@ -90,7 +90,7 @@ LineStream.prototype._transform = function (chunk, encoding, done) { } this._chunkEncoding = encoding - var lines = chunk.split(/\r\n|\r|\n/g) + const lines = chunk.split(/\r\n|\r|\n/g) // don't split CRLF which spans chunks if (this._lastChunkEndedWithCR && chunk[0] == '\n') { @@ -110,12 +110,13 @@ LineStream.prototype._transform = function (chunk, encoding, done) { LineStream.prototype._pushBuffer = function (encoding, keep, done) { // always buffer the last (possibly partial) line while (this._lineBuffer.length > keep) { - var line = this._lineBuffer.shift() + const line = this._lineBuffer.shift() // skip empty lines if (this._keepEmptyLines || line.length > 0) { if (!this.push(this._reencode(line, encoding))) { // when the high-water mark is reached, defer pushes until the next tick - var self = this + // eslint-disable-next-line @typescript-eslint/no-this-alias + const self = this setImmediate(function () { self._pushBuffer(encoding, keep, done) }) diff --git a/src/packages/engine-core/src/omit.ts b/src/packages/engine-core/src/tools/omit.ts similarity index 100% rename from src/packages/engine-core/src/omit.ts rename to src/packages/engine-core/src/tools/omit.ts diff --git a/src/packages/sdk/src/__tests__/__utils__/fixtures.ts b/src/packages/sdk/src/__tests__/__utils__/fixtures.ts index b6fa0bc4575b..63a72bfd0c7c 100644 --- a/src/packages/sdk/src/__tests__/__utils__/fixtures.ts +++ b/src/packages/sdk/src/__tests__/__utils__/fixtures.ts @@ -1,2 +1,2 @@ -import path from 'path'; -export const fixturesPath = path.join(__dirname, '../__fixtures__/') \ No newline at end of file +import path from 'path' +export const fixturesPath = path.join(__dirname, '../__fixtures__/') diff --git a/src/packages/sdk/src/resolveBinary.ts b/src/packages/sdk/src/resolveBinary.ts index 08b76beaaf5f..719165366b4e 100644 --- a/src/packages/sdk/src/resolveBinary.ts +++ b/src/packages/sdk/src/resolveBinary.ts @@ -1,5 +1,5 @@ import Debug from '@prisma/debug' -import { plusX } from '@prisma/engine-core/dist/util' +import { plusX } from '@prisma/engine-core' import { enginesVersion, getEnginesPath } from '@prisma/engines' import { BinaryType, download } from '@prisma/fetch-engine' import { getNodeAPIName, getPlatform } from '@prisma/get-platform' diff --git a/src/packages/sdk/src/utils/load.ts b/src/packages/sdk/src/utils/load.ts index dea9e6fc43ed..ca819817eac8 100644 --- a/src/packages/sdk/src/utils/load.ts +++ b/src/packages/sdk/src/utils/load.ts @@ -1,5 +1,5 @@ -/** - * This is a wrapper around `require` +/** + * This is a wrapper around `require` * This is to avoid eval and hide require away from bundlers */ export function load(id: string): T { diff --git a/src/pnpm-lock.yaml b/src/pnpm-lock.yaml index 4eb6fb7d11b0..64b5a364f2a2 100644 --- a/src/pnpm-lock.yaml +++ b/src/pnpm-lock.yaml @@ -1536,8 +1536,8 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/debug/2.27.0-dev.63: - resolution: {integrity: sha512-6w0AKFznOasHNTlhw8lQoHioiFywJjwkfmE4CMAweV00Va84rfQEk7p/pUXYt7lIE1p8Qq85dOUp8CNlqKfULA==} + /@prisma/debug/2.27.0: + resolution: {integrity: sha512-Et01S4RoLnQP9u547dCp74aSnLWTu0akfBCzF4zQZsbEdw7wXLttrcvbcYKr+KhpfF5Xu291UP/Kaxg0aj8o4w==} dependencies: debug: 4.3.2 ms: 2.1.3 @@ -1545,13 +1545,22 @@ packages: - supports-color dev: true - /@prisma/engine-core/2.27.0-dev.63: - resolution: {integrity: sha512-lbzDFsCU4PVPnAHmTCPilkvaydrjPK3luPBPDVsa7HA3yYqVN54mUhE4xzUlbkEIVHhL4cNjZLODO6moq/AVyw==} + /@prisma/debug/2.28.0-dev.14: + resolution: {integrity: sha512-/eyUEM2fj3ySoucC2mDByNCPy7ZzU4O7ylWatLZwUCZcFamXYHkfHzmP0Ddhhbc3cf+clMOew1dzrvnBKckN0g==} dependencies: - '@prisma/debug': 2.27.0-dev.63 - '@prisma/engines': 2.27.0-43.cdba6ec525e0213cce26f8e4bb23cf556d1479bb - '@prisma/generator-helper': 2.27.0-dev.63 - '@prisma/get-platform': 2.27.0-43.cdba6ec525e0213cce26f8e4bb23cf556d1479bb + debug: 4.3.2 + ms: 2.1.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@prisma/engine-core/2.28.0-dev.14: + resolution: {integrity: sha512-0w/FpBVHdHNZMM0qK1OH7Zv2pEnAq/b20/QDGyWLba/oYCxRp09DSPbLeAlitasESDvcukffeKxhrL11+hfplA==} + dependencies: + '@prisma/debug': 2.28.0-dev.14 + '@prisma/engines': 2.28.0-8.215319b1f112e9e5b5a1f2d2b0553982d2669776 + '@prisma/generator-helper': 2.28.0-dev.14 + '@prisma/get-platform': 2.28.0-8.215319b1f112e9e5b5a1f2d2b0553982d2669776 chalk: 4.1.1 execa: 5.1.1 get-stream: 6.0.1 @@ -1571,6 +1580,11 @@ packages: resolution: {integrity: sha512-AIbIhAxmd2CHZO5XzQTPrfk+Tp/5eoNoSledOG3yc6Dk97siLvnBuSEv7prggUbedCufDwZLAvwxV4PEw3zOlQ==} requiresBuild: true + /@prisma/engines/2.28.0-8.215319b1f112e9e5b5a1f2d2b0553982d2669776: + resolution: {integrity: sha512-MGblNTd/gZui+i6xzILdqsGbICeNY7tYQWaQpUZg/gMmjsUQqeNhdaWFqBIe962wwIYP9oerTkDSj+CT2rgRkg==} + requiresBuild: true + dev: true + /@prisma/fetch-engine/2.27.0-43.cdba6ec525e0213cce26f8e4bb23cf556d1479bb: resolution: {integrity: sha512-KdZZ5hUnMrCuImhvoHNnhnTlDY76mnKdEnM4QtaTF9HptwbPWaX/NZ5hwGC6WZf3PjWYr4BiQoC0v8Q7RF88Kg==} dependencies: @@ -1594,10 +1608,34 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/generator-helper/2.27.0-dev.63: - resolution: {integrity: sha512-Zcwk/qZkGTUuyAoVB/B0LRjHkPnTFpflHJpvPQNKLNs7m2R+tsnnnxYa5H9hrqvoHZCdebjxViiSkQO8WnIx6w==} + /@prisma/fetch-engine/2.28.0-8.215319b1f112e9e5b5a1f2d2b0553982d2669776: + resolution: {integrity: sha512-Chrqo/K0Zk0EDiRGRLirfBktsURPym9mVK/qyZ5RF00UWZaOzgI5uCk8jKNDTHAAKASLD1rRjeIIAPyZVSCoIA==} + dependencies: + '@prisma/debug': 2.27.0 + '@prisma/get-platform': 2.28.0-8.215319b1f112e9e5b5a1f2d2b0553982d2669776 + chalk: 4.1.1 + execa: 5.1.1 + find-cache-dir: 3.3.1 + hasha: 5.2.2 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.0 + make-dir: 3.1.0 + node-fetch: 2.6.1 + p-filter: 2.1.0 + p-map: 4.0.0 + p-retry: 4.6.0 + progress: 2.0.3 + rimraf: 3.0.2 + temp-dir: 2.0.0 + tempy: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@prisma/generator-helper/2.28.0-dev.14: + resolution: {integrity: sha512-ibi6+KQ4kWGrlymDkrLq12yDK55GtR1SAJVPZRI1okkhxo624dgLgiMNWeybTNcWE/TyZeVVaNKQmjHW4KYcqw==} dependencies: - '@prisma/debug': 2.27.0-dev.63 + '@prisma/debug': 2.28.0-dev.14 '@types/cross-spawn': 6.0.2 chalk: 4.1.1 cross-spawn: 7.0.3 @@ -1612,15 +1650,23 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/sdk/2.27.0-dev.63: - resolution: {integrity: sha512-8wi0h1SJ+NT6sJyNn9Gx1Z3Vtt0mZY6Wudsp2qOkxmB6+BnzkPgcWDgdbHDjqT6Sb57TCNBFlau1bf0l7HQ4Ww==} + /@prisma/get-platform/2.28.0-8.215319b1f112e9e5b5a1f2d2b0553982d2669776: + resolution: {integrity: sha512-ogXAyzRXGLTxp0mQFwU/VYcT19OEH4cHec3isc9sX25uoDG4bCJWuAHtnjb5ZReo4UCTVn80jBFndYYalZTtAw==} dependencies: - '@prisma/debug': 2.27.0-dev.63 - '@prisma/engine-core': 2.27.0-dev.63 - '@prisma/engines': 2.27.0-43.cdba6ec525e0213cce26f8e4bb23cf556d1479bb - '@prisma/fetch-engine': 2.27.0-43.cdba6ec525e0213cce26f8e4bb23cf556d1479bb - '@prisma/generator-helper': 2.27.0-dev.63 - '@prisma/get-platform': 2.27.0-43.cdba6ec525e0213cce26f8e4bb23cf556d1479bb + '@prisma/debug': 2.27.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@prisma/sdk/2.28.0-dev.14: + resolution: {integrity: sha512-Db6x4VbFsJjpOnGzhIlJj51rE2qjfdaa3OJ+XCcVjMgN3WKfnkbyeMBE2NUKEHPVTjxppv9nW0+AxrZCa5OYoA==} + dependencies: + '@prisma/debug': 2.28.0-dev.14 + '@prisma/engine-core': 2.28.0-dev.14 + '@prisma/engines': 2.28.0-8.215319b1f112e9e5b5a1f2d2b0553982d2669776 + '@prisma/fetch-engine': 2.28.0-8.215319b1f112e9e5b5a1f2d2b0553982d2669776 + '@prisma/generator-helper': 2.28.0-dev.14 + '@prisma/get-platform': 2.28.0-8.215319b1f112e9e5b5a1f2d2b0553982d2669776 '@timsuchanek/copy': 1.4.5 archiver: 4.0.2 arg: 5.0.0 @@ -1654,13 +1700,13 @@ packages: - supports-color dev: true - /@prisma/studio-pcw/0.410.0_@prisma+sdk@2.27.0-dev.63: + /@prisma/studio-pcw/0.410.0_@prisma+sdk@2.28.0-dev.14: resolution: {integrity: sha512-WiO2SFnurzsW8P9ipW3ltCWnmiEfg4k/UJfMywmU/uklAYUxJ+2dH25M8nMLDrPgo2nNQRYdmF2FDdLFNcT3gQ==} peerDependencies: '@prisma/client': '*' '@prisma/sdk': '*' dependencies: - '@prisma/sdk': 2.27.0-dev.63 + '@prisma/sdk': 2.28.0-dev.14 debug: 4.3.1 lodash: 4.17.21 transitivePeerDependencies: @@ -1670,8 +1716,8 @@ packages: /@prisma/studio-server/0.410.0: resolution: {integrity: sha512-grj5Ip5z0405utmcvXT1uCyUAq454MOxqvbkJJdCZjlilzWjKIxdaMLlGreIgIl0fsGZenZ35HjaByLx8F9Kxg==} dependencies: - '@prisma/sdk': 2.27.0-dev.63 - '@prisma/studio-pcw': 0.410.0_@prisma+sdk@2.27.0-dev.63 + '@prisma/sdk': 2.28.0-dev.14 + '@prisma/studio-pcw': 0.410.0_@prisma+sdk@2.28.0-dev.14 '@prisma/studio-transports': 0.410.0 '@sentry/node': 6.2.5 checkpoint-client: 1.1.20 From a21d9f871c2abe30bbd595b82fc05879e253b078 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 23 Jul 2021 18:01:32 -0500 Subject: [PATCH 23/52] test(client): add basic tests --- .../happy/long-running-transaction/test.ts | 95 +++++++++++++++---- src/pnpm-lock.yaml | 84 +++++----------- 2 files changed, 99 insertions(+), 80 deletions(-) diff --git a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts index 7b6393521a92..e9b28b8a3fb5 100644 --- a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts +++ b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts @@ -1,26 +1,83 @@ import { getTestClient } from '../../../../utils/getTestClient' -test('long-running transaction', async () => { - const PrismaClient = await getTestClient() - const prisma = new PrismaClient() +let PrismaClient, prisma - await prisma.user.deleteMany() +describe('long-running transaction', () => { + test('basic', async () => { + const result = await prisma.$transaction(async (prisma) => { + await prisma.user.create({ + data: { + email: 'user_1@website.com', + }, + }) + + await prisma.user.create({ + data: { + email: 'user_2@website.com', + }, + }) + + return prisma.user.findMany() + }) + + expect(result.length).toBe(2) + }) + + test('timeout', async () => { + const result = prisma.$transaction(async (prisma) => { + await prisma.user.create({ + data: { + email: 'user_1@website.com', + }, + }) + + await new Promise((res) => setTimeout(res, 6000)) + + return prisma.user.findMany() + }) + + await expect(result).rejects.toThrowError() + }) + + test('nested', async () => { + const result = await prisma.$transaction(async (tx) => { + await tx.user.create({ + data: { + email: 'user_1@website.com', + }, + }) + + await prisma.$transaction(async (prisma) => { + await prisma.user.create({ + data: { + email: 'user_2@website.com', + }, + }) + }) + + return tx.user.findMany() + }) - const result = await prisma.$transaction([ - prisma.user.create({ - data: { - email: 'test@hey.com', - }, - }), - new Promise((res) => setTimeout(res, 1000)) as any, - prisma.user.create({ - data: { - email: 'test@hey.com', - }, - }), - ]) - - console.log(result) + expect(result.length).toBe(2) + }) +}) + +beforeAll(async () => { + PrismaClient = await getTestClient() + + process.env.PRISMA_FORCE_LRT = 'true' +}) + +afterAll(() => { + delete process.env.PRISMA_FORCE_LRT +}) + +beforeEach(async () => { + prisma = new PrismaClient() + + await prisma.user.deleteMany() +}) +afterEach(async () => { await prisma.$disconnect() }) diff --git a/src/pnpm-lock.yaml b/src/pnpm-lock.yaml index 63745a1501f9..9ac580d4159d 100644 --- a/src/pnpm-lock.yaml +++ b/src/pnpm-lock.yaml @@ -1572,8 +1572,8 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/debug/2.28.0-dev.22: - resolution: {integrity: sha512-9loz0HPgs+OTSFSbwpRhQ6PJ1sUeGmCrk7Sd7odZKFQ0hcg70UKbmFyhVyfxtucNl4GrXBoEaaXIngwbZ+QYBA==} + /@prisma/debug/2.28.0-dev.23: + resolution: {integrity: sha512-Awcs14Cj6Mc/9wk9lwAU4pFndOmfc2g2L8IHNJT2wtpR9Ie8NalWz/vnbcoxjs13ztV0QQGiDduLjy1K7nXYww==} dependencies: debug: 4.3.2 ms: 2.1.3 @@ -1581,13 +1581,13 @@ packages: - supports-color dev: true - /@prisma/engine-core/2.28.0-dev.22: - resolution: {integrity: sha512-eMkDTrAWQ4d+EXvCnx9EW+bnqXJMuLPw+XZzPgt46SRVwWWWyX/brM+9YKIQ8ehhQSmn+PQv3n92hYPgmpu+5w==} + /@prisma/engine-core/2.28.0-dev.23: + resolution: {integrity: sha512-QIYrGzpJWtEbXsXoIqDFltrisUr+BvxKmc6nN5kjWT8VqP2QXxopJIh/accpwrxndLuIX4z4fPBne3E4lUO36A==} dependencies: - '@prisma/debug': 2.28.0-dev.22 - '@prisma/engines': 2.28.0-14.dd033a7f179ff445cfb05d062e0c438eef9af38a - '@prisma/generator-helper': 2.28.0-dev.22 - '@prisma/get-platform': 2.28.0-14.dd033a7f179ff445cfb05d062e0c438eef9af38a + '@prisma/debug': 2.28.0-dev.23 + '@prisma/engines': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/generator-helper': 2.28.0-dev.23 + '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 chalk: 4.1.1 execa: 5.1.1 get-stream: 6.0.1 @@ -1603,39 +1603,10 @@ packages: /@prisma/engines-version/2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019: resolution: {integrity: sha512-/mUTgZIN5ekhilG0Zq1VRNWQoc+pdBMLBqLLNTK0/8e2+mgcRvtWdIICsPrE2Qw387WPLGKkjsYJaCm1nVI1MA==} - /@prisma/engines/2.28.0-14.dd033a7f179ff445cfb05d062e0c438eef9af38a: - resolution: {integrity: sha512-a0uJ70p/qH3qmiSj5ta51iaEv8mwXtNhnvQyWBGx2Rni1+THvE5WKm5W3Pp+islCR/pjAarFy8Lum8hKUdNoXw==} - requiresBuild: true - dev: true - /@prisma/engines/2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019: resolution: {integrity: sha512-JlbZxmKAT81GRa1Y98VxZsW4dS5nnn9TIszc6pQ93C+T48lqWtxzoC5vWdXK1wwfhy2Zr7ZRi5uYDujwBCiVPQ==} requiresBuild: true - /@prisma/fetch-engine/2.28.0-14.dd033a7f179ff445cfb05d062e0c438eef9af38a: - resolution: {integrity: sha512-10D/pU2KKHrFA0ukqmNSz/KnOmfz4ciDN3KCgDZ8mo1nEfuGL6uWojC55eqXLoyZYhihLrkrRA8al45FHxepiA==} - dependencies: - '@prisma/debug': 2.27.0 - '@prisma/get-platform': 2.28.0-14.dd033a7f179ff445cfb05d062e0c438eef9af38a - chalk: 4.1.1 - execa: 5.1.1 - find-cache-dir: 3.3.1 - hasha: 5.2.2 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.0 - make-dir: 3.1.0 - node-fetch: 2.6.1 - p-filter: 2.1.0 - p-map: 4.0.0 - p-retry: 4.6.1 - progress: 2.0.3 - rimraf: 3.0.2 - temp-dir: 2.0.0 - tempy: 1.0.1 - transitivePeerDependencies: - - supports-color - dev: true - /@prisma/fetch-engine/2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019: resolution: {integrity: sha512-kmfX4UJyICDZySI74hhgxl48YWQolO1PbxPM+kmj13siTPlDJ2AAaVoYLwFjSUKufH/7Lvfv1A0FoF3pr92I4A==} dependencies: @@ -1659,10 +1630,10 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/generator-helper/2.28.0-dev.22: - resolution: {integrity: sha512-oR9YmqcTKFXj4nfrBISIKsP02aesyf2rHjwbyXmdHZ7E5zkNx4x5cw/NINz8jfd/6OLt9XzHgQ4QTSXKyhe1gQ==} + /@prisma/generator-helper/2.28.0-dev.23: + resolution: {integrity: sha512-xHFNEz+I3ozGWwngh2kveZ0XV2KJfcMLZAd0N0jqDZ4/ba1B1mBd02ov0EWnQwLZ4UFMAPz+oYTUOgBVele5VA==} dependencies: - '@prisma/debug': 2.28.0-dev.22 + '@prisma/debug': 2.28.0-dev.23 '@types/cross-spawn': 6.0.2 chalk: 4.1.1 cross-spawn: 7.0.3 @@ -1670,14 +1641,6 @@ packages: - supports-color dev: true - /@prisma/get-platform/2.28.0-14.dd033a7f179ff445cfb05d062e0c438eef9af38a: - resolution: {integrity: sha512-aAfpxVDDLvG+H/UWmqeu/sjDlGinyHnlAzpZ9celLjTrJ2PEw1SUrETEME5kKghS9xJXYTHdkSawEEH06GJx8A==} - dependencies: - '@prisma/debug': 2.27.0 - transitivePeerDependencies: - - supports-color - dev: true - /@prisma/get-platform/2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019: resolution: {integrity: sha512-DsgvAEK/xZ+JLCgwXxTbNkGt0wqfmJAnYhYhfSNFWXNXj6QlXfIe6r+jW/+I5xtRikde5HzwTx9jMJsN1kCvRg==} dependencies: @@ -1685,15 +1648,15 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/sdk/2.28.0-dev.22: - resolution: {integrity: sha512-hT1KjlLK7m6KzcgPiZh8aU9syHixXlB+ARIEnVBiZ9ODVZ5Ba9tG0nYDAWZ/I6rRjiM92tpXzZOrJFscCVWVZA==} + /@prisma/sdk/2.28.0-dev.23: + resolution: {integrity: sha512-279sjqb1ee1Sv0fDcdYPEOWydpYLM7+0btdU1DAtCBXXGtXy8yn74zLWTlF7V96rRHvr6F927Em+bNp+pPW1kQ==} dependencies: - '@prisma/debug': 2.28.0-dev.22 - '@prisma/engine-core': 2.28.0-dev.22 - '@prisma/engines': 2.28.0-14.dd033a7f179ff445cfb05d062e0c438eef9af38a - '@prisma/fetch-engine': 2.28.0-14.dd033a7f179ff445cfb05d062e0c438eef9af38a - '@prisma/generator-helper': 2.28.0-dev.22 - '@prisma/get-platform': 2.28.0-14.dd033a7f179ff445cfb05d062e0c438eef9af38a + '@prisma/debug': 2.28.0-dev.23 + '@prisma/engine-core': 2.28.0-dev.23 + '@prisma/engines': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/fetch-engine': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/generator-helper': 2.28.0-dev.23 + '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 '@timsuchanek/copy': 1.4.5 archiver: 4.0.2 arg: 5.0.0 @@ -1727,13 +1690,13 @@ packages: - supports-color dev: true - /@prisma/studio-pcw/0.416.0_@prisma+sdk@2.28.0-dev.22: + /@prisma/studio-pcw/0.416.0_@prisma+sdk@2.28.0-dev.23: resolution: {integrity: sha512-K3tZi1v9cJ6QMCu4fEvYqqJctYQ5XxzcV20gfEgDt3NIZRVf+VEGll4yt4aCQMnB6RrRauZ5FGhFMScVV91JhA==} peerDependencies: '@prisma/client': '*' '@prisma/sdk': '*' dependencies: - '@prisma/sdk': 2.28.0-dev.22 + '@prisma/sdk': 2.28.0-dev.23 debug: 4.3.1 lodash: 4.17.21 transitivePeerDependencies: @@ -1743,8 +1706,8 @@ packages: /@prisma/studio-server/0.416.0: resolution: {integrity: sha512-7dOHEZbB5HS8d3pf0nAkN4+lIC8vZLsSEgj7P7pr+Q7d4ZmmSgPKiiuFyovtngqa07sMEU0CalhueTwXgWVTOQ==} dependencies: - '@prisma/sdk': 2.28.0-dev.22 - '@prisma/studio-pcw': 0.416.0_@prisma+sdk@2.28.0-dev.22 + '@prisma/sdk': 2.28.0-dev.23 + '@prisma/studio-pcw': 0.416.0_@prisma+sdk@2.28.0-dev.23 '@prisma/studio-transports': 0.416.0 '@sentry/node': 6.2.5 checkpoint-client: 1.1.20 @@ -1753,7 +1716,6 @@ packages: express: 4.17.1 untildify: 4.0.0 transitivePeerDependencies: - - '@prisma/client' - supports-color dev: true From c7b7533a0a1c023d7f928036581b43ff147a0c5e Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 23 Jul 2021 18:54:30 -0500 Subject: [PATCH 24/52] fix(client): forbidden methods for lrt --- .../happy/long-running-transaction/test.ts | 24 ++++++++++++++++++- .../src/generation/TSClient/PrismaClient.ts | 4 +++- .../client/src/runtime/getPrismaClient.ts | 11 +++++++-- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts index e9b28b8a3fb5..472c4ab34558 100644 --- a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts +++ b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts @@ -3,6 +3,9 @@ import { getTestClient } from '../../../../utils/getTestClient' let PrismaClient, prisma describe('long-running transaction', () => { + /** + * Minimal example of a long-running transaction + */ test('basic', async () => { const result = await prisma.$transaction(async (prisma) => { await prisma.user.create({ @@ -23,6 +26,9 @@ describe('long-running transaction', () => { expect(result.length).toBe(2) }) + /** + * Transactions should fail after the default timeout + */ test('timeout', async () => { const result = prisma.$transaction(async (prisma) => { await prisma.user.create({ @@ -39,6 +45,9 @@ describe('long-running transaction', () => { await expect(result).rejects.toThrowError() }) + /** + * A transaction may fail if it's called inside another + */ test('nested', async () => { const result = await prisma.$transaction(async (tx) => { await tx.user.create({ @@ -58,7 +67,20 @@ describe('long-running transaction', () => { return tx.user.findMany() }) - expect(result.length).toBe(2) + expect(result.length).toBe(2) // TODO: not yet + }) + + /** + * We don't allow certain methods to be called in a transaction + */ + test('forbidden', async () => { + const forbidden = ['$connect', '$disconnect', '$on', '$transaction', '$use'] + + const result = prisma.$transaction((prisma) => { + return forbidden.reduce((acc, item) => acc ?? prisma[item], undefined) + }) + + await expect(result).resolves.toBe(undefined) }) }) diff --git a/src/packages/client/src/generation/TSClient/PrismaClient.ts b/src/packages/client/src/generation/TSClient/PrismaClient.ts index 56484360633b..5653f098d427 100644 --- a/src/packages/client/src/generation/TSClient/PrismaClient.ts +++ b/src/packages/client/src/generation/TSClient/PrismaClient.ts @@ -9,7 +9,9 @@ import { Datasources } from './Datasources' import { Generatable } from './Generatable' function longRunningTransactionDefinition() { - return `$transaction(fn: (prisma: PrismaClient) => Promise): Promise` + const txPrismaClient = `Omit` + + return `$transaction(fn: (prisma: ${txPrismaClient}) => Promise): Promise` } export class PrismaClientClass implements Generatable { diff --git a/src/packages/client/src/runtime/getPrismaClient.ts b/src/packages/client/src/runtime/getPrismaClient.ts index 9f3943707ed1..26ea1af4591c 100644 --- a/src/packages/client/src/runtime/getPrismaClient.ts +++ b/src/packages/client/src/runtime/getPrismaClient.ts @@ -1072,7 +1072,9 @@ new PrismaClient({ const changedInternalParams = { ...internalParams, ...params } // TODO remove this once LRT is the default transaction mode - if (index > 0) delete changedInternalParams['transactionId'] + if (index > 0 && process.env.PRISMA_FORCE_LRT === undefined) { + delete changedInternalParams['transactionId'] + } // no middleware? then we just proceed with request execution return this._executeRequest(changedInternalParams) @@ -1471,6 +1473,8 @@ new PrismaClient({ return PrismaClient as new (optionsArg?: PrismaClientOptions) => Client } +const forbidden = ['$connect', '$disconnect', '$on', '$transaction', '$use'] + /** * Proxy that takes over client promises to pass `transactionId` * @param thing to be proxied @@ -1483,6 +1487,9 @@ function transactionProxy(thing: T, transactionId: string): T { return new Proxy(thing as any as object, { get: (target, prop) => { + // we don't want to allow any calls to our `forbidden` methods + if (forbidden.includes(prop as string)) return undefined + // secret accessor to get the `transactionId` in a transaction if (prop === TX_ID) return transactionId @@ -1506,7 +1513,7 @@ function transactionProxy(thing: T, transactionId: string): T { }) as any as T } -const TX_ID = Symbol.for('prisma.client.tx_id') +const TX_ID = Symbol.for('prisma.client.transaction.id') export function getOperation(action: DMMF.ModelAction): 'query' | 'mutation' { if ( From 0c7d3d39c83d580ec9771c78b26a8b59df6f8e94 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 23 Jul 2021 19:03:51 -0500 Subject: [PATCH 25/52] fix(client): remove lrt scheduler --- .../client/src/runtime/Scheduler.spec.ts | 58 -------------- src/packages/client/src/runtime/Scheduler.ts | 78 ------------------- .../client/src/runtime/getPrismaClient.ts | 35 ++++----- 3 files changed, 15 insertions(+), 156 deletions(-) delete mode 100644 src/packages/client/src/runtime/Scheduler.spec.ts delete mode 100644 src/packages/client/src/runtime/Scheduler.ts diff --git a/src/packages/client/src/runtime/Scheduler.spec.ts b/src/packages/client/src/runtime/Scheduler.spec.ts deleted file mode 100644 index bbcab51d6473..000000000000 --- a/src/packages/client/src/runtime/Scheduler.spec.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { Scheduler } from './Scheduler' - -describe('Scheduler', () => { - it('should be ordered', async () => { - const scheduler = new Scheduler() - - const taskIds = [ - scheduler.queue( - () => - new Promise((resolve) => { - setTimeout(() => resolve(1), 10) - }), - ), - - scheduler.queue( - () => - new Promise((resolve) => { - setTimeout(() => resolve(2), 1) - }), - ), - - scheduler.queue( - () => - new Promise((resolve) => { - setTimeout(() => resolve(3), 100) - }), - ), - - scheduler.queue(() => 4), - - scheduler.queue( - () => - new Promise((resolve) => { - setTimeout(() => resolve(5), 25) - }), - ), - - scheduler.queue( - () => - new Promise((resolve) => { - setTimeout(() => resolve(6), 25) - }), - ), - - scheduler.queue( - () => - new Promise((resolve) => { - setTimeout(() => resolve(7), 3) - }), - ), - ].reverse() // we should be able to await in any order - - const taskPromises = taskIds.map((id) => scheduler.wait(id)) - const taskResults = await Promise.all(taskPromises) - - expect(taskResults).toStrictEqual([7, 6, 5, 4, 3, 2, 1]) - }) -}) diff --git a/src/packages/client/src/runtime/Scheduler.ts b/src/packages/client/src/runtime/Scheduler.ts deleted file mode 100644 index 6ab732080f19..000000000000 --- a/src/packages/client/src/runtime/Scheduler.ts +++ /dev/null @@ -1,78 +0,0 @@ -/* eslint-disable no-async-promise-executor */ -import Crypto from 'crypto' - -type Task = () => R - -/** - * Generate a random taskId - * @returns taskId - */ -function getTaskId() { - return Crypto.randomBytes(10).toString('hex') -} - -/** - * Execute [[Task]]s one after another - */ -class Scheduler { - private _results: { [id: string]: Promise } - - constructor() { - this._results = {} - } - - /** - * Queue a [[Task]] to be executed - * @param task to execute - * @returns taskId - */ - queue(task: Task): string { - const taskId = getTaskId() // unique task id for management - - // this promise ensures that thing execute one after another - this._results[taskId] = (async () => { - const taskIds = Object.keys(this._results) - - try { - if (taskIds.length > 0) { - // if we have a promise before us, we make sure to wait - // this way, we are effectively pipelining our execution - await this._results[taskIds[taskIds.length - 1]] - } - } catch { - // we don't want to throw prev error onto the next promise - } - - return task() // but we do want our current promise to throw - })() - - return taskId - } - - /** - * Wait for a [[Task]] to execute - * @param taskId taskId from [[queue]] - * @returns task return value - */ - wait(taskId: string): Promise { - const result = this._results[taskId] - - // a result can only be retrieved once - delete this._results[taskId] - - return result - } - - /** - * Queue and wait for a [[Task]] - * @param task to execute - * @returns task return value - */ - async exec(task: Task): Promise { - const taskId = this.queue(task) - - return this.wait(taskId) as Promise - } -} - -export { Scheduler } diff --git a/src/packages/client/src/runtime/getPrismaClient.ts b/src/packages/client/src/runtime/getPrismaClient.ts index 26ea1af4591c..89a0e505bee0 100644 --- a/src/packages/client/src/runtime/getPrismaClient.ts +++ b/src/packages/client/src/runtime/getPrismaClient.ts @@ -43,7 +43,6 @@ import { } from './utils/rejectOnNotFound' import { serializeRawParameters } from './utils/serializeRawParameters' import { validatePrismaClientOptions } from './utils/validatePrismaClientOptions' -import { Scheduler } from './Scheduler' import { RequestHandler } from './RequestHandler' const debug = Debug('prisma:client') const ALTER_RE = /^(\s*alter\s)/i @@ -297,13 +296,12 @@ export function getPrismaClient(config: GetPrismaClientOptions) { private _activeProvider: string private _transactionId = 1 private _rejectOnNotFound?: InstanceRejectOnNotFound - private _transactionScheduler: Scheduler constructor(optionsArg?: PrismaClientOptions) { if (optionsArg) { validatePrismaClientOptions(optionsArg, config.datasourceNames) } - this._transactionScheduler = new Scheduler() + this._rejectOnNotFound = optionsArg?.rejectOnNotFound this._clientVersion = config.clientVersion ?? clientVersion this._activeProvider = config.activeProvider @@ -992,27 +990,24 @@ new PrismaClient({ callback: (client: Client) => Promise, options?: { maxWait: number; timeout: number }, ) { - // transactions are inlined through their scheduler - return this._transactionScheduler.exec(async () => { - // we ask the query engine to open a transaction - const info = await this._engine.transaction('start', options) + // we ask the query engine to open a transaction + const info = await this._engine.transaction('start', options) - let result: unknown - try { - // execute user logic with a proxied the client - result = await callback(transactionProxy(this, info.id)) + let result: unknown + try { + // execute user logic with a proxied the client + result = await callback(transactionProxy(this, info.id)) - // it went well, then we commit the transaction - await this._engine.transaction('commit', info) - } catch (e) { - // it went bad, then we rollback the transaction - await this._engine.transaction('rollback', info) + // it went well, then we commit the transaction + await this._engine.transaction('commit', info) + } catch (e) { + // it went bad, then we rollback the transaction + await this._engine.transaction('rollback', info) - throw e - } + throw e + } - return result - }) + return result } /** From 7c74a95ef6a10427d73d49ccfb47350c7ea211f9 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Thu, 29 Jul 2021 21:45:49 -0500 Subject: [PATCH 26/52] chore(prisma)! integrate engines --- src/packages/cli/package.json | 2 +- src/packages/client/package.json | 4 +- src/packages/engine-core/package.json | 2 +- src/packages/engine-core/pnpm-lock.yaml | 3083 ++++++++--------------- src/packages/migrate/package.json | 2 +- src/packages/sdk/package.json | 2 +- src/pnpm-lock.yaml | 115 +- 7 files changed, 1143 insertions(+), 2067 deletions(-) diff --git a/src/packages/cli/package.json b/src/packages/cli/package.json index 9b72abfd560b..cd5c3347ae97 100644 --- a/src/packages/cli/package.json +++ b/src/packages/cli/package.json @@ -125,7 +125,7 @@ "precommit": "lint-staged" }, "dependencies": { - "@prisma/engines": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019" + "@prisma/engines": "2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00" }, "lint-staged": { "*.ts": [ diff --git a/src/packages/client/package.json b/src/packages/client/package.json index eaadcdd568aa..df2ec5348c84 100644 --- a/src/packages/client/package.json +++ b/src/packages/client/package.json @@ -59,7 +59,7 @@ "devDependencies": { "@prisma/debug": "workspace:*", "@prisma/engine-core": "workspace:*", - "@prisma/engines": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019", + "@prisma/engines": "2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00", "@prisma/fetch-engine": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019", "@prisma/generator-helper": "workspace:*", "@prisma/get-platform": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019", @@ -126,7 +126,7 @@ } }, "dependencies": { - "@prisma/engines-version": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019" + "@prisma/engines-version": "2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00" }, "lint-staged": { "*.ts": [ diff --git a/src/packages/engine-core/package.json b/src/packages/engine-core/package.json index f0d443fe9b8e..1fe302a53759 100644 --- a/src/packages/engine-core/package.json +++ b/src/packages/engine-core/package.json @@ -41,7 +41,7 @@ }, "dependencies": { "@prisma/debug": "workspace:*", - "@prisma/engines": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019", + "@prisma/engines": "2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00", "@prisma/generator-helper": "workspace:*", "@prisma/get-platform": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019", "chalk": "^4.0.0", diff --git a/src/packages/engine-core/pnpm-lock.yaml b/src/packages/engine-core/pnpm-lock.yaml index 74336525d1f2..5e4b9c1e5160 100644 --- a/src/packages/engine-core/pnpm-lock.yaml +++ b/src/packages/engine-core/pnpm-lock.yaml @@ -2,38 +2,38 @@ lockfileVersion: 5.3 specifiers: '@prisma/debug': workspace:* - '@prisma/engines': 2.24.0-22.5ab68a73e954e003cc528d6e1e42d924ce99c676 + '@prisma/engines': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': workspace:* - '@types/jest': 26.0.23 - '@types/node': 12.20.13 - '@typescript-eslint/eslint-plugin': 4.25.0 - '@typescript-eslint/parser': 4.25.0 + '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@types/jest': 26.0.24 + '@types/node': 12.20.16 + '@typescript-eslint/eslint-plugin': 4.28.4 + '@typescript-eslint/parser': 4.28.4 chalk: ^4.0.0 - eslint: 7.27.0 + eslint: 7.31.0 eslint-config-prettier: 8.3.0 eslint-plugin-eslint-comments: 3.2.0 - eslint-plugin-jest: 24.3.6 + eslint-plugin-jest: 24.4.0 eslint-plugin-prettier: 3.4.0 execa: ^5.0.0 get-stream: ^6.0.0 indent-string: ^4.0.0 - jest: 26.6.3 - lint-staged: 11.0.0 + jest: 27.0.6 + lint-staged: 11.1.0 new-github-issue-url: ^0.2.1 p-retry: ^4.2.0 - prettier: 2.3.0 + prettier: 2.3.2 strip-ansi: 6.0.0 terminal-link: ^2.1.1 - ts-jest: 26.5.6 - typescript: 4.3.2 + ts-jest: 27.0.3 + typescript: 4.3.5 undici: 3.3.6 dependencies: '@prisma/debug': link:../debug - '@prisma/engines': 2.24.0-22.5ab68a73e954e003cc528d6e1e42d924ce99c676 + '@prisma/engines': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 '@prisma/generator-helper': link:../generator-helper - '@prisma/get-platform': link:../get-platform + '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 chalk: 4.1.1 execa: 5.0.0 get-stream: 6.0.1 @@ -44,55 +44,57 @@ dependencies: undici: 3.3.6 devDependencies: - '@types/jest': 26.0.23 - '@types/node': 12.20.13 - '@typescript-eslint/eslint-plugin': 4.25.0_ec7770e83475322b368bff30b543badb - '@typescript-eslint/parser': 4.25.0_eslint@7.27.0+typescript@4.3.2 - eslint: 7.27.0 - eslint-config-prettier: 8.3.0_eslint@7.27.0 - eslint-plugin-eslint-comments: 3.2.0_eslint@7.27.0 - eslint-plugin-jest: 24.3.6_cbabd036d07985467c50cb9e2b9941b7 - eslint-plugin-prettier: 3.4.0_beb8ddd1fba5378f74976112c7860a07 - jest: 26.6.3 - lint-staged: 11.0.0 - prettier: 2.3.0 + '@types/jest': 26.0.24 + '@types/node': 12.20.16 + '@typescript-eslint/eslint-plugin': 4.28.4_b1648df9f9ba40bdeef3710a5a5af353 + '@typescript-eslint/parser': 4.28.4_eslint@7.31.0+typescript@4.3.5 + eslint: 7.31.0 + eslint-config-prettier: 8.3.0_eslint@7.31.0 + eslint-plugin-eslint-comments: 3.2.0_eslint@7.31.0 + eslint-plugin-jest: 24.4.0_fc5326c9e782cff3be563ae5197052dc + eslint-plugin-prettier: 3.4.0_19f511d6aa08b367b6cb59e8f50291ca + jest: 27.0.6 + lint-staged: 11.1.0 + prettier: 2.3.2 strip-ansi: 6.0.0 - ts-jest: 26.5.6_jest@26.6.3+typescript@4.3.2 - typescript: 4.3.2 + ts-jest: 27.0.3_jest@27.0.6+typescript@4.3.5 + typescript: 4.3.5 packages: /@babel/code-frame/7.12.11: resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} dependencies: - '@babel/highlight': 7.13.10 + '@babel/highlight': 7.14.5 dev: true - /@babel/code-frame/7.12.13: - resolution: {integrity: sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==} + /@babel/code-frame/7.14.5: + resolution: {integrity: sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.13.10 + '@babel/highlight': 7.14.5 dev: true - /@babel/compat-data/7.13.15: - resolution: {integrity: sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==} + /@babel/compat-data/7.14.7: + resolution: {integrity: sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==} + engines: {node: '>=6.9.0'} dev: true - /@babel/core/7.13.16: - resolution: {integrity: sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q==} + /@babel/core/7.14.8: + resolution: {integrity: sha512-/AtaeEhT6ErpDhInbXmjHcUQXH0L0TEgscfcxk1qbOvLuKCa5aZT0SOOtDKFY96/CLROwbLSKyFor6idgNaU4Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.12.13 - '@babel/generator': 7.13.16 - '@babel/helper-compilation-targets': 7.13.16_@babel+core@7.13.16 - '@babel/helper-module-transforms': 7.13.14 - '@babel/helpers': 7.13.17 - '@babel/parser': 7.13.16 - '@babel/template': 7.12.13 - '@babel/traverse': 7.13.17 - '@babel/types': 7.13.17 - convert-source-map: 1.7.0 - debug: 4.3.1 + '@babel/code-frame': 7.14.5 + '@babel/generator': 7.14.8 + '@babel/helper-compilation-targets': 7.14.5_@babel+core@7.14.8 + '@babel/helper-module-transforms': 7.14.8 + '@babel/helpers': 7.14.8 + '@babel/parser': 7.14.8 + '@babel/template': 7.14.5 + '@babel/traverse': 7.14.8 + '@babel/types': 7.14.8 + convert-source-map: 1.8.0 + debug: 4.3.2 gensync: 1.0.0-beta.2 json5: 2.2.0 semver: 6.3.0 @@ -101,267 +103,305 @@ packages: - supports-color dev: true - /@babel/generator/7.13.16: - resolution: {integrity: sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==} + /@babel/generator/7.14.8: + resolution: {integrity: sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.13.17 + '@babel/types': 7.14.8 jsesc: 2.5.2 source-map: 0.5.7 dev: true - /@babel/helper-compilation-targets/7.13.16_@babel+core@7.13.16: - resolution: {integrity: sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==} + /@babel/helper-compilation-targets/7.14.5_@babel+core@7.14.8: + resolution: {integrity: sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.13.15 - '@babel/core': 7.13.16 - '@babel/helper-validator-option': 7.12.17 - browserslist: 4.16.5 + '@babel/compat-data': 7.14.7 + '@babel/core': 7.14.8 + '@babel/helper-validator-option': 7.14.5 + browserslist: 4.16.6 semver: 6.3.0 dev: true - /@babel/helper-function-name/7.12.13: - resolution: {integrity: sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==} + /@babel/helper-function-name/7.14.5: + resolution: {integrity: sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-get-function-arity': 7.14.5 + '@babel/template': 7.14.5 + '@babel/types': 7.14.8 + dev: true + + /@babel/helper-get-function-arity/7.14.5: + resolution: {integrity: sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-get-function-arity': 7.12.13 - '@babel/template': 7.12.13 - '@babel/types': 7.13.17 + '@babel/types': 7.14.8 dev: true - /@babel/helper-get-function-arity/7.12.13: - resolution: {integrity: sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==} + /@babel/helper-hoist-variables/7.14.5: + resolution: {integrity: sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.13.17 + '@babel/types': 7.14.8 dev: true - /@babel/helper-member-expression-to-functions/7.13.12: - resolution: {integrity: sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==} + /@babel/helper-member-expression-to-functions/7.14.7: + resolution: {integrity: sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.13.17 + '@babel/types': 7.14.8 dev: true - /@babel/helper-module-imports/7.13.12: - resolution: {integrity: sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==} + /@babel/helper-module-imports/7.14.5: + resolution: {integrity: sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.13.17 + '@babel/types': 7.14.8 dev: true - /@babel/helper-module-transforms/7.13.14: - resolution: {integrity: sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==} + /@babel/helper-module-transforms/7.14.8: + resolution: {integrity: sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-module-imports': 7.13.12 - '@babel/helper-replace-supers': 7.13.12 - '@babel/helper-simple-access': 7.13.12 - '@babel/helper-split-export-declaration': 7.12.13 - '@babel/helper-validator-identifier': 7.12.11 - '@babel/template': 7.12.13 - '@babel/traverse': 7.13.17 - '@babel/types': 7.13.17 + '@babel/helper-module-imports': 7.14.5 + '@babel/helper-replace-supers': 7.14.5 + '@babel/helper-simple-access': 7.14.8 + '@babel/helper-split-export-declaration': 7.14.5 + '@babel/helper-validator-identifier': 7.14.8 + '@babel/template': 7.14.5 + '@babel/traverse': 7.14.8 + '@babel/types': 7.14.8 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-optimise-call-expression/7.12.13: - resolution: {integrity: sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==} + /@babel/helper-optimise-call-expression/7.14.5: + resolution: {integrity: sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.13.17 + '@babel/types': 7.14.8 dev: true - /@babel/helper-plugin-utils/7.13.0: - resolution: {integrity: sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==} + /@babel/helper-plugin-utils/7.14.5: + resolution: {integrity: sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==} + engines: {node: '>=6.9.0'} dev: true - /@babel/helper-replace-supers/7.13.12: - resolution: {integrity: sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==} + /@babel/helper-replace-supers/7.14.5: + resolution: {integrity: sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-member-expression-to-functions': 7.13.12 - '@babel/helper-optimise-call-expression': 7.12.13 - '@babel/traverse': 7.13.17 - '@babel/types': 7.13.17 + '@babel/helper-member-expression-to-functions': 7.14.7 + '@babel/helper-optimise-call-expression': 7.14.5 + '@babel/traverse': 7.14.8 + '@babel/types': 7.14.8 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-simple-access/7.13.12: - resolution: {integrity: sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==} + /@babel/helper-simple-access/7.14.8: + resolution: {integrity: sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.13.17 + '@babel/types': 7.14.8 dev: true - /@babel/helper-split-export-declaration/7.12.13: - resolution: {integrity: sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==} + /@babel/helper-split-export-declaration/7.14.5: + resolution: {integrity: sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.13.17 + '@babel/types': 7.14.8 dev: true - /@babel/helper-validator-identifier/7.12.11: - resolution: {integrity: sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==} + /@babel/helper-validator-identifier/7.14.8: + resolution: {integrity: sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==} + engines: {node: '>=6.9.0'} dev: true - /@babel/helper-validator-option/7.12.17: - resolution: {integrity: sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==} + /@babel/helper-validator-option/7.14.5: + resolution: {integrity: sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==} + engines: {node: '>=6.9.0'} dev: true - /@babel/helpers/7.13.17: - resolution: {integrity: sha512-Eal4Gce4kGijo1/TGJdqp3WuhllaMLSrW6XcL0ulyUAQOuxHcCafZE8KHg9857gcTehsm/v7RcOx2+jp0Ryjsg==} + /@babel/helpers/7.14.8: + resolution: {integrity: sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.12.13 - '@babel/traverse': 7.13.17 - '@babel/types': 7.13.17 + '@babel/template': 7.14.5 + '@babel/traverse': 7.14.8 + '@babel/types': 7.14.8 transitivePeerDependencies: - supports-color dev: true - /@babel/highlight/7.13.10: - resolution: {integrity: sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==} + /@babel/highlight/7.14.5: + resolution: {integrity: sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.12.11 + '@babel/helper-validator-identifier': 7.14.8 chalk: 2.4.2 js-tokens: 4.0.0 dev: true - /@babel/parser/7.13.16: - resolution: {integrity: sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==} + /@babel/parser/7.14.8: + resolution: {integrity: sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==} engines: {node: '>=6.0.0'} hasBin: true dev: true - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.13.16: + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.14.8: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/core': 7.14.8 + '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.13.16: + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.14.8: resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/core': 7.14.8 + '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.13.16: + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.14.8: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/core': 7.14.8 + '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.13.16: + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.14.8: resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/core': 7.14.8 + '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.13.16: + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.14.8: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/core': 7.14.8 + '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.13.16: + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.14.8: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/core': 7.14.8 + '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.13.16: + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.14.8: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/core': 7.14.8 + '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.13.16: + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.14.8: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/core': 7.14.8 + '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.13.16: + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.14.8: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/core': 7.14.8 + '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.13.16: + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.14.8: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/core': 7.14.8 + '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.13.16: + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.14.8: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/core': 7.14.8 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.14.8: + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.8 + '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/plugin-syntax-top-level-await/7.12.13_@babel+core@7.13.16: - resolution: {integrity: sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==} + /@babel/plugin-syntax-typescript/7.14.5_@babel+core@7.14.8: + resolution: {integrity: sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.13.16 - '@babel/helper-plugin-utils': 7.13.0 + '@babel/core': 7.14.8 + '@babel/helper-plugin-utils': 7.14.5 dev: true - /@babel/template/7.12.13: - resolution: {integrity: sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==} + /@babel/template/7.14.5: + resolution: {integrity: sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.12.13 - '@babel/parser': 7.13.16 - '@babel/types': 7.13.17 + '@babel/code-frame': 7.14.5 + '@babel/parser': 7.14.8 + '@babel/types': 7.14.8 dev: true - /@babel/traverse/7.13.17: - resolution: {integrity: sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg==} + /@babel/traverse/7.14.8: + resolution: {integrity: sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.12.13 - '@babel/generator': 7.13.16 - '@babel/helper-function-name': 7.12.13 - '@babel/helper-split-export-declaration': 7.12.13 - '@babel/parser': 7.13.16 - '@babel/types': 7.13.17 - debug: 4.3.1 + '@babel/code-frame': 7.14.5 + '@babel/generator': 7.14.8 + '@babel/helper-function-name': 7.14.5 + '@babel/helper-hoist-variables': 7.14.5 + '@babel/helper-split-export-declaration': 7.14.5 + '@babel/parser': 7.14.8 + '@babel/types': 7.14.8 + debug: 4.3.2 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types/7.13.17: - resolution: {integrity: sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==} + /@babel/types/7.14.8: + resolution: {integrity: sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==} + engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-validator-identifier': 7.12.11 + '@babel/helper-validator-identifier': 7.14.8 to-fast-properties: 2.0.0 dev: true @@ -369,23 +409,14 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@cnakazawa/watch/1.0.4: - resolution: {integrity: sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==} - engines: {node: '>=0.1.95'} - hasBin: true - dependencies: - exec-sh: 0.3.6 - minimist: 1.2.5 - dev: true - - /@eslint/eslintrc/0.4.1: - resolution: {integrity: sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==} + /@eslint/eslintrc/0.4.3: + resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.1 + debug: 4.3.2 espree: 7.3.1 - globals: 12.4.0 + globals: 13.10.0 ignore: 4.0.6 import-fresh: 3.3.0 js-yaml: 3.14.1 @@ -395,6 +426,21 @@ packages: - supports-color dev: true + /@humanwhocodes/config-array/0.5.0: + resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.0 + debug: 4.3.2 + minimatch: 3.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/object-schema/1.2.0: + resolution: {integrity: sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==} + dev: true + /@istanbuljs/load-nyc-config/1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -411,45 +457,51 @@ packages: engines: {node: '>=8'} dev: true - /@jest/console/26.6.2: - resolution: {integrity: sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==} - engines: {node: '>= 10.14.2'} + /@jest/console/27.0.6: + resolution: {integrity: sha512-fMlIBocSHPZ3JxgWiDNW/KPj6s+YRd0hicb33IrmelCcjXo/pXPwvuiKFmZz+XuqI/1u7nbUK10zSsWL/1aegg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 26.6.2 - '@types/node': 12.20.10 + '@jest/types': 27.0.6 + '@types/node': 12.20.16 chalk: 4.1.1 - jest-message-util: 26.6.2 - jest-util: 26.6.2 + jest-message-util: 27.0.6 + jest-util: 27.0.6 slash: 3.0.0 dev: true - /@jest/core/26.6.3: - resolution: {integrity: sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==} - engines: {node: '>= 10.14.2'} + /@jest/core/27.0.6: + resolution: {integrity: sha512-SsYBm3yhqOn5ZLJCtccaBcvD/ccTLCeuDv8U41WJH/V1MW5eKUkeMHT9U+Pw/v1m1AIWlnIW/eM2XzQr0rEmow==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true dependencies: - '@jest/console': 26.6.2 - '@jest/reporters': 26.6.2 - '@jest/test-result': 26.6.2 - '@jest/transform': 26.6.2 - '@jest/types': 26.6.2 - '@types/node': 12.20.10 + '@jest/console': 27.0.6 + '@jest/reporters': 27.0.6 + '@jest/test-result': 27.0.6 + '@jest/transform': 27.0.6 + '@jest/types': 27.0.6 + '@types/node': 12.20.16 ansi-escapes: 4.3.2 chalk: 4.1.1 + emittery: 0.8.1 exit: 0.1.2 graceful-fs: 4.2.6 - jest-changed-files: 26.6.2 - jest-config: 26.6.3 - jest-haste-map: 26.6.2 - jest-message-util: 26.6.2 - jest-regex-util: 26.0.0 - jest-resolve: 26.6.2 - jest-resolve-dependencies: 26.6.3 - jest-runner: 26.6.3 - jest-runtime: 26.6.3 - jest-snapshot: 26.6.2 - jest-util: 26.6.2 - jest-validate: 26.6.2 - jest-watcher: 26.6.2 + jest-changed-files: 27.0.6 + jest-config: 27.0.6 + jest-haste-map: 27.0.6 + jest-message-util: 27.0.6 + jest-regex-util: 27.0.6 + jest-resolve: 27.0.6 + jest-resolve-dependencies: 27.0.6 + jest-runner: 27.0.6 + jest-runtime: 27.0.6 + jest-snapshot: 27.0.6 + jest-util: 27.0.6 + jest-validate: 27.0.6 + jest-watcher: 27.0.6 micromatch: 4.0.4 p-each-series: 2.2.0 rimraf: 3.0.2 @@ -463,121 +515,119 @@ packages: - utf-8-validate dev: true - /@jest/environment/26.6.2: - resolution: {integrity: sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==} - engines: {node: '>= 10.14.2'} + /@jest/environment/27.0.6: + resolution: {integrity: sha512-4XywtdhwZwCpPJ/qfAkqExRsERW+UaoSRStSHCCiQTUpoYdLukj+YJbQSFrZjhlUDRZeNiU9SFH0u7iNimdiIg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/fake-timers': 26.6.2 - '@jest/types': 26.6.2 - '@types/node': 12.20.10 - jest-mock: 26.6.2 + '@jest/fake-timers': 27.0.6 + '@jest/types': 27.0.6 + '@types/node': 12.20.16 + jest-mock: 27.0.6 dev: true - /@jest/fake-timers/26.6.2: - resolution: {integrity: sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==} - engines: {node: '>= 10.14.2'} + /@jest/fake-timers/27.0.6: + resolution: {integrity: sha512-sqd+xTWtZ94l3yWDKnRTdvTeZ+A/V7SSKrxsrOKSqdyddb9CeNRF8fbhAU0D7ZJBpTTW2nbp6MftmKJDZfW2LQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 26.6.2 - '@sinonjs/fake-timers': 6.0.1 - '@types/node': 12.20.10 - jest-message-util: 26.6.2 - jest-mock: 26.6.2 - jest-util: 26.6.2 + '@jest/types': 27.0.6 + '@sinonjs/fake-timers': 7.1.2 + '@types/node': 12.20.16 + jest-message-util: 27.0.6 + jest-mock: 27.0.6 + jest-util: 27.0.6 dev: true - /@jest/globals/26.6.2: - resolution: {integrity: sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==} - engines: {node: '>= 10.14.2'} + /@jest/globals/27.0.6: + resolution: {integrity: sha512-DdTGCP606rh9bjkdQ7VvChV18iS7q0IMJVP1piwTWyWskol4iqcVwthZmoJEf7obE1nc34OpIyoVGPeqLC+ryw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/environment': 26.6.2 - '@jest/types': 26.6.2 - expect: 26.6.2 + '@jest/environment': 27.0.6 + '@jest/types': 27.0.6 + expect: 27.0.6 dev: true - /@jest/reporters/26.6.2: - resolution: {integrity: sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==} - engines: {node: '>= 10.14.2'} + /@jest/reporters/27.0.6: + resolution: {integrity: sha512-TIkBt09Cb2gptji3yJXb3EE+eVltW6BjO7frO7NEfjI9vSIYoISi5R3aI3KpEDXlB1xwB+97NXIqz84qYeYsfA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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': 26.6.2 - '@jest/test-result': 26.6.2 - '@jest/transform': 26.6.2 - '@jest/types': 26.6.2 + '@jest/console': 27.0.6 + '@jest/test-result': 27.0.6 + '@jest/transform': 27.0.6 + '@jest/types': 27.0.6 chalk: 4.1.1 collect-v8-coverage: 1.0.1 exit: 0.1.2 - glob: 7.1.6 + glob: 7.1.7 graceful-fs: 4.2.6 istanbul-lib-coverage: 3.0.0 istanbul-lib-instrument: 4.0.3 istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.0 istanbul-reports: 3.0.2 - jest-haste-map: 26.6.2 - jest-resolve: 26.6.2 - jest-util: 26.6.2 - jest-worker: 26.6.2 + jest-haste-map: 27.0.6 + jest-resolve: 27.0.6 + jest-util: 27.0.6 + jest-worker: 27.0.6 slash: 3.0.0 source-map: 0.6.1 string-length: 4.0.2 terminal-link: 2.1.1 - v8-to-istanbul: 7.1.1 - optionalDependencies: - node-notifier: 8.0.2 + v8-to-istanbul: 8.0.0 transitivePeerDependencies: - supports-color dev: true - /@jest/source-map/26.6.2: - resolution: {integrity: sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==} - engines: {node: '>= 10.14.2'} + /@jest/source-map/27.0.6: + resolution: {integrity: sha512-Fek4mi5KQrqmlY07T23JRi0e7Z9bXTOOD86V/uS0EIW4PClvPDqZOyFlLpNJheS6QI0FNX1CgmPjtJ4EA/2M+g==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: callsites: 3.1.0 graceful-fs: 4.2.6 source-map: 0.6.1 dev: true - /@jest/test-result/26.6.2: - resolution: {integrity: sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==} - engines: {node: '>= 10.14.2'} + /@jest/test-result/27.0.6: + resolution: {integrity: sha512-ja/pBOMTufjX4JLEauLxE3LQBPaI2YjGFtXexRAjt1I/MbfNlMx0sytSX3tn5hSLzQsR3Qy2rd0hc1BWojtj9w==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/console': 26.6.2 - '@jest/types': 26.6.2 + '@jest/console': 27.0.6 + '@jest/types': 27.0.6 '@types/istanbul-lib-coverage': 2.0.3 collect-v8-coverage: 1.0.1 dev: true - /@jest/test-sequencer/26.6.3: - resolution: {integrity: sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==} - engines: {node: '>= 10.14.2'} + /@jest/test-sequencer/27.0.6: + resolution: {integrity: sha512-bISzNIApazYOlTHDum9PwW22NOyDa6VI31n6JucpjTVM0jD6JDgqEZ9+yn575nDdPF0+4csYDxNNW13NvFQGZA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/test-result': 26.6.2 + '@jest/test-result': 27.0.6 graceful-fs: 4.2.6 - jest-haste-map: 26.6.2 - jest-runner: 26.6.3 - jest-runtime: 26.6.3 + jest-haste-map: 27.0.6 + jest-runtime: 27.0.6 transitivePeerDependencies: - - bufferutil - - canvas - supports-color - - ts-node - - utf-8-validate dev: true - /@jest/transform/26.6.2: - resolution: {integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==} - engines: {node: '>= 10.14.2'} + /@jest/transform/27.0.6: + resolution: {integrity: sha512-rj5Dw+mtIcntAUnMlW/Vju5mr73u8yg+irnHwzgtgoeI6cCPOvUwQ0D1uQtc/APmWgvRweEb1g05pkUpxH3iCA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/core': 7.13.16 - '@jest/types': 26.6.2 + '@babel/core': 7.14.8 + '@jest/types': 27.0.6 babel-plugin-istanbul: 6.0.0 chalk: 4.1.1 - convert-source-map: 1.7.0 + convert-source-map: 1.8.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.6 - jest-haste-map: 26.6.2 - jest-regex-util: 26.0.0 - jest-util: 26.6.2 + jest-haste-map: 27.0.6 + jest-regex-util: 27.0.6 + jest-util: 27.0.6 micromatch: 4.0.4 pirates: 4.0.1 slash: 3.0.0 @@ -592,83 +642,116 @@ packages: engines: {node: '>= 10.14.2'} dependencies: '@types/istanbul-lib-coverage': 2.0.3 - '@types/istanbul-reports': 3.0.0 - '@types/node': 12.20.10 - '@types/yargs': 15.0.13 + '@types/istanbul-reports': 3.0.1 + '@types/node': 12.20.16 + '@types/yargs': 15.0.14 + chalk: 4.1.1 + dev: true + + /@jest/types/27.0.6: + resolution: {integrity: sha512-aSquT1qa9Pik26JK5/3rvnYb4bGtm1VFNesHKmNTwmPIgOrixvhL2ghIvFRNEpzy3gU+rUgjIF/KodbkFAl++g==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@types/istanbul-lib-coverage': 2.0.3 + '@types/istanbul-reports': 3.0.1 + '@types/node': 12.20.16 + '@types/yargs': 16.0.4 chalk: 4.1.1 dev: true - /@nodelib/fs.scandir/2.1.4: - resolution: {integrity: sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==} + /@nodelib/fs.scandir/2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} dependencies: - '@nodelib/fs.stat': 2.0.4 + '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 dev: true - /@nodelib/fs.stat/2.0.4: - resolution: {integrity: sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==} + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} dev: true - /@nodelib/fs.walk/1.2.6: - resolution: {integrity: sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==} + /@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} dependencies: - '@nodelib/fs.scandir': 2.1.4 - fastq: 1.11.0 + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.11.1 dev: true - /@prisma/engines/2.24.0-22.5ab68a73e954e003cc528d6e1e42d924ce99c676: - resolution: {integrity: sha512-TxYSY2Rxd1mJ5hZiZI0yrdEH6p9170axpicgEDKdEiwwaAl0kyWJJ5x5LW/vZBv8ppjd7kla6cElS13aY6MKKQ==} + /@prisma/debug/2.27.0: + resolution: {integrity: sha512-Et01S4RoLnQP9u547dCp74aSnLWTu0akfBCzF4zQZsbEdw7wXLttrcvbcYKr+KhpfF5Xu291UP/Kaxg0aj8o4w==} + dependencies: + debug: 4.3.2 + ms: 2.1.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@prisma/engines/2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00: + resolution: {integrity: sha512-DGHNu8Gm5JQmdCvzAOr7C4Hkjaa5kxwJZwnf0sFNdYl3uKjQVd3twhxEQUO5jBhxZGqFOjfC/mbnN3cDYoEDgg==} requiresBuild: true dev: false + /@prisma/get-platform/2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019: + resolution: {integrity: sha512-DsgvAEK/xZ+JLCgwXxTbNkGt0wqfmJAnYhYhfSNFWXNXj6QlXfIe6r+jW/+I5xtRikde5HzwTx9jMJsN1kCvRg==} + dependencies: + '@prisma/debug': 2.27.0 + transitivePeerDependencies: + - supports-color + dev: false + /@sinonjs/commons/1.8.3: resolution: {integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==} dependencies: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers/6.0.1: - resolution: {integrity: sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==} + /@sinonjs/fake-timers/7.1.2: + resolution: {integrity: sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==} dependencies: '@sinonjs/commons': 1.8.3 dev: true - /@types/babel__core/7.1.14: - resolution: {integrity: sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==} + /@tootallnate/once/1.1.2: + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + dev: true + + /@types/babel__core/7.1.15: + resolution: {integrity: sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==} dependencies: - '@babel/parser': 7.13.16 - '@babel/types': 7.13.17 - '@types/babel__generator': 7.6.2 - '@types/babel__template': 7.4.0 - '@types/babel__traverse': 7.11.1 + '@babel/parser': 7.14.8 + '@babel/types': 7.14.8 + '@types/babel__generator': 7.6.3 + '@types/babel__template': 7.4.1 + '@types/babel__traverse': 7.14.2 dev: true - /@types/babel__generator/7.6.2: - resolution: {integrity: sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==} + /@types/babel__generator/7.6.3: + resolution: {integrity: sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==} dependencies: - '@babel/types': 7.13.17 + '@babel/types': 7.14.8 dev: true - /@types/babel__template/7.4.0: - resolution: {integrity: sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==} + /@types/babel__template/7.4.1: + resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.13.16 - '@babel/types': 7.13.17 + '@babel/parser': 7.14.8 + '@babel/types': 7.14.8 dev: true - /@types/babel__traverse/7.11.1: - resolution: {integrity: sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==} + /@types/babel__traverse/7.14.2: + resolution: {integrity: sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==} dependencies: - '@babel/types': 7.13.17 + '@babel/types': 7.14.8 dev: true /@types/graceful-fs/4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: - '@types/node': 12.20.10 + '@types/node': 12.20.16 dev: true /@types/istanbul-lib-coverage/2.0.3: @@ -681,63 +764,61 @@ packages: '@types/istanbul-lib-coverage': 2.0.3 dev: true - /@types/istanbul-reports/3.0.0: - resolution: {integrity: sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==} + /@types/istanbul-reports/3.0.1: + resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} dependencies: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest/26.0.23: - resolution: {integrity: sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA==} + /@types/jest/26.0.24: + resolution: {integrity: sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==} dependencies: jest-diff: 26.6.2 pretty-format: 26.6.2 dev: true - /@types/json-schema/7.0.7: - resolution: {integrity: sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==} - dev: true - - /@types/node/12.20.10: - resolution: {integrity: sha512-TxCmnSSppKBBOzYzPR2BR25YlX5Oay8z2XGwFBInuA/Co0V9xJhLlW4kjbxKtgeNo3NOMbQP1A5Rc03y+XecPw==} - dev: true - - /@types/node/12.20.13: - resolution: {integrity: sha512-1x8W5OpxPq+T85OUsHRP6BqXeosKmeXRtjoF39STcdf/UWLqUsoehstZKOi0CunhVqHG17AyZgpj20eRVooK6A==} + /@types/json-schema/7.0.8: + resolution: {integrity: sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==} dev: true - /@types/normalize-package-data/2.4.0: - resolution: {integrity: sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==} + /@types/node/12.20.16: + resolution: {integrity: sha512-6CLxw83vQf6DKqXxMPwl8qpF8I7THFZuIwLt4TnNsumxkp1VsRZWT8txQxncT/Rl2UojTsFzWgDG4FRMwafrlA==} dev: true /@types/parse-json/4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} dev: true - /@types/prettier/2.2.3: - resolution: {integrity: sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==} + /@types/prettier/2.3.2: + resolution: {integrity: sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==} dev: true /@types/retry/0.12.0: resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} dev: false - /@types/stack-utils/2.0.0: - resolution: {integrity: sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==} + /@types/stack-utils/2.0.1: + resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} + dev: true + + /@types/yargs-parser/20.2.1: + resolution: {integrity: sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==} dev: true - /@types/yargs-parser/20.2.0: - resolution: {integrity: sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==} + /@types/yargs/15.0.14: + resolution: {integrity: sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==} + dependencies: + '@types/yargs-parser': 20.2.1 dev: true - /@types/yargs/15.0.13: - resolution: {integrity: sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==} + /@types/yargs/16.0.4: + resolution: {integrity: sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==} dependencies: - '@types/yargs-parser': 20.2.0 + '@types/yargs-parser': 20.2.1 dev: true - /@typescript-eslint/eslint-plugin/4.25.0_ec7770e83475322b368bff30b543badb: - resolution: {integrity: sha512-Qfs3dWkTMKkKwt78xp2O/KZQB8MPS1UQ5D3YW2s6LQWBE1074BE+Rym+b1pXZIX3M3fSvPUDaCvZLKV2ylVYYQ==} + /@typescript-eslint/eslint-plugin/4.28.4_b1648df9f9ba40bdeef3710a5a5af353: + resolution: {integrity: sha512-s1oY4RmYDlWMlcV0kKPBaADn46JirZzvvH7c2CtAqxCY96S538JRBAzt83RrfkDheV/+G/vWNK0zek+8TB3Gmw==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: '@typescript-eslint/parser': ^4.0.0 @@ -747,59 +828,58 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/experimental-utils': 4.25.0_eslint@7.27.0+typescript@4.3.2 - '@typescript-eslint/parser': 4.25.0_eslint@7.27.0+typescript@4.3.2 - '@typescript-eslint/scope-manager': 4.25.0 - debug: 4.3.1 - eslint: 7.27.0 + '@typescript-eslint/experimental-utils': 4.28.4_eslint@7.31.0+typescript@4.3.5 + '@typescript-eslint/parser': 4.28.4_eslint@7.31.0+typescript@4.3.5 + '@typescript-eslint/scope-manager': 4.28.4 + debug: 4.3.2 + eslint: 7.31.0 functional-red-black-tree: 1.0.1 - lodash: 4.17.21 - regexpp: 3.1.0 + regexpp: 3.2.0 semver: 7.3.5 - tsutils: 3.21.0_typescript@4.3.2 - typescript: 4.3.2 + tsutils: 3.21.0_typescript@4.3.5 + typescript: 4.3.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/experimental-utils/4.22.0_eslint@7.27.0+typescript@4.3.2: - resolution: {integrity: sha512-xJXHHl6TuAxB5AWiVrGhvbGL8/hbiCQ8FiWwObO3r0fnvBdrbWEDy1hlvGQOAWc6qsCWuWMKdVWlLAEMpxnddg==} + /@typescript-eslint/experimental-utils/4.28.4_eslint@7.31.0+typescript@4.3.5: + resolution: {integrity: sha512-OglKWOQRWTCoqMSy6pm/kpinEIgdcXYceIcH3EKWUl4S8xhFtN34GQRaAvTIZB9DD94rW7d/U7tUg3SYeDFNHA==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: eslint: '*' dependencies: - '@types/json-schema': 7.0.7 - '@typescript-eslint/scope-manager': 4.22.0 - '@typescript-eslint/types': 4.22.0 - '@typescript-eslint/typescript-estree': 4.22.0_typescript@4.3.2 - eslint: 7.27.0 + '@types/json-schema': 7.0.8 + '@typescript-eslint/scope-manager': 4.28.4 + '@typescript-eslint/types': 4.28.4 + '@typescript-eslint/typescript-estree': 4.28.4_typescript@4.3.5 + eslint: 7.31.0 eslint-scope: 5.1.1 - eslint-utils: 2.1.0 + eslint-utils: 3.0.0_eslint@7.31.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/experimental-utils/4.25.0_eslint@7.27.0+typescript@4.3.2: - resolution: {integrity: sha512-f0doRE76vq7NEEU0tw+ajv6CrmPelw5wLoaghEHkA2dNLFb3T/zJQqGPQ0OYt5XlZaS13MtnN+GTPCuUVg338w==} + /@typescript-eslint/experimental-utils/4.28.5_eslint@7.31.0+typescript@4.3.5: + resolution: {integrity: sha512-bGPLCOJAa+j49hsynTaAtQIWg6uZd8VLiPcyDe4QPULsvQwLHGLSGKKcBN8/lBxIX14F74UEMK2zNDI8r0okwA==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: eslint: '*' dependencies: - '@types/json-schema': 7.0.7 - '@typescript-eslint/scope-manager': 4.25.0 - '@typescript-eslint/types': 4.25.0 - '@typescript-eslint/typescript-estree': 4.25.0_typescript@4.3.2 - eslint: 7.27.0 + '@types/json-schema': 7.0.8 + '@typescript-eslint/scope-manager': 4.28.5 + '@typescript-eslint/types': 4.28.5 + '@typescript-eslint/typescript-estree': 4.28.5_typescript@4.3.5 + eslint: 7.31.0 eslint-scope: 5.1.1 - eslint-utils: 2.1.0 + eslint-utils: 3.0.0_eslint@7.31.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/parser/4.25.0_eslint@7.27.0+typescript@4.3.2: - resolution: {integrity: sha512-OZFa1SKyEJpAhDx8FcbWyX+vLwh7OEtzoo2iQaeWwxucyfbi0mT4DijbOSsTgPKzGHr6GrF2V5p/CEpUH/VBxg==} + /@typescript-eslint/parser/4.28.4_eslint@7.31.0+typescript@4.3.5: + resolution: {integrity: sha512-4i0jq3C6n+og7/uCHiE6q5ssw87zVdpUj1k6VlVYMonE3ILdFApEzTWgppSRG4kVNB/5jxnH+gTeKLMNfUelQA==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -808,44 +888,44 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 4.25.0 - '@typescript-eslint/types': 4.25.0 - '@typescript-eslint/typescript-estree': 4.25.0_typescript@4.3.2 - debug: 4.3.1 - eslint: 7.27.0 - typescript: 4.3.2 + '@typescript-eslint/scope-manager': 4.28.4 + '@typescript-eslint/types': 4.28.4 + '@typescript-eslint/typescript-estree': 4.28.4_typescript@4.3.5 + debug: 4.3.2 + eslint: 7.31.0 + typescript: 4.3.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/4.22.0: - resolution: {integrity: sha512-OcCO7LTdk6ukawUM40wo61WdeoA7NM/zaoq1/2cs13M7GyiF+T4rxuA4xM+6LeHWjWbss7hkGXjFDRcKD4O04Q==} + /@typescript-eslint/scope-manager/4.28.4: + resolution: {integrity: sha512-ZJBNs4usViOmlyFMt9X9l+X0WAFcDH7EdSArGqpldXu7aeZxDAuAzHiMAeI+JpSefY2INHrXeqnha39FVqXb8w==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dependencies: - '@typescript-eslint/types': 4.22.0 - '@typescript-eslint/visitor-keys': 4.22.0 + '@typescript-eslint/types': 4.28.4 + '@typescript-eslint/visitor-keys': 4.28.4 dev: true - /@typescript-eslint/scope-manager/4.25.0: - resolution: {integrity: sha512-2NElKxMb/0rya+NJG1U71BuNnp1TBd1JgzYsldsdA83h/20Tvnf/HrwhiSlNmuq6Vqa0EzidsvkTArwoq+tH6w==} + /@typescript-eslint/scope-manager/4.28.5: + resolution: {integrity: sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dependencies: - '@typescript-eslint/types': 4.25.0 - '@typescript-eslint/visitor-keys': 4.25.0 + '@typescript-eslint/types': 4.28.5 + '@typescript-eslint/visitor-keys': 4.28.5 dev: true - /@typescript-eslint/types/4.22.0: - resolution: {integrity: sha512-sW/BiXmmyMqDPO2kpOhSy2Py5w6KvRRsKZnV0c4+0nr4GIcedJwXAq+RHNK4lLVEZAJYFltnnk1tJSlbeS9lYA==} + /@typescript-eslint/types/4.28.4: + resolution: {integrity: sha512-3eap4QWxGqkYuEmVebUGULMskR6Cuoc/Wii0oSOddleP4EGx1tjLnZQ0ZP33YRoMDCs5O3j56RBV4g14T4jvww==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dev: true - /@typescript-eslint/types/4.25.0: - resolution: {integrity: sha512-+CNINNvl00OkW6wEsi32wU5MhHti2J25TJsJJqgQmJu3B3dYDBcmOxcE5w9cgoM13TrdE/5ND2HoEnBohasxRQ==} + /@typescript-eslint/types/4.28.5: + resolution: {integrity: sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dev: true - /@typescript-eslint/typescript-estree/4.22.0_typescript@4.3.2: - resolution: {integrity: sha512-TkIFeu5JEeSs5ze/4NID+PIcVjgoU3cUQUIZnH3Sb1cEn1lBo7StSV5bwPuJQuoxKXlzAObjYTilOEKRuhR5yg==} + /@typescript-eslint/typescript-estree/4.28.4_typescript@4.3.5: + resolution: {integrity: sha512-z7d8HK8XvCRyN2SNp+OXC2iZaF+O2BTquGhEYLKLx5k6p0r05ureUtgEfo5f6anLkhCxdHtCf6rPM1p4efHYDQ==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: typescript: '*' @@ -853,20 +933,20 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 4.22.0 - '@typescript-eslint/visitor-keys': 4.22.0 - debug: 4.3.1 - globby: 11.0.3 + '@typescript-eslint/types': 4.28.4 + '@typescript-eslint/visitor-keys': 4.28.4 + debug: 4.3.2 + globby: 11.0.4 is-glob: 4.0.1 semver: 7.3.5 - tsutils: 3.21.0_typescript@4.3.2 - typescript: 4.3.2 + tsutils: 3.21.0_typescript@4.3.5 + typescript: 4.3.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree/4.25.0_typescript@4.3.2: - resolution: {integrity: sha512-1B8U07TGNAFMxZbSpF6jqiDs1cVGO0izVkf18Q/SPcUAc9LhHxzvSowXDTvkHMWUVuPpagupaW63gB6ahTXVlg==} + /@typescript-eslint/typescript-estree/4.28.5_typescript@4.3.5: + resolution: {integrity: sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: typescript: '*' @@ -874,32 +954,32 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 4.25.0 - '@typescript-eslint/visitor-keys': 4.25.0 - debug: 4.3.1 - globby: 11.0.3 + '@typescript-eslint/types': 4.28.5 + '@typescript-eslint/visitor-keys': 4.28.5 + debug: 4.3.2 + globby: 11.0.4 is-glob: 4.0.1 semver: 7.3.5 - tsutils: 3.21.0_typescript@4.3.2 - typescript: 4.3.2 + tsutils: 3.21.0_typescript@4.3.5 + typescript: 4.3.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/visitor-keys/4.22.0: - resolution: {integrity: sha512-nnMu4F+s4o0sll6cBSsTeVsT4cwxB7zECK3dFxzEjPBii9xLpq4yqqsy/FU5zMfan6G60DKZSCXAa3sHJZrcYw==} + /@typescript-eslint/visitor-keys/4.28.4: + resolution: {integrity: sha512-NIAXAdbz1XdOuzqkJHjNKXKj8QQ4cv5cxR/g0uQhCYf/6//XrmfpaYsM7PnBcNbfvTDLUkqQ5TPNm1sozDdTWg==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dependencies: - '@typescript-eslint/types': 4.22.0 - eslint-visitor-keys: 2.0.0 + '@typescript-eslint/types': 4.28.4 + eslint-visitor-keys: 2.1.0 dev: true - /@typescript-eslint/visitor-keys/4.25.0: - resolution: {integrity: sha512-AmkqV9dDJVKP/TcZrbf6s6i1zYXt5Hl8qOLrRDTFfRNae4+LB8A4N3i+FLZPW85zIxRy39BgeWOfMS3HoH5ngg==} + /@typescript-eslint/visitor-keys/4.28.5: + resolution: {integrity: sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dependencies: - '@typescript-eslint/types': 4.25.0 - eslint-visitor-keys: 2.0.0 + '@typescript-eslint/types': 4.28.5 + eslint-visitor-keys: 2.1.0 dev: true /abab/2.0.5: @@ -913,8 +993,8 @@ packages: acorn-walk: 7.2.0 dev: true - /acorn-jsx/5.3.1_acorn@7.4.1: - resolution: {integrity: sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==} + /acorn-jsx/5.3.2_acorn@7.4.1: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: @@ -932,12 +1012,21 @@ packages: hasBin: true dev: true - /acorn/8.2.1: - resolution: {integrity: sha512-z716cpm5TX4uzOzILx8PavOE6C6DKshHDw1aQN52M/yNSqE9s5O8SMfyhCCfCJ3HmTL0NkVOi+8a/55T7YB3bg==} + /acorn/8.4.1: + resolution: {integrity: sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==} engines: {node: '>=0.4.0'} hasBin: true dev: true + /agent-base/6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.2 + transitivePeerDependencies: + - supports-color + dev: true + /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -955,8 +1044,8 @@ packages: uri-js: 4.4.1 dev: true - /ajv/8.1.0: - resolution: {integrity: sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ==} + /ajv/8.6.2: + resolution: {integrity: sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==} dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 @@ -993,11 +1082,9 @@ packages: dependencies: color-convert: 2.0.1 - /anymatch/2.0.0: - resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} - dependencies: - micromatch: 3.1.10 - normalize-path: 2.1.1 + /ansi-styles/5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} dev: true /anymatch/3.1.2: @@ -1005,7 +1092,7 @@ packages: engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 - picomatch: 2.2.3 + picomatch: 2.3.0 dev: true /argparse/1.0.10: @@ -1014,47 +1101,11 @@ packages: sprintf-js: 1.0.3 dev: true - /arr-diff/4.0.0: - resolution: {integrity: sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=} - engines: {node: '>=0.10.0'} - dev: true - - /arr-flatten/1.1.0: - resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} - engines: {node: '>=0.10.0'} - dev: true - - /arr-union/3.1.0: - resolution: {integrity: sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=} - engines: {node: '>=0.10.0'} - dev: true - /array-union/2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true - /array-unique/0.3.2: - resolution: {integrity: sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=} - engines: {node: '>=0.10.0'} - dev: true - - /asn1/0.2.4: - resolution: {integrity: sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==} - dependencies: - safer-buffer: 2.1.2 - dev: true - - /assert-plus/1.0.0: - resolution: {integrity: sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=} - engines: {node: '>=0.8'} - dev: true - - /assign-symbols/1.0.0: - resolution: {integrity: sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=} - engines: {node: '>=0.10.0'} - dev: true - /astral-regex/2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} @@ -1064,32 +1115,18 @@ packages: resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=} dev: true - /atob/2.1.2: - resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} - engines: {node: '>= 4.5.0'} - hasBin: true - dev: true - - /aws-sign2/0.7.0: - resolution: {integrity: sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=} - dev: true - - /aws4/1.11.0: - resolution: {integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==} - dev: true - - /babel-jest/26.6.3_@babel+core@7.13.16: - resolution: {integrity: sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==} - engines: {node: '>= 10.14.2'} + /babel-jest/27.0.6_@babel+core@7.14.8: + resolution: {integrity: sha512-iTJyYLNc4wRofASmofpOc5NK9QunwMk+TLFgGXsTFS8uEqmd8wdI7sga0FPe2oVH3b5Agt/EAK1QjPEuKL8VfA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.13.16 - '@jest/transform': 26.6.2 - '@jest/types': 26.6.2 - '@types/babel__core': 7.1.14 + '@babel/core': 7.14.8 + '@jest/transform': 27.0.6 + '@jest/types': 27.0.6 + '@types/babel__core': 7.1.15 babel-plugin-istanbul: 6.0.0 - babel-preset-jest: 26.6.2_@babel+core@7.13.16 + babel-preset-jest: 27.0.6_@babel+core@7.14.8 chalk: 4.1.1 graceful-fs: 4.2.6 slash: 3.0.0 @@ -1101,7 +1138,7 @@ packages: resolution: {integrity: sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.13.0 + '@babel/helper-plugin-utils': 7.14.5 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 4.0.3 @@ -1110,70 +1147,51 @@ packages: - supports-color dev: true - /babel-plugin-jest-hoist/26.6.2: - resolution: {integrity: sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==} - engines: {node: '>= 10.14.2'} + /babel-plugin-jest-hoist/27.0.6: + resolution: {integrity: sha512-CewFeM9Vv2gM7Yr9n5eyyLVPRSiBnk6lKZRjgwYnGKSl9M14TMn2vkN02wTF04OGuSDLEzlWiMzvjXuW9mB6Gw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/template': 7.12.13 - '@babel/types': 7.13.17 - '@types/babel__core': 7.1.14 - '@types/babel__traverse': 7.11.1 + '@babel/template': 7.14.5 + '@babel/types': 7.14.8 + '@types/babel__core': 7.1.15 + '@types/babel__traverse': 7.14.2 dev: true - /babel-preset-current-node-syntax/1.0.1_@babel+core@7.13.16: + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.14.8: resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.13.16 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.13.16 - '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.13.16 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.13.16 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.13.16 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.13.16 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.13.16 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.13.16 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.13.16 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.13.16 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.13.16 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.13.16 - '@babel/plugin-syntax-top-level-await': 7.12.13_@babel+core@7.13.16 - dev: true - - /babel-preset-jest/26.6.2_@babel+core@7.13.16: - resolution: {integrity: sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==} - engines: {node: '>= 10.14.2'} + '@babel/core': 7.14.8 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.14.8 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.14.8 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.14.8 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.14.8 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.14.8 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.14.8 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.14.8 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.14.8 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.14.8 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.14.8 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.14.8 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.14.8 + dev: true + + /babel-preset-jest/27.0.6_@babel+core@7.14.8: + resolution: {integrity: sha512-WObA0/Biw2LrVVwZkF/2GqbOdzhKD6Fkdwhoy9ASIrOWr/zodcSpQh72JOkEn6NWyjmnPDjNSqaGN4KnpKzhXw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.13.16 - babel-plugin-jest-hoist: 26.6.2 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.13.16 + '@babel/core': 7.14.8 + babel-plugin-jest-hoist: 27.0.6 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.14.8 dev: true /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /base/0.11.2: - resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} - engines: {node: '>=0.10.0'} - dependencies: - cache-base: 1.0.1 - class-utils: 0.3.6 - component-emitter: 1.3.0 - define-property: 1.0.0 - isobject: 3.0.1 - mixin-deep: 1.3.2 - pascalcase: 0.1.1 - dev: true - - /bcrypt-pbkdf/1.0.2: - resolution: {integrity: sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=} - dependencies: - tweetnacl: 0.14.5 - dev: true - /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -1181,22 +1199,6 @@ packages: concat-map: 0.0.1 dev: true - /braces/2.3.2: - resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} - engines: {node: '>=0.10.0'} - dependencies: - arr-flatten: 1.1.0 - array-unique: 0.3.2 - extend-shallow: 2.0.1 - fill-range: 4.0.0 - isobject: 3.0.1 - repeat-element: 1.1.4 - snapdragon: 0.8.2 - snapdragon-node: 2.1.1 - split-string: 3.1.0 - to-regex: 3.0.2 - dev: true - /braces/3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} @@ -1208,16 +1210,16 @@ packages: resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} dev: true - /browserslist/4.16.5: - resolution: {integrity: sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A==} + /browserslist/4.16.6: + resolution: {integrity: sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001214 + caniuse-lite: 1.0.30001248 colorette: 1.2.2 - electron-to-chromium: 1.3.720 + electron-to-chromium: 1.3.791 escalade: 3.1.1 - node-releases: 1.1.71 + node-releases: 1.1.73 dev: true /bs-logger/0.2.6: @@ -1233,23 +1235,8 @@ packages: node-int64: 0.4.0 dev: true - /buffer-from/1.1.1: - resolution: {integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==} - dev: true - - /cache-base/1.0.1: - resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} - engines: {node: '>=0.10.0'} - dependencies: - collection-visit: 1.0.0 - component-emitter: 1.3.0 - get-value: 2.0.6 - has-value: 1.0.0 - isobject: 3.0.1 - set-value: 2.0.1 - to-object-path: 0.3.0 - union-value: 1.0.1 - unset-value: 1.0.0 + /buffer-from/1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true /callsites/3.1.0: @@ -1267,19 +1254,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite/1.0.30001214: - resolution: {integrity: sha512-O2/SCpuaU3eASWVaesQirZv1MSjUNOvmugaD8zNSJqw6Vv5SGwoOpA9LJs3pNPfM745nxqPvfZY3MQKY4AKHYg==} - dev: true - - /capture-exit/2.0.0: - resolution: {integrity: sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==} - engines: {node: 6.* || 8.* || >= 10.*} - dependencies: - rsvp: 4.8.5 - dev: true - - /caseless/0.12.0: - resolution: {integrity: sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=} + /caniuse-lite/1.0.30001248: + resolution: {integrity: sha512-NwlQbJkxUFJ8nMErnGtT0QTM2TJ33xgz4KXJSMIrjXIbDVdaYueGyjOrLKRtJC+rTiWfi6j5cnZN1NBiSBJGNw==} dev: true /chalk/2.4.2: @@ -1303,22 +1279,12 @@ packages: engines: {node: '>=10'} dev: true - /ci-info/2.0.0: - resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + /ci-info/3.2.0: + resolution: {integrity: sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==} dev: true - /cjs-module-lexer/0.6.0: - resolution: {integrity: sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==} - dev: true - - /class-utils/0.3.6: - resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} - engines: {node: '>=0.10.0'} - dependencies: - arr-union: 3.1.0 - define-property: 0.2.5 - isobject: 3.0.1 - static-extend: 0.1.2 + /cjs-module-lexer/1.2.2: + resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} dev: true /clean-stack/2.2.0: @@ -1341,12 +1307,12 @@ packages: string-width: 4.2.2 dev: true - /cliui/6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + /cliui/7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} dependencies: string-width: 4.2.2 strip-ansi: 6.0.0 - wrap-ansi: 6.2.0 + wrap-ansi: 7.0.0 dev: true /co/4.6.0: @@ -1358,14 +1324,6 @@ packages: resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} dev: true - /collection-visit/1.0.0: - resolution: {integrity: sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=} - engines: {node: '>=0.10.0'} - dependencies: - map-visit: 1.0.0 - object-visit: 1.0.1 - dev: true - /color-convert/1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -1401,29 +1359,16 @@ packages: engines: {node: '>= 10'} dev: true - /component-emitter/1.3.0: - resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} - dev: true - /concat-map/0.0.1: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} dev: true - /convert-source-map/1.7.0: - resolution: {integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==} + /convert-source-map/1.8.0: + resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} dependencies: safe-buffer: 5.1.2 dev: true - /copy-descriptor/0.1.1: - resolution: {integrity: sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=} - engines: {node: '>=0.10.0'} - dev: true - - /core-util-is/1.0.2: - resolution: {integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=} - dev: true - /cosmiconfig/7.0.0: resolution: {integrity: sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==} engines: {node: '>=10'} @@ -1435,17 +1380,6 @@ packages: yaml: 1.10.2 dev: true - /cross-spawn/6.0.5: - resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} - engines: {node: '>=4.8'} - dependencies: - nice-try: 1.0.5 - path-key: 2.0.1 - semver: 5.7.1 - shebang-command: 1.2.0 - which: 1.3.1 - dev: true - /cross-spawn/7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -1469,30 +1403,17 @@ packages: cssom: 0.3.8 dev: true - /dashdash/1.14.1: - resolution: {integrity: sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=} - engines: {node: '>=0.10'} - dependencies: - assert-plus: 1.0.0 - dev: true - /data-urls/2.0.0: resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} engines: {node: '>=10'} dependencies: abab: 2.0.5 whatwg-mimetype: 2.3.0 - whatwg-url: 8.5.0 + whatwg-url: 8.7.0 dev: true - /debug/2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - dependencies: - ms: 2.0.0 - dev: true - - /debug/4.3.1: - resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} + /debug/4.3.2: + resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1501,20 +1422,9 @@ packages: optional: true dependencies: ms: 2.1.2 - dev: true - /decamelize/1.2.0: - resolution: {integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=} - engines: {node: '>=0.10.0'} - dev: true - - /decimal.js/10.2.1: - resolution: {integrity: sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==} - dev: true - - /decode-uri-component/0.2.0: - resolution: {integrity: sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=} - engines: {node: '>=0.10'} + /decimal.js/10.3.1: + resolution: {integrity: sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==} dev: true /dedent/0.7.0: @@ -1530,28 +1440,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /define-property/0.2.5: - resolution: {integrity: sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=} - engines: {node: '>=0.10.0'} - dependencies: - is-descriptor: 0.1.6 - dev: true - - /define-property/1.0.0: - resolution: {integrity: sha1-dp66rz9KY6rTr56NMEybvnm/sOY=} - engines: {node: '>=0.10.0'} - dependencies: - is-descriptor: 1.0.2 - dev: true - - /define-property/2.0.2: - resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} - engines: {node: '>=0.10.0'} - dependencies: - is-descriptor: 1.0.2 - isobject: 3.0.1 - dev: true - /delayed-stream/1.0.0: resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=} engines: {node: '>=0.4.0'} @@ -1567,6 +1455,11 @@ packages: engines: {node: '>= 10.14.2'} dev: true + /diff-sequences/27.0.6: + resolution: {integrity: sha512-ag6wfpBFyNXZ0p8pcuIDS//D8H062ZQJ3fzYxjpmeKjnz8W4pekL3AI8VohmyZmsWW2PWaHgjsmqR6L13101VQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true + /dir-glob/3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -1588,19 +1481,12 @@ packages: webidl-conversions: 5.0.0 dev: true - /ecc-jsbn/0.1.2: - resolution: {integrity: sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=} - dependencies: - jsbn: 0.1.1 - safer-buffer: 2.1.2 - dev: true - - /electron-to-chromium/1.3.720: - resolution: {integrity: sha512-B6zLTxxaOFP4WZm6DrvgRk8kLFYWNhQ5TrHMC0l5WtkMXhU5UbnvWoTfeEwqOruUSlNMhVLfYak7REX6oC5Yfw==} + /electron-to-chromium/1.3.791: + resolution: {integrity: sha512-Tdx7w1fZpeWOOBluK+kXTAKCXyc79K65RB6Zp0+sPSZZhDjXlrxfGlXrlMGVVQUrKCyEZFQs1UBBLNz5IdbF0g==} dev: true - /emittery/0.7.2: - resolution: {integrity: sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==} + /emittery/0.8.1: + resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} engines: {node: '>=10'} dev: true @@ -1608,12 +1494,6 @@ packages: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true - /end-of-stream/1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - dependencies: - once: 1.4.0 - dev: true - /enquirer/2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} @@ -1660,28 +1540,28 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-prettier/8.3.0_eslint@7.27.0: + /eslint-config-prettier/8.3.0_eslint@7.31.0: resolution: {integrity: sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 7.27.0 + eslint: 7.31.0 dev: true - /eslint-plugin-eslint-comments/3.2.0_eslint@7.27.0: + /eslint-plugin-eslint-comments/3.2.0_eslint@7.31.0: resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} engines: {node: '>=6.5.0'} peerDependencies: eslint: '>=4.19.1' dependencies: escape-string-regexp: 1.0.5 - eslint: 7.27.0 + eslint: 7.31.0 ignore: 5.1.8 dev: true - /eslint-plugin-jest/24.3.6_cbabd036d07985467c50cb9e2b9941b7: - resolution: {integrity: sha512-WOVH4TIaBLIeCX576rLcOgjNXqP+jNlCiEmRgFTfQtJ52DpwnIQKAVGlGPAN7CZ33bW6eNfHD6s8ZbEUTQubJg==} + /eslint-plugin-jest/24.4.0_fc5326c9e782cff3be563ae5197052dc: + resolution: {integrity: sha512-8qnt/hgtZ94E9dA6viqfViKBfkJwFHXgJmTWlMGDgunw1XJEGqm3eiPjDsTanM3/u/3Az82nyQM9GX7PM/QGmg==} engines: {node: '>=10'} peerDependencies: '@typescript-eslint/eslint-plugin': '>= 4' @@ -1690,15 +1570,15 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 4.25.0_ec7770e83475322b368bff30b543badb - '@typescript-eslint/experimental-utils': 4.22.0_eslint@7.27.0+typescript@4.3.2 - eslint: 7.27.0 + '@typescript-eslint/eslint-plugin': 4.28.4_b1648df9f9ba40bdeef3710a5a5af353 + '@typescript-eslint/experimental-utils': 4.28.5_eslint@7.31.0+typescript@4.3.5 + eslint: 7.31.0 transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-prettier/3.4.0_beb8ddd1fba5378f74976112c7860a07: + /eslint-plugin-prettier/3.4.0_19f511d6aa08b367b6cb59e8f50291ca: resolution: {integrity: sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==} engines: {node: '>=6.0.0'} peerDependencies: @@ -1709,9 +1589,9 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 7.27.0 - eslint-config-prettier: 8.3.0_eslint@7.27.0 - prettier: 2.3.0 + eslint: 7.31.0 + eslint-config-prettier: 8.3.0_eslint@7.31.0 + prettier: 2.3.2 prettier-linter-helpers: 1.0.0 dev: true @@ -1730,33 +1610,44 @@ packages: eslint-visitor-keys: 1.3.0 dev: true + /eslint-utils/3.0.0_eslint@7.31.0: + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + dependencies: + eslint: 7.31.0 + eslint-visitor-keys: 2.1.0 + dev: true + /eslint-visitor-keys/1.3.0: resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} engines: {node: '>=4'} dev: true - /eslint-visitor-keys/2.0.0: - resolution: {integrity: sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==} + /eslint-visitor-keys/2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} dev: true - /eslint/7.27.0: - resolution: {integrity: sha512-JZuR6La2ZF0UD384lcbnd0Cgg6QJjiCwhMD6eU4h/VGPcVGwawNNzKU41tgokGXnfjOOyI6QIffthhJTPzzuRA==} + /eslint/7.31.0: + resolution: {integrity: sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==} engines: {node: ^10.12.0 || >=12.0.0} hasBin: true dependencies: '@babel/code-frame': 7.12.11 - '@eslint/eslintrc': 0.4.1 + '@eslint/eslintrc': 0.4.3 + '@humanwhocodes/config-array': 0.5.0 ajv: 6.12.6 chalk: 4.1.1 cross-spawn: 7.0.3 - debug: 4.3.1 + debug: 4.3.2 doctrine: 3.0.0 enquirer: 2.3.6 escape-string-regexp: 4.0.0 eslint-scope: 5.1.1 eslint-utils: 2.1.0 - eslint-visitor-keys: 2.0.0 + eslint-visitor-keys: 2.1.0 espree: 7.3.1 esquery: 1.4.0 esutils: 2.0.3 @@ -1764,7 +1655,7 @@ packages: file-entry-cache: 6.0.1 functional-red-black-tree: 1.0.1 glob-parent: 5.1.2 - globals: 13.8.0 + globals: 13.10.0 ignore: 4.0.6 import-fresh: 3.3.0 imurmurhash: 0.1.4 @@ -1777,11 +1668,11 @@ packages: natural-compare: 1.4.0 optionator: 0.9.1 progress: 2.0.3 - regexpp: 3.1.0 + regexpp: 3.2.0 semver: 7.3.5 strip-ansi: 6.0.0 strip-json-comments: 3.1.1 - table: 6.5.1 + table: 6.7.1 text-table: 0.2.0 v8-compile-cache: 2.3.0 transitivePeerDependencies: @@ -1793,7 +1684,7 @@ packages: engines: {node: ^10.12.0 || >=12.0.0} dependencies: acorn: 7.4.1 - acorn-jsx: 5.3.1_acorn@7.4.1 + acorn-jsx: 5.3.2_acorn@7.4.1 eslint-visitor-keys: 1.3.0 dev: true @@ -1832,38 +1723,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /exec-sh/0.3.6: - resolution: {integrity: sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==} - dev: true - - /execa/1.0.0: - resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} - engines: {node: '>=6'} - dependencies: - cross-spawn: 6.0.5 - get-stream: 4.1.0 - is-stream: 1.1.0 - npm-run-path: 2.0.2 - p-finally: 1.0.0 - signal-exit: 3.0.3 - strip-eof: 1.0.0 - dev: true - - /execa/4.1.0: - resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 5.2.0 - human-signals: 1.1.1 - is-stream: 2.0.0 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.3 - strip-final-newline: 2.0.0 - dev: true - /execa/5.0.0: resolution: {integrity: sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==} engines: {node: '>=10'} @@ -1883,87 +1742,35 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /expand-brackets/2.1.4: - resolution: {integrity: sha1-t3c14xXOMPa27/D4OwQVGiJEliI=} - engines: {node: '>=0.10.0'} + /expect/27.0.6: + resolution: {integrity: sha512-psNLt8j2kwg42jGBDSfAlU49CEZxejN1f1PlANWDZqIhBOVU/c2Pm888FcjWJzFewhIsNWfZJeLjUjtKGiPuSw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - debug: 2.6.9 - define-property: 0.2.5 - extend-shallow: 2.0.1 - posix-character-classes: 0.1.1 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 + '@jest/types': 27.0.6 + ansi-styles: 5.2.0 + jest-get-type: 27.0.6 + jest-matcher-utils: 27.0.6 + jest-message-util: 27.0.6 + jest-regex-util: 27.0.6 dev: true - /expect/26.6.2: - resolution: {integrity: sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==} - engines: {node: '>= 10.14.2'} - dependencies: - '@jest/types': 26.6.2 - ansi-styles: 4.3.0 - jest-get-type: 26.3.0 - jest-matcher-utils: 26.6.2 - jest-message-util: 26.6.2 - jest-regex-util: 26.0.0 + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /extend-shallow/2.0.1: - resolution: {integrity: sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=} - engines: {node: '>=0.10.0'} - dependencies: - is-extendable: 0.1.1 + /fast-diff/1.2.0: + resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} dev: true - /extend-shallow/3.0.2: - resolution: {integrity: sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=} - engines: {node: '>=0.10.0'} - dependencies: - assign-symbols: 1.0.0 - is-extendable: 1.0.1 - dev: true - - /extend/3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: true - - /extglob/2.0.4: - resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} - engines: {node: '>=0.10.0'} - dependencies: - array-unique: 0.3.2 - define-property: 1.0.0 - expand-brackets: 2.1.4 - extend-shallow: 2.0.1 - fragment-cache: 0.2.1 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - dev: true - - /extsprintf/1.3.0: - resolution: {integrity: sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=} - engines: {'0': node >=0.6.0} - dev: true - - /fast-deep-equal/3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true - - /fast-diff/1.2.0: - resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} - dev: true - - /fast-glob/3.2.5: - resolution: {integrity: sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==} + /fast-glob/3.2.7: + resolution: {integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==} engines: {node: '>=8'} dependencies: - '@nodelib/fs.stat': 2.0.4 - '@nodelib/fs.walk': 1.2.6 + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.4 - picomatch: 2.2.3 dev: true /fast-json-stable-stringify/2.1.0: @@ -1974,8 +1781,8 @@ packages: resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} dev: true - /fastq/1.11.0: - resolution: {integrity: sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==} + /fastq/1.11.1: + resolution: {integrity: sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==} dependencies: reusify: 1.0.4 dev: true @@ -1993,16 +1800,6 @@ packages: flat-cache: 3.0.4 dev: true - /fill-range/4.0.0: - resolution: {integrity: sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=} - engines: {node: '>=0.10.0'} - dependencies: - extend-shallow: 2.0.1 - is-number: 3.0.0 - repeat-string: 1.6.1 - to-regex-range: 2.1.1 - dev: true - /fill-range/7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -2022,37 +1819,21 @@ packages: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.1.1 + flatted: 3.2.2 rimraf: 3.0.2 dev: true - /flatted/3.1.1: - resolution: {integrity: sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==} - dev: true - - /for-in/1.0.2: - resolution: {integrity: sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=} - engines: {node: '>=0.10.0'} - dev: true - - /forever-agent/0.6.1: - resolution: {integrity: sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=} + /flatted/3.2.2: + resolution: {integrity: sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==} dev: true - /form-data/2.3.3: - resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} - engines: {node: '>= 0.12'} + /form-data/3.0.1: + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + engines: {node: '>= 6'} dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 - mime-types: 2.1.30 - dev: true - - /fragment-cache/0.2.1: - resolution: {integrity: sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=} - engines: {node: '>=0.10.0'} - dependencies: - map-cache: 0.2.2 + mime-types: 2.1.32 dev: true /fs.realpath/1.0.0: @@ -2093,35 +1874,10 @@ packages: engines: {node: '>=8.0.0'} dev: true - /get-stream/4.1.0: - resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} - engines: {node: '>=6'} - dependencies: - pump: 3.0.0 - dev: true - - /get-stream/5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - dependencies: - pump: 3.0.0 - dev: true - /get-stream/6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - /get-value/2.0.6: - resolution: {integrity: sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=} - engines: {node: '>=0.10.0'} - dev: true - - /getpass/0.1.7: - resolution: {integrity: sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=} - dependencies: - assert-plus: 1.0.0 - dev: true - /glob-parent/5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -2129,8 +1885,8 @@ packages: is-glob: 4.0.1 dev: true - /glob/7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + /glob/7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -2145,27 +1901,20 @@ packages: engines: {node: '>=4'} dev: true - /globals/12.4.0: - resolution: {integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.8.1 - dev: true - - /globals/13.8.0: - resolution: {integrity: sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==} + /globals/13.10.0: + resolution: {integrity: sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true - /globby/11.0.3: - resolution: {integrity: sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==} + /globby/11.0.4: + resolution: {integrity: sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==} engines: {node: '>=10'} dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.5 + fast-glob: 3.2.7 ignore: 5.1.8 merge2: 1.4.1 slash: 3.0.0 @@ -2175,25 +1924,6 @@ packages: resolution: {integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==} dev: true - /growly/1.3.0: - resolution: {integrity: sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=} - dev: true - optional: true - - /har-schema/2.0.0: - resolution: {integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=} - engines: {node: '>=4'} - dev: true - - /har-validator/5.1.5: - resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} - engines: {node: '>=6'} - deprecated: this library is no longer supported - dependencies: - ajv: 6.12.6 - har-schema: 2.0.0 - dev: true - /has-flag/3.0.0: resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} engines: {node: '>=4'} @@ -2203,37 +1933,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-value/0.3.1: - resolution: {integrity: sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=} - engines: {node: '>=0.10.0'} - dependencies: - get-value: 2.0.6 - has-values: 0.1.4 - isobject: 2.1.0 - dev: true - - /has-value/1.0.0: - resolution: {integrity: sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=} - engines: {node: '>=0.10.0'} - dependencies: - get-value: 2.0.6 - has-values: 1.0.0 - isobject: 3.0.1 - dev: true - - /has-values/0.1.4: - resolution: {integrity: sha1-bWHeldkd/Km5oCCJrThL/49it3E=} - engines: {node: '>=0.10.0'} - dev: true - - /has-values/1.0.0: - resolution: {integrity: sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=} - engines: {node: '>=0.10.0'} - dependencies: - is-number: 3.0.0 - kind-of: 4.0.0 - dev: true - /has/1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} @@ -2241,10 +1940,6 @@ packages: function-bind: 1.1.1 dev: true - /hosted-git-info/2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true - /html-encoding-sniffer/2.0.1: resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} engines: {node: '>=10'} @@ -2256,18 +1951,25 @@ packages: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /http-signature/1.2.0: - resolution: {integrity: sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=} - engines: {node: '>=0.8', npm: '>=1.3.7'} + /http-proxy-agent/4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} dependencies: - assert-plus: 1.0.0 - jsprim: 1.4.1 - sshpk: 1.16.1 + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.3.2 + transitivePeerDependencies: + - supports-color dev: true - /human-signals/1.1.1: - resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} - engines: {node: '>=8.12.0'} + /https-proxy-agent/5.0.0: + resolution: {integrity: sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==} + engines: {node: '>= 6'} + dependencies: + agent-base: 6.0.2 + debug: 4.3.2 + transitivePeerDependencies: + - supports-color dev: true /human-signals/2.1.0: @@ -2328,92 +2030,23 @@ packages: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /is-accessor-descriptor/0.1.6: - resolution: {integrity: sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - - /is-accessor-descriptor/1.0.0: - resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 6.0.3 - dev: true - /is-arrayish/0.2.1: resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} dev: true - /is-buffer/1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - dev: true - - /is-ci/2.0.0: - resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} + /is-ci/3.0.0: + resolution: {integrity: sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==} hasBin: true dependencies: - ci-info: 2.0.0 + ci-info: 3.2.0 dev: true - /is-core-module/2.3.0: - resolution: {integrity: sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==} + /is-core-module/2.5.0: + resolution: {integrity: sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==} dependencies: has: 1.0.3 dev: true - /is-data-descriptor/0.1.4: - resolution: {integrity: sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - - /is-data-descriptor/1.0.0: - resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 6.0.3 - dev: true - - /is-descriptor/0.1.6: - resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} - engines: {node: '>=0.10.0'} - dependencies: - is-accessor-descriptor: 0.1.6 - is-data-descriptor: 0.1.4 - kind-of: 5.1.0 - dev: true - - /is-descriptor/1.0.2: - resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} - engines: {node: '>=0.10.0'} - dependencies: - is-accessor-descriptor: 1.0.0 - is-data-descriptor: 1.0.0 - kind-of: 6.0.3 - dev: true - - /is-docker/2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true - optional: true - - /is-extendable/0.1.1: - resolution: {integrity: sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=} - engines: {node: '>=0.10.0'} - dev: true - - /is-extendable/1.0.1: - resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} - engines: {node: '>=0.10.0'} - dependencies: - is-plain-object: 2.0.4 - dev: true - /is-extglob/2.1.1: resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} engines: {node: '>=0.10.0'} @@ -2436,13 +2069,6 @@ packages: is-extglob: 2.1.1 dev: true - /is-number/3.0.0: - resolution: {integrity: sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - /is-number/7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -2453,13 +2079,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /is-plain-object/2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} - dependencies: - isobject: 3.0.1 - dev: true - /is-potential-custom-element-name/1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true @@ -2469,11 +2088,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /is-stream/1.1.0: - resolution: {integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ=} - engines: {node: '>=0.10.0'} - dev: true - /is-stream/2.0.0: resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==} engines: {node: '>=8'} @@ -2487,42 +2101,9 @@ packages: engines: {node: '>=10'} dev: true - /is-windows/1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - dev: true - - /is-wsl/2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - dev: true - optional: true - - /isarray/1.0.0: - resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} - dev: true - /isexe/2.0.0: resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} - /isobject/2.1.0: - resolution: {integrity: sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=} - engines: {node: '>=0.10.0'} - dependencies: - isarray: 1.0.0 - dev: true - - /isobject/3.0.1: - resolution: {integrity: sha1-TkMekrEalzFjaqH5yNHMvP2reN8=} - engines: {node: '>=0.10.0'} - dev: true - - /isstream/0.1.2: - resolution: {integrity: sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=} - dev: true - /istanbul-lib-coverage/3.0.0: resolution: {integrity: sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==} engines: {node: '>=8'} @@ -2532,7 +2113,7 @@ packages: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.13.16 + '@babel/core': 7.14.8 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.0.0 semver: 6.3.0 @@ -2553,7 +2134,7 @@ packages: resolution: {integrity: sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==} engines: {node: '>=8'} dependencies: - debug: 4.3.1 + debug: 4.3.2 istanbul-lib-coverage: 3.0.0 source-map: 0.6.1 transitivePeerDependencies: @@ -2568,33 +2149,64 @@ packages: istanbul-lib-report: 3.0.0 dev: true - /jest-changed-files/26.6.2: - resolution: {integrity: sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==} - engines: {node: '>= 10.14.2'} + /jest-changed-files/27.0.6: + resolution: {integrity: sha512-BuL/ZDauaq5dumYh5y20sn4IISnf1P9A0TDswTxUi84ORGtVa86ApuBHqICL0vepqAnZiY6a7xeSPWv2/yy4eA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 26.6.2 - execa: 4.1.0 - throat: 5.0.0 + '@jest/types': 27.0.6 + execa: 5.0.0 + throat: 6.0.1 dev: true - /jest-cli/26.6.3: - resolution: {integrity: sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==} - engines: {node: '>= 10.14.2'} + /jest-circus/27.0.6: + resolution: {integrity: sha512-OJlsz6BBeX9qR+7O9lXefWoc2m9ZqcZ5Ohlzz0pTEAG4xMiZUJoacY8f4YDHxgk0oKYxj277AfOk9w6hZYvi1Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.0.6 + '@jest/test-result': 27.0.6 + '@jest/types': 27.0.6 + '@types/node': 12.20.16 + chalk: 4.1.1 + co: 4.6.0 + dedent: 0.7.0 + expect: 27.0.6 + is-generator-fn: 2.1.0 + jest-each: 27.0.6 + jest-matcher-utils: 27.0.6 + jest-message-util: 27.0.6 + jest-runtime: 27.0.6 + jest-snapshot: 27.0.6 + jest-util: 27.0.6 + pretty-format: 27.0.6 + slash: 3.0.0 + stack-utils: 2.0.3 + throat: 6.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /jest-cli/27.0.6: + resolution: {integrity: sha512-qUUVlGb9fdKir3RDE+B10ULI+LQrz+MCflEH2UJyoUjoHHCbxDrMxSzjQAPUMsic4SncI62ofYCcAvW6+6rhhg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true dependencies: - '@jest/core': 26.6.3 - '@jest/test-result': 26.6.2 - '@jest/types': 26.6.2 + '@jest/core': 27.0.6 + '@jest/test-result': 27.0.6 + '@jest/types': 27.0.6 chalk: 4.1.1 exit: 0.1.2 graceful-fs: 4.2.6 import-local: 3.0.2 - is-ci: 2.0.0 - jest-config: 26.6.3 - jest-util: 26.6.2 - jest-validate: 26.6.2 + jest-config: 27.0.6 + jest-util: 27.0.6 + jest-validate: 27.0.6 prompts: 2.4.1 - yargs: 15.4.1 + yargs: 16.2.0 transitivePeerDependencies: - bufferutil - canvas @@ -2603,33 +2215,36 @@ packages: - utf-8-validate dev: true - /jest-config/26.6.3: - resolution: {integrity: sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==} - engines: {node: '>= 10.14.2'} + /jest-config/27.0.6: + resolution: {integrity: sha512-JZRR3I1Plr2YxPBhgqRspDE2S5zprbga3swYNrvY3HfQGu7p/GjyLOqwrYad97tX3U3mzT53TPHVmozacfP/3w==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} peerDependencies: ts-node: '>=9.0.0' peerDependenciesMeta: ts-node: optional: true dependencies: - '@babel/core': 7.13.16 - '@jest/test-sequencer': 26.6.3 - '@jest/types': 26.6.2 - babel-jest: 26.6.3_@babel+core@7.13.16 + '@babel/core': 7.14.8 + '@jest/test-sequencer': 27.0.6 + '@jest/types': 27.0.6 + babel-jest: 27.0.6_@babel+core@7.14.8 chalk: 4.1.1 deepmerge: 4.2.2 - glob: 7.1.6 + glob: 7.1.7 graceful-fs: 4.2.6 - jest-environment-jsdom: 26.6.2 - jest-environment-node: 26.6.2 - jest-get-type: 26.3.0 - jest-jasmine2: 26.6.3 - jest-regex-util: 26.0.0 - jest-resolve: 26.6.2 - jest-util: 26.6.2 - jest-validate: 26.6.2 + is-ci: 3.0.0 + jest-circus: 27.0.6 + jest-environment-jsdom: 27.0.6 + jest-environment-node: 27.0.6 + jest-get-type: 27.0.6 + jest-jasmine2: 27.0.6 + jest-regex-util: 27.0.6 + jest-resolve: 27.0.6 + jest-runner: 27.0.6 + jest-util: 27.0.6 + jest-validate: 27.0.6 micromatch: 4.0.4 - pretty-format: 26.6.2 + pretty-format: 27.0.6 transitivePeerDependencies: - bufferutil - canvas @@ -2647,51 +2262,62 @@ packages: pretty-format: 26.6.2 dev: true - /jest-docblock/26.0.0: - resolution: {integrity: sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==} - engines: {node: '>= 10.14.2'} + /jest-diff/27.0.6: + resolution: {integrity: sha512-Z1mqgkTCSYaFgwTlP/NUiRzdqgxmmhzHY1Tq17zL94morOHfHu3K4bgSgl+CR4GLhpV8VxkuOYuIWnQ9LnFqmg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - detect-newline: 3.1.0 + chalk: 4.1.1 + diff-sequences: 27.0.6 + jest-get-type: 27.0.6 + pretty-format: 27.0.6 dev: true - /jest-each/26.6.2: - resolution: {integrity: sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==} - engines: {node: '>= 10.14.2'} + /jest-docblock/27.0.6: + resolution: {integrity: sha512-Fid6dPcjwepTFraz0YxIMCi7dejjJ/KL9FBjPYhBp4Sv1Y9PdhImlKZqYU555BlN4TQKaTc+F2Av1z+anVyGkA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 26.6.2 - chalk: 4.1.1 - jest-get-type: 26.3.0 - jest-util: 26.6.2 - pretty-format: 26.6.2 + detect-newline: 3.1.0 dev: true - /jest-environment-jsdom/26.6.2: - resolution: {integrity: sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==} - engines: {node: '>= 10.14.2'} + /jest-each/27.0.6: + resolution: {integrity: sha512-m6yKcV3bkSWrUIjxkE9OC0mhBZZdhovIW5ergBYirqnkLXkyEn3oUUF/QZgyecA1cF1QFyTE8bRRl8Tfg1pfLA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/environment': 26.6.2 - '@jest/fake-timers': 26.6.2 - '@jest/types': 26.6.2 - '@types/node': 12.20.10 - jest-mock: 26.6.2 - jest-util: 26.6.2 - jsdom: 16.5.3 + '@jest/types': 27.0.6 + chalk: 4.1.1 + jest-get-type: 27.0.6 + jest-util: 27.0.6 + pretty-format: 27.0.6 + dev: true + + /jest-environment-jsdom/27.0.6: + resolution: {integrity: sha512-FvetXg7lnXL9+78H+xUAsra3IeZRTiegA3An01cWeXBspKXUhAwMM9ycIJ4yBaR0L7HkoMPaZsozCLHh4T8fuw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/environment': 27.0.6 + '@jest/fake-timers': 27.0.6 + '@jest/types': 27.0.6 + '@types/node': 12.20.16 + jest-mock: 27.0.6 + jest-util: 27.0.6 + jsdom: 16.6.0 transitivePeerDependencies: - bufferutil - canvas + - supports-color - utf-8-validate dev: true - /jest-environment-node/26.6.2: - resolution: {integrity: sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==} - engines: {node: '>= 10.14.2'} + /jest-environment-node/27.0.6: + resolution: {integrity: sha512-+Vi6yLrPg/qC81jfXx3IBlVnDTI6kmRr08iVa2hFCWmJt4zha0XW7ucQltCAPhSR0FEKEoJ3i+W4E6T0s9is0w==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/environment': 26.6.2 - '@jest/fake-timers': 26.6.2 - '@jest/types': 26.6.2 - '@types/node': 12.20.10 - jest-mock: 26.6.2 - jest-util: 26.6.2 + '@jest/environment': 27.0.6 + '@jest/fake-timers': 27.0.6 + '@jest/types': 27.0.6 + '@types/node': 12.20.16 + jest-mock: 27.0.6 + jest-util: 27.0.6 dev: true /jest-get-type/26.3.0: @@ -2699,99 +2325,99 @@ packages: engines: {node: '>= 10.14.2'} dev: true - /jest-haste-map/26.6.2: - resolution: {integrity: sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==} - engines: {node: '>= 10.14.2'} + /jest-get-type/27.0.6: + resolution: {integrity: sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true + + /jest-haste-map/27.0.6: + resolution: {integrity: sha512-4ldjPXX9h8doB2JlRzg9oAZ2p6/GpQUNAeiYXqcpmrKbP0Qev0wdZlxSMOmz8mPOEnt4h6qIzXFLDi8RScX/1w==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 26.6.2 + '@jest/types': 27.0.6 '@types/graceful-fs': 4.1.5 - '@types/node': 12.20.10 + '@types/node': 12.20.16 anymatch: 3.1.2 fb-watchman: 2.0.1 graceful-fs: 4.2.6 - jest-regex-util: 26.0.0 - jest-serializer: 26.6.2 - jest-util: 26.6.2 - jest-worker: 26.6.2 + jest-regex-util: 27.0.6 + jest-serializer: 27.0.6 + jest-util: 27.0.6 + jest-worker: 27.0.6 micromatch: 4.0.4 - sane: 4.1.0 walker: 1.0.7 optionalDependencies: fsevents: 2.3.2 dev: true - /jest-jasmine2/26.6.3: - resolution: {integrity: sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==} - engines: {node: '>= 10.14.2'} + /jest-jasmine2/27.0.6: + resolution: {integrity: sha512-cjpH2sBy+t6dvCeKBsHpW41mjHzXgsavaFMp+VWRf0eR4EW8xASk1acqmljFtK2DgyIECMv2yCdY41r2l1+4iA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/traverse': 7.13.17 - '@jest/environment': 26.6.2 - '@jest/source-map': 26.6.2 - '@jest/test-result': 26.6.2 - '@jest/types': 26.6.2 - '@types/node': 12.20.10 + '@babel/traverse': 7.14.8 + '@jest/environment': 27.0.6 + '@jest/source-map': 27.0.6 + '@jest/test-result': 27.0.6 + '@jest/types': 27.0.6 + '@types/node': 12.20.16 chalk: 4.1.1 co: 4.6.0 - expect: 26.6.2 + expect: 27.0.6 is-generator-fn: 2.1.0 - jest-each: 26.6.2 - jest-matcher-utils: 26.6.2 - jest-message-util: 26.6.2 - jest-runtime: 26.6.3 - jest-snapshot: 26.6.2 - jest-util: 26.6.2 - pretty-format: 26.6.2 - throat: 5.0.0 + jest-each: 27.0.6 + jest-matcher-utils: 27.0.6 + jest-message-util: 27.0.6 + jest-runtime: 27.0.6 + jest-snapshot: 27.0.6 + jest-util: 27.0.6 + pretty-format: 27.0.6 + throat: 6.0.1 transitivePeerDependencies: - - bufferutil - - canvas - supports-color - - ts-node - - utf-8-validate dev: true - /jest-leak-detector/26.6.2: - resolution: {integrity: sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==} - engines: {node: '>= 10.14.2'} + /jest-leak-detector/27.0.6: + resolution: {integrity: sha512-2/d6n2wlH5zEcdctX4zdbgX8oM61tb67PQt4Xh8JFAIy6LRKUnX528HulkaG6nD5qDl5vRV1NXejCe1XRCH5gQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - jest-get-type: 26.3.0 - pretty-format: 26.6.2 + jest-get-type: 27.0.6 + pretty-format: 27.0.6 dev: true - /jest-matcher-utils/26.6.2: - resolution: {integrity: sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==} - engines: {node: '>= 10.14.2'} + /jest-matcher-utils/27.0.6: + resolution: {integrity: sha512-OFgF2VCQx9vdPSYTHWJ9MzFCehs20TsyFi6bIHbk5V1u52zJOnvF0Y/65z3GLZHKRuTgVPY4Z6LVePNahaQ+tA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: chalk: 4.1.1 - jest-diff: 26.6.2 - jest-get-type: 26.3.0 - pretty-format: 26.6.2 + jest-diff: 27.0.6 + jest-get-type: 27.0.6 + pretty-format: 27.0.6 dev: true - /jest-message-util/26.6.2: - resolution: {integrity: sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==} - engines: {node: '>= 10.14.2'} + /jest-message-util/27.0.6: + resolution: {integrity: sha512-rBxIs2XK7rGy+zGxgi+UJKP6WqQ+KrBbD1YMj517HYN3v2BG66t3Xan3FWqYHKZwjdB700KiAJ+iES9a0M+ixw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@babel/code-frame': 7.12.13 - '@jest/types': 26.6.2 - '@types/stack-utils': 2.0.0 + '@babel/code-frame': 7.14.5 + '@jest/types': 27.0.6 + '@types/stack-utils': 2.0.1 chalk: 4.1.1 graceful-fs: 4.2.6 micromatch: 4.0.4 - pretty-format: 26.6.2 + pretty-format: 27.0.6 slash: 3.0.0 stack-utils: 2.0.3 dev: true - /jest-mock/26.6.2: - resolution: {integrity: sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==} - engines: {node: '>= 10.14.2'} + /jest-mock/27.0.6: + resolution: {integrity: sha512-lzBETUoK8cSxts2NYXSBWT+EJNzmUVtVVwS1sU9GwE1DLCfGsngg+ZVSIe0yd0ZSm+y791esiuo+WSwpXJQ5Bw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 26.6.2 - '@types/node': 12.20.10 + '@jest/types': 27.0.6 + '@types/node': 12.20.16 dev: true - /jest-pnp-resolver/1.2.2_jest-resolve@26.6.2: + /jest-pnp-resolver/1.2.2_jest-resolve@27.0.6: resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} engines: {node: '>=6'} peerDependencies: @@ -2800,193 +2426,206 @@ packages: jest-resolve: optional: true dependencies: - jest-resolve: 26.6.2 + jest-resolve: 27.0.6 dev: true - /jest-regex-util/26.0.0: - resolution: {integrity: sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==} - engines: {node: '>= 10.14.2'} + /jest-regex-util/27.0.6: + resolution: {integrity: sha512-SUhPzBsGa1IKm8hx2F4NfTGGp+r7BXJ4CulsZ1k2kI+mGLG+lxGrs76veN2LF/aUdGosJBzKgXmNCw+BzFqBDQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dev: true - /jest-resolve-dependencies/26.6.3: - resolution: {integrity: sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==} - engines: {node: '>= 10.14.2'} + /jest-resolve-dependencies/27.0.6: + resolution: {integrity: sha512-mg9x9DS3BPAREWKCAoyg3QucCr0n6S8HEEsqRCKSPjPcu9HzRILzhdzY3imsLoZWeosEbJZz6TKasveczzpJZA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 26.6.2 - jest-regex-util: 26.0.0 - jest-snapshot: 26.6.2 + '@jest/types': 27.0.6 + jest-regex-util: 27.0.6 + jest-snapshot: 27.0.6 + transitivePeerDependencies: + - supports-color dev: true - /jest-resolve/26.6.2: - resolution: {integrity: sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==} - engines: {node: '>= 10.14.2'} + /jest-resolve/27.0.6: + resolution: {integrity: sha512-yKmIgw2LgTh7uAJtzv8UFHGF7Dm7XfvOe/LQ3Txv101fLM8cx2h1QVwtSJ51Q/SCxpIiKfVn6G2jYYMDNHZteA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 26.6.2 + '@jest/types': 27.0.6 chalk: 4.1.1 + escalade: 3.1.1 graceful-fs: 4.2.6 - jest-pnp-resolver: 1.2.2_jest-resolve@26.6.2 - jest-util: 26.6.2 - read-pkg-up: 7.0.1 + jest-pnp-resolver: 1.2.2_jest-resolve@27.0.6 + jest-util: 27.0.6 + jest-validate: 27.0.6 resolve: 1.20.0 slash: 3.0.0 dev: true - /jest-runner/26.6.3: - resolution: {integrity: sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==} - engines: {node: '>= 10.14.2'} + /jest-runner/27.0.6: + resolution: {integrity: sha512-W3Bz5qAgaSChuivLn+nKOgjqNxM7O/9JOJoKDCqThPIg2sH/d4A/lzyiaFgnb9V1/w29Le11NpzTJSzga1vyYQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/console': 26.6.2 - '@jest/environment': 26.6.2 - '@jest/test-result': 26.6.2 - '@jest/types': 26.6.2 - '@types/node': 12.20.10 + '@jest/console': 27.0.6 + '@jest/environment': 27.0.6 + '@jest/test-result': 27.0.6 + '@jest/transform': 27.0.6 + '@jest/types': 27.0.6 + '@types/node': 12.20.16 chalk: 4.1.1 - emittery: 0.7.2 + emittery: 0.8.1 exit: 0.1.2 graceful-fs: 4.2.6 - jest-config: 26.6.3 - jest-docblock: 26.0.0 - jest-haste-map: 26.6.2 - jest-leak-detector: 26.6.2 - jest-message-util: 26.6.2 - jest-resolve: 26.6.2 - jest-runtime: 26.6.3 - jest-util: 26.6.2 - jest-worker: 26.6.2 + jest-docblock: 27.0.6 + jest-environment-jsdom: 27.0.6 + jest-environment-node: 27.0.6 + jest-haste-map: 27.0.6 + jest-leak-detector: 27.0.6 + jest-message-util: 27.0.6 + jest-resolve: 27.0.6 + jest-runtime: 27.0.6 + jest-util: 27.0.6 + jest-worker: 27.0.6 source-map-support: 0.5.19 - throat: 5.0.0 + throat: 6.0.1 transitivePeerDependencies: - bufferutil - canvas - supports-color - - ts-node - utf-8-validate dev: true - /jest-runtime/26.6.3: - resolution: {integrity: sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==} - engines: {node: '>= 10.14.2'} - hasBin: true + /jest-runtime/27.0.6: + resolution: {integrity: sha512-BhvHLRVfKibYyqqEFkybsznKwhrsu7AWx2F3y9G9L95VSIN3/ZZ9vBpm/XCS2bS+BWz3sSeNGLzI3TVQ0uL85Q==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/console': 26.6.2 - '@jest/environment': 26.6.2 - '@jest/fake-timers': 26.6.2 - '@jest/globals': 26.6.2 - '@jest/source-map': 26.6.2 - '@jest/test-result': 26.6.2 - '@jest/transform': 26.6.2 - '@jest/types': 26.6.2 - '@types/yargs': 15.0.13 + '@jest/console': 27.0.6 + '@jest/environment': 27.0.6 + '@jest/fake-timers': 27.0.6 + '@jest/globals': 27.0.6 + '@jest/source-map': 27.0.6 + '@jest/test-result': 27.0.6 + '@jest/transform': 27.0.6 + '@jest/types': 27.0.6 + '@types/yargs': 16.0.4 chalk: 4.1.1 - cjs-module-lexer: 0.6.0 + cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 - glob: 7.1.6 + glob: 7.1.7 graceful-fs: 4.2.6 - jest-config: 26.6.3 - jest-haste-map: 26.6.2 - jest-message-util: 26.6.2 - jest-mock: 26.6.2 - jest-regex-util: 26.0.0 - jest-resolve: 26.6.2 - jest-snapshot: 26.6.2 - jest-util: 26.6.2 - jest-validate: 26.6.2 + jest-haste-map: 27.0.6 + jest-message-util: 27.0.6 + jest-mock: 27.0.6 + jest-regex-util: 27.0.6 + jest-resolve: 27.0.6 + jest-snapshot: 27.0.6 + jest-util: 27.0.6 + jest-validate: 27.0.6 slash: 3.0.0 strip-bom: 4.0.0 - yargs: 15.4.1 + yargs: 16.2.0 transitivePeerDependencies: - - bufferutil - - canvas - supports-color - - ts-node - - utf-8-validate dev: true - /jest-serializer/26.6.2: - resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} - engines: {node: '>= 10.14.2'} + /jest-serializer/27.0.6: + resolution: {integrity: sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@types/node': 12.20.10 + '@types/node': 12.20.16 graceful-fs: 4.2.6 dev: true - /jest-snapshot/26.6.2: - resolution: {integrity: sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==} - engines: {node: '>= 10.14.2'} - dependencies: - '@babel/types': 7.13.17 - '@jest/types': 26.6.2 - '@types/babel__traverse': 7.11.1 - '@types/prettier': 2.2.3 + /jest-snapshot/27.0.6: + resolution: {integrity: sha512-NTHaz8He+ATUagUgE7C/UtFcRoHqR2Gc+KDfhQIyx+VFgwbeEMjeP+ILpUTLosZn/ZtbNdCF5LkVnN/l+V751A==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@babel/core': 7.14.8 + '@babel/generator': 7.14.8 + '@babel/parser': 7.14.8 + '@babel/plugin-syntax-typescript': 7.14.5_@babel+core@7.14.8 + '@babel/traverse': 7.14.8 + '@babel/types': 7.14.8 + '@jest/transform': 27.0.6 + '@jest/types': 27.0.6 + '@types/babel__traverse': 7.14.2 + '@types/prettier': 2.3.2 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.14.8 chalk: 4.1.1 - expect: 26.6.2 + expect: 27.0.6 graceful-fs: 4.2.6 - jest-diff: 26.6.2 - jest-get-type: 26.3.0 - jest-haste-map: 26.6.2 - jest-matcher-utils: 26.6.2 - jest-message-util: 26.6.2 - jest-resolve: 26.6.2 + jest-diff: 27.0.6 + jest-get-type: 27.0.6 + jest-haste-map: 27.0.6 + jest-matcher-utils: 27.0.6 + jest-message-util: 27.0.6 + jest-resolve: 27.0.6 + jest-util: 27.0.6 natural-compare: 1.4.0 - pretty-format: 26.6.2 + pretty-format: 27.0.6 semver: 7.3.5 + transitivePeerDependencies: + - supports-color dev: true - /jest-util/26.6.2: - resolution: {integrity: sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==} - engines: {node: '>= 10.14.2'} + /jest-util/27.0.6: + resolution: {integrity: sha512-1JjlaIh+C65H/F7D11GNkGDDZtDfMEM8EBXsvd+l/cxtgQ6QhxuloOaiayt89DxUvDarbVhqI98HhgrM1yliFQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 26.6.2 - '@types/node': 12.20.10 + '@jest/types': 27.0.6 + '@types/node': 12.20.16 chalk: 4.1.1 graceful-fs: 4.2.6 - is-ci: 2.0.0 - micromatch: 4.0.4 + is-ci: 3.0.0 + picomatch: 2.3.0 dev: true - /jest-validate/26.6.2: - resolution: {integrity: sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==} - engines: {node: '>= 10.14.2'} + /jest-validate/27.0.6: + resolution: {integrity: sha512-yhZZOaMH3Zg6DC83n60pLmdU1DQE46DW+KLozPiPbSbPhlXXaiUTDlhHQhHFpaqIFRrInko1FHXjTRpjWRuWfA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/types': 26.6.2 + '@jest/types': 27.0.6 camelcase: 6.2.0 chalk: 4.1.1 - jest-get-type: 26.3.0 + jest-get-type: 27.0.6 leven: 3.1.0 - pretty-format: 26.6.2 + pretty-format: 27.0.6 dev: true - /jest-watcher/26.6.2: - resolution: {integrity: sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==} - engines: {node: '>= 10.14.2'} + /jest-watcher/27.0.6: + resolution: {integrity: sha512-/jIoKBhAP00/iMGnTwUBLgvxkn7vsOweDrOTSPzc7X9uOyUtJIDthQBTI1EXz90bdkrxorUZVhJwiB69gcHtYQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@jest/test-result': 26.6.2 - '@jest/types': 26.6.2 - '@types/node': 12.20.10 + '@jest/test-result': 27.0.6 + '@jest/types': 27.0.6 + '@types/node': 12.20.16 ansi-escapes: 4.3.2 chalk: 4.1.1 - jest-util: 26.6.2 + jest-util: 27.0.6 string-length: 4.0.2 dev: true - /jest-worker/26.6.2: - resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + /jest-worker/27.0.6: + resolution: {integrity: sha512-qupxcj/dRuA3xHPMUd40gr2EaAurFbkwzOh7wfPaeE9id7hyjURRQoqNfHifHK3XjJU6YJJUQKILGUnwGPEOCA==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 12.20.10 + '@types/node': 12.20.16 merge-stream: 2.0.0 - supports-color: 7.2.0 + supports-color: 8.1.1 dev: true - /jest/26.6.3: - resolution: {integrity: sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==} - engines: {node: '>= 10.14.2'} + /jest/27.0.6: + resolution: {integrity: sha512-EjV8aETrsD0wHl7CKMibKwQNQc3gIRBXlTikBmmHUeVMKaPFxdcUIBfoDqTSXDoGJIivAYGqCWVlzCSaVjPQsA==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true dependencies: - '@jest/core': 26.6.3 + '@jest/core': 27.0.6 import-local: 3.0.2 - jest-cli: 26.6.3 + jest-cli: 27.0.6 transitivePeerDependencies: - bufferutil - canvas @@ -3007,12 +2646,8 @@ packages: esprima: 4.0.1 dev: true - /jsbn/0.1.1: - resolution: {integrity: sha1-peZUwuWi3rXyAdls77yoDA7y9RM=} - dev: true - - /jsdom/16.5.3: - resolution: {integrity: sha512-Qj1H+PEvUsOtdPJ056ewXM4UJPCi4hhLA8wpiz9F2YvsRBhuFsXxtrIFAgGBDynQA9isAMGE91PfUYbdMPXuTA==} + /jsdom/16.6.0: + resolution: {integrity: sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==} engines: {node: '>=10'} peerDependencies: canvas: ^2.5.0 @@ -3021,20 +2656,21 @@ packages: optional: true dependencies: abab: 2.0.5 - acorn: 8.2.1 + acorn: 8.4.1 acorn-globals: 6.0.0 cssom: 0.4.4 cssstyle: 2.3.0 data-urls: 2.0.0 - decimal.js: 10.2.1 + decimal.js: 10.3.1 domexception: 2.0.1 escodegen: 2.0.0 + form-data: 3.0.1 html-encoding-sniffer: 2.0.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.0 is-potential-custom-element-name: 1.0.1 nwsapi: 2.2.0 parse5: 6.0.1 - request: 2.88.2 - request-promise-native: 1.0.9_request@2.88.2 saxes: 5.0.1 symbol-tree: 3.2.4 tough-cookie: 4.0.0 @@ -3043,11 +2679,12 @@ packages: webidl-conversions: 6.1.0 whatwg-encoding: 1.0.5 whatwg-mimetype: 2.3.0 - whatwg-url: 8.5.0 - ws: 7.4.5 + whatwg-url: 8.7.0 + ws: 7.5.3 xml-name-validator: 3.0.0 transitivePeerDependencies: - bufferutil + - supports-color - utf-8-validate dev: true @@ -3069,18 +2706,10 @@ packages: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: true - /json-schema/0.2.3: - resolution: {integrity: sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=} - dev: true - /json-stable-stringify-without-jsonify/1.0.1: resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} dev: true - /json-stringify-safe/5.0.1: - resolution: {integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=} - dev: true - /json5/2.2.0: resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==} engines: {node: '>=6'} @@ -3089,40 +2718,6 @@ packages: minimist: 1.2.5 dev: true - /jsprim/1.4.1: - resolution: {integrity: sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=} - engines: {'0': node >=0.6.0} - dependencies: - assert-plus: 1.0.0 - extsprintf: 1.3.0 - json-schema: 0.2.3 - verror: 1.10.0 - dev: true - - /kind-of/3.2.2: - resolution: {integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=} - engines: {node: '>=0.10.0'} - dependencies: - is-buffer: 1.1.6 - dev: true - - /kind-of/4.0.0: - resolution: {integrity: sha1-IIE989cSkosgc3hpGkUGb65y3Vc=} - engines: {node: '>=0.10.0'} - dependencies: - is-buffer: 1.1.6 - dev: true - - /kind-of/5.1.0: - resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} - engines: {node: '>=0.10.0'} - dev: true - - /kind-of/6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true - /kleur/3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} @@ -3153,19 +2748,19 @@ packages: resolution: {integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=} dev: true - /lint-staged/11.0.0: - resolution: {integrity: sha512-3rsRIoyaE8IphSUtO1RVTFl1e0SLBtxxUOPBtHxQgBHS5/i6nqvjcUfNioMa4BU9yGnPzbO+xkfLtXtxBpCzjw==} + /lint-staged/11.1.0: + resolution: {integrity: sha512-pzwEf+NKbTauAlk7gPPwTfulRXESEPZCSFXYfg20F220UOObebxu5uL5mkr9csQLNOM2Ydfrt3DJXakzAL7aaQ==} hasBin: true dependencies: chalk: 4.1.1 cli-truncate: 2.1.0 commander: 7.2.0 cosmiconfig: 7.0.0 - debug: 4.3.1 + debug: 4.3.2 dedent: 0.7.0 enquirer: 2.3.6 execa: 5.0.0 - listr2: 3.9.0_enquirer@2.3.6 + listr2: 3.11.0_enquirer@2.3.6 log-symbols: 4.1.0 micromatch: 4.0.4 normalize-path: 3.0.0 @@ -3176,8 +2771,8 @@ packages: - supports-color dev: true - /listr2/3.9.0_enquirer@2.3.6: - resolution: {integrity: sha512-+JxQt7Vi4WEWgJsxmOEX9lDbCumrb3mrEYIeE1VI7I4lf2rXE4v9pq3RMVNp+a9s6mCgc/IsF0ppHsLrx2BEAw==} + /listr2/3.11.0_enquirer@2.3.6: + resolution: {integrity: sha512-XLJVe2JgXCyQTa3FbSv11lkKExYmEyA4jltVo8z4FX10Vt1Yj8IMekBfwim0BSOM9uj1QMTJvDQQpHyuPbB/dQ==} engines: {node: '>=10.0.0'} peerDependencies: enquirer: '>= 2.3.0 < 3' @@ -3203,10 +2798,6 @@ packages: resolution: {integrity: sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=} dev: true - /lodash.flatten/4.4.0: - resolution: {integrity: sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=} - dev: true - /lodash.merge/4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true @@ -3261,18 +2852,6 @@ packages: tmpl: 1.0.4 dev: true - /map-cache/0.2.2: - resolution: {integrity: sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=} - engines: {node: '>=0.10.0'} - dev: true - - /map-visit/1.0.0: - resolution: {integrity: sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=} - engines: {node: '>=0.10.0'} - dependencies: - object-visit: 1.0.1 - dev: true - /merge-stream/2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -3281,43 +2860,24 @@ packages: engines: {node: '>= 8'} dev: true - /micromatch/3.1.10: - resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} - engines: {node: '>=0.10.0'} - dependencies: - arr-diff: 4.0.0 - array-unique: 0.3.2 - braces: 2.3.2 - define-property: 2.0.2 - extend-shallow: 3.0.2 - extglob: 2.0.4 - fragment-cache: 0.2.1 - kind-of: 6.0.3 - nanomatch: 1.2.13 - object.pick: 1.3.0 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - dev: true - /micromatch/4.0.4: resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} engines: {node: '>=8.6'} dependencies: braces: 3.0.2 - picomatch: 2.2.3 + picomatch: 2.3.0 dev: true - /mime-db/1.47.0: - resolution: {integrity: sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==} + /mime-db/1.49.0: + resolution: {integrity: sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==} engines: {node: '>= 0.6'} dev: true - /mime-types/2.1.30: - resolution: {integrity: sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==} + /mime-types/2.1.32: + resolution: {integrity: sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==} engines: {node: '>= 0.6'} dependencies: - mime-db: 1.47.0 + mime-db: 1.49.0 dev: true /mimic-fn/2.1.0: @@ -3334,44 +2894,18 @@ packages: resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} dev: true - /mixin-deep/1.3.2: - resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} - engines: {node: '>=0.10.0'} - dependencies: - for-in: 1.0.2 - is-extendable: 1.0.1 - dev: true - /mkdirp/1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} hasBin: true dev: true - /ms/2.0.0: - resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} - dev: true - /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - /nanomatch/1.2.13: - resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} - engines: {node: '>=0.10.0'} - dependencies: - arr-diff: 4.0.0 - array-unique: 0.3.2 - define-property: 2.0.2 - extend-shallow: 3.0.2 - fragment-cache: 0.2.1 - is-windows: 1.0.2 - kind-of: 6.0.3 - object.pick: 1.3.0 - regex-not: 1.0.2 - snapdragon: 0.8.2 - to-regex: 3.0.2 - dev: true + /ms/2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: false /natural-compare/1.4.0: resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} @@ -3382,49 +2916,17 @@ packages: engines: {node: '>=10'} dev: false - /nice-try/1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - dev: true - /node-int64/0.4.0: - resolution: {integrity: sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=} - dev: true - - /node-modules-regexp/1.0.0: - resolution: {integrity: sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=} - engines: {node: '>=0.10.0'} - dev: true - - /node-notifier/8.0.2: - resolution: {integrity: sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==} - dependencies: - growly: 1.3.0 - is-wsl: 2.2.0 - semver: 7.3.5 - shellwords: 0.1.1 - uuid: 8.3.2 - which: 2.0.2 - dev: true - optional: true - - /node-releases/1.1.71: - resolution: {integrity: sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==} + resolution: {integrity: sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=} dev: true - /normalize-package-data/2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.20.0 - semver: 5.7.1 - validate-npm-package-license: 3.0.4 + /node-modules-regexp/1.0.0: + resolution: {integrity: sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=} + engines: {node: '>=0.10.0'} dev: true - /normalize-path/2.1.1: - resolution: {integrity: sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=} - engines: {node: '>=0.10.0'} - dependencies: - remove-trailing-separator: 1.1.0 + /node-releases/1.1.73: + resolution: {integrity: sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==} dev: true /normalize-path/3.0.0: @@ -3432,13 +2934,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /npm-run-path/2.0.2: - resolution: {integrity: sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=} - engines: {node: '>=4'} - dependencies: - path-key: 2.0.1 - dev: true - /npm-run-path/4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -3449,33 +2944,6 @@ packages: resolution: {integrity: sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==} dev: true - /oauth-sign/0.9.0: - resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} - dev: true - - /object-copy/0.1.0: - resolution: {integrity: sha1-fn2Fi3gb18mRpBupde04EnVOmYw=} - engines: {node: '>=0.10.0'} - dependencies: - copy-descriptor: 0.1.1 - define-property: 0.2.5 - kind-of: 3.2.2 - dev: true - - /object-visit/1.0.1: - resolution: {integrity: sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=} - engines: {node: '>=0.10.0'} - dependencies: - isobject: 3.0.1 - dev: true - - /object.pick/1.3.0: - resolution: {integrity: sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=} - engines: {node: '>=0.10.0'} - dependencies: - isobject: 3.0.1 - dev: true - /once/1.4.0: resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} dependencies: @@ -3517,11 +2985,6 @@ packages: engines: {node: '>=8'} dev: true - /p-finally/1.0.0: - resolution: {integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=} - engines: {node: '>=4'} - dev: true - /p-limit/2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -3567,7 +3030,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.12.13 + '@babel/code-frame': 7.14.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.1.6 @@ -3577,11 +3040,6 @@ packages: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} dev: true - /pascalcase/0.1.1: - resolution: {integrity: sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=} - engines: {node: '>=0.10.0'} - dev: true - /path-exists/4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -3592,17 +3050,12 @@ packages: engines: {node: '>=0.10.0'} dev: true - /path-key/2.0.1: - resolution: {integrity: sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=} - engines: {node: '>=4'} - dev: true - /path-key/3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - /path-parse/1.0.6: - resolution: {integrity: sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==} + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true /path-type/4.0.0: @@ -3610,12 +3063,8 @@ packages: engines: {node: '>=8'} dev: true - /performance-now/2.1.0: - resolution: {integrity: sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=} - dev: true - - /picomatch/2.2.3: - resolution: {integrity: sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==} + /picomatch/2.3.0: + resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} engines: {node: '>=8.6'} dev: true @@ -3639,11 +3088,6 @@ packages: semver-compare: 1.0.0 dev: true - /posix-character-classes/0.1.1: - resolution: {integrity: sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=} - engines: {node: '>=0.10.0'} - dev: true - /prelude-ls/1.1.2: resolution: {integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=} engines: {node: '>= 0.8.0'} @@ -3661,8 +3105,8 @@ packages: fast-diff: 1.2.0 dev: true - /prettier/2.3.0: - resolution: {integrity: sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==} + /prettier/2.3.2: + resolution: {integrity: sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==} engines: {node: '>=10.13.0'} hasBin: true dev: true @@ -3677,6 +3121,16 @@ packages: react-is: 17.0.2 dev: true + /pretty-format/27.0.6: + resolution: {integrity: sha512-8tGD7gBIENgzqA+UBzObyWqQ5B778VIFZA/S66cclyd5YkFLYs2Js7gxDKf0MXtTc9zcS7t1xhdfcElJ3YIvkQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + '@jest/types': 27.0.6 + ansi-regex: 5.0.0 + ansi-styles: 5.2.0 + react-is: 17.0.2 + dev: true + /progress/2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -3694,23 +3148,11 @@ packages: resolution: {integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==} dev: true - /pump/3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - dev: true - /punycode/2.1.1: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} dev: true - /qs/6.5.2: - resolution: {integrity: sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==} - engines: {node: '>=0.6'} - dev: true - /queue-microtask/1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true @@ -3719,102 +3161,11 @@ packages: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} dev: true - /read-pkg-up/7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - dev: true - - /read-pkg/5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - dependencies: - '@types/normalize-package-data': 2.4.0 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - dev: true - - /regex-not/1.0.2: - resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} - engines: {node: '>=0.10.0'} - dependencies: - extend-shallow: 3.0.2 - safe-regex: 1.1.0 - dev: true - - /regexpp/3.1.0: - resolution: {integrity: sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==} + /regexpp/3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} dev: true - /remove-trailing-separator/1.1.0: - resolution: {integrity: sha1-wkvOKig62tW8P1jg1IJJuSN52O8=} - dev: true - - /repeat-element/1.1.4: - resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} - engines: {node: '>=0.10.0'} - dev: true - - /repeat-string/1.6.1: - resolution: {integrity: sha1-jcrkcOHIirwtYA//Sndihtp15jc=} - engines: {node: '>=0.10'} - dev: true - - /request-promise-core/1.1.4_request@2.88.2: - resolution: {integrity: sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==} - engines: {node: '>=0.10.0'} - peerDependencies: - request: ^2.34 - dependencies: - lodash: 4.17.21 - request: 2.88.2 - dev: true - - /request-promise-native/1.0.9_request@2.88.2: - resolution: {integrity: sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==} - engines: {node: '>=0.12.0'} - deprecated: request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142 - peerDependencies: - request: ^2.34 - dependencies: - request: 2.88.2 - request-promise-core: 1.1.4_request@2.88.2 - stealthy-require: 1.1.1 - tough-cookie: 2.5.0 - dev: true - - /request/2.88.2: - resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} - engines: {node: '>= 6'} - deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 - dependencies: - aws-sign2: 0.7.0 - aws4: 1.11.0 - caseless: 0.12.0 - combined-stream: 1.0.8 - extend: 3.0.2 - forever-agent: 0.6.1 - form-data: 2.3.3 - har-validator: 5.1.5 - http-signature: 1.2.0 - is-typedarray: 1.0.0 - isstream: 0.1.2 - json-stringify-safe: 5.0.1 - mime-types: 2.1.30 - oauth-sign: 0.9.0 - performance-now: 2.1.0 - qs: 6.5.2 - safe-buffer: 5.2.1 - tough-cookie: 2.5.0 - tunnel-agent: 0.6.0 - uuid: 3.4.0 - dev: true - /require-directory/2.1.1: resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} engines: {node: '>=0.10.0'} @@ -3825,10 +3176,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /require-main-filename/2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - dev: true - /resolve-cwd/3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} @@ -3846,16 +3193,11 @@ packages: engines: {node: '>=8'} dev: true - /resolve-url/0.2.1: - resolution: {integrity: sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=} - deprecated: https://github.com/lydell/resolve-url#deprecated - dev: true - /resolve/1.20.0: resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} dependencies: - is-core-module: 2.3.0 - path-parse: 1.0.6 + is-core-module: 2.5.0 + path-parse: 1.0.7 dev: true /restore-cursor/3.1.0: @@ -3866,11 +3208,6 @@ packages: signal-exit: 3.0.3 dev: true - /ret/0.1.15: - resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} - engines: {node: '>=0.12'} - dev: true - /retry/0.12.0: resolution: {integrity: sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=} engines: {node: '>= 4'} @@ -3885,12 +3222,7 @@ packages: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: - glob: 7.1.6 - dev: true - - /rsvp/4.8.5: - resolution: {integrity: sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==} - engines: {node: 6.* || >= 7.*} + glob: 7.1.7 dev: true /run-parallel/1.2.0: @@ -3910,36 +3242,10 @@ packages: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /safe-buffer/5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true - - /safe-regex/1.1.0: - resolution: {integrity: sha1-QKNmnzsHfR6UPURinhV91IAjvy4=} - dependencies: - ret: 0.1.15 - dev: true - /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true - /sane/4.1.0: - resolution: {integrity: sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==} - engines: {node: 6.* || 8.* || >= 10.*} - hasBin: true - dependencies: - '@cnakazawa/watch': 1.0.4 - anymatch: 2.0.0 - capture-exit: 2.0.0 - exec-sh: 0.3.6 - execa: 1.0.0 - fb-watchman: 2.0.1 - micromatch: 3.1.10 - minimist: 1.2.5 - walker: 1.0.7 - dev: true - /saxes/5.0.1: resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} engines: {node: '>=10'} @@ -3951,11 +3257,6 @@ packages: resolution: {integrity: sha1-De4hahyUGrN+nvsXiPavxf9VN/w=} dev: true - /semver/5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true - dev: true - /semver/6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true @@ -3969,47 +3270,16 @@ packages: lru-cache: 6.0.0 dev: true - /set-blocking/2.0.0: - resolution: {integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=} - dev: true - - /set-value/2.0.1: - resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} - engines: {node: '>=0.10.0'} - dependencies: - extend-shallow: 2.0.1 - is-extendable: 0.1.1 - is-plain-object: 2.0.4 - split-string: 3.1.0 - dev: true - - /shebang-command/1.2.0: - resolution: {integrity: sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=} - engines: {node: '>=0.10.0'} - dependencies: - shebang-regex: 1.0.0 - dev: true - /shebang-command/2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 - /shebang-regex/1.0.0: - resolution: {integrity: sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=} - engines: {node: '>=0.10.0'} - dev: true - /shebang-regex/3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - /shellwords/0.1.1: - resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} - dev: true - optional: true - /signal-exit/3.0.3: resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} @@ -4040,57 +3310,13 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true - /snapdragon-node/2.1.1: - resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} - engines: {node: '>=0.10.0'} - dependencies: - define-property: 1.0.0 - isobject: 3.0.1 - snapdragon-util: 3.0.1 - dev: true - - /snapdragon-util/3.0.1: - resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - - /snapdragon/0.8.2: - resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} - engines: {node: '>=0.10.0'} - dependencies: - base: 0.11.2 - debug: 2.6.9 - define-property: 0.2.5 - extend-shallow: 2.0.1 - map-cache: 0.2.2 - source-map: 0.5.7 - source-map-resolve: 0.5.3 - use: 3.1.1 - dev: true - - /source-map-resolve/0.5.3: - resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} - dependencies: - atob: 2.1.2 - decode-uri-component: 0.2.0 - resolve-url: 0.2.1 - source-map-url: 0.4.1 - urix: 0.1.0 - dev: true - /source-map-support/0.5.19: resolution: {integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==} dependencies: - buffer-from: 1.1.1 + buffer-from: 1.1.2 source-map: 0.6.1 dev: true - /source-map-url/0.4.1: - resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} - dev: true - /source-map/0.5.7: resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=} engines: {node: '>=0.10.0'} @@ -4106,55 +3332,10 @@ packages: engines: {node: '>= 8'} dev: true - /spdx-correct/3.1.1: - resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.7 - dev: true - - /spdx-exceptions/2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: true - - /spdx-expression-parse/3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.7 - dev: true - - /spdx-license-ids/3.0.7: - resolution: {integrity: sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==} - dev: true - - /split-string/3.1.0: - resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} - engines: {node: '>=0.10.0'} - dependencies: - extend-shallow: 3.0.2 - dev: true - /sprintf-js/1.0.3: resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} dev: true - /sshpk/1.16.1: - resolution: {integrity: sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - asn1: 0.2.4 - assert-plus: 1.0.0 - bcrypt-pbkdf: 1.0.2 - dashdash: 1.14.1 - ecc-jsbn: 0.1.2 - getpass: 0.1.7 - jsbn: 0.1.1 - safer-buffer: 2.1.2 - tweetnacl: 0.14.5 - dev: true - /stack-utils/2.0.3: resolution: {integrity: sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==} engines: {node: '>=10'} @@ -4162,19 +3343,6 @@ packages: escape-string-regexp: 2.0.0 dev: true - /static-extend/0.1.2: - resolution: {integrity: sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=} - engines: {node: '>=0.10.0'} - dependencies: - define-property: 0.2.5 - object-copy: 0.1.0 - dev: true - - /stealthy-require/1.1.1: - resolution: {integrity: sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=} - engines: {node: '>=0.10.0'} - dev: true - /string-argv/0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} engines: {node: '>=0.6.19'} @@ -4218,11 +3386,6 @@ packages: engines: {node: '>=8'} dev: true - /strip-eof/1.0.0: - resolution: {integrity: sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=} - engines: {node: '>=0.10.0'} - dev: true - /strip-final-newline/2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} @@ -4245,6 +3408,13 @@ packages: dependencies: has-flag: 4.0.0 + /supports-color/8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + /supports-hyperlinks/2.2.0: resolution: {integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==} engines: {node: '>=8'} @@ -4256,13 +3426,12 @@ packages: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true - /table/6.5.1: - resolution: {integrity: sha512-xGDXWTBJxahkzPQCsn1S9ESHEenU7TbMD5Iv4FeopXv/XwJyWatFjfbor+6ipI10/MNPXBYUamYukOrbPZ9L/w==} + /table/6.7.1: + resolution: {integrity: sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==} engines: {node: '>=10.0.0'} dependencies: - ajv: 8.1.0 + ajv: 8.6.2 lodash.clonedeep: 4.5.0 - lodash.flatten: 4.4.0 lodash.truncate: 4.4.2 slice-ansi: 4.0.0 string-width: 4.2.2 @@ -4281,7 +3450,7 @@ packages: engines: {node: '>=8'} dependencies: '@istanbuljs/schema': 0.1.3 - glob: 7.1.6 + glob: 7.1.7 minimatch: 3.0.4 dev: true @@ -4289,8 +3458,8 @@ packages: resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} dev: true - /throat/5.0.0: - resolution: {integrity: sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==} + /throat/6.0.1: + resolution: {integrity: sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==} dev: true /through/2.3.8: @@ -4306,21 +3475,6 @@ packages: engines: {node: '>=4'} dev: true - /to-object-path/0.3.0: - resolution: {integrity: sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - - /to-regex-range/2.1.1: - resolution: {integrity: sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=} - engines: {node: '>=0.10.0'} - dependencies: - is-number: 3.0.0 - repeat-string: 1.6.1 - dev: true - /to-regex-range/5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -4328,24 +3482,6 @@ packages: is-number: 7.0.0 dev: true - /to-regex/3.0.2: - resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} - engines: {node: '>=0.10.0'} - dependencies: - define-property: 2.0.2 - extend-shallow: 3.0.2 - regex-not: 1.0.2 - safe-regex: 1.1.0 - dev: true - - /tough-cookie/2.5.0: - resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} - engines: {node: '>=0.8'} - dependencies: - psl: 1.8.0 - punycode: 2.1.1 - dev: true - /tough-cookie/4.0.0: resolution: {integrity: sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==} engines: {node: '>=6'} @@ -4355,57 +3491,47 @@ packages: universalify: 0.1.2 dev: true - /tr46/2.0.2: - resolution: {integrity: sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==} + /tr46/2.1.0: + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} engines: {node: '>=8'} dependencies: punycode: 2.1.1 dev: true - /ts-jest/26.5.6_jest@26.6.3+typescript@4.3.2: - resolution: {integrity: sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==} - engines: {node: '>= 10'} + /ts-jest/27.0.3_jest@27.0.6+typescript@4.3.5: + resolution: {integrity: sha512-U5rdMjnYam9Ucw+h0QvtNDbc5+88nxt7tbIvqaZUhFrfG4+SkWhMXjejCLVGcpILTPuV+H3W/GZDZrnZFpPeXw==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true peerDependencies: - jest: '>=26 <27' + jest: ^27.0.0 typescript: '>=3.8 <5.0' dependencies: bs-logger: 0.2.6 - buffer-from: 1.1.1 + buffer-from: 1.1.2 fast-json-stable-stringify: 2.1.0 - jest: 26.6.3 - jest-util: 26.6.2 + jest: 27.0.6 + jest-util: 27.0.6 json5: 2.2.0 lodash: 4.17.21 make-error: 1.3.6 mkdirp: 1.0.4 semver: 7.3.5 - typescript: 4.3.2 - yargs-parser: 20.2.7 + typescript: 4.3.5 + yargs-parser: 20.2.9 dev: true /tslib/1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tsutils/3.21.0_typescript@4.3.2: + /tsutils/3.21.0_typescript@4.3.5: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 4.3.2 - dev: true - - /tunnel-agent/0.6.0: - resolution: {integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /tweetnacl/0.14.5: - resolution: {integrity: sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=} + typescript: 4.3.5 dev: true /type-check/0.3.2: @@ -4436,24 +3562,14 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - /type-fest/0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true - - /type-fest/0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true - /typedarray-to-buffer/3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: is-typedarray: 1.0.0 dev: true - /typescript/4.3.2: - resolution: {integrity: sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw==} + /typescript/4.3.5: + resolution: {integrity: sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==} engines: {node: '>=4.2.0'} hasBin: true dev: true @@ -4462,85 +3578,30 @@ packages: resolution: {integrity: sha512-/j3YTZ5AobMB4ZrTY72mzM54uFUX32v0R/JRW9G2vOyF1uSKYAx+WT8dMsAcRS13TOFISv094TxIyWYk+WEPsA==} dev: false - /union-value/1.0.1: - resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} - engines: {node: '>=0.10.0'} - dependencies: - arr-union: 3.1.0 - get-value: 2.0.6 - is-extendable: 0.1.1 - set-value: 2.0.1 - dev: true - /universalify/0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} dev: true - /unset-value/1.0.0: - resolution: {integrity: sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=} - engines: {node: '>=0.10.0'} - dependencies: - has-value: 0.3.1 - isobject: 3.0.1 - dev: true - /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.1.1 dev: true - /urix/0.1.0: - resolution: {integrity: sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=} - deprecated: Please see https://github.com/lydell/urix#deprecated - dev: true - - /use/3.1.1: - resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} - engines: {node: '>=0.10.0'} - dev: true - - /uuid/3.4.0: - resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} - hasBin: true - dev: true - - /uuid/8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: true - optional: true - /v8-compile-cache/2.3.0: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true - /v8-to-istanbul/7.1.1: - resolution: {integrity: sha512-p0BB09E5FRjx0ELN6RgusIPsSPhtgexSRcKETybEs6IGOTXJSZqfwxp7r//55nnu0f1AxltY5VvdVqy2vZf9AA==} - engines: {node: '>=10.10.0'} + /v8-to-istanbul/8.0.0: + resolution: {integrity: sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==} + engines: {node: '>=10.12.0'} dependencies: '@types/istanbul-lib-coverage': 2.0.3 - convert-source-map: 1.7.0 + convert-source-map: 1.8.0 source-map: 0.7.3 dev: true - /validate-npm-package-license/3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - dependencies: - spdx-correct: 3.1.1 - spdx-expression-parse: 3.0.1 - dev: true - - /verror/1.10.0: - resolution: {integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=} - engines: {'0': node >=0.6.0} - dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.3.0 - dev: true - /w3c-hr-time/1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} dependencies: @@ -4580,26 +3641,15 @@ packages: resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} dev: true - /whatwg-url/8.5.0: - resolution: {integrity: sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==} + /whatwg-url/8.7.0: + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} engines: {node: '>=10'} dependencies: lodash: 4.17.21 - tr46: 2.0.2 + tr46: 2.1.0 webidl-conversions: 6.1.0 dev: true - /which-module/2.0.0: - resolution: {integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=} - dev: true - - /which/1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - /which/2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -4643,8 +3693,8 @@ packages: typedarray-to-buffer: 3.1.5 dev: true - /ws/7.4.5: - resolution: {integrity: sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==} + /ws/7.5.3: + resolution: {integrity: sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==} engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 @@ -4664,8 +3714,9 @@ packages: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true - /y18n/4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + /y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} dev: true /yallist/4.0.0: @@ -4677,32 +3728,20 @@ packages: engines: {node: '>= 6'} dev: true - /yargs-parser/18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - dev: true - - /yargs-parser/20.2.7: - resolution: {integrity: sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==} + /yargs-parser/20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} dev: true - /yargs/15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} + /yargs/16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 + cliui: 7.0.4 + escalade: 3.1.1 get-caller-file: 2.0.5 require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 string-width: 4.2.2 - which-module: 2.0.0 - y18n: 4.0.3 - yargs-parser: 18.1.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 dev: true diff --git a/src/packages/migrate/package.json b/src/packages/migrate/package.json index 62d34e07c648..b32135c6ea92 100644 --- a/src/packages/migrate/package.json +++ b/src/packages/migrate/package.json @@ -16,7 +16,7 @@ "version": "latest" }, "devDependencies": { - "@prisma/engines-version": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019", + "@prisma/engines-version": "2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00", "@prisma/generator-helper": "workspace:*", "@prisma/sdk": "workspace:*", "@types/jest": "26.0.24", diff --git a/src/packages/sdk/package.json b/src/packages/sdk/package.json index 10f7af1b56d1..cf0d2b4de9ba 100644 --- a/src/packages/sdk/package.json +++ b/src/packages/sdk/package.json @@ -49,7 +49,7 @@ "dependencies": { "@prisma/debug": "workspace:*", "@prisma/engine-core": "workspace:*", - "@prisma/engines": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019", + "@prisma/engines": "2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00", "@prisma/fetch-engine": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019", "@prisma/generator-helper": "workspace:*", "@prisma/get-platform": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019", diff --git a/src/pnpm-lock.yaml b/src/pnpm-lock.yaml index 9ac580d4159d..1bef048c8d84 100644 --- a/src/pnpm-lock.yaml +++ b/src/pnpm-lock.yaml @@ -54,7 +54,7 @@ importers: specifiers: '@prisma/client': workspace:* '@prisma/debug': workspace:* - '@prisma/engines': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/engines': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 '@prisma/fetch-engine': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 '@prisma/generator-helper': workspace:* '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 @@ -101,7 +101,7 @@ importers: ts-jest: 27.0.3 typescript: 4.3.5 dependencies: - '@prisma/engines': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/engines': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 devDependencies: '@prisma/client': link:../client '@prisma/debug': link:../debug @@ -155,8 +155,8 @@ importers: specifiers: '@prisma/debug': workspace:* '@prisma/engine-core': workspace:* - '@prisma/engines': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 - '@prisma/engines-version': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/engines': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 + '@prisma/engines-version': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 '@prisma/fetch-engine': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 '@prisma/generator-helper': workspace:* '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 @@ -214,11 +214,11 @@ importers: tsd: 0.17.0 typescript: 4.3.5 dependencies: - '@prisma/engines-version': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/engines-version': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 devDependencies: '@prisma/debug': link:../debug '@prisma/engine-core': link:../engine-core - '@prisma/engines': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/engines': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 '@prisma/fetch-engine': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 '@prisma/generator-helper': link:../generator-helper '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 @@ -318,7 +318,7 @@ importers: packages/engine-core: specifiers: '@prisma/debug': workspace:* - '@prisma/engines': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/engines': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 '@prisma/generator-helper': workspace:* '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 '@types/jest': 26.0.24 @@ -346,7 +346,7 @@ importers: undici: 3.3.6 dependencies: '@prisma/debug': link:../debug - '@prisma/engines': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/engines': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 '@prisma/generator-helper': link:../generator-helper '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 chalk: 4.1.1 @@ -500,7 +500,7 @@ importers: packages/migrate: specifiers: '@prisma/debug': workspace:* - '@prisma/engines-version': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/engines-version': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 '@prisma/generator-helper': workspace:* '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 '@prisma/sdk': workspace:* @@ -561,7 +561,7 @@ importers: strip-ansi: 6.0.0 strip-indent: 3.0.0 devDependencies: - '@prisma/engines-version': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/engines-version': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 '@prisma/generator-helper': link:../generator-helper '@prisma/sdk': link:../sdk '@types/jest': 26.0.24 @@ -634,7 +634,7 @@ importers: specifiers: '@prisma/debug': workspace:* '@prisma/engine-core': workspace:* - '@prisma/engines': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/engines': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 '@prisma/fetch-engine': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 '@prisma/generator-helper': workspace:* '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 @@ -688,7 +688,7 @@ importers: dependencies: '@prisma/debug': link:../debug '@prisma/engine-core': link:../engine-core - '@prisma/engines': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/engines': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 '@prisma/fetch-engine': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 '@prisma/generator-helper': link:../generator-helper '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 @@ -1572,8 +1572,8 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/debug/2.28.0-dev.23: - resolution: {integrity: sha512-Awcs14Cj6Mc/9wk9lwAU4pFndOmfc2g2L8IHNJT2wtpR9Ie8NalWz/vnbcoxjs13ztV0QQGiDduLjy1K7nXYww==} + /@prisma/debug/2.29.0-dev.5: + resolution: {integrity: sha512-qjtrPtYkwEGJJ1h7XprMHaTmholjhyt1q8dLU/TDILSVTSiCoj77t68cVWbsPDPfD+Kb6HJkKXgcu9mWGDk20g==} dependencies: debug: 4.3.2 ms: 2.1.3 @@ -1581,13 +1581,13 @@ packages: - supports-color dev: true - /@prisma/engine-core/2.28.0-dev.23: - resolution: {integrity: sha512-QIYrGzpJWtEbXsXoIqDFltrisUr+BvxKmc6nN5kjWT8VqP2QXxopJIh/accpwrxndLuIX4z4fPBne3E4lUO36A==} + /@prisma/engine-core/2.29.0-dev.5: + resolution: {integrity: sha512-JRgTiIMewCR9BGJWBg17yoR0p63F5xChYZS3riwXevo9esIyAh98VT4cnhfrr84gBmZKeUQCEBmXN0ma2sC6nw==} dependencies: - '@prisma/debug': 2.28.0-dev.23 - '@prisma/engines': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 - '@prisma/generator-helper': 2.28.0-dev.23 - '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/debug': 2.29.0-dev.5 + '@prisma/engines': 2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27 + '@prisma/generator-helper': 2.29.0-dev.5 + '@prisma/get-platform': 2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27 chalk: 4.1.1 execa: 5.1.1 get-stream: 6.0.1 @@ -1600,11 +1600,16 @@ packages: - supports-color dev: true - /@prisma/engines-version/2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019: - resolution: {integrity: sha512-/mUTgZIN5ekhilG0Zq1VRNWQoc+pdBMLBqLLNTK0/8e2+mgcRvtWdIICsPrE2Qw387WPLGKkjsYJaCm1nVI1MA==} + /@prisma/engines-version/2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00: + resolution: {integrity: sha512-ZbArNIPkRT6ebmQeZMhNt0HSbkpGcV6E183iv3K4kZBFidifriY60zGP3X6memikQY914PXP7CF1Ynbk4BL7tw==} - /@prisma/engines/2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019: - resolution: {integrity: sha512-JlbZxmKAT81GRa1Y98VxZsW4dS5nnn9TIszc6pQ93C+T48lqWtxzoC5vWdXK1wwfhy2Zr7ZRi5uYDujwBCiVPQ==} + /@prisma/engines/2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27: + resolution: {integrity: sha512-r3/EnwKjbu2qz13I98hPQQdeFrOEcwdjlrB9CcoSoqRCjSHLnpdVMUvRfYuRKIoEF7p941R7/Fov0/CxOLF/MQ==} + requiresBuild: true + dev: true + + /@prisma/engines/2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00: + resolution: {integrity: sha512-DGHNu8Gm5JQmdCvzAOr7C4Hkjaa5kxwJZwnf0sFNdYl3uKjQVd3twhxEQUO5jBhxZGqFOjfC/mbnN3cDYoEDgg==} requiresBuild: true /@prisma/fetch-engine/2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019: @@ -1630,10 +1635,34 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/generator-helper/2.28.0-dev.23: - resolution: {integrity: sha512-xHFNEz+I3ozGWwngh2kveZ0XV2KJfcMLZAd0N0jqDZ4/ba1B1mBd02ov0EWnQwLZ4UFMAPz+oYTUOgBVele5VA==} + /@prisma/fetch-engine/2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27: + resolution: {integrity: sha512-o30L0+IrnK8ncT5qypnMW0AagpdTGCDL9eitDp59PA4KTPcfyusgcjcIgPm0qfcsiOrbvriBYCDmjXhNKNfaMA==} dependencies: - '@prisma/debug': 2.28.0-dev.23 + '@prisma/debug': 2.27.0 + '@prisma/get-platform': 2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27 + chalk: 4.1.1 + execa: 5.1.1 + find-cache-dir: 3.3.1 + hasha: 5.2.2 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.0 + make-dir: 3.1.0 + node-fetch: 2.6.1 + p-filter: 2.1.0 + p-map: 4.0.0 + p-retry: 4.6.1 + progress: 2.0.3 + rimraf: 3.0.2 + temp-dir: 2.0.0 + tempy: 1.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@prisma/generator-helper/2.29.0-dev.5: + resolution: {integrity: sha512-hImMQ9BJhI0YUIPEN4L50Whh+O8F+zUbi8/Q160TPEdGZ7zCpqg4bicfs7hbK6b/q0ihBDU62HfZharDmYr5wA==} + dependencies: + '@prisma/debug': 2.29.0-dev.5 '@types/cross-spawn': 6.0.2 chalk: 4.1.1 cross-spawn: 7.0.3 @@ -1648,15 +1677,23 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/sdk/2.28.0-dev.23: - resolution: {integrity: sha512-279sjqb1ee1Sv0fDcdYPEOWydpYLM7+0btdU1DAtCBXXGtXy8yn74zLWTlF7V96rRHvr6F927Em+bNp+pPW1kQ==} + /@prisma/get-platform/2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27: + resolution: {integrity: sha512-OdTubLy4lVRYNvF3N9eODWxLxUhgh2oapDVvdMO3YmHQSeYQzzHHhYHBKoUY9zpCCAbAPBik+YIXgimJp3lqQQ==} dependencies: - '@prisma/debug': 2.28.0-dev.23 - '@prisma/engine-core': 2.28.0-dev.23 - '@prisma/engines': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 - '@prisma/fetch-engine': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 - '@prisma/generator-helper': 2.28.0-dev.23 - '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/debug': 2.27.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@prisma/sdk/2.29.0-dev.5: + resolution: {integrity: sha512-Px3OP2mENrG3oDm7AvODAEiuqneiZXAvXtsXNlV6Zehepkd5+QaNof6E7OxO2I/8049DDKpUveNq0y2f3xAiaw==} + dependencies: + '@prisma/debug': 2.29.0-dev.5 + '@prisma/engine-core': 2.29.0-dev.5 + '@prisma/engines': 2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27 + '@prisma/fetch-engine': 2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27 + '@prisma/generator-helper': 2.29.0-dev.5 + '@prisma/get-platform': 2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27 '@timsuchanek/copy': 1.4.5 archiver: 4.0.2 arg: 5.0.0 @@ -1690,13 +1727,13 @@ packages: - supports-color dev: true - /@prisma/studio-pcw/0.416.0_@prisma+sdk@2.28.0-dev.23: + /@prisma/studio-pcw/0.416.0_@prisma+sdk@2.29.0-dev.5: resolution: {integrity: sha512-K3tZi1v9cJ6QMCu4fEvYqqJctYQ5XxzcV20gfEgDt3NIZRVf+VEGll4yt4aCQMnB6RrRauZ5FGhFMScVV91JhA==} peerDependencies: '@prisma/client': '*' '@prisma/sdk': '*' dependencies: - '@prisma/sdk': 2.28.0-dev.23 + '@prisma/sdk': 2.29.0-dev.5 debug: 4.3.1 lodash: 4.17.21 transitivePeerDependencies: @@ -1706,8 +1743,8 @@ packages: /@prisma/studio-server/0.416.0: resolution: {integrity: sha512-7dOHEZbB5HS8d3pf0nAkN4+lIC8vZLsSEgj7P7pr+Q7d4ZmmSgPKiiuFyovtngqa07sMEU0CalhueTwXgWVTOQ==} dependencies: - '@prisma/sdk': 2.28.0-dev.23 - '@prisma/studio-pcw': 0.416.0_@prisma+sdk@2.28.0-dev.23 + '@prisma/sdk': 2.29.0-dev.5 + '@prisma/studio-pcw': 0.416.0_@prisma+sdk@2.29.0-dev.5 '@prisma/studio-transports': 0.416.0 '@sentry/node': 6.2.5 checkpoint-client: 1.1.20 From e5159fcdcdd5b8b2d280f0906fa2487a93e36f29 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 30 Jul 2021 07:23:20 -0500 Subject: [PATCH 27/52] chore: debug --- .../engine-core/src/binary/BinaryEngine.ts | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/packages/engine-core/src/binary/BinaryEngine.ts b/src/packages/engine-core/src/binary/BinaryEngine.ts index 7657dad2e506..125cefa0db1a 100644 --- a/src/packages/engine-core/src/binary/BinaryEngine.ts +++ b/src/packages/engine-core/src/binary/BinaryEngine.ts @@ -116,7 +116,6 @@ export class BinaryEngine extends Engine { private engineStartDeferred?: Deferred private engineStopDeferred?: StopDeferred private connection: Connection - private txConnection: Connection private lastQuery?: string private lastVersion?: string private lastActiveProvider?: ConnectorType @@ -169,7 +168,6 @@ export class BinaryEngine extends Engine { this.previewFeatures = previewFeatures ?? [] this.activeProvider = activeProvider this.connection = new Connection() - this.txConnection = new Connection() initHooks() const removedFlags = [ @@ -1072,30 +1070,40 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. async transaction(action: any, arg?: any) { await this.start() - this.txConnection.open('http://localhost:3000') - if (action === 'start') { const jsonOptions = JSON.stringify({ - max_wait: arg?.maxWait ?? 2000, // default - timeout: arg?.timeout ?? 5000, // default + max_wait: arg?.maxWait ?? 2, // default + timeout: arg?.timeout ?? 5, // default }) + console.log(jsonOptions) + const result = await Connection.onHttpError( - this.txConnection.post('/transaction/start', jsonOptions), + this.connection.post('/transaction/start', jsonOptions), transactionHttpErrorHandler, ) + console.log('started', result.data) + return result.data } else if (action === 'commit') { + console.log('commit', arg.id) + await Connection.onHttpError( - this.txConnection.post(`/transaction/${arg.id}/commit`), + this.connection.post(`/transaction/${arg.id}/commit`), transactionHttpErrorHandler, ) + + console.log('committed', arg.id) } else if (action === 'rollback') { + console.log('rollback', arg.id) + await Connection.onHttpError( - this.txConnection.post(`/transaction/${arg.id}/rollback`), + this.connection.post(`/transaction/${arg.id}/rollback`), transactionHttpErrorHandler, ) + + console.log('rolledback', arg.id) } } @@ -1279,5 +1287,7 @@ function initHooks() { * @param result */ function transactionHttpErrorHandler(result: Result): never { - throw new Error(`Transaction error ${result.statusCode}`) + throw new Error( + `Transaction error ${result.statusCode} ${JSON.stringify(result.data)}`, + ) } From 63d2cd5ece4c33b5540b371936a59775b8ad6e31 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 30 Jul 2021 08:00:30 -0500 Subject: [PATCH 28/52] chore: pkg lock --- src/pnpm-lock.yaml | 51 +++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/src/pnpm-lock.yaml b/src/pnpm-lock.yaml index 1bef048c8d84..aefbca2297e6 100644 --- a/src/pnpm-lock.yaml +++ b/src/pnpm-lock.yaml @@ -1572,8 +1572,8 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/debug/2.29.0-dev.5: - resolution: {integrity: sha512-qjtrPtYkwEGJJ1h7XprMHaTmholjhyt1q8dLU/TDILSVTSiCoj77t68cVWbsPDPfD+Kb6HJkKXgcu9mWGDk20g==} + /@prisma/debug/2.29.0-dev.7: + resolution: {integrity: sha512-KQPDO/qxr0ykYnBetBGGzJhj7Q2JoE+D/DllBZ2O+EL9d9eNj2T57DfKz8R3qjcf8F7BBgxHelYcj3Ozo1iYQQ==} dependencies: debug: 4.3.2 ms: 2.1.3 @@ -1581,12 +1581,12 @@ packages: - supports-color dev: true - /@prisma/engine-core/2.29.0-dev.5: - resolution: {integrity: sha512-JRgTiIMewCR9BGJWBg17yoR0p63F5xChYZS3riwXevo9esIyAh98VT4cnhfrr84gBmZKeUQCEBmXN0ma2sC6nw==} + /@prisma/engine-core/2.29.0-dev.7: + resolution: {integrity: sha512-2hdc8amWJbRGn12vYxJfG+oexPnODAVGmCDeQxW2BMPQO18DLMNB6gvCZbjUOFZazh9vlIJkbioUIpooqEK8dA==} dependencies: - '@prisma/debug': 2.29.0-dev.5 + '@prisma/debug': 2.29.0-dev.7 '@prisma/engines': 2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27 - '@prisma/generator-helper': 2.29.0-dev.5 + '@prisma/generator-helper': 2.29.0-dev.7 '@prisma/get-platform': 2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27 chalk: 4.1.1 execa: 5.1.1 @@ -1659,10 +1659,10 @@ packages: - supports-color dev: true - /@prisma/generator-helper/2.29.0-dev.5: - resolution: {integrity: sha512-hImMQ9BJhI0YUIPEN4L50Whh+O8F+zUbi8/Q160TPEdGZ7zCpqg4bicfs7hbK6b/q0ihBDU62HfZharDmYr5wA==} + /@prisma/generator-helper/2.29.0-dev.7: + resolution: {integrity: sha512-Ha6OfW2KDipzDEbfbU9Eh4fi6Tr7tVpHDW9hJct01HuKMWfh/wQEayjUU/fxzRr7keJcgPTW4pNhkelKn363Ew==} dependencies: - '@prisma/debug': 2.29.0-dev.5 + '@prisma/debug': 2.29.0-dev.7 '@types/cross-spawn': 6.0.2 chalk: 4.1.1 cross-spawn: 7.0.3 @@ -1685,14 +1685,14 @@ packages: - supports-color dev: true - /@prisma/sdk/2.29.0-dev.5: - resolution: {integrity: sha512-Px3OP2mENrG3oDm7AvODAEiuqneiZXAvXtsXNlV6Zehepkd5+QaNof6E7OxO2I/8049DDKpUveNq0y2f3xAiaw==} + /@prisma/sdk/2.29.0-dev.7: + resolution: {integrity: sha512-nofmmJo2TkrpP2Ue+JVOjLxjN+sgxEfX0NPhZT1z5jJb+rnlvpjH62KDlJ7NYpNRltWPxwpdYR/pLwI7prL8hA==} dependencies: - '@prisma/debug': 2.29.0-dev.5 - '@prisma/engine-core': 2.29.0-dev.5 + '@prisma/debug': 2.29.0-dev.7 + '@prisma/engine-core': 2.29.0-dev.7 '@prisma/engines': 2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27 '@prisma/fetch-engine': 2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27 - '@prisma/generator-helper': 2.29.0-dev.5 + '@prisma/generator-helper': 2.29.0-dev.7 '@prisma/get-platform': 2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27 '@timsuchanek/copy': 1.4.5 archiver: 4.0.2 @@ -1717,7 +1717,7 @@ packages: string-width: 4.2.2 strip-ansi: 6.0.0 strip-indent: 3.0.0 - tar: 6.1.0 + tar: 6.1.2 temp-dir: 2.0.0 temp-write: 4.0.0 tempy: 1.0.1 @@ -1727,13 +1727,13 @@ packages: - supports-color dev: true - /@prisma/studio-pcw/0.416.0_@prisma+sdk@2.29.0-dev.5: + /@prisma/studio-pcw/0.416.0_@prisma+sdk@2.29.0-dev.7: resolution: {integrity: sha512-K3tZi1v9cJ6QMCu4fEvYqqJctYQ5XxzcV20gfEgDt3NIZRVf+VEGll4yt4aCQMnB6RrRauZ5FGhFMScVV91JhA==} peerDependencies: '@prisma/client': '*' '@prisma/sdk': '*' dependencies: - '@prisma/sdk': 2.29.0-dev.5 + '@prisma/sdk': 2.29.0-dev.7 debug: 4.3.1 lodash: 4.17.21 transitivePeerDependencies: @@ -1743,8 +1743,8 @@ packages: /@prisma/studio-server/0.416.0: resolution: {integrity: sha512-7dOHEZbB5HS8d3pf0nAkN4+lIC8vZLsSEgj7P7pr+Q7d4ZmmSgPKiiuFyovtngqa07sMEU0CalhueTwXgWVTOQ==} dependencies: - '@prisma/sdk': 2.29.0-dev.5 - '@prisma/studio-pcw': 0.416.0_@prisma+sdk@2.29.0-dev.5 + '@prisma/sdk': 2.29.0-dev.7 + '@prisma/studio-pcw': 0.416.0_@prisma+sdk@2.29.0-dev.7 '@prisma/studio-transports': 0.416.0 '@sentry/node': 6.2.5 checkpoint-client: 1.1.20 @@ -6795,6 +6795,19 @@ packages: minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 + dev: false + + /tar/6.1.2: + resolution: {integrity: sha512-EwKEgqJ7nJoS+s8QfLYVGMDmAsj+StbI2AM/RTHeUSsOw6Z8bwNBRv5z3CY0m7laC5qUAqruLX5AhMuc5deY3Q==} + engines: {node: '>= 10'} + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 3.1.3 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + dev: true /tarn/3.0.1: resolution: {integrity: sha512-6usSlV9KyHsspvwu2duKH+FMUhqJnAh6J5J/4MITl8s94iSUQTLkJggdiewKv4RyARQccnigV48Z+khiuVZDJw==} From 799d38b91fd0aac6ea931c2e286e8d66ecb46d35 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 30 Jul 2021 15:05:55 -0500 Subject: [PATCH 29/52] chore(scripts): fix bump engines --- src/scripts/bump-engines.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scripts/bump-engines.ts b/src/scripts/bump-engines.ts index 1a96cab8f414..d292facf0b41 100644 --- a/src/scripts/bump-engines.ts +++ b/src/scripts/bump-engines.ts @@ -20,7 +20,7 @@ async function main() { } await run( path.join(__dirname, '..'), - `pnpm update -r @prisma/engines-version@${version} @prisma/engines@${version}`, + `pnpm update -r @prisma/engines-version@${version} @prisma/engines@${version} @prisma/fetch-engine@${version} @prisma/get-platform@${version}`, ) } From a95d283c224bca6d5ffae2f2456438fa9e56d144 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 30 Jul 2021 19:29:42 -0500 Subject: [PATCH 30/52] chore(client): integrate with engines --- src/packages/cli/package.json | 6 +- src/packages/client/package.json | 8 +- .../long-running-transaction/schema.prisma | 1 + .../happy/long-running-transaction/test.ts | 239 +++++++++++++++++- src/packages/client/src/runtime/DataLoader.ts | 2 +- .../client/src/runtime/RequestHandler.ts | 12 +- .../client/src/runtime/getPrismaClient.ts | 6 +- src/packages/engine-core/package.json | 4 +- .../engine-core/src/binary/BinaryEngine.ts | 61 +++-- .../src/common/types/QueryEngine.ts | 1 + .../engine-core/src/library/LibraryEngine.ts | 4 +- src/packages/integration-tests/package.json | 2 +- src/packages/migrate/package.json | 4 +- src/packages/sdk/package.json | 6 +- src/pnpm-lock.yaml | 111 ++++---- 15 files changed, 361 insertions(+), 106 deletions(-) diff --git a/src/packages/cli/package.json b/src/packages/cli/package.json index cd5c3347ae97..e88458b174b2 100644 --- a/src/packages/cli/package.json +++ b/src/packages/cli/package.json @@ -63,9 +63,9 @@ "devDependencies": { "@prisma/client": "workspace:*", "@prisma/debug": "workspace:*", - "@prisma/fetch-engine": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019", + "@prisma/fetch-engine": "2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2", "@prisma/generator-helper": "workspace:*", - "@prisma/get-platform": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019", + "@prisma/get-platform": "2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2", "@prisma/migrate": "workspace:*", "@prisma/sdk": "workspace:*", "@prisma/studio-server": "0.416.0", @@ -125,7 +125,7 @@ "precommit": "lint-staged" }, "dependencies": { - "@prisma/engines": "2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00" + "@prisma/engines": "2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2" }, "lint-staged": { "*.ts": [ diff --git a/src/packages/client/package.json b/src/packages/client/package.json index df2ec5348c84..6517d3ea562a 100644 --- a/src/packages/client/package.json +++ b/src/packages/client/package.json @@ -59,10 +59,10 @@ "devDependencies": { "@prisma/debug": "workspace:*", "@prisma/engine-core": "workspace:*", - "@prisma/engines": "2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00", - "@prisma/fetch-engine": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019", + "@prisma/engines": "2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2", + "@prisma/fetch-engine": "2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2", "@prisma/generator-helper": "workspace:*", - "@prisma/get-platform": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019", + "@prisma/get-platform": "2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2", "@prisma/migrate": "workspace:*", "@prisma/sdk": "workspace:*", "@timsuchanek/copy": "1.4.5", @@ -126,7 +126,7 @@ } }, "dependencies": { - "@prisma/engines-version": "2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00" + "@prisma/engines-version": "2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2" }, "lint-staged": { "*.ts": [ diff --git a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma index 2b0879c1f46c..09ff51c04f2c 100644 --- a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma +++ b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma @@ -5,6 +5,7 @@ datasource db { generator client { provider = "prisma-client-js" + previewFeatures = ["longRunningTransactions"] } // / User model comment diff --git a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts index 472c4ab34558..bbbe9a548212 100644 --- a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts +++ b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts @@ -29,7 +29,7 @@ describe('long-running transaction', () => { /** * Transactions should fail after the default timeout */ - test('timeout', async () => { + test('timeout default', async () => { const result = prisma.$transaction(async (prisma) => { await prisma.user.create({ data: { @@ -46,10 +46,56 @@ describe('long-running transaction', () => { }) /** - * A transaction may fail if it's called inside another + * Transactions should fail after the changed timeout + */ + test('timeout override', async () => { + const result = prisma.$transaction( + async (prisma) => { + await prisma.user.create({ + data: { + email: 'user_1@website.com', + }, + }) + + await new Promise((res) => setTimeout(res, 600)) + + return prisma.user.findMany() + }, + { + maxWait: 200, + timeout: 500, + }, + ) + + await expect(result).rejects.toThrowError() + }) + + /** + * Transactions should fail and rollback if thrown within + */ + test('rollback throw', async () => { + const result = prisma.$transaction(async (prisma) => { + await prisma.user.create({ + data: { + email: 'user_1@website.com', + }, + }) + + throw new Error('you better rollback now') + }) + + await expect(result).rejects.toThrowError() + + const users = await prisma.user.findMany() + + expect(users.length).toBe(0) + }) + + /** + * A transaction should fail if it's called inside another transaction */ test('nested', async () => { - const result = await prisma.$transaction(async (tx) => { + const result = prisma.$transaction(async (tx) => { await tx.user.create({ data: { email: 'user_1@website.com', @@ -67,7 +113,11 @@ describe('long-running transaction', () => { return tx.user.findMany() }) - expect(result.length).toBe(2) // TODO: not yet + await expect(result).rejects.toThrow() + + const users = await prisma.user.findMany() + + expect(users.length).toBe(0) }) /** @@ -77,11 +127,186 @@ describe('long-running transaction', () => { const forbidden = ['$connect', '$disconnect', '$on', '$transaction', '$use'] const result = prisma.$transaction((prisma) => { + // we accumulate all the forbidden methods and expect to be undefined return forbidden.reduce((acc, item) => acc ?? prisma[item], undefined) }) await expect(result).resolves.toBe(undefined) }) + + /** + * If one of the query fails, all queries should cancel + */ + test('rollback query', async () => { + const result = prisma.$transaction(async (prisma) => { + await prisma.user.create({ + data: { + email: 'user_1@website.com', + }, + }) + + await prisma.user.create({ + data: { + email: 'user_1@website.com', + }, + }) + }) + + await expect(result).rejects.toThrow() + + const users = await prisma.user.findMany() + + expect(users.length).toBe(0) + }) + + /** + * A transaction that is already 'commit' cannot be reused + */ + test('already committed', async () => { + let transactionBoundPrisma + prisma.$transaction((prisma) => { + transactionBoundPrisma = prisma + }) + + const result = prisma.$transaction(async () => { + await transactionBoundPrisma.user.create({ + data: { + email: 'user_1@website.com', + }, + }) + }) + + await expect(result).rejects.toThrow() + + const users = await prisma.user.findMany() + + expect(users.length).toBe(0) + }) + + /** + * Batching should work with using the interactive transaction logic + */ + test('batching', async () => { + await prisma.$transaction([ + prisma.user.create({ + data: { + email: 'user_1@website.com', + }, + }), + prisma.user.create({ + data: { + email: 'user_2@website.com', + }, + }), + ]) + + const users = await prisma.user.findMany() + + expect(users.length).toBe(2) + }) + + /** + * A bad batch should rollback using the interactive transaction logic + */ + test('batching rollback', async () => { + const result = prisma.$transaction([ + prisma.user.create({ + data: { + email: 'user_1@website.com', + }, + }), + prisma.user.create({ + data: { + email: 'user_1@website.com', + }, + }), + ]) + + await expect(result).rejects.toThrow() + + const users = await prisma.user.findMany() + + expect(users.length).toBe(0) + }) + + /** + * Middlewares should work normally on batches + */ + test('middlewares batching', async () => { + prisma.$use(async (params, next) => { + const result = await next(params) + + return result + }) + + await prisma.$transaction([ + prisma.user.create({ + data: { + email: 'user_1@website.com', + }, + }), + prisma.user.create({ + data: { + email: 'user_2@website.com', + }, + }), + ]) + + const users = await prisma.user.findMany() + + expect(users.length).toBe(2) + }) + + /** + * Middlewares should not prevent a rollback + */ + test('middlewares batching rollback', async () => { + prisma.$use(async (params, next) => { + const result = await next(params) + + return result + }) + + const result = prisma.$transaction([ + prisma.user.create({ + data: { + email: 'user_1@website.com', + }, + }), + prisma.user.create({ + data: { + email: 'user_1@website.com', + }, + }), + ]) + + await expect(result).rejects.toThrow() + + const users = await prisma.user.findMany() + + expect(users.length).toBe(0) + }) + + /** + * Minimal example of a long-running transaction & middleware + */ + test('middleware basic', async () => { + prisma.$use(async (params, next) => { + await next(params) + + return 'result' + }) + + const result = await prisma.$transaction((prisma) => { + return prisma.user.create({ + data: { + email: 'user_1@website.com', + }, + }) + }) + + expect(result).toBe('result') + }) }) beforeAll(async () => { @@ -94,12 +319,12 @@ afterAll(() => { delete process.env.PRISMA_FORCE_LRT }) -beforeEach(async () => { +beforeEach(() => { prisma = new PrismaClient() - - await prisma.user.deleteMany() }) afterEach(async () => { + await prisma.user.deleteMany() + await prisma.$disconnect() }) diff --git a/src/packages/client/src/runtime/DataLoader.ts b/src/packages/client/src/runtime/DataLoader.ts index 2c92a4070c45..33b728ddf70c 100644 --- a/src/packages/client/src/runtime/DataLoader.ts +++ b/src/packages/client/src/runtime/DataLoader.ts @@ -10,7 +10,7 @@ export type DataLoaderOptions = { batchBy: (request: T) => string | undefined } -export class DataLoader { +export class DataLoader { batches: { [key: string]: Job[] } private tickActive = false constructor(private options: DataLoaderOptions) { diff --git a/src/packages/client/src/runtime/RequestHandler.ts b/src/packages/client/src/runtime/RequestHandler.ts index 0dc2a30fe413..b5f63a112a70 100644 --- a/src/packages/client/src/runtime/RequestHandler.ts +++ b/src/packages/client/src/runtime/RequestHandler.ts @@ -12,7 +12,7 @@ import { EngineMiddleware } from './MiddlewareHandler' import { Args, Document, unpack } from './query' import { printStack } from './utils/printStack' import { RejectOnNotFound, throwIfNotFound } from './utils/rejectOnNotFound' -const debug = Debug('prisma:client:fetcher') +const debug = Debug('prisma:client:request_handler') export type RequestParams = { document: Document @@ -49,15 +49,19 @@ export class RequestHandler { this.hooks = hooks this.dataloader = new DataLoader({ batchLoader: (requests) => { - const headers = { transactionId: requests[0].transactionId } const queries = requests.map((r) => String(r.document)) - return this.client._engine.requestBatch(queries, headers) + return this.client._engine.requestBatch(queries, { + transactionId: requests[0].transactionId, + }) }, singleLoader: (request) => { const query = String(request.document) - return this.client._engine.request(query, request.headers) + return this.client._engine.request(query, { + transactionId: request.transactionId, + ...request.headers, + }) }, batchBy: (request) => { if (request.transactionId) { diff --git a/src/packages/client/src/runtime/getPrismaClient.ts b/src/packages/client/src/runtime/getPrismaClient.ts index 89a0e505bee0..1deb490365af 100644 --- a/src/packages/client/src/runtime/getPrismaClient.ts +++ b/src/packages/client/src/runtime/getPrismaClient.ts @@ -860,8 +860,8 @@ new PrismaClient({ })`) } - const query = 'SELECT 1' - + // TODO: make a `fatal` boolean instead & let be handled in `engine-core` + // in `runtimeHeadersToHttpHeaders` maybe add a shared in `Engine` const headers: Record = fatal ? { 'X-DEBUG-FATAL': '1' } : { 'X-DEBUG-NON-FATAL': '1' } @@ -869,7 +869,7 @@ new PrismaClient({ return this._request({ action: 'queryRaw', args: { - query, + query: 'SELECT 1', parameters: undefined, }, clientMethod: 'queryRaw', diff --git a/src/packages/engine-core/package.json b/src/packages/engine-core/package.json index 1fe302a53759..aee9b286a335 100644 --- a/src/packages/engine-core/package.json +++ b/src/packages/engine-core/package.json @@ -41,9 +41,9 @@ }, "dependencies": { "@prisma/debug": "workspace:*", - "@prisma/engines": "2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00", + "@prisma/engines": "2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2", "@prisma/generator-helper": "workspace:*", - "@prisma/get-platform": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019", + "@prisma/get-platform": "2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2", "chalk": "^4.0.0", "execa": "^5.0.0", "get-stream": "^6.0.0", diff --git a/src/packages/engine-core/src/binary/BinaryEngine.ts b/src/packages/engine-core/src/binary/BinaryEngine.ts index 125cefa0db1a..255adbfa0008 100644 --- a/src/packages/engine-core/src/binary/BinaryEngine.ts +++ b/src/packages/engine-core/src/binary/BinaryEngine.ts @@ -45,6 +45,7 @@ import { QueryEngineRequestHeaders, QueryEngineResult, } from '../common/types/QueryEngine' +import type { IncomingHttpHeaders } from 'http' const debug = Debug('prisma:engine') const exists = promisify(fs.exists) @@ -666,7 +667,7 @@ ${chalk.dim("In case we're mistaken, please report this to us 🙏.")}`) socketPath: this.socketPath, }) } else { - this.connection.open(`http://localhost:${this.port}`) + this.connection.open(`http://localhost:4466`) } this.engineStartDeferred.resolve() this.engineStartDeferred = undefined @@ -951,7 +952,7 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. async request( query: string, - headers: Record, + headers: QueryEngineRequestHeaders = {}, numTry = 1, ): Promise> { await this.start() @@ -959,7 +960,7 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. this.currentRequestPromise = this.connection.post( '/', stringifyQuery(query), - headers, + runtimeHeadersToHttpHeaders(headers), ) this.lastQuery = query @@ -1011,17 +1012,17 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. ): Promise[]> { await this.start() - const variables = {} - const body = { - batch: queries.map((query) => ({ query, variables })), + const request = { + batch: queries.map((query) => ({ query, variables: {} })), transaction, } - const stringifiedQuery = JSON.stringify(body) - - this.currentRequestPromise = this.connection.post('/', stringifiedQuery) - - this.lastQuery = stringifiedQuery + this.lastQuery = JSON.stringify(request) + this.currentRequestPromise = this.connection.post( + '/', + this.lastQuery, + runtimeHeadersToHttpHeaders(headers), + ) return this.currentRequestPromise .then(({ data, headers }) => { @@ -1072,38 +1073,26 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. if (action === 'start') { const jsonOptions = JSON.stringify({ - max_wait: arg?.maxWait ?? 2, // default - timeout: arg?.timeout ?? 5, // default + max_wait: arg?.maxWait ?? 2000, // default + timeout: arg?.timeout ?? 5000, // default }) - console.log(jsonOptions) - const result = await Connection.onHttpError( this.connection.post('/transaction/start', jsonOptions), transactionHttpErrorHandler, ) - console.log('started', result.data) - return result.data } else if (action === 'commit') { - console.log('commit', arg.id) - await Connection.onHttpError( this.connection.post(`/transaction/${arg.id}/commit`), transactionHttpErrorHandler, ) - - console.log('committed', arg.id) } else if (action === 'rollback') { - console.log('rollback', arg.id) - await Connection.onHttpError( this.connection.post(`/transaction/${arg.id}/rollback`), transactionHttpErrorHandler, ) - - console.log('rolledback', arg.id) } } @@ -1291,3 +1280,25 @@ function transactionHttpErrorHandler(result: Result): never { `Transaction error ${result.statusCode} ${JSON.stringify(result.data)}`, ) } + +/** + * Takes runtime data headers and turns it into QE HTTP headers + * @param headers to transform + * @returns + */ +function runtimeHeadersToHttpHeaders( + headers: QueryEngineRequestHeaders, +): IncomingHttpHeaders { + return Object.keys(headers).reduce((acc, runtimeHeaderKey) => { + let httpHeaderKey = runtimeHeaderKey + + if (runtimeHeaderKey === 'transactionId') { + httpHeaderKey = 'X-transaction-id' + } + // if header key isn't changed, a copy happens + + acc[httpHeaderKey] = headers[runtimeHeaderKey] + + return acc + }, {} as IncomingHttpHeaders) +} diff --git a/src/packages/engine-core/src/common/types/QueryEngine.ts b/src/packages/engine-core/src/common/types/QueryEngine.ts index 7348a6d4bcc0..f592e31e1bc4 100644 --- a/src/packages/engine-core/src/common/types/QueryEngine.ts +++ b/src/packages/engine-core/src/common/types/QueryEngine.ts @@ -70,6 +70,7 @@ export type QueryEngineResult = { export type QueryEngineRequestHeaders = { traceparent?: string transactionId?: string + fatal?: string // TODO } export type QueryEngineBatchRequest = { diff --git a/src/packages/engine-core/src/library/LibraryEngine.ts b/src/packages/engine-core/src/library/LibraryEngine.ts index 38a932e15958..fbb37e053517 100644 --- a/src/packages/engine-core/src/library/LibraryEngine.ts +++ b/src/packages/engine-core/src/library/LibraryEngine.ts @@ -408,8 +408,8 @@ You may have to run ${chalk.greenBright( async request( query: string, - headers: Record, - numTry: number, + headers: QueryEngineRequestHeaders = {}, + numTry = 1, ): Promise<{ data: T; elapsed: number }> { try { debug(`sending request, this.libraryStarted: ${this.libraryStarted}`) diff --git a/src/packages/integration-tests/package.json b/src/packages/integration-tests/package.json index 584f731f13bc..acfcaa22a006 100644 --- a/src/packages/integration-tests/package.json +++ b/src/packages/integration-tests/package.json @@ -9,7 +9,7 @@ "repository": "git@github.com:prisma/prisma.git", "devDependencies": { "@prisma/client": "workspace:*", - "@prisma/get-platform": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019", + "@prisma/get-platform": "2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2", "@prisma/migrate": "workspace:*", "@prisma/sdk": "workspace:*", "@sindresorhus/slugify": "1.1.2", diff --git a/src/packages/migrate/package.json b/src/packages/migrate/package.json index b32135c6ea92..1457b22b3b0f 100644 --- a/src/packages/migrate/package.json +++ b/src/packages/migrate/package.json @@ -16,7 +16,7 @@ "version": "latest" }, "devDependencies": { - "@prisma/engines-version": "2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00", + "@prisma/engines-version": "2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2", "@prisma/generator-helper": "workspace:*", "@prisma/sdk": "workspace:*", "@types/jest": "26.0.24", @@ -53,7 +53,7 @@ }, "dependencies": { "@prisma/debug": "workspace:*", - "@prisma/get-platform": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019", + "@prisma/get-platform": "2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2", "@sindresorhus/slugify": "^1.1.0", "execa": "^5.0.0", "global-dirs": "^3.0.0", diff --git a/src/packages/sdk/package.json b/src/packages/sdk/package.json index cf0d2b4de9ba..e338224b3355 100644 --- a/src/packages/sdk/package.json +++ b/src/packages/sdk/package.json @@ -49,10 +49,10 @@ "dependencies": { "@prisma/debug": "workspace:*", "@prisma/engine-core": "workspace:*", - "@prisma/engines": "2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00", - "@prisma/fetch-engine": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019", + "@prisma/engines": "2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2", + "@prisma/fetch-engine": "2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2", "@prisma/generator-helper": "workspace:*", - "@prisma/get-platform": "2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019", + "@prisma/get-platform": "2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2", "@timsuchanek/copy": "^1.4.5", "archiver": "^4.0.0", "arg": "^5.0.0", diff --git a/src/pnpm-lock.yaml b/src/pnpm-lock.yaml index aefbca2297e6..ca7368f59cb9 100644 --- a/src/pnpm-lock.yaml +++ b/src/pnpm-lock.yaml @@ -54,10 +54,10 @@ importers: specifiers: '@prisma/client': workspace:* '@prisma/debug': workspace:* - '@prisma/engines': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 - '@prisma/fetch-engine': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/engines': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 + '@prisma/fetch-engine': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/get-platform': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/migrate': workspace:* '@prisma/sdk': workspace:* '@prisma/studio-server': 0.416.0 @@ -101,13 +101,13 @@ importers: ts-jest: 27.0.3 typescript: 4.3.5 dependencies: - '@prisma/engines': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 + '@prisma/engines': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 devDependencies: '@prisma/client': link:../client '@prisma/debug': link:../debug - '@prisma/fetch-engine': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/fetch-engine': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/generator-helper': link:../generator-helper - '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/get-platform': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/migrate': link:../migrate '@prisma/sdk': link:../sdk '@prisma/studio-server': 0.416.0 @@ -155,11 +155,11 @@ importers: specifiers: '@prisma/debug': workspace:* '@prisma/engine-core': workspace:* - '@prisma/engines': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 - '@prisma/engines-version': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 - '@prisma/fetch-engine': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/engines': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 + '@prisma/engines-version': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 + '@prisma/fetch-engine': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/get-platform': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/migrate': workspace:* '@prisma/sdk': workspace:* '@timsuchanek/copy': 1.4.5 @@ -214,14 +214,14 @@ importers: tsd: 0.17.0 typescript: 4.3.5 dependencies: - '@prisma/engines-version': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 + '@prisma/engines-version': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 devDependencies: '@prisma/debug': link:../debug '@prisma/engine-core': link:../engine-core - '@prisma/engines': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 - '@prisma/fetch-engine': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/engines': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 + '@prisma/fetch-engine': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/generator-helper': link:../generator-helper - '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/get-platform': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/migrate': link:../migrate '@prisma/sdk': link:../sdk '@timsuchanek/copy': 1.4.5 @@ -318,9 +318,9 @@ importers: packages/engine-core: specifiers: '@prisma/debug': workspace:* - '@prisma/engines': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 + '@prisma/engines': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/get-platform': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@types/jest': 26.0.24 '@types/node': 12.20.16 '@typescript-eslint/eslint-plugin': 4.28.4 @@ -346,9 +346,9 @@ importers: undici: 3.3.6 dependencies: '@prisma/debug': link:../debug - '@prisma/engines': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 + '@prisma/engines': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/generator-helper': link:../generator-helper - '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/get-platform': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 chalk: 4.1.1 execa: 5.1.1 get-stream: 6.0.1 @@ -420,7 +420,7 @@ importers: packages/integration-tests: specifiers: '@prisma/client': workspace:* - '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/get-platform': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/migrate': workspace:* '@prisma/sdk': workspace:* '@sindresorhus/slugify': 1.1.2 @@ -459,7 +459,7 @@ importers: verror: 1.10.0 devDependencies: '@prisma/client': link:../client - '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/get-platform': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/migrate': link:../migrate '@prisma/sdk': link:../sdk '@sindresorhus/slugify': 1.1.2 @@ -500,9 +500,9 @@ importers: packages/migrate: specifiers: '@prisma/debug': workspace:* - '@prisma/engines-version': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 + '@prisma/engines-version': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/get-platform': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/sdk': workspace:* '@sindresorhus/slugify': ^1.1.0 '@types/jest': 26.0.24 @@ -546,7 +546,7 @@ importers: typescript: 4.3.5 dependencies: '@prisma/debug': link:../debug - '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/get-platform': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@sindresorhus/slugify': 1.1.2 execa: 5.1.1 global-dirs: 3.0.0 @@ -561,7 +561,7 @@ importers: strip-ansi: 6.0.0 strip-indent: 3.0.0 devDependencies: - '@prisma/engines-version': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 + '@prisma/engines-version': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/generator-helper': link:../generator-helper '@prisma/sdk': link:../sdk '@types/jest': 26.0.24 @@ -634,10 +634,10 @@ importers: specifiers: '@prisma/debug': workspace:* '@prisma/engine-core': workspace:* - '@prisma/engines': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 - '@prisma/fetch-engine': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/engines': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 + '@prisma/fetch-engine': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/get-platform': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@timsuchanek/copy': ^1.4.5 '@types/jest': 26.0.24 '@types/node': 12.20.16 @@ -688,10 +688,10 @@ importers: dependencies: '@prisma/debug': link:../debug '@prisma/engine-core': link:../engine-core - '@prisma/engines': 2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00 - '@prisma/fetch-engine': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/engines': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 + '@prisma/fetch-engine': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/generator-helper': link:../generator-helper - '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/get-platform': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@timsuchanek/copy': 1.4.5 archiver: 4.0.2 arg: 5.0.0 @@ -1571,6 +1571,15 @@ packages: ms: 2.1.3 transitivePeerDependencies: - supports-color + dev: true + + /@prisma/debug/2.28.0: + resolution: {integrity: sha512-SKihAtTPDqfm/iyLVs5xf1uLu4Ev+zcFLc8vdiGofpHTkeiu3qU1OSDPnrQ0nwn0IJsp3SeRbV0NRWTwL5Z71w==} + dependencies: + debug: 4.3.2 + ms: 2.1.3 + transitivePeerDependencies: + - supports-color /@prisma/debug/2.29.0-dev.7: resolution: {integrity: sha512-KQPDO/qxr0ykYnBetBGGzJhj7Q2JoE+D/DllBZ2O+EL9d9eNj2T57DfKz8R3qjcf8F7BBgxHelYcj3Ozo1iYQQ==} @@ -1600,23 +1609,23 @@ packages: - supports-color dev: true - /@prisma/engines-version/2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00: - resolution: {integrity: sha512-ZbArNIPkRT6ebmQeZMhNt0HSbkpGcV6E183iv3K4kZBFidifriY60zGP3X6memikQY914PXP7CF1Ynbk4BL7tw==} + /@prisma/engines-version/2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2: + resolution: {integrity: sha512-hkgtNqssJC3zUInjVou6ya5dSN99qNqsJfWNUNvNYLIYPo/W7psiQRG9a/kKYFHDm/r0Ck1HZkwjEsF+EDf+xw==} /@prisma/engines/2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27: resolution: {integrity: sha512-r3/EnwKjbu2qz13I98hPQQdeFrOEcwdjlrB9CcoSoqRCjSHLnpdVMUvRfYuRKIoEF7p941R7/Fov0/CxOLF/MQ==} requiresBuild: true dev: true - /@prisma/engines/2.29.0-1.query-engine-lrts-37fb47056c32c040fec460847488dbafbfe2fa00: - resolution: {integrity: sha512-DGHNu8Gm5JQmdCvzAOr7C4Hkjaa5kxwJZwnf0sFNdYl3uKjQVd3twhxEQUO5jBhxZGqFOjfC/mbnN3cDYoEDgg==} + /@prisma/engines/2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2: + resolution: {integrity: sha512-kUqMmcw6SEwc4vnktReKq74zQOBI2cPwiFpmJHWS8Yj1pDj1YIPcHfPmkb0SoOrSiCcbzDQrqRmymK++n87h4g==} requiresBuild: true - /@prisma/fetch-engine/2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019: - resolution: {integrity: sha512-kmfX4UJyICDZySI74hhgxl48YWQolO1PbxPM+kmj13siTPlDJ2AAaVoYLwFjSUKufH/7Lvfv1A0FoF3pr92I4A==} + /@prisma/fetch-engine/2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27: + resolution: {integrity: sha512-o30L0+IrnK8ncT5qypnMW0AagpdTGCDL9eitDp59PA4KTPcfyusgcjcIgPm0qfcsiOrbvriBYCDmjXhNKNfaMA==} dependencies: '@prisma/debug': 2.27.0 - '@prisma/get-platform': 2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019 + '@prisma/get-platform': 2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27 chalk: 4.1.1 execa: 5.1.1 find-cache-dir: 3.3.1 @@ -1634,12 +1643,13 @@ packages: tempy: 1.0.1 transitivePeerDependencies: - supports-color + dev: true - /@prisma/fetch-engine/2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27: - resolution: {integrity: sha512-o30L0+IrnK8ncT5qypnMW0AagpdTGCDL9eitDp59PA4KTPcfyusgcjcIgPm0qfcsiOrbvriBYCDmjXhNKNfaMA==} + /@prisma/fetch-engine/2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2: + resolution: {integrity: sha512-BayecwsGHA3uSyE4sizgwBpig1vDfrorgxX7BwvFucWH+q88ogssmg/lIDVbi1noWMz8WAw75PAV1jDHMwZnwg==} dependencies: - '@prisma/debug': 2.27.0 - '@prisma/get-platform': 2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27 + '@prisma/debug': 2.28.0 + '@prisma/get-platform': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 chalk: 4.1.1 execa: 5.1.1 find-cache-dir: 3.3.1 @@ -1657,7 +1667,6 @@ packages: tempy: 1.0.1 transitivePeerDependencies: - supports-color - dev: true /@prisma/generator-helper/2.29.0-dev.7: resolution: {integrity: sha512-Ha6OfW2KDipzDEbfbU9Eh4fi6Tr7tVpHDW9hJct01HuKMWfh/wQEayjUU/fxzRr7keJcgPTW4pNhkelKn363Ew==} @@ -1670,20 +1679,20 @@ packages: - supports-color dev: true - /@prisma/get-platform/2.28.0-15.d616ac2e761de0623c4f0494620b4199161d9019: - resolution: {integrity: sha512-DsgvAEK/xZ+JLCgwXxTbNkGt0wqfmJAnYhYhfSNFWXNXj6QlXfIe6r+jW/+I5xtRikde5HzwTx9jMJsN1kCvRg==} + /@prisma/get-platform/2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27: + resolution: {integrity: sha512-OdTubLy4lVRYNvF3N9eODWxLxUhgh2oapDVvdMO3YmHQSeYQzzHHhYHBKoUY9zpCCAbAPBik+YIXgimJp3lqQQ==} dependencies: '@prisma/debug': 2.27.0 transitivePeerDependencies: - supports-color + dev: true - /@prisma/get-platform/2.28.0-17.89facabd0366f63911d089156a7a70125bfbcd27: - resolution: {integrity: sha512-OdTubLy4lVRYNvF3N9eODWxLxUhgh2oapDVvdMO3YmHQSeYQzzHHhYHBKoUY9zpCCAbAPBik+YIXgimJp3lqQQ==} + /@prisma/get-platform/2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2: + resolution: {integrity: sha512-vgej9kjyADX1bJrvC6lDfcrpNXTfiSnVVGfm6seCOnrQ+AkYjAFpXmoeHfkIdqVxxxrbIedGXUcbPdcJ6aoYgQ==} dependencies: - '@prisma/debug': 2.27.0 + '@prisma/debug': 2.28.0 transitivePeerDependencies: - supports-color - dev: true /@prisma/sdk/2.29.0-dev.7: resolution: {integrity: sha512-nofmmJo2TkrpP2Ue+JVOjLxjN+sgxEfX0NPhZT1z5jJb+rnlvpjH62KDlJ7NYpNRltWPxwpdYR/pLwI7prL8hA==} @@ -3975,7 +3984,7 @@ packages: resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} engines: {node: '>=8'} dependencies: - is-stream: 2.0.0 + is-stream: 2.0.1 type-fest: 0.8.1 /hosted-git-info/2.8.9: @@ -4251,6 +4260,10 @@ packages: resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==} engines: {node: '>=8'} + /is-stream/2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + /is-typedarray/1.0.0: resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} dev: true From 5b3759f89bfd648abbd19bd07881a9992e6e4497 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 30 Jul 2021 19:58:49 -0500 Subject: [PATCH 31/52] chore(client); use lrt flag --- .../happy/long-running-transaction/dev.db | Bin 45056 -> 45056 bytes .../happy/long-running-transaction/test.ts | 6 ++--- .../src/generation/TSClient/PrismaClient.ts | 2 +- .../client/src/runtime/getPrismaClient.ts | 22 +++++++++++++++--- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/dev.db b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/dev.db index 6f0cd1789757db450fc1f263f7b9a5daddb6a100..be9c1c85968594b431abd54b7db0bed3f98eb351 100644 GIT binary patch delta 431 zcmZp8z|`=7X@WFk&O{k!#+;1_tL2$*@V8BV=x9Cpl!El;I0q&EdIkoDDhm^fR6|oU zb6pcN(_~!}!&FmU%jCo)-86$_OUopq#8eXlV`iYjKm&u+6ay2}MBOCgL`$GT%Vb?k zOG86lLvv#@i$tR|Qw!rnCUxde&O}2aBa5VDOI-s~lO$ae6HB0p7O57xiOHshrsk=p zNk(bOyg(BfIr)z;@E_st;1Aj?XyDFYzb=%av^cdW-pHXmHK{nWBvmgtKNr9IfW}l{ z(?yJ9tr%Ghp?VELHtN8vB*p`q9M}XnUNP{$;=jy)XtQ9zc7Ag^6vqQyri&r~_6?IL Svmqx~7;GiT#?61?Spoo6l6*M; delta 280 zcmZp8z|`=7X@WFk=tLQ3#?XxktK}KjPfk#_oqS3`dUKqEH-9Vx1A}Hta-yl3WwN=h zVWOppu8Coiv95)Mv4O6kp_x&dfq`jSlBFq=I&&zeQBsmcVoIvHZfcq#P@%brxo(oF zWwNe8TC%ZWvWd9?km3cJ$jE<+f&Uc$)XjncJ^UGFp$sLd#U&0Isg-)k`ME^cX2Qs# qimHhin>RVI39x-&;Qzq?bhBW>9exo(sI~mes+=$vZ2l9^5&!_-a8LgL diff --git a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts index bbbe9a548212..08b16408cb62 100644 --- a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts +++ b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts @@ -319,12 +319,12 @@ afterAll(() => { delete process.env.PRISMA_FORCE_LRT }) -beforeEach(() => { +beforeEach(async () => { prisma = new PrismaClient() -}) -afterEach(async () => { await prisma.user.deleteMany() +}) +afterEach(async () => { await prisma.$disconnect() }) diff --git a/src/packages/client/src/generation/TSClient/PrismaClient.ts b/src/packages/client/src/generation/TSClient/PrismaClient.ts index 5653f098d427..c4f333add4ad 100644 --- a/src/packages/client/src/generation/TSClient/PrismaClient.ts +++ b/src/packages/client/src/generation/TSClient/PrismaClient.ts @@ -142,7 +142,7 @@ export class PrismaClient< * Read more in our [docs](https://www.prisma.io/docs/concepts/components/prisma-client/transactions). */ $transaction

[]>(arg: [...P]): Promise>${ - process.env.PRISMA_FORCE_LRT === 'true' + this.generator?.previewFeatures.includes('longRunningTransactions') ? longRunningTransactionDefinition() : '' } diff --git a/src/packages/client/src/runtime/getPrismaClient.ts b/src/packages/client/src/runtime/getPrismaClient.ts index 1deb490365af..e3cda1bf223c 100644 --- a/src/packages/client/src/runtime/getPrismaClient.ts +++ b/src/packages/client/src/runtime/getPrismaClient.ts @@ -407,7 +407,8 @@ export function getPrismaClient(config: GetPrismaClientOptions) { this._engine = this.getEngine() void this._getActiveProvider() - if (process.env.PRISMA_FORCE_LRT !== 'true') { + // eslint-disable-next-line prettier/prettier + if (!this._hasPreviewFlag('longRunningTransactions')) { this._fetcher = new PrismaClientFetcher(this, false, this._hooks) } else { this._fetcher = new RequestHandler(this, this._hooks) as any @@ -953,7 +954,8 @@ new PrismaClient({ * @returns */ $transaction(input: any, options?: any) { - if (process.env.PRISMA_FORCE_LRT !== 'true') { + // eslint-disable-next-line prettier/prettier + if (!this._hasPreviewFlag('longRunningTransactions')) { return this.$___transaction(input) } @@ -1067,7 +1069,12 @@ new PrismaClient({ const changedInternalParams = { ...internalParams, ...params } // TODO remove this once LRT is the default transaction mode - if (index > 0 && process.env.PRISMA_FORCE_LRT === undefined) { + // eslint-disable-next-line prettier/prettier + if ( + !this._engineConfig.previewFeatures?.includes( + 'longRunningTransactions', + ) + ) { delete changedInternalParams['transactionId'] } @@ -1463,6 +1470,15 @@ new PrismaClient({ this[lowerCaseModel] = delegate } } + + /** + * Shortcut for checking a preview flag + * @param feature preview flag + * @returns + */ + private _hasPreviewFlag(feature: string) { + return !!this._engineConfig.previewFeatures?.includes(feature) + } } return PrismaClient as new (optionsArg?: PrismaClientOptions) => Client From 563b1e0518360d1cbc5e3679f271b74f1a7df238 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 30 Jul 2021 20:13:18 -0500 Subject: [PATCH 32/52] chore: pnpm lock --- src/pnpm-lock.yaml | 425 +++++++++++++++++++++++++-------------------- 1 file changed, 232 insertions(+), 193 deletions(-) diff --git a/src/pnpm-lock.yaml b/src/pnpm-lock.yaml index ca7368f59cb9..f1e7faf64583 100644 --- a/src/pnpm-lock.yaml +++ b/src/pnpm-lock.yaml @@ -6,9 +6,9 @@ importers: specifiers: '@sindresorhus/slugify': 1.1.2 '@slack/webhook': 6.0.0 - '@types/debug': 4.1.6 + '@types/debug': 4.1.7 '@types/graphviz': 0.0.33 - '@types/node': 12.20.16 + '@types/node': 12.20.17 '@types/redis': 2.8.31 arg: 5.0.0 batching-toposort: 1.2.0 @@ -29,9 +29,9 @@ importers: devDependencies: '@sindresorhus/slugify': 1.1.2 '@slack/webhook': 6.0.0_debug@4.3.2 - '@types/debug': 4.1.6 + '@types/debug': 4.1.7 '@types/graphviz': 0.0.33 - '@types/node': 12.20.16 + '@types/node': 12.20.17 '@types/redis': 2.8.31 arg: 5.0.0 batching-toposort: 1.2.0 @@ -47,7 +47,7 @@ importers: redis: 3.1.2 redis-lock: 0.1.4 semver: 7.3.5 - ts-node: 10.1.0_fb12cdd5d1c63e5bff1f6df37ef04f2a + ts-node: 10.1.0_6a5e1f2f9646ad83684ea4da8a674e6d typescript: 4.3.5 packages/cli: @@ -60,12 +60,12 @@ importers: '@prisma/get-platform': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/migrate': workspace:* '@prisma/sdk': workspace:* - '@prisma/studio-server': 0.416.0 + '@prisma/studio-server': 0.418.0 '@timsuchanek/copy': 1.4.5 '@types/jest': 26.0.24 '@types/ws': 7.4.7 - '@typescript-eslint/eslint-plugin': 4.28.4 - '@typescript-eslint/parser': 4.28.4 + '@typescript-eslint/eslint-plugin': 4.28.5 + '@typescript-eslint/parser': 4.28.5 chalk: 4.1.1 checkpoint-client: 1.1.20 dotenv: 10.0.0 @@ -85,12 +85,12 @@ importers: is-installed-globally: 0.4.0 jest: 27.0.6 line-replace: 2.0.1 - lint-staged: 11.1.0 + lint-staged: 11.1.1 log-update: 4.0.0 make-dir: 3.1.0 node-fetch: 2.6.1 open: 7.4.2 - pg: 8.6.0 + pg: 8.7.1 pkg-up: 3.1.0 prettier: 2.3.2 replace-string: 3.1.0 @@ -98,7 +98,7 @@ importers: rimraf: 3.0.2 strip-ansi: 6.0.0 tempy: 1.0.1 - ts-jest: 27.0.3 + ts-jest: 27.0.4 typescript: 4.3.5 dependencies: '@prisma/engines': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 @@ -110,12 +110,12 @@ importers: '@prisma/get-platform': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@prisma/migrate': link:../migrate '@prisma/sdk': link:../sdk - '@prisma/studio-server': 0.416.0 + '@prisma/studio-server': 0.418.0 '@timsuchanek/copy': 1.4.5 '@types/jest': 26.0.24 '@types/ws': 7.4.7 - '@typescript-eslint/eslint-plugin': 4.28.4_b1648df9f9ba40bdeef3710a5a5af353 - '@typescript-eslint/parser': 4.28.4_eslint@7.31.0+typescript@4.3.5 + '@typescript-eslint/eslint-plugin': 4.28.5_514553717ff968e20f6d1c6e521f8616 + '@typescript-eslint/parser': 4.28.5_eslint@7.31.0+typescript@4.3.5 chalk: 4.1.1 checkpoint-client: 1.1.20 dotenv: 10.0.0 @@ -124,7 +124,7 @@ importers: eslint: 7.31.0 eslint-config-prettier: 8.3.0_eslint@7.31.0 eslint-plugin-eslint-comments: 3.2.0_eslint@7.31.0 - eslint-plugin-jest: 24.4.0_fc5326c9e782cff3be563ae5197052dc + eslint-plugin-jest: 24.4.0_ac7033cc4dfbdac1051fc5c687b09618 eslint-plugin-prettier: 3.4.0_19f511d6aa08b367b6cb59e8f50291ca execa: 5.1.1 fast-deep-equal: 3.1.3 @@ -135,12 +135,12 @@ importers: is-installed-globally: 0.4.0 jest: 27.0.6_ts-node@10.1.0 line-replace: 2.0.1 - lint-staged: 11.1.0 + lint-staged: 11.1.1 log-update: 4.0.0 make-dir: 3.1.0 node-fetch: 2.6.1 open: 7.4.2 - pg: 8.6.0 + pg: 8.7.1 pkg-up: 3.1.0 prettier: 2.3.2 replace-string: 3.1.0 @@ -148,7 +148,7 @@ importers: rimraf: 3.0.2 strip-ansi: 6.0.0 tempy: 1.0.1 - ts-jest: 27.0.3_jest@27.0.6+typescript@4.3.5 + ts-jest: 27.0.4_52cc4273aa16028085013af47e479e10 typescript: 4.3.5 packages/client: @@ -163,14 +163,14 @@ importers: '@prisma/migrate': workspace:* '@prisma/sdk': workspace:* '@timsuchanek/copy': 1.4.5 - '@types/debug': 4.1.6 + '@types/debug': 4.1.7 '@types/jest': 26.0.24 '@types/js-levenshtein': 1.1.0 '@types/mssql': 6.0.8 - '@types/node': 12.20.16 + '@types/node': 12.20.17 '@types/pg': 8.6.1 - '@typescript-eslint/eslint-plugin': 4.28.4 - '@typescript-eslint/parser': 4.28.4 + '@typescript-eslint/eslint-plugin': 4.28.5 + '@typescript-eslint/parser': 4.28.5 arg: 5.0.0 chalk: 4.1.1 decimal.js: 10.3.1 @@ -191,17 +191,17 @@ importers: jest: 27.0.6 js-levenshtein: 1.1.6 klona: 2.0.4 - lint-staged: 11.1.0 + lint-staged: 11.1.1 make-dir: 3.1.0 mariadb: 2.5.4 mssql: 7.1.3 - pg: 8.6.0 + pg: 8.7.1 pkg-up: 3.1.0 pluralize: 8.0.0 prettier: 2.3.2 replace-string: 3.1.0 rimraf: 3.0.2 - rollup: 2.53.3 + rollup: 2.55.0 rollup-plugin-dts: 3.0.2 sort-keys: 4.2.0 source-map-support: 0.5.19 @@ -209,7 +209,7 @@ importers: stacktrace-parser: 0.1.10 strip-ansi: 6.0.0 strip-indent: 3.0.0 - ts-jest: 27.0.3 + ts-jest: 27.0.4 ts-node: 10.1.0 tsd: 0.17.0 typescript: 4.3.5 @@ -225,14 +225,14 @@ importers: '@prisma/migrate': link:../migrate '@prisma/sdk': link:../sdk '@timsuchanek/copy': 1.4.5 - '@types/debug': 4.1.6 + '@types/debug': 4.1.7 '@types/jest': 26.0.24 '@types/js-levenshtein': 1.1.0 '@types/mssql': 6.0.8 - '@types/node': 12.20.16 + '@types/node': 12.20.17 '@types/pg': 8.6.1 - '@typescript-eslint/eslint-plugin': 4.28.4_b1648df9f9ba40bdeef3710a5a5af353 - '@typescript-eslint/parser': 4.28.4_eslint@7.31.0+typescript@4.3.5 + '@typescript-eslint/eslint-plugin': 4.28.5_514553717ff968e20f6d1c6e521f8616 + '@typescript-eslint/parser': 4.28.5_eslint@7.31.0+typescript@4.3.5 arg: 5.0.0 chalk: 4.1.1 decimal.js: 10.3.1 @@ -241,7 +241,7 @@ importers: eslint: 7.31.0 eslint-config-prettier: 8.3.0_eslint@7.31.0 eslint-plugin-eslint-comments: 3.2.0_eslint@7.31.0 - eslint-plugin-jest: 24.4.0_fc5326c9e782cff3be563ae5197052dc + eslint-plugin-jest: 24.4.0_ac7033cc4dfbdac1051fc5c687b09618 eslint-plugin-prettier: 3.4.0_19f511d6aa08b367b6cb59e8f50291ca execa: 5.1.1 flat-map-polyfill: 0.3.8 @@ -253,35 +253,35 @@ importers: jest: 27.0.6_ts-node@10.1.0 js-levenshtein: 1.1.6 klona: 2.0.4 - lint-staged: 11.1.0 + lint-staged: 11.1.1 make-dir: 3.1.0 mariadb: 2.5.4 mssql: 7.1.3 - pg: 8.6.0 + pg: 8.7.1 pkg-up: 3.1.0 pluralize: 8.0.0 prettier: 2.3.2 replace-string: 3.1.0 rimraf: 3.0.2 - rollup: 2.53.3 - rollup-plugin-dts: 3.0.2_rollup@2.53.3+typescript@4.3.5 + rollup: 2.55.0 + rollup-plugin-dts: 3.0.2_rollup@2.55.0+typescript@4.3.5 sort-keys: 4.2.0 source-map-support: 0.5.19 sql-template-tag: 4.0.0 stacktrace-parser: 0.1.10 strip-ansi: 6.0.0 strip-indent: 3.0.0 - ts-jest: 27.0.3_jest@27.0.6+typescript@4.3.5 - ts-node: 10.1.0_fb12cdd5d1c63e5bff1f6df37ef04f2a + ts-jest: 27.0.4_52cc4273aa16028085013af47e479e10 + ts-node: 10.1.0_6a5e1f2f9646ad83684ea4da8a674e6d tsd: 0.17.0 typescript: 4.3.5 packages/debug: specifiers: '@types/jest': 26.0.24 - '@types/node': 12.20.16 - '@typescript-eslint/eslint-plugin': 4.28.4 - '@typescript-eslint/parser': 4.28.4 + '@types/node': 12.20.17 + '@typescript-eslint/eslint-plugin': 4.28.5 + '@typescript-eslint/parser': 4.28.5 debug: 4.3.2 eslint: 7.31.0 eslint-config-prettier: 8.3.0 @@ -289,30 +289,30 @@ importers: eslint-plugin-jest: 24.4.0 eslint-plugin-prettier: 3.4.0 jest: 27.0.6 - lint-staged: 11.1.0 + lint-staged: 11.1.1 ms: ^2.1.3 prettier: 2.3.2 strip-ansi: 6.0.0 - ts-jest: 27.0.3 + ts-jest: 27.0.4 typescript: 4.3.5 dependencies: debug: 4.3.2 ms: 2.1.3 devDependencies: '@types/jest': 26.0.24 - '@types/node': 12.20.16 - '@typescript-eslint/eslint-plugin': 4.28.4_b1648df9f9ba40bdeef3710a5a5af353 - '@typescript-eslint/parser': 4.28.4_eslint@7.31.0+typescript@4.3.5 + '@types/node': 12.20.17 + '@typescript-eslint/eslint-plugin': 4.28.5_514553717ff968e20f6d1c6e521f8616 + '@typescript-eslint/parser': 4.28.5_eslint@7.31.0+typescript@4.3.5 eslint: 7.31.0 eslint-config-prettier: 8.3.0_eslint@7.31.0 eslint-plugin-eslint-comments: 3.2.0_eslint@7.31.0 - eslint-plugin-jest: 24.4.0_fc5326c9e782cff3be563ae5197052dc + eslint-plugin-jest: 24.4.0_ac7033cc4dfbdac1051fc5c687b09618 eslint-plugin-prettier: 3.4.0_19f511d6aa08b367b6cb59e8f50291ca jest: 27.0.6_ts-node@10.1.0 - lint-staged: 11.1.0 + lint-staged: 11.1.1 prettier: 2.3.2 strip-ansi: 6.0.0 - ts-jest: 27.0.3_jest@27.0.6+typescript@4.3.5 + ts-jest: 27.0.4_52cc4273aa16028085013af47e479e10 typescript: 4.3.5 packages/engine-core: @@ -322,9 +322,9 @@ importers: '@prisma/generator-helper': workspace:* '@prisma/get-platform': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@types/jest': 26.0.24 - '@types/node': 12.20.16 - '@typescript-eslint/eslint-plugin': 4.28.4 - '@typescript-eslint/parser': 4.28.4 + '@types/node': 12.20.17 + '@typescript-eslint/eslint-plugin': 4.28.5 + '@typescript-eslint/parser': 4.28.5 chalk: ^4.0.0 eslint: 7.31.0 eslint-config-prettier: 8.3.0 @@ -335,13 +335,13 @@ importers: get-stream: ^6.0.0 indent-string: ^4.0.0 jest: 27.0.6 - lint-staged: 11.1.0 + lint-staged: 11.1.1 new-github-issue-url: ^0.2.1 p-retry: ^4.2.0 prettier: 2.3.2 strip-ansi: 6.0.0 terminal-link: ^2.1.1 - ts-jest: 27.0.3 + ts-jest: 27.0.4 typescript: 4.3.5 undici: 3.3.6 dependencies: @@ -359,19 +359,19 @@ importers: undici: 3.3.6 devDependencies: '@types/jest': 26.0.24 - '@types/node': 12.20.16 - '@typescript-eslint/eslint-plugin': 4.28.4_b1648df9f9ba40bdeef3710a5a5af353 - '@typescript-eslint/parser': 4.28.4_eslint@7.31.0+typescript@4.3.5 + '@types/node': 12.20.17 + '@typescript-eslint/eslint-plugin': 4.28.5_514553717ff968e20f6d1c6e521f8616 + '@typescript-eslint/parser': 4.28.5_eslint@7.31.0+typescript@4.3.5 eslint: 7.31.0 eslint-config-prettier: 8.3.0_eslint@7.31.0 eslint-plugin-eslint-comments: 3.2.0_eslint@7.31.0 - eslint-plugin-jest: 24.4.0_fc5326c9e782cff3be563ae5197052dc + eslint-plugin-jest: 24.4.0_ac7033cc4dfbdac1051fc5c687b09618 eslint-plugin-prettier: 3.4.0_19f511d6aa08b367b6cb59e8f50291ca jest: 27.0.6_ts-node@10.1.0 - lint-staged: 11.1.0 + lint-staged: 11.1.1 prettier: 2.3.2 strip-ansi: 6.0.0 - ts-jest: 27.0.3_jest@27.0.6+typescript@4.3.5 + ts-jest: 27.0.4_52cc4273aa16028085013af47e479e10 typescript: 4.3.5 packages/generator-helper: @@ -379,9 +379,9 @@ importers: '@prisma/debug': workspace:* '@types/cross-spawn': ^6.0.1 '@types/jest': 26.0.24 - '@types/node': 12.20.16 - '@typescript-eslint/eslint-plugin': 4.28.4 - '@typescript-eslint/parser': 4.28.4 + '@types/node': 12.20.17 + '@typescript-eslint/eslint-plugin': 4.28.5 + '@typescript-eslint/parser': 4.28.5 chalk: ^4.0.0 cross-spawn: ^7.0.2 eslint: 7.31.0 @@ -390,9 +390,9 @@ importers: eslint-plugin-jest: 24.4.0 eslint-plugin-prettier: 3.4.0 jest: 27.0.6 - lint-staged: 11.1.0 + lint-staged: 11.1.1 prettier: 2.3.2 - ts-jest: 27.0.3 + ts-jest: 27.0.4 ts-node: 10.1.0 typescript: 4.3.5 dependencies: @@ -402,19 +402,19 @@ importers: cross-spawn: 7.0.3 devDependencies: '@types/jest': 26.0.24 - '@types/node': 12.20.16 - '@typescript-eslint/eslint-plugin': 4.28.4_b1648df9f9ba40bdeef3710a5a5af353 - '@typescript-eslint/parser': 4.28.4_eslint@7.31.0+typescript@4.3.5 + '@types/node': 12.20.17 + '@typescript-eslint/eslint-plugin': 4.28.5_514553717ff968e20f6d1c6e521f8616 + '@typescript-eslint/parser': 4.28.5_eslint@7.31.0+typescript@4.3.5 eslint: 7.31.0 eslint-config-prettier: 8.3.0_eslint@7.31.0 eslint-plugin-eslint-comments: 3.2.0_eslint@7.31.0 - eslint-plugin-jest: 24.4.0_fc5326c9e782cff3be563ae5197052dc + eslint-plugin-jest: 24.4.0_ac7033cc4dfbdac1051fc5c687b09618 eslint-plugin-prettier: 3.4.0_19f511d6aa08b367b6cb59e8f50291ca jest: 27.0.6_ts-node@10.1.0 - lint-staged: 11.1.0 + lint-staged: 11.1.1 prettier: 2.3.2 - ts-jest: 27.0.3_jest@27.0.6+typescript@4.3.5 - ts-node: 10.1.0_fb12cdd5d1c63e5bff1f6df37ef04f2a + ts-jest: 27.0.4_52cc4273aa16028085013af47e479e10 + ts-node: 10.1.0_6a5e1f2f9646ad83684ea4da8a674e6d typescript: 4.3.5 packages/integration-tests: @@ -426,11 +426,11 @@ importers: '@sindresorhus/slugify': 1.1.2 '@types/jest': 26.0.24 '@types/mssql': 6.0.8 - '@types/node': 12.20.16 + '@types/node': 12.20.17 '@types/pg': 8.6.1 '@types/sqlite3': 3.1.7 - '@typescript-eslint/eslint-plugin': 4.28.4 - '@typescript-eslint/parser': 4.28.4 + '@typescript-eslint/eslint-plugin': 4.28.5 + '@typescript-eslint/parser': 4.28.5 decimal.js: 10.3.1 escape-string-regexp: 4.0.0 eslint: 7.31.0 @@ -441,10 +441,10 @@ importers: execa: 5.1.1 fs-jetpack: 4.1.0 jest: 27.0.6 - lint-staged: 11.1.0 + lint-staged: 11.1.1 mariadb: 2.5.4 mssql: 7.1.3 - pg: 8.6.0 + pg: 8.7.1 prettier: 2.3.2 replace-string: 3.1.0 segfault-handler: 1.3.0 @@ -453,7 +453,7 @@ importers: string-hash: 1.1.3 strip-ansi: 6.0.0 tempy: 1.0.1 - ts-jest: 27.0.3 + ts-jest: 27.0.4 ts-node: 10.1.0 typescript: 4.3.5 verror: 1.10.0 @@ -465,25 +465,25 @@ importers: '@sindresorhus/slugify': 1.1.2 '@types/jest': 26.0.24 '@types/mssql': 6.0.8 - '@types/node': 12.20.16 + '@types/node': 12.20.17 '@types/pg': 8.6.1 '@types/sqlite3': 3.1.7 - '@typescript-eslint/eslint-plugin': 4.28.4_b1648df9f9ba40bdeef3710a5a5af353 - '@typescript-eslint/parser': 4.28.4_eslint@7.31.0+typescript@4.3.5 + '@typescript-eslint/eslint-plugin': 4.28.5_514553717ff968e20f6d1c6e521f8616 + '@typescript-eslint/parser': 4.28.5_eslint@7.31.0+typescript@4.3.5 decimal.js: 10.3.1 escape-string-regexp: 4.0.0 eslint: 7.31.0 eslint-config-prettier: 8.3.0_eslint@7.31.0 eslint-plugin-eslint-comments: 3.2.0_eslint@7.31.0 - eslint-plugin-jest: 24.4.0_fc5326c9e782cff3be563ae5197052dc + eslint-plugin-jest: 24.4.0_ac7033cc4dfbdac1051fc5c687b09618 eslint-plugin-prettier: 3.4.0_19f511d6aa08b367b6cb59e8f50291ca execa: 5.1.1 fs-jetpack: 4.1.0 jest: 27.0.6_ts-node@10.1.0 - lint-staged: 11.1.0 + lint-staged: 11.1.1 mariadb: 2.5.4 mssql: 7.1.3 - pg: 8.6.0 + pg: 8.7.1 prettier: 2.3.2 replace-string: 3.1.0 segfault-handler: 1.3.0 @@ -492,8 +492,8 @@ importers: string-hash: 1.1.3 strip-ansi: 6.0.0 tempy: 1.0.1 - ts-jest: 27.0.3_jest@27.0.6+typescript@4.3.5 - ts-node: 10.1.0_fb12cdd5d1c63e5bff1f6df37ef04f2a + ts-jest: 27.0.4_52cc4273aa16028085013af47e479e10 + ts-node: 10.1.0_6a5e1f2f9646ad83684ea4da8a674e6d typescript: 4.3.5 verror: 1.10.0 @@ -506,12 +506,12 @@ importers: '@prisma/sdk': workspace:* '@sindresorhus/slugify': ^1.1.0 '@types/jest': 26.0.24 - '@types/node': 12.20.16 + '@types/node': 12.20.17 '@types/pg': 8.6.1 '@types/prompts': 2.0.14 '@types/sqlite3': 3.1.7 - '@typescript-eslint/eslint-plugin': 4.28.4 - '@typescript-eslint/parser': 4.28.4 + '@typescript-eslint/eslint-plugin': 4.28.5 + '@typescript-eslint/parser': 4.28.5 chalk: 4.1.1 del: 6.0.0 eslint: 7.31.0 @@ -525,14 +525,14 @@ importers: has-yarn: ^2.1.0 indent-string: ^4.0.0 jest: 27.0.6 - lint-staged: 11.1.0 + lint-staged: 11.1.1 log-update: ^4.0.0 make-dir: 3.1.0 mariadb: 2.5.4 mock-stdin: 1.0.0 new-github-issue-url: ^0.2.1 open: ^7.0.3 - pg: 8.6.0 + pg: 8.7.1 pkg-up: ^3.1.0 prettier: 2.3.2 prompts: ^2.3.2 @@ -542,7 +542,7 @@ importers: strip-ansi: ^6.0.0 strip-indent: ^3.0.0 tempy: 1.0.1 - ts-jest: 27.0.3 + ts-jest: 27.0.4 typescript: 4.3.5 dependencies: '@prisma/debug': link:../debug @@ -565,47 +565,47 @@ importers: '@prisma/generator-helper': link:../generator-helper '@prisma/sdk': link:../sdk '@types/jest': 26.0.24 - '@types/node': 12.20.16 + '@types/node': 12.20.17 '@types/pg': 8.6.1 '@types/prompts': 2.0.14 '@types/sqlite3': 3.1.7 - '@typescript-eslint/eslint-plugin': 4.28.4_b1648df9f9ba40bdeef3710a5a5af353 - '@typescript-eslint/parser': 4.28.4_eslint@7.31.0+typescript@4.3.5 + '@typescript-eslint/eslint-plugin': 4.28.5_514553717ff968e20f6d1c6e521f8616 + '@typescript-eslint/parser': 4.28.5_eslint@7.31.0+typescript@4.3.5 chalk: 4.1.1 del: 6.0.0 eslint: 7.31.0 eslint-config-prettier: 8.3.0_eslint@7.31.0 eslint-plugin-eslint-comments: 3.2.0_eslint@7.31.0 - eslint-plugin-jest: 24.4.0_fc5326c9e782cff3be563ae5197052dc + eslint-plugin-jest: 24.4.0_ac7033cc4dfbdac1051fc5c687b09618 eslint-plugin-prettier: 3.4.0_19f511d6aa08b367b6cb59e8f50291ca fs-jetpack: 4.1.0 jest: 27.0.6_ts-node@10.1.0 - lint-staged: 11.1.0 + lint-staged: 11.1.1 make-dir: 3.1.0 mariadb: 2.5.4 mock-stdin: 1.0.0 - pg: 8.6.0 + pg: 8.7.1 prettier: 2.3.2 sqlite-async: 1.1.1 sqlite3: 5.0.2 tempy: 1.0.1 - ts-jest: 27.0.3_jest@27.0.6+typescript@4.3.5 + ts-jest: 27.0.4_52cc4273aa16028085013af47e479e10 typescript: 4.3.5 packages/react-prisma: specifiers: '@prisma/client': workspace:* '@types/jest': 26.0.24 - '@types/node': 14.17.5 - '@typescript-eslint/eslint-plugin': 4.28.4 - '@typescript-eslint/parser': 4.28.4 + '@types/node': 14.17.6 + '@typescript-eslint/eslint-plugin': 4.28.5 + '@typescript-eslint/parser': 4.28.5 eslint: 7.31.0 eslint-config-prettier: 8.3.0 eslint-plugin-eslint-comments: 3.2.0 eslint-plugin-jest: 24.4.0 eslint-plugin-prettier: 3.4.0 jest: 27.0.6 - lint-staged: 11.1.0 + lint-staged: 11.1.1 prettier: 2.3.2 react: ^17.0.0 strip-ansi: 7.0.0 @@ -614,16 +614,16 @@ importers: devDependencies: '@prisma/client': link:../client '@types/jest': 26.0.24 - '@types/node': 14.17.5 - '@typescript-eslint/eslint-plugin': 4.28.4_b1648df9f9ba40bdeef3710a5a5af353 - '@typescript-eslint/parser': 4.28.4_eslint@7.31.0+typescript@4.3.5 + '@types/node': 14.17.6 + '@typescript-eslint/eslint-plugin': 4.28.5_514553717ff968e20f6d1c6e521f8616 + '@typescript-eslint/parser': 4.28.5_eslint@7.31.0+typescript@4.3.5 eslint: 7.31.0 eslint-config-prettier: 8.3.0_eslint@7.31.0 eslint-plugin-eslint-comments: 3.2.0_eslint@7.31.0 - eslint-plugin-jest: 24.4.0_fc5326c9e782cff3be563ae5197052dc + eslint-plugin-jest: 24.4.0_ac7033cc4dfbdac1051fc5c687b09618 eslint-plugin-prettier: 3.4.0_19f511d6aa08b367b6cb59e8f50291ca jest: 27.0.6_ts-node@10.1.0 - lint-staged: 11.1.0 + lint-staged: 11.1.1 prettier: 2.3.2 react: 17.0.2 strip-ansi: 7.0.0 @@ -640,12 +640,12 @@ importers: '@prisma/get-platform': 2.29.0-4.query-engine-lrts-091cc35e4848e356a9bee148cf7af688edd094b2 '@timsuchanek/copy': ^1.4.5 '@types/jest': 26.0.24 - '@types/node': 12.20.16 + '@types/node': 12.20.17 '@types/resolve': 1.20.1 '@types/shell-quote': 1.7.1 '@types/tar': 4.0.5 - '@typescript-eslint/eslint-plugin': 4.28.4 - '@typescript-eslint/parser': 4.28.4 + '@typescript-eslint/eslint-plugin': 4.28.5 + '@typescript-eslint/parser': 4.28.5 archiver: ^4.0.0 arg: ^5.0.0 chalk: 4.1.1 @@ -664,7 +664,7 @@ importers: has-yarn: ^2.1.0 is-ci: ^3.0.0 jest: 27.0.6 - lint-staged: 11.1.0 + lint-staged: 11.1.1 make-dir: ^3.0.2 node-fetch: 2.6.1 p-map: ^4.0.0 @@ -676,13 +676,13 @@ importers: string-width: ^4.2.0 strip-ansi: 6.0.0 strip-indent: 3.0.0 - tar: ^6.0.1 + tar: ^6.1.2 temp-dir: ^2.0.0 temp-write: ^4.0.0 tempy: ^1.0.0 terminal-link: ^2.1.1 tmp: 0.2.1 - ts-jest: 27.0.3 + ts-jest: 27.0.4 ts-node: 10.1.0 typescript: 4.3.5 dependencies: @@ -715,7 +715,7 @@ importers: string-width: 4.2.2 strip-ansi: 6.0.0 strip-indent: 3.0.0 - tar: 6.1.0 + tar: 6.1.2 temp-dir: 2.0.0 temp-write: 4.0.0 tempy: 1.0.1 @@ -723,22 +723,22 @@ importers: tmp: 0.2.1 devDependencies: '@types/jest': 26.0.24 - '@types/node': 12.20.16 + '@types/node': 12.20.17 '@types/resolve': 1.20.1 '@types/shell-quote': 1.7.1 '@types/tar': 4.0.5 - '@typescript-eslint/eslint-plugin': 4.28.4_b1648df9f9ba40bdeef3710a5a5af353 - '@typescript-eslint/parser': 4.28.4_eslint@7.31.0+typescript@4.3.5 + '@typescript-eslint/eslint-plugin': 4.28.5_514553717ff968e20f6d1c6e521f8616 + '@typescript-eslint/parser': 4.28.5_eslint@7.31.0+typescript@4.3.5 eslint: 7.31.0 eslint-config-prettier: 8.3.0_eslint@7.31.0 eslint-plugin-eslint-comments: 3.2.0_eslint@7.31.0 - eslint-plugin-jest: 24.4.0_fc5326c9e782cff3be563ae5197052dc + eslint-plugin-jest: 24.4.0_ac7033cc4dfbdac1051fc5c687b09618 eslint-plugin-prettier: 3.4.0_19f511d6aa08b367b6cb59e8f50291ca jest: 27.0.6_ts-node@10.1.0 - lint-staged: 11.1.0 + lint-staged: 11.1.1 prettier: 2.3.2 - ts-jest: 27.0.3_jest@27.0.6+typescript@4.3.5 - ts-node: 10.1.0_fb12cdd5d1c63e5bff1f6df37ef04f2a + ts-jest: 27.0.4_52cc4273aa16028085013af47e479e10 + ts-node: 10.1.0_6a5e1f2f9646ad83684ea4da8a674e6d typescript: 4.3.5 packages: @@ -1736,8 +1736,8 @@ packages: - supports-color dev: true - /@prisma/studio-pcw/0.416.0_@prisma+sdk@2.29.0-dev.7: - resolution: {integrity: sha512-K3tZi1v9cJ6QMCu4fEvYqqJctYQ5XxzcV20gfEgDt3NIZRVf+VEGll4yt4aCQMnB6RrRauZ5FGhFMScVV91JhA==} + /@prisma/studio-pcw/0.418.0_@prisma+sdk@2.29.0-dev.7: + resolution: {integrity: sha512-Ujt54DkAC6f+59LMdorR5e+iRpfCf2CeQ+ooAtPQSd9FZKsR81EqmVufc/PGn9zD/l5dc584mjqP1sjOReHy2Q==} peerDependencies: '@prisma/client': '*' '@prisma/sdk': '*' @@ -1749,12 +1749,12 @@ packages: - supports-color dev: true - /@prisma/studio-server/0.416.0: - resolution: {integrity: sha512-7dOHEZbB5HS8d3pf0nAkN4+lIC8vZLsSEgj7P7pr+Q7d4ZmmSgPKiiuFyovtngqa07sMEU0CalhueTwXgWVTOQ==} + /@prisma/studio-server/0.418.0: + resolution: {integrity: sha512-U8aMPLnvRMUuB1hW9+V+0JLF28lQGNiZFFEhwFleI8U6VYjlYBSTWX5d7anwGbTq3Q26K9DgvetjIEKWxaezBQ==} dependencies: '@prisma/sdk': 2.29.0-dev.7 - '@prisma/studio-pcw': 0.416.0_@prisma+sdk@2.29.0-dev.7 - '@prisma/studio-transports': 0.416.0 + '@prisma/studio-pcw': 0.418.0_@prisma+sdk@2.29.0-dev.7 + '@prisma/studio-transports': 0.418.0 '@sentry/node': 6.2.5 checkpoint-client: 1.1.20 cors: 2.8.5 @@ -1765,8 +1765,8 @@ packages: - supports-color dev: true - /@prisma/studio-transports/0.416.0: - resolution: {integrity: sha512-GuoLd37rvhMOBg5WAkwmNNolKa0wGniaDFsh6fXtaTT6tcoYiQsCY5mXqajVRRr39U/MyfuyE10Bhsm+ii8jRw==} + /@prisma/studio-transports/0.418.0: + resolution: {integrity: sha512-nmV+KX+9hjbYeYSn/6OuMKJCFOoC7yFxgZu1Yfeat880tx+Yc8UTmJrrSkhmDOWUPRP89IeHUQnD26fmXzrqgg==} dev: true /@sentry/core/6.2.5: @@ -1956,8 +1956,10 @@ packages: dependencies: '@types/node': 12.20.16 - /@types/debug/4.1.6: - resolution: {integrity: sha512-7fDOJFA/x8B+sO1901BmHlf5dE1cxBU8mRXj8QOEDnn16hhGJv/IHxJtZhvsabZsIMn0eLIyeOKAeqSNJJYTpA==} + /@types/debug/4.1.7: + resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} + dependencies: + '@types/ms': 0.7.31 dev: true /@types/eslint/7.28.0: @@ -2026,6 +2028,10 @@ packages: '@types/node': 12.20.16 dev: true + /@types/ms/0.7.31: + resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + dev: true + /@types/mssql/6.0.8: resolution: {integrity: sha512-N3dr3o1c6EXhHhhNRaKpLTdAoXT/s6qDEJET5FID2gFCj58vIV9q/7RtkvYdE6ntpkJF5F9hpURhxT/oC62yLw==} dependencies: @@ -2043,10 +2049,18 @@ packages: /@types/node/12.20.16: resolution: {integrity: sha512-6CLxw83vQf6DKqXxMPwl8qpF8I7THFZuIwLt4TnNsumxkp1VsRZWT8txQxncT/Rl2UojTsFzWgDG4FRMwafrlA==} + /@types/node/12.20.17: + resolution: {integrity: sha512-so8EHl4S6MmatPS0f9sE1ND94/ocbcEshW5OpyYthRqeRpiYyW2uXYTo/84kmfdfeNrDycARkvuiXl6nO40NGg==} + dev: true + /@types/node/14.17.5: resolution: {integrity: sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==} dev: true + /@types/node/14.17.6: + resolution: {integrity: sha512-iBxsxU7eswQDGhlr3AiamBxOssaYxbM+NKXVil8jg9yFXvrfEFbDumLD/2dMTB+zYyg7w+Xjt8yuxfdbUHAtcQ==} + dev: true + /@types/node/16.4.1: resolution: {integrity: sha512-UW7cbLqf/Wu5XH2RKKY1cHwUNLicIDRLMraYKz+HHAerJ0ZffUEk+fMnd8qU2JaS6cAy0r8tsaf7yqHASf/Y0Q==} dev: true @@ -2154,8 +2168,8 @@ packages: '@types/yargs-parser': 20.2.1 dev: true - /@typescript-eslint/eslint-plugin/4.28.4_b1648df9f9ba40bdeef3710a5a5af353: - resolution: {integrity: sha512-s1oY4RmYDlWMlcV0kKPBaADn46JirZzvvH7c2CtAqxCY96S538JRBAzt83RrfkDheV/+G/vWNK0zek+8TB3Gmw==} + /@typescript-eslint/eslint-plugin/4.28.5_514553717ff968e20f6d1c6e521f8616: + resolution: {integrity: sha512-m31cPEnbuCqXtEZQJOXAHsHvtoDi9OVaeL5wZnO2KZTnkvELk+u6J6jHg+NzvWQxk+87Zjbc4lJS4NHmgImz6Q==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: '@typescript-eslint/parser': ^4.0.0 @@ -2165,9 +2179,9 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/experimental-utils': 4.28.4_eslint@7.31.0+typescript@4.3.5 - '@typescript-eslint/parser': 4.28.4_eslint@7.31.0+typescript@4.3.5 - '@typescript-eslint/scope-manager': 4.28.4 + '@typescript-eslint/experimental-utils': 4.28.5_eslint@7.31.0+typescript@4.3.5 + '@typescript-eslint/parser': 4.28.5_eslint@7.31.0+typescript@4.3.5 + '@typescript-eslint/scope-manager': 4.28.5 debug: 4.3.2 eslint: 7.31.0 functional-red-black-tree: 1.0.1 @@ -2197,8 +2211,26 @@ packages: - typescript dev: true - /@typescript-eslint/parser/4.28.4_eslint@7.31.0+typescript@4.3.5: - resolution: {integrity: sha512-4i0jq3C6n+og7/uCHiE6q5ssw87zVdpUj1k6VlVYMonE3ILdFApEzTWgppSRG4kVNB/5jxnH+gTeKLMNfUelQA==} + /@typescript-eslint/experimental-utils/4.28.5_eslint@7.31.0+typescript@4.3.5: + resolution: {integrity: sha512-bGPLCOJAa+j49hsynTaAtQIWg6uZd8VLiPcyDe4QPULsvQwLHGLSGKKcBN8/lBxIX14F74UEMK2zNDI8r0okwA==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + eslint: '*' + dependencies: + '@types/json-schema': 7.0.8 + '@typescript-eslint/scope-manager': 4.28.5 + '@typescript-eslint/types': 4.28.5 + '@typescript-eslint/typescript-estree': 4.28.5_typescript@4.3.5 + eslint: 7.31.0 + eslint-scope: 5.1.1 + eslint-utils: 3.0.0_eslint@7.31.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/parser/4.28.5_eslint@7.31.0+typescript@4.3.5: + resolution: {integrity: sha512-NPCOGhTnkXGMqTznqgVbA5LqVsnw+i3+XA1UKLnAb+MG1Y1rP4ZSK9GX0kJBmAZTMIktf+dTwXToT6kFwyimbw==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 @@ -2207,9 +2239,9 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 4.28.4 - '@typescript-eslint/types': 4.28.4 - '@typescript-eslint/typescript-estree': 4.28.4_typescript@4.3.5 + '@typescript-eslint/scope-manager': 4.28.5 + '@typescript-eslint/types': 4.28.5 + '@typescript-eslint/typescript-estree': 4.28.5_typescript@4.3.5 debug: 4.3.2 eslint: 7.31.0 typescript: 4.3.5 @@ -2225,11 +2257,24 @@ packages: '@typescript-eslint/visitor-keys': 4.28.4 dev: true + /@typescript-eslint/scope-manager/4.28.5: + resolution: {integrity: sha512-PHLq6n9nTMrLYcVcIZ7v0VY1X7dK309NM8ya9oL/yG8syFINIMHxyr2GzGoBYUdv3NUfCOqtuqps0ZmcgnZTfQ==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + dependencies: + '@typescript-eslint/types': 4.28.5 + '@typescript-eslint/visitor-keys': 4.28.5 + dev: true + /@typescript-eslint/types/4.28.4: resolution: {integrity: sha512-3eap4QWxGqkYuEmVebUGULMskR6Cuoc/Wii0oSOddleP4EGx1tjLnZQ0ZP33YRoMDCs5O3j56RBV4g14T4jvww==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} dev: true + /@typescript-eslint/types/4.28.5: + resolution: {integrity: sha512-MruOu4ZaDOLOhw4f/6iudyks/obuvvZUAHBDSW80Trnc5+ovmViLT2ZMDXhUV66ozcl6z0LJfKs1Usldgi/WCA==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + dev: true + /@typescript-eslint/typescript-estree/4.28.4_typescript@4.3.5: resolution: {integrity: sha512-z7d8HK8XvCRyN2SNp+OXC2iZaF+O2BTquGhEYLKLx5k6p0r05ureUtgEfo5f6anLkhCxdHtCf6rPM1p4efHYDQ==} engines: {node: ^10.12.0 || >=12.0.0} @@ -2251,6 +2296,27 @@ packages: - supports-color dev: true + /@typescript-eslint/typescript-estree/4.28.5_typescript@4.3.5: + resolution: {integrity: sha512-FzJUKsBX8poCCdve7iV7ShirP8V+ys2t1fvamVeD1rWpiAnIm550a+BX/fmTHrjEpQJ7ZAn+Z7ZZwJjytk9rZw==} + engines: {node: ^10.12.0 || >=12.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 4.28.5 + '@typescript-eslint/visitor-keys': 4.28.5 + debug: 4.3.2 + globby: 11.0.4 + is-glob: 4.0.1 + semver: 7.3.5 + tsutils: 3.21.0_typescript@4.3.5 + typescript: 4.3.5 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/visitor-keys/4.28.4: resolution: {integrity: sha512-NIAXAdbz1XdOuzqkJHjNKXKj8QQ4cv5cxR/g0uQhCYf/6//XrmfpaYsM7PnBcNbfvTDLUkqQ5TPNm1sozDdTWg==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} @@ -2259,6 +2325,14 @@ packages: eslint-visitor-keys: 2.1.0 dev: true + /@typescript-eslint/visitor-keys/4.28.5: + resolution: {integrity: sha512-dva/7Rr+EkxNWdJWau26xU/0slnFlkh88v3TsyTgRS/IIYFi5iIfpCFM4ikw0vQTFUR9FYSSyqgK4w64gsgxhg==} + engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} + dependencies: + '@typescript-eslint/types': 4.28.5 + eslint-visitor-keys: 2.1.0 + dev: true + /abab/2.0.5: resolution: {integrity: sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==} dev: true @@ -3322,7 +3396,7 @@ packages: ignore: 5.1.8 dev: true - /eslint-plugin-jest/24.4.0_fc5326c9e782cff3be563ae5197052dc: + /eslint-plugin-jest/24.4.0_ac7033cc4dfbdac1051fc5c687b09618: resolution: {integrity: sha512-8qnt/hgtZ94E9dA6viqfViKBfkJwFHXgJmTWlMGDgunw1XJEGqm3eiPjDsTanM3/u/3Az82nyQM9GX7PM/QGmg==} engines: {node: '>=10'} peerDependencies: @@ -3332,7 +3406,7 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 4.28.4_b1648df9f9ba40bdeef3710a5a5af353 + '@typescript-eslint/eslint-plugin': 4.28.5_514553717ff968e20f6d1c6e521f8616 '@typescript-eslint/experimental-utils': 4.28.4_eslint@7.31.0+typescript@4.3.5 eslint: 7.31.0 transitivePeerDependencies: @@ -4431,7 +4505,7 @@ packages: jest-validate: 27.0.6 micromatch: 4.0.4 pretty-format: 27.0.6 - ts-node: 10.1.0_fb12cdd5d1c63e5bff1f6df37ef04f2a + ts-node: 10.1.0_6a5e1f2f9646ad83684ea4da8a674e6d transitivePeerDependencies: - bufferutil - canvas @@ -5042,8 +5116,8 @@ packages: /lines-and-columns/1.1.6: resolution: {integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=} - /lint-staged/11.1.0: - resolution: {integrity: sha512-pzwEf+NKbTauAlk7gPPwTfulRXESEPZCSFXYfg20F220UOObebxu5uL5mkr9csQLNOM2Ydfrt3DJXakzAL7aaQ==} + /lint-staged/11.1.1: + resolution: {integrity: sha512-eTNGe6i78PSUUH2BZi1gZmGmNfb8IeN4z2OzMYxSZ1qnP1WXKn1E7D+OHwLbRDm/wQINnzIj0bsKJ6lLVSuZiQ==} hasBin: true dependencies: chalk: 4.1.1 @@ -5832,12 +5906,12 @@ packages: engines: {node: '>=4.0.0'} dev: true - /pg-pool/3.3.0_pg@8.6.0: - resolution: {integrity: sha512-0O5huCql8/D6PIRFAlmccjphLYWC+JIzvUhSzXSpGaf+tjTZc4nn+Lr7mLXBbFJfvwbP0ywDv73EiaBsxn7zdg==} + /pg-pool/3.4.1_pg@8.7.1: + resolution: {integrity: sha512-TVHxR/gf3MeJRvchgNHxsYsTCHQ+4wm3VIHSS19z8NC0+gioEhq1okDY1sm/TYbfoP6JLFx01s0ShvZ3puP/iQ==} peerDependencies: pg: '>=8.0' dependencies: - pg: 8.6.0 + pg: 8.7.1 dev: true /pg-protocol/1.5.0: @@ -5855,8 +5929,8 @@ packages: postgres-interval: 1.2.0 dev: true - /pg/8.6.0: - resolution: {integrity: sha512-qNS9u61lqljTDFvmk/N66EeGq3n6Ujzj0FFyNMGQr6XuEv4tgNTXvJQTfJdcvGit5p5/DWPu+wj920hAJFI+QQ==} + /pg/8.7.1: + resolution: {integrity: sha512-7bdYcv7V6U3KAtWjpQJJBww0UEsWuh4yQ/EjNf2HeO/NnvKjpvhEIe/A/TleP6wtmSKnUnghs5A9jUoK6iDdkA==} engines: {node: '>= 8.0.0'} peerDependencies: pg-native: '>=2.0.0' @@ -5867,7 +5941,7 @@ packages: buffer-writer: 2.0.0 packet-reader: 1.0.0 pg-connection-string: 2.5.0 - pg-pool: 3.3.0_pg@8.6.0 + pg-pool: 3.4.1_pg@8.7.1 pg-protocol: 1.5.0 pg-types: 2.2.0 pgpass: 1.0.4 @@ -6299,7 +6373,7 @@ packages: dependencies: glob: 7.1.7 - /rollup-plugin-dts/3.0.2_rollup@2.53.3+typescript@4.3.5: + /rollup-plugin-dts/3.0.2_rollup@2.55.0+typescript@4.3.5: resolution: {integrity: sha512-hswlsdWu/x7k5pXzaLP6OvKRKcx8Bzprksz9i9mUe72zvt8LvqAb/AZpzs6FkLgmyRaN8B6rUQOVtzA3yEt9Yw==} engines: {node: '>=v12.22.1'} peerDependencies: @@ -6307,14 +6381,14 @@ packages: typescript: ^4.2.4 dependencies: magic-string: 0.25.7 - rollup: 2.53.3 + rollup: 2.55.0 typescript: 4.3.5 optionalDependencies: '@babel/code-frame': 7.14.5 dev: true - /rollup/2.53.3: - resolution: {integrity: sha512-79QIGP5DXz5ZHYnCPi3tLz+elOQi6gudp9YINdaJdjG0Yddubo6JRFUM//qCZ0Bap/GJrsUoEBVdSOc4AkMlRA==} + /rollup/2.55.0: + resolution: {integrity: sha512-Atc3QqelKzrKwRkqnSdq0d2Mi8e0iGuL+kZebKMZ4ysyWHD5hw9VfVCAuODIW5837RENV8LXcbAEHurYf+ArvA==} engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: @@ -6798,18 +6872,6 @@ packages: yallist: 3.1.1 dev: true - /tar/6.1.0: - resolution: {integrity: sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==} - engines: {node: '>= 10'} - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 3.1.3 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 - dev: false - /tar/6.1.2: resolution: {integrity: sha512-EwKEgqJ7nJoS+s8QfLYVGMDmAsj+StbI2AM/RTHeUSsOw6Z8bwNBRv5z3CY0m7laC5qUAqruLX5AhMuc5deY3Q==} engines: {node: '>= 10'} @@ -6820,7 +6882,6 @@ packages: minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 - dev: true /tarn/3.0.1: resolution: {integrity: sha512-6usSlV9KyHsspvwu2duKH+FMUhqJnAh6J5J/4MITl8s94iSUQTLkJggdiewKv4RyARQccnigV48Z+khiuVZDJw==} @@ -6976,28 +7037,6 @@ packages: engines: {node: '>=8'} dev: true - /ts-jest/27.0.3_jest@27.0.6+typescript@4.3.5: - resolution: {integrity: sha512-U5rdMjnYam9Ucw+h0QvtNDbc5+88nxt7tbIvqaZUhFrfG4+SkWhMXjejCLVGcpILTPuV+H3W/GZDZrnZFpPeXw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - jest: ^27.0.0 - typescript: '>=3.8 <5.0' - dependencies: - bs-logger: 0.2.6 - buffer-from: 1.1.1 - fast-json-stable-stringify: 2.1.0 - jest: 27.0.6_ts-node@10.1.0 - jest-util: 27.0.6 - json5: 2.2.0 - lodash: 4.17.21 - make-error: 1.3.6 - mkdirp: 1.0.4 - semver: 7.3.5 - typescript: 4.3.5 - yargs-parser: 20.2.9 - dev: true - /ts-jest/27.0.4_52cc4273aa16028085013af47e479e10: resolution: {integrity: sha512-c4E1ECy9Xz2WGfTMyHbSaArlIva7Wi2p43QOMmCqjSSjHP06KXv+aT+eSY+yZMuqsMi3k7pyGsGj2q5oSl5WfQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -7031,7 +7070,7 @@ packages: yargs-parser: 20.2.9 dev: true - /ts-node/10.1.0_fb12cdd5d1c63e5bff1f6df37ef04f2a: + /ts-node/10.1.0_6a5e1f2f9646ad83684ea4da8a674e6d: resolution: {integrity: sha512-6szn3+J9WyG2hE+5W8e0ruZrzyk1uFLYye6IGMBadnOzDh8aP7t8CbFpsfCiEx2+wMixAhjFt7lOZC4+l+WbEA==} engines: {node: '>=12.0.0'} hasBin: true @@ -7050,7 +7089,7 @@ packages: '@tsconfig/node12': 1.0.9 '@tsconfig/node14': 1.0.1 '@tsconfig/node16': 1.0.1 - '@types/node': 12.20.16 + '@types/node': 12.20.17 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 From 5e1a9c8ea422900279c70466c7f62354a3082c62 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 30 Jul 2021 20:16:45 -0500 Subject: [PATCH 33/52] test(engine-core): fix imports --- src/packages/engine-core/src/__tests__/errors.test.ts | 2 +- src/packages/engine-core/src/__tests__/maskQuery.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/packages/engine-core/src/__tests__/errors.test.ts b/src/packages/engine-core/src/__tests__/errors.test.ts index cedf1558574a..27f47b54edb9 100644 --- a/src/packages/engine-core/src/__tests__/errors.test.ts +++ b/src/packages/engine-core/src/__tests__/errors.test.ts @@ -1,4 +1,4 @@ -import { getErrorMessageWithLink } from '../errors' +import { getErrorMessageWithLink } from '../common/errors/utils/getErrorMessageWithLink' import Debug from '@prisma/debug' import stripAnsi from 'strip-ansi' diff --git a/src/packages/engine-core/src/__tests__/maskQuery.test.ts b/src/packages/engine-core/src/__tests__/maskQuery.test.ts index 48a50e77a599..734607989df6 100644 --- a/src/packages/engine-core/src/__tests__/maskQuery.test.ts +++ b/src/packages/engine-core/src/__tests__/maskQuery.test.ts @@ -1,4 +1,4 @@ -import { maskQuery } from '../maskQuery' +import { maskQuery } from '../common/errors/utils/maskQuery' test('big query', () => { const query = `query { From 5e0b9a898f5053d4303e329e0b30d2979b9b10a2 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 30 Jul 2021 22:06:20 -0500 Subject: [PATCH 34/52] chore(client): handle lrt errors --- .../happy/long-running-transaction/test.ts | 60 ++++++++++++++++--- .../engine-core/src/binary/BinaryEngine.ts | 57 +++++++++--------- .../src/common/errors/utils/log.ts | 3 +- 3 files changed, 82 insertions(+), 38 deletions(-) diff --git a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts index 08b16408cb62..546d055a20c3 100644 --- a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts +++ b/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts @@ -42,7 +42,13 @@ describe('long-running transaction', () => { return prisma.user.findMany() }) - await expect(result).rejects.toThrowError() + await expect(result).rejects.toThrowErrorMatchingInlineSnapshot(` + + Invalid \`prisma.user.findMany()\` invocation: + + + Transaction API error: Transaction already closed: Transaction is no longer valid. Last state: 'Expired'. + `) }) /** @@ -67,7 +73,13 @@ describe('long-running transaction', () => { }, ) - await expect(result).rejects.toThrowError() + await expect(result).rejects.toThrowErrorMatchingInlineSnapshot(` + + Invalid \`prisma.user.findMany()\` invocation: + + + Transaction API error: Transaction already closed: Transaction is no longer valid. Last state: 'Expired'. + `) }) /** @@ -84,7 +96,9 @@ describe('long-running transaction', () => { throw new Error('you better rollback now') }) - await expect(result).rejects.toThrowError() + await expect(result).rejects.toThrowErrorMatchingInlineSnapshot( + `you better rollback now`, + ) const users = await prisma.user.findMany() @@ -113,7 +127,13 @@ describe('long-running transaction', () => { return tx.user.findMany() }) - await expect(result).rejects.toThrow() + await expect(result).rejects.toThrowErrorMatchingInlineSnapshot(` + + Invalid \`prisma.user.findMany()\` invocation: + + + Transaction API error: Transaction already closed: Transaction is no longer valid. Last state: 'Expired'. + `) const users = await prisma.user.findMany() @@ -152,7 +172,13 @@ describe('long-running transaction', () => { }) }) - await expect(result).rejects.toThrow() + await expect(result).rejects.toThrowErrorMatchingInlineSnapshot(` + + Invalid \`prisma.user.create()\` invocation: + + + Unique constraint failed on the fields: (\`email\`) + `) const users = await prisma.user.findMany() @@ -176,7 +202,13 @@ describe('long-running transaction', () => { }) }) - await expect(result).rejects.toThrow() + await expect(result).rejects.toThrowErrorMatchingInlineSnapshot(` + + Invalid \`prisma.user.create()\` invocation: + + + Transaction API error: Transaction already closed: Transaction is no longer valid. Last state: 'Committed'. + `) const users = await prisma.user.findMany() @@ -222,7 +254,13 @@ describe('long-running transaction', () => { }), ]) - await expect(result).rejects.toThrow() + await expect(result).rejects.toThrowErrorMatchingInlineSnapshot(` + +Invalid \`prisma.user.create()\` invocation: + + + Unique constraint failed on the fields: (\`email\`) +`) const users = await prisma.user.findMany() @@ -280,7 +318,13 @@ describe('long-running transaction', () => { }), ]) - await expect(result).rejects.toThrow() + await expect(result).rejects.toThrowErrorMatchingInlineSnapshot(` + +Invalid \`prisma.user.create()\` invocation: + + + Unique constraint failed on the fields: (\`email\`) +`) const users = await prisma.user.findMany() diff --git a/src/packages/engine-core/src/binary/BinaryEngine.ts b/src/packages/engine-core/src/binary/BinaryEngine.ts index 255adbfa0008..e228ad4c6af9 100644 --- a/src/packages/engine-core/src/binary/BinaryEngine.ts +++ b/src/packages/engine-core/src/binary/BinaryEngine.ts @@ -667,7 +667,7 @@ ${chalk.dim("In case we're mistaken, please report this to us 🙏.")}`) socketPath: this.socketPath, }) } else { - this.connection.open(`http://localhost:4466`) + this.connection.open(`http://localhost:${this.port}`) } this.engineStartDeferred.resolve() this.engineStartDeferred = undefined @@ -1032,7 +1032,7 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. if (Array.isArray(batchResult)) { return batchResult.map((result) => { if (result.errors) { - return this.graphQLToJSError(result.errors[0]) + throw this.graphQLToJSError(result.errors[0]) } return { data: result, @@ -1040,10 +1040,7 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. } }) } else { - if (errors && errors.length === 1) { - throw new Error(errors[0].error) - } - throw new Error(JSON.stringify(data)) + throw this.graphQLToJSError(errors[0]) } }) .catch(async (e) => { @@ -1071,28 +1068,32 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. async transaction(action: any, arg?: any) { await this.start() - if (action === 'start') { - const jsonOptions = JSON.stringify({ - max_wait: arg?.maxWait ?? 2000, // default - timeout: arg?.timeout ?? 5000, // default - }) + try { + if (action === 'start') { + const jsonOptions = JSON.stringify({ + max_wait: arg?.maxWait ?? 2000, // default + timeout: arg?.timeout ?? 5000, // default + }) - const result = await Connection.onHttpError( - this.connection.post('/transaction/start', jsonOptions), - transactionHttpErrorHandler, - ) + const result = await Connection.onHttpError( + this.connection.post('/transaction/start', jsonOptions), + transactionHttpErrorHandler, + ) - return result.data - } else if (action === 'commit') { - await Connection.onHttpError( - this.connection.post(`/transaction/${arg.id}/commit`), - transactionHttpErrorHandler, - ) - } else if (action === 'rollback') { - await Connection.onHttpError( - this.connection.post(`/transaction/${arg.id}/rollback`), - transactionHttpErrorHandler, - ) + return result.data + } else if (action === 'commit') { + await Connection.onHttpError( + this.connection.post(`/transaction/${arg.id}/commit`), + transactionHttpErrorHandler, + ) + } else if (action === 'rollback') { + await Connection.onHttpError( + this.connection.post(`/transaction/${arg.id}/rollback`), + transactionHttpErrorHandler, + ) + } + } catch (error) { + this.setError(error) } } @@ -1276,9 +1277,7 @@ function initHooks() { * @param result */ function transactionHttpErrorHandler(result: Result): never { - throw new Error( - `Transaction error ${result.statusCode} ${JSON.stringify(result.data)}`, - ) + throw result.data } /** diff --git a/src/packages/engine-core/src/common/errors/utils/log.ts b/src/packages/engine-core/src/common/errors/utils/log.ts index f0e8d8d8ddd6..7896abf8cedd 100644 --- a/src/packages/engine-core/src/common/errors/utils/log.ts +++ b/src/packages/engine-core/src/common/errors/utils/log.ts @@ -14,10 +14,11 @@ export interface RustLog { fields: LogFields } +// TODO #debt check if this is up to date export interface RustError { is_panic: boolean message: string - backtrace: string + backtrace?: string } export function getMessage(log: string | RustLog | RustError | any): string { From a845dad6ffb6dc3289faf2423c069801aa5acf54 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 30 Jul 2021 22:15:11 -0500 Subject: [PATCH 35/52] fix(client): restore missing cond --- src/packages/client/src/runtime/getPrismaClient.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/packages/client/src/runtime/getPrismaClient.ts b/src/packages/client/src/runtime/getPrismaClient.ts index e3cda1bf223c..b0c86f526e04 100644 --- a/src/packages/client/src/runtime/getPrismaClient.ts +++ b/src/packages/client/src/runtime/getPrismaClient.ts @@ -1069,12 +1069,7 @@ new PrismaClient({ const changedInternalParams = { ...internalParams, ...params } // TODO remove this once LRT is the default transaction mode - // eslint-disable-next-line prettier/prettier - if ( - !this._engineConfig.previewFeatures?.includes( - 'longRunningTransactions', - ) - ) { + if (index > 0 && !this._hasPreviewFlag('longRunningTransactions')) { delete changedInternalParams['transactionId'] } From 7cba5bd47227c3d5577b7dc0c117e1be28f35f33 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Thu, 5 Aug 2021 18:21:26 -0500 Subject: [PATCH 36/52] chore(prisma): prepare merge --- .../happy/long-running-transaction/.gitignore | 0 .../happy/long-running-transaction/dev.db | Bin .../happy/long-running-transaction/schema.prisma | 0 .../happy/long-running-transaction/test.ts | 0 .../client/src/runtime/DataLoader.ts | 0 .../client/src/runtime/RequestHandler.ts | 0 .../engine-core/src/binary/BinaryEngine.ts | 0 .../engine-core/src/binary/Connection.ts | 0 .../engine-core/src/common/Engine.ts | 0 .../errors/PrismaClientInitializationError.ts | 0 .../common/errors/PrismaClientKnownRequestError.ts | 0 .../src/common/errors/PrismaClientRustError.ts | 0 .../src/common/errors/PrismaClientRustPanicError.ts | 0 .../errors/PrismaClientUnknownRequestError.ts | 0 .../src/common/errors/types/ErrorWithLinkInput.ts | 0 .../errors/types/PrismaClientRustErrorArgs.ts | 0 .../src/common/errors/types/RequestError.ts | 0 .../common/errors/utils/getErrorMessageWithLink.ts | 0 .../engine-core/src/common/errors/utils/log.ts | 0 .../src/common/errors/utils/maskQuery.ts | 0 .../src/common/errors/utils/normalizeLogs.ts | 0 .../engine-core/src/common/types/QueryEngine.ts | 0 .../engine-core/src/common/types/Transaction.ts | 0 .../src/common/utils/getInternalDatamodelJson.ts | 0 .../src/common/utils/printGeneratorConfig.ts | 0 .../engine-core/src/common/utils/util.ts | 0 .../engine-core/src/library/LibraryEngine.ts | 0 .../engine-core/src/library/types/Library.ts | 0 .../engine-core/src/tools/byline.ts | 0 .../engine-core/src/tools/omit.ts | 0 30 files changed, 0 insertions(+), 0 deletions(-) rename {src/packages => packages}/client/src/__tests__/integration/happy/long-running-transaction/.gitignore (100%) rename {src/packages => packages}/client/src/__tests__/integration/happy/long-running-transaction/dev.db (100%) rename {src/packages => packages}/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma (100%) rename {src/packages => packages}/client/src/__tests__/integration/happy/long-running-transaction/test.ts (100%) rename {src/packages => packages}/client/src/runtime/DataLoader.ts (100%) rename {src/packages => packages}/client/src/runtime/RequestHandler.ts (100%) rename {src/packages => packages}/engine-core/src/binary/BinaryEngine.ts (100%) rename {src/packages => packages}/engine-core/src/binary/Connection.ts (100%) rename {src/packages => packages}/engine-core/src/common/Engine.ts (100%) rename {src/packages => packages}/engine-core/src/common/errors/PrismaClientInitializationError.ts (100%) rename {src/packages => packages}/engine-core/src/common/errors/PrismaClientKnownRequestError.ts (100%) rename {src/packages => packages}/engine-core/src/common/errors/PrismaClientRustError.ts (100%) rename {src/packages => packages}/engine-core/src/common/errors/PrismaClientRustPanicError.ts (100%) rename {src/packages => packages}/engine-core/src/common/errors/PrismaClientUnknownRequestError.ts (100%) rename {src/packages => packages}/engine-core/src/common/errors/types/ErrorWithLinkInput.ts (100%) rename {src/packages => packages}/engine-core/src/common/errors/types/PrismaClientRustErrorArgs.ts (100%) rename {src/packages => packages}/engine-core/src/common/errors/types/RequestError.ts (100%) rename {src/packages => packages}/engine-core/src/common/errors/utils/getErrorMessageWithLink.ts (100%) rename {src/packages => packages}/engine-core/src/common/errors/utils/log.ts (100%) rename {src/packages => packages}/engine-core/src/common/errors/utils/maskQuery.ts (100%) rename {src/packages => packages}/engine-core/src/common/errors/utils/normalizeLogs.ts (100%) rename {src/packages => packages}/engine-core/src/common/types/QueryEngine.ts (100%) rename {src/packages => packages}/engine-core/src/common/types/Transaction.ts (100%) rename {src/packages => packages}/engine-core/src/common/utils/getInternalDatamodelJson.ts (100%) rename {src/packages => packages}/engine-core/src/common/utils/printGeneratorConfig.ts (100%) rename {src/packages => packages}/engine-core/src/common/utils/util.ts (100%) rename {src/packages => packages}/engine-core/src/library/LibraryEngine.ts (100%) rename {src/packages => packages}/engine-core/src/library/types/Library.ts (100%) rename {src/packages => packages}/engine-core/src/tools/byline.ts (100%) rename {src/packages => packages}/engine-core/src/tools/omit.ts (100%) diff --git a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/.gitignore b/packages/client/src/__tests__/integration/happy/long-running-transaction/.gitignore similarity index 100% rename from src/packages/client/src/__tests__/integration/happy/long-running-transaction/.gitignore rename to packages/client/src/__tests__/integration/happy/long-running-transaction/.gitignore diff --git a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/dev.db b/packages/client/src/__tests__/integration/happy/long-running-transaction/dev.db similarity index 100% rename from src/packages/client/src/__tests__/integration/happy/long-running-transaction/dev.db rename to packages/client/src/__tests__/integration/happy/long-running-transaction/dev.db diff --git a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma b/packages/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma similarity index 100% rename from src/packages/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma rename to packages/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma diff --git a/src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts b/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts similarity index 100% rename from src/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts rename to packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts diff --git a/src/packages/client/src/runtime/DataLoader.ts b/packages/client/src/runtime/DataLoader.ts similarity index 100% rename from src/packages/client/src/runtime/DataLoader.ts rename to packages/client/src/runtime/DataLoader.ts diff --git a/src/packages/client/src/runtime/RequestHandler.ts b/packages/client/src/runtime/RequestHandler.ts similarity index 100% rename from src/packages/client/src/runtime/RequestHandler.ts rename to packages/client/src/runtime/RequestHandler.ts diff --git a/src/packages/engine-core/src/binary/BinaryEngine.ts b/packages/engine-core/src/binary/BinaryEngine.ts similarity index 100% rename from src/packages/engine-core/src/binary/BinaryEngine.ts rename to packages/engine-core/src/binary/BinaryEngine.ts diff --git a/src/packages/engine-core/src/binary/Connection.ts b/packages/engine-core/src/binary/Connection.ts similarity index 100% rename from src/packages/engine-core/src/binary/Connection.ts rename to packages/engine-core/src/binary/Connection.ts diff --git a/src/packages/engine-core/src/common/Engine.ts b/packages/engine-core/src/common/Engine.ts similarity index 100% rename from src/packages/engine-core/src/common/Engine.ts rename to packages/engine-core/src/common/Engine.ts diff --git a/src/packages/engine-core/src/common/errors/PrismaClientInitializationError.ts b/packages/engine-core/src/common/errors/PrismaClientInitializationError.ts similarity index 100% rename from src/packages/engine-core/src/common/errors/PrismaClientInitializationError.ts rename to packages/engine-core/src/common/errors/PrismaClientInitializationError.ts diff --git a/src/packages/engine-core/src/common/errors/PrismaClientKnownRequestError.ts b/packages/engine-core/src/common/errors/PrismaClientKnownRequestError.ts similarity index 100% rename from src/packages/engine-core/src/common/errors/PrismaClientKnownRequestError.ts rename to packages/engine-core/src/common/errors/PrismaClientKnownRequestError.ts diff --git a/src/packages/engine-core/src/common/errors/PrismaClientRustError.ts b/packages/engine-core/src/common/errors/PrismaClientRustError.ts similarity index 100% rename from src/packages/engine-core/src/common/errors/PrismaClientRustError.ts rename to packages/engine-core/src/common/errors/PrismaClientRustError.ts diff --git a/src/packages/engine-core/src/common/errors/PrismaClientRustPanicError.ts b/packages/engine-core/src/common/errors/PrismaClientRustPanicError.ts similarity index 100% rename from src/packages/engine-core/src/common/errors/PrismaClientRustPanicError.ts rename to packages/engine-core/src/common/errors/PrismaClientRustPanicError.ts diff --git a/src/packages/engine-core/src/common/errors/PrismaClientUnknownRequestError.ts b/packages/engine-core/src/common/errors/PrismaClientUnknownRequestError.ts similarity index 100% rename from src/packages/engine-core/src/common/errors/PrismaClientUnknownRequestError.ts rename to packages/engine-core/src/common/errors/PrismaClientUnknownRequestError.ts diff --git a/src/packages/engine-core/src/common/errors/types/ErrorWithLinkInput.ts b/packages/engine-core/src/common/errors/types/ErrorWithLinkInput.ts similarity index 100% rename from src/packages/engine-core/src/common/errors/types/ErrorWithLinkInput.ts rename to packages/engine-core/src/common/errors/types/ErrorWithLinkInput.ts diff --git a/src/packages/engine-core/src/common/errors/types/PrismaClientRustErrorArgs.ts b/packages/engine-core/src/common/errors/types/PrismaClientRustErrorArgs.ts similarity index 100% rename from src/packages/engine-core/src/common/errors/types/PrismaClientRustErrorArgs.ts rename to packages/engine-core/src/common/errors/types/PrismaClientRustErrorArgs.ts diff --git a/src/packages/engine-core/src/common/errors/types/RequestError.ts b/packages/engine-core/src/common/errors/types/RequestError.ts similarity index 100% rename from src/packages/engine-core/src/common/errors/types/RequestError.ts rename to packages/engine-core/src/common/errors/types/RequestError.ts diff --git a/src/packages/engine-core/src/common/errors/utils/getErrorMessageWithLink.ts b/packages/engine-core/src/common/errors/utils/getErrorMessageWithLink.ts similarity index 100% rename from src/packages/engine-core/src/common/errors/utils/getErrorMessageWithLink.ts rename to packages/engine-core/src/common/errors/utils/getErrorMessageWithLink.ts diff --git a/src/packages/engine-core/src/common/errors/utils/log.ts b/packages/engine-core/src/common/errors/utils/log.ts similarity index 100% rename from src/packages/engine-core/src/common/errors/utils/log.ts rename to packages/engine-core/src/common/errors/utils/log.ts diff --git a/src/packages/engine-core/src/common/errors/utils/maskQuery.ts b/packages/engine-core/src/common/errors/utils/maskQuery.ts similarity index 100% rename from src/packages/engine-core/src/common/errors/utils/maskQuery.ts rename to packages/engine-core/src/common/errors/utils/maskQuery.ts diff --git a/src/packages/engine-core/src/common/errors/utils/normalizeLogs.ts b/packages/engine-core/src/common/errors/utils/normalizeLogs.ts similarity index 100% rename from src/packages/engine-core/src/common/errors/utils/normalizeLogs.ts rename to packages/engine-core/src/common/errors/utils/normalizeLogs.ts diff --git a/src/packages/engine-core/src/common/types/QueryEngine.ts b/packages/engine-core/src/common/types/QueryEngine.ts similarity index 100% rename from src/packages/engine-core/src/common/types/QueryEngine.ts rename to packages/engine-core/src/common/types/QueryEngine.ts diff --git a/src/packages/engine-core/src/common/types/Transaction.ts b/packages/engine-core/src/common/types/Transaction.ts similarity index 100% rename from src/packages/engine-core/src/common/types/Transaction.ts rename to packages/engine-core/src/common/types/Transaction.ts diff --git a/src/packages/engine-core/src/common/utils/getInternalDatamodelJson.ts b/packages/engine-core/src/common/utils/getInternalDatamodelJson.ts similarity index 100% rename from src/packages/engine-core/src/common/utils/getInternalDatamodelJson.ts rename to packages/engine-core/src/common/utils/getInternalDatamodelJson.ts diff --git a/src/packages/engine-core/src/common/utils/printGeneratorConfig.ts b/packages/engine-core/src/common/utils/printGeneratorConfig.ts similarity index 100% rename from src/packages/engine-core/src/common/utils/printGeneratorConfig.ts rename to packages/engine-core/src/common/utils/printGeneratorConfig.ts diff --git a/src/packages/engine-core/src/common/utils/util.ts b/packages/engine-core/src/common/utils/util.ts similarity index 100% rename from src/packages/engine-core/src/common/utils/util.ts rename to packages/engine-core/src/common/utils/util.ts diff --git a/src/packages/engine-core/src/library/LibraryEngine.ts b/packages/engine-core/src/library/LibraryEngine.ts similarity index 100% rename from src/packages/engine-core/src/library/LibraryEngine.ts rename to packages/engine-core/src/library/LibraryEngine.ts diff --git a/src/packages/engine-core/src/library/types/Library.ts b/packages/engine-core/src/library/types/Library.ts similarity index 100% rename from src/packages/engine-core/src/library/types/Library.ts rename to packages/engine-core/src/library/types/Library.ts diff --git a/src/packages/engine-core/src/tools/byline.ts b/packages/engine-core/src/tools/byline.ts similarity index 100% rename from src/packages/engine-core/src/tools/byline.ts rename to packages/engine-core/src/tools/byline.ts diff --git a/src/packages/engine-core/src/tools/omit.ts b/packages/engine-core/src/tools/omit.ts similarity index 100% rename from src/packages/engine-core/src/tools/omit.ts rename to packages/engine-core/src/tools/omit.ts From 2f5de038276698da48e5e85f7c66ed055a46c826 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Thu, 5 Aug 2021 19:09:33 -0500 Subject: [PATCH 37/52] chore(engine-core): lint --- .../engine-core/src/binary/BinaryEngine.ts | 2 + pnpm-lock.yaml | 84 +++++-------------- 2 files changed, 25 insertions(+), 61 deletions(-) diff --git a/packages/engine-core/src/binary/BinaryEngine.ts b/packages/engine-core/src/binary/BinaryEngine.ts index e228ad4c6af9..85f4299fed2b 100644 --- a/packages/engine-core/src/binary/BinaryEngine.ts +++ b/packages/engine-core/src/binary/BinaryEngine.ts @@ -1095,6 +1095,8 @@ You very likely have the wrong "binaryTarget" defined in the schema.prisma file. } catch (error) { this.setError(error) } + + return undefined } private get hasMaxRestarts() { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e08d8170351f..54bc079edd98 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1646,8 +1646,8 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/debug/2.29.0-dev.36: - resolution: {integrity: sha512-dsrTZ55cPNf9gHEPQYPP8hjM5H11uIwFkVsvLadPmLv9HAnB8M9IC6uThnHOTbnihGKT00F1rDu+r1bxr+Y6xg==} + /@prisma/debug/2.29.0-dev.37: + resolution: {integrity: sha512-pO2Vlhy7hhqorgE07OSjujmrlnCkckOrMLC27l7DyRCqYwM79UyNnc+DKxQXPAZmYaiRlenW9yt+yTvDXyJXcw==} dependencies: debug: 4.3.2 ms: 2.1.3 @@ -1655,13 +1655,13 @@ packages: - supports-color dev: true - /@prisma/engine-core/2.29.0-dev.36: - resolution: {integrity: sha512-HmMTgxzi/sss4ABBxw/iYIyRKfgWZDqE6sNqElu756/xzEJDiZERwDSWSMJpb8OEfbLVLaHNok7chvCuxb3BXQ==} + /@prisma/engine-core/2.29.0-dev.37: + resolution: {integrity: sha512-ctPpRt+FKe8aNveKm9VNdYvF1vV6UjNuCII2h4Tfhve/QF5W7GkEDLhgrSq/hPLq7YRap9HrrBYvByL/eMUROQ==} dependencies: - '@prisma/debug': 2.29.0-dev.36 - '@prisma/engines': 2.29.0-24.d65b927fb9165c1852da8d7d6c746ec29e4bbf25 - '@prisma/generator-helper': 2.29.0-dev.36 - '@prisma/get-platform': 2.29.0-24.d65b927fb9165c1852da8d7d6c746ec29e4bbf25 + '@prisma/debug': 2.29.0-dev.37 + '@prisma/engines': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/generator-helper': 2.29.0-dev.37 + '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e chalk: 4.1.2 execa: 5.1.1 get-stream: 6.0.1 @@ -1677,39 +1677,10 @@ packages: /@prisma/engines-version/2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e: resolution: {integrity: sha512-euIL8/GNYX4nIzNcCcRcTYQFqwNdzRCLsNKfOKDQDWR1AboKdFucMKYYztGlzURyItiZjC6LNJtbuvfofur9PA==} - /@prisma/engines/2.29.0-24.d65b927fb9165c1852da8d7d6c746ec29e4bbf25: - resolution: {integrity: sha512-47fBtkLV/hevc560JnOOMxydfIp7cONquX5HklThHwPF1K64kvLLpiCEEWw4+YUw/qpexTDGaDVQCVJU06YgTA==} - requiresBuild: true - dev: true - /@prisma/engines/2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e: resolution: {integrity: sha512-TgATt2FBnzpOqgZVz9xZizOtH3rpflUMUJyc1XuKaSWptn0TmsrpEGO+WTRXhpIqrhw/552RkSOkY7DPtxSPSg==} requiresBuild: true - /@prisma/fetch-engine/2.29.0-24.d65b927fb9165c1852da8d7d6c746ec29e4bbf25: - resolution: {integrity: sha512-U64wwepYUj4wwgAXetVyVOXnCjGB6eTUj3f8CUEdWL2c76r76VkXnTTJJPhB6pE1aeDUu0Vycie9qDsAngFOVA==} - dependencies: - '@prisma/debug': 2.28.0 - '@prisma/get-platform': 2.29.0-24.d65b927fb9165c1852da8d7d6c746ec29e4bbf25 - chalk: 4.1.2 - execa: 5.1.1 - find-cache-dir: 3.3.1 - hasha: 5.2.2 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.0 - make-dir: 3.1.0 - node-fetch: 2.6.1 - p-filter: 2.1.0 - p-map: 4.0.0 - p-retry: 4.6.1 - progress: 2.0.3 - rimraf: 3.0.2 - temp-dir: 2.0.0 - tempy: 1.0.1 - transitivePeerDependencies: - - supports-color - dev: true - /@prisma/fetch-engine/2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e: resolution: {integrity: sha512-jYVqAvMcVzn9HDJif+Xz2lRRli9AO+GJk+U0ja6mDECV7k9KZvoA5SZqHAtDD0XWzVp1lwG32qarMcHFk7cC7g==} dependencies: @@ -1733,10 +1704,10 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/generator-helper/2.29.0-dev.36: - resolution: {integrity: sha512-7qmumdcH8p95nJy0FHaruvvQCmDNwitcfAyLCRuUAej4nsueEH0BPP0MhX6AgvyAvbcWfZEPwiH5w0POzfTTDg==} + /@prisma/generator-helper/2.29.0-dev.37: + resolution: {integrity: sha512-Wvt51/lMyaKelGYDWf2hMPD+U8ISRvKpOPfhTChOY3GBwFKLPyr5mJqNhzUWx4Oop8zemUkj/X6AW7IudgeAzQ==} dependencies: - '@prisma/debug': 2.29.0-dev.36 + '@prisma/debug': 2.29.0-dev.37 '@types/cross-spawn': 6.0.2 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -1744,14 +1715,6 @@ packages: - supports-color dev: true - /@prisma/get-platform/2.29.0-24.d65b927fb9165c1852da8d7d6c746ec29e4bbf25: - resolution: {integrity: sha512-p/Akh0kp+9Wx5esEwwfGz/owYijSVocZHzQbbVrL77B8v31RU24xPBg8BaxIy4HEKXxNIPAkrtgvRte2LrhZ5w==} - dependencies: - '@prisma/debug': 2.28.0 - transitivePeerDependencies: - - supports-color - dev: true - /@prisma/get-platform/2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e: resolution: {integrity: sha512-DdPhyHTfD9UtW/h5LR0hiOuBBf60de0Pna5Bs70cGO91w7mXP1kQaETdn1viYBVL7ZCk2ubL/geXe/LQEFDklg==} dependencies: @@ -1759,15 +1722,15 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/sdk/2.29.0-dev.36: - resolution: {integrity: sha512-i5BS/EP+yIrr9fBRW2WE5L/gsdvzk8folt3fHsV8lOjT0zvzpBBBR8UdOaMldTTL24YI43d1ih2caQ1U/RFxIQ==} + /@prisma/sdk/2.29.0-dev.37: + resolution: {integrity: sha512-0XWk/fUrFvS6iwGEKRFa+ZnOtqEx0rvJYMIrQ7QKeA7pZ2KOkYPodV6U++4pfAX3koFJ87du+P0g2W+YDmkTNg==} dependencies: - '@prisma/debug': 2.29.0-dev.36 - '@prisma/engine-core': 2.29.0-dev.36 - '@prisma/engines': 2.29.0-24.d65b927fb9165c1852da8d7d6c746ec29e4bbf25 - '@prisma/fetch-engine': 2.29.0-24.d65b927fb9165c1852da8d7d6c746ec29e4bbf25 - '@prisma/generator-helper': 2.29.0-dev.36 - '@prisma/get-platform': 2.29.0-24.d65b927fb9165c1852da8d7d6c746ec29e4bbf25 + '@prisma/debug': 2.29.0-dev.37 + '@prisma/engine-core': 2.29.0-dev.37 + '@prisma/engines': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/fetch-engine': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/generator-helper': 2.29.0-dev.37 + '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e '@timsuchanek/copy': 1.4.5 archiver: 4.0.2 arg: 5.0.0 @@ -1801,13 +1764,13 @@ packages: - supports-color dev: true - /@prisma/studio-pcw/0.418.0_@prisma+sdk@2.29.0-dev.36: + /@prisma/studio-pcw/0.418.0_@prisma+sdk@2.29.0-dev.37: resolution: {integrity: sha512-Ujt54DkAC6f+59LMdorR5e+iRpfCf2CeQ+ooAtPQSd9FZKsR81EqmVufc/PGn9zD/l5dc584mjqP1sjOReHy2Q==} peerDependencies: '@prisma/client': '*' '@prisma/sdk': '*' dependencies: - '@prisma/sdk': 2.29.0-dev.36 + '@prisma/sdk': 2.29.0-dev.37 debug: 4.3.1 lodash: 4.17.21 transitivePeerDependencies: @@ -1817,8 +1780,8 @@ packages: /@prisma/studio-server/0.418.0: resolution: {integrity: sha512-U8aMPLnvRMUuB1hW9+V+0JLF28lQGNiZFFEhwFleI8U6VYjlYBSTWX5d7anwGbTq3Q26K9DgvetjIEKWxaezBQ==} dependencies: - '@prisma/sdk': 2.29.0-dev.36 - '@prisma/studio-pcw': 0.418.0_@prisma+sdk@2.29.0-dev.36 + '@prisma/sdk': 2.29.0-dev.37 + '@prisma/studio-pcw': 0.418.0_@prisma+sdk@2.29.0-dev.37 '@prisma/studio-transports': 0.418.0 '@sentry/node': 6.2.5 checkpoint-client: 1.1.20 @@ -1827,7 +1790,6 @@ packages: express: 4.17.1 untildify: 4.0.0 transitivePeerDependencies: - - '@prisma/client' - supports-color dev: true From cb6a71c5264fb29baeea86e03de714d4006c1edc Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Thu, 5 Aug 2021 20:16:44 -0500 Subject: [PATCH 38/52] chore(client): rename to interactive transactions --- .../happy/long-running-transaction/dev.db | Bin 45056 -> 45056 bytes .../long-running-transaction/schema.prisma | 2 +- .../src/generation/TSClient/PrismaClient.ts | 6 +++--- .../client/src/runtime/getPrismaClient.ts | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/client/src/__tests__/integration/happy/long-running-transaction/dev.db b/packages/client/src/__tests__/integration/happy/long-running-transaction/dev.db index be9c1c85968594b431abd54b7db0bed3f98eb351..8b00b4543b0883a50b3c58225c6d27d8c3187aa1 100644 GIT binary patch delta 201 zcmZp8z|`=7X@WFk!$cWp#)gdv!TP=y2F7WoY363SW@ag7x+aFE#<~_M1}3^G#ujF# zCKi^7mWIhp>dc{>hDJsfsmaD^x`~NE)h4M17P^VahNily=9ZR;24)tNSw l5M!bhBa2}uLuqkpQM{o;d1_K|W=X1Ea(*r`mMn580048pHbVda delta 201 zcmZp8z|`=7X@WFk&O{k!#+;1_!TP=i2B|3qCZ>tHNydqmx+aE}$-0)7hK9O^=Ei0g ziAHIr7RHH8>dc{>iH1f-7D>sLx(22uNxCK`mZrLv7O57xiOHshrsk=pNk(bOn+z84 mClF(z6(fsbC_`y+YEitQLwRaaab`)XUUGgeF_tWHC;$MOST^qf diff --git a/packages/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma b/packages/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma index 09ff51c04f2c..eb009821a6a0 100644 --- a/packages/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma +++ b/packages/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma @@ -5,7 +5,7 @@ datasource db { generator client { provider = "prisma-client-js" - previewFeatures = ["longRunningTransactions"] + previewFeatures = ["interactiveTransactions"] } // / User model comment diff --git a/packages/client/src/generation/TSClient/PrismaClient.ts b/packages/client/src/generation/TSClient/PrismaClient.ts index 36b746800bbe..9fc57e34a894 100644 --- a/packages/client/src/generation/TSClient/PrismaClient.ts +++ b/packages/client/src/generation/TSClient/PrismaClient.ts @@ -8,7 +8,7 @@ import { TAB_SIZE } from './constants' import { Datasources } from './Datasources' import { Generatable } from './Generatable' -function longRunningTransactionDefinition() { +function interactiveTransactionDefinition() { const txPrismaClient = `Omit` return `$transaction(fn: (prisma: ${txPrismaClient}) => Promise): Promise` @@ -142,8 +142,8 @@ export class PrismaClient< * Read more in our [docs](https://www.prisma.io/docs/concepts/components/prisma-client/transactions). */ $transaction

[]>(arg: [...P]): Promise>${ - this.generator?.previewFeatures.includes('longRunningTransactions') - ? longRunningTransactionDefinition() + this.generator?.previewFeatures.includes('interactiveTransactions') + ? interactiveTransactionDefinition() : '' } diff --git a/packages/client/src/runtime/getPrismaClient.ts b/packages/client/src/runtime/getPrismaClient.ts index b0c86f526e04..98750c03d685 100644 --- a/packages/client/src/runtime/getPrismaClient.ts +++ b/packages/client/src/runtime/getPrismaClient.ts @@ -408,7 +408,7 @@ export function getPrismaClient(config: GetPrismaClientOptions) { void this._getActiveProvider() // eslint-disable-next-line prettier/prettier - if (!this._hasPreviewFlag('longRunningTransactions')) { + if (!this._hasPreviewFlag('interactiveTransactions')) { this._fetcher = new PrismaClientFetcher(this, false, this._hooks) } else { this._fetcher = new RequestHandler(this, this._hooks) as any @@ -955,7 +955,7 @@ new PrismaClient({ */ $transaction(input: any, options?: any) { // eslint-disable-next-line prettier/prettier - if (!this._hasPreviewFlag('longRunningTransactions')) { + if (!this._hasPreviewFlag('interactiveTransactions')) { return this.$___transaction(input) } @@ -1069,7 +1069,7 @@ new PrismaClient({ const changedInternalParams = { ...internalParams, ...params } // TODO remove this once LRT is the default transaction mode - if (index > 0 && !this._hasPreviewFlag('longRunningTransactions')) { + if (index > 0 && !this._hasPreviewFlag('interactiveTransactions')) { delete changedInternalParams['transactionId'] } From 6dd2f82f581f2fffb9e897c38158c0546a5ba8a1 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Thu, 5 Aug 2021 20:17:05 -0500 Subject: [PATCH 39/52] chore(prisma): bump engines --- packages/cli/package.json | 6 +- packages/client/package.json | 8 +- packages/engine-core/package.json | 4 +- packages/integration-tests/package.json | 2 +- packages/migrate/package.json | 4 +- packages/sdk/package.json | 6 +- pnpm-lock.yaml | 101 ++++++++++++++++-------- 7 files changed, 84 insertions(+), 47 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index 346a620fbad9..a5f9cb45eeff 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -63,9 +63,9 @@ "devDependencies": { "@prisma/client": "workspace:*", "@prisma/debug": "workspace:*", - "@prisma/fetch-engine": "2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e", + "@prisma/fetch-engine": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", "@prisma/generator-helper": "workspace:*", - "@prisma/get-platform": "2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e", + "@prisma/get-platform": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", "@prisma/migrate": "workspace:*", "@prisma/sdk": "workspace:*", "@prisma/studio-server": "0.418.0", @@ -127,7 +127,7 @@ "precommit": "lint-staged" }, "dependencies": { - "@prisma/engines": "2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e" + "@prisma/engines": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95" }, "lint-staged": { "*.ts": [ diff --git a/packages/client/package.json b/packages/client/package.json index 5e1f95f1f1b6..1c80b69f1b4d 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -61,10 +61,10 @@ "devDependencies": { "@prisma/debug": "workspace:*", "@prisma/engine-core": "workspace:*", - "@prisma/engines": "2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e", - "@prisma/fetch-engine": "2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e", + "@prisma/engines": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", + "@prisma/fetch-engine": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", "@prisma/generator-helper": "workspace:*", - "@prisma/get-platform": "2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e", + "@prisma/get-platform": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", "@prisma/migrate": "workspace:*", "@prisma/sdk": "workspace:*", "@timsuchanek/copy": "1.4.5", @@ -128,7 +128,7 @@ } }, "dependencies": { - "@prisma/engines-version": "2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e" + "@prisma/engines-version": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95" }, "lint-staged": { "*.ts": [ diff --git a/packages/engine-core/package.json b/packages/engine-core/package.json index 4adac5ec3059..d14711044d3b 100644 --- a/packages/engine-core/package.json +++ b/packages/engine-core/package.json @@ -45,9 +45,9 @@ }, "dependencies": { "@prisma/debug": "workspace:*", - "@prisma/engines": "2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e", + "@prisma/engines": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", "@prisma/generator-helper": "workspace:*", - "@prisma/get-platform": "2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e", + "@prisma/get-platform": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", "chalk": "4.1.2", "execa": "5.1.1", "get-stream": "6.0.1", diff --git a/packages/integration-tests/package.json b/packages/integration-tests/package.json index 547dddd7bd4b..78ce0de32a00 100644 --- a/packages/integration-tests/package.json +++ b/packages/integration-tests/package.json @@ -9,7 +9,7 @@ "repository": "git@github.com:prisma/prisma.git", "devDependencies": { "@prisma/client": "workspace:*", - "@prisma/get-platform": "2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e", + "@prisma/get-platform": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", "@prisma/migrate": "workspace:*", "@prisma/sdk": "workspace:*", "@sindresorhus/slugify": "1.1.2", diff --git a/packages/migrate/package.json b/packages/migrate/package.json index 7069dd9d0f32..0c6fbb130479 100644 --- a/packages/migrate/package.json +++ b/packages/migrate/package.json @@ -16,7 +16,7 @@ "version": "latest" }, "devDependencies": { - "@prisma/engines-version": "2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e", + "@prisma/engines-version": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", "@prisma/generator-helper": "workspace:*", "@prisma/sdk": "workspace:*", "@types/jest": "26.0.24", @@ -55,7 +55,7 @@ }, "dependencies": { "@prisma/debug": "workspace:*", - "@prisma/get-platform": "2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e", + "@prisma/get-platform": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", "@sindresorhus/slugify": "1.1.2", "execa": "5.1.1", "global-dirs": "3.0.0", diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 6537bf9ef9ed..163fe5f6aef8 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -53,10 +53,10 @@ "dependencies": { "@prisma/debug": "workspace:*", "@prisma/engine-core": "workspace:*", - "@prisma/engines": "2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e", - "@prisma/fetch-engine": "2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e", + "@prisma/engines": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", + "@prisma/fetch-engine": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", "@prisma/generator-helper": "workspace:*", - "@prisma/get-platform": "2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e", + "@prisma/get-platform": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", "@timsuchanek/copy": "1.4.5", "archiver": "4.0.2", "arg": "5.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 54bc079edd98..34a632278a8d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -82,10 +82,10 @@ importers: specifiers: '@prisma/client': workspace:* '@prisma/debug': workspace:* - '@prisma/engines': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e - '@prisma/fetch-engine': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/engines': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/fetch-engine': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@prisma/migrate': workspace:* '@prisma/sdk': workspace:* '@prisma/studio-server': 0.418.0 @@ -130,13 +130,13 @@ importers: ts-jest: 27.0.4 typescript: 4.3.5 dependencies: - '@prisma/engines': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/engines': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 devDependencies: '@prisma/client': link:../client '@prisma/debug': link:../debug - '@prisma/fetch-engine': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/fetch-engine': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@prisma/generator-helper': link:../generator-helper - '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@prisma/migrate': link:../migrate '@prisma/sdk': link:../sdk '@prisma/studio-server': 0.418.0 @@ -185,11 +185,11 @@ importers: specifiers: '@prisma/debug': workspace:* '@prisma/engine-core': workspace:* - '@prisma/engines': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e - '@prisma/engines-version': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e - '@prisma/fetch-engine': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/engines': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/engines-version': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/fetch-engine': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@prisma/migrate': workspace:* '@prisma/sdk': workspace:* '@timsuchanek/copy': 1.4.5 @@ -244,14 +244,14 @@ importers: tsd: 0.17.0 typescript: 4.3.5 dependencies: - '@prisma/engines-version': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/engines-version': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 devDependencies: '@prisma/debug': link:../debug '@prisma/engine-core': link:../engine-core - '@prisma/engines': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e - '@prisma/fetch-engine': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/engines': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/fetch-engine': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@prisma/generator-helper': link:../generator-helper - '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@prisma/migrate': link:../migrate '@prisma/sdk': link:../sdk '@timsuchanek/copy': 1.4.5 @@ -356,9 +356,9 @@ importers: packages/engine-core: specifiers: '@prisma/debug': workspace:* - '@prisma/engines': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/engines': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@types/jest': 26.0.24 '@types/node': 12.20.18 '@typescript-eslint/eslint-plugin': 4.29.0 @@ -386,9 +386,9 @@ importers: undici: 3.3.6 dependencies: '@prisma/debug': link:../debug - '@prisma/engines': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/engines': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@prisma/generator-helper': link:../generator-helper - '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 chalk: 4.1.2 execa: 5.1.1 get-stream: 6.0.1 @@ -466,7 +466,7 @@ importers: packages/integration-tests: specifiers: '@prisma/client': workspace:* - '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@prisma/migrate': workspace:* '@prisma/sdk': workspace:* '@sindresorhus/slugify': 1.1.2 @@ -507,7 +507,7 @@ importers: verror: 1.10.0 devDependencies: '@prisma/client': link:../client - '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@prisma/migrate': link:../migrate '@prisma/sdk': link:../sdk '@sindresorhus/slugify': 1.1.2 @@ -550,9 +550,9 @@ importers: packages/migrate: specifiers: '@prisma/debug': workspace:* - '@prisma/engines-version': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/engines-version': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@prisma/sdk': workspace:* '@sindresorhus/slugify': 1.1.2 '@types/jest': 26.0.24 @@ -598,7 +598,7 @@ importers: typescript: 4.3.5 dependencies: '@prisma/debug': link:../debug - '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@sindresorhus/slugify': 1.1.2 execa: 5.1.1 global-dirs: 3.0.0 @@ -613,7 +613,7 @@ importers: strip-ansi: 6.0.0 strip-indent: 3.0.0 devDependencies: - '@prisma/engines-version': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/engines-version': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@prisma/generator-helper': link:../generator-helper '@prisma/sdk': link:../sdk '@types/jest': 26.0.24 @@ -692,10 +692,10 @@ importers: specifiers: '@prisma/debug': workspace:* '@prisma/engine-core': workspace:* - '@prisma/engines': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e - '@prisma/fetch-engine': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/engines': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/fetch-engine': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@timsuchanek/copy': 1.4.5 '@types/jest': 26.0.24 '@types/node': 12.20.18 @@ -748,10 +748,10 @@ importers: dependencies: '@prisma/debug': link:../debug '@prisma/engine-core': link:../engine-core - '@prisma/engines': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e - '@prisma/fetch-engine': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/engines': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/fetch-engine': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@prisma/generator-helper': link:../generator-helper - '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 '@timsuchanek/copy': 1.4.5 archiver: 4.0.2 arg: 5.0.0 @@ -1674,12 +1674,17 @@ packages: - supports-color dev: true - /@prisma/engines-version/2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e: - resolution: {integrity: sha512-euIL8/GNYX4nIzNcCcRcTYQFqwNdzRCLsNKfOKDQDWR1AboKdFucMKYYztGlzURyItiZjC6LNJtbuvfofur9PA==} + /@prisma/engines-version/2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95: + resolution: {integrity: sha512-vHcluaCAWnj20bljRPU3Ifsk4XQNHn1pwMKKnCZiy4xYPnWQqgE17HLk9goSa9wp1ix2tbFUIdI4Pebjesupfw==} /@prisma/engines/2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e: resolution: {integrity: sha512-TgATt2FBnzpOqgZVz9xZizOtH3rpflUMUJyc1XuKaSWptn0TmsrpEGO+WTRXhpIqrhw/552RkSOkY7DPtxSPSg==} requiresBuild: true + dev: true + + /@prisma/engines/2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95: + resolution: {integrity: sha512-k4bDcEQn8jeS+a1+7iXyKKDVHlvo7UnsWX2+b0I9sdk81ESs4Ant3eAoI6gB9x2fNBkgsmBg+jWBPGXBgZvE7Q==} + requiresBuild: true /@prisma/fetch-engine/2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e: resolution: {integrity: sha512-jYVqAvMcVzn9HDJif+Xz2lRRli9AO+GJk+U0ja6mDECV7k9KZvoA5SZqHAtDD0XWzVp1lwG32qarMcHFk7cC7g==} @@ -1703,6 +1708,30 @@ packages: tempy: 1.0.1 transitivePeerDependencies: - supports-color + dev: true + + /@prisma/fetch-engine/2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95: + resolution: {integrity: sha512-SSezuhEs+0GrHCb7cQDCKx1G/xDibozDszPn67D5UwWBCWXW1X5dlpZfmdnn8RpgxdPc0I7AWg43ZesUaX5x6w==} + dependencies: + '@prisma/debug': 2.28.0 + '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + chalk: 4.1.2 + execa: 5.1.1 + find-cache-dir: 3.3.1 + hasha: 5.2.2 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.0 + make-dir: 3.1.0 + node-fetch: 2.6.1 + p-filter: 2.1.0 + p-map: 4.0.0 + p-retry: 4.6.1 + progress: 2.0.3 + rimraf: 3.0.2 + temp-dir: 2.0.0 + tempy: 1.0.1 + transitivePeerDependencies: + - supports-color /@prisma/generator-helper/2.29.0-dev.37: resolution: {integrity: sha512-Wvt51/lMyaKelGYDWf2hMPD+U8ISRvKpOPfhTChOY3GBwFKLPyr5mJqNhzUWx4Oop8zemUkj/X6AW7IudgeAzQ==} @@ -1721,6 +1750,14 @@ packages: '@prisma/debug': 2.28.0 transitivePeerDependencies: - supports-color + dev: true + + /@prisma/get-platform/2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95: + resolution: {integrity: sha512-XKxwo9VJVENYxEqmvulYwlv07Z5ivW1XPWqYcfvU2DsNw77aj8hbapqraI8EF2PN0OSHrzBhCmjkuYhK8jOY5g==} + dependencies: + '@prisma/debug': 2.28.0 + transitivePeerDependencies: + - supports-color /@prisma/sdk/2.29.0-dev.37: resolution: {integrity: sha512-0XWk/fUrFvS6iwGEKRFa+ZnOtqEx0rvJYMIrQ7QKeA7pZ2KOkYPodV6U++4pfAX3koFJ87du+P0g2W+YDmkTNg==} From 3055bd1e99640e5b9d501fc508931171e8eea27a Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Thu, 5 Aug 2021 20:18:06 -0500 Subject: [PATCH 40/52] test(client): rename interactive tx --- .../.gitignore | 0 .../dev.db | Bin .../schema.prisma | 0 .../test.ts | 6 +++--- 4 files changed, 3 insertions(+), 3 deletions(-) rename packages/client/src/__tests__/integration/happy/{long-running-transaction => interactive-transactions}/.gitignore (100%) rename packages/client/src/__tests__/integration/happy/{long-running-transaction => interactive-transactions}/dev.db (100%) rename packages/client/src/__tests__/integration/happy/{long-running-transaction => interactive-transactions}/schema.prisma (100%) rename packages/client/src/__tests__/integration/happy/{long-running-transaction => interactive-transactions}/test.ts (98%) diff --git a/packages/client/src/__tests__/integration/happy/long-running-transaction/.gitignore b/packages/client/src/__tests__/integration/happy/interactive-transactions/.gitignore similarity index 100% rename from packages/client/src/__tests__/integration/happy/long-running-transaction/.gitignore rename to packages/client/src/__tests__/integration/happy/interactive-transactions/.gitignore diff --git a/packages/client/src/__tests__/integration/happy/long-running-transaction/dev.db b/packages/client/src/__tests__/integration/happy/interactive-transactions/dev.db similarity index 100% rename from packages/client/src/__tests__/integration/happy/long-running-transaction/dev.db rename to packages/client/src/__tests__/integration/happy/interactive-transactions/dev.db diff --git a/packages/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma b/packages/client/src/__tests__/integration/happy/interactive-transactions/schema.prisma similarity index 100% rename from packages/client/src/__tests__/integration/happy/long-running-transaction/schema.prisma rename to packages/client/src/__tests__/integration/happy/interactive-transactions/schema.prisma diff --git a/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts b/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts similarity index 98% rename from packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts rename to packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts index 546d055a20c3..2bed4004e2c4 100644 --- a/packages/client/src/__tests__/integration/happy/long-running-transaction/test.ts +++ b/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts @@ -2,9 +2,9 @@ import { getTestClient } from '../../../../utils/getTestClient' let PrismaClient, prisma -describe('long-running transaction', () => { +describe('interactive transaction', () => { /** - * Minimal example of a long-running transaction + * Minimal example of a interactive transaction */ test('basic', async () => { const result = await prisma.$transaction(async (prisma) => { @@ -332,7 +332,7 @@ Invalid \`prisma.user.create()\` invocation: }) /** - * Minimal example of a long-running transaction & middleware + * Minimal example of a interactive transaction & middleware */ test('middleware basic', async () => { prisma.$use(async (params, next) => { From c8ba24b9118365e292a2ba146cc5a90c114b3c8e Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Thu, 5 Aug 2021 22:46:13 -0500 Subject: [PATCH 41/52] chore(client): begin itx impl for library --- packages/engine-core/src/common/Engine.ts | 7 ++++-- .../engine-core/src/library/LibraryEngine.ts | 24 +++++++++++++++---- .../engine-core/src/library/types/Library.ts | 3 +++ 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/packages/engine-core/src/common/Engine.ts b/packages/engine-core/src/common/Engine.ts index 46d86c01eba8..ad106c506955 100644 --- a/packages/engine-core/src/common/Engine.ts +++ b/packages/engine-core/src/common/Engine.ts @@ -31,11 +31,14 @@ export abstract class Engine { action: 'start', options?: Transaction.Options, ): Promise - abstract transaction(action: 'commit', info: Transaction.Info): Promise + abstract transaction( + action: 'commit', + info: Transaction.Info, + ): Promise abstract transaction( action: 'rollback', info: Transaction.Info, - ): Promise + ): Promise } export type EngineEventType = 'query' | 'info' | 'warn' | 'error' | 'beforeExit' diff --git a/packages/engine-core/src/library/LibraryEngine.ts b/packages/engine-core/src/library/LibraryEngine.ts index fbb37e053517..41af141cbcc4 100644 --- a/packages/engine-core/src/library/LibraryEngine.ts +++ b/packages/engine-core/src/library/LibraryEngine.ts @@ -102,10 +102,26 @@ export class LibraryEngine extends Engine { } async transaction(action: 'start', options?: Tx.Options): Promise - async transaction(action: 'commit', info: Tx.Info): Promise - async transaction(action: 'rollback', info: Tx.Info): Promise - async transaction(action: any, id?: any) { - return (await Promise.resolve()) as any + async transaction(action: 'commit', info: Tx.Info): Promise + async transaction(action: 'rollback', info: Tx.Info): Promise + async transaction(action: any, arg?: any) { + await this.start() + + if (action === 'start') { + const jsonOptions = JSON.stringify({ + max_wait: arg?.maxWait ?? 2000, // default + timeout: arg?.timeout ?? 5000, // default + }) + + const result = await this.engine?.startTransaction(jsonOptions) + return this.parseEngineResponse(result) + } else if (action === 'commit') { + await this.engine?.commitTransaction(arg.id) + } else if (action === 'rollback') { + await this.engine?.rollbackTransaction(arg.id) + } + + return undefined } private async instantiateLibrary(): Promise { diff --git a/packages/engine-core/src/library/types/Library.ts b/packages/engine-core/src/library/types/Library.ts index 543d25dca895..ee9d2b54eaf4 100644 --- a/packages/engine-core/src/library/types/Library.ts +++ b/packages/engine-core/src/library/types/Library.ts @@ -19,6 +19,9 @@ export type QueryEngineInstance = { */ query(request: string, headers: string): Promise sdlSchema(): Promise + startTransaction(options: string): Promise + commitTransaction(id: string): Promise + rollbackTransaction(id: string): Promise } export interface QueryEngineConstructor { From a194656e0fc9d88cb6cf0b741396502721871a58 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 6 Aug 2021 13:03:09 -0500 Subject: [PATCH 42/52] feat(client, itx): node api --- packages/cli/package.json | 6 +- packages/client/package.json | 8 +- packages/engine-core/package.json | 4 +- .../engine-core/src/library/LibraryEngine.ts | 15 ++-- .../engine-core/src/library/types/Library.ts | 12 ++- packages/integration-tests/package.json | 2 +- packages/migrate/package.json | 4 +- packages/sdk/package.json | 6 +- pnpm-lock.yaml | 78 +++++++++---------- 9 files changed, 72 insertions(+), 63 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index a5f9cb45eeff..f7196a165b16 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -63,9 +63,9 @@ "devDependencies": { "@prisma/client": "workspace:*", "@prisma/debug": "workspace:*", - "@prisma/fetch-engine": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", + "@prisma/fetch-engine": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", "@prisma/generator-helper": "workspace:*", - "@prisma/get-platform": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", + "@prisma/get-platform": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", "@prisma/migrate": "workspace:*", "@prisma/sdk": "workspace:*", "@prisma/studio-server": "0.418.0", @@ -127,7 +127,7 @@ "precommit": "lint-staged" }, "dependencies": { - "@prisma/engines": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95" + "@prisma/engines": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8" }, "lint-staged": { "*.ts": [ diff --git a/packages/client/package.json b/packages/client/package.json index 1c80b69f1b4d..f188d740b58e 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -61,10 +61,10 @@ "devDependencies": { "@prisma/debug": "workspace:*", "@prisma/engine-core": "workspace:*", - "@prisma/engines": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", - "@prisma/fetch-engine": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", + "@prisma/engines": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", + "@prisma/fetch-engine": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", "@prisma/generator-helper": "workspace:*", - "@prisma/get-platform": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", + "@prisma/get-platform": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", "@prisma/migrate": "workspace:*", "@prisma/sdk": "workspace:*", "@timsuchanek/copy": "1.4.5", @@ -128,7 +128,7 @@ } }, "dependencies": { - "@prisma/engines-version": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95" + "@prisma/engines-version": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8" }, "lint-staged": { "*.ts": [ diff --git a/packages/engine-core/package.json b/packages/engine-core/package.json index d14711044d3b..a8eadec74a1c 100644 --- a/packages/engine-core/package.json +++ b/packages/engine-core/package.json @@ -45,9 +45,9 @@ }, "dependencies": { "@prisma/debug": "workspace:*", - "@prisma/engines": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", + "@prisma/engines": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", "@prisma/generator-helper": "workspace:*", - "@prisma/get-platform": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", + "@prisma/get-platform": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", "chalk": "4.1.2", "execa": "5.1.1", "get-stream": "6.0.1", diff --git a/packages/engine-core/src/library/LibraryEngine.ts b/packages/engine-core/src/library/LibraryEngine.ts index 41af141cbcc4..1a98ddfd3add 100644 --- a/packages/engine-core/src/library/LibraryEngine.ts +++ b/packages/engine-core/src/library/LibraryEngine.ts @@ -113,12 +113,12 @@ export class LibraryEngine extends Engine { timeout: arg?.timeout ?? 5000, // default }) - const result = await this.engine?.startTransaction(jsonOptions) + const result = await this.engine?.startTransaction(jsonOptions, '{}') return this.parseEngineResponse(result) } else if (action === 'commit') { - await this.engine?.commitTransaction(arg.id) + await this.engine?.commitTransaction(arg.id, '{}') } else if (action === 'rollback') { - await this.engine?.rollbackTransaction(arg.id) + await this.engine?.rollbackTransaction(arg.id, '{}') } return undefined @@ -431,10 +431,14 @@ You may have to run ${chalk.greenBright( debug(`sending request, this.libraryStarted: ${this.libraryStarted}`) const request: QueryEngineRequest = { query, variables: {} } const queryStr = JSON.stringify(request) - const headerStr = JSON.stringify({}) + const headerStr = JSON.stringify(headers) await this.start() - this.executingQueryPromise = this.engine?.query(queryStr, headerStr) + this.executingQueryPromise = this.engine?.query( + queryStr, + headerStr, + headers.transactionId, + ) this.lastQuery = queryStr const data = this.parseEngineResponse( @@ -485,6 +489,7 @@ You may have to run ${chalk.greenBright( this.executingQueryPromise = this.engine!.query( this.lastQuery, JSON.stringify(headers), + headers.transactionId, ) const result = await this.executingQueryPromise const data = this.parseEngineResponse(result) diff --git a/packages/engine-core/src/library/types/Library.ts b/packages/engine-core/src/library/types/Library.ts index ee9d2b54eaf4..470d482b2f60 100644 --- a/packages/engine-core/src/library/types/Library.ts +++ b/packages/engine-core/src/library/types/Library.ts @@ -17,11 +17,15 @@ export type QueryEngineInstance = { * * @param headers JSON.stringified `QueryEngineRequestHeaders` */ - query(request: string, headers: string): Promise + query( + request: string, + headers: string, + transactionId?: string, + ): Promise sdlSchema(): Promise - startTransaction(options: string): Promise - commitTransaction(id: string): Promise - rollbackTransaction(id: string): Promise + startTransaction(options: string, trace: string): Promise + commitTransaction(id: string, trace: string): Promise + rollbackTransaction(id: string, trace: string): Promise } export interface QueryEngineConstructor { diff --git a/packages/integration-tests/package.json b/packages/integration-tests/package.json index 78ce0de32a00..d531df21393e 100644 --- a/packages/integration-tests/package.json +++ b/packages/integration-tests/package.json @@ -9,7 +9,7 @@ "repository": "git@github.com:prisma/prisma.git", "devDependencies": { "@prisma/client": "workspace:*", - "@prisma/get-platform": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", + "@prisma/get-platform": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", "@prisma/migrate": "workspace:*", "@prisma/sdk": "workspace:*", "@sindresorhus/slugify": "1.1.2", diff --git a/packages/migrate/package.json b/packages/migrate/package.json index 0c6fbb130479..c73069ab149c 100644 --- a/packages/migrate/package.json +++ b/packages/migrate/package.json @@ -16,7 +16,7 @@ "version": "latest" }, "devDependencies": { - "@prisma/engines-version": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", + "@prisma/engines-version": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", "@prisma/generator-helper": "workspace:*", "@prisma/sdk": "workspace:*", "@types/jest": "26.0.24", @@ -55,7 +55,7 @@ }, "dependencies": { "@prisma/debug": "workspace:*", - "@prisma/get-platform": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", + "@prisma/get-platform": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", "@sindresorhus/slugify": "1.1.2", "execa": "5.1.1", "global-dirs": "3.0.0", diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 163fe5f6aef8..0b6ef4a0e535 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -53,10 +53,10 @@ "dependencies": { "@prisma/debug": "workspace:*", "@prisma/engine-core": "workspace:*", - "@prisma/engines": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", - "@prisma/fetch-engine": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", + "@prisma/engines": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", + "@prisma/fetch-engine": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", "@prisma/generator-helper": "workspace:*", - "@prisma/get-platform": "2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95", + "@prisma/get-platform": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", "@timsuchanek/copy": "1.4.5", "archiver": "4.0.2", "arg": "5.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 34a632278a8d..250dc7f55e4d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -82,10 +82,10 @@ importers: specifiers: '@prisma/client': workspace:* '@prisma/debug': workspace:* - '@prisma/engines': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 - '@prisma/fetch-engine': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/engines': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/fetch-engine': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@prisma/migrate': workspace:* '@prisma/sdk': workspace:* '@prisma/studio-server': 0.418.0 @@ -130,13 +130,13 @@ importers: ts-jest: 27.0.4 typescript: 4.3.5 dependencies: - '@prisma/engines': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/engines': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 devDependencies: '@prisma/client': link:../client '@prisma/debug': link:../debug - '@prisma/fetch-engine': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/fetch-engine': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@prisma/generator-helper': link:../generator-helper - '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@prisma/migrate': link:../migrate '@prisma/sdk': link:../sdk '@prisma/studio-server': 0.418.0 @@ -185,11 +185,11 @@ importers: specifiers: '@prisma/debug': workspace:* '@prisma/engine-core': workspace:* - '@prisma/engines': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 - '@prisma/engines-version': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 - '@prisma/fetch-engine': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/engines': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/engines-version': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/fetch-engine': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@prisma/migrate': workspace:* '@prisma/sdk': workspace:* '@timsuchanek/copy': 1.4.5 @@ -244,14 +244,14 @@ importers: tsd: 0.17.0 typescript: 4.3.5 dependencies: - '@prisma/engines-version': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/engines-version': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 devDependencies: '@prisma/debug': link:../debug '@prisma/engine-core': link:../engine-core - '@prisma/engines': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 - '@prisma/fetch-engine': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/engines': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/fetch-engine': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@prisma/generator-helper': link:../generator-helper - '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@prisma/migrate': link:../migrate '@prisma/sdk': link:../sdk '@timsuchanek/copy': 1.4.5 @@ -356,9 +356,9 @@ importers: packages/engine-core: specifiers: '@prisma/debug': workspace:* - '@prisma/engines': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/engines': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@types/jest': 26.0.24 '@types/node': 12.20.18 '@typescript-eslint/eslint-plugin': 4.29.0 @@ -386,9 +386,9 @@ importers: undici: 3.3.6 dependencies: '@prisma/debug': link:../debug - '@prisma/engines': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/engines': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@prisma/generator-helper': link:../generator-helper - '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 chalk: 4.1.2 execa: 5.1.1 get-stream: 6.0.1 @@ -466,7 +466,7 @@ importers: packages/integration-tests: specifiers: '@prisma/client': workspace:* - '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@prisma/migrate': workspace:* '@prisma/sdk': workspace:* '@sindresorhus/slugify': 1.1.2 @@ -507,7 +507,7 @@ importers: verror: 1.10.0 devDependencies: '@prisma/client': link:../client - '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@prisma/migrate': link:../migrate '@prisma/sdk': link:../sdk '@sindresorhus/slugify': 1.1.2 @@ -550,9 +550,9 @@ importers: packages/migrate: specifiers: '@prisma/debug': workspace:* - '@prisma/engines-version': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/engines-version': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@prisma/sdk': workspace:* '@sindresorhus/slugify': 1.1.2 '@types/jest': 26.0.24 @@ -598,7 +598,7 @@ importers: typescript: 4.3.5 dependencies: '@prisma/debug': link:../debug - '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@sindresorhus/slugify': 1.1.2 execa: 5.1.1 global-dirs: 3.0.0 @@ -613,7 +613,7 @@ importers: strip-ansi: 6.0.0 strip-indent: 3.0.0 devDependencies: - '@prisma/engines-version': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/engines-version': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@prisma/generator-helper': link:../generator-helper '@prisma/sdk': link:../sdk '@types/jest': 26.0.24 @@ -692,10 +692,10 @@ importers: specifiers: '@prisma/debug': workspace:* '@prisma/engine-core': workspace:* - '@prisma/engines': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 - '@prisma/fetch-engine': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/engines': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/fetch-engine': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@timsuchanek/copy': 1.4.5 '@types/jest': 26.0.24 '@types/node': 12.20.18 @@ -748,10 +748,10 @@ importers: dependencies: '@prisma/debug': link:../debug '@prisma/engine-core': link:../engine-core - '@prisma/engines': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 - '@prisma/fetch-engine': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/engines': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/fetch-engine': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@prisma/generator-helper': link:../generator-helper - '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 '@timsuchanek/copy': 1.4.5 archiver: 4.0.2 arg: 5.0.0 @@ -1674,16 +1674,16 @@ packages: - supports-color dev: true - /@prisma/engines-version/2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95: - resolution: {integrity: sha512-vHcluaCAWnj20bljRPU3Ifsk4XQNHn1pwMKKnCZiy4xYPnWQqgE17HLk9goSa9wp1ix2tbFUIdI4Pebjesupfw==} + /@prisma/engines-version/2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8: + resolution: {integrity: sha512-bNEMApsiBLb1+X6YwmOfaUVCF96b4HwdqUSJAGc3IQzT163JMlefVqlXWfYbUBqWTnZluobBqxurs40mvSj86Q==} /@prisma/engines/2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e: resolution: {integrity: sha512-TgATt2FBnzpOqgZVz9xZizOtH3rpflUMUJyc1XuKaSWptn0TmsrpEGO+WTRXhpIqrhw/552RkSOkY7DPtxSPSg==} requiresBuild: true dev: true - /@prisma/engines/2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95: - resolution: {integrity: sha512-k4bDcEQn8jeS+a1+7iXyKKDVHlvo7UnsWX2+b0I9sdk81ESs4Ant3eAoI6gB9x2fNBkgsmBg+jWBPGXBgZvE7Q==} + /@prisma/engines/2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8: + resolution: {integrity: sha512-nKFoQ3e+QzzjWo2ZiN0HCdtkquvQe77qOxaZuwAN5GjscOSoPPD/ylJF+PTOaIiOW3806iSfh8Sb794ZHMguRg==} requiresBuild: true /@prisma/fetch-engine/2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e: @@ -1710,11 +1710,11 @@ packages: - supports-color dev: true - /@prisma/fetch-engine/2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95: - resolution: {integrity: sha512-SSezuhEs+0GrHCb7cQDCKx1G/xDibozDszPn67D5UwWBCWXW1X5dlpZfmdnn8RpgxdPc0I7AWg43ZesUaX5x6w==} + /@prisma/fetch-engine/2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8: + resolution: {integrity: sha512-XoWFFNRnMhOKFL+5ec7IaOMqE9RFzh0fNC2lfo7l6/+37jmvPy2dB/3pIrQmH8v66npNeas9vyqbjjkFj/1qIg==} dependencies: '@prisma/debug': 2.28.0 - '@prisma/get-platform': 2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95 + '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 chalk: 4.1.2 execa: 5.1.1 find-cache-dir: 3.3.1 @@ -1752,8 +1752,8 @@ packages: - supports-color dev: true - /@prisma/get-platform/2.29.0-26.query-engine-lrts-50fcfd9c276aae99aacd57bf99baa60e28a56d95: - resolution: {integrity: sha512-XKxwo9VJVENYxEqmvulYwlv07Z5ivW1XPWqYcfvU2DsNw77aj8hbapqraI8EF2PN0OSHrzBhCmjkuYhK8jOY5g==} + /@prisma/get-platform/2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8: + resolution: {integrity: sha512-fgtw3L4KSmrDgZWvqg+o2PBjQqwjTwpA+8vZPAFmRIod2sYwg3z3KdnGR2ogKEFulRP57+Onk8EMG90/UsPdLw==} dependencies: '@prisma/debug': 2.28.0 transitivePeerDependencies: From 0f9f4791610536bf660f9cab5f44c66bef4765bc Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 6 Aug 2021 14:16:20 -0500 Subject: [PATCH 43/52] chore: update locks --- pnpm-lock.yaml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 250dc7f55e4d..676203376361 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1646,8 +1646,8 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/debug/2.29.0-dev.37: - resolution: {integrity: sha512-pO2Vlhy7hhqorgE07OSjujmrlnCkckOrMLC27l7DyRCqYwM79UyNnc+DKxQXPAZmYaiRlenW9yt+yTvDXyJXcw==} + /@prisma/debug/2.29.0-dev.38: + resolution: {integrity: sha512-wELPmwXIWOrf9jb1ml1QJ3oM/izA53d5+qnMg2Ggw13fkahJvl7EDbqCQbIAQtdhs1qOeWfuRk9aG7Txi7y43w==} dependencies: debug: 4.3.2 ms: 2.1.3 @@ -1655,12 +1655,12 @@ packages: - supports-color dev: true - /@prisma/engine-core/2.29.0-dev.37: - resolution: {integrity: sha512-ctPpRt+FKe8aNveKm9VNdYvF1vV6UjNuCII2h4Tfhve/QF5W7GkEDLhgrSq/hPLq7YRap9HrrBYvByL/eMUROQ==} + /@prisma/engine-core/2.29.0-dev.38: + resolution: {integrity: sha512-wYkSJvEffikmk4CFflk6NgpOeBrMgFf7M+Yq/0apvdRSBz9pcMEfzKKQ7WHS/nZpxVBH53F5zO1TtdXL9MvGaw==} dependencies: - '@prisma/debug': 2.29.0-dev.37 + '@prisma/debug': 2.29.0-dev.38 '@prisma/engines': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e - '@prisma/generator-helper': 2.29.0-dev.37 + '@prisma/generator-helper': 2.29.0-dev.38 '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e chalk: 4.1.2 execa: 5.1.1 @@ -1733,10 +1733,10 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/generator-helper/2.29.0-dev.37: - resolution: {integrity: sha512-Wvt51/lMyaKelGYDWf2hMPD+U8ISRvKpOPfhTChOY3GBwFKLPyr5mJqNhzUWx4Oop8zemUkj/X6AW7IudgeAzQ==} + /@prisma/generator-helper/2.29.0-dev.38: + resolution: {integrity: sha512-NLMoRNjVgvGFz9GcOh7q6IrSpkqQR8w0wD14iK/kxdaYwGLV0Yn+nI8fGs+DJ3zUOKSDcpmt+U3VyOtTE9E5iw==} dependencies: - '@prisma/debug': 2.29.0-dev.37 + '@prisma/debug': 2.29.0-dev.38 '@types/cross-spawn': 6.0.2 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -1759,14 +1759,14 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/sdk/2.29.0-dev.37: - resolution: {integrity: sha512-0XWk/fUrFvS6iwGEKRFa+ZnOtqEx0rvJYMIrQ7QKeA7pZ2KOkYPodV6U++4pfAX3koFJ87du+P0g2W+YDmkTNg==} + /@prisma/sdk/2.29.0-dev.38: + resolution: {integrity: sha512-y+57vqZZ9/kmYcghBY/Q6fyMs04C8xr6m6NogRItN8pWvi1R2X9nkYedugtWPvcnz5Yj7sC3gHo4hqx5uPvEFA==} dependencies: - '@prisma/debug': 2.29.0-dev.37 - '@prisma/engine-core': 2.29.0-dev.37 + '@prisma/debug': 2.29.0-dev.38 + '@prisma/engine-core': 2.29.0-dev.38 '@prisma/engines': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e '@prisma/fetch-engine': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e - '@prisma/generator-helper': 2.29.0-dev.37 + '@prisma/generator-helper': 2.29.0-dev.38 '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e '@timsuchanek/copy': 1.4.5 archiver: 4.0.2 @@ -1801,13 +1801,13 @@ packages: - supports-color dev: true - /@prisma/studio-pcw/0.418.0_@prisma+sdk@2.29.0-dev.37: + /@prisma/studio-pcw/0.418.0_@prisma+sdk@2.29.0-dev.38: resolution: {integrity: sha512-Ujt54DkAC6f+59LMdorR5e+iRpfCf2CeQ+ooAtPQSd9FZKsR81EqmVufc/PGn9zD/l5dc584mjqP1sjOReHy2Q==} peerDependencies: '@prisma/client': '*' '@prisma/sdk': '*' dependencies: - '@prisma/sdk': 2.29.0-dev.37 + '@prisma/sdk': 2.29.0-dev.38 debug: 4.3.1 lodash: 4.17.21 transitivePeerDependencies: @@ -1817,8 +1817,8 @@ packages: /@prisma/studio-server/0.418.0: resolution: {integrity: sha512-U8aMPLnvRMUuB1hW9+V+0JLF28lQGNiZFFEhwFleI8U6VYjlYBSTWX5d7anwGbTq3Q26K9DgvetjIEKWxaezBQ==} dependencies: - '@prisma/sdk': 2.29.0-dev.37 - '@prisma/studio-pcw': 0.418.0_@prisma+sdk@2.29.0-dev.37 + '@prisma/sdk': 2.29.0-dev.38 + '@prisma/studio-pcw': 0.418.0_@prisma+sdk@2.29.0-dev.38 '@prisma/studio-transports': 0.418.0 '@sentry/node': 6.2.5 checkpoint-client: 1.1.20 From 3f677ba568caf7343124a39f417dd19c00f3ed3b Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 6 Aug 2021 14:29:26 -0500 Subject: [PATCH 44/52] test(client, itx): add missing await --- .../integration/happy/interactive-transactions/test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts b/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts index 2bed4004e2c4..42b9e1a519ee 100644 --- a/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts +++ b/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts @@ -190,7 +190,7 @@ describe('interactive transaction', () => { */ test('already committed', async () => { let transactionBoundPrisma - prisma.$transaction((prisma) => { + await prisma.$transaction((prisma) => { transactionBoundPrisma = prisma }) From 6641a488ff74178e46d8e326df08ff330c4fbe33 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 6 Aug 2021 15:18:52 -0500 Subject: [PATCH 45/52] test(client, itx): fix race condition with timeout --- .../happy/interactive-transactions/test.ts | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts b/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts index 42b9e1a519ee..fd3c2a817c96 100644 --- a/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts +++ b/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts @@ -106,9 +106,9 @@ describe('interactive transaction', () => { }) /** - * A transaction should fail if it's called inside another transaction + * A transaction might fail if it's called inside another transaction */ - test('nested', async () => { + test('nested create', async () => { const result = prisma.$transaction(async (tx) => { await tx.user.create({ data: { @@ -116,13 +116,18 @@ describe('interactive transaction', () => { }, }) - await prisma.$transaction(async (prisma) => { - await prisma.user.create({ - data: { - email: 'user_2@website.com', - }, - }) - }) + await prisma.$transaction( + async (prisma) => { + await prisma.user.create({ + data: { + email: 'user_2@website.com', + }, + }) + }, + { + timeout: 1000, + }, + ) return tx.user.findMany() }) From 84910b622e1fb672eda46960a7a49d0b165fc3a3 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 6 Aug 2021 19:12:17 -0500 Subject: [PATCH 46/52] test(client, itx): disable nested --- .../integration/happy/interactive-transactions/test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts b/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts index fd3c2a817c96..e281f7eff9aa 100644 --- a/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts +++ b/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts @@ -107,8 +107,9 @@ describe('interactive transaction', () => { /** * A transaction might fail if it's called inside another transaction + * // TODO this does not behave the same for all dbs (sqlite) */ - test('nested create', async () => { + test.skip('nested create', async () => { const result = prisma.$transaction(async (tx) => { await tx.user.create({ data: { From befca0ae24c72cef59f3d588ae698fe0257be14e Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 6 Aug 2021 20:20:06 -0500 Subject: [PATCH 47/52] test(client, itx): add skipped test for maxWait --- .../happy/interactive-transactions/test.ts | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts b/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts index e281f7eff9aa..df2582d2d815 100644 --- a/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts +++ b/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts @@ -52,7 +52,7 @@ describe('interactive transaction', () => { }) /** - * Transactions should fail after the changed timeout + * Transactions should fail if they time out on `timeout` */ test('timeout override', async () => { const result = prisma.$transaction( @@ -82,6 +82,36 @@ describe('interactive transaction', () => { `) }) + /** + * Transactions should fail if they time out on `maxWait` + */ + test.skip('maxWait override', async () => { + const result = prisma.$transaction( + async (prisma) => { + await prisma.user.create({ + data: { + email: 'user_1@website.com', + }, + }) + + await new Promise((res) => setTimeout(res, 5)) + + return prisma.user.findMany() + }, + { + maxWait: 0, + }, + ) + + await expect(result).rejects.toThrowErrorMatchingInlineSnapshot(` + + Invalid \`prisma.user.findMany()\` invocation: + + + Transaction API error: Transaction already closed: Transaction is no longer valid. Last state: 'Expired'. + `) + }) + /** * Transactions should fail and rollback if thrown within */ From b66e2d0f97a1066560aaca3ecf982879c74ffa3e Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 6 Aug 2021 21:58:09 -0500 Subject: [PATCH 48/52] fix(client, itx): types for options --- packages/client/src/generation/TSClient/PrismaClient.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/client/src/generation/TSClient/PrismaClient.ts b/packages/client/src/generation/TSClient/PrismaClient.ts index 9fc57e34a894..8204eb5baa97 100644 --- a/packages/client/src/generation/TSClient/PrismaClient.ts +++ b/packages/client/src/generation/TSClient/PrismaClient.ts @@ -10,8 +10,9 @@ import { Generatable } from './Generatable' function interactiveTransactionDefinition() { const txPrismaClient = `Omit` + const txOptions = `{ maxWait?: number, timeout?: number }` - return `$transaction(fn: (prisma: ${txPrismaClient}) => Promise): Promise` + return `$transaction(fn: (prisma: ${txPrismaClient}) => Promise, options?: ${txOptions}): Promise` } export class PrismaClientClass implements Generatable { From 1326839ba191f9cb52d980dea926f8ec573ab138 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Fri, 6 Aug 2021 22:03:10 -0500 Subject: [PATCH 49/52] fix(client, itx): line break type gen --- packages/client/src/generation/TSClient/PrismaClient.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/client/src/generation/TSClient/PrismaClient.ts b/packages/client/src/generation/TSClient/PrismaClient.ts index 8204eb5baa97..4fb264b876bc 100644 --- a/packages/client/src/generation/TSClient/PrismaClient.ts +++ b/packages/client/src/generation/TSClient/PrismaClient.ts @@ -12,7 +12,8 @@ function interactiveTransactionDefinition() { const txPrismaClient = `Omit` const txOptions = `{ maxWait?: number, timeout?: number }` - return `$transaction(fn: (prisma: ${txPrismaClient}) => Promise, options?: ${txOptions}): Promise` + return ` + $transaction(fn: (prisma: ${txPrismaClient}) => Promise, options?: ${txOptions}): Promise` } export class PrismaClientClass implements Generatable { From 271ab26ab77f263006628226bc6df36b256519ea Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Mon, 9 Aug 2021 08:19:01 -0500 Subject: [PATCH 50/52] chore(prisma): review cleanup --- .../happy/interactive-transactions/test.ts | 6 ---- .../client/src/runtime/getPrismaClient.ts | 7 ++-- packages/engine-core/src/common/Engine.ts | 7 ++-- .../src/common/types/Transaction.ts | 4 +++ .../engine-core/src/library/LibraryEngine.ts | 2 +- .../engine-core/src/library/types/Library.ts | 4 +-- pnpm-lock.yaml | 36 +++++++++---------- 7 files changed, 31 insertions(+), 35 deletions(-) diff --git a/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts b/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts index df2582d2d815..363bfcb16736 100644 --- a/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts +++ b/packages/client/src/__tests__/integration/happy/interactive-transactions/test.ts @@ -391,12 +391,6 @@ Invalid \`prisma.user.create()\` invocation: beforeAll(async () => { PrismaClient = await getTestClient() - - process.env.PRISMA_FORCE_LRT = 'true' -}) - -afterAll(() => { - delete process.env.PRISMA_FORCE_LRT }) beforeEach(async () => { diff --git a/packages/client/src/runtime/getPrismaClient.ts b/packages/client/src/runtime/getPrismaClient.ts index 98750c03d685..48ef1ad76708 100644 --- a/packages/client/src/runtime/getPrismaClient.ts +++ b/packages/client/src/runtime/getPrismaClient.ts @@ -247,6 +247,8 @@ const aggregateKeys = { max: true, } +// TODO improve all these types, need a common place to share them between type +// gen and this. This will be relevant relevant for type gen tech debt refactor export interface Client { _dmmf: DMMFClass _engine: Engine @@ -272,7 +274,6 @@ export interface Client { ) $queryRaw(stringOrTemplateStringsArray) __internal_triggerPanic(fatal: boolean) - $___transaction(promises: Array): Promise $transaction(input: any, options?: any) } @@ -938,7 +939,7 @@ new PrismaClient({ /** * @deprecated */ - async $___transaction(promises: Array): Promise { + private async $___transaction(promises: Array): Promise { try { return this.$___transactionInternal(promises) } catch (e) { @@ -1488,7 +1489,7 @@ const forbidden = ['$connect', '$disconnect', '$on', '$transaction', '$use'] * @returns */ function transactionProxy(thing: T, transactionId: string): T { - // we only wrap within a proxy if it's posible, if it's an object + // we only wrap within a proxy if it's possible: if it's an object if (typeof thing !== 'object') return thing return new Proxy(thing as any as object, { diff --git a/packages/engine-core/src/common/Engine.ts b/packages/engine-core/src/common/Engine.ts index ad106c506955..46d86c01eba8 100644 --- a/packages/engine-core/src/common/Engine.ts +++ b/packages/engine-core/src/common/Engine.ts @@ -31,14 +31,11 @@ export abstract class Engine { action: 'start', options?: Transaction.Options, ): Promise - abstract transaction( - action: 'commit', - info: Transaction.Info, - ): Promise + abstract transaction(action: 'commit', info: Transaction.Info): Promise abstract transaction( action: 'rollback', info: Transaction.Info, - ): Promise + ): Promise } export type EngineEventType = 'query' | 'info' | 'warn' | 'error' | 'beforeExit' diff --git a/packages/engine-core/src/common/types/Transaction.ts b/packages/engine-core/src/common/types/Transaction.ts index 12dea2f28b7a..3be3ad8f8574 100644 --- a/packages/engine-core/src/common/types/Transaction.ts +++ b/packages/engine-core/src/common/types/Transaction.ts @@ -1,3 +1,7 @@ +/** + * maxWait ?= 2000 + * timeout ?= 5000 + */ export type Options = { maxWait?: number timeout?: number diff --git a/packages/engine-core/src/library/LibraryEngine.ts b/packages/engine-core/src/library/LibraryEngine.ts index 1a98ddfd3add..927f17fd1e43 100644 --- a/packages/engine-core/src/library/LibraryEngine.ts +++ b/packages/engine-core/src/library/LibraryEngine.ts @@ -488,7 +488,7 @@ You may have to run ${chalk.greenBright( this.lastQuery = JSON.stringify(request) this.executingQueryPromise = this.engine!.query( this.lastQuery, - JSON.stringify(headers), + JSON.stringify(headers), // TODO these aren't headers on the engine side headers.transactionId, ) const result = await this.executingQueryPromise diff --git a/packages/engine-core/src/library/types/Library.ts b/packages/engine-core/src/library/types/Library.ts index 470d482b2f60..ba4a99ad0996 100644 --- a/packages/engine-core/src/library/types/Library.ts +++ b/packages/engine-core/src/library/types/Library.ts @@ -18,8 +18,8 @@ export type QueryEngineInstance = { * @param headers JSON.stringified `QueryEngineRequestHeaders` */ query( - request: string, - headers: string, + requestStr: string, + headersStr: string, transactionId?: string, ): Promise sdlSchema(): Promise diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 676203376361..abe561eb24d8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1646,8 +1646,8 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/debug/2.29.0-dev.38: - resolution: {integrity: sha512-wELPmwXIWOrf9jb1ml1QJ3oM/izA53d5+qnMg2Ggw13fkahJvl7EDbqCQbIAQtdhs1qOeWfuRk9aG7Txi7y43w==} + /@prisma/debug/2.29.0-dev.41: + resolution: {integrity: sha512-zFyf+9LHo09N+lmtJKApABNcsvGIJ7DJMAGX+f9rx2ZS8OpgN5f+bYpzQXrR3aeb4r98j7V4Zsz0DhVSFKMCjw==} dependencies: debug: 4.3.2 ms: 2.1.3 @@ -1655,12 +1655,12 @@ packages: - supports-color dev: true - /@prisma/engine-core/2.29.0-dev.38: - resolution: {integrity: sha512-wYkSJvEffikmk4CFflk6NgpOeBrMgFf7M+Yq/0apvdRSBz9pcMEfzKKQ7WHS/nZpxVBH53F5zO1TtdXL9MvGaw==} + /@prisma/engine-core/2.29.0-dev.41: + resolution: {integrity: sha512-j7AdX2rFoBoSKialbKUz5xDfbQTBIn0xWfGPAVgDyHWtAaeRTJUaZPCtvVr6GYT4NCtnQqWIYiJWOxx5bXE+PQ==} dependencies: - '@prisma/debug': 2.29.0-dev.38 + '@prisma/debug': 2.29.0-dev.41 '@prisma/engines': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e - '@prisma/generator-helper': 2.29.0-dev.38 + '@prisma/generator-helper': 2.29.0-dev.41 '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e chalk: 4.1.2 execa: 5.1.1 @@ -1733,10 +1733,10 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/generator-helper/2.29.0-dev.38: - resolution: {integrity: sha512-NLMoRNjVgvGFz9GcOh7q6IrSpkqQR8w0wD14iK/kxdaYwGLV0Yn+nI8fGs+DJ3zUOKSDcpmt+U3VyOtTE9E5iw==} + /@prisma/generator-helper/2.29.0-dev.41: + resolution: {integrity: sha512-OSpUdYELq8pGpAE4vxXT2s3nvhA5q1azywJUqtxufzre541OY+/scE/NRz95Zdm6B7R8D9bjL2xVPQx2uiEMwg==} dependencies: - '@prisma/debug': 2.29.0-dev.38 + '@prisma/debug': 2.29.0-dev.41 '@types/cross-spawn': 6.0.2 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -1759,14 +1759,14 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/sdk/2.29.0-dev.38: - resolution: {integrity: sha512-y+57vqZZ9/kmYcghBY/Q6fyMs04C8xr6m6NogRItN8pWvi1R2X9nkYedugtWPvcnz5Yj7sC3gHo4hqx5uPvEFA==} + /@prisma/sdk/2.29.0-dev.41: + resolution: {integrity: sha512-vABLbTczoWGDb4czj2lEyifZ+oubELoBQFdYE9dfVHPx+KSXWFxKKU7s6qS69PgxC9fHNB2qMtoXF8fLqBSA/w==} dependencies: - '@prisma/debug': 2.29.0-dev.38 - '@prisma/engine-core': 2.29.0-dev.38 + '@prisma/debug': 2.29.0-dev.41 + '@prisma/engine-core': 2.29.0-dev.41 '@prisma/engines': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e '@prisma/fetch-engine': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e - '@prisma/generator-helper': 2.29.0-dev.38 + '@prisma/generator-helper': 2.29.0-dev.41 '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e '@timsuchanek/copy': 1.4.5 archiver: 4.0.2 @@ -1801,13 +1801,13 @@ packages: - supports-color dev: true - /@prisma/studio-pcw/0.418.0_@prisma+sdk@2.29.0-dev.38: + /@prisma/studio-pcw/0.418.0_@prisma+sdk@2.29.0-dev.41: resolution: {integrity: sha512-Ujt54DkAC6f+59LMdorR5e+iRpfCf2CeQ+ooAtPQSd9FZKsR81EqmVufc/PGn9zD/l5dc584mjqP1sjOReHy2Q==} peerDependencies: '@prisma/client': '*' '@prisma/sdk': '*' dependencies: - '@prisma/sdk': 2.29.0-dev.38 + '@prisma/sdk': 2.29.0-dev.41 debug: 4.3.1 lodash: 4.17.21 transitivePeerDependencies: @@ -1817,8 +1817,8 @@ packages: /@prisma/studio-server/0.418.0: resolution: {integrity: sha512-U8aMPLnvRMUuB1hW9+V+0JLF28lQGNiZFFEhwFleI8U6VYjlYBSTWX5d7anwGbTq3Q26K9DgvetjIEKWxaezBQ==} dependencies: - '@prisma/sdk': 2.29.0-dev.38 - '@prisma/studio-pcw': 0.418.0_@prisma+sdk@2.29.0-dev.38 + '@prisma/sdk': 2.29.0-dev.41 + '@prisma/studio-pcw': 0.418.0_@prisma+sdk@2.29.0-dev.41 '@prisma/studio-transports': 0.418.0 '@sentry/node': 6.2.5 checkpoint-client: 1.1.20 From cfac306d8245b219516c2bcdf7454682d0a75aad Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Mon, 9 Aug 2021 08:19:48 -0500 Subject: [PATCH 51/52] chore(prisma): review cleanup --- packages/engine-core/src/library/types/Library.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/engine-core/src/library/types/Library.ts b/packages/engine-core/src/library/types/Library.ts index ba4a99ad0996..16fbbf8d82cf 100644 --- a/packages/engine-core/src/library/types/Library.ts +++ b/packages/engine-core/src/library/types/Library.ts @@ -12,10 +12,8 @@ export type QueryEngineInstance = { connect(connectArgs: ConnectArgs): Promise disconnect(): Promise /** - * - * @param request JSON.stringified `QueryEngineRequest | QueryEngineBatchRequest` - * - * @param headers JSON.stringified `QueryEngineRequestHeaders` + * @param requestStr JSON.stringified `QueryEngineRequest | QueryEngineBatchRequest` + * @param headersStr JSON.stringified `QueryEngineRequestHeaders` */ query( requestStr: string, From 94cd6c62b8169e1ed661b7fc460a5c12f0f797ab Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Mills Date: Mon, 9 Aug 2021 11:04:53 -0500 Subject: [PATCH 52/52] chore(prisma): bump engines --- packages/cli/package.json | 6 +- packages/client/package.json | 8 +- .../happy/interactive-transactions/dev.db | Bin 45056 -> 45056 bytes packages/engine-core/package.json | 4 +- packages/integration-tests/package.json | 2 +- packages/migrate/package.json | 4 +- packages/sdk/package.json | 6 +- pnpm-lock.yaml | 142 +++++++++--------- 8 files changed, 86 insertions(+), 86 deletions(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index 854c87d6445b..acc1384d7e9a 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -63,9 +63,9 @@ "devDependencies": { "@prisma/client": "workspace:*", "@prisma/debug": "workspace:*", - "@prisma/fetch-engine": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", + "@prisma/fetch-engine": "2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66", "@prisma/generator-helper": "workspace:*", - "@prisma/get-platform": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", + "@prisma/get-platform": "2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66", "@prisma/migrate": "workspace:*", "@prisma/sdk": "workspace:*", "@prisma/studio-server": "0.419.0", @@ -127,7 +127,7 @@ "precommit": "lint-staged" }, "dependencies": { - "@prisma/engines": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8" + "@prisma/engines": "2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66" }, "lint-staged": { "*.ts": [ diff --git a/packages/client/package.json b/packages/client/package.json index f188d740b58e..0e3c7d81c964 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -61,10 +61,10 @@ "devDependencies": { "@prisma/debug": "workspace:*", "@prisma/engine-core": "workspace:*", - "@prisma/engines": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", - "@prisma/fetch-engine": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", + "@prisma/engines": "2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66", + "@prisma/fetch-engine": "2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66", "@prisma/generator-helper": "workspace:*", - "@prisma/get-platform": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", + "@prisma/get-platform": "2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66", "@prisma/migrate": "workspace:*", "@prisma/sdk": "workspace:*", "@timsuchanek/copy": "1.4.5", @@ -128,7 +128,7 @@ } }, "dependencies": { - "@prisma/engines-version": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8" + "@prisma/engines-version": "2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66" }, "lint-staged": { "*.ts": [ diff --git a/packages/client/src/__tests__/integration/happy/interactive-transactions/dev.db b/packages/client/src/__tests__/integration/happy/interactive-transactions/dev.db index 8b00b4543b0883a50b3c58225c6d27d8c3187aa1..2349d693229e27ac1e076040d20cdadf6286f99b 100644 GIT binary patch delta 201 zcmZp8z|`=7X@WFk$3z)t#*U2%!TP@DCTT{AMoCG!NtUK*x+Y0RmbyviCdRr(mMO-m zX{Je*sYb?3>dc{>iDs$hDQTuAx`wI7sk$ac7HPVPCPrquK!%~AfoYnFX|mxag9ZEv k#F%Ks$YL1EP+FW?6mRHIo|;sgS(2)koS#dKC5s#i0GzNmu>b%7 delta 201 zcmZp8z|`=7X@WFk!$cWp#)gdv!TP=y2F7WoY363SW@ag7x+aFE#<~_M1}3^G#ujF# zCKi^7mWIhp>dc{>hDJsfsmaD^x`~NE)h4M17P^VahNily=9ZR;24)tNSw l5M!bhBa2}uLuqkpQM{o;d1_K|W=X1Ea(*r`mMn580048pHbVda diff --git a/packages/engine-core/package.json b/packages/engine-core/package.json index a8eadec74a1c..36074ef51b79 100644 --- a/packages/engine-core/package.json +++ b/packages/engine-core/package.json @@ -45,9 +45,9 @@ }, "dependencies": { "@prisma/debug": "workspace:*", - "@prisma/engines": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", + "@prisma/engines": "2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66", "@prisma/generator-helper": "workspace:*", - "@prisma/get-platform": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", + "@prisma/get-platform": "2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66", "chalk": "4.1.2", "execa": "5.1.1", "get-stream": "6.0.1", diff --git a/packages/integration-tests/package.json b/packages/integration-tests/package.json index d531df21393e..695bc9b6c930 100644 --- a/packages/integration-tests/package.json +++ b/packages/integration-tests/package.json @@ -9,7 +9,7 @@ "repository": "git@github.com:prisma/prisma.git", "devDependencies": { "@prisma/client": "workspace:*", - "@prisma/get-platform": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", + "@prisma/get-platform": "2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66", "@prisma/migrate": "workspace:*", "@prisma/sdk": "workspace:*", "@sindresorhus/slugify": "1.1.2", diff --git a/packages/migrate/package.json b/packages/migrate/package.json index c73069ab149c..87c50a7f6a6d 100644 --- a/packages/migrate/package.json +++ b/packages/migrate/package.json @@ -16,7 +16,7 @@ "version": "latest" }, "devDependencies": { - "@prisma/engines-version": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", + "@prisma/engines-version": "2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66", "@prisma/generator-helper": "workspace:*", "@prisma/sdk": "workspace:*", "@types/jest": "26.0.24", @@ -55,7 +55,7 @@ }, "dependencies": { "@prisma/debug": "workspace:*", - "@prisma/get-platform": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", + "@prisma/get-platform": "2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66", "@sindresorhus/slugify": "1.1.2", "execa": "5.1.1", "global-dirs": "3.0.0", diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 0b6ef4a0e535..78cf1abb44eb 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -53,10 +53,10 @@ "dependencies": { "@prisma/debug": "workspace:*", "@prisma/engine-core": "workspace:*", - "@prisma/engines": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", - "@prisma/fetch-engine": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", + "@prisma/engines": "2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66", + "@prisma/fetch-engine": "2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66", "@prisma/generator-helper": "workspace:*", - "@prisma/get-platform": "2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8", + "@prisma/get-platform": "2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66", "@timsuchanek/copy": "1.4.5", "archiver": "4.0.2", "arg": "5.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6da2ca239f08..f22014a6ecac 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -82,10 +82,10 @@ importers: specifiers: '@prisma/client': workspace:* '@prisma/debug': workspace:* - '@prisma/engines': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 - '@prisma/fetch-engine': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/engines': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 + '@prisma/fetch-engine': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/get-platform': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@prisma/migrate': workspace:* '@prisma/sdk': workspace:* '@prisma/studio-server': 0.419.0 @@ -130,13 +130,13 @@ importers: ts-jest: 27.0.4 typescript: 4.3.5 dependencies: - '@prisma/engines': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/engines': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 devDependencies: '@prisma/client': link:../client '@prisma/debug': link:../debug - '@prisma/fetch-engine': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/fetch-engine': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@prisma/generator-helper': link:../generator-helper - '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/get-platform': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@prisma/migrate': link:../migrate '@prisma/sdk': link:../sdk '@prisma/studio-server': 0.419.0 @@ -185,11 +185,11 @@ importers: specifiers: '@prisma/debug': workspace:* '@prisma/engine-core': workspace:* - '@prisma/engines': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 - '@prisma/engines-version': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 - '@prisma/fetch-engine': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/engines': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 + '@prisma/engines-version': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 + '@prisma/fetch-engine': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/get-platform': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@prisma/migrate': workspace:* '@prisma/sdk': workspace:* '@timsuchanek/copy': 1.4.5 @@ -244,14 +244,14 @@ importers: tsd: 0.17.0 typescript: 4.3.5 dependencies: - '@prisma/engines-version': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/engines-version': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 devDependencies: '@prisma/debug': link:../debug '@prisma/engine-core': link:../engine-core - '@prisma/engines': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 - '@prisma/fetch-engine': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/engines': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 + '@prisma/fetch-engine': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@prisma/generator-helper': link:../generator-helper - '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/get-platform': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@prisma/migrate': link:../migrate '@prisma/sdk': link:../sdk '@timsuchanek/copy': 1.4.5 @@ -356,9 +356,9 @@ importers: packages/engine-core: specifiers: '@prisma/debug': workspace:* - '@prisma/engines': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/engines': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/get-platform': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@types/jest': 26.0.24 '@types/node': 12.20.18 '@typescript-eslint/eslint-plugin': 4.29.0 @@ -386,9 +386,9 @@ importers: undici: 3.3.6 dependencies: '@prisma/debug': link:../debug - '@prisma/engines': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/engines': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@prisma/generator-helper': link:../generator-helper - '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/get-platform': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 chalk: 4.1.2 execa: 5.1.1 get-stream: 6.0.1 @@ -466,7 +466,7 @@ importers: packages/integration-tests: specifiers: '@prisma/client': workspace:* - '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/get-platform': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@prisma/migrate': workspace:* '@prisma/sdk': workspace:* '@sindresorhus/slugify': 1.1.2 @@ -507,7 +507,7 @@ importers: verror: 1.10.0 devDependencies: '@prisma/client': link:../client - '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/get-platform': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@prisma/migrate': link:../migrate '@prisma/sdk': link:../sdk '@sindresorhus/slugify': 1.1.2 @@ -550,9 +550,9 @@ importers: packages/migrate: specifiers: '@prisma/debug': workspace:* - '@prisma/engines-version': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/engines-version': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/get-platform': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@prisma/sdk': workspace:* '@sindresorhus/slugify': 1.1.2 '@types/jest': 26.0.24 @@ -598,7 +598,7 @@ importers: typescript: 4.3.5 dependencies: '@prisma/debug': link:../debug - '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/get-platform': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@sindresorhus/slugify': 1.1.2 execa: 5.1.1 global-dirs: 3.0.0 @@ -613,7 +613,7 @@ importers: strip-ansi: 6.0.0 strip-indent: 3.0.0 devDependencies: - '@prisma/engines-version': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/engines-version': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@prisma/generator-helper': link:../generator-helper '@prisma/sdk': link:../sdk '@types/jest': 26.0.24 @@ -692,10 +692,10 @@ importers: specifiers: '@prisma/debug': workspace:* '@prisma/engine-core': workspace:* - '@prisma/engines': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 - '@prisma/fetch-engine': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/engines': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 + '@prisma/fetch-engine': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@prisma/generator-helper': workspace:* - '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/get-platform': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@timsuchanek/copy': 1.4.5 '@types/jest': 26.0.24 '@types/node': 12.20.18 @@ -748,10 +748,10 @@ importers: dependencies: '@prisma/debug': link:../debug '@prisma/engine-core': link:../engine-core - '@prisma/engines': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 - '@prisma/fetch-engine': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/engines': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 + '@prisma/fetch-engine': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@prisma/generator-helper': link:../generator-helper - '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/get-platform': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 '@timsuchanek/copy': 1.4.5 archiver: 4.0.2 arg: 5.0.0 @@ -1646,8 +1646,8 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/debug/2.29.0-dev.41: - resolution: {integrity: sha512-zFyf+9LHo09N+lmtJKApABNcsvGIJ7DJMAGX+f9rx2ZS8OpgN5f+bYpzQXrR3aeb4r98j7V4Zsz0DhVSFKMCjw==} + /@prisma/debug/2.29.0-dev.44: + resolution: {integrity: sha512-gQGHbUnZJeuJR97ChytQZxynJ+dfCH7iKnsk6QMyQyLCzejVQoXA7KeU69DV61pFFgCL4F9HzOnv0LLf65H+SQ==} dependencies: debug: 4.3.2 ms: 2.1.3 @@ -1655,13 +1655,13 @@ packages: - supports-color dev: true - /@prisma/engine-core/2.29.0-dev.41: - resolution: {integrity: sha512-j7AdX2rFoBoSKialbKUz5xDfbQTBIn0xWfGPAVgDyHWtAaeRTJUaZPCtvVr6GYT4NCtnQqWIYiJWOxx5bXE+PQ==} + /@prisma/engine-core/2.29.0-dev.44: + resolution: {integrity: sha512-PotoP1j4vSfD3yjenFsJ1YYxabgMZH3tsjRZy+SA6BO0LpeiN+4AnKwMMbXpl70UJrQy1BqXfC66NJuNIU4b2A==} dependencies: - '@prisma/debug': 2.29.0-dev.41 - '@prisma/engines': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e - '@prisma/generator-helper': 2.29.0-dev.41 - '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/debug': 2.29.0-dev.44 + '@prisma/engines': 2.29.0-30.aaf86a8e39c1fd471bf24f732dab3d7b7496dfac + '@prisma/generator-helper': 2.29.0-dev.44 + '@prisma/get-platform': 2.29.0-30.aaf86a8e39c1fd471bf24f732dab3d7b7496dfac chalk: 4.1.2 execa: 5.1.1 get-stream: 6.0.1 @@ -1674,23 +1674,23 @@ packages: - supports-color dev: true - /@prisma/engines-version/2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8: - resolution: {integrity: sha512-bNEMApsiBLb1+X6YwmOfaUVCF96b4HwdqUSJAGc3IQzT163JMlefVqlXWfYbUBqWTnZluobBqxurs40mvSj86Q==} + /@prisma/engines-version/2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66: + resolution: {integrity: sha512-Rr57EARu1oW2xyczRQ1H6WoScfMB4j3+BG280ksV6LZ90w7AwqH30ei2oBLiwGT8VJh1pupGbNmcQXYl5JQoTQ==} - /@prisma/engines/2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e: - resolution: {integrity: sha512-TgATt2FBnzpOqgZVz9xZizOtH3rpflUMUJyc1XuKaSWptn0TmsrpEGO+WTRXhpIqrhw/552RkSOkY7DPtxSPSg==} + /@prisma/engines/2.29.0-30.aaf86a8e39c1fd471bf24f732dab3d7b7496dfac: + resolution: {integrity: sha512-sdX7vg/TWVTztwO1eiOBkoYds8+8QtYgrqN1zbRi4x4XY4cQdDdGex0xOT5531so0lzdOybHMvZX28lFngNRDw==} requiresBuild: true dev: true - /@prisma/engines/2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8: - resolution: {integrity: sha512-nKFoQ3e+QzzjWo2ZiN0HCdtkquvQe77qOxaZuwAN5GjscOSoPPD/ylJF+PTOaIiOW3806iSfh8Sb794ZHMguRg==} + /@prisma/engines/2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66: + resolution: {integrity: sha512-fvJVTTHnSTgsBFmdwu4IEoMhgOtJH6yddihuVGEFQ8Qh83Eyi0EZb3C+UkS7eWTy539fwGMSb/I4V9JYueO5/Q==} requiresBuild: true - /@prisma/fetch-engine/2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e: - resolution: {integrity: sha512-jYVqAvMcVzn9HDJif+Xz2lRRli9AO+GJk+U0ja6mDECV7k9KZvoA5SZqHAtDD0XWzVp1lwG32qarMcHFk7cC7g==} + /@prisma/fetch-engine/2.29.0-30.aaf86a8e39c1fd471bf24f732dab3d7b7496dfac: + resolution: {integrity: sha512-axmDS+PQy1WvFLo/K/0Snx7RxzAK/weShyKWtC97PqtTu5uz+vFtpVz4PqpSNYHhJAEolnvtZO2jqpSMqxXwHg==} dependencies: '@prisma/debug': 2.28.0 - '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/get-platform': 2.29.0-30.aaf86a8e39c1fd471bf24f732dab3d7b7496dfac chalk: 4.1.2 execa: 5.1.1 find-cache-dir: 3.3.1 @@ -1710,11 +1710,11 @@ packages: - supports-color dev: true - /@prisma/fetch-engine/2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8: - resolution: {integrity: sha512-XoWFFNRnMhOKFL+5ec7IaOMqE9RFzh0fNC2lfo7l6/+37jmvPy2dB/3pIrQmH8v66npNeas9vyqbjjkFj/1qIg==} + /@prisma/fetch-engine/2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66: + resolution: {integrity: sha512-65tvhLy/0xja+ugiEt5CPRh0A5e2z6OSD4QvmSgGt1dG5oBI7YLTOSZBronW/kz1ZXLJUymC9RgGkWvOEVQ3Yw==} dependencies: '@prisma/debug': 2.28.0 - '@prisma/get-platform': 2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8 + '@prisma/get-platform': 2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66 chalk: 4.1.2 execa: 5.1.1 find-cache-dir: 3.3.1 @@ -1733,10 +1733,10 @@ packages: transitivePeerDependencies: - supports-color - /@prisma/generator-helper/2.29.0-dev.41: - resolution: {integrity: sha512-OSpUdYELq8pGpAE4vxXT2s3nvhA5q1azywJUqtxufzre541OY+/scE/NRz95Zdm6B7R8D9bjL2xVPQx2uiEMwg==} + /@prisma/generator-helper/2.29.0-dev.44: + resolution: {integrity: sha512-eHrR8QtRIQWslflZKb+oAjnEYj+hhYrY82/I4Y4SCN1RpC6GwpfSFLMpn3gC2xGf74gmgYJmurs+DCEAn3scwQ==} dependencies: - '@prisma/debug': 2.29.0-dev.41 + '@prisma/debug': 2.29.0-dev.44 '@types/cross-spawn': 6.0.2 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -1744,30 +1744,30 @@ packages: - supports-color dev: true - /@prisma/get-platform/2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e: - resolution: {integrity: sha512-DdPhyHTfD9UtW/h5LR0hiOuBBf60de0Pna5Bs70cGO91w7mXP1kQaETdn1viYBVL7ZCk2ubL/geXe/LQEFDklg==} + /@prisma/get-platform/2.29.0-30.aaf86a8e39c1fd471bf24f732dab3d7b7496dfac: + resolution: {integrity: sha512-kqMEoSnukk2ReRvDcl2IzhtjiehRbrQklzj7MwGlygV2LZacbqR33vUgKFXCjgybTM6CcfxV6nYumV/yQIPuyg==} dependencies: '@prisma/debug': 2.28.0 transitivePeerDependencies: - supports-color dev: true - /@prisma/get-platform/2.29.0-27.query-engine-lrts-4e355054bff7d6c7c018a5bf5c3883d13069ffb8: - resolution: {integrity: sha512-fgtw3L4KSmrDgZWvqg+o2PBjQqwjTwpA+8vZPAFmRIod2sYwg3z3KdnGR2ogKEFulRP57+Onk8EMG90/UsPdLw==} + /@prisma/get-platform/2.29.0-32.36af3f44e00e1f6ae2ef08ebf105fb0120b43a66: + resolution: {integrity: sha512-kahJKf6nwsr6RLcDDZpxrx9y0RL6O+nYKKvNLDkX3FBAlRSGIxC4NE8xyE4STNAgu01TOqWKbnhZgEjBeyM21Q==} dependencies: '@prisma/debug': 2.28.0 transitivePeerDependencies: - supports-color - /@prisma/sdk/2.29.0-dev.41: - resolution: {integrity: sha512-vABLbTczoWGDb4czj2lEyifZ+oubELoBQFdYE9dfVHPx+KSXWFxKKU7s6qS69PgxC9fHNB2qMtoXF8fLqBSA/w==} + /@prisma/sdk/2.29.0-dev.44: + resolution: {integrity: sha512-PvyEnwJNo+KAIMh5daS1C1crdOdBiNJBuOnl0MYla3K3Y0/e2SoEZQK3hZqh7JeiD4158Jqsq7UjBhYhLyI9vg==} dependencies: - '@prisma/debug': 2.29.0-dev.41 - '@prisma/engine-core': 2.29.0-dev.41 - '@prisma/engines': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e - '@prisma/fetch-engine': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e - '@prisma/generator-helper': 2.29.0-dev.41 - '@prisma/get-platform': 2.29.0-25.f1238e20399c9d3dc91301ebca69230503301f6e + '@prisma/debug': 2.29.0-dev.44 + '@prisma/engine-core': 2.29.0-dev.44 + '@prisma/engines': 2.29.0-30.aaf86a8e39c1fd471bf24f732dab3d7b7496dfac + '@prisma/fetch-engine': 2.29.0-30.aaf86a8e39c1fd471bf24f732dab3d7b7496dfac + '@prisma/generator-helper': 2.29.0-dev.44 + '@prisma/get-platform': 2.29.0-30.aaf86a8e39c1fd471bf24f732dab3d7b7496dfac '@timsuchanek/copy': 1.4.5 archiver: 4.0.2 arg: 5.0.0 @@ -1801,13 +1801,13 @@ packages: - supports-color dev: true - /@prisma/studio-pcw/0.418.0_@prisma+sdk@2.29.0-dev.41: - resolution: {integrity: sha512-Ujt54DkAC6f+59LMdorR5e+iRpfCf2CeQ+ooAtPQSd9FZKsR81EqmVufc/PGn9zD/l5dc584mjqP1sjOReHy2Q==} + /@prisma/studio-pcw/0.419.0_@prisma+sdk@2.29.0-dev.44: + resolution: {integrity: sha512-74YPH6COysslPnmt/qq12A4iJCgUur1fXilmmD2s71s/iJrkmZ9h5Z6BQe9LjMW9K3Byz99G7xD6vVMajYjSWA==} peerDependencies: '@prisma/client': '*' '@prisma/sdk': '*' dependencies: - '@prisma/sdk': 2.29.0-dev.41 + '@prisma/sdk': 2.29.0-dev.44 debug: 4.3.1 lodash: 4.17.21 transitivePeerDependencies: @@ -1817,9 +1817,9 @@ packages: /@prisma/studio-server/0.419.0: resolution: {integrity: sha512-b6zY2PV/4fyfTi7VlMYPrB+nJUH94IIQb42z1uYHPTJhEZy1NrjZr3pmTVcyMUS2KR+04ySJ85fol/lOodS5qQ==} dependencies: - '@prisma/sdk': 2.29.0-dev.41 - '@prisma/studio-pcw': 0.418.0_@prisma+sdk@2.29.0-dev.41 - '@prisma/studio-transports': 0.418.0 + '@prisma/sdk': 2.29.0-dev.44 + '@prisma/studio-pcw': 0.419.0_@prisma+sdk@2.29.0-dev.44 + '@prisma/studio-transports': 0.419.0 '@sentry/node': 6.2.5 checkpoint-client: 1.1.20 cors: 2.8.5