@takeshape/streams 10.21.3 → 10.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/streams.d.ts CHANGED
@@ -2,24 +2,19 @@
2
2
  /// <reference types="node" />
3
3
  /// <reference types="node" />
4
4
  /// <reference types="node" />
5
- /// <reference types="node" />
6
- /// <reference types="node" />
7
- import { Readable, type ReadableOptions, type Transform, Writable, type WritableOptions } from 'stream';
8
- type Stream = NodeJS.ReadableStream | NodeJS.WritableStream;
9
- export type Pump = {
10
- (streams: Stream[]): Promise<any>;
11
- (...streams: Stream[]): Promise<any>;
12
- };
13
- export declare const pump: Pump;
5
+ import { PassThrough, Readable, type ReadableOptions, Writable, type WritableOptions, Transform } from 'node:stream';
6
+ import { pipeline } from 'node:stream/promises';
7
+ export { compose } from 'node:stream';
8
+ export declare const pump: typeof pipeline;
14
9
  export declare function streamToPromise(stream: NodeJS.ReadableStream | NodeJS.WritableStream): Promise<void>;
15
10
  export declare function createTransform(transform: (data: any) => any): Transform;
16
11
  export declare function createAsyncTransform(transform: (data: any) => Promise<any>): Transform;
17
12
  export declare function createFilter(predicate: (data: any) => boolean): Transform;
18
- export declare const createAccumulator: (accumulator: (data: any) => void) => Transform;
19
- export declare const createAsyncWritable: (write: (data: any) => Promise<void>, concurrency?: number) => Writable;
20
- export declare const tee: (...args: NodeJS.WritableStream[] | [NodeJS.WritableStream[]]) => Writable;
21
- export declare const readableFromArray: (array: any[], options?: Partial<ReadableOptions>) => Readable;
22
- export declare const collectStreamIntoArray: (array?: any[], options?: Partial<WritableOptions>) => Writable;
13
+ export declare function createAccumulator(accumulator: (data: any) => void): Transform;
14
+ export declare function createAsyncWritable(write: (data: any) => Promise<void>, concurrency?: number): Writable;
15
+ export declare function tee(...args: NodeJS.WritableStream[] | [NodeJS.WritableStream[]]): Writable;
16
+ export declare function readableFromArray(array: any[], options?: Partial<ReadableOptions>): Readable;
17
+ export declare function collectStreamIntoArray(array?: any[], options?: Partial<WritableOptions>): Writable;
23
18
  export declare function readStreamToBuffer(stream: NodeJS.ReadableStream): Promise<Buffer>;
24
- export {};
19
+ export declare function mergeStreams(...streams: NodeJS.ReadableStream[]): PassThrough;
25
20
  //# sourceMappingURL=streams.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"streams.d.ts","sourceRoot":"","sources":["../../src/streams.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAc,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAC,MAAM,QAAQ,CAAC;AAOnH,KAAK,MAAM,GAAG,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAE5D,MAAM,MAAM,IAAI,GAAG;IACjB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACtC,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,IAAoC,CAAC;AAExD,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAK1G;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,GAAG,SAAS,CASxE;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAWtF;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,GAAG,SAAS,CAYzE;AAED,eAAO,MAAM,iBAAiB,uBAAwB,GAAG,KAAK,IAAI,KAAG,SAIjE,CAAC;AAEL,eAAO,MAAM,mBAAmB,iBAAkB,GAAG,KAAK,QAAQ,IAAI,CAAC,2BAAqB,QAc3F,CAAC;AAEF,eAAO,MAAM,GAAG,YAAa,OAAO,cAAc,EAAE,GAAG,CAAC,OAAO,cAAc,EAAE,CAAC,KAAG,QAyBlF,CAAC;AAEF,eAAO,MAAM,iBAAiB,UAAW,GAAG,EAAE,YAAY,QAAQ,eAAe,CAAC,KAAG,QAUpF,CAAC;AAEF,eAAO,MAAM,sBAAsB,WAAW,GAAG,EAAE,YAAgB,QAAQ,eAAe,CAAC,KAAQ,QAQ/F,CAAC;AAEL,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAMvF"}
