diff --git a/lib/buffer.ts b/lib/buffer.ts index 7d07f9d1..6ac6004b 100644 --- a/lib/buffer.ts +++ b/lib/buffer.ts @@ -1,5 +1,5 @@ import { getIterator } from './get-iterator' -import { defer, IDeferred } from './defer' +import { defer, Deferred } from 'inside-out-async' import { AnyIterable, UnwrapAnyIterable } from './types' interface IValueObj { @@ -10,14 +10,14 @@ interface IValueObj { function _buffer(size: number, iterable: AsyncIterable): AsyncIterableIterator { const iterator = getIterator(iterable) const resultQueue: IValueObj[] = [] - const readQueue: IDeferred>[] = [] + const readQueue: Deferred>[] = [] let reading = false let ended = false function fulfillReadQueue() { while (readQueue.length > 0 && resultQueue.length > 0) { - const readDeferred = readQueue.shift() as IDeferred> + const readDeferred = readQueue.shift() as Deferred> const { error, value } = resultQueue.shift() as IValueObj if (error) { readDeferred.reject(error) @@ -26,7 +26,7 @@ function _buffer(size: number, iterable: AsyncIterable): AsyncIterableIter } } while (readQueue.length > 0 && ended) { - const { resolve } = readQueue.shift() as IDeferred> + const { resolve } = readQueue.shift() as Deferred> resolve({ done: true, value: undefined } as any) } } diff --git a/lib/defer.ts b/lib/defer.ts deleted file mode 100644 index 7699150c..00000000 --- a/lib/defer.ts +++ /dev/null @@ -1,19 +0,0 @@ -export function defer(): IDeferred { - let reject - let resolve - const promise = new Promise((resolveFunc, rejectFunc) => { - resolve = resolveFunc - reject = rejectFunc - }) - return { - promise, - reject, - resolve, - } -} - -export interface IDeferred { - promise: Promise - resolve: (value: T) => void - reject: (error: Error) => void -} diff --git a/lib/flat-transform.ts b/lib/flat-transform.ts index 72683640..d12ec8a5 100644 --- a/lib/flat-transform.ts +++ b/lib/flat-transform.ts @@ -2,7 +2,7 @@ import { AnyIterable, FlatMapValue } from './types' import { flatten } from './flatten' import { filter } from './filter' import { getIterator } from './get-iterator' -import { defer, IDeferred } from './defer' +import { defer, Deferred } from 'inside-out-async' function _flatTransform( concurrency: number, @@ -12,7 +12,7 @@ function _flatTransform( const iterator = getIterator(iterable) const resultQueue: R[] = [] - const readQueue: IDeferred>[] = [] + const readQueue: Deferred>[] = [] let ended = false let reading = false @@ -21,12 +21,12 @@ function _flatTransform( function fulfillReadQueue() { while (readQueue.length > 0 && resultQueue.length > 0) { - const { resolve } = readQueue.shift() as IDeferred> + const { resolve } = readQueue.shift() as Deferred> const value = resultQueue.shift() as R resolve({ done: false, value } as any) } while (readQueue.length > 0 && inflightCount === 0 && ended) { - const { resolve, reject } = readQueue.shift() as IDeferred> + const { resolve, reject } = readQueue.shift() as Deferred> if (lastError) { reject(lastError) lastError = null diff --git a/lib/from-callback-test.ts b/lib/from-callback-test.ts new file mode 100644 index 00000000..0a6cac2b --- /dev/null +++ b/lib/from-callback-test.ts @@ -0,0 +1,38 @@ +import { assert } from 'chai' +import { fromCallback } from './from-callback' +import { collect } from './collect' +import EventEmitter from 'events' + +describe('fromCallback', () => { + it('buffers values', async () => { + const itr = fromCallback() + itr.yield(1) + itr.yield(2) + itr.yield(3) + itr.end() + const values = await collect(itr) + assert.deepEqual(values, [1,2,3]) + }) + it('works with event emitters', async () => { + const emitter = new EventEmitter() + const itr = fromCallback() + emitter.on('data', itr.yield) + emitter.on('close', itr.end) + emitter.emit('data', 1) + emitter.emit('data', 2) + emitter.emit('data', 3) + emitter.emit('close') + const values = await collect(itr) + assert.deepEqual(values, [1,2,3]) + }) + it('ignores values after end', async () => { + const itr = fromCallback() + itr.yield(1) + itr.yield(2) + itr.yield(3) + itr.end() + itr.yield(5) + const values = await collect(itr) + assert.deepEqual(values, [1,2,3]) + }) +}) diff --git a/lib/from-callback.ts b/lib/from-callback.ts new file mode 100644 index 00000000..cdee74df --- /dev/null +++ b/lib/from-callback.ts @@ -0,0 +1,59 @@ +import { deferGenerator } from 'inside-out-async' + +export interface CallbackIterable extends AsyncIterable { + yield(data: T): void + end(): void +} + +/** + * Returns an iterable with methods to help turn event emitters or callbacks into async iterables. + +This leverages the [`inside-out-async`](https://www.npmjs.com/package/inside-out-async#deferGenerator) package which can be used directly if you want something similar for generators. (It is bundled so it's not a dependency.) + +It adds two methods to the returned iterable. + +- `itr.yield(data: T): void` queues data to be read +- `itr.end(): void` ends the iterable + +And will buffer *all* data given to `yield()` until it's read. + +```ts +import { fromCallback } from 'streaming-iterables' + +const pokeLog = fromCallback() +itr.yield('Charmander') +itr.yield('Ash') +itr.yield('Pokeball') +itr.end() + +for await (const pokeData of pokeLog) { + console.log(pokeData) // Charmander, Ash, Pokeball +} + +// To use it as a callback +const emitter = new EventEmitter() +const consoles = fromCallback() +emitter.on('data', consoles.yield) +emitter.on('close', consoles.end) + +emitter.emit('data', 'nintendo') +emitter.emit('data', 'sony') +emitter.emit('data', 'sega') +emitter.emit('close') + +for await (const console of consoles) { + console.log(console) // 'nintendo', 'sony', 'sega' +} + +``` + */ +export function fromCallback(): CallbackIterable { + const { generator, queueValue, queueReturn } = deferGenerator() + + const cbIterable: CallbackIterable = { + ...generator, + yield: queueValue, + end: () => queueReturn() + } + return cbIterable +} diff --git a/lib/index.ts b/lib/index.ts index c708c22a..04d4025a 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -27,3 +27,4 @@ export { throttle } from './throttle' export { time, TimeConfig, CurriedTimeResult } from './time' export { transform } from './transform' export { writeToStream, WritableStreamish } from './write-to-stream' +export { fromCallback } from './from-callback' diff --git a/lib/transform.ts b/lib/transform.ts index de1c6a92..b223ad09 100644 --- a/lib/transform.ts +++ b/lib/transform.ts @@ -1,6 +1,6 @@ import { AnyIterable } from './types' import { getIterator } from './get-iterator' -import { defer, IDeferred } from './defer' +import { defer, Deferred } from 'inside-out-async' function _transform( concurrency: number, @@ -10,7 +10,7 @@ function _transform( const iterator = getIterator(iterable) const resultQueue: R[] = [] - const readQueue: IDeferred>[] = [] + const readQueue: Deferred>[] = [] let ended = false let reading = false @@ -19,12 +19,12 @@ function _transform( function fulfillReadQueue() { while (readQueue.length > 0 && resultQueue.length > 0) { - const { resolve } = readQueue.shift() as IDeferred> + const { resolve } = readQueue.shift() as Deferred> const value = resultQueue.shift() as R resolve({ done: false, value } as any) } while (readQueue.length > 0 && inflightCount === 0 && ended) { - const { resolve, reject } = readQueue.shift() as IDeferred> + const { resolve, reject } = readQueue.shift() as Deferred> if (lastError) { reject(lastError) lastError = null diff --git a/lib/write-to-stream-test.ts b/lib/write-to-stream-test.ts index c17f967d..483d6ad9 100644 --- a/lib/write-to-stream-test.ts +++ b/lib/write-to-stream-test.ts @@ -2,7 +2,7 @@ import { assert } from 'chai' import { writeToStream } from './' import { PassThrough, Transform, Writable } from 'stream' import { promiseImmediate } from './util-test' -import { defer } from './defer' +import { defer } from 'inside-out-async' describe('writeToStream', () => { it('writes values to a stream', async () => { diff --git a/package-lock.json b/package-lock.json index 3a2e1f6b..79a9336f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "MIT", "devDependencies": { "@microsoft/api-extractor": "7.33.1", + "@rollup/plugin-node-resolve": "^14.1.0", "@types/chai": "4.3.3", "@types/mocha": "10.0.0", "@types/node": "17.0.30", @@ -23,6 +24,7 @@ "eslint": "8.25.0", "eslint-config-airbnb-base": "15.0.0", "eslint-plugin-import": "2.26.0", + "inside-out-async": "^1.0.1", "mocha": "10.0.0", "prettier": "2.7.1", "rollup": "2.79.1", @@ -244,6 +246,60 @@ "node": ">= 8" } }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-14.1.0.tgz", + "integrity": "sha512-5G2niJroNCz/1zqwXtk0t9+twOSDlG00k1Wfd7bkbbXmwg8H8dvgHdIWAun53Ps/rckfvOC7scDBjuGFg5OaWw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0" + } + }, + "node_modules/@rollup/plugin-node-resolve/node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, "node_modules/@rushstack/node-core-library": { "version": "3.53.2", "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.53.2.tgz", @@ -359,6 +415,12 @@ "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", "dev": true }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -389,6 +451,15 @@ "integrity": "sha512-oNBIZjIqyHYP8VCNAV9uEytXVeXG2oR0w9lgAXro20eugRQfY002qr3CUl6BAe+Yf/z3CRjPdz27Pu6WWtuSRw==", "dev": true }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/sinon": { "version": "10.0.13", "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", @@ -841,6 +912,18 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/c8": { "version": "7.12.0", "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", @@ -1148,6 +1231,15 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -1653,6 +1745,12 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -2096,6 +2194,15 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, + "node_modules/inside-out-async": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/inside-out-async/-/inside-out-async-1.0.1.tgz", + "integrity": "sha512-QOucOb8Vn1L8cmeABZ6tNznAjiRb+vKbbuIQiyc6Qjrq6rl97N6g/i1K5gtVSJ008HFoiRQNZMXafupeL7Mu5w==", + "dev": true, + "engines": { + "node": "^12.22 || ^14.13 || >=16" + } + }, "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -2150,6 +2257,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-builtin-module": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz", + "integrity": "sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", @@ -2210,6 +2332,12 @@ "node": ">=0.10.0" } }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -4046,6 +4174,44 @@ "fastq": "^1.6.0" } }, + "@rollup/plugin-node-resolve": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-14.1.0.tgz", + "integrity": "sha512-5G2niJroNCz/1zqwXtk0t9+twOSDlG00k1Wfd7bkbbXmwg8H8dvgHdIWAun53Ps/rckfvOC7scDBjuGFg5OaWw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "dependencies": { + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, "@rushstack/node-core-library": { "version": "3.53.2", "resolved": "https://registry.npmjs.org/@rushstack/node-core-library/-/node-core-library-3.53.2.tgz", @@ -4163,6 +4329,12 @@ "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", "dev": true }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, "@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", @@ -4193,6 +4365,15 @@ "integrity": "sha512-oNBIZjIqyHYP8VCNAV9uEytXVeXG2oR0w9lgAXro20eugRQfY002qr3CUl6BAe+Yf/z3CRjPdz27Pu6WWtuSRw==", "dev": true }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/sinon": { "version": "10.0.13", "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", @@ -4495,6 +4676,12 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true + }, "c8": { "version": "7.12.0", "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", @@ -4732,6 +4919,12 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, "define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -5122,6 +5315,12 @@ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -5450,6 +5649,12 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, + "inside-out-async": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/inside-out-async/-/inside-out-async-1.0.1.tgz", + "integrity": "sha512-QOucOb8Vn1L8cmeABZ6tNznAjiRb+vKbbuIQiyc6Qjrq6rl97N6g/i1K5gtVSJ008HFoiRQNZMXafupeL7Mu5w==", + "dev": true + }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -5489,6 +5694,15 @@ "has-tostringtag": "^1.0.0" } }, + "is-builtin-module": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz", + "integrity": "sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==", + "dev": true, + "requires": { + "builtin-modules": "^3.3.0" + } + }, "is-callable": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", @@ -5528,6 +5742,12 @@ "is-extglob": "^2.1.1" } }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", diff --git a/package.json b/package.json index 7d716708..2dd4e603 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "check-coverage": "c8 check-coverage --lines 95 --functions 95 --branches 94", "lint": "tsc && eslint lib/*.ts", "format": "eslint lib/*.ts --fix", - "build": "tsc -p tsconfig-build.json && rollup -c && api-extractor run --local --verbose", + "build": "rm -rf dist dist-ts && tsc -p tsconfig-build.json && rollup -c && api-extractor run --local --verbose", "prepare": "npm run build" }, "keywords": [ @@ -41,6 +41,7 @@ "license": "MIT", "devDependencies": { "@microsoft/api-extractor": "7.33.1", + "@rollup/plugin-node-resolve": "^14.1.0", "@types/chai": "4.3.3", "@types/mocha": "10.0.0", "@types/node": "17.0.30", @@ -54,6 +55,7 @@ "eslint": "8.25.0", "eslint-config-airbnb-base": "15.0.0", "eslint-plugin-import": "2.26.0", + "inside-out-async": "^1.0.1", "mocha": "10.0.0", "prettier": "2.7.1", "rollup": "2.79.1", diff --git a/rollup.config.js b/rollup.config.js index d51a1dc5..6fb5afa6 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,5 +1,8 @@ +import { nodeResolve } from '@rollup/plugin-node-resolve' + export default { input: './dist-ts/index.js', + plugins: [nodeResolve()], output: [ { format: 'esm',