feat(prisma): remove multi-db support in favor of psql \w easier setup

This commit is contained in:
diced 2021-08-25 09:58:48 -07:00
parent 8c03e74979
commit 2c871be8c5
No known key found for this signature in database
GPG key ID: 85AB64C74535D76E
20 changed files with 47 additions and 535 deletions

View file

@ -5,18 +5,9 @@ host = '0.0.0.0'
port = 3000 port = 3000
[database] [database]
# postgresql
type = 'psql' type = 'psql'
url = 'postgres://postgres:postgres@postgres/postgres' url = 'postgres://postgres:postgres@postgres/postgres'
# mysql
# type = 'mysql'
# url = 'mysql://postgres:postgres@mysql/mysql'
# sqlite
# type = 'sqlite'
# url = 'file:sqlite.db'
[uploader] [uploader]
route = '/u' route = '/u'
embed_route = '/a' embed_route = '/a'

View file

@ -1,12 +1,12 @@
{ {
"name": "zip3", "name": "zip3",
"version": "3.0.0", "version": "3.1.0",
"scripts": { "scripts": {
"prepare": "husky install", "prepare": "husky install",
"dev": "NODE_ENV=development node server", "dev": "NODE_ENV=development node server",
"build": "npm-run-all build:schema build:next", "build": "npm-run-all build:schema build:next",
"build:next": "next build", "build:next": "next build",
"build:schema": "prisma generate --schema=prisma/schema.shared.prisma", "build:schema": "prisma generate --schema=prisma/schema.prisma",
"start": "node server", "start": "node server",
"lint": "next lint", "lint": "next lint",
"ts-node": "./node_modules/.bin/ts-node --compiler-options \"{\\\"module\\\":\\\"commonjs\\\"}\" --transpile-only", "ts-node": "./node_modules/.bin/ts-node --compiler-options \"{\\\"module\\\":\\\"commonjs\\\"}\" --transpile-only",
@ -21,7 +21,7 @@
"@material-ui/data-grid": "^4.0.0-alpha.32", "@material-ui/data-grid": "^4.0.0-alpha.32",
"@material-ui/icons": "^5.0.0-alpha.37", "@material-ui/icons": "^5.0.0-alpha.37",
"@material-ui/styles": "^5.0.0-alpha.35", "@material-ui/styles": "^5.0.0-alpha.35",
"@prisma/client": "2.25.0", "@prisma/client": "^2.30.0",
"@reduxjs/toolkit": "^1.6.0", "@reduxjs/toolkit": "^1.6.0",
"argon2": "^0.28.2", "argon2": "^0.28.2",
"colorette": "^1.2.2", "colorette": "^1.2.2",
@ -31,14 +31,13 @@
"formik": "^2.2.9", "formik": "^2.2.9",
"multer": "^1.4.2", "multer": "^1.4.2",
"next": "11.1.0", "next": "11.1.0",
"prisma": "2.25.0", "prisma": "^2.30.0",
"react": "17.0.2", "react": "17.0.2",
"react-dom": "17.0.2", "react-dom": "17.0.2",
"react-dropzone": "^11.3.2", "react-dropzone": "^11.3.2",
"react-redux": "^7.2.4", "react-redux": "^7.2.4",
"redux": "^4.1.0", "redux": "^4.1.0",
"redux-thunk": "^2.3.0", "redux-thunk": "^2.3.0",
"rimraf": "^3.0.2",
"yup": "^0.32.9" "yup": "^0.32.9"
}, },
"devDependencies": { "devDependencies": {

View file

@ -1,3 +0,0 @@
# Please do not edit this file manually
# It should be added in your version-control system (i.e. Git)
provider = "mysql"

View file

@ -1,53 +0,0 @@
-- CreateTable
CREATE TABLE `User` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`username` VARCHAR(191) NOT NULL,
`password` VARCHAR(191) NOT NULL,
`token` VARCHAR(191) NOT NULL,
`administrator` BOOLEAN NOT NULL DEFAULT false,
`embedTitle` VARCHAR(191),
`embedColor` VARCHAR(191) NOT NULL DEFAULT '#2f3136',
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `Image` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`file` VARCHAR(191) NOT NULL,
`mimetype` VARCHAR(191) NOT NULL DEFAULT 'image/png',
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`views` INTEGER NOT NULL DEFAULT 0,
`userId` INTEGER NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `InvisibleImage` (
`id` INTEGER NOT NULL,
`invis` VARCHAR(191) NOT NULL,
UNIQUE INDEX `InvisibleImage.invis_unique`(`invis`),
UNIQUE INDEX `InvisibleImage_id_unique`(`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `Url` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`to` VARCHAR(191) NOT NULL,
`created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`views` INTEGER NOT NULL DEFAULT 0,
`userId` INTEGER NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- AddForeignKey
ALTER TABLE `Image` ADD FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `InvisibleImage` ADD FOREIGN KEY (`id`) REFERENCES `Image`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `Url` ADD FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

View file

@ -1,3 +0,0 @@
# Please do not edit this file manually
# It should be added in your version-control system (i.e. Git)
provider = "postgresql"

View file

@ -1,56 +0,0 @@
-- CreateTable
CREATE TABLE "User" (
"id" SERIAL NOT NULL,
"username" TEXT NOT NULL,
"password" TEXT NOT NULL,
"token" TEXT NOT NULL,
"administrator" BOOLEAN NOT NULL DEFAULT false,
"embedTitle" TEXT,
"embedColor" TEXT NOT NULL DEFAULT E'#2f3136',
PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Image" (
"id" SERIAL NOT NULL,
"file" TEXT NOT NULL,
"mimetype" TEXT NOT NULL DEFAULT E'image/png',
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"views" INTEGER NOT NULL DEFAULT 0,
"userId" INTEGER NOT NULL,
PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "InvisibleImage" (
"id" INTEGER NOT NULL,
"invis" TEXT NOT NULL
);
-- CreateTable
CREATE TABLE "Url" (
"id" SERIAL NOT NULL,
"to" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"views" INTEGER NOT NULL DEFAULT 0,
"userId" INTEGER NOT NULL,
PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "InvisibleImage.invis_unique" ON "InvisibleImage"("invis");
-- CreateIndex
CREATE UNIQUE INDEX "InvisibleImage_id_unique" ON "InvisibleImage"("id");
-- AddForeignKey
ALTER TABLE "Image" ADD FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "InvisibleImage" ADD FOREIGN KEY ("id") REFERENCES "Image"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Url" ADD FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View file

@ -1,3 +0,0 @@
# Please do not edit this file manually
# It should be added in your version-control system (i.e. Git)
provider = "sqlite"

View file

@ -1,44 +0,0 @@
-- CreateTable
CREATE TABLE "User" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"username" TEXT NOT NULL,
"password" TEXT NOT NULL,
"token" TEXT NOT NULL,
"administrator" BOOLEAN NOT NULL DEFAULT false,
"embedTitle" TEXT,
"embedColor" TEXT NOT NULL DEFAULT '#2f3136'
);
-- CreateTable
CREATE TABLE "Image" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"file" TEXT NOT NULL,
"mimetype" TEXT NOT NULL DEFAULT 'image/png',
"created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
"views" INTEGER NOT NULL DEFAULT 0,
"userId" INTEGER NOT NULL,
FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
);
-- CreateTable
CREATE TABLE "InvisibleImage" (
"id" INTEGER NOT NULL,
"invis" TEXT NOT NULL,
FOREIGN KEY ("id") REFERENCES "Image" ("id") ON DELETE CASCADE ON UPDATE CASCADE
);
-- CreateTable
CREATE TABLE "Url" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"to" TEXT NOT NULL,
"created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
"views" INTEGER NOT NULL DEFAULT 0,
"userId" INTEGER NOT NULL,
FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
);
-- CreateIndex
CREATE UNIQUE INDEX "InvisibleImage.invis_unique" ON "InvisibleImage"("invis");
-- CreateIndex
CREATE UNIQUE INDEX "InvisibleImage_id_unique" ON "InvisibleImage"("id");

View file

@ -1,55 +0,0 @@
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
username String
password String
token String
administrator Boolean @default(false)
embedTitle String?
embedColor String @default("#2f3136")
images Image[]
urls Url[]
}
model Image {
id Int @id @default(autoincrement())
file String
mimetype String @default("image/png")
created_at DateTime @default(now())
views Int @default(0)
invisible InvisibleImage?
user User @relation(fields: [userId], references: [id])
userId Int
}
model InvisibleImage {
id Int
image Image @relation(fields: [id], references: [id])
invis String @unique
}
model Url {
id Int @id @default(autoincrement())
to String
created_at DateTime @default(now())
views Int @default(0)
invisible InvisibleUrl?
user User @relation(fields: [userId], references: [id])
userId Int
}
model InvisibleUrl {
id Int
url Url @relation(fields: [id], references: [id])
invis String @unique
}

View file

@ -1,55 +0,0 @@
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
username String
password String
token String
administrator Boolean @default(false)
embedTitle String?
embedColor String @default("#2f3136")
images Image[]
urls Url[]
}
model Image {
id Int @id @default(autoincrement())
file String
mimetype String @default("image/png")
created_at DateTime @default(now())
views Int @default(0)
invisible InvisibleImage?
user User @relation(fields: [userId], references: [id])
userId Int
}
model InvisibleImage {
id Int
image Image @relation(fields: [id], references: [id])
invis String @unique
}
model Url {
id Int @id @default(autoincrement())
to String
created_at DateTime @default(now())
views Int @default(0)
invisible InvisibleUrl?
user User @relation(fields: [userId], references: [id])
userId Int
}
model InvisibleUrl {
id Int
url Url @relation(fields: [id], references: [id])
invis String @unique
}

View file

@ -1,55 +0,0 @@
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
username String
password String
token String
administrator Boolean @default(false)
embedTitle String?
embedColor String @default("#2f3136")
images Image[]
urls Url[]
}
model Image {
id Int @id @default(autoincrement())
file String
mimetype String @default("image/png")
created_at DateTime @default(now())
views Int @default(0)
invisible InvisibleImage?
user User @relation(fields: [userId], references: [id])
userId Int
}
model InvisibleImage {
id Int
image Image @relation(fields: [id], references: [id])
invis String @unique
}
model Url {
id Int @id @default(autoincrement())
to String
created_at DateTime @default(now())
views Int @default(0)
invisible InvisibleUrl?
user User @relation(fields: [userId], references: [id])
userId Int
}
model InvisibleUrl {
id Int
url Url @relation(fields: [id], references: [id])
invis String @unique
}

View file

@ -1,55 +0,0 @@
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
username String
password String
token String
administrator Boolean @default(false)
embedTitle String?
embedColor String @default("#2f3136")
images Image[]
urls Url[]
}
model Image {
id Int @id @default(autoincrement())
file String
mimetype String @default("image/png")
created_at DateTime @default(now())
views Int @default(0)
invisible InvisibleImage?
user User @relation(fields: [userId], references: [id])
userId Int
}
model InvisibleImage {
id Int
image Image @relation(fields: [id], references: [id])
invis String @unique
}
model Url {
id Int @id @default(autoincrement())
to String
created_at DateTime @default(now())
views Int @default(0)
invisible InvisibleUrl?
user User @relation(fields: [userId], references: [id])
userId Int
}
model InvisibleUrl {
id Int
url Url @relation(fields: [id], references: [id])
invis String @unique
}

View file

@ -1,42 +0,0 @@
const prismaRun = require('./prisma-run');
const remove = require('rimraf').sync;
const { readFileSync, readdirSync, statSync, renameSync } = require('fs');
const { join } = require('path');
const str = readFileSync('./config.toml');
const config = require('@iarna/toml/parse-string')(str);
remove('prisma/migrations*');
function getFirstDir(dir) {
const files = readdirSync(dir);
for (const file of files) {
if (statSync(join(dir, file)).isDirectory()) return join(dir, file);
}
}
function createPSQLMigrations() {
prismaRun(config.database.psql_url, 'psql', ['migrate', 'dev', '--skip-seed', '--name=psql', '--schema=prisma/schema.psql.prisma']);
const dir = getFirstDir('./prisma/migrations');
renameSync(dir, './prisma/migrations/psql');
renameSync('./prisma/migrations', './prisma/migrations_psql');
}
function createMYSQLMigrations() {
prismaRun(config.database.mysql_url, 'mysql', ['migrate', 'dev', '--skip-seed', '--name=mysql', '--schema=prisma/schema.mysql.prisma']);
const dir = getFirstDir('./prisma/migrations');
renameSync(dir, './prisma/migrations/mysql');
renameSync('./prisma/migrations', './prisma/migrations_mysql');
}
function createSqliteMigrations() {
prismaRun(config.database.sqlite_url, 'sqlite', ['migrate', 'dev', '--skip-seed', '--name=sqlite', '--schema=prisma/schema.sqlite.prisma']);
const dir = getFirstDir('./prisma/migrations');
renameSync(dir, './prisma/migrations/sqlite');
renameSync('./prisma/migrations', './prisma/migrations_sqlite');
}
createPSQLMigrations();
createMYSQLMigrations();
createSqliteMigrations();

View file

@ -1,44 +1,14 @@
const { copyFileSync, readdirSync, statSync, existsSync, mkdirSync } = require('fs');
const { join, sep } = require('path');
const rimraf = require('rimraf');
const Logger = require('../src/lib/logger'); const Logger = require('../src/lib/logger');
const prismaRun = require('./prisma-run'); const prismaRun = require('./prisma-run');
function recursive(dir) {
let res = [];
const files = readdirSync(dir);
for (let i = 0, L = files.length; i !== L; ++i) {
const file = join(dir, files[i]);
if (statSync(file).isDirectory()) res = [...res, ...recursive(file)];
else res.push(file);
}
return res;
}
module.exports = async (config) => { module.exports = async (config) => {
try { try {
const prisma = join(process.cwd(), 'prisma'); await prismaRun(config.database.url, ['migrate', 'deploy', '--schema=prisma/schema.prisma']);
const migrationsDir = join(prisma, 'migrations_' + config.database.type); await prismaRun(config.database.url, ['generate', '--schema=prisma/schema.prisma']);
const destMigrations = join(prisma, 'migrations'); await prismaRun(config.database.url, ['db', 'seed', '--preview-feature', '--schema=prisma/schema.prisma']);
const migrationFiles = recursive(migrationsDir);
const destFiles = migrationFiles.map(x => x.replace(migrationsDir + sep, destMigrations + sep));
if (existsSync(destMigrations)) rimraf.sync(destMigrations);
mkdirSync(destMigrations);
mkdirSync(join(destMigrations, config.database.type));
for (let i = 0, L = migrationFiles.length; i !== L; ++i) {
copyFileSync(migrationFiles[i], destFiles[i]);
}
await prismaRun(config.database.url, ['migrate', 'deploy', `--schema=prisma/schema.${config.database.type}.prisma`]);
await prismaRun(config.database.url, ['generate', `--schema=prisma/schema.${config.database.type}.prisma`]);
await prismaRun(config.database.url, ['db', 'seed', '--preview-feature', `--schema=prisma/schema.${config.database.type}.prisma`]);
} catch (e) { } catch (e) {
console.log(e); console.log(e);
Logger.get('db').error('there was an error.. exiting..'); Logger.get('db').error('there was an error.. exiting..');
rimraf.sync(join(process.cwd(), 'prisma', 'migrations'));
process.exit(1); process.exit(1);
} }
}; };

View file

@ -1,6 +1,5 @@
const { readFile, readdir } = require('fs/promises'); const { readdir } = require('fs/promises');
const { existsSync } = require('fs'); const { extname } = require('path');
const { join, extname } = require('path');
const validateConfig = require('../server/validateConfig'); const validateConfig = require('../server/validateConfig');
const Logger = require('../src/lib/logger'); const Logger = require('../src/lib/logger');
const readConfig = require('../src/lib/readConfig'); const readConfig = require('../src/lib/readConfig');

View file

@ -10,14 +10,17 @@ module.exports = (url, args) => {
}, },
}); });
proc.stdout.on('data', d => console.log(d.toString())); let a = '';
proc.stdout.on('data', d => {
console.log(d.toString());
a += d.toString();
});
proc.stderr.on('data', d => { proc.stderr.on('data', d => {
console.log(d.toString()); console.log(d.toString());
rej(d.toString()); rej(d.toString());
}); });
proc.stdout.on('end', () => res(a));
proc.stdout.on('close', () => res()); proc.stdout.on('close', () => res(a));
}); });
}; };