1
+ {"version":3,"file":"streams.d.ts","sourceRoot":"","sources":["../../src/streams.ts"],"names":[],"mappings":";;;;AAAA,OAAO,EAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,SAAS,EAAC,MAAM,aAAa,CAAC;AACnH,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AAK9C,OAAO,EAAC,OAAO,EAAC,MAAM,aAAa,CAAC;AAEpC,eAAO,MAAM,IAAI,iBAAW,CAAC;AAE7B,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAK1G;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,GAAG,aAY5D;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,aAc1E;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,aAe7D;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,aAQjE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE,WAAW,SAAK,YAcxF;AAED,wBAAgB,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,YA0B/E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,YAEjF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,GAAE,GAAG,EAAO,EAAE,OAAO,GAAE,OAAO,CAAC,eAAe,CAAM,YAS/F;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,mBAMrE;AAED,wBAAgB,YAAY,CAAC,GAAG,OAAO,EAAE,MAAM,CAAC,cAAc,EAAE,eAS/D"}
package/dist/streams.js CHANGED
@@ -3,24 +3,31 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.createAccumulator = exports.collectStreamIntoArray = void 0;
6
+ exports.collectStreamIntoArray = collectStreamIntoArray;
7
+ Object.defineProperty(exports, "compose", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _nodeStream.compose;
11
+ }
12
+ });
13
+ exports.createAccumulator = createAccumulator;
7
14
  exports.createAsyncTransform = createAsyncTransform;
8
- exports.createAsyncWritable = void 0;
15
+ exports.createAsyncWritable = createAsyncWritable;
9
16
  exports.createFilter = createFilter;
10
17
  exports.createTransform = createTransform;
18
+ exports.mergeStreams = mergeStreams;
11
19
  exports.pump = void 0;
12
20
  exports.readStreamToBuffer = readStreamToBuffer;
13
- exports.readableFromArray = void 0;
21
+ exports.readableFromArray = readableFromArray;
14
22
  exports.streamToPromise = streamToPromise;
15
- exports.tee = void 0;
16
- var _stream = require("stream");
17
- var _bluebird = _interopRequireDefault(require("bluebird"));
23
+ exports.tee = tee;
24
+ var _nodeStream = require("node:stream");
25
+ var _promises = require("node:stream/promises");
26
+ var _nodeUtil = require("node:util");
18
27
  var _pQueue = _interopRequireDefault(require("p-queue"));
19
28
  var _isStream = _interopRequireDefault(require("is-stream"));
