├── .npmignore ├── .gitignore ├── src ├── lib │ ├── index.ts │ ├── client.ts │ ├── fb-util.ts │ ├── transaction.ts │ ├── resultset.ts │ ├── attachment.ts │ ├── blob.ts │ └── statement.ts └── test │ └── test.ts ├── .vscode ├── extensions.json ├── settings.json └── tasks.json ├── README.md ├── tsconfig.json ├── LICENSE.md ├── .travis.yml ├── package.json └── yarn.lock /.npmignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | npm-debug.log 3 | crash.log 4 | 5 | .vscode 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | npm-debug.log 3 | yarn-error.log 4 | crash.log 5 | 6 | dist 7 | -------------------------------------------------------------------------------- /src/lib/index.ts: -------------------------------------------------------------------------------- 1 | export { createNativeClient, getDefaultLibraryFilename } from './client'; 2 | 3 | export * from 'node-firebird-driver'; 4 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | "EditorConfig.EditorConfig" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Project is moved to another repository 2 | 3 | Development of this project is happening at a new repository, as a monorepo with its related projects. 4 | 5 | https://github.com/asfernandes/node-firebird-drivers 6 | -------------------------------------------------------------------------------- /src/test/test.ts: -------------------------------------------------------------------------------- 1 | import { createNativeClient, getDefaultLibraryFilename } from '../lib'; 2 | 3 | import { runCommonTests } from 'node-firebird-driver/dist/test/tests'; 4 | 5 | const client = createNativeClient(getDefaultLibraryFilename()); 6 | 7 | runCommonTests(client); 8 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.tabSize": 4, 3 | "editor.insertSpaces": false, 4 | "editor.rulers": [140], 5 | 6 | "files.trimTrailingWhitespace": true, 7 | 8 | "files.exclude": { 9 | "node_modules/": true, 10 | "dist/": true 11 | }, 12 | 13 | "typescript.tsdk": "node_modules/typescript/lib" 14 | } 15 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=733558 3 | // for the documentation about the tasks.json format 4 | "version": "0.1.0", 5 | "tasks": [ 6 | { 7 | "taskName": "run build:w", 8 | "command": "yarn", 9 | "isShellCommand": true, 10 | "showOutput": "always", 11 | "suppressTaskName": true, 12 | "args": ["run", "build:w"], 13 | "isBuildCommand": true, 14 | "problemMatcher": "$tsc" 15 | }/*, 16 | { 17 | "taskName": "tsc", 18 | "command": "tsc", 19 | "isShellCommand": true, 20 | "args": ["-w", "-p", ".", "--noEmit"], 21 | "showOutput": "silent", 22 | "isBackground": true, 23 | "problemMatcher": "$tsc-watch" 24 | } 25 | */ 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es2016", 5 | "rootDir": "./src", 6 | "outDir": "./dist", 7 | "sourceMap": true, 8 | "declaration": true, 9 | "experimentalDecorators": true, 10 | "lib": [ 11 | "es6" 12 | ], 13 | "strictNullChecks": true, 14 | "allowUnreachableCode": false, 15 | "allowUnusedLabels": false, 16 | "alwaysStrict": true, 17 | "forceConsistentCasingInFileNames": true, 18 | "noImplicitAny": true, 19 | "noImplicitReturns": true, 20 | "noImplicitThis": true, 21 | "noFallthroughCasesInSwitch": true, 22 | "noUnusedLocals": true 23 | }, 24 | "include": [ 25 | "./src/**/*" 26 | ], 27 | "exclude": [ 28 | "node_modules", 29 | "dist", 30 | "build" 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Adriano dos Santos Fernandes 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files 6 | (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the 8 | following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 11 | 12 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 13 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 14 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 15 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 16 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | 3 | node_js: 4 | - '6' 5 | - '7' 6 | - '8' 7 | 8 | dist: trusty 9 | sudo: required 10 | 11 | env: 12 | - CXX=g++-5 13 | 14 | matrix: 15 | fast_finish: true 16 | 17 | branches: 18 | only: 19 | - master 20 | 21 | install: 22 | - wget -O Firebird-3.0.2.32703-0.amd64.tar.gz "https://downloads.sourceforge.net/project/firebird/firebird-linux-amd64/3.0.2-Release/Firebird-3.0.2.32703-0.amd64.tar.gz?r=http%3A%2F%2Fwww.firebirdsql.org%2Fen%2Ffirebird-3-0-2%2F&ts=1490819755&use_mirror=ufpr" 23 | - tar xzvf Firebird-3.0.2.32703-0.amd64.tar.gz 24 | - (cd Firebird-3.0.2.32703-0.amd64; sudo ./install.sh -silent) 25 | - sudo usermod -a -G firebird travis 26 | - cd $TRAVIS_BUILD_DIR/.. 27 | - git clone https://github.com/asfernandes/node-firebird-driver.git 28 | - cd node-firebird-driver 29 | - yarn 30 | - yarn run build 31 | - yarn link 32 | - cd .. 33 | - git clone https://github.com/asfernandes/node-firebird-native-api.git 34 | - cd node-firebird-native-api 35 | - yarn 36 | - yarn run build 37 | - yarn link 38 | - cd $TRAVIS_BUILD_DIR 39 | 40 | script: 41 | - sg firebird -c "yarn link node-firebird-driver" 42 | - sg firebird -c "yarn link node-firebird-native-api" 43 | - sg firebird -c "yarn" 44 | - sg firebird -c "yarn run build" 45 | - sg firebird -c "yarn test" 46 | 47 | cache: 48 | directories: 49 | - node_modules 50 | 51 | git: 52 | depth: 1 53 | 54 | addons: 55 | apt: 56 | sources: 57 | - ubuntu-toolchain-r-test 58 | packages: 59 | - gcc-5 60 | - g++-5 61 | - libtommath0 62 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node-firebird-driver-native", 3 | "version": "0.0.1-beta.1", 4 | "description": "Firebird Native Driver for Node.js", 5 | "main": "dist/lib/index.js", 6 | "scripts": { 7 | "clean": "rimraf dist", 8 | "build": "yarn run clean && tsc", 9 | "build:w": "yarn run clean && tsc -w", 10 | "test": "mocha --require source-map-support/register dist/test", 11 | "prepublishOnly": "yarn run build && yarn test" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "git+https://github.com/asfernandes/node-firebird-driver-native.git" 16 | }, 17 | "keywords": [ 18 | "firebird" 19 | ], 20 | "author": { 21 | "name": "Adriano dos Santos Fernandes", 22 | "email": "adrianosf@gmail.com", 23 | "url": "https://asfernandes.github.io" 24 | }, 25 | "license": "MIT", 26 | "bugs": { 27 | "url": "https://github.com/asfernandes/node-firebird-driver-native/issues" 28 | }, 29 | "homepage": "https://github.com/asfernandes/node-firebird-driver-native#readme", 30 | "typings": "./dist/lib/index.d.ts", 31 | "dependencies": { 32 | "@types/node": "6.0.88", 33 | "node-firebird-driver": "0.0.1-beta.1", 34 | "node-firebird-native-api": "0.0.1-beta.1" 35 | }, 36 | "devDependencies": { 37 | "@types/fs-extra-promise": "1.0.2", 38 | "@types/mocha": "^2.2.41", 39 | "@types/power-assert": "^1.4.29", 40 | "@types/temp-fs": "^0.9.27", 41 | "fs-extra-promise": "^1.0.1", 42 | "mocha": "^3.4.2", 43 | "power-assert": "^1.4.4", 44 | "rimraf": "^2.6.1", 45 | "source-map-support": "^0.4.15", 46 | "temp-fs": "^0.9.9", 47 | "typescript": "^2.4.1" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/lib/client.ts: -------------------------------------------------------------------------------- 1 | import { AttachmentImpl } from './attachment'; 2 | 3 | import { 4 | Client, 5 | ConnectOptions, 6 | CreateDatabaseOptions 7 | } from 'node-firebird-driver'; 8 | 9 | import { AbstractClient } from 'node-firebird-driver/dist/lib/impl'; 10 | 11 | import * as fb from 'node-firebird-native-api'; 12 | 13 | 14 | /** Gets the default platform Firebird client library filename. */ 15 | export { getDefaultLibraryFilename } from 'node-firebird-native-api'; 16 | 17 | /** Creates a client for a given library filename. */ 18 | export function createNativeClient(library: string): Client { 19 | return new ClientImpl(library); 20 | } 21 | 22 | 23 | /** Client implementation. */ 24 | export class ClientImpl extends AbstractClient { 25 | master?: fb.Master; 26 | dispatcher?: fb.Provider; 27 | util?: fb.Util; 28 | 29 | constructor(library: string) { 30 | super(); 31 | this.master = fb.getMaster(library); 32 | this.dispatcher = this.master.getDispatcherSync(); 33 | this.util = this.master.getUtilInterfaceSync(); 34 | } 35 | 36 | async statusAction(action: (status: fb.Status) => Promise): Promise { 37 | const status = this.master!.getStatusSync()!; 38 | try { 39 | return await action(status); 40 | } 41 | finally { 42 | status.disposeSync(); 43 | } 44 | } 45 | 46 | /** Connects to a database. */ 47 | protected async internalConnect(uri: string, options?: ConnectOptions): Promise { 48 | return await AttachmentImpl.connect(this, uri, options); 49 | } 50 | 51 | /** Creates a database. */ 52 | protected async internalCreateDatabase(uri: string, options?: CreateDatabaseOptions): Promise { 53 | return await AttachmentImpl.createDatabase(this, uri, options); 54 | } 55 | 56 | /** Disposes this client's resources. */ 57 | protected async internalDispose(): Promise { 58 | this.dispatcher!.releaseSync(); 59 | fb.disposeMaster(this.master!); 60 | 61 | this.util = undefined; 62 | this.dispatcher = undefined; 63 | this.master = undefined; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/lib/fb-util.ts: -------------------------------------------------------------------------------- 1 | import { sqlTypes, Descriptor } from 'node-firebird-driver/dist/lib/impl'; 2 | export * from 'node-firebird-driver/dist/lib/impl'; 3 | 4 | import * as fb from 'node-firebird-native-api'; 5 | 6 | 7 | /** Fix metadata descriptors to types we want to read. */ 8 | export function fixMetadata(status: fb.Status, metadata?: fb.MessageMetadata): fb.MessageMetadata | undefined { 9 | if (!metadata) 10 | return undefined; 11 | 12 | let ret: fb.MessageMetadata; 13 | 14 | const outBuilder = metadata.getBuilderSync(status)!; 15 | try { 16 | for (let i = metadata.getCountSync(status) - 1; i >= 0; --i) { 17 | switch (metadata.getTypeSync(status, i)) { 18 | // Transforms CHAR descriptors to VARCHAR. 19 | case sqlTypes.SQL_TEXT: 20 | outBuilder.setTypeSync(status, i, sqlTypes.SQL_VARYING); 21 | break; 22 | 23 | // Transforms numeric descriptors to DOUBLE PRECISION. 24 | case sqlTypes.SQL_SHORT: 25 | case sqlTypes.SQL_LONG: 26 | case sqlTypes.SQL_INT64: 27 | case sqlTypes.SQL_FLOAT: 28 | outBuilder.setTypeSync(status, i, sqlTypes.SQL_DOUBLE); 29 | outBuilder.setLengthSync(status, i, 8); 30 | outBuilder.setScaleSync(status, i, 0); 31 | break; 32 | } 33 | } 34 | 35 | ret = outBuilder.getMetadataSync(status)!; 36 | } 37 | finally { 38 | outBuilder.releaseSync(); 39 | } 40 | 41 | metadata.releaseSync(); 42 | 43 | return ret; 44 | } 45 | 46 | export function createDescriptors(status: fb.Status, metadata?: fb.MessageMetadata): Descriptor[] { 47 | if (!metadata) 48 | return []; 49 | 50 | const count = metadata.getCountSync(status); 51 | const ret: Descriptor[] = []; 52 | 53 | for (let i = 0; i < count; ++i) { 54 | ret.push({ 55 | type: metadata.getTypeSync(status, i), 56 | subType: metadata.getSubTypeSync(status, i), 57 | nullOffset: metadata.getNullOffsetSync(status, i), 58 | offset: metadata.getOffsetSync(status, i), 59 | length: metadata.getLengthSync(status, i), 60 | scale: metadata.getScaleSync(status, i), 61 | }); 62 | } 63 | 64 | return ret; 65 | } 66 | -------------------------------------------------------------------------------- /src/lib/transaction.ts: -------------------------------------------------------------------------------- 1 | import { AttachmentImpl } from './attachment'; 2 | import { createTpb } from './fb-util'; 3 | 4 | import { TransactionOptions } from 'node-firebird-driver'; 5 | import { AbstractTransaction } from 'node-firebird-driver/dist/lib/impl'; 6 | 7 | import * as fb from 'node-firebird-native-api'; 8 | 9 | 10 | /** Transaction implementation. */ 11 | export class TransactionImpl extends AbstractTransaction { 12 | // Override declarations. 13 | attachment: AttachmentImpl; 14 | 15 | transactionHandle?: fb.Transaction; 16 | 17 | static async start(attachment: AttachmentImpl, options?: TransactionOptions): Promise { 18 | const transaction = new TransactionImpl(attachment); 19 | 20 | return await attachment.client.statusAction(async status => { 21 | const tpb = createTpb(options); 22 | transaction.transactionHandle = await attachment!.attachmentHandle!.startTransactionAsync(status, tpb.length, tpb); 23 | return transaction; 24 | }); 25 | } 26 | 27 | /** Commits and release this transaction object. */ 28 | protected async internalCommit(): Promise { 29 | await this.attachment.client.statusAction(status => this.transactionHandle!.commitAsync(status)); 30 | this.transactionHandle = undefined; 31 | } 32 | 33 | /** Commits and maintains this transaction object for subsequent work. */ 34 | protected async internalCommitRetaining(): Promise { 35 | return await this.attachment.client.statusAction(status => this.transactionHandle!.commitRetainingAsync(status)); 36 | } 37 | 38 | /** Rollbacks and release this transaction object. */ 39 | protected async internalRollback(): Promise { 40 | await this.attachment.client.statusAction(status => this.transactionHandle!.rollbackAsync(status)); 41 | this.transactionHandle = undefined; 42 | } 43 | 44 | /** Rollbacks and maintains this transaction object for subsequent work. */ 45 | protected async internalRollbackRetaining(): Promise { 46 | return await this.attachment.client.statusAction(status => this.transactionHandle!.rollbackRetainingAsync(status)); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/lib/resultset.ts: -------------------------------------------------------------------------------- 1 | import { StatementImpl } from './statement'; 2 | import { TransactionImpl } from './transaction'; 3 | 4 | import { ExecuteQueryOptions, FetchOptions } from 'node-firebird-driver'; 5 | import { AbstractResultSet } from 'node-firebird-driver/dist/lib/impl'; 6 | 7 | import * as fb from 'node-firebird-native-api'; 8 | 9 | 10 | /** ResultSet implementation. */ 11 | export class ResultSetImpl extends AbstractResultSet { 12 | // Override declarations. 13 | statement: StatementImpl; 14 | transaction: TransactionImpl; 15 | 16 | resultSetHandle?: fb.ResultSet; 17 | 18 | static async open(statement: StatementImpl, transaction: TransactionImpl, parameters?: Array, 19 | options?: ExecuteQueryOptions): Promise { 20 | const resultSet = new ResultSetImpl(statement, transaction); 21 | 22 | return await statement.attachment.client.statusAction(async status => { 23 | //// FIXME: options 24 | 25 | await statement.dataWriter(statement.attachment, transaction, statement.inBuffer, parameters); 26 | 27 | resultSet.resultSetHandle = await statement.statementHandle!.openCursorAsync(status, transaction.transactionHandle, 28 | statement.inMetadata, statement.inBuffer, statement.outMetadata, 0); 29 | 30 | return resultSet; 31 | }); 32 | } 33 | 34 | /** Closes this result set. */ 35 | protected async internalClose(): Promise { 36 | await this.statement.attachment.client.statusAction(async status => { 37 | await this.resultSetHandle!.closeAsync(status); 38 | 39 | this.resultSetHandle = undefined; 40 | }); 41 | } 42 | 43 | /** Fetchs data from this result set. */ 44 | protected async internalFetch(options?: FetchOptions): Promise<{ finished: boolean; rows: Array> }> { 45 | return await this.statement.attachment.client.statusAction(async status => { 46 | const rows = []; 47 | const buffers = [this.statement.outBuffer, new Uint8Array(this.statement.outMetadata!.getMessageLengthSync(status))]; 48 | let buffer = 0; 49 | let nextFetch = this.resultSetHandle!.fetchNextAsync(status, buffers[buffer]); 50 | 51 | while (true) { 52 | if (await nextFetch == fb.Status.RESULT_OK) { 53 | const buffer1 = buffer; 54 | buffer = ++buffer % 2; 55 | 56 | const finish = options && options.fetchSize && rows.length + 1 >= options.fetchSize; 57 | 58 | if (!finish) 59 | nextFetch = this.resultSetHandle!.fetchNextAsync(status, buffers[buffer]); 60 | 61 | rows.push(await this.statement.dataReader(this.statement.attachment, this.transaction, buffers[buffer1])); 62 | 63 | if (finish) 64 | return { finished: false, rows: rows }; 65 | } 66 | else { 67 | return { finished: true, rows: rows }; 68 | } 69 | } 70 | }); 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /src/lib/attachment.ts: -------------------------------------------------------------------------------- 1 | import { BlobStreamImpl } from './blob'; 2 | import { ClientImpl } from './client'; 3 | import { StatementImpl } from './statement'; 4 | import { TransactionImpl } from './transaction'; 5 | import { createDpb } from './fb-util'; 6 | 7 | import { 8 | Blob, 9 | ConnectOptions, 10 | CreateDatabaseOptions, 11 | PrepareOptions, 12 | TransactionOptions 13 | } from 'node-firebird-driver'; 14 | 15 | import { AbstractAttachment } from 'node-firebird-driver/dist/lib/impl'; 16 | 17 | import * as fb from 'node-firebird-native-api'; 18 | 19 | 20 | /** Attachment implementation. */ 21 | export class AttachmentImpl extends AbstractAttachment { 22 | // Override declarations. 23 | client: ClientImpl; 24 | 25 | attachmentHandle?: fb.Attachment; 26 | 27 | static async connect(client: ClientImpl, uri: string, options?: ConnectOptions): Promise { 28 | const attachment = new AttachmentImpl(client); 29 | 30 | return await client.statusAction(async status => { 31 | const dpb = createDpb(options); 32 | attachment.attachmentHandle = await client!.dispatcher!.attachDatabaseAsync(status, uri, dpb.length, dpb); 33 | return attachment; 34 | }); 35 | } 36 | 37 | static async createDatabase(client: ClientImpl, uri: string, options?: CreateDatabaseOptions): Promise { 38 | const attachment = new AttachmentImpl(client); 39 | 40 | return await client.statusAction(async status => { 41 | const dpb = createDpb(options); 42 | attachment.attachmentHandle = await client!.dispatcher!.createDatabaseAsync(status, uri, dpb.length, dpb); 43 | return attachment; 44 | }); 45 | } 46 | 47 | /** Disconnects this attachment. */ 48 | protected async internalDisconnect(): Promise { 49 | await this.client.statusAction(status => this.attachmentHandle!.detachAsync(status)); 50 | this.attachmentHandle = undefined; 51 | } 52 | 53 | /** Drops the database and release this attachment. */ 54 | protected async internalDropDatabase(): Promise { 55 | await this.client.statusAction(status => this.attachmentHandle!.dropDatabaseAsync(status)); 56 | this.attachmentHandle = undefined; 57 | } 58 | 59 | /** Starts a new transaction. */ 60 | protected async internalStartTransaction(options?: TransactionOptions): Promise { 61 | return await TransactionImpl.start(this, options); 62 | } 63 | 64 | protected async internalCreateBlob(transaction: TransactionImpl): Promise { 65 | return await BlobStreamImpl.create(this, transaction); 66 | } 67 | 68 | protected async internalOpenBlob(transaction: TransactionImpl, blob: Blob): Promise { 69 | return await BlobStreamImpl.open(this, transaction, blob); 70 | } 71 | 72 | /** Prepares a query. */ 73 | protected async internalPrepare(transaction: TransactionImpl, sqlStmt: string, options?: PrepareOptions): Promise { 74 | return await StatementImpl.prepare(this, transaction, sqlStmt, options); 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/lib/blob.ts: -------------------------------------------------------------------------------- 1 | import { AttachmentImpl } from './attachment'; 2 | 3 | import { Blob } from 'node-firebird-driver'; 4 | import { AbstractBlobStream, blobInfo, getPortableInteger } from 'node-firebird-driver/dist/lib/impl'; 5 | 6 | import * as fb from 'node-firebird-native-api'; 7 | import { TransactionImpl } from './transaction'; 8 | 9 | 10 | /** BlobStream implementation. */ 11 | export class BlobStreamImpl extends AbstractBlobStream { 12 | // Override declarations. 13 | attachment: AttachmentImpl; 14 | 15 | blobHandle?: fb.Blob; 16 | 17 | static async create(attachment: AttachmentImpl, transaction: TransactionImpl): Promise { 18 | return await attachment.client.statusAction(async status => { 19 | const blobId = new Uint8Array(8); 20 | const blobHandle = await attachment.attachmentHandle!.createBlobAsync( 21 | status, transaction.transactionHandle, blobId, 0, undefined); 22 | 23 | const blob = new Blob(attachment, blobId); 24 | 25 | const blobStream = new BlobStreamImpl(blob, attachment); 26 | blobStream.blobHandle = blobHandle; 27 | return blobStream; 28 | }); 29 | } 30 | 31 | static async open(attachment: AttachmentImpl, transaction: TransactionImpl, blob: Blob): Promise { 32 | return await attachment.client.statusAction(async status => { 33 | const blobStream = new BlobStreamImpl(blob, attachment); 34 | blobStream.blobHandle = await attachment.attachmentHandle!.openBlobAsync( 35 | status, transaction.transactionHandle, blob.id, 0, undefined); 36 | return blobStream; 37 | }); 38 | } 39 | 40 | protected async internalGetLength(): Promise { 41 | return await this.attachment.client.statusAction(async status => { 42 | const infoReq = new Uint8Array([blobInfo.totalLength]); 43 | const infoRet = new Uint8Array(20); 44 | await this.blobHandle!.getInfoAsync(status, infoReq.byteLength, infoReq, infoRet.byteLength, infoRet); 45 | 46 | if (infoRet[0] != blobInfo.totalLength || infoRet[1] != 4 || infoRet[2] != 0) 47 | throw new Error('Unrecognized response from Blob::getInfo.'); 48 | 49 | return getPortableInteger(infoRet.subarray(3), 4); 50 | }); 51 | } 52 | 53 | protected async internalClose(): Promise { 54 | await this.attachment.client.statusAction(status => this.blobHandle!.closeAsync(status)); 55 | this.blobHandle = undefined; 56 | } 57 | 58 | protected async internalCancel(): Promise { 59 | await this.attachment.client.statusAction(status => this.blobHandle!.cancelAsync(status)); 60 | this.blobHandle = undefined; 61 | } 62 | 63 | protected async internalRead(buffer: Buffer): Promise { 64 | return await this.attachment.client.statusAction(async status => { 65 | const segLength = new Uint32Array(1); 66 | const result = await this.blobHandle!.getSegmentAsync(status, buffer.length, buffer, segLength); 67 | 68 | if (result == fb.Status.RESULT_NO_DATA) 69 | return -1; 70 | 71 | return segLength[0]; 72 | }); 73 | } 74 | 75 | protected async internalWrite(buffer: Buffer): Promise { 76 | await this.attachment.client.statusAction(status => this.blobHandle!.putSegmentAsync(status, buffer.length, buffer)); 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/lib/statement.ts: -------------------------------------------------------------------------------- 1 | import { AttachmentImpl } from './attachment'; 2 | import { ResultSetImpl } from './resultset'; 3 | import { TransactionImpl } from './transaction'; 4 | 5 | import { 6 | ExecuteOptions, 7 | ExecuteQueryOptions, 8 | PrepareOptions 9 | } from 'node-firebird-driver'; 10 | 11 | import { AbstractStatement } from 'node-firebird-driver/dist/lib/impl'; 12 | 13 | import { 14 | createDataReader, 15 | createDataWriter, 16 | createDescriptors, 17 | fixMetadata, 18 | DataReader, 19 | DataWriter, 20 | } from './fb-util'; 21 | 22 | import * as fb from 'node-firebird-native-api'; 23 | 24 | 25 | /** Statement implementation. */ 26 | export class StatementImpl extends AbstractStatement { 27 | // Override declarations. 28 | attachment: AttachmentImpl; 29 | 30 | statementHandle?: fb.Statement; 31 | inMetadata?: fb.MessageMetadata; 32 | outMetadata?: fb.MessageMetadata; 33 | inBuffer: Uint8Array; 34 | outBuffer: Uint8Array; 35 | dataWriter: DataWriter; 36 | dataReader: DataReader; 37 | 38 | static async prepare(attachment: AttachmentImpl, transaction: TransactionImpl, sqlStmt: string, options?: PrepareOptions): 39 | Promise { 40 | const statement = new StatementImpl(attachment); 41 | 42 | return await attachment.client.statusAction(async status => { 43 | //// FIXME: options/flags, dialect 44 | statement.statementHandle = await attachment!.attachmentHandle!.prepareAsync(status, transaction.transactionHandle, 45 | 0, sqlStmt, 3, fb.Statement.PREPARE_PREFETCH_ALL); 46 | 47 | statement.inMetadata = fixMetadata(status, await statement.statementHandle!.getInputMetadataAsync(status)); 48 | statement.outMetadata = fixMetadata(status, await statement.statementHandle!.getOutputMetadataAsync(status)); 49 | 50 | if (statement.inMetadata) { 51 | statement.inBuffer = new Uint8Array(statement.inMetadata.getMessageLengthSync(status)); 52 | statement.dataWriter = createDataWriter(createDescriptors(status, statement.inMetadata)); 53 | } 54 | 55 | if (statement.outMetadata) { 56 | statement.outBuffer = new Uint8Array(statement.outMetadata.getMessageLengthSync(status)); 57 | statement.dataReader = createDataReader(createDescriptors(status, statement.outMetadata)); 58 | } 59 | 60 | return statement; 61 | }); 62 | } 63 | 64 | /** Disposes this statement's resources. */ 65 | protected async internalDispose(): Promise { 66 | if (this.outMetadata) { 67 | this.outMetadata.releaseSync(); 68 | this.outMetadata = undefined; 69 | } 70 | 71 | if (this.inMetadata) { 72 | this.inMetadata.releaseSync(); 73 | this.inMetadata = undefined; 74 | } 75 | 76 | await this.attachment.client.statusAction(status => this.statementHandle!.freeAsync(status)); 77 | 78 | this.statementHandle = undefined; 79 | } 80 | 81 | /** Executes a prepared statement that uses the SET TRANSACTION command. Returns the new transaction. */ 82 | protected async internalExecuteTransaction(transaction: TransactionImpl): Promise { 83 | throw new Error('Uninplemented method: executeTransaction.'); 84 | } 85 | 86 | /** Executes a prepared statement that has no result set. */ 87 | protected async internalExecute(transaction: TransactionImpl, parameters?: Array, options?: ExecuteOptions): Promise> { 88 | return await this.attachment.client.statusAction(async status => { 89 | await this.dataWriter(this.attachment, transaction, this.inBuffer, parameters); 90 | 91 | const newTransaction = await this.statementHandle!.executeAsync(status, transaction.transactionHandle, 92 | this.inMetadata, this.inBuffer, this.outMetadata, this.outBuffer); 93 | 94 | if (newTransaction && transaction.transactionHandle != newTransaction) 95 | {} //// FIXME: newTransaction.releaseSync(); 96 | 97 | return this.outMetadata ? await this.dataReader(this.attachment, transaction, this.outBuffer) : []; 98 | }); 99 | } 100 | 101 | /** Executes a prepared statement that has result set. */ 102 | protected async internalExecuteQuery(transaction: TransactionImpl, parameters?: Array, options?: ExecuteQueryOptions): 103 | Promise { 104 | return await ResultSetImpl.open(this, transaction as TransactionImpl, parameters, options); 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/bluebird@*": 6 | version "3.5.8" 7 | resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.8.tgz#242a83379f06c90f96acf6d1aeab3af6faebdb98" 8 | 9 | "@types/empower@*": 10 | version "1.2.30" 11 | resolved "https://registry.yarnpkg.com/@types/empower/-/empower-1.2.30.tgz#c7cfc14b3a61e54c74c674c1fbc91ba2df0d1392" 12 | 13 | "@types/fs-extra-promise@1.0.2": 14 | version "1.0.2" 15 | resolved "https://registry.yarnpkg.com/@types/fs-extra-promise/-/fs-extra-promise-1.0.2.tgz#547bd8580b140449103edae78c28ccf5222d26fc" 16 | dependencies: 17 | "@types/bluebird" "*" 18 | "@types/fs-extra" "*" 19 | "@types/node" "*" 20 | 21 | "@types/fs-extra@*": 22 | version "3.0.3" 23 | resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-3.0.3.tgz#1d66eb670ebf657e57c0fda014df340c19d8aa0c" 24 | dependencies: 25 | "@types/node" "*" 26 | 27 | "@types/mocha@^2.2.41": 28 | version "2.2.41" 29 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.41.tgz#e27cf0817153eb9f2713b2d3f6c68f1e1c3ca608" 30 | 31 | "@types/node@*": 32 | version "8.0.7" 33 | resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.7.tgz#fb0ad04b5b6f6eabe0372a32a8f1fbba5c130cae" 34 | 35 | "@types/node@6.0.88": 36 | version "6.0.88" 37 | resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.88.tgz#f618f11a944f6a18d92b5c472028728a3e3d4b66" 38 | 39 | "@types/node@^8.0.7": 40 | version "8.9.5" 41 | resolved "https://registry.yarnpkg.com/@types/node/-/node-8.9.5.tgz#162b864bc70be077e6db212b322754917929e976" 42 | 43 | "@types/power-assert-formatter@*": 44 | version "1.4.28" 45 | resolved "https://registry.yarnpkg.com/@types/power-assert-formatter/-/power-assert-formatter-1.4.28.tgz#25b8fddb6322259c6b91c35338d39b0f8e524252" 46 | 47 | "@types/power-assert@^1.4.29": 48 | version "1.4.29" 49 | resolved "https://registry.yarnpkg.com/@types/power-assert/-/power-assert-1.4.29.tgz#51f8366f62ad6a111f5e7fa94920c4923cffaeb6" 50 | dependencies: 51 | "@types/empower" "*" 52 | "@types/power-assert-formatter" "*" 53 | 54 | "@types/temp-fs@^0.9.27": 55 | version "0.9.27" 56 | resolved "https://registry.yarnpkg.com/@types/temp-fs/-/temp-fs-0.9.27.tgz#e6b8d9dd870fe61537097ab90b8dc3442759e464" 57 | 58 | abbrev@1: 59 | version "1.1.1" 60 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 61 | 62 | acorn-es7-plugin@^1.0.12: 63 | version "1.1.7" 64 | resolved "https://registry.yarnpkg.com/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz#f2ee1f3228a90eead1245f9ab1922eb2e71d336b" 65 | 66 | acorn@^4.0.0: 67 | version "4.0.13" 68 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" 69 | 70 | ajv@^5.1.0: 71 | version "5.5.2" 72 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" 73 | dependencies: 74 | co "^4.6.0" 75 | fast-deep-equal "^1.0.0" 76 | fast-json-stable-stringify "^2.0.0" 77 | json-schema-traverse "^0.3.0" 78 | 79 | ansi-regex@^2.0.0: 80 | version "2.1.1" 81 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 82 | 83 | aproba@^1.0.3: 84 | version "1.2.0" 85 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 86 | 87 | are-we-there-yet@~1.1.2: 88 | version "1.1.4" 89 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" 90 | dependencies: 91 | delegates "^1.0.0" 92 | readable-stream "^2.0.6" 93 | 94 | array-filter@^1.0.0: 95 | version "1.0.0" 96 | resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" 97 | 98 | asn1@~0.2.3: 99 | version "0.2.3" 100 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 101 | 102 | assert-plus@1.0.0, assert-plus@^1.0.0: 103 | version "1.0.0" 104 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 105 | 106 | asynckit@^0.4.0: 107 | version "0.4.0" 108 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 109 | 110 | aws-sign2@~0.7.0: 111 | version "0.7.0" 112 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 113 | 114 | aws4@^1.6.0: 115 | version "1.6.0" 116 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" 117 | 118 | balanced-match@^1.0.0: 119 | version "1.0.0" 120 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 121 | 122 | bcrypt-pbkdf@^1.0.0: 123 | version "1.0.1" 124 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 125 | dependencies: 126 | tweetnacl "^0.14.3" 127 | 128 | bindings@^1.2.1: 129 | version "1.3.0" 130 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7" 131 | 132 | block-stream@*: 133 | version "0.0.9" 134 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" 135 | dependencies: 136 | inherits "~2.0.0" 137 | 138 | bluebird@^3.5.0: 139 | version "3.5.0" 140 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" 141 | 142 | boom@4.x.x: 143 | version "4.3.1" 144 | resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" 145 | dependencies: 146 | hoek "4.x.x" 147 | 148 | boom@5.x.x: 149 | version "5.2.0" 150 | resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" 151 | dependencies: 152 | hoek "4.x.x" 153 | 154 | brace-expansion@^1.1.7: 155 | version "1.1.8" 156 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" 157 | dependencies: 158 | balanced-match "^1.0.0" 159 | concat-map "0.0.1" 160 | 161 | browser-stdout@1.3.0: 162 | version "1.3.0" 163 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" 164 | 165 | call-signature@0.0.2: 166 | version "0.0.2" 167 | resolved "https://registry.yarnpkg.com/call-signature/-/call-signature-0.0.2.tgz#a84abc825a55ef4cb2b028bd74e205a65b9a4996" 168 | 169 | caseless@~0.12.0: 170 | version "0.12.0" 171 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 172 | 173 | co@^4.6.0: 174 | version "4.6.0" 175 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 176 | 177 | code-point-at@^1.0.0: 178 | version "1.1.0" 179 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 180 | 181 | combined-stream@1.0.6, combined-stream@~1.0.5: 182 | version "1.0.6" 183 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" 184 | dependencies: 185 | delayed-stream "~1.0.0" 186 | 187 | commander@2.9.0: 188 | version "2.9.0" 189 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" 190 | dependencies: 191 | graceful-readlink ">= 1.0.0" 192 | 193 | concat-map@0.0.1: 194 | version "0.0.1" 195 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 196 | 197 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 198 | version "1.1.0" 199 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 200 | 201 | core-js@^2.0.0: 202 | version "2.4.1" 203 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" 204 | 205 | core-util-is@1.0.2, core-util-is@~1.0.0: 206 | version "1.0.2" 207 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 208 | 209 | cryptiles@3.x.x: 210 | version "3.1.2" 211 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" 212 | dependencies: 213 | boom "5.x.x" 214 | 215 | dashdash@^1.12.0: 216 | version "1.14.1" 217 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 218 | dependencies: 219 | assert-plus "^1.0.0" 220 | 221 | debug@2.6.0: 222 | version "2.6.0" 223 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" 224 | dependencies: 225 | ms "0.7.2" 226 | 227 | define-properties@^1.1.2: 228 | version "1.1.2" 229 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" 230 | dependencies: 231 | foreach "^2.0.5" 232 | object-keys "^1.0.8" 233 | 234 | delayed-stream@~1.0.0: 235 | version "1.0.0" 236 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 237 | 238 | delegates@^1.0.0: 239 | version "1.0.0" 240 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 241 | 242 | diff-match-patch@^1.0.0: 243 | version "1.0.0" 244 | resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.0.tgz#1cc3c83a490d67f95d91e39f6ad1f2e086b63048" 245 | 246 | diff@3.2.0: 247 | version "3.2.0" 248 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" 249 | 250 | eastasianwidth@^0.1.1: 251 | version "0.1.1" 252 | resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.1.1.tgz#44d656de9da415694467335365fb3147b8572b7c" 253 | 254 | ecc-jsbn@~0.1.1: 255 | version "0.1.1" 256 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 257 | dependencies: 258 | jsbn "~0.1.0" 259 | 260 | empower-core@^0.6.2: 261 | version "0.6.2" 262 | resolved "https://registry.yarnpkg.com/empower-core/-/empower-core-0.6.2.tgz#5adef566088e31fba80ba0a36df47d7094169144" 263 | dependencies: 264 | call-signature "0.0.2" 265 | core-js "^2.0.0" 266 | 267 | empower@^1.2.3: 268 | version "1.2.3" 269 | resolved "https://registry.yarnpkg.com/empower/-/empower-1.2.3.tgz#6f0da73447f4edd838fec5c60313a88ba5cb852b" 270 | dependencies: 271 | core-js "^2.0.0" 272 | empower-core "^0.6.2" 273 | 274 | escape-string-regexp@1.0.5: 275 | version "1.0.5" 276 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 277 | 278 | espurify@^1.6.0: 279 | version "1.7.0" 280 | resolved "https://registry.yarnpkg.com/espurify/-/espurify-1.7.0.tgz#1c5cf6cbccc32e6f639380bd4f991fab9ba9d226" 281 | dependencies: 282 | core-js "^2.0.0" 283 | 284 | estraverse@^4.1.0, estraverse@^4.2.0: 285 | version "4.2.0" 286 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 287 | 288 | extend@~3.0.1: 289 | version "3.0.1" 290 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" 291 | 292 | extsprintf@1.3.0: 293 | version "1.3.0" 294 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 295 | 296 | extsprintf@^1.2.0: 297 | version "1.4.0" 298 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 299 | 300 | fast-deep-equal@^1.0.0: 301 | version "1.1.0" 302 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" 303 | 304 | fast-json-stable-stringify@^2.0.0: 305 | version "2.0.0" 306 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" 307 | 308 | foreach@^2.0.5: 309 | version "2.0.5" 310 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" 311 | 312 | forever-agent@~0.6.1: 313 | version "0.6.1" 314 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 315 | 316 | form-data@~2.3.1: 317 | version "2.3.2" 318 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" 319 | dependencies: 320 | asynckit "^0.4.0" 321 | combined-stream "1.0.6" 322 | mime-types "^2.1.12" 323 | 324 | fs-extra-promise@^1.0.1: 325 | version "1.0.1" 326 | resolved "https://registry.yarnpkg.com/fs-extra-promise/-/fs-extra-promise-1.0.1.tgz#b6ed1ace97b10e06b95f458d051b7f05c6613ee6" 327 | dependencies: 328 | bluebird "^3.5.0" 329 | fs-extra "^2.1.2" 330 | 331 | fs-extra@^2.1.2: 332 | version "2.1.2" 333 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35" 334 | dependencies: 335 | graceful-fs "^4.1.2" 336 | jsonfile "^2.1.0" 337 | 338 | fs.realpath@^1.0.0: 339 | version "1.0.0" 340 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 341 | 342 | fstream@^1.0.0, fstream@^1.0.2: 343 | version "1.0.11" 344 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" 345 | dependencies: 346 | graceful-fs "^4.1.2" 347 | inherits "~2.0.0" 348 | mkdirp ">=0.5 0" 349 | rimraf "2" 350 | 351 | gauge@~2.7.3: 352 | version "2.7.4" 353 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 354 | dependencies: 355 | aproba "^1.0.3" 356 | console-control-strings "^1.0.0" 357 | has-unicode "^2.0.0" 358 | object-assign "^4.1.0" 359 | signal-exit "^3.0.0" 360 | string-width "^1.0.1" 361 | strip-ansi "^3.0.1" 362 | wide-align "^1.1.0" 363 | 364 | getpass@^0.1.1: 365 | version "0.1.7" 366 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 367 | dependencies: 368 | assert-plus "^1.0.0" 369 | 370 | glob@7.1.1: 371 | version "7.1.1" 372 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" 373 | dependencies: 374 | fs.realpath "^1.0.0" 375 | inflight "^1.0.4" 376 | inherits "2" 377 | minimatch "^3.0.2" 378 | once "^1.3.0" 379 | path-is-absolute "^1.0.0" 380 | 381 | glob@^7.0.3, glob@^7.0.5: 382 | version "7.1.2" 383 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 384 | dependencies: 385 | fs.realpath "^1.0.0" 386 | inflight "^1.0.4" 387 | inherits "2" 388 | minimatch "^3.0.4" 389 | once "^1.3.0" 390 | path-is-absolute "^1.0.0" 391 | 392 | graceful-fs@^4.1.2, graceful-fs@^4.1.6: 393 | version "4.1.11" 394 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 395 | 396 | "graceful-readlink@>= 1.0.0": 397 | version "1.0.1" 398 | resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" 399 | 400 | growl@1.9.2: 401 | version "1.9.2" 402 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" 403 | 404 | har-schema@^2.0.0: 405 | version "2.0.0" 406 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 407 | 408 | har-validator@~5.0.3: 409 | version "5.0.3" 410 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" 411 | dependencies: 412 | ajv "^5.1.0" 413 | har-schema "^2.0.0" 414 | 415 | has-flag@^1.0.0: 416 | version "1.0.0" 417 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 418 | 419 | has-unicode@^2.0.0: 420 | version "2.0.1" 421 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 422 | 423 | hawk@~6.0.2: 424 | version "6.0.2" 425 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" 426 | dependencies: 427 | boom "4.x.x" 428 | cryptiles "3.x.x" 429 | hoek "4.x.x" 430 | sntp "2.x.x" 431 | 432 | hoek@4.x.x: 433 | version "4.2.1" 434 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" 435 | 436 | http-signature@~1.2.0: 437 | version "1.2.0" 438 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 439 | dependencies: 440 | assert-plus "^1.0.0" 441 | jsprim "^1.2.2" 442 | sshpk "^1.7.0" 443 | 444 | indexof@0.0.1: 445 | version "0.0.1" 446 | resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" 447 | 448 | inflight@^1.0.4: 449 | version "1.0.6" 450 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 451 | dependencies: 452 | once "^1.3.0" 453 | wrappy "1" 454 | 455 | inherits@2, inherits@~2.0.0, inherits@~2.0.3: 456 | version "2.0.3" 457 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 458 | 459 | is-fullwidth-code-point@^1.0.0: 460 | version "1.0.0" 461 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 462 | dependencies: 463 | number-is-nan "^1.0.0" 464 | 465 | is-typedarray@~1.0.0: 466 | version "1.0.0" 467 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 468 | 469 | isarray@~1.0.0: 470 | version "1.0.0" 471 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 472 | 473 | isexe@^2.0.0: 474 | version "2.0.0" 475 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 476 | 477 | isstream@~0.1.2: 478 | version "0.1.2" 479 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 480 | 481 | jsbn@~0.1.0: 482 | version "0.1.1" 483 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 484 | 485 | json-schema-traverse@^0.3.0: 486 | version "0.3.1" 487 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" 488 | 489 | json-schema@0.2.3: 490 | version "0.2.3" 491 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 492 | 493 | json-stringify-safe@~5.0.1: 494 | version "5.0.1" 495 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 496 | 497 | json3@3.3.2: 498 | version "3.3.2" 499 | resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" 500 | 501 | jsonfile@^2.1.0: 502 | version "2.4.0" 503 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" 504 | optionalDependencies: 505 | graceful-fs "^4.1.6" 506 | 507 | jsprim@^1.2.2: 508 | version "1.4.1" 509 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 510 | dependencies: 511 | assert-plus "1.0.0" 512 | extsprintf "1.3.0" 513 | json-schema "0.2.3" 514 | verror "1.10.0" 515 | 516 | lodash._baseassign@^3.0.0: 517 | version "3.2.0" 518 | resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" 519 | dependencies: 520 | lodash._basecopy "^3.0.0" 521 | lodash.keys "^3.0.0" 522 | 523 | lodash._basecopy@^3.0.0: 524 | version "3.0.1" 525 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" 526 | 527 | lodash._basecreate@^3.0.0: 528 | version "3.0.3" 529 | resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" 530 | 531 | lodash._getnative@^3.0.0: 532 | version "3.9.1" 533 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" 534 | 535 | lodash._isiterateecall@^3.0.0: 536 | version "3.0.9" 537 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" 538 | 539 | lodash.create@3.1.1: 540 | version "3.1.1" 541 | resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" 542 | dependencies: 543 | lodash._baseassign "^3.0.0" 544 | lodash._basecreate "^3.0.0" 545 | lodash._isiterateecall "^3.0.0" 546 | 547 | lodash.isarguments@^3.0.0: 548 | version "3.1.0" 549 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" 550 | 551 | lodash.isarray@^3.0.0: 552 | version "3.0.4" 553 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" 554 | 555 | lodash.keys@^3.0.0: 556 | version "3.1.2" 557 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" 558 | dependencies: 559 | lodash._getnative "^3.0.0" 560 | lodash.isarguments "^3.0.0" 561 | lodash.isarray "^3.0.0" 562 | 563 | mime-db@~1.33.0: 564 | version "1.33.0" 565 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" 566 | 567 | mime-types@^2.1.12, mime-types@~2.1.17: 568 | version "2.1.18" 569 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" 570 | dependencies: 571 | mime-db "~1.33.0" 572 | 573 | minimatch@^3.0.2, minimatch@^3.0.4: 574 | version "3.0.4" 575 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 576 | dependencies: 577 | brace-expansion "^1.1.7" 578 | 579 | minimist@0.0.8: 580 | version "0.0.8" 581 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 582 | 583 | mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0: 584 | version "0.5.1" 585 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 586 | dependencies: 587 | minimist "0.0.8" 588 | 589 | mocha@^3.4.2: 590 | version "3.4.2" 591 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.4.2.tgz#d0ef4d332126dbf18d0d640c9b382dd48be97594" 592 | dependencies: 593 | browser-stdout "1.3.0" 594 | commander "2.9.0" 595 | debug "2.6.0" 596 | diff "3.2.0" 597 | escape-string-regexp "1.0.5" 598 | glob "7.1.1" 599 | growl "1.9.2" 600 | json3 "3.3.2" 601 | lodash.create "3.1.1" 602 | mkdirp "0.5.1" 603 | supports-color "3.1.2" 604 | 605 | ms@0.7.2: 606 | version "0.7.2" 607 | resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" 608 | 609 | nan@^2.6.2: 610 | version "2.9.2" 611 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866" 612 | 613 | node-firebird-driver@0.0.1-beta.1: 614 | version "0.0.1-beta.1" 615 | resolved "https://registry.yarnpkg.com/node-firebird-driver/-/node-firebird-driver-0.0.1-beta.1.tgz#f7c74df4740b65a736dd0ae44846b6e8b471ed46" 616 | dependencies: 617 | "@types/node" "^8.0.7" 618 | 619 | node-firebird-native-api@0.0.1-beta.1: 620 | version "0.0.1-beta.1" 621 | resolved "https://registry.yarnpkg.com/node-firebird-native-api/-/node-firebird-native-api-0.0.1-beta.1.tgz#76424f0df95964f52afa963f025a2507d6253d5d" 622 | dependencies: 623 | "@types/node" "^8.0.7" 624 | bindings "^1.2.1" 625 | nan "^2.6.2" 626 | node-gyp "^3.6.2" 627 | 628 | node-gyp@^3.6.2: 629 | version "3.6.2" 630 | resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" 631 | dependencies: 632 | fstream "^1.0.0" 633 | glob "^7.0.3" 634 | graceful-fs "^4.1.2" 635 | minimatch "^3.0.2" 636 | mkdirp "^0.5.0" 637 | nopt "2 || 3" 638 | npmlog "0 || 1 || 2 || 3 || 4" 639 | osenv "0" 640 | request "2" 641 | rimraf "2" 642 | semver "~5.3.0" 643 | tar "^2.0.0" 644 | which "1" 645 | 646 | "nopt@2 || 3": 647 | version "3.0.6" 648 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" 649 | dependencies: 650 | abbrev "1" 651 | 652 | "npmlog@0 || 1 || 2 || 3 || 4": 653 | version "4.1.2" 654 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 655 | dependencies: 656 | are-we-there-yet "~1.1.2" 657 | console-control-strings "~1.1.0" 658 | gauge "~2.7.3" 659 | set-blocking "~2.0.0" 660 | 661 | number-is-nan@^1.0.0: 662 | version "1.0.1" 663 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 664 | 665 | oauth-sign@~0.8.2: 666 | version "0.8.2" 667 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 668 | 669 | object-assign@^4.1.0: 670 | version "4.1.1" 671 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 672 | 673 | object-keys@^1.0.0, object-keys@^1.0.8: 674 | version "1.0.11" 675 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" 676 | 677 | once@^1.3.0: 678 | version "1.4.0" 679 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 680 | dependencies: 681 | wrappy "1" 682 | 683 | os-homedir@^1.0.0: 684 | version "1.0.2" 685 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 686 | 687 | os-tmpdir@^1.0.0: 688 | version "1.0.2" 689 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 690 | 691 | osenv@0: 692 | version "0.1.5" 693 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" 694 | dependencies: 695 | os-homedir "^1.0.0" 696 | os-tmpdir "^1.0.0" 697 | 698 | path-is-absolute@^1.0.0: 699 | version "1.0.1" 700 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 701 | 702 | performance-now@^2.1.0: 703 | version "2.1.0" 704 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 705 | 706 | power-assert-context-formatter@^1.0.7: 707 | version "1.1.1" 708 | resolved "https://registry.yarnpkg.com/power-assert-context-formatter/-/power-assert-context-formatter-1.1.1.tgz#edba352d3ed8a603114d667265acce60d689ccdf" 709 | dependencies: 710 | core-js "^2.0.0" 711 | power-assert-context-traversal "^1.1.1" 712 | 713 | power-assert-context-reducer-ast@^1.0.7: 714 | version "1.1.2" 715 | resolved "https://registry.yarnpkg.com/power-assert-context-reducer-ast/-/power-assert-context-reducer-ast-1.1.2.tgz#484a99e26f4973ff8832e5c5cc756702e6094174" 716 | dependencies: 717 | acorn "^4.0.0" 718 | acorn-es7-plugin "^1.0.12" 719 | core-js "^2.0.0" 720 | espurify "^1.6.0" 721 | estraverse "^4.2.0" 722 | 723 | power-assert-context-traversal@^1.1.1: 724 | version "1.1.1" 725 | resolved "https://registry.yarnpkg.com/power-assert-context-traversal/-/power-assert-context-traversal-1.1.1.tgz#88cabca0d13b6359f07d3d3e8afa699264577ed9" 726 | dependencies: 727 | core-js "^2.0.0" 728 | estraverse "^4.1.0" 729 | 730 | power-assert-formatter@^1.3.1: 731 | version "1.4.1" 732 | resolved "https://registry.yarnpkg.com/power-assert-formatter/-/power-assert-formatter-1.4.1.tgz#5dc125ed50a3dfb1dda26c19347f3bf58ec2884a" 733 | dependencies: 734 | core-js "^2.0.0" 735 | power-assert-context-formatter "^1.0.7" 736 | power-assert-context-reducer-ast "^1.0.7" 737 | power-assert-renderer-assertion "^1.0.7" 738 | power-assert-renderer-comparison "^1.0.7" 739 | power-assert-renderer-diagram "^1.0.7" 740 | power-assert-renderer-file "^1.0.7" 741 | 742 | power-assert-renderer-assertion@^1.0.7: 743 | version "1.1.1" 744 | resolved "https://registry.yarnpkg.com/power-assert-renderer-assertion/-/power-assert-renderer-assertion-1.1.1.tgz#cbfc0e77e0086a8f96af3f1d8e67b9ee7e28ce98" 745 | dependencies: 746 | power-assert-renderer-base "^1.1.1" 747 | power-assert-util-string-width "^1.1.1" 748 | 749 | power-assert-renderer-base@^1.1.1: 750 | version "1.1.1" 751 | resolved "https://registry.yarnpkg.com/power-assert-renderer-base/-/power-assert-renderer-base-1.1.1.tgz#96a650c6fd05ee1bc1f66b54ad61442c8b3f63eb" 752 | 753 | power-assert-renderer-comparison@^1.0.7: 754 | version "1.1.1" 755 | resolved "https://registry.yarnpkg.com/power-assert-renderer-comparison/-/power-assert-renderer-comparison-1.1.1.tgz#d7439d97d85156be4e30a00f2fb5a72514ce3c08" 756 | dependencies: 757 | core-js "^2.0.0" 758 | diff-match-patch "^1.0.0" 759 | power-assert-renderer-base "^1.1.1" 760 | stringifier "^1.3.0" 761 | type-name "^2.0.1" 762 | 763 | power-assert-renderer-diagram@^1.0.7: 764 | version "1.1.2" 765 | resolved "https://registry.yarnpkg.com/power-assert-renderer-diagram/-/power-assert-renderer-diagram-1.1.2.tgz#655f8f711935a9b6d541b86327654717c637a986" 766 | dependencies: 767 | core-js "^2.0.0" 768 | power-assert-renderer-base "^1.1.1" 769 | power-assert-util-string-width "^1.1.1" 770 | stringifier "^1.3.0" 771 | 772 | power-assert-renderer-file@^1.0.7: 773 | version "1.1.1" 774 | resolved "https://registry.yarnpkg.com/power-assert-renderer-file/-/power-assert-renderer-file-1.1.1.tgz#a37e2bbd178ccacd04e78dbb79c92fe34933c5e7" 775 | dependencies: 776 | power-assert-renderer-base "^1.1.1" 777 | 778 | power-assert-util-string-width@^1.1.1: 779 | version "1.1.1" 780 | resolved "https://registry.yarnpkg.com/power-assert-util-string-width/-/power-assert-util-string-width-1.1.1.tgz#be659eb7937fdd2e6c9a77268daaf64bd5b7c592" 781 | dependencies: 782 | eastasianwidth "^0.1.1" 783 | 784 | power-assert@^1.4.4: 785 | version "1.4.4" 786 | resolved "https://registry.yarnpkg.com/power-assert/-/power-assert-1.4.4.tgz#9295ea7437196f5a601fde420f042631186d7517" 787 | dependencies: 788 | define-properties "^1.1.2" 789 | empower "^1.2.3" 790 | power-assert-formatter "^1.3.1" 791 | universal-deep-strict-equal "^1.2.1" 792 | xtend "^4.0.0" 793 | 794 | process-nextick-args@~2.0.0: 795 | version "2.0.0" 796 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 797 | 798 | punycode@^1.4.1: 799 | version "1.4.1" 800 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 801 | 802 | qs@~6.5.1: 803 | version "6.5.1" 804 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" 805 | 806 | readable-stream@^2.0.6: 807 | version "2.3.5" 808 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" 809 | dependencies: 810 | core-util-is "~1.0.0" 811 | inherits "~2.0.3" 812 | isarray "~1.0.0" 813 | process-nextick-args "~2.0.0" 814 | safe-buffer "~5.1.1" 815 | string_decoder "~1.0.3" 816 | util-deprecate "~1.0.1" 817 | 818 | request@2: 819 | version "2.83.0" 820 | resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" 821 | dependencies: 822 | aws-sign2 "~0.7.0" 823 | aws4 "^1.6.0" 824 | caseless "~0.12.0" 825 | combined-stream "~1.0.5" 826 | extend "~3.0.1" 827 | forever-agent "~0.6.1" 828 | form-data "~2.3.1" 829 | har-validator "~5.0.3" 830 | hawk "~6.0.2" 831 | http-signature "~1.2.0" 832 | is-typedarray "~1.0.0" 833 | isstream "~0.1.2" 834 | json-stringify-safe "~5.0.1" 835 | mime-types "~2.1.17" 836 | oauth-sign "~0.8.2" 837 | performance-now "^2.1.0" 838 | qs "~6.5.1" 839 | safe-buffer "^5.1.1" 840 | stringstream "~0.0.5" 841 | tough-cookie "~2.3.3" 842 | tunnel-agent "^0.6.0" 843 | uuid "^3.1.0" 844 | 845 | rimraf@2: 846 | version "2.6.2" 847 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 848 | dependencies: 849 | glob "^7.0.5" 850 | 851 | rimraf@^2.6.1: 852 | version "2.6.1" 853 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" 854 | dependencies: 855 | glob "^7.0.5" 856 | 857 | rimraf@~2.5.2: 858 | version "2.5.4" 859 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" 860 | dependencies: 861 | glob "^7.0.5" 862 | 863 | safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 864 | version "5.1.1" 865 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 866 | 867 | semver@~5.3.0: 868 | version "5.3.0" 869 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" 870 | 871 | set-blocking@~2.0.0: 872 | version "2.0.0" 873 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 874 | 875 | signal-exit@^3.0.0: 876 | version "3.0.2" 877 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 878 | 879 | sntp@2.x.x: 880 | version "2.1.0" 881 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" 882 | dependencies: 883 | hoek "4.x.x" 884 | 885 | source-map-support@^0.4.15: 886 | version "0.4.15" 887 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1" 888 | dependencies: 889 | source-map "^0.5.6" 890 | 891 | source-map@^0.5.6: 892 | version "0.5.6" 893 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" 894 | 895 | sshpk@^1.7.0: 896 | version "1.13.1" 897 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" 898 | dependencies: 899 | asn1 "~0.2.3" 900 | assert-plus "^1.0.0" 901 | dashdash "^1.12.0" 902 | getpass "^0.1.1" 903 | optionalDependencies: 904 | bcrypt-pbkdf "^1.0.0" 905 | ecc-jsbn "~0.1.1" 906 | jsbn "~0.1.0" 907 | tweetnacl "~0.14.0" 908 | 909 | string-width@^1.0.1, string-width@^1.0.2: 910 | version "1.0.2" 911 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 912 | dependencies: 913 | code-point-at "^1.0.0" 914 | is-fullwidth-code-point "^1.0.0" 915 | strip-ansi "^3.0.0" 916 | 917 | string_decoder@~1.0.3: 918 | version "1.0.3" 919 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" 920 | dependencies: 921 | safe-buffer "~5.1.0" 922 | 923 | stringifier@^1.3.0: 924 | version "1.3.0" 925 | resolved "https://registry.yarnpkg.com/stringifier/-/stringifier-1.3.0.tgz#def18342f6933db0f2dbfc9aa02175b448c17959" 926 | dependencies: 927 | core-js "^2.0.0" 928 | traverse "^0.6.6" 929 | type-name "^2.0.1" 930 | 931 | stringstream@~0.0.5: 932 | version "0.0.5" 933 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 934 | 935 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 936 | version "3.0.1" 937 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 938 | dependencies: 939 | ansi-regex "^2.0.0" 940 | 941 | supports-color@3.1.2: 942 | version "3.1.2" 943 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" 944 | dependencies: 945 | has-flag "^1.0.0" 946 | 947 | tar@^2.0.0: 948 | version "2.2.1" 949 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" 950 | dependencies: 951 | block-stream "*" 952 | fstream "^1.0.2" 953 | inherits "2" 954 | 955 | temp-fs@^0.9.9: 956 | version "0.9.9" 957 | resolved "https://registry.yarnpkg.com/temp-fs/-/temp-fs-0.9.9.tgz#8071730437870720e9431532fe2814364f8803d7" 958 | dependencies: 959 | rimraf "~2.5.2" 960 | 961 | tough-cookie@~2.3.3: 962 | version "2.3.4" 963 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" 964 | dependencies: 965 | punycode "^1.4.1" 966 | 967 | traverse@^0.6.6: 968 | version "0.6.6" 969 | resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" 970 | 971 | tunnel-agent@^0.6.0: 972 | version "0.6.0" 973 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 974 | dependencies: 975 | safe-buffer "^5.0.1" 976 | 977 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 978 | version "0.14.5" 979 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 980 | 981 | type-name@^2.0.1: 982 | version "2.0.2" 983 | resolved "https://registry.yarnpkg.com/type-name/-/type-name-2.0.2.tgz#efe7d4123d8ac52afff7f40c7e4dec5266008fb4" 984 | 985 | typescript@^2.4.1: 986 | version "2.4.1" 987 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.4.1.tgz#c3ccb16ddaa0b2314de031e7e6fee89e5ba346bc" 988 | 989 | universal-deep-strict-equal@^1.2.1: 990 | version "1.2.2" 991 | resolved "https://registry.yarnpkg.com/universal-deep-strict-equal/-/universal-deep-strict-equal-1.2.2.tgz#0da4ac2f73cff7924c81fa4de018ca562ca2b0a7" 992 | dependencies: 993 | array-filter "^1.0.0" 994 | indexof "0.0.1" 995 | object-keys "^1.0.0" 996 | 997 | util-deprecate@~1.0.1: 998 | version "1.0.2" 999 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1000 | 1001 | uuid@^3.1.0: 1002 | version "3.2.1" 1003 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" 1004 | 1005 | verror@1.10.0: 1006 | version "1.10.0" 1007 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 1008 | dependencies: 1009 | assert-plus "^1.0.0" 1010 | core-util-is "1.0.2" 1011 | extsprintf "^1.2.0" 1012 | 1013 | which@1: 1014 | version "1.3.0" 1015 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" 1016 | dependencies: 1017 | isexe "^2.0.0" 1018 | 1019 | wide-align@^1.1.0: 1020 | version "1.1.2" 1021 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" 1022 | dependencies: 1023 | string-width "^1.0.2" 1024 | 1025 | wrappy@1: 1026 | version "1.0.2" 1027 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1028 | 1029 | xtend@^4.0.0: 1030 | version "4.0.1" 1031 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 1032 | --------------------------------------------------------------------------------