UNPKG

@shockpkg/core

Version:
1 lines 8.46 kB
{"version":3,"file":"stream.mjs","names":["WriteStream","Readable","Transform","WriterStream","_writing","constructor","path","options","_write","chunk","encoding","callback","err","emit","_writev","chunks","SliceStream","_transformed","start","size","_transform","c","Buffer","from","length","i","subarray","push","r","EmptyStream","_read","_size"],"sources":["../src/stream.ts"],"sourcesContent":["/* eslint-disable max-classes-per-file */\nimport {WriteStream, createWriteStream} from 'node:fs';\nimport {Readable, Transform, TransformCallback} from 'node:stream';\n\n/**\n * Extends WriteStream.\n * Adds the missing wrote event to monitor write progress.\n */\nexport class WriterStream extends WriteStream {\n\t/**\n\t * A flag to hook _write methods only once, ignoring write within write.\n\t */\n\tprotected _writing = false;\n\n\t/**\n\t * WriterStream constructor.\n\t *\n\t * @param path Same as createWriteStream.\n\t * @param options Same as createWriteStream.\n\t */\n\tconstructor(\n\t\tpath: Parameters<typeof createWriteStream>[0],\n\t\toptions?: Parameters<typeof createWriteStream>[1]\n\t) {\n\t\t// @ts-expect-error Ignore incorrect @types/node types.\n\t\tsuper(path, options);\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\tpublic _write(\n\t\tchunk: unknown,\n\t\tencoding: BufferEncoding,\n\t\tcallback: (error?: Error | null) => void\n\t): void {\n\t\tif (this._writing) {\n\t\t\treturn super._write(chunk, encoding, callback);\n\t\t}\n\t\tthis._writing = true;\n\t\treturn super._write(chunk, encoding, err => {\n\t\t\tthis._writing = false;\n\t\t\tthis.emit('wrote');\n\t\t\treturn err ? callback(err) : callback();\n\t\t});\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\tpublic _writev(\n\t\tchunks: {\n\t\t\tchunk: unknown;\n\t\t\tencoding: BufferEncoding;\n\t\t}[],\n\t\tcallback: (error?: Error | null) => void\n\t): void {\n\t\tif (this._writing) {\n\t\t\treturn (super._writev as NonNullable<WriteStream['_writev']>)(\n\t\t\t\tchunks,\n\t\t\t\tcallback\n\t\t\t);\n\t\t}\n\t\tthis._writing = true;\n\t\treturn (super._writev as NonNullable<WriteStream['_writev']>)(\n\t\t\tchunks,\n\t\t\terr => {\n\t\t\t\tthis._writing = false;\n\t\t\t\tthis.emit('wrote');\n\t\t\t\treturn err ? callback(err) : callback();\n\t\t\t}\n\t\t);\n\t}\n}\n\n/**\n * Gets buffer slice out of a readable stream.\n */\nexport class SliceStream extends Transform {\n\t/**\n\t * Slice start.\n\t */\n\tpublic readonly start: number;\n\n\t/**\n\t * Slice size.\n\t */\n\tpublic readonly size: number;\n\n\t/**\n\t * Amount processed.\n\t */\n\tprotected _transformed = 0;\n\n\t/**\n\t * SliceStream constructor.\n\t *\n\t * @param start Start offset.\n\t * @param size Total Size.\n\t */\n\tconstructor(start = 0, size = -1) {\n\t\tsuper();\n\n\t\tthis.start = start;\n\t\tthis.size = size;\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\tpublic _transform(\n\t\tchunk: unknown,\n\t\tencoding: BufferEncoding,\n\t\tcallback: TransformCallback\n\t): void {\n\t\tconst {start, size} = this;\n\t\tlet c =\n\t\t\tencoding && (encoding as string) !== 'buffer'\n\t\t\t\t? Buffer.from(chunk as string, encoding)\n\t\t\t\t: (chunk as Buffer);\n\n\t\t// If size is 0, then nothing to do.\n\t\tif (size === 0) {\n\t\t\tthis._transformed += c.length;\n\t\t\treturn callback();\n\t\t}\n\n\t\t// If size is less than 0, from start to infinity.\n\t\tif (size < 0) {\n\t\t\t// Find index from start.\n\t\t\tconst i = this._transformed - start;\n\n\t\t\t// Discard if all before start.\n\t\t\tif (i + c.length <= 0) {\n\t\t\t\tthis._transformed += c.length;\n\t\t\t\treturn callback();\n\t\t\t}\n\n\t\t\t// Skip over any data before start.\n\t\t\tif (i < 0) {\n\t\t\t\tthis._transformed -= i;\n\t\t\t\tc = c.subarray(-i);\n\t\t\t}\n\n\t\t\tthis._transformed += c.length;\n\t\t\tthis.push(c.subarray());\n\t\t\treturn callback();\n\t\t}\n\n\t\t// Discard if all past end.\n\t\tif (this._transformed >= start + size) {\n\t\t\tthis._transformed += c.length;\n\t\t\treturn callback();\n\t\t}\n\n\t\t// Find index from start.\n\t\tlet i = this._transformed - start;\n\n\t\t// Discard if all before start.\n\t\tif (i + c.length <= 0) {\n\t\t\tthis._transformed += c.length;\n\t\t\treturn callback();\n\t\t}\n\n\t\t// Skip over any data before start.\n\t\tif (i < 0) {\n\t\t\tthis._transformed -= i;\n\t\t\tc = c.subarray(-i);\n\t\t\ti = 0;\n\t\t}\n\n\t\t// If chunk length more than remaining.\n\t\tconst r = size - i;\n\t\tif (c.length > r) {\n\t\t\tthis._transformed += r;\n\t\t\tthis.push(c.subarray(0, r));\n\t\t\tthis._transformed += c.length - r;\n\t\t\treturn callback();\n\t\t}\n\n\t\tthis._transformed += c.length;\n\t\tthis.push(c.subarray());\n\t\treturn callback();\n\t}\n}\n\n/**\n * An empty read stream.\n */\nexport class EmptyStream extends Readable {\n\t/**\n\t * @inheritDoc\n\t */\n\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\tpublic _read(_size: number) {\n\t\tthis.push(null);\n\t}\n}\n"],"mappings":"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","ignoreList":[]}