20
- var _through = _interopRequireDefault(require("through2"));
21
- var _pump = _interopRequireDefault(require("pump"));
22
29
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
- const pump = exports.pump = _bluebird.default.promisify(_pump.default);
30
+ const pump = exports.pump = _promises.pipeline;
24
31
  async function streamToPromise(stream) {
25
32
  return new Promise((resolve, reject) => {
26
33
  const doneEvent = _isStream.default.writable(stream) ? 'finish' : 'end';
@@ -28,70 +35,82 @@ async function streamToPromise(stream) {
28
35
  });
29
36
  }
30
37
  function createTransform(transform) {
31
- return _through.default.obj(function (content, _, callback) {
32
- try {
33
- this.push(transform(content));
34
- callback();
35
- } catch (e) {
36
- callback(e);
38
+ return new _nodeStream.Transform({
39
+ objectMode: true,
40
+ transform(chunk, _, callback) {
41
+ try {
42
+ this.push(transform(chunk));
43
+ callback();
44
+ } catch (e) {
45
+ callback(e);
46
+ }
37
47
  }
38
48
  });
39
49
  }
40
50
  function createAsyncTransform(transform) {
41
- return _through.default.obj(function (content, _, callback) {
42
- try {
43
- transform(content).then(result => {
44
- this.push(result);
45
- callback();
46
- }, callback);
47
- } catch (e) {
48
- callback(e);
51
+ return new _nodeStream.Transform({
52
+ objectMode: true,
53
+ transform(chunk, _, callback) {
54
+ try {
55
+ transform(chunk).then(result => {
56
+ this.push(result);
57
+ callback();
58
+ }, callback);
59
+ } catch (e) {
60
+ callback(e);
61
+ }
49
62
  }
50
63
  });
51
64
  }
52
65
  function createFilter(predicate) {
53
- return _through.default.obj(function (content, _, callback) {
54
- try {
55
- if (predicate(content)) {
56
- this.push(content);
66
+ return new _nodeStream.Transform({
67
+ objectMode: true,
68
+ transform(chunk, _, callback) {
69
+ try {
70
+ if (predicate(chunk)) {
71
+ this.push(chunk);
72
+ }
73
+ callback();
74
+ } catch (e) {
75
+ callback(e);
57
76
  }
58
- callback();
59
- } catch (e) {
60
- callback(e);
61
77
  }
62
78
  });
63
79
  }
64
- const createAccumulator = accumulator => _through.default.obj(function (item, _, cb) {
65
- accumulator(item);
66
- cb(null, item);
67
- });
68
- exports.createAccumulator = createAccumulator;
69
- const createAsyncWritable = (write, concurrency = 16) => {
80
+ function createAccumulator(accumulator) {
81
+ return new _nodeStream.Transform({
82
+ objectMode: true,
83
+ transform(chunk, _, callback) {
84
+ accumulator(chunk);
85
+ callback(null, chunk);
86
+ }
87
+ });
88
+ }
89
+ function createAsyncWritable(write, concurrency = 16) {
70
90
  const queue = new _pQueue.default({
71
91
  concurrency
72
92
  });
73
- return new _stream.Writable({
93
+ return new _nodeStream.Writable({
74
94
  objectMode: true,
75
- write(data, _, cb) {
76
- queue.add(async () => write(data)).catch(error => this.emit('error', error));
77
- cb();
95
+ write(chunk, _, callback) {
96
+ queue.add(async () => write(chunk)).catch(error => this.emit('error', error));
97
+ callback();
78
98
  },
79
- final(cb) {
99
+ final(callback) {
80
100
  void queue.onIdle().then(() => {
81
- cb();
101
+ callback();
82
102
  });
83
103
  }
84
104
  });
85
- };
86
- exports.createAsyncWritable = createAsyncWritable;
87
- const tee = (...args) => {
105
+ }
106
+ function tee(...args) {
88
107
  const first = args[0];
89
108
  const streams = Array.isArray(first) ? first : args;
90
109
  const donePromises = streams.map(streamToPromise);
91
- return new _stream.Writable({
110
+ return new _nodeStream.Writable({
92
111
  objectMode: true,
93
- write(data, _, callback) {
94
- void Promise.all(streams.map(stream => stream.write(data) || _bluebird.default.fromCallback(cb => stream.once('drain', cb)) // If .write() => false buffer is full, start promise to wait for drain event
112
+ write(chunk, _, callback) {
113
+ void Promise.all(streams.map(stream => stream.write(chunk) || (0, _nodeUtil.promisify)(cb => stream.once('drain', cb)) // If .write() => false buffer is full, start promise to wait for drain event
95
114
  )).then(() => {
96
115
  callback();
97
116
  });
@@ -105,35 +124,36 @@ const tee = (...args) => {
105
124
  });
106
125
  }
107
126
  });
108
- };
109
- exports.tee = tee;
110
- const readableFromArray = (array, options) => {
111
- let index = 0;
112
- return new _stream.Readable({
127
+ }
128
+ function readableFromArray(array, options) {
129
+ return _nodeStream.Readable.from(array, options);
130
+ }
131
+ function collectStreamIntoArray(array = [], options = {}) {
132
+ return new _nodeStream.Writable({
113
133
  objectMode: true,
114
- read() {
115
- this.push(index < array.length ? array[index] : null);
116
- index++;
134
+ writev(chunks, callback) {
135
+ chunks.forEach(({
136
+ chunk
137
+ }) => array.push(chunk));
138
+ callback(null);
117
139
  },
118
140
  ...options
119
141
  });
120
- };
121
- exports.readableFromArray = readableFromArray;
122
- const collectStreamIntoArray = (array = [], options = {}) => new _stream.Writable({
123
- objectMode: true,
124
- writev(chunks, cb) {
125
- chunks.forEach(({
126
- chunk
127
- }) => array.push(chunk));
128
- cb(null);
129
- },
130
- ...options
131
- });
132
- exports.collectStreamIntoArray = collectStreamIntoArray;
142
+ }
133
143
  async function readStreamToBuffer(stream) {
134
144
  const chunks = [];
135
- const writeStream = new _stream.PassThrough();
145
+ const writeStream = new _nodeStream.PassThrough();
136
146
  writeStream.on('data', chunk => chunks.push(chunk));
137
147
  await pump(stream, writeStream);
138
148
  return Buffer.concat(chunks);
149
+ }
150
+ function mergeStreams(...streams) {
151
+ let passThrough = new _nodeStream.PassThrough();
152
+ for (const stream of streams) {
153
+ const end = stream === streams.at(-1);
154
+ passThrough = stream.pipe(passThrough, {
155
+ end
156
+ });
157
+ }
158
+ return passThrough;
139
159
  }
package/es/streams.js CHANGED
@@ -1,10 +1,10 @@
1
- import { PassThrough, Readable, Writable } from 'stream';
2
- import BBPromise from 'bluebird';
1
+ import { PassThrough, Readable, Writable, Transform } from 'node:stream';
2
+ import { pipeline } from 'node:stream/promises';
3
+ import { promisify } from 'node:util';
3
4
  import PQueue from 'p-queue';
4
5
  import isStream from 'is-stream';
5
- import through2 from 'through2';
6
- import basePump from 'pump';
7
- export const pump = BBPromise.promisify(basePump);
6
+ export { compose } from 'node:stream';
7
+ export const pump = pipeline;
8
8
  export async function streamToPromise(stream) {
9
9
  return new Promise((resolve, reject) => {
10
10
  const doneEvent = isStream.writable(stream) ? 'finish' : 'end';
@@ -12,68 +12,82 @@ export async function streamToPromise(stream) {
12
12
  });
13
13
  }
14
14
  export function createTransform(transform) {
15
- return through2.obj(function (content, _, callback) {
16
- try {
17
- this.push(transform(content));
18
- callback();
19
- } catch (e) {
20
- callback(e);
15
+ return new Transform({
16
+ objectMode: true,
17
+ transform(chunk, _, callback) {
18
+ try {
19
+ this.push(transform(chunk));
20
+ callback();
21
+ } catch (e) {
22
+ callback(e);
23
+ }
21
24
  }
22
25
  });
23
26
  }
24
27
  export function createAsyncTransform(transform) {
25
- return through2.obj(function (content, _, callback) {
26
- try {
27
- transform(content).then(result => {
28
- this.push(result);
29
- callback();
30
- }, callback);
31
- } catch (e) {
32
- callback(e);
28
+ return new Transform({
29
+ objectMode: true,
30
+ transform(chunk, _, callback) {
31
+ try {
32
+ transform(chunk).then(result => {
33
+ this.push(result);
34
+ callback();
35
+ }, callback);
36
+ } catch (e) {
37
+ callback(e);
38
+ }
33
39
  }
34
40
  });
35
41
  }
36
42
  export function createFilter(predicate) {
37
- return through2.obj(function (content, _, callback) {
38
- try {
39
- if (predicate(content)) {
40
- this.push(content);
43
+ return new Transform({
44
+ objectMode: true,
45
+ transform(chunk, _, callback) {
46
+ try {
47
+ if (predicate(chunk)) {
48
+ this.push(chunk);
49
+ }
50
+ callback();
51
+ } catch (e) {
52
+ callback(e);
41
53
  }
42
- callback();
43
- } catch (e) {
44
- callback(e);
45
54
  }
46
55
  });
47
56
  }
48
- export const createAccumulator = accumulator => through2.obj(function (item, _, cb) {
49
- accumulator(item);
50
- cb(null, item);
51
- });
52
- export const createAsyncWritable = (write, concurrency = 16) => {
57
+ export function createAccumulator(accumulator) {
58
+ return new Transform({
59
+ objectMode: true,
60
+ transform(chunk, _, callback) {
61
+ accumulator(chunk);
62
+ callback(null, chunk);
63
+ }
64
+ });
65
+ }
66
+ export function createAsyncWritable(write, concurrency = 16) {
53
67
  const queue = new PQueue({
54
68
  concurrency
55
69
  });
56
70
  return new Writable({
57
71
  objectMode: true,
58
- write(data, _, cb) {
59
- queue.add(async () => write(data)).catch(error => this.emit('error', error));
60
- cb();
72
+ write(chunk, _, callback) {
73
+ queue.add(async () => write(chunk)).catch(error => this.emit('error', error));
74
+ callback();
61
75
  },
62
- final(cb) {
76
+ final(callback) {
63
77
  void queue.onIdle().then(() => {
64
- cb();
78
+ callback();
65
79
  });
66
80
  }
67
81
  });
68
- };
69
- export const tee = (...args) => {
82
+ }
83
+ export function tee(...args) {
70
84
  const first = args[0];
71
85
  const streams = Array.isArray(first) ? first : args;
72
86
  const donePromises = streams.map(streamToPromise);
73
87
  return new Writable({
74
88
  objectMode: true,
75
- write(data, _, callback) {
76
- void Promise.all(streams.map(stream => stream.write(data) || BBPromise.fromCallback(cb => stream.once('drain', cb)) // If .write() => false buffer is full, start promise to wait for drain event
89
+ write(chunk, _, callback) {
90
+ void Promise.all(streams.map(stream => stream.write(chunk) || promisify(cb => stream.once('drain', cb)) // If .write() => false buffer is full, start promise to wait for drain event
77
91
  )).then(() => {
78
92
  callback();
79
93
  });
@@ -87,32 +101,36 @@ export const tee = (...args) => {
87
101
  });
88
102
  }
89
103
  });
90
- };
91
- export const readableFromArray = (array, options) => {
92
- let index = 0;
93
- return new Readable({
104
+ }
105
+ export function readableFromArray(array, options) {
106
+ return Readable.from(array, options);
107
+ }
108
+ export function collectStreamIntoArray(array = [], options = {}) {
109
+ return new Writable({
94
110
  objectMode: true,
95
- read() {
96
- this.push(index < array.length ? array[index] : null);
97
- index++;
111
+ writev(chunks, callback) {
112
+ chunks.forEach(({
113
+ chunk
114
+ }) => array.push(chunk));
115
+ callback(null);
98
116
  },
99
117
  ...options
100
118
  });
101
- };
102
- export const collectStreamIntoArray = (array = [], options = {}) => new Writable({
103
- objectMode: true,
104
- writev(chunks, cb) {
105
- chunks.forEach(({
106
- chunk
107
- }) => array.push(chunk));
108
- cb(null);
109
- },
110
- ...options
111
- });
119
+ }
112
120
  export async function readStreamToBuffer(stream) {
113
121
  const chunks = [];
114
122
  const writeStream = new PassThrough();
115
123
  writeStream.on('data', chunk => chunks.push(chunk));
116
124
  await pump(stream, writeStream);
117
125
  return Buffer.concat(chunks);
126
+ }
127
+ export function mergeStreams(...streams) {
128
+ let passThrough = new PassThrough();
129
+ for (const stream of streams) {
130
+ const end = stream === streams.at(-1);
131
+ passThrough = stream.pipe(passThrough, {
132
+ end
133
+ });
134
+ }
135
+ return passThrough;
118
136
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@takeshape/streams",
3
- "version": "10.21.3",
3
+ "version": "10.22.0",
4
4
  "description": "Stream helpers",
5
5
  "homepage": "https://www.takeshape.io",
6
6
  "repository": {
@@ -17,16 +17,8 @@
17
17
  "es"
18
18
  ],
19
19
  "dependencies": {
20
- "bluebird": "^3.7.2",
21
20
  "is-stream": "^2.0.0",
22
- "p-queue": "^6.4.0",
23
- "pump": "^3.0.0",
24
- "through2": "^3.0.2"
25
- },
26
- "devDependencies": {
27
- "@types/bluebird": "^3.5.32",
28
- "@types/pump": "^1.1.0",
29
- "@types/through2": "^2.0.36"
21
+ "p-queue": "^6.4.0"
30
22
  },
31
23
  "engines": {
32
24
  "node": ">=18"
@@ -47,6 +39,7 @@
47
39
  "test-changed": "pnpm run test --changedSince=master",
48
40
  "test:ci": "JEST_JUNIT_OUTPUT_DIR=\"${GITHUB_WORKSPACE}/test-results/${npm_package_name#*\\/}\" JEST_JUNIT_OUTPUT_NAME=\"jest-results.xml\" jest --silent --ci --coverageDirectory=\"${GITHUB_WORKSPACE}/coverage/${npm_package_name#*\\/}\" --reporters=default --reporters=jest-junit --maxWorkers=4",
49
41
  "todo": "leasot 'src/**/*.{js,jsx,ts,tsx}'",
50
- "typecheck": "tsc --noEmit"
42
+ "typecheck": "tsc --noEmit",
43
+ "typecheck:ci": "mkdir -p \"${GITHUB_WORKSPACE}/typecheck-results/${npm_package_name#*\\/}\" && tsc --noEmit --pretty false | typescript-jest-junit-reporter | tee \"${GITHUB_WORKSPACE}/typecheck-results/${npm_package_name#*\\/}/typescript-results.xml\""
51
44
  }
52
45
  }