View file

@ -1,16 +1,17 @@
const next = require('next'); const next = require('next');
const { createServer } = require('http'); const { createServer } = require('http');
const { readFile, stat, mkdir } = require('fs/promises'); const { stat, mkdir } = require('fs/promises');
const { existsSync } = require('fs');
const { execSync } = require('child_process'); const { execSync } = require('child_process');
const { join, extname } = require('path'); const { extname } = require('path');
const { red, green, bold } = require('colorette'); const { red, green, bold } = require('colorette');
const { PrismaClient } = require('@prisma/client'); const { PrismaClient } = require('@prisma/client');
const validateConfig = require('./validateConfig'); const validateConfig = require('./validateConfig');
const Logger = require('../src/lib/logger'); const Logger = require('../src/lib/logger');
const getFile = require('./static'); const getFile = require('./static');
const prismaRun = require('../scripts/prisma-run');
const readConfig = require('../src/lib/readConfig'); const readConfig = require('../src/lib/readConfig');
const mimes = require('../scripts/mimes'); const mimes = require('../scripts/mimes');
const deployDb = require('../scripts/deploy-db');
Logger.get('server').info('starting zipline server'); Logger.get('server').info('starting zipline server');
@ -34,14 +35,14 @@ function shouldUseYarn() {
(async () => { (async () => {
try { try {
const config = readConfig(); const config = readConfig();
if (!existsSync(join(process.cwd(), 'prisma', 'migrations'))) {
Logger.get('server').info('detected an uncreated database - creating...');
require('../scripts/deploy-db')(config);
}
await validateConfig(config); await validateConfig(config);
const data = await prismaRun(config.database.url, ['migrate', 'status']);
if (data.includes('Following migration have not yet been applied:')) {
Logger.get('database').info('some migrations are not applied, applying them now...');
await deployDb(config);
Logger.get('database').info('finished applying migrations');
}
process.env.DATABASE_URL = config.database.url; process.env.DATABASE_URL = config.database.url;
await stat('./.next'); await stat('./.next');
@ -115,7 +116,6 @@ function shouldUseYarn() {
}); });
srv.listen(config.core.port, config.core.host ?? '0.0.0.0'); srv.listen(config.core.port, config.core.host ?? '0.0.0.0');
} catch (e) { } catch (e) {
if (e.message && e.message.startsWith('Could not find a production')) { if (e.message && e.message.startsWith('Could not find a production')) {
Logger.get('web').error(`there is no production build - run \`${shouldUseYarn() ? 'yarn build' : 'npm build'}\``); Logger.get('web').error(`there is no production build - run \`${shouldUseYarn() ? 'yarn build' : 'npm build'}\``);

View file

@ -1,5 +1,5 @@
const { format } = require('fecha'); const { format } = require('fecha');
const { yellow, blueBright, magenta, red, cyan } = require('colorette'); const { yellow, blueBright, magenta, red, cyan } = require('colorette');
class Logger { class Logger {
static get(clas) { static get(clas) {

View file

@ -13,7 +13,7 @@ export interface ConfigCore {
} }
export interface ConfigDatabase { export interface ConfigDatabase {
type: 'psql' | 'mysql' | 'sqlite'; type: 'psql';
url: string; url: string;
} }

View file

@ -599,22 +599,22 @@
resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.9.2.tgz#adea7b6953cbb34651766b0548468e743c6a2353" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.9.2.tgz#adea7b6953cbb34651766b0548468e743c6a2353"
integrity sha512-VZMYa7+fXHdwIq1TDhSXoVmSPEGM/aa+6Aiq3nVVJ9bXr24zScr+NlKFKC3iPljA7ho/GAZr+d2jOf5GIRC30Q== integrity sha512-VZMYa7+fXHdwIq1TDhSXoVmSPEGM/aa+6Aiq3nVVJ9bXr24zScr+NlKFKC3iPljA7ho/GAZr+d2jOf5GIRC30Q==
"@prisma/client@2.25.0": "@prisma/client@^2.30.0":
version "2.25.0" version "2.30.0"
resolved "https://registry.yarnpkg.com/@prisma/client/-/client-2.25.0.tgz#a81cdf93ce93128eb35298cf8935480f3da6cca3" resolved "https://registry.yarnpkg.com/@prisma/client/-/client-2.30.0.tgz#b0ed9db67405f619e428577f2d45843104142e00"
integrity sha512-JDrAJ+oemiYAwgpYNJvCVT59S9bMbqkx78q2OT54xmmBoyYWWnn6t6oS6q8gKMiKHS6rzm/jdh3sy+2E0R+NAQ== integrity sha512-tjJNHVfgyNOwS2F+AkjMMCJGPnXzHuUCrOnAMJyidAu4aNzxbJ8jWwjt96rRMpyrg9Hwen3xqqQ2oA+ikK7nhQ==
dependencies: dependencies:
"@prisma/engines-version" "2.25.0-36.c838e79f39885bc8e1611849b1eb28b5bb5bc922" "@prisma/engines-version" "2.30.0-28.60b19f4a1de4fe95741da371b4c44a92f4d1adcb"
"@prisma/engines-version@2.25.0-36.c838e79f39885bc8e1611849b1eb28b5bb5bc922": "@prisma/engines-version@2.30.0-28.60b19f4a1de4fe95741da371b4c44a92f4d1adcb":
version "2.25.0-36.c838e79f39885bc8e1611849b1eb28b5bb5bc922" version "2.30.0-28.60b19f4a1de4fe95741da371b4c44a92f4d1adcb"
resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-2.25.0-36.c838e79f39885bc8e1611849b1eb28b5bb5bc922.tgz#b353576a97d0c1952fd4f4201189e845aaafbea8" resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-2.30.0-28.60b19f4a1de4fe95741da371b4c44a92f4d1adcb.tgz#1360113dc19e1d43d4442e3b638ccfa0e1711943"
integrity sha512-uZaonv3ZzLYAi99AooOe2BOBmb3k+ibVsJyZ5J3F6U1uFHTtTI9AVzC51mE09iNcgq3ZBt2CZNi5CDQZedMWyA== integrity sha512-oThNpx7HtJ0eEmnvrWARYcNCs6dqFdAK3Smt2bJVDD6Go4HLuuhjx028osP+rHaFrGOTx7OslLZYtvvFlAXRDA==
"@prisma/engines@2.25.0-36.c838e79f39885bc8e1611849b1eb28b5bb5bc922": "@prisma/engines@2.30.0-28.60b19f4a1de4fe95741da371b4c44a92f4d1adcb":
version "2.25.0-36.c838e79f39885bc8e1611849b1eb28b5bb5bc922" version "2.30.0-28.60b19f4a1de4fe95741da371b4c44a92f4d1adcb"
resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-2.25.0-36.c838e79f39885bc8e1611849b1eb28b5bb5bc922.tgz#68d7850d311df6d017e1b878adb19ec21483bcf0" resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-2.30.0-28.60b19f4a1de4fe95741da371b4c44a92f4d1adcb.tgz#b4d91ff876662b1de83e0cc913149a1c088becc7"
integrity sha512-vjLCk8AFRZu3D8h/SMcWDzTo0xkMuUDyXQzXekn8gzAGjb47B6LQXGR6rDoZ3/uPM13JNTLPvF62mtVaY6fVeQ== integrity sha512-LPKq88lIbYezvX0OOc1PU42hHdTsSMPJWmK8lusaHK7DaLHyXjDp/551LbsVapypbjW6N3Jx/If6GoMDASSMSw==
"@reduxjs/toolkit@^1.6.0": "@reduxjs/toolkit@^1.6.0":
version "1.6.0" version "1.6.0"
@ -651,11 +651,6 @@
resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.1.tgz#a6ca6a9a0ff366af433f42f5f0e124794ff6b8f1" resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.1.tgz#a6ca6a9a0ff366af433f42f5f0e124794ff6b8f1"
integrity sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA== integrity sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA==
"@types/bcryptjs@^2.4.2":
version "2.4.2"
resolved "https://registry.yarnpkg.com/@types/bcryptjs/-/bcryptjs-2.4.2.tgz#e3530eac9dd136bfdfb0e43df2c4c5ce1f77dfae"
integrity sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ==
"@types/body-parser@*": "@types/body-parser@*":
version "1.19.0" version "1.19.0"
resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f"
@ -664,13 +659,6 @@
"@types/connect" "*" "@types/connect" "*"
"@types/node" "*" "@types/node" "*"
"@types/busboy@^0.2.3":
version "0.2.3"
resolved "https://registry.yarnpkg.com/@types/busboy/-/busboy-0.2.3.tgz#6697ad29873246c530f09a3ff5a40861824230d5"
integrity sha1-ZpetKYcyRsUw8Jo/9aQIYYJCMNU=
dependencies:
"@types/node" "*"
"@types/connect@*": "@types/connect@*":
version "3.4.34" version "3.4.34"
resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901"
@ -1338,13 +1326,6 @@ busboy@^0.2.11:
dicer "0.2.5" dicer "0.2.5"
readable-stream "1.1.x" readable-stream "1.1.x"
busboy@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b"
integrity sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==
dependencies:
dicer "0.3.0"
bytes@3.1.0: bytes@3.1.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
@ -1946,13 +1927,6 @@ dicer@0.2.5:
readable-stream "1.1.x" readable-stream "1.1.x"
streamsearch "0.1.2" streamsearch "0.1.2"
dicer@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872"
integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==
dependencies:
streamsearch "0.1.2"
diff@^4.0.1: diff@^4.0.1:
version "4.0.2" version "4.0.2"
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
@ -4452,12 +4426,12 @@ prepend-http@^1.0.1:
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
prisma@2.25.0: prisma@^2.30.0:
version "2.25.0" version "2.30.0"
resolved "https://registry.yarnpkg.com/prisma/-/prisma-2.25.0.tgz#1ebfef3e945a22c673b3e3c5100f098da475700d" resolved "https://registry.yarnpkg.com/prisma/-/prisma-2.30.0.tgz#5b12091c480d538540b898d364b73651d44b4a01"
integrity sha512-AdAlP+PShvugljIx62Omu+eLKu6Cozz06dehmClIHSb0/yFiVnyBtrRVV4LZus+QX6Ayg7CTDvtzroACAWl+Zw== integrity sha512-2XYpSibcVpMd1JDxYypGDU/JKq0W2f/HI1itdddr4Pfg+q6qxt/ItWKcftv4/lqN6u/BVlQ2gDzXVEjpHeO5kQ==
dependencies: dependencies:
"@prisma/engines" "2.25.0-36.c838e79f39885bc8e1611849b1eb28b5bb5bc922" "@prisma/engines" "2.30.0-28.60b19f4a1de4fe95741da371b4c44a92f4d1adcb"
process-nextick-args@~2.0.0: process-nextick-args@~2.0.0:
version "2.0.1" version "2.0.1"