mirror of
https://github.com/chenasraf/venom.git
synced 2026-05-17 17:28:08 +00:00
feat(db): add postgres database
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
.eslintrc.js
|
||||
**/migrations/**
|
||||
|
||||
# compiled output
|
||||
/dist
|
||||
|
||||
5
.github/PULL_REQUEST_TEMPLATE.md
vendored
5
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -4,6 +4,7 @@
|
||||
A quick overview of the "why" of this PR to help reviewers
|
||||
If applicable, provide links to GitHub issues
|
||||
-->
|
||||
|
||||
[GitHub Issue](https://github.com/jondeaves/venom/issues/XXX)
|
||||
|
||||
## Description
|
||||
@@ -21,6 +22,10 @@ create a new one?
|
||||
Link to PRs or describe manual steps
|
||||
-->
|
||||
|
||||
<!-- Does this change require a database migration?
|
||||
If so has it been applied before you merge?
|
||||
-->
|
||||
|
||||
## Testing
|
||||
|
||||
<!-- What steps have been taken to test this work? -->
|
||||
|
||||
@@ -37,6 +37,7 @@ At a minimum you need to provide the Discord bots Token (which can be found on t
|
||||
| LOG_LEVEL | What level of logs should be displayed in console | `error`, `warn`, `info`, `verbose`, `debug` or `silly` |
|
||||
| MONGODB_URI | Full connection string for MongoDB database, include db_name if user is scoped to single database | mongodb://user:password@localhost:27017/venom_db |
|
||||
| MONGODB_DB_NAME | The name of the database to use for this project | venom_db |
|
||||
| DATABASE_URL | Full connection string for Postgres database | postgres://user:password@localhost:5432/db_name |
|
||||
|
||||
### Bot commands
|
||||
|
||||
|
||||
@@ -27,13 +27,17 @@ The best way to test new work is to add the test bot you created above to a diff
|
||||
|
||||
## MongoDB Instance
|
||||
|
||||
The bot uses MongoDB to store it's data, as a consequence of this you will need to have your own instance of MongoDB if you wish to run the bot yourself. If you don't want to install an instance on your own machine then we can recommend [mLab](https://mlab.com/), as this will be as close to the production version as possible.
|
||||
The bot uses MongoDB to store it's data, as a consequence of this you will need to have your own instance of MongoDB if you wish to run the bot yourself. If you don't want to install an instance on your own machine then we can recommend [mLab](https://mlab.com/), as this will be as close to the production version as possible and is free.
|
||||
|
||||
## Postgres Instance
|
||||
|
||||
The bot uses Postgres to store more structured data, as a consequence of this you will need to have your own instance of Postgres if you wish to run the bot yourself. If you don't want to install an instance on your own machine then we can recommend [ElephantSQL](elephantsql.com), as this will be as close to the production version as possible and is free.
|
||||
|
||||
## Final thoughts
|
||||
|
||||
Once the above has been completed you can then run your bot locally, ensuring you set the values in `src/.env` to match those provided throughtout the steps above. You may also wish to set the following values.
|
||||
|
||||
- Set `BOT_TRIGGER` to `venom test ` or something similarly unique. Ensuring you don't confuse your bot with another.
|
||||
- Set `BOT_TRIGGER` to `venom test` or something similarly unique. Ensuring you don't confuse your bot with another.
|
||||
- Set `LOG_LEVEL` to `verbose` to see all possible log information.
|
||||
- Set `ENVIRONMENT` to `development`.
|
||||
- As mentioned above, set `DISCORD_BOT_TOKEN` to the value taken from the "Bot" tab of the Discord developer Application.
|
||||
|
||||
33
docs/development/typeorm.md
Normal file
33
docs/development/typeorm.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# TypeORM
|
||||
|
||||
The project uses TypeORM to interact with a Postgres database for times when more structured/related data needs to be stored and retrieved.
|
||||
|
||||
For full documentation on usage refer to the [TypeORM website](https://typeorm.io/).
|
||||
|
||||
## Usage
|
||||
|
||||
### Entities
|
||||
|
||||
> [Entity](https://typeorm.io/#/entities) is a class that maps to a database table (or collection when using MongoDB). You can create an entity by defining a new class and mark it with @Entity():
|
||||
|
||||
### Migrations
|
||||
|
||||
In order to ensure databases are up-to-date and in-sync between environments we use the [TypeORM built-in migrations](https://typeorm.io/#/migrations).
|
||||
|
||||
This boils down to running the command;
|
||||
|
||||
```bash
|
||||
yarn migrate:generate -n [name_describing_migration_or_feature]
|
||||
```
|
||||
|
||||
This will automatically generate a file in the `src/migrations` folder. From here you run;
|
||||
|
||||
```bash
|
||||
yarn migrate
|
||||
```
|
||||
|
||||
Which will actually make the changes to whatever database is defined in the `src/.env` environment file. This should be automated by the CI but at this time it must be done manually for production. Easiest way for this to happen is to have the production connection url commented out in the environment file so it can be quickly toggled on/off.
|
||||
|
||||
### Seeding
|
||||
|
||||
The seeding we have implemented is rudamentary but does the trick for now. It is really just a script that triggers TypeORM inserts while being able to truncate/clear data on each run. There is an initial seed file located at `src\seed\characters.ts` as a point of reference.
|
||||
17
ormconfig.ts
Normal file
17
ormconfig.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import path from 'path';
|
||||
import { ConnectionOptions } from 'typeorm';
|
||||
import dotenv from 'dotenv';
|
||||
|
||||
dotenv.config({ path: path.resolve(__dirname, 'src/', '.env') });
|
||||
|
||||
const config: ConnectionOptions = {
|
||||
type: 'postgres',
|
||||
url: process.env.DATABASE_URL,
|
||||
entities: [path.resolve(__dirname, 'src/**/*.entity{.ts,.js}')],
|
||||
migrations: [path.resolve(__dirname, 'src/migrations/**/*.ts')],
|
||||
cli: {
|
||||
migrationsDir: 'src/migrations',
|
||||
},
|
||||
};
|
||||
|
||||
export = config;
|
||||
@@ -15,6 +15,10 @@
|
||||
"start": "node dist/main.js",
|
||||
"start:dev": "nodemon",
|
||||
"test": "nyc --require ts-node/register mocha src/**/*.spec.ts --reporter spec --retries 3 --require 'node_modules/reflect-metadata/Reflect.js' --exit",
|
||||
"typeorm:cli": "ts-node ./node_modules/typeorm/cli -f ./ormconfig.ts",
|
||||
"migrate:generate": "ts-node ./node_modules/typeorm/cli -f ./ormconfig.ts migration:generate",
|
||||
"migrate": "ts-node ./node_modules/typeorm/cli -f ./ormconfig.ts migration:run",
|
||||
"seed": "ts-node ./src/seed/index.ts",
|
||||
"lint": "lint:code",
|
||||
"lint:code": "eslint src/**/*.{ts,js}",
|
||||
"lint:markdown": "markdownlint **/*.md",
|
||||
@@ -30,7 +34,9 @@
|
||||
"dotenv": "~8.2.0",
|
||||
"inversify": "~5.0.1",
|
||||
"mongodb": "~3.6.0",
|
||||
"pg": "^8.3.0",
|
||||
"reflect-metadata": "~0.1.13",
|
||||
"typeorm": "^0.2.25",
|
||||
"winston": "~3.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -39,6 +45,7 @@
|
||||
"@types/chai": "^4.2.12",
|
||||
"@types/chai-as-promised": "^7.1.3",
|
||||
"@types/dotenv": "~8.2.0",
|
||||
"@types/faker": "^4.1.12",
|
||||
"@types/mocha": "^8.0.2",
|
||||
"@types/mongodb": "~3.5.25",
|
||||
"@types/node": "~14.0.27",
|
||||
@@ -61,6 +68,7 @@
|
||||
"eslint-plugin-promise": "^4.2.1",
|
||||
"eslint-plugin-react": "^7.20.6",
|
||||
"eslint-plugin-unicorn": "^21.0.0",
|
||||
"faker": "^4.1.0",
|
||||
"husky": "^4.2.5",
|
||||
"lint-staged": "^10.2.11",
|
||||
"markdownlint-cli": "^0.23.2",
|
||||
|
||||
@@ -2,5 +2,6 @@ BOT_TRIGGER=!
|
||||
DISCORD_BOT_TOKEN=[replace with own token]
|
||||
MONGODB_URI=[mongo_connection_string]
|
||||
MONGODB_DB_NAME=[mongo_db_name]
|
||||
DATABASE_URL=[postgres_connection_string]
|
||||
NODE_ENV=production
|
||||
LOG_LEVEL=error
|
||||
13
src/app.ts
13
src/app.ts
@@ -4,6 +4,7 @@ import { exit } from 'process';
|
||||
import container from './inversity.config';
|
||||
|
||||
import ConfigService from './core/services/config.service';
|
||||
import DatabaseService from './core/services/database.service';
|
||||
import LoggerService from './core/services/logger.service';
|
||||
import MongoService from './core/services/mongo.service';
|
||||
|
||||
@@ -15,13 +16,16 @@ export default class App {
|
||||
|
||||
private _loggerService: LoggerService = container.resolve<LoggerService>(LoggerService);
|
||||
|
||||
private _dbService: MongoService = container.resolve<MongoService>(MongoService);
|
||||
private _mongoService: MongoService = container.resolve<MongoService>(MongoService);
|
||||
|
||||
private _databaseService: DatabaseService = container.resolve<DatabaseService>(DatabaseService);
|
||||
|
||||
private _discordClient: Discord.Client;
|
||||
|
||||
public async init(): Promise<void> {
|
||||
try {
|
||||
await this._dbService.connect();
|
||||
await this._mongoService.connect();
|
||||
await this._databaseService.connect();
|
||||
} catch (error) {
|
||||
this._loggerService.log('error', 'Cannot connect to database, exiting.', { error });
|
||||
exit(1);
|
||||
@@ -55,7 +59,7 @@ export default class App {
|
||||
message.reply("looks like I haven't learned that trick yet!");
|
||||
} else {
|
||||
try {
|
||||
await command.execute(message, args, prefix, commandList, this._dbService);
|
||||
await command.execute(message, args, prefix, commandList, this._mongoService, this._databaseService);
|
||||
} catch (error) {
|
||||
this._loggerService.log('error', error.message);
|
||||
message.reply('there was an error trying to follow that command!');
|
||||
@@ -92,6 +96,7 @@ export default class App {
|
||||
}
|
||||
|
||||
public exit(): void {
|
||||
this._dbService.disconnect();
|
||||
this._mongoService.disconnect();
|
||||
this._databaseService.disconnect();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import Discord, { Collection } from 'discord.js';
|
||||
|
||||
import MongoService from '../../core/services/mongo.service';
|
||||
import DatabaseService from '../../core/services/database.service';
|
||||
|
||||
export default interface ICommand {
|
||||
name: string;
|
||||
@@ -12,6 +13,7 @@ export default interface ICommand {
|
||||
args: string[],
|
||||
prefix?: string,
|
||||
commands?: Collection<string, ICommand>,
|
||||
dbService?: MongoService,
|
||||
mongoService?: MongoService,
|
||||
databaseService?: DatabaseService,
|
||||
) => Promise<void | Discord.Message>;
|
||||
}
|
||||
|
||||
40
src/bot/commands/character.ts
Normal file
40
src/bot/commands/character.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
import Discord, { Collection } from 'discord.js';
|
||||
|
||||
import ConfigService from '../../core/services/config.service';
|
||||
import DatabaseService from '../../core/services/database.service';
|
||||
import MongoService from '../../core/services/mongo.service';
|
||||
|
||||
import container from '../../inversity.config';
|
||||
|
||||
import Character from '../../carp/character/character.entity';
|
||||
|
||||
import ICommand from './ICommand';
|
||||
|
||||
const prefix = container.resolve<ConfigService>(ConfigService).get('BOT_TRIGGER');
|
||||
|
||||
const command: ICommand = {
|
||||
name: 'character',
|
||||
aliases: ['c'],
|
||||
description:
|
||||
'Adds a string to the list greetings used when new users connect to server! Include `{name}` in your message to replace with the new users name.',
|
||||
example: `\`${prefix}addgreeting Welcome to the club {name}\``,
|
||||
async execute(
|
||||
message: Discord.Message,
|
||||
args: string[],
|
||||
_prefix?: string,
|
||||
_commands?: Collection<string, ICommand>,
|
||||
_mongoService?: MongoService,
|
||||
dbService?: DatabaseService,
|
||||
) {
|
||||
// Just testing db stuff
|
||||
const matchedChar = await dbService.manager.findOne(Character, message.author.id);
|
||||
|
||||
if (!matchedChar) {
|
||||
return message.reply(`Doesn't look like you have joined this campaign`);
|
||||
}
|
||||
|
||||
return message.reply(`Welcome back ${matchedChar.name}`);
|
||||
},
|
||||
};
|
||||
|
||||
export default command;
|
||||
@@ -3,5 +3,6 @@ import addgreeting from './addgreeting';
|
||||
import help from './help';
|
||||
import ping from './ping';
|
||||
import see from './see';
|
||||
import character from './character';
|
||||
|
||||
export default [help, ping, see, magicball, addgreeting];
|
||||
export default [help, ping, see, magicball, addgreeting, character];
|
||||
|
||||
10
src/carp/character/character.entity.ts
Normal file
10
src/carp/character/character.entity.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { Entity, Column, PrimaryColumn } from 'typeorm';
|
||||
|
||||
@Entity()
|
||||
export default class Character {
|
||||
@PrimaryColumn({ unique: true })
|
||||
uid: string;
|
||||
|
||||
@Column()
|
||||
name: string;
|
||||
}
|
||||
@@ -24,6 +24,7 @@ export default class ConfigService {
|
||||
DISCORD_BOT_TOKEN: process.env.DISCORD_BOT_TOKEN,
|
||||
MONGODB_URI: process.env.MONGODB_URI || '',
|
||||
MONGODB_DB_NAME: process.env.MONGODB_DB_NAME || '',
|
||||
DATABASE_URL: process.env.DATABASE_URL || '',
|
||||
NODE_ENV: (process.env.NODE_ENV as Environment) || 'development',
|
||||
LOG_LEVEL: (process.env.LOG_LEVEL as LogLevel) || 'info',
|
||||
};
|
||||
|
||||
40
src/core/services/database.service.ts
Normal file
40
src/core/services/database.service.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
import { injectable } from 'inversify';
|
||||
import path from 'path';
|
||||
import { createConnection, Connection, EntityManager } from 'typeorm';
|
||||
|
||||
// eslint-disable-next-line import/no-cycle
|
||||
import container from '../../inversity.config';
|
||||
|
||||
import ConfigService from './config.service';
|
||||
// eslint-disable-next-line import/no-cycle
|
||||
import LoggerService from './logger.service';
|
||||
|
||||
@injectable()
|
||||
export default class DatabaseService {
|
||||
private _configService: ConfigService = container.resolve<ConfigService>(ConfigService);
|
||||
|
||||
private _loggerService: LoggerService = container.resolve<LoggerService>(LoggerService);
|
||||
|
||||
public _connection: Connection;
|
||||
|
||||
public get manager(): EntityManager {
|
||||
return this._connection.manager;
|
||||
}
|
||||
|
||||
public async connect(): Promise<void> {
|
||||
this._connection = await createConnection({
|
||||
type: 'postgres',
|
||||
url: this._configService.get('DATABASE_URL'),
|
||||
entities: [path.resolve(__dirname, '../../**/*.entity{.ts,.js}')],
|
||||
synchronize: true,
|
||||
});
|
||||
|
||||
this._loggerService.log('info', 'Venom is connected to Postgres');
|
||||
}
|
||||
|
||||
public disconnect(): void {
|
||||
if (this._connection && this._connection.isConnected) {
|
||||
this._connection.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
import { injectable } from 'inversify';
|
||||
import mongodb, { Collection, CollectionInsertOneOptions } from 'mongodb';
|
||||
import mongodb, { Collection } from 'mongodb';
|
||||
|
||||
// eslint-disable-next-line import/no-cycle
|
||||
import container from '../../inversity.config';
|
||||
|
||||
@@ -6,6 +6,7 @@ export default interface Config {
|
||||
DISCORD_BOT_TOKEN: string;
|
||||
MONGODB_URI: string;
|
||||
MONGODB_DB_NAME: string;
|
||||
DATABASE_URL: string;
|
||||
NODE_ENV: Environment;
|
||||
LOG_LEVEL: LogLevel;
|
||||
}
|
||||
|
||||
@@ -6,11 +6,14 @@ import HttpService from './core/services/http.service';
|
||||
import LoggerService from './core/services/logger.service';
|
||||
// eslint-disable-next-line import/no-cycle
|
||||
import MongoService from './core/services/mongo.service';
|
||||
// eslint-disable-next-line import/no-cycle
|
||||
import DatabaseService from './core/services/database.service';
|
||||
|
||||
const container = new Container();
|
||||
container.bind<ConfigService>(ConfigService).toSelf();
|
||||
container.bind<HttpService>(HttpService).toSelf();
|
||||
container.bind<LoggerService>(LoggerService).toSelf();
|
||||
container.bind<MongoService>(MongoService).toSelf();
|
||||
container.bind<DatabaseService>(DatabaseService).toSelf();
|
||||
|
||||
export default container;
|
||||
|
||||
@@ -6,6 +6,7 @@ import 'reflect-metadata';
|
||||
|
||||
import App from './app';
|
||||
|
||||
// Load config
|
||||
dotenv.config({ path: path.resolve(__dirname, './', '.env') });
|
||||
|
||||
const app = new App();
|
||||
|
||||
15
src/migrations/1597437679213-basic_character.ts
Normal file
15
src/migrations/1597437679213-basic_character.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||
|
||||
export class basicCharacter1597437679213 implements MigrationInterface {
|
||||
name = 'basicCharacter1597437679213';
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(
|
||||
`CREATE TABLE "character" ("uid" character varying NOT NULL, "name" character varying NOT NULL, CONSTRAINT "PK_1e68e7ffd5c106af49c1317e375" PRIMARY KEY ("uid"))`,
|
||||
);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`DROP TABLE "character"`);
|
||||
}
|
||||
}
|
||||
38
src/seed/characters.ts
Normal file
38
src/seed/characters.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
/* tslint:disable:no-console */
|
||||
import 'reflect-metadata';
|
||||
|
||||
import { Connection } from 'typeorm';
|
||||
// eslint-disable-next-line import/no-extraneous-dependencies
|
||||
import faker from 'faker';
|
||||
|
||||
import Character from '../carp/character/character.entity';
|
||||
import { logSeedOutput } from './helpers';
|
||||
|
||||
export default async function seedCharacters(connection: Connection): Promise<Character[]> {
|
||||
try {
|
||||
// Clear our data
|
||||
await connection.manager.query('TRUNCATE TABLE "character" CASCADE;');
|
||||
|
||||
const character = new Character();
|
||||
// Discord id looks to be a 16 character number, so let's fake it
|
||||
character.uid = faker.random
|
||||
.number({
|
||||
min: 1000000000000000,
|
||||
max: 1999999999999999,
|
||||
})
|
||||
.toString();
|
||||
character.name = 'Urthedak';
|
||||
|
||||
// Save data
|
||||
const newCharacter = await connection.manager.save(character);
|
||||
|
||||
logSeedOutput('Character', newCharacter);
|
||||
|
||||
return [newCharacter];
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.error(error);
|
||||
|
||||
return [];
|
||||
}
|
||||
}
|
||||
18
src/seed/helpers.ts
Normal file
18
src/seed/helpers.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
|
||||
/* eslint-disable no-console */
|
||||
export function logSeedOutput(title: string, obj: any): void {
|
||||
const titleStr = `${title} ${obj.id}`;
|
||||
const titleCharCount = titleStr.length;
|
||||
const boxWidth = 50;
|
||||
const titleSpacer = (boxWidth - titleCharCount) / 2;
|
||||
|
||||
console.log(`${'='.repeat(boxWidth)}`);
|
||||
console.log(`${' '.repeat(titleSpacer)}${titleStr}${' '.repeat(titleSpacer)}`);
|
||||
console.log(`${'='.repeat(boxWidth)}`);
|
||||
console.log(obj);
|
||||
console.log('\n\n');
|
||||
}
|
||||
/* eslint-enable no-console */
|
||||
/* eslint-enable @typescript-eslint/no-explicit-any */
|
||||
/* eslint-enable @typescript-eslint/explicit-module-boundary-types */
|
||||
35
src/seed/index.ts
Normal file
35
src/seed/index.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import 'reflect-metadata';
|
||||
|
||||
import path from 'path';
|
||||
import dotenv from 'dotenv';
|
||||
|
||||
import { createConnection } from 'typeorm';
|
||||
|
||||
import seedCharacters from './characters';
|
||||
|
||||
dotenv.config({ path: path.resolve(__dirname, '../', '.env') });
|
||||
|
||||
async function seed(): Promise<void> {
|
||||
try {
|
||||
const connection = await createConnection({
|
||||
type: 'postgres',
|
||||
url: process.env.DATABASE_URL,
|
||||
entities: [path.resolve(__dirname, '../../**/*.entity{.ts,.js}')],
|
||||
synchronize: true,
|
||||
});
|
||||
|
||||
// These perform the actual seeding
|
||||
const characters = await seedCharacters(connection);
|
||||
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(characters);
|
||||
|
||||
// Close things off
|
||||
await connection.close();
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
seed();
|
||||
311
yarn.lock
311
yarn.lock
@@ -457,6 +457,11 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
|
||||
integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
|
||||
|
||||
"@types/faker@^4.1.12":
|
||||
version "4.1.12"
|
||||
resolved "https://registry.yarnpkg.com/@types/faker/-/faker-4.1.12.tgz#065d37343677df1aa757c622650bd14666c42602"
|
||||
integrity sha512-0MEyzJrLLs1WaOCx9ULK6FzdCSj2EuxdSP9kvuxxdBEGujZYUOZ4vkPXdgu3dhyg/pOdn7VCatelYX7k0YShlA==
|
||||
|
||||
"@types/json-schema@^7.0.3":
|
||||
version "7.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd"
|
||||
@@ -681,6 +686,11 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.0:
|
||||
dependencies:
|
||||
type-fest "^0.11.0"
|
||||
|
||||
ansi-regex@^2.0.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
|
||||
integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
|
||||
|
||||
ansi-regex@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
|
||||
@@ -696,6 +706,11 @@ ansi-regex@^5.0.0:
|
||||
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
|
||||
integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
|
||||
|
||||
ansi-styles@^2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
|
||||
integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
|
||||
|
||||
ansi-styles@^3.2.0, ansi-styles@^3.2.1:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
||||
@@ -711,6 +726,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0:
|
||||
"@types/color-name" "^1.1.1"
|
||||
color-convert "^2.0.1"
|
||||
|
||||
any-promise@^1.0.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
|
||||
integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
|
||||
|
||||
anymatch@~3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
|
||||
@@ -719,6 +739,11 @@ anymatch@~3.1.1:
|
||||
normalize-path "^3.0.0"
|
||||
picomatch "^2.0.4"
|
||||
|
||||
app-root-path@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.0.0.tgz#210b6f43873227e18a4b810a032283311555d5ad"
|
||||
integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==
|
||||
|
||||
append-transform@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12"
|
||||
@@ -866,6 +891,11 @@ balanced-match@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
||||
|
||||
base64-js@^1.0.2:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
|
||||
integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
|
||||
|
||||
binary-extensions@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9"
|
||||
@@ -923,6 +953,19 @@ buffer-from@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
|
||||
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
|
||||
|
||||
buffer-writer@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04"
|
||||
integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==
|
||||
|
||||
buffer@^5.1.0:
|
||||
version "5.6.0"
|
||||
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786"
|
||||
integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==
|
||||
dependencies:
|
||||
base64-js "^1.0.2"
|
||||
ieee754 "^1.1.4"
|
||||
|
||||
cacheable-request@^6.0.0:
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912"
|
||||
@@ -1019,6 +1062,17 @@ chalk@4.1.0, chalk@^4.0.0, chalk@^4.1.0:
|
||||
ansi-styles "^4.1.0"
|
||||
supports-color "^7.1.0"
|
||||
|
||||
chalk@^1.1.1:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
|
||||
integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
|
||||
dependencies:
|
||||
ansi-styles "^2.2.1"
|
||||
escape-string-regexp "^1.0.2"
|
||||
has-ansi "^2.0.0"
|
||||
strip-ansi "^3.0.0"
|
||||
supports-color "^2.0.0"
|
||||
|
||||
chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||
@@ -1100,6 +1154,18 @@ cli-cursor@^3.1.0:
|
||||
dependencies:
|
||||
restore-cursor "^3.1.0"
|
||||
|
||||
cli-highlight@^2.0.0:
|
||||
version "2.1.4"
|
||||
resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.4.tgz#098cb642cf17f42adc1c1145e07f960ec4d7522b"
|
||||
integrity sha512-s7Zofobm20qriqDoU9sXptQx0t2R9PEgac92mENNm7xaEe1hn71IIMsXMK+6encA6WRCWWxIGQbipr3q998tlQ==
|
||||
dependencies:
|
||||
chalk "^3.0.0"
|
||||
highlight.js "^9.6.0"
|
||||
mz "^2.4.0"
|
||||
parse5 "^5.1.1"
|
||||
parse5-htmlparser2-tree-adapter "^5.1.1"
|
||||
yargs "^15.0.0"
|
||||
|
||||
cli-truncate@2.1.0, cli-truncate@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
|
||||
@@ -1721,6 +1787,11 @@ dotenv@*, dotenv@~8.2.0:
|
||||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
|
||||
integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==
|
||||
|
||||
dotenv@^6.2.0:
|
||||
version "6.2.0"
|
||||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064"
|
||||
integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==
|
||||
|
||||
dotgitignore@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/dotgitignore/-/dotgitignore-2.1.0.tgz#a4b15a4e4ef3cf383598aaf1dfa4a04bcc089b7b"
|
||||
@@ -1834,7 +1905,7 @@ escape-goat@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675"
|
||||
integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==
|
||||
|
||||
escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5:
|
||||
escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
||||
@@ -2147,6 +2218,11 @@ extend@^3.0.0:
|
||||
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
|
||||
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
|
||||
|
||||
faker@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/faker/-/faker-4.1.0.tgz#1e45bbbecc6774b3c195fad2835109c6d748cc3f"
|
||||
integrity sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=
|
||||
|
||||
fast-deep-equal@^3.1.1:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
|
||||
@@ -2172,6 +2248,11 @@ fecha@^4.2.0:
|
||||
resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.0.tgz#3ffb6395453e3f3efff850404f0a59b6747f5f41"
|
||||
integrity sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg==
|
||||
|
||||
figlet@^1.1.1:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.0.tgz#2db4d00a584e5155a96080632db919213c3e003c"
|
||||
integrity sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==
|
||||
|
||||
figures@^3.1.0, figures@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
|
||||
@@ -2464,7 +2545,7 @@ glob-parent@^5.0.0, glob-parent@~5.1.0:
|
||||
dependencies:
|
||||
is-glob "^4.0.1"
|
||||
|
||||
glob@7.1.6, glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.2:
|
||||
glob@7.1.6, glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.2:
|
||||
version "7.1.6"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
|
||||
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
|
||||
@@ -2551,6 +2632,13 @@ hard-rejection@^2.1.0:
|
||||
resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883"
|
||||
integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==
|
||||
|
||||
has-ansi@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
|
||||
integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
|
||||
dependencies:
|
||||
ansi-regex "^2.0.0"
|
||||
|
||||
has-flag@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
||||
@@ -2591,6 +2679,11 @@ he@1.2.0:
|
||||
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
|
||||
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
|
||||
|
||||
highlight.js@^9.6.0:
|
||||
version "9.18.3"
|
||||
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.3.tgz#a1a0a2028d5e3149e2380f8a865ee8516703d634"
|
||||
integrity sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ==
|
||||
|
||||
hosted-git-info@^2.1.4:
|
||||
version "2.8.8"
|
||||
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
|
||||
@@ -2627,6 +2720,11 @@ husky@^4.2.5:
|
||||
slash "^3.0.0"
|
||||
which-pm-runs "^1.0.0"
|
||||
|
||||
ieee754@^1.1.4:
|
||||
version "1.1.13"
|
||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
|
||||
integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==
|
||||
|
||||
ignore-by-default@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
|
||||
@@ -2690,7 +2788,7 @@ inflight@^1.0.4:
|
||||
once "^1.3.0"
|
||||
wrappy "1"
|
||||
|
||||
inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
|
||||
inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||
@@ -3582,6 +3680,11 @@ mkdirp@^0.5.1:
|
||||
dependencies:
|
||||
minimist "^1.2.5"
|
||||
|
||||
mkdirp@^1.0.3:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
|
||||
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
|
||||
|
||||
mocha@^8.1.1:
|
||||
version "8.1.1"
|
||||
resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.1.1.tgz#1de1ba4e9a2c955d96b84e469d7540848223592d"
|
||||
@@ -3646,6 +3749,15 @@ multimap@^1.1.0:
|
||||
resolved "https://registry.yarnpkg.com/multimap/-/multimap-1.1.0.tgz#5263febc085a1791c33b59bb3afc6a76a2a10ca8"
|
||||
integrity sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==
|
||||
|
||||
mz@^2.4.0:
|
||||
version "2.7.0"
|
||||
resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
|
||||
integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
|
||||
dependencies:
|
||||
any-promise "^1.0.0"
|
||||
object-assign "^4.0.1"
|
||||
thenify-all "^1.0.0"
|
||||
|
||||
natural-compare@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
|
||||
@@ -3968,6 +4080,11 @@ package-json@^6.3.0:
|
||||
registry-url "^5.0.0"
|
||||
semver "^6.2.0"
|
||||
|
||||
packet-reader@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74"
|
||||
integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==
|
||||
|
||||
parent-module@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
|
||||
@@ -3975,6 +4092,11 @@ parent-module@^1.0.0:
|
||||
dependencies:
|
||||
callsites "^3.0.0"
|
||||
|
||||
parent-require@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/parent-require/-/parent-require-1.0.0.tgz#746a167638083a860b0eef6732cb27ed46c32977"
|
||||
integrity sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc=
|
||||
|
||||
parse-github-repo-url@^1.3.0:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz#9e7d8bb252a6cb6ba42595060b7bf6df3dbc1f50"
|
||||
@@ -4005,6 +4127,18 @@ parse-json@^5.0.0:
|
||||
json-parse-better-errors "^1.0.1"
|
||||
lines-and-columns "^1.1.6"
|
||||
|
||||
parse5-htmlparser2-tree-adapter@^5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz#e8c743d4e92194d5293ecde2b08be31e67461cbc"
|
||||
integrity sha512-CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw==
|
||||
dependencies:
|
||||
parse5 "^5.1.1"
|
||||
|
||||
parse5@^5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
|
||||
integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
|
||||
|
||||
path-exists@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
|
||||
@@ -4082,6 +4216,58 @@ pathval@^1.1.0:
|
||||
resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0"
|
||||
integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA=
|
||||
|
||||
pg-connection-string@^2.3.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.3.0.tgz#c13fcb84c298d0bfa9ba12b40dd6c23d946f55d6"
|
||||
integrity sha512-ukMTJXLI7/hZIwTW7hGMZJ0Lj0S2XQBCJ4Shv4y1zgQ/vqVea+FLhzywvPj0ujSuofu+yA4MYHGZPTsgjBgJ+w==
|
||||
|
||||
pg-int8@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c"
|
||||
integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==
|
||||
|
||||
pg-pool@^3.2.1:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.2.1.tgz#5f4afc0f58063659aeefa952d36af49fa28b30e0"
|
||||
integrity sha512-BQDPWUeKenVrMMDN9opfns/kZo4lxmSWhIqo+cSAF7+lfi9ZclQbr9vfnlNaPr8wYF3UYjm5X0yPAhbcgqNOdA==
|
||||
|
||||
pg-protocol@^1.2.5:
|
||||
version "1.2.5"
|
||||
resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.2.5.tgz#28a1492cde11646ff2d2d06bdee42a3ba05f126c"
|
||||
integrity sha512-1uYCckkuTfzz/FCefvavRywkowa6M5FohNMF5OjKrqo9PSR8gYc8poVmwwYQaBxhmQdBjhtP514eXy9/Us2xKg==
|
||||
|
||||
pg-types@^2.1.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3"
|
||||
integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==
|
||||
dependencies:
|
||||
pg-int8 "1.0.1"
|
||||
postgres-array "~2.0.0"
|
||||
postgres-bytea "~1.0.0"
|
||||
postgres-date "~1.0.4"
|
||||
postgres-interval "^1.1.0"
|
||||
|
||||
pg@^8.3.0:
|
||||
version "8.3.0"
|
||||
resolved "https://registry.yarnpkg.com/pg/-/pg-8.3.0.tgz#941383300d38eef51ecb88a0188cec441ab64d81"
|
||||
integrity sha512-jQPKWHWxbI09s/Z9aUvoTbvGgoj98AU7FDCcQ7kdejupn/TcNpx56v2gaOTzXkzOajmOEJEdi9eTh9cA2RVAjQ==
|
||||
dependencies:
|
||||
buffer-writer "2.0.0"
|
||||
packet-reader "1.0.0"
|
||||
pg-connection-string "^2.3.0"
|
||||
pg-pool "^3.2.1"
|
||||
pg-protocol "^1.2.5"
|
||||
pg-types "^2.1.0"
|
||||
pgpass "1.x"
|
||||
semver "4.3.2"
|
||||
|
||||
pgpass@1.x:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.2.tgz#2a7bb41b6065b67907e91da1b07c1847c877b306"
|
||||
integrity sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=
|
||||
dependencies:
|
||||
split "^1.0.0"
|
||||
|
||||
picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.0.7, picomatch@^2.2.1:
|
||||
version "2.2.2"
|
||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
|
||||
@@ -4147,6 +4333,28 @@ pluralize@^8.0.0:
|
||||
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1"
|
||||
integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==
|
||||
|
||||
postgres-array@~2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e"
|
||||
integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==
|
||||
|
||||
postgres-bytea@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35"
|
||||
integrity sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=
|
||||
|
||||
postgres-date@~1.0.4:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.6.tgz#4925e8085b30c2ba1a06ac91b9a3473954a2ce2d"
|
||||
integrity sha512-o2a4gxeFcox+CgB3Ig/kNHBP23PiEXHCXx7pcIIsvzoNz4qv+lKTyiSkjOXIMNUl12MO/mOYl2K6wR9X5K6Plg==
|
||||
|
||||
postgres-interval@^1.1.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695"
|
||||
integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==
|
||||
dependencies:
|
||||
xtend "^4.0.0"
|
||||
|
||||
prelude-ls@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
|
||||
@@ -4408,7 +4616,7 @@ redent@^3.0.0:
|
||||
indent-string "^4.0.0"
|
||||
strip-indent "^3.0.0"
|
||||
|
||||
reflect-metadata@*, reflect-metadata@~0.1.13:
|
||||
reflect-metadata@*, reflect-metadata@^0.1.13, reflect-metadata@~0.1.13:
|
||||
version "0.1.13"
|
||||
resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08"
|
||||
integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==
|
||||
@@ -4557,7 +4765,7 @@ rxjs@^6.6.2:
|
||||
dependencies:
|
||||
tslib "^1.9.0"
|
||||
|
||||
safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
|
||||
safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
|
||||
version "5.2.1"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
||||
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
||||
@@ -4581,6 +4789,11 @@ saslprep@^1.0.0:
|
||||
dependencies:
|
||||
sparse-bitfield "^3.0.3"
|
||||
|
||||
sax@>=0.6.0:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
|
||||
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
|
||||
|
||||
semver-compare@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
|
||||
@@ -4603,6 +4816,11 @@ semver-regex@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
||||
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
||||
|
||||
semver@4.3.2:
|
||||
version "4.3.2"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.2.tgz#c7a07158a80bedd052355b770d82d6640f803be7"
|
||||
integrity sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=
|
||||
|
||||
semver@7.3.2, semver@^7.1.1, semver@^7.2.1, semver@^7.3.2:
|
||||
version "7.3.2"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
|
||||
@@ -4630,6 +4848,14 @@ setimmediate@^1.0.5:
|
||||
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
|
||||
integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
|
||||
|
||||
sha.js@^2.4.11:
|
||||
version "2.4.11"
|
||||
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
|
||||
integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
|
||||
dependencies:
|
||||
inherits "^2.0.1"
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
shebang-command@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
|
||||
@@ -4941,6 +5167,13 @@ stringify-package@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85"
|
||||
integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==
|
||||
|
||||
strip-ansi@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
|
||||
integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
|
||||
dependencies:
|
||||
ansi-regex "^2.0.0"
|
||||
|
||||
strip-ansi@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
|
||||
@@ -5049,6 +5282,11 @@ supports-color@7.1.0, supports-color@^7.0.0, supports-color@^7.1.0:
|
||||
dependencies:
|
||||
has-flag "^4.0.0"
|
||||
|
||||
supports-color@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
|
||||
integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
|
||||
|
||||
supports-color@^5.3.0, supports-color@^5.5.0:
|
||||
version "5.5.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
||||
@@ -5103,6 +5341,20 @@ text-table@^0.2.0:
|
||||
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
||||
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
|
||||
|
||||
thenify-all@^1.0.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
|
||||
integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=
|
||||
dependencies:
|
||||
thenify ">= 3.1.0 < 4"
|
||||
|
||||
"thenify@>= 3.1.0 < 4":
|
||||
version "3.3.1"
|
||||
resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
|
||||
integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
|
||||
dependencies:
|
||||
any-promise "^1.0.0"
|
||||
|
||||
through2@^2.0.0, through2@^2.0.2:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
|
||||
@@ -5255,6 +5507,27 @@ typedarray@^0.0.6:
|
||||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
||||
|
||||
typeorm@^0.2.25:
|
||||
version "0.2.25"
|
||||
resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.25.tgz#1a33513b375b78cc7740d2405202208b918d7dde"
|
||||
integrity sha512-yzQ995fyDy5wolSLK9cmjUNcmQdixaeEm2TnXB5HN++uKbs9TiR6Y7eYAHpDlAE8s9J1uniDBgytecCZVFergQ==
|
||||
dependencies:
|
||||
app-root-path "^3.0.0"
|
||||
buffer "^5.1.0"
|
||||
chalk "^2.4.2"
|
||||
cli-highlight "^2.0.0"
|
||||
debug "^4.1.1"
|
||||
dotenv "^6.2.0"
|
||||
glob "^7.1.2"
|
||||
js-yaml "^3.13.1"
|
||||
mkdirp "^1.0.3"
|
||||
reflect-metadata "^0.1.13"
|
||||
sha.js "^2.4.11"
|
||||
tslib "^1.9.0"
|
||||
xml2js "^0.4.17"
|
||||
yargonaut "^1.1.2"
|
||||
yargs "^13.2.1"
|
||||
|
||||
typescript@~3.9.7:
|
||||
version "3.9.7"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa"
|
||||
@@ -5471,7 +5744,20 @@ xdg-basedir@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
|
||||
integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
|
||||
|
||||
xtend@~4.0.1:
|
||||
xml2js@^0.4.17:
|
||||
version "0.4.23"
|
||||
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"
|
||||
integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==
|
||||
dependencies:
|
||||
sax ">=0.6.0"
|
||||
xmlbuilder "~11.0.0"
|
||||
|
||||
xmlbuilder@~11.0.0:
|
||||
version "11.0.1"
|
||||
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
|
||||
integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
|
||||
|
||||
xtend@^4.0.0, xtend@~4.0.1:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
|
||||
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
|
||||
@@ -5486,6 +5772,15 @@ yaml@^1.7.2:
|
||||
resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e"
|
||||
integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==
|
||||
|
||||
yargonaut@^1.1.2:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/yargonaut/-/yargonaut-1.1.4.tgz#c64f56432c7465271221f53f5cc517890c3d6e0c"
|
||||
integrity sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA==
|
||||
dependencies:
|
||||
chalk "^1.1.1"
|
||||
figlet "^1.1.1"
|
||||
parent-require "^1.0.0"
|
||||
|
||||
yargs-parser@13.1.2, yargs-parser@^13.1.2:
|
||||
version "13.1.2"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
|
||||
@@ -5528,7 +5823,7 @@ yargs-unparser@1.6.1:
|
||||
is-plain-obj "^1.1.0"
|
||||
yargs "^14.2.3"
|
||||
|
||||
yargs@13.3.2:
|
||||
yargs@13.3.2, yargs@^13.2.1:
|
||||
version "13.3.2"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
|
||||
integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
|
||||
@@ -5561,7 +5856,7 @@ yargs@^14.2.3:
|
||||
y18n "^4.0.0"
|
||||
yargs-parser "^15.0.1"
|
||||
|
||||
yargs@^15.0.2, yargs@^15.3.1:
|
||||
yargs@^15.0.0, yargs@^15.0.2, yargs@^15.3.1:
|
||||
version "15.4.1"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
|
||||
integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
|
||||
|
||||
Reference in New Issue
Block a user