diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index d60b0cc49..c6425387f 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -16,9 +16,11 @@ ARG USERNAME=node ARG USER_UID=1000 ARG USER_GID=$USER_UID +RUN echo "deb http://archive.debian.org/debian stretch main" > /etc/apt/sources.list + # Configure apt and install packages RUN apt-get update \ - && apt-get -y install --no-install-recommends apt-utils dialog 2>&1 \ + && apt-get -y install --no-install-recommends dialog 2>&1 \ # # Verify git and needed tools are installed && apt-get -y install git iproute2 procps \ @@ -33,6 +35,7 @@ RUN apt-get update \ && echo "deb https://dl.yarnpkg.com/$(lsb_release -is | tr '[:upper:]' '[:lower:]')/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ && apt-get update \ && apt-get -y install --no-install-recommends yarn tmux locales postgresql \ + && apt-get install libpq-dev g++ make \ # # Install eslint globally && npm install -g eslint \ @@ -47,7 +50,6 @@ RUN apt-get update \ && apt-get install -y sudo \ && echo node ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ && chmod 0440 /etc/sudoers.d/$USERNAME \ - # # Clean up && apt-get autoremove -y \ && apt-get clean -y \ diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 14fb67344..b282fd7d3 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -4,28 +4,13 @@ "dockerComposeFile": "docker-compose.yml", "service": "web", "workspaceFolder": "/workspace", - - // Use 'settings' to set *default* container specific settings.json values on container create. - // You can edit these settings after create using File > Preferences > Settings > Remote. - "settings": { - "terminal.integrated.shell.linux": "/bin/bash" - }, - - // Uncomment the next line if you want start specific services in your Docker Compose config. - // "runServices": [], - - // Uncomment the line below if you want to keep your containers running after VS Code shuts down. - // "shutdownAction": "none", - - // Uncomment the next line to run commands after the container is created. - // "postCreateCommand": "npm install", - - // Uncomment the next line to have VS Code connect as an existing non-root user in the container. See - // https://aka.ms/vscode-remote/containers/non-root for details on adding a non-root user if none exist. - // "remoteUser": "node", - // Add the IDs of extensions you want installed when the container is created in the array below. - "extensions": [ - "dbaeumer.vscode-eslint" - ] -} \ No newline at end of file + "customizations":{ + "vscode": { + "extensions": ["dbaeumer.vscode-eslint"], + "settings": { + "terminal.integrated.shell.linux": "/bin/bash" + } + } + } +} diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 05475b824..11e652008 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -3,7 +3,7 @@ # Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information. #------------------------------------------------------------------------------------------------------------- -version: '3' +version: '3.9' services: web: # Uncomment the next line to use a non-root user for all processes. You can also @@ -32,16 +32,21 @@ services: # Overrides default command so things don't shut down after the process ends. command: sleep infinity - links: + depends_on: - db + links: + - db:db + db: - image: postgres + image: postgres:14-alpine restart: unless-stopped ports: - 5432:5432 + command: postgres -c password_encryption=md5 environment: + POSTGRES_HOST_AUTH_METHOD: trust + POSTGRES_INITDB_ARGS: "--auth-local=md5" POSTGRES_PASSWORD: pass POSTGRES_USER: user POSTGRES_DB: data - diff --git a/.eslintrc b/.eslintrc index bb77004ec..fd9bb8ddc 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,5 +1,5 @@ { - "plugins": ["prettier"], + "plugins": ["@typescript-eslint", "prettier"], "parser": "@typescript-eslint/parser", "extends": ["plugin:prettier/recommended", "prettier"], "ignorePatterns": ["node_modules", "coverage", "packages/pg-protocol/dist/**/*", "packages/pg-query-stream/dist/**/*"], @@ -11,5 +11,11 @@ "node": true, "es6": true, "mocha": true + }, + "rules": { + "@typescript-eslint/no-unused-vars": ["error", { + "args": "none" + }], + "no-unused-vars": "off" } } diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 000000000..7434a61c6 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +/packages/pg-connection-string @hjr3 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index aab0e5f59..f6e93d71e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,11 +21,11 @@ jobs: - run: yarn install --frozen-lockfile - run: yarn lint build: - timeout-minutes: 10 + timeout-minutes: 15 needs: lint services: postgres: - image: postgres:11 + image: ghcr.io/railwayapp-templates/postgres-ssl env: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres @@ -44,8 +44,8 @@ jobs: - '22' os: - ubuntu-latest - name: Node.js ${{ matrix.node }} (${{ matrix.os }}) - runs-on: ${{ matrix.os }} + name: Node.js ${{ matrix.node }} + runs-on: ubuntu-latest env: PGUSER: postgres PGPASSWORD: postgres @@ -71,5 +71,4 @@ jobs: node-version: ${{ matrix.node }} cache: yarn - run: yarn install --frozen-lockfile - # TODO(bmc): get ssl tests working in ci - run: yarn test diff --git a/README.md b/README.md index 4d0e287b1..132fb59d6 100644 --- a/README.md +++ b/README.md @@ -75,10 +75,11 @@ If your change involves breaking backwards compatibility please please point tha ### Setting up for local development 1. Clone the repo -2. From your workspace root run `yarn` and then `yarn lerna bootstrap` -3. Ensure you have a PostgreSQL instance running with SSL enabled and an empty database for tests -4. Ensure you have the proper environment variables configured for connecting to the instance -5. Run `yarn test` to run all the tests +2. Ensure you have installed libpq-dev in your system. +3. From your workspace root run `yarn` and then `yarn lerna bootstrap` +4. Ensure you have a PostgreSQL instance running with SSL enabled and an empty database for tests +5. Ensure you have the proper environment variables configured for connecting to the instance +6. Run `yarn test` to run all the tests ## Troubleshooting and FAQ diff --git a/packages/pg-connection-string/package.json b/packages/pg-connection-string/package.json index d04e66992..113311fbc 100644 --- a/packages/pg-connection-string/package.json +++ b/packages/pg-connection-string/package.json @@ -1,6 +1,6 @@ { "name": "pg-connection-string", - "version": "2.6.4", + "version": "2.7.0", "description": "Functions for dealing with a PostgresSQL connection string", "main": "./index.js", "types": "./index.d.ts", @@ -30,7 +30,7 @@ "chai": "^4.1.1", "coveralls": "^3.0.4", "istanbul": "^0.4.5", - "mocha": "^7.1.2" + "mocha": "^10.5.2" }, "files": [ "index.js", diff --git a/packages/pg-cursor/package.json b/packages/pg-cursor/package.json index 84feb2da3..7305f2af3 100644 --- a/packages/pg-cursor/package.json +++ b/packages/pg-cursor/package.json @@ -1,6 +1,6 @@ { "name": "pg-cursor", - "version": "2.11.0", + "version": "2.12.0", "description": "Query cursor extension for node-postgres", "main": "index.js", "directories": { @@ -17,8 +17,8 @@ "author": "Brian M. Carlson", "license": "MIT", "devDependencies": { - "mocha": "^7.1.2", - "pg": "^8.12.0" + "mocha": "^10.5.2", + "pg": "^8.13.0" }, "peerDependencies": { "pg": "^8" diff --git a/packages/pg-native/package.json b/packages/pg-native/package.json index c3ccb2785..bf259a960 100644 --- a/packages/pg-native/package.json +++ b/packages/pg-native/package.json @@ -1,6 +1,6 @@ { "name": "pg-native", - "version": "3.1.0", + "version": "3.2.0", "description": "A slightly nicer interface to Postgres over node-libpq", "main": "index.js", "scripts": { @@ -30,7 +30,7 @@ "concat-stream": "^1.4.6", "generic-pool": "^2.1.1", "lodash": "^2.4.1", - "mocha": "3.4.2", + "mocha": "10.5.2", "node-gyp": ">=10.x", "okay": "^0.3.0", "semver": "^4.1.0" diff --git a/packages/pg-native/test/many-connections.js b/packages/pg-native/test/many-connections.js index 204199666..fe32ede16 100644 --- a/packages/pg-native/test/many-connections.js +++ b/packages/pg-native/test/many-connections.js @@ -6,7 +6,7 @@ var bytes = require('crypto').pseudoRandomBytes describe('many connections', function () { describe('async', function () { var test = function (count, times) { - it('connecting ' + count + ' clients ' + times, function (done) { + it(`connecting ${count} clients ${times} times`, function (done) { this.timeout(200000) var connectClient = function (n, cb) { @@ -38,20 +38,9 @@ describe('many connections', function () { } test(1, 1) - test(1, 1) - test(1, 1) - test(5, 5) test(5, 5) - test(5, 5) - test(5, 5) - test(10, 10) test(10, 10) - test(10, 10) - test(20, 20) - test(20, 20) test(20, 20) test(30, 10) - test(30, 10) - test(30, 10) }) }) diff --git a/packages/pg-pool/package.json b/packages/pg-pool/package.json index c33124fab..ddd4122e3 100644 --- a/packages/pg-pool/package.json +++ b/packages/pg-pool/package.json @@ -1,6 +1,6 @@ { "name": "pg-pool", - "version": "3.6.2", + "version": "3.7.0", "description": "Connection pool for node-postgres", "main": "index.js", "directories": { @@ -27,11 +27,11 @@ }, "homepage": "https://github.com/brianc/node-pg-pool#readme", "devDependencies": { - "bluebird": "3.4.1", + "bluebird": "3.7.2", "co": "4.6.0", "expect.js": "0.3.1", "lodash": "^4.17.11", - "mocha": "^7.1.2", + "mocha": "^10.5.2", "pg-cursor": "^1.3.0" }, "peerDependencies": { diff --git a/packages/pg-protocol/package.json b/packages/pg-protocol/package.json index 962af3136..d92256442 100644 --- a/packages/pg-protocol/package.json +++ b/packages/pg-protocol/package.json @@ -1,17 +1,17 @@ { "name": "pg-protocol", - "version": "1.6.1", + "version": "1.7.0", "description": "The postgres client/server binary protocol, implemented in TypeScript", "main": "dist/index.js", "types": "dist/index.d.ts", "license": "MIT", "devDependencies": { "@types/chai": "^4.2.7", - "@types/mocha": "^5.2.7", + "@types/mocha": "^10.0.7", "@types/node": "^12.12.21", "chai": "^4.2.0", "chunky": "^0.0.0", - "mocha": "^7.1.2", + "mocha": "^10.5.2", "ts-node": "^8.5.4", "typescript": "^4.0.3" }, diff --git a/packages/pg-protocol/src/b.ts b/packages/pg-protocol/src/b.ts index 028b76393..088ca1857 100644 --- a/packages/pg-protocol/src/b.ts +++ b/packages/pg-protocol/src/b.ts @@ -1,13 +1,10 @@ // file for microbenchmarking -import { Writer } from './buffer-writer' -import { serialize } from './index' import { BufferReader } from './buffer-reader' const LOOPS = 1000 let count = 0 let start = Date.now() -const writer = new Writer() const reader = new BufferReader() const buffer = Buffer.from([33, 33, 33, 33, 33, 33, 33, 0]) diff --git a/packages/pg-protocol/src/inbound-parser.test.ts b/packages/pg-protocol/src/inbound-parser.test.ts index 364bd8d95..0c905c501 100644 --- a/packages/pg-protocol/src/inbound-parser.test.ts +++ b/packages/pg-protocol/src/inbound-parser.test.ts @@ -14,17 +14,6 @@ var parseCompleteBuffer = buffers.parseComplete() var bindCompleteBuffer = buffers.bindComplete() var portalSuspendedBuffer = buffers.portalSuspended() -var addRow = function (bufferList: BufferList, name: string, offset: number) { - return bufferList - .addCString(name) // field name - .addInt32(offset++) // table id - .addInt16(offset++) // attribute of column number - .addInt32(offset++) // objectId of field's data type - .addInt16(offset++) // datatype size - .addInt32(offset++) // type modifier - .addInt16(0) // format code, 0 => text -} - var row1 = { name: 'id', tableID: 1, diff --git a/packages/pg-protocol/src/index.ts b/packages/pg-protocol/src/index.ts index 00491ff7f..703ff2e49 100644 --- a/packages/pg-protocol/src/index.ts +++ b/packages/pg-protocol/src/index.ts @@ -1,4 +1,4 @@ -import { BackendMessage, DatabaseError } from './messages' +import { DatabaseError } from './messages' import { serialize } from './serializer' import { Parser, MessageCallback } from './parser' diff --git a/packages/pg-protocol/src/parser.ts b/packages/pg-protocol/src/parser.ts index 1ad4e3abd..5a3b0f6be 100644 --- a/packages/pg-protocol/src/parser.ts +++ b/packages/pg-protocol/src/parser.ts @@ -27,7 +27,6 @@ import { NoticeMessage, } from './messages' import { BufferReader } from './buffer-reader' -import assert from 'assert' // every message is prefixed with a single bye const CODE_LENGTH = 1 diff --git a/packages/pg-query-stream/package.json b/packages/pg-query-stream/package.json index faa366c4a..d9e891ad4 100644 --- a/packages/pg-query-stream/package.json +++ b/packages/pg-query-stream/package.json @@ -1,6 +1,6 @@ { "name": "pg-query-stream", - "version": "4.6.0", + "version": "4.7.0", "description": "Postgres query result returned as readable stream", "main": "./dist/index.js", "types": "./dist/index.d.ts", @@ -30,14 +30,14 @@ }, "devDependencies": { "@types/chai": "^4.2.13", - "@types/mocha": "^8.0.3", + "@types/mocha": "^10.0.7", "@types/node": "^14.0.0", "@types/pg": "^7.14.5", "JSONStream": "~1.3.5", "concat-stream": "~1.0.1", "eslint-plugin-promise": "^6.0.1", - "mocha": "^7.1.2", - "pg": "^8.12.0", + "mocha": "^10.5.2", + "pg": "^8.13.0", "stream-spec": "~0.3.5", "ts-node": "^8.5.4", "typescript": "^4.0.3" @@ -46,6 +46,6 @@ "pg": "^8" }, "dependencies": { - "pg-cursor": "^2.11.0" + "pg-cursor": "^2.12.0" } } diff --git a/packages/pg-query-stream/test/async-iterator.ts b/packages/pg-query-stream/test/async-iterator.ts index e2f8a7552..227a9ec9a 100644 --- a/packages/pg-query-stream/test/async-iterator.ts +++ b/packages/pg-query-stream/test/async-iterator.ts @@ -122,9 +122,11 @@ if (!process.version.startsWith('v8')) { const pool = new pg.Pool({ max: 1 }) const client = await pool.connect() + /* eslint-disable @typescript-eslint/no-unused-vars */ for await (const _ of client.query(new QueryStream('select TRUE', [], { highWaterMark: 1 }))) break for await (const _ of client.query(new QueryStream('select TRUE', [], { highWaterMark: 1 }))) break for await (const _ of client.query(new QueryStream('select TRUE', [], { highWaterMark: 1 }))) break + /* eslint-enable @typescript-eslint/no-unused-vars */ client.release() await pool.end() diff --git a/packages/pg-query-stream/test/pauses.ts b/packages/pg-query-stream/test/pauses.ts index 75fee57f6..4906341f8 100644 --- a/packages/pg-query-stream/test/pauses.ts +++ b/packages/pg-query-stream/test/pauses.ts @@ -2,7 +2,7 @@ import helper from './helper' import concat from 'concat-stream' import JSONStream from 'JSONStream' import QueryStream from '../src' -import { Transform, TransformCallback } from 'stream' +import { Transform } from 'stream' class PauseStream extends Transform { constructor() { diff --git a/packages/pg/lib/client.js b/packages/pg/lib/client.js index c5bf5e61e..527f62e4f 100644 --- a/packages/pg/lib/client.js +++ b/packages/pg/lib/client.js @@ -377,11 +377,21 @@ class Client extends EventEmitter { } _handleCommandComplete(msg) { + if (this.activeQuery == null) { + const error = new Error('Received unexpected commandComplete message from backend.') + this._handleErrorEvent(error) + return + } // delegate commandComplete to active query this.activeQuery.handleCommandComplete(msg, this.connection) } - _handleParseComplete(msg) { + _handleParseComplete() { + if (this.activeQuery == null) { + const error = new Error('Received unexpected parseComplete message from backend.') + this._handleErrorEvent(error) + return + } // if a prepared statement has a name and properly parses // we track that its already been executed so we don't parse // it again on the same client @@ -514,7 +524,7 @@ class Client extends EventEmitter { query.callback = query.callback || values } } else { - readTimeout = this.connectionParameters.query_timeout + readTimeout = config.query_timeout || this.connectionParameters.query_timeout query = new Query(config, values, callback) if (!query.callback) { result = new this._Promise((resolve, reject) => { diff --git a/packages/pg/lib/native/client.js b/packages/pg/lib/native/client.js index 88bf52c9c..6494375f1 100644 --- a/packages/pg/lib/native/client.js +++ b/packages/pg/lib/native/client.js @@ -167,7 +167,7 @@ Client.prototype.query = function (config, values, callback) { config.callback = values } } else { - readTimeout = this.connectionParameters.query_timeout + readTimeout = config.query_timeout || this.connectionParameters.query_timeout query = new NativeQuery(config, values, callback) if (!query.callback) { let resolveOut, rejectOut diff --git a/packages/pg/lib/stream.js b/packages/pg/lib/stream.js index 67b1b3c81..cb0839878 100644 --- a/packages/pg/lib/stream.js +++ b/packages/pg/lib/stream.js @@ -1,28 +1,81 @@ +const { getStream, getSecureStream } = getStreamFuncs() + +module.exports = { + /** + * Get a socket stream compatible with the current runtime environment. + * @returns {Duplex} + */ + getStream, + /** + * Get a TLS secured socket, compatible with the current environment, + * using the socket and other settings given in `options`. + * @returns {Duplex} + */ + getSecureStream, +} + /** - * Get a socket stream compatible with the current runtime environment. - * @returns {Duplex} + * The stream functions that work in Node.js */ -module.exports.getStream = function getStream(ssl) { - const net = require('net') - if (typeof net.Socket === 'function') { +function getNodejsStreamFuncs() { + function getStream(ssl) { + const net = require('net') return new net.Socket() - } else { - const { CloudflareSocket } = require('pg-cloudflare') - return new CloudflareSocket(ssl) + } + + function getSecureStream(options) { + var tls = require('tls') + return tls.connect(options) + } + return { + getStream, + getSecureStream, } } /** - * Get a TLS secured socket, compatible with the current environment, - * using the socket and other settings given in `options`. - * @returns {Duplex} + * The stream functions that work in Cloudflare Workers */ -module.exports.getSecureStream = function getSecureStream(options) { - var tls = require('tls') - if (tls.connect) { - return tls.connect(options) - } else { +function getCloudflareStreamFuncs() { + function getStream(ssl) { + const { CloudflareSocket } = require('pg-cloudflare') + return new CloudflareSocket(ssl) + } + + function getSecureStream(options) { options.socket.startTls(options) return options.socket } + return { + getStream, + getSecureStream, + } +} + +/** + * Are we running in a Cloudflare Worker? + * + * @returns true if the code is currently running inside a Cloudflare Worker. + */ +function isCloudflareRuntime() { + // Since 2022-03-21 the `global_navigator` compatibility flag is on for Cloudflare Workers + // which means that `navigator.userAgent` will be defined. + if (typeof navigator === 'object' && navigator !== null && typeof navigator.userAgent === 'string') { + return navigator.userAgent === 'Cloudflare-Workers' + } + // In case `navigator` or `navigator.userAgent` is not defined then try a more sneaky approach + if (typeof Response === 'function') { + const resp = new Response(null, { cf: { thing: true } }) + if (typeof resp.cf === 'object' && resp.cf !== null && resp.cf.thing) { + return true + } + } + return false +} + +function getStreamFuncs() { + if (isCloudflareRuntime()) { + return getCloudflareStreamFuncs() + } + return getNodejsStreamFuncs() } diff --git a/packages/pg/package.json b/packages/pg/package.json index 43784cb5d..dbbf9d36e 100644 --- a/packages/pg/package.json +++ b/packages/pg/package.json @@ -1,6 +1,6 @@ { "name": "pg", - "version": "8.12.0", + "version": "8.13.0", "description": "PostgreSQL client - pure javascript & libpq with the same API", "keywords": [ "database", @@ -20,16 +20,16 @@ "author": "Brian Carlson ", "main": "./lib", "dependencies": { - "pg-connection-string": "^2.6.4", - "pg-pool": "^3.6.2", - "pg-protocol": "^1.6.1", + "pg-connection-string": "^2.7.0", + "pg-pool": "^3.7.0", + "pg-protocol": "^1.7.0", "pg-types": "^2.1.0", "pgpass": "1.x" }, "devDependencies": { "@cloudflare/workers-types": "^4.20230404.0", "async": "2.6.4", - "bluebird": "3.5.2", + "bluebird": "3.7.2", "co": "4.6.0", "pg-copy-streams": "0.3.0", "typescript": "^4.0.3", diff --git a/packages/pg/script/create-test-tables.js b/packages/pg/script/create-test-tables.js index c4ec99f23..622b0cd20 100644 --- a/packages/pg/script/create-test-tables.js +++ b/packages/pg/script/create-test-tables.js @@ -31,41 +31,26 @@ var people = [ { name: 'Zanzabar', age: 260 }, ] -var con = new pg.Client({ - user: args.user, - password: args.password, - host: args.host, - port: args.port, - database: args.database, -}) - -con.connect((err) => { - if (err) { - throw err - } - - con.query( - 'DROP TABLE IF EXISTS person;' + ' CREATE TABLE person (id serial, name varchar(10), age integer)', - (err) => { - if (err) { - throw err - } - - console.log('Created table person') - console.log('Filling it with people') - - con.query( - 'INSERT INTO person (name, age) VALUES' + - people.map((person) => ` ('${person.name}', ${person.age})`).join(','), - (err, result) => { - if (err) { - throw err - } - - console.log(`Inserted ${result.rowCount} people`) - con.end() - } - ) - } +async function run() { + var con = new pg.Client({ + user: args.user, + password: args.password, + host: args.host, + port: args.port, + database: args.database, + }) + console.log('creating test dataset') + await con.connect() + await con.query('DROP TABLE IF EXISTS person') + await con.query('CREATE TABLE person (id serial, name varchar(10), age integer)') + await con.query( + 'INSERT INTO person (name, age) VALUES' + people.map((person) => ` ('${person.name}', ${person.age})`).join(',') ) + await con.end() + console.log('created test dataset') +} + +run().catch((e) => { + console.log('setup failed', e) + process.exit(255) }) diff --git a/packages/pg/script/list-db-types.js b/packages/pg/script/list-db-types.js deleted file mode 100644 index df179afaf..000000000 --- a/packages/pg/script/list-db-types.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict' -var helper = require('../test/integration/test-helper') -var pg = helper.pg -pg.connect( - helper.config, - assert.success(function (client) { - var query = client.query("select oid, typname from pg_type where typtype = 'b' order by oid") - query.on('row', console.log) - }) -) diff --git a/packages/pg/test/integration/client/api-tests.js b/packages/pg/test/integration/client/api-tests.js index abaab69fb..686eabb28 100644 --- a/packages/pg/test/integration/client/api-tests.js +++ b/packages/pg/test/integration/client/api-tests.js @@ -1,6 +1,7 @@ 'use strict' var helper = require('../test-helper') var pg = helper.pg +const assert = require('assert') var suite = new helper.Suite() @@ -102,6 +103,21 @@ suite.test('query no timeout', (cb) => { }) }) +suite.test('query with timeout on query basis', (cb) => { + const pool = new pg.Pool() + pool.connect().then((client) => { + client.query( + { text: 'SELECT pg_sleep(20)', query_timeout: 1000 }, + assert.calls(function (err, result) { + assert(err) + assert(err.message === 'Query read timeout') + client.release() + pool.end(cb) + }) + ) + }) +}) + suite.test('callback API', (done) => { const client = new helper.Client() client.query('CREATE TEMP TABLE peep(name text)') diff --git a/packages/pg/test/integration/client/appname-tests.js b/packages/pg/test/integration/client/appname-tests.js index ab7202a9b..e69f805bf 100644 --- a/packages/pg/test/integration/client/appname-tests.js +++ b/packages/pg/test/integration/client/appname-tests.js @@ -1,6 +1,7 @@ 'use strict' var helper = require('./test-helper') var Client = helper.Client +const assert = require('assert') var suite = new helper.Suite() @@ -27,7 +28,6 @@ function getAppName(conf, cb) { } suite.test('No default appliation_name ', function (done) { - var conf = getConInfo() getAppName({}, function (res) { assert.strictEqual(res, '') done() diff --git a/packages/pg/test/integration/client/array-tests.js b/packages/pg/test/integration/client/array-tests.js index a32139646..ce25bb778 100644 --- a/packages/pg/test/integration/client/array-tests.js +++ b/packages/pg/test/integration/client/array-tests.js @@ -1,6 +1,7 @@ 'use strict' var helper = require('./test-helper') var pg = helper.pg +const assert = require('assert') var suite = new helper.Suite() diff --git a/packages/pg/test/integration/client/big-simple-query-tests.js b/packages/pg/test/integration/client/big-simple-query-tests.js index b0dc252f6..a7e6770e8 100644 --- a/packages/pg/test/integration/client/big-simple-query-tests.js +++ b/packages/pg/test/integration/client/big-simple-query-tests.js @@ -1,6 +1,7 @@ 'use strict' var helper = require('./test-helper') var Query = helper.pg.Query +const assert = require('assert') const suite = new helper.Suite() @@ -92,8 +93,7 @@ process.on('exit', function () { }) var runBigQuery = function (client) { - var rows = [] - var q = client.query( + client.query( "select 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' as bla from person where name = $1 or 1 = 1", [''], function (err, result) { diff --git a/packages/pg/test/integration/client/configuration-tests.js b/packages/pg/test/integration/client/configuration-tests.js index cf15c08e6..a4b0790a6 100644 --- a/packages/pg/test/integration/client/configuration-tests.js +++ b/packages/pg/test/integration/client/configuration-tests.js @@ -1,6 +1,8 @@ 'use strict' var helper = require('./test-helper') var pg = helper.pg +const assert = require('assert') +const { Client } = helper var suite = new helper.Suite() diff --git a/packages/pg/test/integration/client/connection-timeout-tests.js b/packages/pg/test/integration/client/connection-timeout-tests.js index 316e0768b..3d6b83664 100644 --- a/packages/pg/test/integration/client/connection-timeout-tests.js +++ b/packages/pg/test/integration/client/connection-timeout-tests.js @@ -2,6 +2,7 @@ const net = require('net') const buffers = require('../../test-buffers') const helper = require('./test-helper') +const assert = require('assert') const suite = new helper.Suite() diff --git a/packages/pg/test/integration/client/custom-types-tests.js b/packages/pg/test/integration/client/custom-types-tests.js index d1dd2eec0..b3446cff0 100644 --- a/packages/pg/test/integration/client/custom-types-tests.js +++ b/packages/pg/test/integration/client/custom-types-tests.js @@ -2,6 +2,7 @@ const helper = require('./test-helper') const Client = helper.pg.Client const suite = new helper.Suite() +const assert = require('assert') const customTypes = { getTypeParser: () => () => 'okay!', diff --git a/packages/pg/test/integration/client/empty-query-tests.js b/packages/pg/test/integration/client/empty-query-tests.js index d887885c7..458a6f3a4 100644 --- a/packages/pg/test/integration/client/empty-query-tests.js +++ b/packages/pg/test/integration/client/empty-query-tests.js @@ -1,6 +1,7 @@ 'use strict' var helper = require('./test-helper') const suite = new helper.Suite() +const assert = require('assert') suite.test('empty query message handling', function (done) { const client = helper.client() diff --git a/packages/pg/test/integration/client/error-handling-tests.js b/packages/pg/test/integration/client/error-handling-tests.js index 4e879c9e0..0cf7dfabb 100644 --- a/packages/pg/test/integration/client/error-handling-tests.js +++ b/packages/pg/test/integration/client/error-handling-tests.js @@ -1,9 +1,9 @@ 'use strict' var helper = require('./test-helper') -var util = require('util') var pg = helper.pg +const assert = require('assert') const Client = pg.Client const DatabaseError = pg.DatabaseError @@ -113,7 +113,7 @@ var ensureFuture = function (testClient, done) { suite.test('when query is parsing', (done) => { var client = createErorrClient() - var q = client.query({ text: 'CREATE TEMP TABLE boom(age integer); INSERT INTO boom (age) VALUES (28);' }) + client.query({ text: 'CREATE TEMP TABLE boom(age integer); INSERT INTO boom (age) VALUES (28);' }) // this query wont parse since there isn't a table named bang var query = client.query( @@ -131,7 +131,7 @@ suite.test('when query is parsing', (done) => { suite.test('when a query is binding', function (done) { var client = createErorrClient() - var q = client.query({ text: 'CREATE TEMP TABLE boom(age integer); INSERT INTO boom (age) VALUES (28);' }) + client.query({ text: 'CREATE TEMP TABLE boom(age integer); INSERT INTO boom (age) VALUES (28);' }) var query = client.query( new pg.Query({ diff --git a/packages/pg/test/integration/client/huge-numeric-tests.js b/packages/pg/test/integration/client/huge-numeric-tests.js index bdbfac261..719e9b428 100644 --- a/packages/pg/test/integration/client/huge-numeric-tests.js +++ b/packages/pg/test/integration/client/huge-numeric-tests.js @@ -1,6 +1,7 @@ 'use strict' var helper = require('./test-helper') const pool = new helper.pg.Pool() +const assert = require('assert') pool.connect( assert.success(function (client, done) { diff --git a/packages/pg/test/integration/client/idle_in_transaction_session_timeout-tests.js b/packages/pg/test/integration/client/idle_in_transaction_session_timeout-tests.js index f970faaf2..1e327492f 100644 --- a/packages/pg/test/integration/client/idle_in_transaction_session_timeout-tests.js +++ b/packages/pg/test/integration/client/idle_in_transaction_session_timeout-tests.js @@ -1,6 +1,7 @@ 'use strict' var helper = require('./test-helper') var Client = helper.Client +const assert = require('assert') var suite = new helper.Suite() diff --git a/packages/pg/test/integration/client/multiple-results-tests.js b/packages/pg/test/integration/client/multiple-results-tests.js index c27295103..89c9f0057 100644 --- a/packages/pg/test/integration/client/multiple-results-tests.js +++ b/packages/pg/test/integration/client/multiple-results-tests.js @@ -33,7 +33,7 @@ suite.test( // TODO should be text or sql? try { - const results = yield client.query({ + yield client.query({ text: `SELECT 'foo'::text as name; SELECT 'bar'::text as baz`, queryMode: 'extended', }) diff --git a/packages/pg/test/integration/client/network-partition-tests.js b/packages/pg/test/integration/client/network-partition-tests.js index 8397821a8..589ae123b 100644 --- a/packages/pg/test/integration/client/network-partition-tests.js +++ b/packages/pg/test/integration/client/network-partition-tests.js @@ -2,6 +2,7 @@ var buffers = require('../../test-buffers') var helper = require('./test-helper') var suite = new helper.Suite() +const assert = require('assert') var net = require('net') diff --git a/packages/pg/test/integration/client/no-data-tests.js b/packages/pg/test/integration/client/no-data-tests.js index ad0f22be3..382b6ffd0 100644 --- a/packages/pg/test/integration/client/no-data-tests.js +++ b/packages/pg/test/integration/client/no-data-tests.js @@ -1,11 +1,12 @@ 'use strict' var helper = require('./test-helper') const suite = new helper.Suite() +const assert = require('assert') suite.test('noData message handling', function () { var client = helper.client() - var q = client.query({ + client.query({ name: 'boom', text: 'create temp table boom(id serial, size integer)', }) @@ -29,7 +30,7 @@ suite.test('noData message handling', function () { values: [101], }) - var query = client.query( + client.query( { name: 'fetch', text: 'select size from boom where size < $1', diff --git a/packages/pg/test/integration/client/no-row-result-tests.js b/packages/pg/test/integration/client/no-row-result-tests.js index 6e8f52cf0..fa84f1d0a 100644 --- a/packages/pg/test/integration/client/no-row-result-tests.js +++ b/packages/pg/test/integration/client/no-row-result-tests.js @@ -3,6 +3,7 @@ var helper = require('./test-helper') var pg = helper.pg const suite = new helper.Suite() const pool = new pg.Pool() +const assert = require('assert') suite.test('can access results when no rows are returned', function (done) { var checkResult = function (result) { diff --git a/packages/pg/test/integration/client/parse-int-8-tests.js b/packages/pg/test/integration/client/parse-int-8-tests.js index 9f251de69..150ee7bbd 100644 --- a/packages/pg/test/integration/client/parse-int-8-tests.js +++ b/packages/pg/test/integration/client/parse-int-8-tests.js @@ -3,6 +3,7 @@ var helper = require('../test-helper') var pg = helper.pg const suite = new helper.Suite() +const assert = require('assert') const pool = new pg.Pool(helper.config) suite.test('ability to turn on and off parser', function () { diff --git a/packages/pg/test/integration/client/prepared-statement-tests.js b/packages/pg/test/integration/client/prepared-statement-tests.js index ebc1f7380..0d01007af 100644 --- a/packages/pg/test/integration/client/prepared-statement-tests.js +++ b/packages/pg/test/integration/client/prepared-statement-tests.js @@ -2,6 +2,7 @@ var helper = require('./test-helper') var Query = helper.pg.Query +const assert = require('assert') var suite = new helper.Suite() ;(function () { @@ -9,7 +10,6 @@ var suite = new helper.Suite() client.on('drain', client.end.bind(client)) var queryName = 'user by age and like name' - var parseCount = 0 suite.test('first named prepared statement', function (done) { var query = client.query( @@ -89,7 +89,7 @@ var suite = new helper.Suite() var client2 = helper.client() suite.test('client 1 execution', function (done) { - var query = client1.query( + client1.query( { name: statementName, text: statement1, diff --git a/packages/pg/test/integration/client/promise-api-tests.js b/packages/pg/test/integration/client/promise-api-tests.js index d8128cf8b..a536ce44a 100644 --- a/packages/pg/test/integration/client/promise-api-tests.js +++ b/packages/pg/test/integration/client/promise-api-tests.js @@ -2,6 +2,7 @@ const helper = require('./test-helper') const pg = helper.pg +const assert = require('assert') const suite = new helper.Suite() diff --git a/packages/pg/test/integration/client/query-as-promise-tests.js b/packages/pg/test/integration/client/query-as-promise-tests.js index 30c106f0b..beb17b12e 100644 --- a/packages/pg/test/integration/client/query-as-promise-tests.js +++ b/packages/pg/test/integration/client/query-as-promise-tests.js @@ -2,6 +2,7 @@ var bluebird = require('bluebird') var helper = require('../test-helper') var pg = helper.pg +const assert = require('assert') process.on('unhandledRejection', function (e) { console.error(e, e.stack) diff --git a/packages/pg/test/integration/client/query-column-names-tests.js b/packages/pg/test/integration/client/query-column-names-tests.js index a109209b1..fe537a928 100644 --- a/packages/pg/test/integration/client/query-column-names-tests.js +++ b/packages/pg/test/integration/client/query-column-names-tests.js @@ -1,6 +1,7 @@ 'use strict' var helper = require('../test-helper') var pg = helper.pg +const assert = require('assert') new helper.Suite().test('support for complex column names', function () { const pool = new pg.Pool() diff --git a/packages/pg/test/integration/client/query-error-handling-prepared-statement-tests.js b/packages/pg/test/integration/client/query-error-handling-prepared-statement-tests.js index ebdab51ff..6b8af7008 100644 --- a/packages/pg/test/integration/client/query-error-handling-prepared-statement-tests.js +++ b/packages/pg/test/integration/client/query-error-handling-prepared-statement-tests.js @@ -1,6 +1,8 @@ 'use strict' var helper = require('./test-helper') var Query = helper.pg.Query +const { Client } = helper +const assert = require('assert') var suite = new helper.Suite() diff --git a/packages/pg/test/integration/client/query-error-handling-tests.js b/packages/pg/test/integration/client/query-error-handling-tests.js index bd1218340..c7af6bda9 100644 --- a/packages/pg/test/integration/client/query-error-handling-tests.js +++ b/packages/pg/test/integration/client/query-error-handling-tests.js @@ -2,8 +2,11 @@ var helper = require('./test-helper') var Query = helper.pg.Query var DatabaseError = helper.pg.DatabaseError +const assert = require('assert') +const { Client } = helper +const suite = new helper.Suite() -test('error during query execution', function () { +suite.test('error during query execution', function () { var client = new Client(helper.args) client.connect( assert.success(function () { @@ -60,7 +63,7 @@ if (helper.config.native) { return } -test('9.3 column error fields', function () { +suite.test('9.3 column error fields', function () { var client = new Client(helper.args) client.connect( assert.success(function () { @@ -89,7 +92,7 @@ test('9.3 column error fields', function () { ) }) -test('9.3 constraint error fields', function () { +suite.test('9.3 constraint error fields', function () { var client = new Client(helper.args) client.connect( assert.success(function () { diff --git a/packages/pg/test/integration/client/result-metadata-tests.js b/packages/pg/test/integration/client/result-metadata-tests.js index 66d9ac4ae..fbd375ece 100644 --- a/packages/pg/test/integration/client/result-metadata-tests.js +++ b/packages/pg/test/integration/client/result-metadata-tests.js @@ -1,6 +1,7 @@ 'use strict' var helper = require('./test-helper') var pg = helper.pg +const assert = require('assert') const pool = new pg.Pool() new helper.Suite().test('should return insert metadata', function () { @@ -19,7 +20,7 @@ new helper.Suite().test('should return insert metadata', function () { assert.equal(result.oid, null) assert.equal(result.command, 'CREATE') - var q = client.query( + client.query( "INSERT INTO zugzug(name) VALUES('more work?')", assert.calls(function (err, result) { assert(!err) diff --git a/packages/pg/test/integration/client/results-as-array-tests.js b/packages/pg/test/integration/client/results-as-array-tests.js index 5ebb2a9d5..3e30e9796 100644 --- a/packages/pg/test/integration/client/results-as-array-tests.js +++ b/packages/pg/test/integration/client/results-as-array-tests.js @@ -1,12 +1,14 @@ 'use strict' var util = require('util') var helper = require('./test-helper') +const assert = require('assert') +const suite = new helper.Suite() var Client = helper.Client var conInfo = helper.config -test('returns results as array', function () { +suite.test('returns results as array', function () { var client = new Client(conInfo) var checkRow = function (row) { assert(util.isArray(row), 'row should be an array') @@ -23,7 +25,7 @@ test('returns results as array', function () { values: ['hai'], rowMode: 'array', } - var query = client.query( + client.query( config, assert.success(function (result) { assert.equal(result.rows.length, 1) diff --git a/packages/pg/test/integration/client/row-description-on-results-tests.js b/packages/pg/test/integration/client/row-description-on-results-tests.js index 688b96e6c..deb9a212d 100644 --- a/packages/pg/test/integration/client/row-description-on-results-tests.js +++ b/packages/pg/test/integration/client/row-description-on-results-tests.js @@ -1,5 +1,7 @@ 'use strict' var helper = require('./test-helper') +const assert = require('assert') +const suite = new helper.Suite() var Client = helper.Client @@ -17,7 +19,7 @@ var checkResult = function (result) { assert.equal(fields[2].dataTypeID, 25) } -test('row descriptions on result object', function () { +suite.test('row descriptions on result object', function () { var client = new Client(conInfo) client.connect( assert.success(function () { @@ -33,7 +35,7 @@ test('row descriptions on result object', function () { ) }) -test('row description on no rows', function () { +suite.test('row description on no rows', function () { var client = new Client(conInfo) client.connect( assert.success(function () { diff --git a/packages/pg/test/integration/client/sasl-scram-tests.js b/packages/pg/test/integration/client/sasl-scram-tests.js index 8e1a121f0..242828716 100644 --- a/packages/pg/test/integration/client/sasl-scram-tests.js +++ b/packages/pg/test/integration/client/sasl-scram-tests.js @@ -3,6 +3,7 @@ const helper = require('./../test-helper') const pg = helper.pg const suite = new helper.Suite() const { native } = helper.args +const assert = require('assert') /** * This test only executes if the env variables SCRAM_TEST_PGUSER and diff --git a/packages/pg/test/integration/client/simple-query-tests.js b/packages/pg/test/integration/client/simple-query-tests.js index d22d74742..93d859bd3 100644 --- a/packages/pg/test/integration/client/simple-query-tests.js +++ b/packages/pg/test/integration/client/simple-query-tests.js @@ -1,6 +1,9 @@ 'use strict' var helper = require('./test-helper') var Query = helper.pg.Query +const assert = require('assert') +const suite = new helper.Suite() +const test = suite.test.bind(suite) // before running this test make sure you run the script create-test-tables test('simple query interface', function () { @@ -18,6 +21,7 @@ test('simple query interface', function () { query.once('row', function (row) { test('Can iterate through columns', function () { var columnCount = 0 + // eslint-disable-next-line @typescript-eslint/no-unused-vars for (var column in row) { columnCount++ } diff --git a/packages/pg/test/integration/client/ssl-tests.js b/packages/pg/test/integration/client/ssl-tests.js index 97aa59492..bece48f2f 100644 --- a/packages/pg/test/integration/client/ssl-tests.js +++ b/packages/pg/test/integration/client/ssl-tests.js @@ -1,19 +1,22 @@ 'use strict' -var pg = require('../../../lib') -var config = require('./test-helper').config -test('can connect with ssl', function () { - return false - config.ssl = { - rejectUnauthorized: false, +const helper = require('./test-helper') +const assert = require('assert') +const suite = new helper.Suite() + +suite.test('can connect with ssl', function () { + const config = { + ...helper.config, + ssl: { + rejectUnauthorized: false, + }, } - pg.connect( - config, - assert.success(function (client) { - return false + const client = new helper.pg.Client(config) + client.connect( + assert.success(function () { client.query( 'SELECT NOW()', assert.success(function () { - pg.end() + client.end() }) ) }) diff --git a/packages/pg/test/integration/client/statement_timeout-tests.js b/packages/pg/test/integration/client/statement_timeout-tests.js index e0898ccee..fc67a7c4a 100644 --- a/packages/pg/test/integration/client/statement_timeout-tests.js +++ b/packages/pg/test/integration/client/statement_timeout-tests.js @@ -2,6 +2,7 @@ var helper = require('./test-helper') var Client = helper.Client +const assert = require('assert') var suite = new helper.Suite() var conInfo = helper.config diff --git a/packages/pg/test/integration/client/timezone-tests.js b/packages/pg/test/integration/client/timezone-tests.js index 1f691d6ae..f00599087 100644 --- a/packages/pg/test/integration/client/timezone-tests.js +++ b/packages/pg/test/integration/client/timezone-tests.js @@ -1,5 +1,6 @@ 'use strict' var helper = require('./../test-helper') +const assert = require('assert') var oldTz = process.env.TZ process.env.TZ = 'Europe/Berlin' @@ -20,6 +21,11 @@ pool.connect(function (err, client, done) { }) }) + suite.testAsync('date comes out as a date', async function () { + const { rows } = await client.query('SELECT NOW()::DATE AS date') + assert(rows[0].date instanceof Date) + }) + suite.test('timestamp with time zone', function (cb) { client.query('SELECT CAST($1 AS TIMESTAMP WITH TIME ZONE) AS "val"', [date], function (err, result) { assert(!err) diff --git a/packages/pg/test/integration/client/transaction-tests.js b/packages/pg/test/integration/client/transaction-tests.js index 18f8ff095..11cffe24c 100644 --- a/packages/pg/test/integration/client/transaction-tests.js +++ b/packages/pg/test/integration/client/transaction-tests.js @@ -2,6 +2,7 @@ var helper = require('./test-helper') const suite = new helper.Suite() const pg = helper.pg +const assert = require('assert') const client = new pg.Client() client.connect( diff --git a/packages/pg/test/integration/client/type-coercion-tests.js b/packages/pg/test/integration/client/type-coercion-tests.js index 9abb31347..587a28c61 100644 --- a/packages/pg/test/integration/client/type-coercion-tests.js +++ b/packages/pg/test/integration/client/type-coercion-tests.js @@ -2,6 +2,7 @@ var helper = require('./test-helper') var pg = helper.pg const suite = new helper.Suite() +const assert = require('assert') var testForTypeCoercion = function (type) { const pool = new pg.Pool() @@ -14,7 +15,7 @@ var testForTypeCoercion = function (type) { assert(!err) type.values.forEach(function (val) { - var insertQuery = client.query( + client.query( 'insert into test_type(col) VALUES($1)', [val], assert.calls(function (err, result) { @@ -135,8 +136,6 @@ if (helper.config.binary) { }) } -var valueCount = 0 - types.forEach(function (type) { testForTypeCoercion(type) }) diff --git a/packages/pg/test/integration/client/type-parser-override-tests.js b/packages/pg/test/integration/client/type-parser-override-tests.js index 42c3dafba..5f7216ad6 100644 --- a/packages/pg/test/integration/client/type-parser-override-tests.js +++ b/packages/pg/test/integration/client/type-parser-override-tests.js @@ -1,5 +1,6 @@ 'use strict' var helper = require('./test-helper') +const assert = require('assert') function testTypeParser(client, expectedResult, done) { var boolValue = true diff --git a/packages/pg/test/integration/connection-pool/connection-pool-size-tests.js b/packages/pg/test/integration/connection-pool/connection-pool-size-tests.js index 1d87584e6..2d16fe49f 100644 --- a/packages/pg/test/integration/connection-pool/connection-pool-size-tests.js +++ b/packages/pg/test/integration/connection-pool/connection-pool-size-tests.js @@ -5,7 +5,7 @@ const assert = require('assert') const suite = new helper.Suite() const testPoolSize = function (max) { - suite.testAsync(`test ${max} queries executed on a pool rapidly`, () => { + suite.testAsync(`test ${max} queries executed on a pool rapidly`, async () => { const pool = new helper.pg.Pool({ max: 10 }) let count = 0 diff --git a/packages/pg/test/integration/connection-pool/error-tests.js b/packages/pg/test/integration/connection-pool/error-tests.js index f3f9cdcaa..9f20aa4e6 100644 --- a/packages/pg/test/integration/connection-pool/error-tests.js +++ b/packages/pg/test/integration/connection-pool/error-tests.js @@ -2,6 +2,7 @@ var helper = require('./test-helper') const pg = helper.pg const native = helper.args.native +const assert = require('assert') const suite = new helper.Suite() suite.test('connecting to invalid port', (cb) => { @@ -18,7 +19,6 @@ suite.test('errors emitted on checked-out clients', (cb) => { client.query('SELECT NOW()', function () { pool.connect( assert.success(function (client2, done2) { - var pidColName = 'procpid' helper.versionGTE( client2, 90200, diff --git a/packages/pg/test/integration/connection-pool/idle-timeout-tests.js b/packages/pg/test/integration/connection-pool/idle-timeout-tests.js index f36b6938e..2bfe8e409 100644 --- a/packages/pg/test/integration/connection-pool/idle-timeout-tests.js +++ b/packages/pg/test/integration/connection-pool/idle-timeout-tests.js @@ -1,5 +1,6 @@ 'use strict' var helper = require('./test-helper') +const assert = require('assert') new helper.Suite().test('idle timeout', function () { const config = Object.assign({}, helper.config, { idleTimeoutMillis: 50 }) diff --git a/packages/pg/test/integration/connection-pool/native-instance-tests.js b/packages/pg/test/integration/connection-pool/native-instance-tests.js index a981503e8..8cd494e72 100644 --- a/packages/pg/test/integration/connection-pool/native-instance-tests.js +++ b/packages/pg/test/integration/connection-pool/native-instance-tests.js @@ -2,6 +2,7 @@ var helper = require('./../test-helper') var pg = helper.pg var native = helper.args.native +const assert = require('assert') var pool = new pg.Pool() diff --git a/packages/pg/test/integration/connection-pool/yield-support-tests.js b/packages/pg/test/integration/connection-pool/yield-support-tests.js index 00508f5d6..cc3d270d6 100644 --- a/packages/pg/test/integration/connection-pool/yield-support-tests.js +++ b/packages/pg/test/integration/connection-pool/yield-support-tests.js @@ -1,6 +1,7 @@ 'use strict' var helper = require('./test-helper') var co = require('co') +const assert = require('assert') const pool = new helper.pg.Pool() new helper.Suite().test( diff --git a/packages/pg/test/integration/connection/bound-command-tests.js b/packages/pg/test/integration/connection/bound-command-tests.js deleted file mode 100644 index 15f4f791e..000000000 --- a/packages/pg/test/integration/connection/bound-command-tests.js +++ /dev/null @@ -1,58 +0,0 @@ -'use strict' -var helper = require('./test-helper') -// http://developer.postgresql.org/pgdocs/postgres/protocol-flow.html#PROTOCOL-FLOW-EXT-QUERY - -test('flushing once', function () { - helper.connect(function (con) { - con.parse({ - text: 'select * from ids', - }) - - con.bind() - con.execute() - con.flush() - - assert.emits(con, 'parseComplete') - assert.emits(con, 'bindComplete') - assert.emits(con, 'dataRow') - assert.emits(con, 'commandComplete', function () { - con.sync() - }) - assert.emits(con, 'readyForQuery', function () { - con.end() - }) - }) -}) - -test('sending many flushes', function () { - helper.connect(function (con) { - assert.emits(con, 'parseComplete', function () { - con.bind() - con.flush() - }) - - assert.emits(con, 'bindComplete', function () { - con.execute() - con.flush() - }) - - assert.emits(con, 'dataRow', function (msg) { - assert.equal(msg.fields[0], 1) - assert.emits(con, 'dataRow', function (msg) { - assert.equal(msg.fields[0], 2) - assert.emits(con, 'commandComplete', function () { - con.sync() - }) - assert.emits(con, 'readyForQuery', function () { - con.end() - }) - }) - }) - - con.parse({ - text: 'select * from ids order by id', - }) - - con.flush() - }) -}) diff --git a/packages/pg/test/integration/connection/copy-tests.js b/packages/pg/test/integration/connection/copy-tests.js deleted file mode 100644 index 177009d00..000000000 --- a/packages/pg/test/integration/connection/copy-tests.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict' -var helper = require('./test-helper') -var assert = require('assert') - -test('COPY FROM events check', function () { - helper.connect(function (con) { - var stdinStream = con.query('COPY person FROM STDIN') - con.on('copyInResponse', function () { - con.endCopyFrom() - }) - assert.emits( - con, - 'copyInResponse', - function () { - con.endCopyFrom() - }, - 'backend should emit copyInResponse after COPY FROM query' - ) - assert.emits( - con, - 'commandComplete', - function () { - con.end() - }, - 'backend should emit commandComplete after COPY FROM stream ends' - ) - }) -}) -test('COPY TO events check', function () { - helper.connect(function (con) { - var stdoutStream = con.query('COPY person TO STDOUT') - assert.emits(con, 'copyOutResponse', function () {}, 'backend should emit copyOutResponse after COPY TO query') - assert.emits(con, 'copyData', function () {}, 'backend should emit copyData on every data row') - assert.emits( - con, - 'copyDone', - function () { - con.end() - }, - 'backend should emit copyDone after all data rows' - ) - }) -}) diff --git a/packages/pg/test/integration/connection/dynamic-password-tests.js b/packages/pg/test/integration/connection/dynamic-password-tests.js deleted file mode 100644 index 3ab39d0bc..000000000 --- a/packages/pg/test/integration/connection/dynamic-password-tests.js +++ /dev/null @@ -1,119 +0,0 @@ -'use strict' -const assert = require('assert') -const helper = require('./../test-helper') -const suite = new helper.Suite() -const pg = require('../../../lib/index') -const Client = pg.Client - -const password = process.env.PGPASSWORD || null -const sleep = (millis) => new Promise((resolve) => setTimeout(resolve, millis)) - -if (!password) { - // skip these tests; no password will be requested - return -} - -suite.testAsync('Get password from a sync function', () => { - let wasCalled = false - function getPassword() { - wasCalled = true - return password - } - const client = new Client({ - password: getPassword, - }) - return client.connect().then(() => { - assert.ok(wasCalled, 'Our password function should have been called') - return client.end() - }) -}) - -suite.testAsync('Throw error from a sync function', () => { - let wasCalled = false - const myError = new Error('Oops!') - function getPassword() { - wasCalled = true - throw myError - } - const client = new Client({ - password: getPassword, - }) - let wasThrown = false - return client - .connect() - .catch((err) => { - assert.equal(err, myError, 'Our sync error should have been thrown') - wasThrown = true - }) - .then(() => { - assert.ok(wasCalled, 'Our password function should have been called') - assert.ok(wasThrown, 'Our error should have been thrown') - return client.end() - }) -}) - -suite.testAsync('Get password from a function asynchronously', () => { - let wasCalled = false - function getPassword() { - wasCalled = true - return sleep(100).then(() => password) - } - const client = new Client({ - password: getPassword, - }) - return client.connect().then(() => { - assert.ok(wasCalled, 'Our password function should have been called') - return client.end() - }) -}) - -suite.testAsync('Throw error from an async function', () => { - let wasCalled = false - const myError = new Error('Oops!') - function getPassword() { - wasCalled = true - return sleep(100).then(() => { - throw myError - }) - } - const client = new Client({ - password: getPassword, - }) - let wasThrown = false - return client - .connect() - .catch((err) => { - assert.equal(err, myError, 'Our async error should have been thrown') - wasThrown = true - }) - .then(() => { - assert.ok(wasCalled, 'Our password function should have been called') - assert.ok(wasThrown, 'Our error should have been thrown') - return client.end() - }) -}) - -suite.testAsync('Password function must return a string', () => { - let wasCalled = false - function getPassword() { - wasCalled = true - // Return a password that is not a string - return 12345 - } - const client = new Client({ - password: getPassword, - }) - let wasThrown = false - return client - .connect() - .catch((err) => { - assert.ok(err instanceof TypeError, 'A TypeError should have been thrown') - assert.equal(err.message, 'Password must be a string') - wasThrown = true - }) - .then(() => { - assert.ok(wasCalled, 'Our password function should have been called') - assert.ok(wasThrown, 'Our error should have been thrown') - return client.end() - }) -}) diff --git a/packages/pg/test/integration/connection/notification-tests.js b/packages/pg/test/integration/connection/notification-tests.js deleted file mode 100644 index 534106d4b..000000000 --- a/packages/pg/test/integration/connection/notification-tests.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict' -var helper = require('./test-helper') -// http://www.postgresql.org/docs/8.3/static/libpq-notify.html -test('recieves notification from same connection with no payload', function () { - helper.connect(function (con) { - con.query('LISTEN boom') - assert.emits(con, 'readyForQuery', function () { - con.query('NOTIFY boom') - assert.emits(con, 'notification', function (msg) { - assert.equal(msg.payload, '') - assert.equal(msg.channel, 'boom') - con.end() - }) - }) - }) -}) diff --git a/packages/pg/test/integration/connection/query-tests.js b/packages/pg/test/integration/connection/query-tests.js deleted file mode 100644 index 4105bb719..000000000 --- a/packages/pg/test/integration/connection/query-tests.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict' -var helper = require('./test-helper') -var assert = require('assert') - -var rows = [] -// testing the low level 1-1 mapping api of client to postgres messages -// it's cumbersome to use the api this way -test('simple query', function () { - helper.connect(function (con) { - con.query('select * from ids') - assert.emits(con, 'dataRow') - con.on('dataRow', function (msg) { - rows.push(msg.fields) - }) - assert.emits(con, 'readyForQuery', function () { - con.end() - }) - }) -}) - -process.on('exit', function () { - assert.equal(rows.length, 2) - assert.equal(rows[0].length, 1) - assert.strictEqual(String(rows[0][0]), '1') - assert.strictEqual(String(rows[1][0]), '2') -}) diff --git a/packages/pg/test/integration/connection/test-helper.js b/packages/pg/test/integration/connection/test-helper.js deleted file mode 100644 index 475f30333..000000000 --- a/packages/pg/test/integration/connection/test-helper.js +++ /dev/null @@ -1,41 +0,0 @@ -'use strict' -var net = require('net') -var helper = require('../test-helper') -var Connection = require('../../../lib/connection') -var utils = require('../../../lib/utils') -const crypto = require('../../../lib/crypto/utils') -var connect = function (callback) { - var username = helper.args.user - var database = helper.args.database - var con = new Connection({ stream: new net.Stream() }) - con.on('error', function (error) { - console.log(error) - throw new Error('Connection error') - }) - con.connect(helper.args.port || '5432', helper.args.host || 'localhost') - con.once('connect', function () { - con.startup({ - user: username, - database: database, - }) - con.once('authenticationCleartextPassword', function () { - con.password(helper.args.password) - }) - con.once('authenticationMD5Password', async function (msg) { - con.password(await crypto.postgresMd5PasswordHash(helper.args.user, helper.args.password, msg.salt)) - }) - con.once('readyForQuery', function () { - con.query('create temp table ids(id integer)') - con.once('readyForQuery', function () { - con.query('insert into ids(id) values(1); insert into ids(id) values(2);') - con.once('readyForQuery', function () { - callback(con) - }) - }) - }) - }) -} - -module.exports = { - connect: connect, -} diff --git a/packages/pg/test/integration/domain-tests.js b/packages/pg/test/integration/domain-tests.js index a90880bcd..78c7663e8 100644 --- a/packages/pg/test/integration/domain-tests.js +++ b/packages/pg/test/integration/domain-tests.js @@ -4,6 +4,7 @@ var helper = require('./test-helper') var Query = helper.pg.Query var suite = new helper.Suite() +const assert = require('assert') const Pool = helper.pg.Pool suite.test('no domain', function (cb) { @@ -29,7 +30,7 @@ suite.test('with domain', function (cb) { assert.success(function (client, done) { assert(process.domain, 'no domain exists in connect callback') assert.equal(startingDomain, process.domain, 'domain was lost when checking out a client') - var query = client.query( + client.query( 'SELECT NOW()', assert.success(function () { assert(process.domain, 'no domain exists in query callback') diff --git a/packages/pg/test/integration/gh-issues/130-tests.js b/packages/pg/test/integration/gh-issues/130-tests.js index fb86b5ba3..00aae4208 100644 --- a/packages/pg/test/integration/gh-issues/130-tests.js +++ b/packages/pg/test/integration/gh-issues/130-tests.js @@ -1,6 +1,7 @@ 'use strict' var helper = require('../test-helper') var exec = require('child_process').exec +const assert = require('assert') helper.pg.defaults.poolIdleTimeout = 1000 diff --git a/packages/pg/test/integration/gh-issues/131-tests.js b/packages/pg/test/integration/gh-issues/131-tests.js index 5838067fc..b169849c1 100644 --- a/packages/pg/test/integration/gh-issues/131-tests.js +++ b/packages/pg/test/integration/gh-issues/131-tests.js @@ -1,6 +1,7 @@ 'use strict' var helper = require('../test-helper') var pg = helper.pg +const assert = require('assert') var suite = new helper.Suite() diff --git a/packages/pg/test/integration/gh-issues/1542-tests.js b/packages/pg/test/integration/gh-issues/1542-tests.js index f65aa3fb6..6ad075b22 100644 --- a/packages/pg/test/integration/gh-issues/1542-tests.js +++ b/packages/pg/test/integration/gh-issues/1542-tests.js @@ -17,6 +17,6 @@ suite.testAsync('BoundPool can be subclassed', async () => { suite.test('calling pg.Pool without new throws', () => { const Pool = helper.pg.Pool assert.throws(() => { - const pool = Pool() + Pool() }) }) diff --git a/packages/pg/test/integration/gh-issues/199-tests.js b/packages/pg/test/integration/gh-issues/199-tests.js index 2710020c5..78d4cd32b 100644 --- a/packages/pg/test/integration/gh-issues/199-tests.js +++ b/packages/pg/test/integration/gh-issues/199-tests.js @@ -1,6 +1,7 @@ 'use strict' var helper = require('../test-helper') var client = helper.client() +const assert = require('assert') client.query('CREATE TEMP TABLE arrtest (n integer, s varchar)') client.query("INSERT INTO arrtest VALUES (4, 'foo'), (5, 'bar'), (6, 'baz');") diff --git a/packages/pg/test/integration/gh-issues/2064-tests.js b/packages/pg/test/integration/gh-issues/2064-tests.js index 6118ca2f4..0878b7941 100644 --- a/packages/pg/test/integration/gh-issues/2064-tests.js +++ b/packages/pg/test/integration/gh-issues/2064-tests.js @@ -25,7 +25,6 @@ suite.test('Password should not exist in util.inspect output', () => { suite.test('Password should not exist in json.stringfy output', () => { const pool = new helper.pg.Pool({ password }) const client = new helper.pg.Client({ password }) - const depth = 20 assert(JSON.stringify(pool).indexOf(password) === -1) assert(JSON.stringify(client).indexOf(password) === -1) }) diff --git a/packages/pg/test/integration/gh-issues/2303-tests.js b/packages/pg/test/integration/gh-issues/2303-tests.js index 7496a6f6c..533ae1645 100644 --- a/packages/pg/test/integration/gh-issues/2303-tests.js +++ b/packages/pg/test/integration/gh-issues/2303-tests.js @@ -25,7 +25,6 @@ suite.test('SSL Key should not exist in util.inspect output', () => { suite.test('SSL Key should not exist in json.stringfy output', () => { const pool = new helper.pg.Pool({ ssl: { key: secret_value } }) const client = new helper.pg.Client({ ssl: { key: secret_value } }) - const depth = 20 assert(JSON.stringify(pool).indexOf(secret_value) === -1) assert(JSON.stringify(client).indexOf(secret_value) === -1) }) diff --git a/packages/pg/test/integration/gh-issues/2307-tests.js b/packages/pg/test/integration/gh-issues/2307-tests.js index d5f7c059d..240ac13f1 100644 --- a/packages/pg/test/integration/gh-issues/2307-tests.js +++ b/packages/pg/test/integration/gh-issues/2307-tests.js @@ -2,6 +2,7 @@ const pg = require('../../../lib') const helper = require('../test-helper') +const assert = require('assert') const suite = new helper.Suite() diff --git a/packages/pg/test/integration/gh-issues/2416-tests.js b/packages/pg/test/integration/gh-issues/2416-tests.js index 669eb7789..1bb5aeff8 100644 --- a/packages/pg/test/integration/gh-issues/2416-tests.js +++ b/packages/pg/test/integration/gh-issues/2416-tests.js @@ -1,4 +1,5 @@ const helper = require('../test-helper') +const assert = require('assert') const suite = new helper.Suite() diff --git a/packages/pg/test/integration/gh-issues/2627-tests.js b/packages/pg/test/integration/gh-issues/2627-tests.js index 83e09b910..19f07f8af 100644 --- a/packages/pg/test/integration/gh-issues/2627-tests.js +++ b/packages/pg/test/integration/gh-issues/2627-tests.js @@ -1,6 +1,7 @@ 'use strict' const net = require('net') const helper = require('./../test-helper') +const assert = require('assert') const suite = new helper.Suite() diff --git a/packages/pg/test/integration/gh-issues/3174-tests.js b/packages/pg/test/integration/gh-issues/3174-tests.js new file mode 100644 index 000000000..49ac5905a --- /dev/null +++ b/packages/pg/test/integration/gh-issues/3174-tests.js @@ -0,0 +1,167 @@ +const net = require('net') +const buffers = require('../../test-buffers') +const helper = require('../test-helper') +const assert = require('assert') +const cli = require('../../cli') + +const suite = new helper.Suite() + +const options = { + host: 'localhost', + port: Math.floor(Math.random() * 2000) + 2000, + connectionTimeoutMillis: 2000, + user: 'not', + database: 'existing', +} + +const startMockServer = (port, badBuffer, callback) => { + const sockets = new Set() + + const server = net.createServer((socket) => { + sockets.add(socket) + socket.once('end', () => sockets.delete(socket)) + + socket.on('data', (data) => { + // deny request for SSL + if (data.length === 8) { + socket.write(Buffer.from('N', 'utf8')) + return + // consider all authentication requests as good + } + // the initial message coming in has a 0 message type for authentication negotiation + if (!data[0]) { + socket.write(buffers.authenticationOk()) + // send ReadyForQuery `timeout` ms after authentication + socket.write(buffers.readyForQuery()) + return + // respond with our canned response + } + const code = data.toString('utf8', 0, 1) + switch (code) { + // parse + case 'P': + socket.write(buffers.parseComplete()) + socket.write(buffers.bindComplete()) + socket.write(buffers.rowDescription()) + socket.write(buffers.dataRow()) + socket.write(buffers.commandComplete('FOO BAR')) + socket.write(buffers.readyForQuery()) + // this message is invalid, but sometimes sent out of order when using proxies or pg-bouncer + setImmediate(() => { + socket.write(badBuffer) + }) + break + case 'Q': + socket.write(buffers.rowDescription()) + socket.write(buffers.dataRow()) + socket.write(buffers.commandComplete('FOO BAR')) + socket.write(buffers.readyForQuery()) + // this message is invalid, but sometimes sent out of order when using proxies or pg-bouncer + setImmediate(() => { + socket.write(badBuffer) + }) + default: + // console.log('got code', code) + } + }) + }) + + const closeServer = () => { + for (const socket of sockets) { + socket.destroy() + } + return new Promise((resolve) => { + server.close(resolve) + }) + } + + server.listen(port, options.host, () => callback(closeServer)) +} + +const delay = (ms) => + new Promise((resolve) => { + setTimeout(resolve, ms) + }) + +const testErrorBuffer = (bufferName, errorBuffer) => { + suite.testAsync(`Out of order ${bufferName} on simple query is catchable`, async () => { + const closeServer = await new Promise((resolve, reject) => { + return startMockServer(options.port, errorBuffer, (closeServer) => resolve(closeServer)) + }) + const client = new helper.Client(options) + await client.connect() + + let errorHit = false + client.on('error', () => { + errorHit = true + }) + + await client.query('SELECT NOW()') + await delay(50) + + // the native client only emits a notice message and keeps on its merry way + if (!cli.native) { + assert(errorHit) + // further queries on the client should fail since its in an invalid state + await assert.rejects(() => client.query('SELECTR NOW()'), 'Further queries on the client should reject') + } + + await closeServer() + }) + + suite.testAsync(`Out of order ${bufferName} on extended query is catchable`, async () => { + const closeServer = await new Promise((resolve, reject) => { + return startMockServer(options.port, errorBuffer, (closeServer) => resolve(closeServer)) + }) + const client = new helper.Client(options) + await client.connect() + + let errorHit = false + client.on('error', () => { + errorHit = true + }) + + await client.query('SELECT $1', ['foo']) + await delay(40) + + // the native client only emits a notice message and keeps on its merry way + if (!cli.native) { + assert(errorHit) + // further queries on the client should fail since its in an invalid state + await assert.rejects(() => client.query('SELECTR NOW()'), 'Further queries on the client should reject') + } + + await client.end() + + await closeServer() + }) + + suite.testAsync(`Out of order ${bufferName} on pool is catchable`, async () => { + const closeServer = await new Promise((resolve, reject) => { + return startMockServer(options.port, errorBuffer, (closeServer) => resolve(closeServer)) + }) + const pool = new helper.pg.Pool(options) + + let errorHit = false + pool.on('error', () => { + errorHit = true + }) + + await pool.query('SELECT $1', ['foo']) + await delay(100) + + if (!cli.native) { + assert(errorHit) + assert.strictEqual(pool.idleCount, 0, 'Pool should have no idle clients') + assert.strictEqual(pool.totalCount, 0, 'Pool should have no connected clients') + } + + await pool.end() + await closeServer() + }) +} + +if (!helper.args.native) { + testErrorBuffer('parseComplete', buffers.parseComplete()) + testErrorBuffer('commandComplete', buffers.commandComplete('f')) +} diff --git a/packages/pg/test/integration/gh-issues/507-tests.js b/packages/pg/test/integration/gh-issues/507-tests.js index f77d1f842..19fa67f62 100644 --- a/packages/pg/test/integration/gh-issues/507-tests.js +++ b/packages/pg/test/integration/gh-issues/507-tests.js @@ -1,6 +1,7 @@ 'use strict' var helper = require('../test-helper') var pg = helper.pg +const assert = require('assert') new helper.Suite().test('parsing array results', function (cb) { const pool = new pg.Pool() diff --git a/packages/pg/test/integration/gh-issues/600-tests.js b/packages/pg/test/integration/gh-issues/600-tests.js index af679ee8e..586db151a 100644 --- a/packages/pg/test/integration/gh-issues/600-tests.js +++ b/packages/pg/test/integration/gh-issues/600-tests.js @@ -2,6 +2,7 @@ var async = require('async') var helper = require('../test-helper') const suite = new helper.Suite() +const assert = require('assert') var db = helper.client() diff --git a/packages/pg/test/integration/test-helper.js b/packages/pg/test/integration/test-helper.js index 9b8b58c60..654b2f745 100644 --- a/packages/pg/test/integration/test-helper.js +++ b/packages/pg/test/integration/test-helper.js @@ -1,5 +1,7 @@ 'use strict' var helper = require('./../test-helper') +let { Client } = helper +const assert = require('assert') if (helper.args.native) { Client = require('./../../lib/native') diff --git a/packages/pg/test/native/callback-api-tests.js b/packages/pg/test/native/callback-api-tests.js index 80fdcdf56..8ee5e69d7 100644 --- a/packages/pg/test/native/callback-api-tests.js +++ b/packages/pg/test/native/callback-api-tests.js @@ -3,6 +3,7 @@ var domain = require('domain') var helper = require('./../test-helper') var Client = require('./../../lib/native') const suite = new helper.Suite() +const assert = require('assert') suite.test('fires callback with results', function (done) { var client = new Client(helper.config) diff --git a/packages/pg/test/native/evented-api-tests.js b/packages/pg/test/native/evented-api-tests.js index ba0496eff..5db9e2901 100644 --- a/packages/pg/test/native/evented-api-tests.js +++ b/packages/pg/test/native/evented-api-tests.js @@ -2,6 +2,9 @@ var helper = require('../test-helper') var Client = require('../../lib/native') var Query = Client.Query +const assert = require('assert') +const suite = new helper.Suite() +const test = suite.test.bind(suite) var setupClient = function () { var client = new Client(helper.config) diff --git a/packages/pg/test/native/native-connection-string-tests.js b/packages/pg/test/native/native-connection-string-tests.js index fbd6cb9dd..fe814deea 100644 --- a/packages/pg/test/native/native-connection-string-tests.js +++ b/packages/pg/test/native/native-connection-string-tests.js @@ -2,6 +2,7 @@ var helper = require('../test-helper') var Client = require('../../lib/native') const suite = new helper.Suite() +const assert = require('assert') suite.test('respects nativeConnectionString in config', function (done) { const realPort = helper.config.port diff --git a/packages/pg/test/native/stress-tests.js b/packages/pg/test/native/stress-tests.js index 9d1287750..13f03dcdf 100644 --- a/packages/pg/test/native/stress-tests.js +++ b/packages/pg/test/native/stress-tests.js @@ -2,8 +2,10 @@ var helper = require('../test-helper') var Client = require('../../lib/native') var Query = Client.Query +const assert = require('assert') +const suite = new helper.Suite() -test('many rows', function () { +suite.test('many rows', function () { var client = new Client(helper.config) client.connect() var q = client.query(new Query('SELECT * FROM person')) @@ -17,7 +19,7 @@ test('many rows', function () { }) }) -test('many queries', function () { +suite.test('many queries', function () { var client = new Client(helper.config) client.connect() var count = 0 @@ -34,7 +36,7 @@ test('many queries', function () { }) }) -test('many clients', function () { +suite.test('many clients', function () { var clients = [] for (var i = 0; i < 10; i++) { clients.push(new Client(helper.config)) diff --git a/packages/pg/test/test-helper.js b/packages/pg/test/test-helper.js index 1732c2261..e4e987714 100644 --- a/packages/pg/test/test-helper.js +++ b/packages/pg/test/test-helper.js @@ -1,12 +1,11 @@ 'use strict' -// make assert a global... -global.assert = require('assert') +const assert = require('assert') var sys = require('util') const Suite = require('./suite') const args = require('./cli') -global.Client = require('./../lib').Client +const Client = require('./../lib').Client process.on('uncaughtException', function (d) { if ('stack' in d && 'message' in d) { @@ -164,17 +163,6 @@ assert.isNull = function (item, message) { assert.ok(item === null, message) } -global.test = function (name, action) { - test.testCount++ - test[name] = action - var result = test[name]() - if (result === false) { - process.stdout.write('?') - } else { - process.stdout.write('.') - } -} - // print out the filename process.stdout.write(require('path').basename(process.argv[1])) if (args.binary) process.stdout.write(' (binary)') diff --git a/packages/pg/test/unit/client/cleartext-password-tests.js b/packages/pg/test/unit/client/cleartext-password-tests.js index 49db22d00..0cf0b9fe5 100644 --- a/packages/pg/test/unit/client/cleartext-password-tests.js +++ b/packages/pg/test/unit/client/cleartext-password-tests.js @@ -2,29 +2,30 @@ const helper = require('./test-helper') const createClient = require('./test-helper').createClient +const assert = require('assert') +const suite = new helper.Suite() +const { MemoryStream } = helper -test('cleartext password authentication', function () { - test('responds with password', function () { - var client = createClient() - client.password = '!' - client.connection.stream.packets = [] - client.connection.emit('authenticationCleartextPassword') - var packets = client.connection.stream.packets - assert.lengthIs(packets, 1) - var packet = packets[0] - assert.equalBuffers(packet, [0x70, 0, 0, 0, 6, 33, 0]) - }) +suite.test('cleartext password auth responds with password', function () { + var client = createClient() + client.password = '!' + client.connection.stream.packets = [] + client.connection.emit('authenticationCleartextPassword') + var packets = client.connection.stream.packets + assert.lengthIs(packets, 1) + var packet = packets[0] + assert.equalBuffers(packet, [0x70, 0, 0, 0, 6, 33, 0]) +}) - test('does not crash with null password using pg-pass', function () { - process.env.PGPASSFILE = `${__dirname}/pgpass.file` - var client = new helper.Client({ - host: 'foo', - port: 5432, - database: 'bar', - user: 'baz', - stream: new MemoryStream(), - }) - client.connect() - client.connection.emit('authenticationCleartextPassword') +suite.test('cleartext password auth does not crash with null password using pg-pass', function () { + process.env.PGPASSFILE = `${__dirname}/pgpass.file` + var client = new helper.Client({ + host: 'foo', + port: 5432, + database: 'bar', + user: 'baz', + stream: new MemoryStream(), }) + client.connect() + client.connection.emit('authenticationCleartextPassword') }) diff --git a/packages/pg/test/unit/client/configuration-tests.js b/packages/pg/test/unit/client/configuration-tests.js index b25196822..55e14e143 100644 --- a/packages/pg/test/unit/client/configuration-tests.js +++ b/packages/pg/test/unit/client/configuration-tests.js @@ -1,6 +1,9 @@ 'use strict' -require('./test-helper') +const helper = require('./test-helper') +const { Client } = helper var assert = require('assert') +const suite = new helper.Suite() +const test = suite.test.bind(suite) var pguser = process.env['PGUSER'] || process.env.USER var pgdatabase = process.env['PGDATABASE'] || process.env.USER diff --git a/packages/pg/test/unit/client/early-disconnect-tests.js b/packages/pg/test/unit/client/early-disconnect-tests.js index 494482845..5e8880c7e 100644 --- a/packages/pg/test/unit/client/early-disconnect-tests.js +++ b/packages/pg/test/unit/client/early-disconnect-tests.js @@ -1,7 +1,8 @@ 'use strict' -var helper = require('./test-helper') +require('./test-helper') var net = require('net') var pg = require('../../../lib/index.js') +const assert = require('assert') /* console.log() messages show up in `make test` output. TODO: fix it. */ var server = net.createServer(function (c) { diff --git a/packages/pg/test/unit/client/escape-tests.js b/packages/pg/test/unit/client/escape-tests.js index a058ba1e4..2b5f64499 100644 --- a/packages/pg/test/unit/client/escape-tests.js +++ b/packages/pg/test/unit/client/escape-tests.js @@ -1,6 +1,10 @@ 'use strict' var helper = require('./test-helper') var utils = require('../../../lib/utils') +const assert = require('assert') +const { Client, Suite } = helper +const suite = new Suite() +const test = suite.test.bind(suite) var testLit = function (testName, input, expected) { test(testName, function () { diff --git a/packages/pg/test/unit/client/md5-password-tests.js b/packages/pg/test/unit/client/md5-password-tests.js index 8a425fa5e..e4cb9b3e6 100644 --- a/packages/pg/test/unit/client/md5-password-tests.js +++ b/packages/pg/test/unit/client/md5-password-tests.js @@ -2,6 +2,9 @@ var helper = require('./test-helper') const BufferList = require('../../buffer-list') var crypto = require('../../../lib/crypto/utils') +const assert = require('assert') +const suite = new helper.Suite() +const test = suite.test.bind(suite) test('md5 authentication', async function () { var client = helper.createClient() diff --git a/packages/pg/test/unit/client/notification-tests.js b/packages/pg/test/unit/client/notification-tests.js index 7143acaba..25d0e9f48 100644 --- a/packages/pg/test/unit/client/notification-tests.js +++ b/packages/pg/test/unit/client/notification-tests.js @@ -1,7 +1,9 @@ 'use strict' var helper = require('./test-helper') +const assert = require('assert') +const suite = new helper.Suite() -test('passes connection notification', function () { +suite.test('passes connection notification', function () { var client = helper.client() assert.emits(client, 'notice', function (msg) { assert.equal(msg, 'HAY!!') diff --git a/packages/pg/test/unit/client/prepared-statement-tests.js b/packages/pg/test/unit/client/prepared-statement-tests.js index 2499808f7..ba080dd59 100644 --- a/packages/pg/test/unit/client/prepared-statement-tests.js +++ b/packages/pg/test/unit/client/prepared-statement-tests.js @@ -1,8 +1,11 @@ 'use strict' var helper = require('./test-helper') var Query = require('../../../lib/query') - +const assert = require('assert') var client = helper.client() +const suite = new helper.Suite() +const test = suite.test.bind(suite) + var con = client.connection var parseArg = null con.parse = function (arg) { @@ -90,9 +93,7 @@ test('bound command', function () { var portalClient = helper.client() var portalCon = portalClient.connection -var portalParseArg = null portalCon.parse = function (arg) { - portalParseArg = arg process.nextTick(function () { portalCon.emit('parseComplete') }) diff --git a/packages/pg/test/unit/client/query-queue-tests.js b/packages/pg/test/unit/client/query-queue-tests.js index 0b5eaa564..ede3293fc 100644 --- a/packages/pg/test/unit/client/query-queue-tests.js +++ b/packages/pg/test/unit/client/query-queue-tests.js @@ -1,6 +1,10 @@ 'use strict' -var helper = require('./test-helper') +const helper = require('./test-helper') +const { Client } = helper var Connection = require('../../../lib/connection') +const assert = require('assert') +const suite = new helper.Suite() +const test = suite.test.bind(suite) test('drain', function () { var con = new Connection({ stream: 'NO' }) @@ -19,34 +23,16 @@ test('drain', function () { client.query('hello') client.query('sup') client.query('boom') + assert.equal(raisedDrain, false) + con.emit('readyForQuery') - test('with pending queries', function () { - test('does not emit drain', function () { - assert.equal(raisedDrain, false) - }) - }) - - test('after some queries executed', function () { - con.emit('readyForQuery') - test('does not emit drain', function () { - assert.equal(raisedDrain, false) - }) - }) - - test('when all queries are sent', function () { - con.emit('readyForQuery') - con.emit('readyForQuery') - test('does not emit drain', function () { - assert.equal(raisedDrain, false) - }) - }) + assert.equal(raisedDrain, false) + con.emit('readyForQuery') + con.emit('readyForQuery') + assert.equal(raisedDrain, false) + con.emit('readyForQuery') - test('after last query finishes', function () { - con.emit('readyForQuery') - test('emits drain', function () { - process.nextTick(function () { - assert.ok(raisedDrain) - }) - }) + process.nextTick(function () { + assert.ok(raisedDrain) }) }) diff --git a/packages/pg/test/unit/client/result-metadata-tests.js b/packages/pg/test/unit/client/result-metadata-tests.js index a5e6542c8..e37209872 100644 --- a/packages/pg/test/unit/client/result-metadata-tests.js +++ b/packages/pg/test/unit/client/result-metadata-tests.js @@ -1,12 +1,15 @@ 'use strict' var helper = require('./test-helper') +const assert = require('assert') +const suite = new helper.Suite() +const test = suite.test.bind(suite) var testForTag = function (tagText, callback) { test('includes command tag data for tag ' + tagText, function () { var client = helper.client() client.connection.emit('readyForQuery') - var query = client.query( + client.query( 'whatever', assert.calls((err, result) => { assert.ok(result != null, 'should pass something to this event') diff --git a/packages/pg/test/unit/client/sasl-scram-tests.js b/packages/pg/test/unit/client/sasl-scram-tests.js index 5ccf1709f..2e1ed6a2f 100644 --- a/packages/pg/test/unit/client/sasl-scram-tests.js +++ b/packages/pg/test/unit/client/sasl-scram-tests.js @@ -1,5 +1,6 @@ 'use strict' const helper = require('./test-helper') +const assert = require('assert') var sasl = require('../../../lib/crypto/sasl') diff --git a/packages/pg/test/unit/client/set-keepalives-tests.js b/packages/pg/test/unit/client/set-keepalives-tests.js index 3fef0c055..cae6846e3 100644 --- a/packages/pg/test/unit/client/set-keepalives-tests.js +++ b/packages/pg/test/unit/client/set-keepalives-tests.js @@ -2,6 +2,7 @@ const net = require('net') const pg = require('../../../lib/index.js') const helper = require('./test-helper') +const assert = require('assert') const suite = new helper.Suite() diff --git a/packages/pg/test/unit/client/simple-query-tests.js b/packages/pg/test/unit/client/simple-query-tests.js index 2c3ea5e4e..3fecc1435 100644 --- a/packages/pg/test/unit/client/simple-query-tests.js +++ b/packages/pg/test/unit/client/simple-query-tests.js @@ -1,6 +1,9 @@ 'use strict' var helper = require('./test-helper') var Query = require('../../../lib/query') +const assert = require('assert') +const suite = new helper.Suite() +const test = suite.test.bind(suite) test('executing query', function () { test('queing query', function () { @@ -112,14 +115,6 @@ test('executing query', function () { test('removes itself after another readyForQuery message', function () { return false - assert.emits(query, 'end', function (msg) { - // TODO do we want to check the complete messages? - }) - con.emit('readyForQuery') - // this would never actually happen - ;['dataRow', 'rowDescription', 'commandComplete'].forEach(function (msg) { - assert.equal(con.emit(msg), false, "Should no longer be picking up '" + msg + "' messages") - }) }) }) diff --git a/packages/pg/test/unit/client/stream-and-query-error-interaction-tests.js b/packages/pg/test/unit/client/stream-and-query-error-interaction-tests.js index 892d2e87a..6f0da6142 100644 --- a/packages/pg/test/unit/client/stream-and-query-error-interaction-tests.js +++ b/packages/pg/test/unit/client/stream-and-query-error-interaction-tests.js @@ -1,9 +1,11 @@ 'use strict' -var helper = require('./test-helper') +const helper = require('./test-helper') var Connection = require('../../../lib/connection') var Client = require('../../../lib/client') +const assert = require('assert') +const suite = new helper.Suite() -test('emits end when not in query', function () { +suite.test('emits end when not in query', function () { var stream = new (require('events').EventEmitter)() stream.setNoDelay = () => {} stream.connect = function () { diff --git a/packages/pg/test/unit/client/test-helper.js b/packages/pg/test/unit/client/test-helper.js index 8d1859033..1a89a59f5 100644 --- a/packages/pg/test/unit/client/test-helper.js +++ b/packages/pg/test/unit/client/test-helper.js @@ -1,6 +1,7 @@ 'use strict' var helper = require('../test-helper') var Connection = require('../../../lib/connection') +const { Client } = helper var makeClient = function () { var connection = new Connection({ stream: 'no' }) diff --git a/packages/pg/test/unit/client/throw-in-type-parser-tests.js b/packages/pg/test/unit/client/throw-in-type-parser-tests.js index 8f71fdc02..cf1a35364 100644 --- a/packages/pg/test/unit/client/throw-in-type-parser-tests.js +++ b/packages/pg/test/unit/client/throw-in-type-parser-tests.js @@ -2,6 +2,7 @@ var helper = require('./test-helper') var Query = require('../../../lib/query') var types = require('pg-types') +const assert = require('assert') const suite = new helper.Suite() @@ -32,7 +33,6 @@ const emitFakeEvents = (con) => { } suite.test('emits error', function (done) { - var handled var client = helper.client() var con = client.connection var query = client.query(new Query('whatever')) @@ -45,14 +45,10 @@ suite.test('emits error', function (done) { }) suite.test('calls callback with error', function (done) { - var handled - - var callbackCalled = 0 - var client = helper.client() var con = client.connection emitFakeEvents(con) - var query = client.query('whatever', function (err) { + client.query('whatever', function (err) { assert.equal(err, typeParserError) done() }) diff --git a/packages/pg/test/unit/connection-parameters/creation-tests.js b/packages/pg/test/unit/connection-parameters/creation-tests.js index a4a837f3b..5225b9773 100644 --- a/packages/pg/test/unit/connection-parameters/creation-tests.js +++ b/packages/pg/test/unit/connection-parameters/creation-tests.js @@ -344,7 +344,6 @@ suite.test('ssl is set on client', function () { sslrootcert: '/path/root.crt', }, } - var Client = require('../../../lib/client') var defaults = require('../../../lib/defaults') defaults.ssl = true var c = new ConnectionParameters(sourceConfig) diff --git a/packages/pg/test/unit/connection-pool/configuration-tests.js b/packages/pg/test/unit/connection-pool/configuration-tests.js index 10c991839..cfd8f0eec 100644 --- a/packages/pg/test/unit/connection-pool/configuration-tests.js +++ b/packages/pg/test/unit/connection-pool/configuration-tests.js @@ -2,8 +2,9 @@ const assert = require('assert') const helper = require('../test-helper') +const suite = new helper.Suite() -test('pool with copied settings includes password', () => { +suite.test('pool with copied settings includes password', () => { const original = new helper.pg.Pool({ password: 'original', }) diff --git a/packages/pg/test/unit/connection/error-tests.js b/packages/pg/test/unit/connection/error-tests.js index 091c13e2c..b7496aba9 100644 --- a/packages/pg/test/unit/connection/error-tests.js +++ b/packages/pg/test/unit/connection/error-tests.js @@ -2,8 +2,10 @@ var helper = require('./test-helper') var Connection = require('../../../lib/connection') var net = require('net') +const assert = require('assert') const suite = new helper.Suite() +const { MemoryStream } = helper suite.test('connection emits stream errors', function (done) { var con = new Connection({ stream: new MemoryStream() }) diff --git a/packages/pg/test/unit/connection/inbound-parser-tests.js b/packages/pg/test/unit/connection/inbound-parser-tests.js deleted file mode 100644 index 081035f8a..000000000 --- a/packages/pg/test/unit/connection/inbound-parser-tests.js +++ /dev/null @@ -1,496 +0,0 @@ -'use strict' -require('./test-helper') -const BufferList = require('../../buffer-list') -var Connection = require('../../../lib/connection') -var buffers = require('../../test-buffers') - -var authOkBuffer = buffers.authenticationOk() -var paramStatusBuffer = buffers.parameterStatus('client_encoding', 'UTF8') -var readyForQueryBuffer = buffers.readyForQuery() -var backendKeyDataBuffer = buffers.backendKeyData(1, 2) -var commandCompleteBuffer = buffers.commandComplete('SELECT 3') -var parseCompleteBuffer = buffers.parseComplete() -var bindCompleteBuffer = buffers.bindComplete() -var portalSuspendedBuffer = buffers.portalSuspended() - -var row1 = { - name: 'id', - tableID: 1, - attributeNumber: 2, - dataTypeID: 3, - dataTypeSize: 4, - typeModifier: 5, - formatCode: 0, -} -var oneRowDescBuff = new buffers.rowDescription([row1]) -row1.name = 'bang' - -var twoRowBuf = new buffers.rowDescription([ - row1, - { - name: 'whoah', - tableID: 10, - attributeNumber: 11, - dataTypeID: 12, - dataTypeSize: 13, - typeModifier: 14, - formatCode: 0, - }, -]) - -var emptyRowFieldBuf = new BufferList().addInt16(0).join(true, 'D') - -var emptyRowFieldBuf = buffers.dataRow() - -var oneFieldBuf = new BufferList() - .addInt16(1) // number of fields - .addInt32(5) // length of bytes of fields - .addCString('test') - .join(true, 'D') - -var oneFieldBuf = buffers.dataRow(['test']) - -var expectedAuthenticationOkayMessage = { - name: 'authenticationOk', - length: 8, -} - -var expectedParameterStatusMessage = { - name: 'parameterStatus', - parameterName: 'client_encoding', - parameterValue: 'UTF8', - length: 25, -} - -var expectedBackendKeyDataMessage = { - name: 'backendKeyData', - processID: 1, - secretKey: 2, -} - -var expectedReadyForQueryMessage = { - name: 'readyForQuery', - length: 5, - status: 'I', -} - -var expectedCommandCompleteMessage = { - length: 13, - text: 'SELECT 3', -} -var emptyRowDescriptionBuffer = new BufferList() - .addInt16(0) // number of fields - .join(true, 'T') - -var expectedEmptyRowDescriptionMessage = { - name: 'rowDescription', - length: 6, - fieldCount: 0, -} -var expectedOneRowMessage = { - name: 'rowDescription', - length: 27, - fieldCount: 1, -} - -var expectedTwoRowMessage = { - name: 'rowDescription', - length: 53, - fieldCount: 2, -} - -var testForMessage = function (buffer, expectedMessage) { - var lastMessage = {} - test('recieves and parses ' + expectedMessage.name, function () { - var stream = new MemoryStream() - var client = new Connection({ - stream: stream, - }) - client.connect() - - client.on('message', function (msg) { - lastMessage = msg - }) - - client.on(expectedMessage.name, function () { - client.removeAllListeners(expectedMessage.name) - }) - - stream.emit('data', buffer) - assert.same(lastMessage, expectedMessage) - }) - return lastMessage -} - -var plainPasswordBuffer = buffers.authenticationCleartextPassword() -var md5PasswordBuffer = buffers.authenticationMD5Password() -var SASLBuffer = buffers.authenticationSASL() -var SASLContinueBuffer = buffers.authenticationSASLContinue() -var SASLFinalBuffer = buffers.authenticationSASLFinal() - -var expectedPlainPasswordMessage = { - name: 'authenticationCleartextPassword', -} - -var expectedMD5PasswordMessage = { - name: 'authenticationMD5Password', -} - -var expectedSASLMessage = { - name: 'authenticationSASL', -} - -var expectedSASLContinueMessage = { - name: 'authenticationSASLContinue', - data: 'data', -} - -var expectedSASLFinalMessage = { - name: 'authenticationSASLFinal', - data: 'data', -} - -var notificationResponseBuffer = buffers.notification(4, 'hi', 'boom') -var expectedNotificationResponseMessage = { - name: 'notification', - processId: 4, - channel: 'hi', - payload: 'boom', -} - -test('Connection', function () { - testForMessage(authOkBuffer, expectedAuthenticationOkayMessage) - testForMessage(plainPasswordBuffer, expectedPlainPasswordMessage) - var msgMD5 = testForMessage(md5PasswordBuffer, expectedMD5PasswordMessage) - test('md5 has right salt', function () { - assert.equalBuffers(msgMD5.salt, Buffer.from([1, 2, 3, 4])) - }) - - var msgSASL = testForMessage(SASLBuffer, expectedSASLMessage) - test('SASL has the right mechanisms', function () { - assert.deepStrictEqual(msgSASL.mechanisms, ['SCRAM-SHA-256']) - }) - testForMessage(SASLContinueBuffer, expectedSASLContinueMessage) - testForMessage(SASLFinalBuffer, expectedSASLFinalMessage) - - testForMessage(paramStatusBuffer, expectedParameterStatusMessage) - testForMessage(backendKeyDataBuffer, expectedBackendKeyDataMessage) - testForMessage(readyForQueryBuffer, expectedReadyForQueryMessage) - testForMessage(commandCompleteBuffer, expectedCommandCompleteMessage) - testForMessage(notificationResponseBuffer, expectedNotificationResponseMessage) - test('empty row message', function () { - var message = testForMessage(emptyRowDescriptionBuffer, expectedEmptyRowDescriptionMessage) - test('has no fields', function () { - assert.equal(message.fields.length, 0) - }) - }) - - test('no data message', function () { - testForMessage(Buffer.from([0x6e, 0, 0, 0, 4]), { - name: 'noData', - }) - }) - - test('one row message', function () { - var message = testForMessage(oneRowDescBuff, expectedOneRowMessage) - test('has one field', function () { - assert.equal(message.fields.length, 1) - }) - test('has correct field info', function () { - assert.same(message.fields[0], { - name: 'id', - tableID: 1, - columnID: 2, - dataTypeID: 3, - dataTypeSize: 4, - dataTypeModifier: 5, - format: 'text', - }) - }) - }) - - test('two row message', function () { - var message = testForMessage(twoRowBuf, expectedTwoRowMessage) - test('has two fields', function () { - assert.equal(message.fields.length, 2) - }) - test('has correct first field', function () { - assert.same(message.fields[0], { - name: 'bang', - tableID: 1, - columnID: 2, - dataTypeID: 3, - dataTypeSize: 4, - dataTypeModifier: 5, - format: 'text', - }) - }) - test('has correct second field', function () { - assert.same(message.fields[1], { - name: 'whoah', - tableID: 10, - columnID: 11, - dataTypeID: 12, - dataTypeSize: 13, - dataTypeModifier: 14, - format: 'text', - }) - }) - }) - - test('parsing rows', function () { - test('parsing empty row', function () { - var message = testForMessage(emptyRowFieldBuf, { - name: 'dataRow', - fieldCount: 0, - }) - test('has 0 fields', function () { - assert.equal(message.fields.length, 0) - }) - }) - - test('parsing data row with fields', function () { - var message = testForMessage(oneFieldBuf, { - name: 'dataRow', - fieldCount: 1, - }) - test('has 1 field', function () { - assert.equal(message.fields.length, 1) - }) - - test('field is correct', function () { - assert.equal(message.fields[0], 'test') - }) - }) - }) - - test('notice message', function () { - // this uses the same logic as error message - var buff = buffers.notice([{ type: 'C', value: 'code' }]) - testForMessage(buff, { - name: 'notice', - code: 'code', - }) - }) - - test('error messages', function () { - test('with no fields', function () { - testForMessage(buffers.error(), { - name: 'error', - }) - }) - - test('with all the fields', function () { - var buffer = buffers.error([ - { - type: 'S', - value: 'ERROR', - }, - { - type: 'C', - value: 'code', - }, - { - type: 'M', - value: 'message', - }, - { - type: 'D', - value: 'details', - }, - { - type: 'H', - value: 'hint', - }, - { - type: 'P', - value: '100', - }, - { - type: 'p', - value: '101', - }, - { - type: 'q', - value: 'query', - }, - { - type: 'W', - value: 'where', - }, - { - type: 'F', - value: 'file', - }, - { - type: 'L', - value: 'line', - }, - { - type: 'R', - value: 'routine', - }, - { - type: 'Z', // ignored - value: 'alsdkf', - }, - ]) - - testForMessage(buffer, { - name: 'error', - severity: 'ERROR', - code: 'code', - message: 'message', - detail: 'details', - hint: 'hint', - position: '100', - internalPosition: '101', - internalQuery: 'query', - where: 'where', - file: 'file', - line: 'line', - routine: 'routine', - }) - }) - }) - - test('parses parse complete command', function () { - testForMessage(parseCompleteBuffer, { - name: 'parseComplete', - }) - }) - - test('parses bind complete command', function () { - testForMessage(bindCompleteBuffer, { - name: 'bindComplete', - }) - }) - - test('parses portal suspended message', function () { - testForMessage(portalSuspendedBuffer, { - name: 'portalSuspended', - }) - }) - - test('parses replication start message', function () { - testForMessage(Buffer.from([0x57, 0x00, 0x00, 0x00, 0x04]), { - name: 'replicationStart', - length: 4, - }) - }) -}) - -// since the data message on a stream can randomly divide the incomming -// tcp packets anywhere, we need to make sure we can parse every single -// split on a tcp message -test('split buffer, single message parsing', function () { - var fullBuffer = buffers.dataRow([null, 'bang', 'zug zug', null, '!']) - var stream = new MemoryStream() - var client = new Connection({ - stream: stream, - }) - client.connect() - var message = null - client.on('message', function (msg) { - message = msg - }) - - test('parses when full buffer comes in', function () { - stream.emit('data', fullBuffer) - assert.lengthIs(message.fields, 5) - assert.equal(message.fields[0], null) - assert.equal(message.fields[1], 'bang') - assert.equal(message.fields[2], 'zug zug') - assert.equal(message.fields[3], null) - assert.equal(message.fields[4], '!') - }) - - var testMessageRecievedAfterSpiltAt = function (split) { - var firstBuffer = Buffer.alloc(fullBuffer.length - split) - var secondBuffer = Buffer.alloc(fullBuffer.length - firstBuffer.length) - fullBuffer.copy(firstBuffer, 0, 0) - fullBuffer.copy(secondBuffer, 0, firstBuffer.length) - stream.emit('data', firstBuffer) - stream.emit('data', secondBuffer) - assert.lengthIs(message.fields, 5) - assert.equal(message.fields[0], null) - assert.equal(message.fields[1], 'bang') - assert.equal(message.fields[2], 'zug zug') - assert.equal(message.fields[3], null) - assert.equal(message.fields[4], '!') - } - - test('parses when split in the middle', function () { - testMessageRecievedAfterSpiltAt(6) - }) - - test('parses when split at end', function () { - testMessageRecievedAfterSpiltAt(2) - }) - - test('parses when split at beginning', function () { - testMessageRecievedAfterSpiltAt(fullBuffer.length - 2) - testMessageRecievedAfterSpiltAt(fullBuffer.length - 1) - testMessageRecievedAfterSpiltAt(fullBuffer.length - 5) - }) -}) - -test('split buffer, multiple message parsing', function () { - var dataRowBuffer = buffers.dataRow(['!']) - var readyForQueryBuffer = buffers.readyForQuery() - var fullBuffer = Buffer.alloc(dataRowBuffer.length + readyForQueryBuffer.length) - dataRowBuffer.copy(fullBuffer, 0, 0) - readyForQueryBuffer.copy(fullBuffer, dataRowBuffer.length, 0) - - var messages = [] - var stream = new MemoryStream() - var client = new Connection({ - stream: stream, - }) - client.connect() - client.on('message', function (msg) { - messages.push(msg) - }) - - var verifyMessages = function () { - assert.lengthIs(messages, 2) - assert.same(messages[0], { - name: 'dataRow', - fieldCount: 1, - }) - assert.equal(messages[0].fields[0], '!') - assert.same(messages[1], { - name: 'readyForQuery', - }) - messages = [] - } - // sanity check - test('recieves both messages when packet is not split', function () { - stream.emit('data', fullBuffer) - verifyMessages() - }) - var splitAndVerifyTwoMessages = function (split) { - var firstBuffer = Buffer.alloc(fullBuffer.length - split) - var secondBuffer = Buffer.alloc(fullBuffer.length - firstBuffer.length) - fullBuffer.copy(firstBuffer, 0, 0) - fullBuffer.copy(secondBuffer, 0, firstBuffer.length) - stream.emit('data', firstBuffer) - stream.emit('data', secondBuffer) - } - - test('recieves both messages when packet is split', function () { - test('in the middle', function () { - splitAndVerifyTwoMessages(11) - }) - test('at the front', function () { - splitAndVerifyTwoMessages(fullBuffer.length - 1) - splitAndVerifyTwoMessages(fullBuffer.length - 4) - splitAndVerifyTwoMessages(fullBuffer.length - 6) - }) - - test('at the end', function () { - splitAndVerifyTwoMessages(8) - splitAndVerifyTwoMessages(1) - }) - }) -}) diff --git a/packages/pg/test/unit/connection/startup-tests.js b/packages/pg/test/unit/connection/startup-tests.js index d5d30d5de..eaedfbad2 100644 --- a/packages/pg/test/unit/connection/startup-tests.js +++ b/packages/pg/test/unit/connection/startup-tests.js @@ -1,6 +1,10 @@ 'use strict' -require('./test-helper') +const helper = require('./test-helper') +const assert = require('assert') var Connection = require('../../../lib/connection') +const suite = new helper.Suite() +const test = suite.test.bind(suite) +const { MemoryStream } = helper test('connection can take existing stream', function () { var stream = new MemoryStream() var con = new Connection({ stream: stream }) diff --git a/packages/pg/test/unit/test-helper.js b/packages/pg/test/unit/test-helper.js index 407dbf247..757c986e7 100644 --- a/packages/pg/test/unit/test-helper.js +++ b/packages/pg/test/unit/test-helper.js @@ -3,8 +3,9 @@ var EventEmitter = require('events').EventEmitter var helper = require('../test-helper') var Connection = require('../../lib/connection') +const { Client } = helper -global.MemoryStream = function () { +const MemoryStream = function () { EventEmitter.call(this) this.packets = [] } @@ -45,4 +46,5 @@ const createClient = function () { module.exports = Object.assign({}, helper, { createClient: createClient, + MemoryStream: MemoryStream, }) diff --git a/packages/pg/test/unit/utils-tests.js b/packages/pg/test/unit/utils-tests.js index 5eca7179f..d514f5ad8 100644 --- a/packages/pg/test/unit/utils-tests.js +++ b/packages/pg/test/unit/utils-tests.js @@ -2,6 +2,9 @@ var helper = require('./test-helper') var utils = require('./../../lib/utils') var defaults = require('./../../lib').defaults +const assert = require('assert') +const suite = new helper.Suite() +const test = suite.test.bind(suite) test('ensure types is exported on root object', function () { var pg = require('../../lib') @@ -10,23 +13,6 @@ test('ensure types is exported on root object', function () { assert(pg.types.setTypeParser) }) -// this tests the monkey patching -// to ensure comptability with older -// versions of node -test('EventEmitter.once', function (t) { - // an event emitter - var stream = new MemoryStream() - - var callCount = 0 - stream.once('single', function () { - callCount++ - }) - - stream.emit('single') - stream.emit('single') - assert.equal(callCount, 1) -}) - test('normalizing query configs', function () { var config var callback = function () {} @@ -183,7 +169,6 @@ test('prepareValue: Uint8Array array prepared properly', function () { }) test('prepareValue: objects with complex toPostgres prepared properly', function () { - var buf = Buffer.from('zomgcustom!') var customType = { toPostgres: function () { return [1, 2] @@ -214,7 +199,6 @@ test('prepareValue: objects with toPostgres receive prepareValue', function () { }) test('prepareValue: objects with circular toPostgres rejected', function () { - var buf = Buffer.from('zomgcustom!') var customType = { toPostgres: function () { return { diff --git a/packages/pg/test/worker/src/index.test.js b/packages/pg/test/worker/src/index.test.js index 08de60a61..2bfe50c2a 100644 --- a/packages/pg/test/worker/src/index.test.js +++ b/packages/pg/test/worker/src/index.test.js @@ -6,6 +6,7 @@ const path = require('path') const { unstable_dev } = require('wrangler') var suite = new helper.Suite() +const assert = require('assert') suite.testAsync('Can run in Cloudflare Worker?', test()) diff --git a/yarn.lock b/yarn.lock index ea9c4800e..7de0108bd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1269,15 +1269,10 @@ resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz" integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= -"@types/mocha@^5.2.7": - version "5.2.7" - resolved "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz" - integrity sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ== - -"@types/mocha@^8.0.3": - version "8.0.3" - resolved "https://registry.npmjs.org/@types/mocha/-/mocha-8.0.3.tgz" - integrity sha512-vyxR57nv8NfcU0GZu8EUXZLTbCMupIUwy95LJ6lllN+JRPG25CwMHoB1q5xKh8YKhQnHYRAn4yW2yuHbf/5xgg== +"@types/mocha@^10.0.7": + version "10.0.7" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.7.tgz#4c620090f28ca7f905a94b706f74dc5b57b44f2f" + integrity sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw== "@types/node@*", "@types/node@>= 8": version "12.12.21" @@ -1541,10 +1536,10 @@ amdefine@>=0.0.4: resolved "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= -ansi-colors@3.2.3: - version "3.2.3" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== ansi-escapes@^3.2.0: version "3.2.0" @@ -1600,14 +1595,6 @@ any-promise@^1.0.0: resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - anymatch@~3.1.2: version "3.1.3" resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" @@ -1836,17 +1823,7 @@ blake3-wasm@^2.1.5: resolved "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz" integrity sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g== -bluebird@3.4.1: - version "3.4.1" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.4.1.tgz" - integrity sha1-tzHd9I4t077awudeEhWhG8uR+gc= - -bluebird@3.5.2: - version "3.5.2" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz" - integrity sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg== - -bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: +bluebird@3.7.2, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: version "3.7.2" resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -1897,11 +1874,6 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browser-stdout@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" - integrity sha512-7Rfk377tpSM9TWBEeHs0FlDZGoAIei2V/4MdZJoFMBFAK6BqLpxAIUepGRHGdPFgGsLb02PXovC4qddyHvQqTg== - browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz" @@ -2056,6 +2028,11 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + capnp-ts@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/capnp-ts/-/capnp-ts-0.7.0.tgz#16fd8e76b667d002af8fcf4bf92bf15d1a7b54a9" @@ -2099,6 +2076,14 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" @@ -2109,21 +2094,6 @@ check-error@^1.0.2: resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= -chokidar@3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz" - integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.2.0" - optionalDependencies: - fsevents "~2.1.1" - chokidar@^3.5.3: version "3.5.3" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" @@ -2195,6 +2165,15 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" @@ -2266,13 +2245,6 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" - integrity sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A== - dependencies: - graceful-readlink ">= 1.0.0" - compare-func@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz" @@ -2518,13 +2490,6 @@ dateformat@^3.0.0: resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== -debug@2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b" - integrity sha512-XMYwiKKX0jdij1QRlpYn0O6gks0hW3iYUsx/h/RLPKouDGVeun2wlMYl29C85KBjnv1vw2vj+yti1ziHsXd7cg== - dependencies: - ms "0.7.2" - debug@3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz" @@ -2532,14 +2497,7 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@3.2.6, debug@^3.1.0: - version "3.2.6" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@4, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@4, debug@4.3.4, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -2553,6 +2511,13 @@ debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz" @@ -2571,6 +2536,11 @@ decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" @@ -2600,7 +2570,7 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-properties@^1.1.2, define-properties@^1.1.3: +define-properties@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== @@ -2657,15 +2627,10 @@ dezalgo@^1.0.0: asap "^2.0.0" wrappy "1" -diff@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" - integrity sha512-597ykPFhtJYaXqPq6fF7Vl1fXTKgPdLOntyxpmdzUOKiYGqK7zcnbplj5088+8qJnWdzXhyeau5iVr8HVo9dgg== - -diff@3.5.0: - version "3.5.0" - resolved "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== diff@^4.0.1: version "4.0.2" @@ -2875,16 +2840,21 @@ esbuild@0.17.19: "@esbuild/win32-ia32" "0.17.19" "@esbuild/win32-x64" "0.17.19" -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escalade@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== -escape-string-regexp@^4.0.0: +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + escodegen@1.8.x: version "1.8.1" resolved "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz" @@ -3247,12 +3217,13 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== +find-up@5.0.0, find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: - locate-path "^3.0.0" + locate-path "^6.0.0" + path-exists "^4.0.0" find-up@^1.0.0: version "1.1.2" @@ -3269,6 +3240,13 @@ find-up@^2.0.0: dependencies: locate-path "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + find-up@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" @@ -3277,14 +3255,6 @@ find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - flat-cache@^3.0.4: version "3.2.0" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" @@ -3294,12 +3264,10 @@ flat-cache@^3.0.4: keyv "^4.5.3" rimraf "^3.0.2" -flat@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz" - integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== - dependencies: - is-buffer "~2.0.3" +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.2.9: version "3.2.9" @@ -3401,11 +3369,6 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@~2.1.1: - version "2.1.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - fsevents@~2.3.2: version "2.3.2" resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" @@ -3445,7 +3408,7 @@ genfun@^5.0.0: resolved "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz" integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -3560,7 +3523,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0, glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: +glob-parent@^5.0.0, glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -3584,29 +3547,16 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" - integrity sha512-mRyN/EsN2SyNhKWykF3eEGhDpeNplMWaW18Bmh76tnOqk5TbELAVwFAYOCmKVssOYFrYvvLMguiA+NXO3ZTuVA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@7.1.3: - version "7.1.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== +glob@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^5.0.1" once "^1.3.0" - path-is-absolute "^1.0.0" glob@^10.2.2, glob@^10.3.10: version "10.4.1" @@ -3685,26 +3635,11 @@ graceful-fs@^4.2.6: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" - integrity sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w== - graphemer@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -growl@1.10.5: - version "1.10.5" - resolved "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -growl@1.9.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" - integrity sha512-RTBwDHhNuOx4F0hqzItc/siXCasGfC4DeWcBamclWd+6jWtBaeB/SGbMkGf0eiQoW7ib8JpvOgnUsmgMHI3Mfw== - handlebars@^4.0.1, handlebars@^4.7.6: version "4.7.7" resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" @@ -3750,7 +3685,7 @@ has-flag@^4.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.0, has-symbols@^1.0.1: +has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== @@ -4055,11 +3990,6 @@ is-buffer@^1.1.5: resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-buffer@~2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz" - integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== - is-callable@^1.1.4, is-callable@^1.2.2: version "1.2.2" resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz" @@ -4216,6 +4146,11 @@ is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" @@ -4266,6 +4201,11 @@ is-typedarray@~1.0.0: resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" @@ -4342,14 +4282,6 @@ js-tokens@^4.0.0: resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@3.13.1: - version "3.13.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - js-yaml@3.x, js-yaml@^3.13.1: version "3.14.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz" @@ -4358,7 +4290,7 @@ js-yaml@3.x, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^4.1.0: +js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== @@ -4410,11 +4342,6 @@ json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json3@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" - integrity sha512-I5YLeauH3rIaE99EE++UeH2M2gSYo8/2TqDac7oZEH6D/DSQ4Woa628Qrfj1X9/OY5Mk5VvIDQaKCDchXaKrmA== - jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" @@ -4588,34 +4515,6 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - integrity sha512-t3N26QR2IdSN+gqSy9Ds9pBu/J1EAFEshKlUHpJG3rvyJOYgcELIxcIeKKfZk7sjOz11cFfzJRsyFry/JyabJQ== - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" - -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - integrity sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ== - -lodash._basecreate@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" - integrity sha512-EDem6C9iQpn7fxnGdmhXmqYGjCkStmDXT4AeyB2Ph8WKbglg4aJZczNkQglj+zWXcOEEkViK8THuV2JvugW47g== - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - integrity sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA== - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - integrity sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ== - lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz" @@ -4626,44 +4525,16 @@ lodash.clonedeep@^4.5.0: resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= -lodash.create@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" - integrity sha512-IUfOYwDEbI8JbhW6psW+Ig01BOVK67dTSCUAbS58M0HBkPcAv/jHuxD+oJVP2tUCo3H9L6f/8GM6rxwY+oc7/w== - dependencies: - lodash._baseassign "^3.0.0" - lodash._basecreate "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz" integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg== - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - integrity sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ== - lodash.ismatch@^4.4.0: version "4.4.0" resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz" integrity sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc= -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - integrity sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ== - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -4714,12 +4585,13 @@ log-driver@^1.2.7: resolved "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz" integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== -log-symbols@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== +log-symbols@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: - chalk "^2.4.2" + chalk "^4.1.0" + is-unicode-supported "^0.1.0" loud-rejection@^1.0.0: version "1.6.0" @@ -4979,19 +4851,19 @@ miniflare@3.20240524.1: youch "^3.2.2" zod "^3.20.6" -"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimatch@3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== dependencies: - brace-expansion "^1.1.7" + brace-expansion "^2.0.1" minimatch@9.0.3: version "9.0.3" @@ -5000,6 +4872,13 @@ minimatch@9.0.3: dependencies: brace-expansion "^2.0.1" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimatch@^9.0.4: version "9.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" @@ -5024,11 +4903,6 @@ minimist-options@^3.0.1: arrify "^1.0.1" is-plain-obj "^1.1.0" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha512-miQKw5Hv4NS1Psg2517mV4e4dYNaO3++hjAvLOAzKqZ61rH8NS1SK+vbfBWZ5PY/Me/bEWhUwqMghEW5Fb9T7Q== - minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: version "1.2.6" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" @@ -5149,66 +5023,38 @@ mkdirp@*, mkdirp@^1.0.3: resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha512-SknJC52obPfGQPnjIkXbmA6+5H15E+fR+E4iR2oQ3zzCLbd7/ONua69R/Gw7AgkTLsRG+r5fzksYwWe1AgTyWA== - dependencies: - minimist "0.0.8" - -mkdirp@0.5.5, mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.5: +mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" -mocha@3.4.2: - version "3.4.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.4.2.tgz#d0ef4d332126dbf18d0d640c9b382dd48be97594" - integrity sha512-19d+WPNPG+gCDZvyw8zMcn1MPl72yfZKuTjC/reTOVOFx3VBHXEwxxJyvi9B4G0RV49jjXs0huLKcG58X9S84Q== - dependencies: - browser-stdout "1.3.0" - commander "2.9.0" - debug "2.6.0" - diff "3.2.0" - escape-string-regexp "1.0.5" - glob "7.1.1" - growl "1.9.2" - json3 "3.3.2" - lodash.create "3.1.1" - mkdirp "0.5.1" - supports-color "3.1.2" - -mocha@^7.1.2: - version "7.2.0" - resolved "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz" - integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== +mocha@10.5.2, mocha@^10.5.2: + version "10.5.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.5.2.tgz#0a3481fb67c0a7fc144a909b2d6a9fec35ec5989" + integrity sha512-9btlN3JKCefPf+vKd/kcKz2SXxi12z6JswkGfaAF0saQvnsqLJk504ZmbxhSoENge08E9dsymozKgFMTl5PQsA== dependencies: - ansi-colors "3.2.3" + ansi-colors "4.1.1" browser-stdout "1.3.1" - chokidar "3.3.0" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" + chokidar "^3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "8.1.0" he "1.2.0" - js-yaml "3.13.1" - log-symbols "3.0.0" - minimatch "3.0.4" - mkdirp "0.5.5" - ms "2.1.1" - node-environment-flags "1.0.6" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" modify-values@^1.0.0: version "1.0.1" @@ -5227,26 +5073,21 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" -ms@0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" - integrity sha512-5NnE67nQSQDJHVahPJna1PQ/zCXMnQop3yUCxjKPNzCxuyPSKWTQ/5Gu5CZmjetwGLWRA+PzeF5thlbOdbQldA== - ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2, ms@^2.0.0, ms@^2.1.1: +ms@2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multimatch@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/multimatch/-/multimatch-3.0.0.tgz" @@ -5328,14 +5169,6 @@ nice-try@^1.0.4: resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -node-environment-flags@1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz" - integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== - dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" - node-fetch-npm@^2.0.2: version "2.0.4" resolved "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz" @@ -5532,7 +5365,7 @@ object-inspect@^1.8.0: resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz" integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -5544,16 +5377,6 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - object.assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz" @@ -6179,6 +6002,13 @@ quick-lru@^4.0.1: resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + read-cmd-shim@^1.0.1: version "1.0.5" resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz" @@ -6297,13 +6127,6 @@ readdir-scoped-modules@^1.0.0: graceful-fs "^4.1.2" once "^1.3.0" -readdirp@~3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz" - integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== - dependencies: - picomatch "^2.0.4" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" @@ -6538,7 +6361,7 @@ rxjs@^6.4.0: dependencies: tslib "^1.9.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -6594,6 +6417,13 @@ semver@^7.5.4: dependencies: lru-cache "^6.0.0" +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" @@ -6928,7 +6758,7 @@ stream-spec@~0.3.5: dependencies: macgyver "~1.10" -"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: +"string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -6963,6 +6793,15 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -7002,7 +6841,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -7030,6 +6869,13 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -7073,12 +6919,7 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" -strip-json-comments@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -strip-json-comments@^3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -7092,19 +6933,12 @@ strong-log-transformer@^2.0.0: minimist "^1.2.0" through "^2.3.4" -supports-color@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" - integrity sha512-F8dvPrZJtNzvDRX26eNXT4a7AecAvTGljmmnI39xEgSpbHKhQ7N0dO/NTxUExd0wuLHp4zbwYY7lvHq0aKpwrA== +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: - has-flag "^1.0.0" - -supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== - dependencies: - has-flag "^3.0.0" + has-flag "^4.0.0" supports-color@^3.1.0: version "3.2.3" @@ -7590,7 +7424,7 @@ which-module@^2.0.0: resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1.3.1, which@^1.1.1, which@^1.2.9, which@^1.3.1: +which@^1.1.1, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -7611,7 +7445,7 @@ which@^4.0.0: dependencies: isexe "^3.1.1" -wide-align@1.1.3, wide-align@^1.1.0: +wide-align@^1.1.0: version "1.1.3" resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== @@ -7657,6 +7491,11 @@ workerd@^1.20230419.0: "@cloudflare/workerd-linux-arm64" "1.20240529.0" "@cloudflare/workerd-windows-64" "1.20240529.0" +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + wrangler@3.58.0: version "3.58.0" resolved "https://registry.yarnpkg.com/wrangler/-/wrangler-3.58.0.tgz#b2ce3ac2d2b86f31f3b33a496ef9c9656f41f2ea" @@ -7697,6 +7536,15 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" @@ -7772,6 +7620,11 @@ y18n@^4.0.0: resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz" integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" @@ -7782,13 +7635,10 @@ yallist@^4.0.0: resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@13.1.2, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== yargs-parser@^15.0.1: version "15.0.1" @@ -7806,30 +7656,33 @@ yargs-parser@^18.1.3: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== - dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs@13.3.2, yargs@^13.3.0: - version "13.3.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" yargs@^14.2.2: version "14.2.3"