diff --git a/src/packages/cli/src/__tests__/__snapshots__/generate.test.ts.snap b/src/packages/cli/src/__tests__/__snapshots__/generate.test.ts.snap index 39d55f8ca042..ccaba3b9bdfa 100644 --- a/src/packages/cli/src/__tests__/__snapshots__/generate.test.ts.snap +++ b/src/packages/cli/src/__tests__/__snapshots__/generate.test.ts.snap @@ -3,7 +3,7 @@ exports[`should work with a custom output dir 1`] = ` Prisma schema loaded from prisma/schema.prisma -✔ Generated Prisma Client (2.11.0-dev.20) to ./generated/client in XXms +✔ Generated Prisma Client (2.13.1) to ./generated/client in XXms You can now start using Prisma Client in your code. Reference: https://pris.ly/d/client \`\`\` import { PrismaClient } from './generated/client' diff --git a/src/packages/cli/src/__tests__/__snapshots__/version.test.ts.snap b/src/packages/cli/src/__tests__/__snapshots__/version.test.ts.snap index dff19fd8b359..aae1216fe30e 100644 --- a/src/packages/cli/src/__tests__/__snapshots__/version.test.ts.snap +++ b/src/packages/cli/src/__tests__/__snapshots__/version.test.ts.snap @@ -2,22 +2,22 @@ exports[`version basic version 1`] = ` @prisma/cli : 2.11.0-dev.20 -@prisma/client : 2.11.0-dev.20 +@prisma/client : 2.13.1 Current platform : TEST_PLATFORM -Query Engine : query-engine dfc9594ba25725d1eb319314b9cb6a229aa43573 -Migration Engine : migration-engine-cli dfc9594ba25725d1eb319314b9cb6a229aa43573 -Introspection Engine : introspection-core dfc9594ba25725d1eb319314b9cb6a229aa43573 -Format Binary : prisma-fmt dfc9594ba25725d1eb319314b9cb6a229aa43573 -Studio : 0.327.0 +Query Engine : query-engine 59cf08bf47e90cb37532900059f3328b4328237c +Migration Engine : migration-engine-cli 59cf08bf47e90cb37532900059f3328b4328237c +Introspection Engine : introspection-core 59cf08bf47e90cb37532900059f3328b4328237c +Format Binary : prisma-fmt 59cf08bf47e90cb37532900059f3328b4328237c +Studio : 0.332.0 `; exports[`version version with custom binaries 1`] = ` @prisma/cli : 2.11.0-dev.20 -@prisma/client : 2.11.0-dev.20 +@prisma/client : 2.13.1 Current platform : TEST_PLATFORM Query Engine : query-engine 58369335532e47bdcec77a2f1e7c1fb83a463918 Migration Engine : migration-engine-cli 58369335532e47bdcec77a2f1e7c1fb83a463918 Introspection Engine : introspection-core 58369335532e47bdcec77a2f1e7c1fb83a463918 Format Binary : prisma-fmt 58369335532e47bdcec77a2f1e7c1fb83a463918 -Studio : 0.327.0 +Studio : 0.332.0 `; diff --git a/src/packages/client/jest.config.js b/src/packages/client/jest.config.js index 9137fa9392fb..175ae96006c0 100644 --- a/src/packages/client/jest.config.js +++ b/src/packages/client/jest.config.js @@ -23,6 +23,6 @@ module.exports = { ], collectCoverageFrom: ['src/**/*.ts', '!**/__tests__/**/*'], snapshotSerializers: ['./helpers/jestSnapshotSerializer'], - testTimeout: 70000, + testTimeout: 80000, setupFiles: ['./helpers/jestSetup.js'], } diff --git a/src/packages/client/src/__tests__/types/types.test.ts b/src/packages/client/src/__tests__/types/types.test.ts index c8ab7e64dc2c..9a50b9d42697 100644 --- a/src/packages/client/src/__tests__/types/types.test.ts +++ b/src/packages/client/src/__tests__/types/types.test.ts @@ -9,7 +9,7 @@ import tsd from 'tsd' import formatter from 'tsd/dist/lib/formatter' const del = promisify(rimraf) -jest.setTimeout(70000) +jest.setTimeout(80000) let packageSource: string beforeAll(async () => { diff --git a/src/packages/react-prisma/.eslintignore b/src/packages/react-prisma/.eslintignore new file mode 100644 index 000000000000..76add878f8dd --- /dev/null +++ b/src/packages/react-prisma/.eslintignore @@ -0,0 +1,2 @@ +node_modules +dist \ No newline at end of file diff --git a/src/packages/react-prisma/.eslintrc.js b/src/packages/react-prisma/.eslintrc.js new file mode 100644 index 000000000000..5d2570bf94e6 --- /dev/null +++ b/src/packages/react-prisma/.eslintrc.js @@ -0,0 +1,6 @@ +const path = require('path') +const config = require('../../../.eslintrc.js') + +config.parserOptions.project.push(path.join(__dirname, 'tsconfig.json')) + +module.exports = config diff --git a/src/packages/react-prisma/.gitignore b/src/packages/react-prisma/.gitignore new file mode 100644 index 000000000000..e9ce517a3b5f --- /dev/null +++ b/src/packages/react-prisma/.gitignore @@ -0,0 +1,11 @@ +node_modules +.DS_Store +yarn-error.log +pnpm-debug.log + +*.db + +dist/ + +*.tsbuildinfo +sandbox \ No newline at end of file diff --git a/src/packages/react-prisma/.prettierignore b/src/packages/react-prisma/.prettierignore new file mode 100644 index 000000000000..53c37a16608c --- /dev/null +++ b/src/packages/react-prisma/.prettierignore @@ -0,0 +1 @@ +dist \ No newline at end of file diff --git a/src/packages/react-prisma/.prettierrc.yml b/src/packages/react-prisma/.prettierrc.yml new file mode 100644 index 000000000000..bbaf47227321 --- /dev/null +++ b/src/packages/react-prisma/.prettierrc.yml @@ -0,0 +1,5 @@ +tabWidth: 2 +trailingComma: all +singleQuote: true +semi: false +printWidth: 80 diff --git a/src/packages/react-prisma/README.md b/src/packages/react-prisma/README.md new file mode 100644 index 000000000000..7963829f1b0f --- /dev/null +++ b/src/packages/react-prisma/README.md @@ -0,0 +1,21 @@ +# `react-prisma` + +This package allows using the Prisma Client in a React Server Component. +It is a thin wrapper arround `@prisma/client`. + +**This is highly experimental. Don't use this in any real application** + +We just publish this early for demonstration purposes. + +# This is unstable + +We don't guarantee that this works. Any moment the underlying `react` api can change and break this package. + +# Known limitations + +Right now this package does not support query chaining. +You can for example not do this yet: + +```ts +prisma.user.findUnique({ where: { id: 42 } }).posts() +``` diff --git a/src/packages/react-prisma/jest.config.js b/src/packages/react-prisma/jest.config.js new file mode 100644 index 000000000000..90066d6b0b74 --- /dev/null +++ b/src/packages/react-prisma/jest.config.js @@ -0,0 +1,9 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + collectCoverage: process.env.CI ? true : false, + coverageReporters: ['clover'], + coverageDirectory: 'src/__tests__/coverage', + collectCoverageFrom: ['src/**/*.ts', '!**/__tests__/**/*'], + testMatch: ['**/src/__tests__/**/*.test.ts'], +} diff --git a/src/packages/react-prisma/package.json b/src/packages/react-prisma/package.json new file mode 100644 index 000000000000..3f927a7469e8 --- /dev/null +++ b/src/packages/react-prisma/package.json @@ -0,0 +1,51 @@ +{ + "name": "react-prisma", + "version": "0.0.5", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "license": "Apache-2.0", + "author": "Tim Suchanek ", + "repository": "git@github.com:prisma/prisma.git", + "devDependencies": { + "@types/jest": "26.0.19", + "@types/node": "12.19.11", + "@typescript-eslint/eslint-plugin": "4.10.0", + "@typescript-eslint/parser": "4.10.0", + "eslint": "7.15.0", + "eslint-config-prettier": "7.0.0", + "eslint-plugin-eslint-comments": "3.2.0", + "eslint-plugin-jest": "24.1.3", + "eslint-plugin-prettier": "3.3.0", + "jest": "26.6.3", + "lint-staged": "10.5.3", + "prettier": "2.2.1", + "strip-ansi": "6.0.0", + "ts-jest": "26.4.4", + "typescript": "4.1.3", + "react": "^17.0.0", + "@prisma/client": ">=2.0.0" + }, + "scripts": { + "build": "tsc -d", + "prepublishOnly": "pnpm run build", + "format": "prettier --write .", + "lint": "eslint --cache --fix --ext .ts .", + "lint-ci": "eslint --ext .ts .", + "test": "echo \"not yet\"", + "precommit": "lint-staged" + }, + "files": [ + "!**/__tests__", + "dist" + ], + "lint-staged": { + "*.ts": [ + "eslint", + "prettier --write" + ] + }, + "peerDependencies": { + "react": "^17.0.0", + "@prisma/client": "*" + } +} diff --git a/src/packages/react-prisma/src/index.ts b/src/packages/react-prisma/src/index.ts new file mode 100644 index 000000000000..31e120aca627 --- /dev/null +++ b/src/packages/react-prisma/src/index.ts @@ -0,0 +1,116 @@ +import { unstable_getCacheForType, Wakeable } from 'react' +import { PrismaClient as PrismaClientConstructor, dmmf } from '@prisma/client' + +const Pending = 0 +const Resolved = 1 +const Rejected = 2 + +type Pending = 0 +type Resolved = 1 +type Rejected = 2 + +type PendingRecord = { + status: Pending + value: Wakeable +} + +type ResolvedRecord = { + status: Resolved + value: any +} + +type RejectedRecord = { + status: Rejected + value: any +} + +type Record = PendingRecord | ResolvedRecord | RejectedRecord + +function createRecordFromThenable(thenable): Record { + const record: Record = { + status: Pending, + value: thenable, + } + thenable.then( + (value) => { + if (record.status === Pending) { + const resolvedRecord: any = record + resolvedRecord.status = Resolved + resolvedRecord.value = value + } + }, + (err) => { + if (record.status === Pending) { + const rejectedRecord: any = record + rejectedRecord.status = Rejected + rejectedRecord.value = err + } + }, + ) + return record +} + +function readRecordValue(record) { + if (record.status === Resolved) { + return record.value + } else { + throw record.value + } +} + +function lowercase(str) { + return str.slice(0, 1).toLowerCase() + str.slice(1) +} + +const queryOperations = { + findMany: true, + findFirst: true, + findOne: true, + findUnique: true, +} + +export function PrismaClient(this, options): PrismaClientConstructor { + this.client = new PrismaClientConstructor(options) + // Unique function per instance because it's used for cache identity. + this.createRecordMap = function () { + return new Map() + } + + for (let i = 0; i < dmmf.mappings.modelOperations.length; i++) { + const mapping = dmmf.mappings.modelOperations[i] + const delegate = Object.create(null) + const modelName = lowercase(mapping.model) + + const keys = Object.keys(this.client[modelName]) + for (let i = 0; i < keys.length; i++) { + const method = keys[i] + delegate[method] = (query) => { + if (!queryOperations[method]) { + throw new Error(`The mutation ${modelName}.${method} can't be used from \`react-prisma\`. +Please use \`@prisma/client\` directly for that.`) + } + const outerMap = unstable_getCacheForType(this.createRecordMap) + + const innerMap = outerMap + const key = query + + let record = innerMap.get(key) + if (!record) { + const thenable = this.client[modelName][method](query) + record = createRecordFromThenable(thenable) + innerMap.set(key, record) + } else if (record instanceof Map) { + throw new Error( + 'This query has received fewer parameters than the last time ' + + 'the same query was used. Always pass the exact number of ' + + 'parameters that the query needs.', + ) + } + const result = readRecordValue(record) + return result + } + } + + this[modelName] = delegate + } +} diff --git a/src/packages/react-prisma/tsconfig.json b/src/packages/react-prisma/tsconfig.json new file mode 100644 index 000000000000..cfda78933651 --- /dev/null +++ b/src/packages/react-prisma/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "lib": ["esnext"], + "module": "commonjs", + "target": "es2018", + "strict": true, + "esModuleInterop": true, + "sourceMap": true, + "noImplicitAny": false, + "outDir": "dist", + "rootDir": "src", + "declaration": true, + "incremental": true + }, + "exclude": ["dist", "build", "scripts", "sandbox"] +} diff --git a/src/pnpm-lock.yaml b/src/pnpm-lock.yaml index 89f69961abfb..21ee4eab8347 100644 --- a/src/pnpm-lock.yaml +++ b/src/pnpm-lock.yaml @@ -608,6 +608,43 @@ importers: tempy: 1.0.0 ts-jest: 26.4.4 typescript: 4.1.3 + packages/react-prisma: + devDependencies: + '@prisma/client': 2.13.1 + '@types/jest': 26.0.19 + '@types/node': 12.19.11 + '@typescript-eslint/eslint-plugin': 4.10.0_b73eed484bdfc88edd18eb0024b8c446 + '@typescript-eslint/parser': 4.10.0_eslint@7.15.0+typescript@4.1.3 + eslint: 7.15.0 + eslint-config-prettier: 7.0.0_eslint@7.15.0 + eslint-plugin-eslint-comments: 3.2.0_eslint@7.15.0 + eslint-plugin-jest: 24.1.3_eslint@7.15.0+typescript@4.1.3 + eslint-plugin-prettier: 3.3.0_eslint@7.15.0+prettier@2.2.1 + jest: 26.6.3 + lint-staged: 10.5.3 + prettier: 2.2.1 + react: 17.0.1 + strip-ansi: 6.0.0 + ts-jest: 26.4.4_jest@26.6.3+typescript@4.1.3 + typescript: 4.1.3 + specifiers: + '@prisma/client': '*' + '@types/jest': 26.0.19 + '@types/node': 12.19.11 + '@typescript-eslint/eslint-plugin': 4.10.0 + '@typescript-eslint/parser': 4.10.0 + eslint: 7.15.0 + eslint-config-prettier: 7.0.0 + eslint-plugin-eslint-comments: 3.2.0 + eslint-plugin-jest: 24.1.3 + eslint-plugin-prettier: 3.3.0 + jest: 26.6.3 + lint-staged: 10.5.3 + prettier: 2.2.1 + react: ^17.0.0 + strip-ansi: 6.0.0 + ts-jest: 26.4.4 + typescript: 4.1.3 packages/sdk: dependencies: '@prisma/debug': 'link:../debug' @@ -818,6 +855,7 @@ packages: dependencies: '@babel/highlight': 7.10.4 dev: true + optional: true resolution: integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== /@babel/code-frame/7.12.11: @@ -827,7 +865,7 @@ packages: integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== /@babel/core/7.12.9: dependencies: - '@babel/code-frame': 7.10.4 + '@babel/code-frame': 7.12.11 '@babel/generator': 7.12.5 '@babel/helper-module-transforms': 7.12.1 '@babel/helpers': 7.12.5 @@ -888,7 +926,7 @@ packages: '@babel/helper-replace-supers': 7.12.5 '@babel/helper-simple-access': 7.12.1 '@babel/helper-split-export-declaration': 7.11.0 - '@babel/helper-validator-identifier': 7.10.4 + '@babel/helper-validator-identifier': 7.12.11 '@babel/template': 7.12.7 '@babel/traverse': 7.12.9 '@babel/types': 7.12.7 @@ -927,10 +965,6 @@ packages: dev: true resolution: integrity: sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== - /@babel/helper-validator-identifier/7.10.4: - dev: true - resolution: - integrity: sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== /@babel/helper-validator-identifier/7.12.11: resolution: integrity: sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== @@ -1072,7 +1106,7 @@ packages: integrity: sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== /@babel/template/7.12.7: dependencies: - '@babel/code-frame': 7.10.4 + '@babel/code-frame': 7.12.11 '@babel/parser': 7.12.7 '@babel/types': 7.12.7 dev: true @@ -1080,7 +1114,7 @@ packages: integrity: sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== /@babel/traverse/7.12.9: dependencies: - '@babel/code-frame': 7.10.4 + '@babel/code-frame': 7.12.11 '@babel/generator': 7.12.5 '@babel/helper-function-name': 7.10.4 '@babel/helper-split-export-declaration': 7.11.0 @@ -1094,7 +1128,7 @@ packages: integrity: sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw== /@babel/types/7.12.7: dependencies: - '@babel/helper-validator-identifier': 7.10.4 + '@babel/helper-validator-identifier': 7.12.11 lodash: 4.17.20 to-fast-properties: 2.0.0 dev: true @@ -1367,19 +1401,33 @@ packages: dev: false resolution: integrity: sha512-FVLhwVkbfhXlBhroWfIXMLi+3Jh9IEzYp+9z+MUUiw3ZsbcoAil7CN9/QIjHc4/TcCRyRfuSmT7qCnn4O+TjJw== - /@prisma/debug/2.14.0-dev.53: + /@prisma/client/2.13.1: + dependencies: + '@prisma/engines-version': 2.13.1-2.fcbc4bb2d306c86c28014f596b1e8c7980af8bd4 + dev: true + engines: + node: '>=10.4' + peerDependencies: + '@prisma/cli': '*' + peerDependenciesMeta: + '@prisma/cli': + optional: true + requiresBuild: true + resolution: + integrity: sha512-aD33DJpVHU3VqwDk5PEgnffbQeilUqmwVgqIxstVEiZ7TSs5oXQjwsSWAEfuvzPsR/rMJdeauAov58WHlMbVVA== + /@prisma/debug/2.14.0-dev.56: dependencies: debug: 4.3.2 ms: 2.1.3 dev: true resolution: - integrity: sha512-F5NDSD133rT9ZaAyg1/pU5LyZHSehjC5Zqw0OUP02FMf4zodGgEGB71u0/iP1dMvK8cMxhmqJGvoaZPSv8KQ/g== - /@prisma/engine-core/2.14.0-dev.53: + integrity: sha512-TCQNhtZpmPGXouXpaN03eXeSf5EKn1Fx2hZ3HsFJ8/vAZ6MFHziLaTDo+3NUMfCMrjLE0Rj6il8DabW71pGl8Q== + /@prisma/engine-core/2.14.0-dev.56: dependencies: - '@prisma/debug': 2.14.0-dev.53 + '@prisma/debug': 2.14.0-dev.56 '@prisma/engines': 2.14.0-26.59cf08bf47e90cb37532900059f3328b4328237c - '@prisma/generator-helper': 2.14.0-dev.53 - '@prisma/get-platform': 2.14.0-dev.53 + '@prisma/generator-helper': 2.14.0-dev.56 + '@prisma/get-platform': 2.14.0-dev.56 chalk: 4.1.0 execa: 5.0.0 get-stream: 6.0.0 @@ -1390,7 +1438,11 @@ packages: undici: 2.2.1 dev: true resolution: - integrity: sha512-2y21OajpIZDQK+9k8a9lpRzAe7HsP8zoSehg5s+dHhvBRvrU02I2aNIIdlQTcprVk3k3vq6E3Dy4FirwG8cr3g== + integrity: sha512-KZFZzY2xr/PumM7F3GHrLgSBCAi/yML6NKx3BVNxxPfyBJxKFrfmhjF3L3aXyfvYZLAFIzd2nqRAEXDxHWgZ6g== + /@prisma/engines-version/2.13.1-2.fcbc4bb2d306c86c28014f596b1e8c7980af8bd4: + dev: true + resolution: + integrity: sha512-xMfD9iu03XSTgZqgWYqTnKYfmabjY+U2tj7ClA1WQqLziY0ZGI48tZQpNe6WGzv+6nVss3PpfHfkKlM0kzhZbw== /@prisma/engines-version/2.14.0-26.59cf08bf47e90cb37532900059f3328b4328237c: resolution: integrity: sha512-Dvh81oMjLRw+5BpQFWmDoIugWFcQLlx+vzyte3lHolCJ27AaT2onLGy7omYJQPR+ZPtTic0IR5PVzVeWZD6q5g== @@ -1398,10 +1450,10 @@ packages: requiresBuild: true resolution: integrity: sha512-9AicIs3gYpRctgUDrzMRYM1VxvAJYbmeoGF/PW7hLQs3+fiPU7IW7zaxmuTvG3bc8j8zJQ/i//DIeIvYwwEVNg== - /@prisma/fetch-engine/2.14.0-dev.53: + /@prisma/fetch-engine/2.14.0-dev.56: dependencies: - '@prisma/debug': 2.14.0-dev.53 - '@prisma/get-platform': 2.14.0-dev.53 + '@prisma/debug': 2.14.0-dev.56 + '@prisma/get-platform': 2.14.0-dev.56 chalk: 4.1.0 execa: 5.0.0 find-cache-dir: 3.3.1 @@ -1419,30 +1471,30 @@ packages: tempy: 1.0.0 dev: true resolution: - integrity: sha512-M+1W68E44m1r7R9MqvvdLtd6fpvjcbxptER9HQ+etgON+R+IYMQojrrjsEr6mjUY96+70n6W6/MAy89+PgAc0A== - /@prisma/generator-helper/2.14.0-dev.53: + integrity: sha512-hQ2kT0ZByr0SNrYL9wDs6FZpAnMtBC03Lj282mclFft2OxYRd5RPg4miP6evM+5w8kK3BSJQK2DSJY9fM0dR2A== + /@prisma/generator-helper/2.14.0-dev.56: dependencies: - '@prisma/debug': 2.14.0-dev.53 + '@prisma/debug': 2.14.0-dev.56 '@types/cross-spawn': 6.0.2 chalk: 4.1.0 cross-spawn: 7.0.3 dev: true resolution: - integrity: sha512-AuZya/MtXQkA+0CBDY/ZLtsaocuTo0EOj/ajAY9e/UdtYiJlgIIdBNXcpadolNgFuLwOeIZX382ZTMzJZBrdeA== - /@prisma/get-platform/2.14.0-dev.53: + integrity: sha512-GYbC5vcs8pFN2g7VAim1WdE8zrVANIL0wSvQeViZLLsxJ4uQVCNQMCJbSsMGD38ysAA8Qpsw/vMMm/SITDaT4A== + /@prisma/get-platform/2.14.0-dev.56: dependencies: - '@prisma/debug': 2.14.0-dev.53 + '@prisma/debug': 2.14.0-dev.56 dev: true resolution: - integrity: sha512-ZcvuVVx7RxCyi/mrKK8edPHxLoFezYv+TBC3ntOdRr5KO8XPMWJjM7noRPQiy3BMMiw9uAsr4x5HquoAa6kwYA== - /@prisma/sdk/2.14.0-dev.53: + integrity: sha512-MeZlszYR5V33AxhCGAvSE4dgkGdwqrdw7A8J8HS81A55ym7r7/U+t6aDK0ucVCaI1yFIQIt9QzcgpQ4ii9rTAg== + /@prisma/sdk/2.14.0-dev.56: dependencies: - '@prisma/debug': 2.14.0-dev.53 - '@prisma/engine-core': 2.14.0-dev.53 + '@prisma/debug': 2.14.0-dev.56 + '@prisma/engine-core': 2.14.0-dev.56 '@prisma/engines': 2.14.0-26.59cf08bf47e90cb37532900059f3328b4328237c - '@prisma/fetch-engine': 2.14.0-dev.53 - '@prisma/generator-helper': 2.14.0-dev.53 - '@prisma/get-platform': 2.14.0-dev.53 + '@prisma/fetch-engine': 2.14.0-dev.56 + '@prisma/generator-helper': 2.14.0-dev.56 + '@prisma/get-platform': 2.14.0-dev.56 '@timsuchanek/copy': 1.4.5 archiver: 4.0.2 arg: 5.0.0 @@ -1474,10 +1526,10 @@ packages: url-parse: 1.4.7 dev: true resolution: - integrity: sha512-lFIIJGrdM7BoUQJaQ94FmCQXJoHLT7Rx8rt7U1XVtEBycZHlZ25Cfb4dy+dfWW4AZvve3KDLyWtvQf18LzhHYg== - /@prisma/studio-pcw/0.332.0_@prisma+sdk@2.14.0-dev.53: + integrity: sha512-zbD1APDjpr+hXhJLnxLMDtD9R2HGRyDKKe86324UkfMlsqa9TqNDklOQ0ipMXwesAKS7m/uRH8oFVuwoWgDX0w== + /@prisma/studio-pcw/0.332.0_@prisma+sdk@2.14.0-dev.56: dependencies: - '@prisma/sdk': 2.14.0-dev.53 + '@prisma/sdk': 2.14.0-dev.56 '@prisma/studio-types': 0.332.0 rimraf: 3.0.2 dev: true @@ -1487,9 +1539,9 @@ packages: integrity: sha512-4R74gN2RgPawfUt8lX5TYYavpEkVqXFkuXwNfYmNk7FRLgV6LR0bUaUVPTSPf62l+H1kttWW2DxvX6oxx8yEmw== /@prisma/studio-server/0.332.0: dependencies: - '@prisma/sdk': 2.14.0-dev.53 + '@prisma/sdk': 2.14.0-dev.56 '@prisma/studio': 0.332.0 - '@prisma/studio-pcw': 0.332.0_@prisma+sdk@2.14.0-dev.53 + '@prisma/studio-pcw': 0.332.0_@prisma+sdk@2.14.0-dev.56 '@prisma/studio-types': 0.332.0 '@sentry/node': 5.15.5 checkpoint-client: 1.1.18 @@ -1738,13 +1790,6 @@ packages: dev: true resolution: integrity: sha512-Hz5q8Vu0D288x3iWXePSn53W7hAjP0H7EQ6QvDO9c7t46mR0lNOLlfuwQ+JkVxuhygHzlzPX+0jKdA3ZgSh+Vg== - /@types/jest/26.0.16: - dependencies: - jest-diff: 26.6.2 - pretty-format: 26.6.2 - dev: true - resolution: - integrity: sha512-Gp12+7tmKCgv9JjtltxUXokohCAEZfpJaEW5tn871SGRp8I+bRWBonQO7vW5NHwnAHe5dd50+Q4zyKuN35i09g== /@types/jest/26.0.19: dependencies: jest-diff: 26.6.2 @@ -1950,12 +1995,12 @@ packages: optional: true resolution: integrity: sha512-WrVzGMzzCrgrpnQMQm4Tnf+dk+wdl/YbgIgd5hKGa2P+lnJ2MON+nQnbwgbxtN9QDLi8HO+JAq0/krMnjQK6Cw== - /@typescript-eslint/experimental-utils/4.10.0_eslint@7.15.0+typescript@4.1.3: + /@typescript-eslint/experimental-utils/4.10.0_eslint@7.15.0+typescript@4.0.3: dependencies: '@types/json-schema': 7.0.6 '@typescript-eslint/scope-manager': 4.10.0 '@typescript-eslint/types': 4.10.0 - '@typescript-eslint/typescript-estree': 4.10.0_typescript@4.1.3 + '@typescript-eslint/typescript-estree': 4.10.0_typescript@4.0.3 eslint: 7.15.0 eslint-scope: 5.1.1 eslint-utils: 2.1.0 @@ -1967,12 +2012,12 @@ packages: typescript: '*' resolution: integrity: sha512-opX+7ai1sdWBOIoBgpVJrH5e89ra1KoLrJTz0UtWAa4IekkKmqDosk5r6xqRaNJfCXEfteW4HXQAwMdx+jjEmw== - /@typescript-eslint/experimental-utils/4.9.0_eslint@7.15.0+typescript@4.0.3: + /@typescript-eslint/experimental-utils/4.10.0_eslint@7.15.0+typescript@4.1.3: dependencies: '@types/json-schema': 7.0.6 - '@typescript-eslint/scope-manager': 4.9.0 - '@typescript-eslint/types': 4.9.0 - '@typescript-eslint/typescript-estree': 4.9.0_typescript@4.0.3 + '@typescript-eslint/scope-manager': 4.10.0 + '@typescript-eslint/types': 4.10.0 + '@typescript-eslint/typescript-estree': 4.10.0_typescript@4.1.3 eslint: 7.15.0 eslint-scope: 5.1.1 eslint-utils: 2.1.0 @@ -1983,13 +2028,13 @@ packages: eslint: '*' typescript: '*' resolution: - integrity: sha512-0p8GnDWB3R2oGhmRXlEnCvYOtaBCijtA5uBfH5GxQKsukdSQyI4opC4NGTUb88CagsoNQ4rb/hId2JuMbzWKFQ== - /@typescript-eslint/experimental-utils/4.9.0_eslint@7.15.0+typescript@4.1.3: + integrity: sha512-opX+7ai1sdWBOIoBgpVJrH5e89ra1KoLrJTz0UtWAa4IekkKmqDosk5r6xqRaNJfCXEfteW4HXQAwMdx+jjEmw== + /@typescript-eslint/experimental-utils/4.9.0_eslint@7.15.0+typescript@4.0.3: dependencies: '@types/json-schema': 7.0.6 '@typescript-eslint/scope-manager': 4.9.0 '@typescript-eslint/types': 4.9.0 - '@typescript-eslint/typescript-estree': 4.9.0_typescript@4.1.3 + '@typescript-eslint/typescript-estree': 4.9.0_typescript@4.0.3 eslint: 7.15.0 eslint-scope: 5.1.1 eslint-utils: 2.1.0 @@ -2069,7 +2114,7 @@ packages: node: ^8.10.0 || ^10.13.0 || >=11.10.1 resolution: integrity: sha512-luzLKmowfiM/IoJL/rus1K9iZpSJK6GlOS/1ezKplb7MkORt2dDcfi8g9B0bsF6JoRGhqn0D3Va55b+vredFHA== - /@typescript-eslint/typescript-estree/4.10.0_typescript@4.1.3: + /@typescript-eslint/typescript-estree/4.10.0_typescript@4.0.3: dependencies: '@typescript-eslint/types': 4.10.0 '@typescript-eslint/visitor-keys': 4.10.0 @@ -2078,8 +2123,8 @@ packages: is-glob: 4.0.1 lodash: 4.17.20 semver: 7.3.4 - tsutils: 3.17.1_typescript@4.1.3 - typescript: 4.1.3 + tsutils: 3.17.1_typescript@4.0.3 + typescript: 4.0.3 dev: true engines: node: ^10.12.0 || >=12.0.0 @@ -2090,17 +2135,17 @@ packages: optional: true resolution: integrity: sha512-mGK0YRp9TOk6ZqZ98F++bW6X5kMTzCRROJkGXH62d2azhghmq+1LNLylkGe6uGUOQzD452NOAEth5VAF6PDo5g== - /@typescript-eslint/typescript-estree/4.9.0_typescript@4.0.3: + /@typescript-eslint/typescript-estree/4.10.0_typescript@4.1.3: dependencies: - '@typescript-eslint/types': 4.9.0 - '@typescript-eslint/visitor-keys': 4.9.0 + '@typescript-eslint/types': 4.10.0 + '@typescript-eslint/visitor-keys': 4.10.0 debug: 4.3.1 globby: 11.0.1 is-glob: 4.0.1 lodash: 4.17.20 semver: 7.3.4 - tsutils: 3.17.1_typescript@4.0.3 - typescript: 4.0.3 + tsutils: 3.17.1_typescript@4.1.3 + typescript: 4.1.3 dev: true engines: node: ^10.12.0 || >=12.0.0 @@ -2110,8 +2155,8 @@ packages: typescript: optional: true resolution: - integrity: sha512-rmDR++PGrIyQzAtt3pPcmKWLr7MA+u/Cmq9b/rON3//t5WofNR4m/Ybft2vOLj0WtUzjn018ekHjTsnIyBsQug== - /@typescript-eslint/typescript-estree/4.9.0_typescript@4.1.3: + integrity: sha512-mGK0YRp9TOk6ZqZ98F++bW6X5kMTzCRROJkGXH62d2azhghmq+1LNLylkGe6uGUOQzD452NOAEth5VAF6PDo5g== + /@typescript-eslint/typescript-estree/4.9.0_typescript@4.0.3: dependencies: '@typescript-eslint/types': 4.9.0 '@typescript-eslint/visitor-keys': 4.9.0 @@ -2120,8 +2165,8 @@ packages: is-glob: 4.0.1 lodash: 4.17.20 semver: 7.3.4 - tsutils: 3.17.1_typescript@4.1.3 - typescript: 4.1.3 + tsutils: 3.17.1_typescript@4.0.3 + typescript: 4.0.3 dev: true engines: node: ^10.12.0 || >=12.0.0 @@ -3516,7 +3561,7 @@ packages: integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ== /eslint-plugin-jest/24.1.3_eslint@7.15.0+typescript@4.0.3: dependencies: - '@typescript-eslint/experimental-utils': 4.9.0_eslint@7.15.0+typescript@4.0.3 + '@typescript-eslint/experimental-utils': 4.10.0_eslint@7.15.0+typescript@4.0.3 eslint: 7.15.0 dev: true engines: @@ -3528,7 +3573,7 @@ packages: integrity: sha512-dNGGjzuEzCE3d5EPZQ/QGtmlMotqnYWD/QpCZ1UuZlrMAdhG5rldh0N0haCvhGnUkSeuORS5VNROwF9Hrgn3Lg== /eslint-plugin-jest/24.1.3_eslint@7.15.0+typescript@4.1.3: dependencies: - '@typescript-eslint/experimental-utils': 4.9.0_eslint@7.15.0+typescript@4.1.3 + '@typescript-eslint/experimental-utils': 4.10.0_eslint@7.15.0+typescript@4.1.3 eslint: 7.15.0 dev: true engines: @@ -3604,7 +3649,7 @@ packages: integrity: sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== /eslint/7.15.0: dependencies: - '@babel/code-frame': 7.10.4 + '@babel/code-frame': 7.12.11 '@eslint/eslintrc': 0.2.2 ajv: 6.12.6 chalk: 4.1.0 @@ -5189,7 +5234,7 @@ packages: integrity: sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== /jest-message-util/26.6.2: dependencies: - '@babel/code-frame': 7.10.4 + '@babel/code-frame': 7.12.11 '@jest/types': 26.6.2 '@types/stack-utils': 2.0.0 chalk: 4.1.0 @@ -5762,6 +5807,13 @@ packages: dev: true resolution: integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + /loose-envify/1.4.0: + dependencies: + js-tokens: 4.0.0 + dev: true + hasBin: true + resolution: + integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== /lowercase-keys/1.0.1: dev: true engines: @@ -6942,6 +6994,15 @@ packages: dev: true resolution: integrity: sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== + /react/17.0.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + dev: true + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w== /read-pkg-up/7.0.1: dependencies: find-up: 4.1.0 @@ -8118,7 +8179,7 @@ packages: integrity: sha512-ofBzoCqf6Nv/PoWb/ByV3VNKy2KJSikamOBxvR3E6eVdIw10GwAXoyvMWXXjZJK2s6S27ZE8fI+JBTnGaovl6Q== /ts-jest/26.4.4_jest@26.6.3+typescript@4.1.3: dependencies: - '@types/jest': 26.0.16 + '@types/jest': 26.0.19 bs-logger: 0.2.6 buffer-from: 1.1.1 fast-json-stable-stringify: 2.1.0