From 1112cec2cb0ffe338634bf4b8bc958d3bdcbb944 Mon Sep 17 00:00:00 2001 From: zlq4863947 Date: Sat, 2 Mar 2019 02:28:39 +0900 Subject: [PATCH] feat(models): add master pair --- .npmignore | 4 +- README.md | 49 +++- modules/models/common/index.ts | 1 + modules/models/common/transformers.ts | 81 ++++++ modules/models/entity/master-pair/index.ts | 1 + .../entity/master-pair/master-pair.entity.ts | 136 +++++++++ modules/types/exchange.ts | 6 + modules/types/order.ts | 11 + modules/types/package.json | 2 +- package.json | 4 +- projects/intelligence/intel-factory.spec.ts | 2 +- yarn.lock | 266 +++++++++++++++++- 12 files changed, 538 insertions(+), 25 deletions(-) create mode 100644 modules/models/common/index.ts create mode 100644 modules/models/common/transformers.ts create mode 100644 modules/models/entity/master-pair/index.ts create mode 100644 modules/models/entity/master-pair/master-pair.entity.ts diff --git a/.npmignore b/.npmignore index 7e2c951..9e6ba31 100644 --- a/.npmignore +++ b/.npmignore @@ -9,8 +9,8 @@ .history # source -projects -modules +/projects +/modules index.ts # configuration diff --git a/README.md b/README.md index acbd44e..d7efa19 100644 --- a/README.md +++ b/README.md @@ -46,22 +46,51 @@ npm install dripjs-bitmex ## 使用 +- import + ```typescript -import { IntelFactory, BitmexSpy } from 'dripjs'; +import { IntelligenceFactory, BitmexSpy } from 'dripjs'; +// 生成指定交易所的数据接口 +const bitmexSpy = IntelligenceFactory.create(BitmexSpy, { + apiKey: `你的bitmex交易所apiKey`, + apiSecret: `你的bitmex交易所apiSecret`, + testnet: true, +}); const pair = 'XBTUSD'; -const bitmex = IntelFactory.create(BitmexSpy, { - apiKey: `xx`, - apiSecret: `zz`, - testnet: false, +// 订阅逐笔数据 +bitmexSpy.getTicker$(pair).subscribe((res) => { + console.log(res); }); -bitmex.getTransaction$(pair).subscribe((transaction) => { - console.log(transaction); +setTimeout(() => { + console.log('do stop ticker subscription'); + // 不用时,别忘记退订 + bitmexSpy.stopTicker(pair); +}, 5000); +``` + +- require + +```typescript +const dripjs = require('dripjs'); + +// 生成指定交易所的数据接口 +const bitmexSpy = dripjs.IntelligenceFactory.create(dripjs.BitmexSpy, { + apiKey: `你的bitmex交易所apiKey`, + apiSecret: `你的bitmex交易所apiSecret`, + testnet: true, }); +const pair = 'XBTUSD'; +// 订阅逐笔数据 +bitmexSpy.getTicker$(pair).subscribe((res) => { + console.log(res); +}); + setTimeout(() => { - bitmex.stopTransaction(pair); - bitmex.destory(); -}, 2000); + console.log('do stop ticker subscription'); + // 不用时,别忘记退订 + bitmexSpy.stopTicker(pair); +}, 5000); ``` ## 模块列表 diff --git a/modules/models/common/index.ts b/modules/models/common/index.ts new file mode 100644 index 0000000..845cc62 --- /dev/null +++ b/modules/models/common/index.ts @@ -0,0 +1 @@ +export * from './transformers'; diff --git a/modules/models/common/transformers.ts b/modules/models/common/transformers.ts new file mode 100644 index 0000000..4de6da6 --- /dev/null +++ b/modules/models/common/transformers.ts @@ -0,0 +1,81 @@ +type StringTransformerFunction = (value?: string | null | undefined) => string | null | undefined; + +interface StringTransformer { + from: StringTransformerFunction; + to: StringTransformerFunction; +} + +export function getFloorByDigitsTransformer(digit: number): StringTransformer { + return { + from: (value?: string | null | undefined) => value, + to: (value?: string | null | undefined) => { + if (value === undefined || value === null) { + return value; + } + + const [integer, fraction] = value.split('.'); + if (fraction === undefined) { + return value; + } + + const fractionReduced = fraction.substr(0, digit); + + return `${integer}.${fractionReduced}`; + }, + }; +} + +export const nullableDateTransformer = { + from: (value?: Date | null | undefined | number) => { + if (value === undefined || value === null) { + return value; + } + + if (value instanceof Date) { + return value.getTime(); + } + + return value; + }, + to: (value?: number | null | undefined) => { + if (value === undefined || value === null) { + return value; + } + + return new Date(value); + }, +}; + +/** + * Use this transformer for the following case. + * - we want to use a value as `boolean` in application, but store it as `tinyint` into DB. + */ +export const booleanTinyintTransformer = { + from: (val: 0 | 1): boolean => !!val, + to: (val: boolean) => { + if (val === undefined || val === null) { + return val; + } + const n = Number(val); + if (Number.isNaN(n)) { + throw new Error(`Invalid boolean value ${val}`); + } + + return n as 0 | 1; + }, +}; + +/** + * Use this when tinyint has a default value i.e. '0' or '1'. + * @see MasterPairEntity + */ +export const nullableBooleanTinyintTransformer = { + from: (val: 0 | 1): boolean => !!val, + to: (val: boolean | null | undefined) => { + if (val === undefined || val === null) { + return val; + } + + return Number(val) as 0 | 1; + }, +}; diff --git a/modules/models/entity/master-pair/index.ts b/modules/models/entity/master-pair/index.ts new file mode 100644 index 0000000..70e0491 --- /dev/null +++ b/modules/models/entity/master-pair/index.ts @@ -0,0 +1 @@ +export * from './master-pair.entity'; diff --git a/modules/models/entity/master-pair/master-pair.entity.ts b/modules/models/entity/master-pair/master-pair.entity.ts new file mode 100644 index 0000000..4970fd2 --- /dev/null +++ b/modules/models/entity/master-pair/master-pair.entity.ts @@ -0,0 +1,136 @@ +import { Pair, Timestamp } from '@dripjs/types'; +import { Column, Entity, Index, PrimaryGeneratedColumn } from 'typeorm'; + +import { getFloorByDigitsTransformer, nullableBooleanTinyintTransformer, nullableDateTransformer } from '../../common'; + +@Entity({ + name: 'master_pair', +}) +@Index('unique_base_asset_quote_asset', ['baseAsset', 'quoteAsset'], { unique: true }) +export class MasterPairEntity { + @PrimaryGeneratedColumn({ + type: 'bigint', + name: 'id', + unsigned: true, + comment: 'primary auto generated id', + }) + readonly id!: string; + + @Column({ + type: 'varchar', + name: 'name', + length: 10, + comment: 'special pair name', + }) + readonly name!: Pair['name']; + + @Column({ + type: 'varchar', + name: 'exchange', + length: 10, + comment: 'exchange of special pair name', + }) + readonly exchange!: Pair['exchange']; + + @Column({ + type: 'varchar', + name: 'base_asset', + length: 10, + comment: 'base asset name', + }) + readonly baseAsset!: Pair['baseAsset']; + + @Column({ + type: 'varchar', + name: 'quote_asset', + length: 10, + comment: 'quote asset name', + }) + readonly quoteAsset!: Pair['quoteAsset']; + + @Column({ + type: 'int', + name: 'price_precision', + unsigned: true, + comment: 'pair price precision', + }) + readonly pricePrecision!: Pair['pricePrecision']; + + @Column({ + type: 'int', + name: 'amount_precision', + unsigned: true, + comment: 'pair amount precision', + }) + readonly amountPrecision!: Pair['amountPrecision']; + + @Column({ + type: 'decimal', + name: 'min_order_amount', + precision: 9, + scale: 9, + unsigned: true, + comment: 'min Order amount', + default: () => '0.0', + transformer: getFloorByDigitsTransformer(9), + }) + readonly minOrderAmount!: Pair['minOrderAmount']; + + @Column({ + type: 'int', + name: 'max_order_amount', + unsigned: true, + comment: 'max Order amount', + }) + readonly maxOrderAmount!: Pair['maxOrderAmount']; + + @Column({ + type: 'decimal', + name: 'min_order_price', + precision: 9, + scale: 9, + unsigned: true, + comment: 'min Order price', + default: () => '0.0', + transformer: getFloorByDigitsTransformer(9), + }) + readonly minOrderPrice!: Pair['minOrderAmount']; + + @Column({ + type: 'int', + name: 'max_order_price', + unsigned: true, + comment: 'max Order price', + }) + readonly maxOrderPrice!: Pair['maxOrderAmount']; + + @Column({ + type: 'tinyint', + name: 'is_enabled', + unsigned: true, + width: 1, + comment: 'whether pair is enable status', + default: '0', + transformer: nullableBooleanTinyintTransformer, + }) + readonly isEnabled!: Pair['isEnabled']; + + @Column({ + type: 'datetime', + name: 'created_at', + precision: 3, + default: () => 'NOW(3)', + transformer: nullableDateTransformer, + }) + readonly createdAt!: Timestamp; + + @Column({ + type: 'datetime', + name: 'updated_at', + precision: 3, + default: () => 'NOW(3)', + onUpdate: 'NOW(3)', + transformer: nullableDateTransformer, + }) + readonly updatedAt!: Timestamp; +} diff --git a/modules/types/exchange.ts b/modules/types/exchange.ts index 92a4892..d699a4b 100644 --- a/modules/types/exchange.ts +++ b/modules/types/exchange.ts @@ -12,10 +12,16 @@ export interface Market { export interface Pair { name: string; + exchange: string; baseAsset: string; quoteAsset: string; amountPrecision: number; pricePrecision: number; + minOrderAmount: number; + maxOrderAmount: number; + minOrderPrice: number; + maxOrderPrice: number; + isEnabled: boolean; } export interface Stock { diff --git a/modules/types/order.ts b/modules/types/order.ts index 33c6e82..c93691a 100644 --- a/modules/types/order.ts +++ b/modules/types/order.ts @@ -10,3 +10,14 @@ export enum OrderSide { Buy = 'buy', Sell = 'sell', } + +export type Nominal = T & { + [Symbol.species]: Name; +}; + +/** + * timestamp + * eg: 1535600337261 + */ +export type Timestamp = Nominal; +export type BigNumberString = Nominal; diff --git a/modules/types/package.json b/modules/types/package.json index 5ee3385..268a3d4 100644 --- a/modules/types/package.json +++ b/modules/types/package.json @@ -1,6 +1,6 @@ { "name": "dripjs-types", - "version": "0.1.1", + "version": "0.1.2", "description": "dripjs types", "main": "dist/index.js", "typings": "dist/index.d.ts", diff --git a/package.json b/package.json index c250960..6064539 100644 --- a/package.json +++ b/package.json @@ -101,6 +101,7 @@ }, "homepage": "https://github.com/zlq4863947/dripjs#readme", "devDependencies": { + "@nestjs/typeorm": "5.3.0", "@types/jest": "24.0.9", "@types/qs": "6.5.1", "@types/ws": "6.0.1", @@ -133,10 +134,11 @@ "bignumber.js": "^8.1.0", "dotenv": "^6.2.0", "dripjs-common": "^0.1.0", - "dripjs-types": "^0.1.1", + "dripjs-types": "^0.1.2", "moment": "^2.24.0", "qs": "^6.6.0", "rxjs": "^6.4.0", + "typeorm": "^0.2.14", "ws": "^6.1.4" } } diff --git a/projects/intelligence/intel-factory.spec.ts b/projects/intelligence/intel-factory.spec.ts index 41d5707..edb8fd6 100644 --- a/projects/intelligence/intel-factory.spec.ts +++ b/projects/intelligence/intel-factory.spec.ts @@ -1,7 +1,7 @@ import { Bitmex } from '@dripjs/exchanges'; import { realConfig } from '@dripjs/testing'; -import { IntelFactory, Spy, BitmexSpy } from '.'; +import { BitmexSpy, IntelFactory, Spy } from '.'; describe('Intel factory', () => { describe('Spy bitmex', () => { diff --git a/yarn.lock b/yarn.lock index ab9f4b1..8850c6d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -139,6 +139,13 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" +"@nestjs/typeorm@5.3.0": + version "5.3.0" + resolved "https://registry.yarnpkg.com/@nestjs/typeorm/-/typeorm-5.3.0.tgz#448d6d08d73ceb3c1f8a00a07e26a86c8a62b9f8" + integrity sha512-8g80OcKRTfhh5oSkfUKPMfcKBuC0gsr79wBksUwEWoglB/7bvO/erz8RC0XQPdjRH6NRUc+qrglywGm6Be2FZQ== + dependencies: + uuid "3.3.2" + "@nodelib/fs.stat@^1.1.2": version "1.1.3" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" @@ -335,6 +342,11 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +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@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -343,6 +355,11 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +app-root-path@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.1.0.tgz#98bf6599327ecea199309866e8140368fd2e646a" + integrity sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo= + append-transform@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" @@ -535,6 +552,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.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -620,6 +642,14 @@ buffer-from@1.x, buffer-from@^1.0.0, buffer-from@^1.1.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" + integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -718,7 +748,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@^1.1.3: +chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -729,7 +759,7 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -770,6 +800,17 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-highlight@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-1.2.3.tgz#b200f97ed0e43d24633e89de0f489a48bb87d2bf" + integrity sha512-cmc4Y2kJuEpT2KZd9pgWWskpDMMfJu2roIcY1Ya/aIItufF5FKsV/NtA6vvdhSUllR8KJfvQDNmIcskU+MKLDg== + dependencies: + chalk "^2.3.0" + highlight.js "^9.6.0" + mz "^2.4.0" + parse5 "^3.0.3" + yargs "^10.0.3" + cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" @@ -1074,6 +1115,15 @@ coveralls@3.0.3: minimist "^1.2.0" request "^2.86.0" +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -1139,7 +1189,7 @@ debug@^2.1.2, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@^3.2.6: +debug@^3.1.0, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -1161,7 +1211,7 @@ decamelize-keys@^1.0.0: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -1303,6 +1353,11 @@ dot-prop@^3.0.0: dependencies: is-obj "^1.0.0" +dotenv@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" + integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow== + dotenv@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" @@ -1324,10 +1379,10 @@ dripjs-common@^0.1.0: rxjs "^6.4.0" ws "^6.1.3" -dripjs-types@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dripjs-types/-/dripjs-types-0.1.1.tgz#0dccad29298f7b56caa2667d6896cb4313508502" - integrity sha512-8hwg86NeLecsLiWx80a2e6KUHZb707uxKaD9nau7ai/cuvIZDYVnPdgAW6Izdq9OL0dTgVkLn6ytJxe6g3RXTw== +dripjs-types@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dripjs-types/-/dripjs-types-0.1.2.tgz#de434cb6823b989f8f42f35a1ad99bfeef3073ff" + integrity sha512-I3hLrJYVPSsdKhx+HS/raTBPiy+PulPB15NUWP16yEpC43q5diXTxZzmqMk36bjp7aYwJ9lQC/hNkeRJhzNRMw== ecc-jsbn@~0.1.1: version "0.1.2" @@ -1535,6 +1590,19 @@ exec-sh@^0.2.0: dependencies: merge "^1.2.0" +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -1664,6 +1732,11 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" +figlet@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.2.1.tgz#48d35df9d9b10b1b3888302e6e57904a0b00509c" + integrity sha512-qc8gycfnnfOmfvPl7Fi3JeTbcvdmbZkckyUVGGAM02je7Ookvu+bBfKy1I4FKqTsQHCs3ARJ76ip/k98r+OQuQ== + figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -1866,6 +1939,11 @@ get-stdin@~5.0.1: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g= +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -2071,6 +2149,11 @@ highlight.js@^9.13.1: resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.14.2.tgz#efbfb22dc701406e4da406056ef8c2b70ebe5b26" integrity sha512-Nc6YNECYpxyJABGYJAyw7dBAYbXEuIzwzkqoJnwbc1nIpCiN+3ioYf0XrBnLiyyG0JLuJhpPtt2iTSbXiKLoyA== +highlight.js@^9.6.0: + version "9.15.6" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.15.6.tgz#72d4d8d779ec066af9a17cb14360c3def0aa57c4" + integrity sha512-zozTAWM1D6sozHo8kqhfYgsac+B+q0PmsjXeyDrYIHHcBN0zTVT66+s2GW1GZv7DbyaROdLXKdabwS/WqPyIdQ== + hosted-git-info@^2.1.4: version "2.7.1" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" @@ -2099,6 +2182,11 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: dependencies: safer-buffer ">= 2.1.2 < 3" +ieee754@^1.1.4: + version "1.1.12" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" + integrity sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA== + ignore-walk@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" @@ -2280,6 +2368,11 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + invert-kv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" @@ -3095,6 +3188,13 @@ kleur@^3.0.2: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.2.tgz#83c7ec858a41098b613d5998a7b653962b504f68" integrity sha512-3h7B2WRT5LNXOtQiAaWonilegHcPSf9nLVXlSTci8lu1dZUuui61+EsPEZqSVxY7rXYmB2DVKMQILxaO5WL61Q== +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + lcid@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" @@ -3238,6 +3338,14 @@ loud-rejection@^1.0.0: currently-unhandled "^0.4.1" signal-exit "^3.0.0" +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + make-dir@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -3330,6 +3438,13 @@ mdurl@^1.0.1: resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= + dependencies: + mimic-fn "^1.0.0" + mem@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.1.0.tgz#aeb9be2d21f47e78af29e4ac5978e8afa2ca5b8a" @@ -3531,6 +3646,15 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= +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" + nan@^2.9.2: version "2.12.1" resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552" @@ -3764,6 +3888,15 @@ os-homedir@^1.0.0: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + os-locale@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -3858,6 +3991,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" @@ -3883,6 +4021,13 @@ parse5@4.0.0: resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== +parse5@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== + dependencies: + "@types/node" "*" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -4038,6 +4183,11 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + psl@^1.1.24, psl@^1.1.28: version "1.1.31" resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" @@ -4176,6 +4326,11 @@ redent@^2.0.0: indent-string "^3.0.0" strip-indent "^2.0.0" +reflect-metadata@^0.1.12: + 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== + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -4370,7 +4525,7 @@ sane@^3.0.0: optionalDependencies: fsevents "^1.2.3" -sax@^1.2.4: +sax@>=0.6.0, sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -4795,6 +4950,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.0" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" + integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk= + dependencies: + any-promise "^1.0.0" + throat@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" @@ -5079,6 +5248,26 @@ typedoc@0.14.2: typedoc-default-themes "^0.5.0" typescript "3.2.x" +typeorm@^0.2.14: + version "0.2.14" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.14.tgz#5bd39de1306977e7ccdb31c3915018374415e9ff" + integrity sha512-kPV8nX7g7hvFpuzdLKGxqkVRHEJe9AK6csgWJJPaCFU3NrLmUG6a2Q0FxY/Z0Qy/2gqt5VG3t3FyFpw360XSvg== + dependencies: + app-root-path "^2.0.1" + buffer "^5.1.0" + chalk "^2.3.2" + cli-highlight "^1.2.3" + debug "^3.1.0" + dotenv "^5.0.1" + glob "^7.1.2" + js-yaml "^3.11.0" + mkdirp "^0.5.1" + reflect-metadata "^0.1.12" + tslib "^1.9.0" + xml2js "^0.4.17" + yargonaut "^1.1.2" + yargs "^12.0.5" + typescript@3.2.x: version "3.2.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.2.4.tgz#c585cb952912263d915b462726ce244ba510ef3d" @@ -5160,7 +5349,7 @@ util.promisify@^1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" -uuid@^3.3.2: +uuid@3.3.2, uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== @@ -5328,21 +5517,53 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xml2js@^0.4.17: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q== + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + +xmlbuilder@~9.0.1: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= + xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + "y18n@^3.2.1 || ^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + yallist@^3.0.0, yallist@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== +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@10.x, yargs-parser@^10.0.0: version "10.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" @@ -5358,6 +5579,31 @@ yargs-parser@^11.1.1: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" + integrity sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ== + dependencies: + camelcase "^4.1.0" + +yargs@^10.0.3: + version "10.1.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" + integrity sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig== + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^8.1.0" + yargs@^12.0.2, yargs@^12.0.5: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13"