alepha 0.11.12 → 0.12.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["path","name","EventEmitter","EOF","READ","BUFFER","ABORTED","p","ret","res","path","Buffer","noop","#sawError","#handle","#flushFlag","#finishFlushFlag","#fullFlushFlag","realZlib","#onError","#ended","#level","#strategy","#portable","encode","parse","#slurp","t","types.isCode","#type","path","pathModule","large.parse","large.encode","global","#slurp","code","QUEUE","ENDED","EE","code","chunk","ret","fs","pos","parse","fsm.ReadStream","parse","path","s","path","PROCESS","FILE","DIRECTORY","SYMLINK","HARDLINK","ONDRAIN","winchars.decode","code","#hadError","pos","list","t","path","ENDED","zlib.Gzip","zlib.BrotliCompress","zlib.ZstdCompress","code","addFilesSync","addFilesAsync","isWindows","fs","path","er","code","path","path","mkdir","er","code","fs","created","s","isWindows","path","#reservations","#queues","#run","#getQueues","#running","#clear","fn","fs","path","name","code","wc.encode","fsm.WriteStream","er","checkCwd","fs","fsm.ReadStreamSync","fsm.ReadStream","fs","pos","er","r","path","dependencies: Record<string, string>","devDependencies: Record<string, string>","packageJson","tar.extract","path","g: any","config: Record<string, any>","name","models: any[]","env: Record<string, string>","modules: Array<Module>","path","entries: InlineConfig[]","workers: Promise<void>[]","files: string[]","modules: Module[]","module: Module"],"sources":["../../src/cli/services/ProcessRunner.ts","../../../../node_modules/minipass/dist/esm/index.js","../../../../node_modules/@isaacs/fs-minipass/dist/esm/index.js","../../../../node_modules/tar/dist/esm/options.js","../../../../node_modules/tar/dist/esm/make-command.js","../../../../node_modules/minizlib/dist/esm/constants.js","../../../../node_modules/minizlib/dist/esm/index.js","../../../../node_modules/tar/dist/esm/large-numbers.js","../../../../node_modules/tar/dist/esm/types.js","../../../../node_modules/tar/dist/esm/header.js","../../../../node_modules/tar/dist/esm/pax.js","../../../../node_modules/tar/dist/esm/normalize-windows-path.js","../../../../node_modules/tar/dist/esm/read-entry.js","../../../../node_modules/tar/dist/esm/warn-method.js","../../../../node_modules/tar/dist/esm/parse.js","../../../../node_modules/tar/dist/esm/strip-trailing-slashes.js","../../../../node_modules/tar/dist/esm/list.js","../../../../node_modules/tar/dist/esm/mode-fix.js","../../../../node_modules/tar/dist/esm/strip-absolute-path.js","../../../../node_modules/tar/dist/esm/winchars.js","../../../../node_modules/tar/dist/esm/write-entry.js","../../../../node_modules/tar/node_modules/yallist/dist/esm/index.js","../../../../node_modules/tar/dist/esm/pack.js","../../../../node_modules/tar/dist/esm/create.js","../../../../node_modules/tar/dist/esm/get-write-flag.js","../../../../node_modules/chownr/dist/esm/index.js","../../../../node_modules/tar/dist/esm/cwd-error.js","../../../../node_modules/tar/dist/esm/symlink-error.js","../../../../node_modules/tar/dist/esm/mkdir.js","../../../../node_modules/tar/dist/esm/normalize-unicode.js","../../../../node_modules/tar/dist/esm/path-reservations.js","../../../../node_modules/tar/dist/esm/unpack.js","../../../../node_modules/tar/dist/esm/extract.js","../../../../node_modules/tar/dist/esm/replace.js","../../../../node_modules/tar/dist/esm/update.js","../../src/cli/assets/biomeJson.ts","../../src/cli/assets/tsconfigJson.ts","../../src/cli/assets/viteConfigTs.ts","../../src/cli/version.ts","../../src/cli/assets/indexHtml.ts","../../src/cli/services/ProjectUtils.ts","../../src/cli/commands/BiomeCommands.ts","../../src/cli/commands/CoreCommands.ts","../../src/cli/commands/DrizzleCommands.ts","../../src/cli/commands/VerifyCommands.ts","../../src/cli/commands/ViteCommands.ts","../../src/cli/packageBuilderCli.ts","../../src/cli/index.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { $logger } from \"alepha/logger\";\n\n/**\n * Service for running external processes with logging support.\n *\n * This service wraps Node.js child_process functionality and provides:\n * - Automatic logging of executed commands\n * - Promise-based execution\n * - Inherited stdio for seamless output\n * - Working directory context\n * - Config file management in node_modules/.alepha\n */\nexport class ProcessRunner {\n protected readonly log = $logger();\n\n /**\n * Execute a command using npx with inherited stdio.\n *\n * @param command - The command to execute (will be passed to npx)\n * @param env - Optional environment variables to set for the command\n * @returns Promise that resolves when the process exits\n *\n * @example\n * ```ts\n * const runner = alepha.inject(ProcessRunner);\n * await runner.exec(\"tsx watch src/index.ts\");\n * ```\n */\n public async exec(\n command: string,\n env: Record<string, string> = {},\n ): Promise<void> {\n this.log.debug(`Executing command: npx ${command}`, { cwd: process.cwd() });\n\n const prog = spawn(\"npx\", command.split(\" \"), {\n stdio: \"inherit\",\n cwd: process.cwd(),\n env: {\n ...process.env,\n ...env,\n NODE_OPTIONS: \"--import tsx\",\n },\n });\n\n await new Promise<void>((resolve) =>\n prog.on(\"exit\", () => {\n resolve();\n }),\n );\n }\n\n /**\n * Write a configuration file to node_modules/.alepha directory.\n *\n * Creates the .alepha directory if it doesn't exist and writes the file with the given content.\n *\n * @param name - The name of the config file to create\n * @param content - The content to write to the file\n * @param root - The root directory (defaults to process.cwd())\n * @returns The absolute path to the created file\n *\n * @example\n * ```ts\n * const runner = alepha.inject(ProcessRunner);\n * const configPath = await runner.writeConfigFile(\"biome.json\", biomeConfig);\n * ```\n */\n public async writeConfigFile(\n name: string,\n content: string,\n root = process.cwd(),\n ): Promise<string> {\n const dir = join(root, \"node_modules\", \".alepha\");\n\n await mkdir(dir, {\n recursive: true,\n }).catch(() => null);\n\n const path = join(dir, name);\n await writeFile(path, content);\n\n this.log.debug(`Config file written: ${path}`);\n\n return path;\n }\n}\n","const proc = typeof process === 'object' && process\n ? process\n : {\n stdout: null,\n stderr: null,\n };\nimport { EventEmitter } from 'node:events';\nimport Stream from 'node:stream';\nimport { StringDecoder } from 'node:string_decoder';\n/**\n * Return true if the argument is a Minipass stream, Node stream, or something\n * else that Minipass can interact with.\n */\nexport const isStream = (s) => !!s &&\n typeof s === 'object' &&\n (s instanceof Minipass ||\n s instanceof Stream ||\n isReadable(s) ||\n isWritable(s));\n/**\n * Return true if the argument is a valid {@link Minipass.Readable}\n */\nexport const isReadable = (s) => !!s &&\n typeof s === 'object' &&\n s instanceof EventEmitter &&\n typeof s.pipe === 'function' &&\n // node core Writable streams have a pipe() method, but it throws\n s.pipe !== Stream.Writable.prototype.pipe;\n/**\n * Return true if the argument is a valid {@link Minipass.Writable}\n */\nexport const isWritable = (s) => !!s &&\n typeof s === 'object' &&\n s instanceof EventEmitter &&\n typeof s.write === 'function' &&\n typeof s.end === 'function';\nconst EOF = Symbol('EOF');\nconst MAYBE_EMIT_END = Symbol('maybeEmitEnd');\nconst EMITTED_END = Symbol('emittedEnd');\nconst EMITTING_END = Symbol('emittingEnd');\nconst EMITTED_ERROR = Symbol('emittedError');\nconst CLOSED = Symbol('closed');\nconst READ = Symbol('read');\nconst FLUSH = Symbol('flush');\nconst FLUSHCHUNK = Symbol('flushChunk');\nconst ENCODING = Symbol('encoding');\nconst DECODER = Symbol('decoder');\nconst FLOWING = Symbol('flowing');\nconst PAUSED = Symbol('paused');\nconst RESUME = Symbol('resume');\nconst BUFFER = Symbol('buffer');\nconst PIPES = Symbol('pipes');\nconst BUFFERLENGTH = Symbol('bufferLength');\nconst BUFFERPUSH = Symbol('bufferPush');\nconst BUFFERSHIFT = Symbol('bufferShift');\nconst OBJECTMODE = Symbol('objectMode');\n// internal event when stream is destroyed\nconst DESTROYED = Symbol('destroyed');\n// internal event when stream has an error\nconst ERROR = Symbol('error');\nconst EMITDATA = Symbol('emitData');\nconst EMITEND = Symbol('emitEnd');\nconst EMITEND2 = Symbol('emitEnd2');\nconst ASYNC = Symbol('async');\nconst ABORT = Symbol('abort');\nconst ABORTED = Symbol('aborted');\nconst SIGNAL = Symbol('signal');\nconst DATALISTENERS = Symbol('dataListeners');\nconst DISCARDED = Symbol('discarded');\nconst defer = (fn) => Promise.resolve().then(fn);\nconst nodefer = (fn) => fn();\nconst isEndish = (ev) => ev === 'end' || ev === 'finish' || ev === 'prefinish';\nconst isArrayBufferLike = (b) => b instanceof ArrayBuffer ||\n (!!b &&\n typeof b === 'object' &&\n b.constructor &&\n b.constructor.name === 'ArrayBuffer' &&\n b.byteLength >= 0);\nconst isArrayBufferView = (b) => !Buffer.isBuffer(b) && ArrayBuffer.isView(b);\n/**\n * Internal class representing a pipe to a destination stream.\n *\n * @internal\n */\nclass Pipe {\n src;\n dest;\n opts;\n ondrain;\n constructor(src, dest, opts) {\n this.src = src;\n this.dest = dest;\n this.opts = opts;\n this.ondrain = () => src[RESUME]();\n this.dest.on('drain', this.ondrain);\n }\n unpipe() {\n this.dest.removeListener('drain', this.ondrain);\n }\n // only here for the prototype\n /* c8 ignore start */\n proxyErrors(_er) { }\n /* c8 ignore stop */\n end() {\n this.unpipe();\n if (this.opts.end)\n this.dest.end();\n }\n}\n/**\n * Internal class representing a pipe to a destination stream where\n * errors are proxied.\n *\n * @internal\n */\nclass PipeProxyErrors extends Pipe {\n unpipe() {\n this.src.removeListener('error', this.proxyErrors);\n super.unpipe();\n }\n constructor(src, dest, opts) {\n super(src, dest, opts);\n this.proxyErrors = er => dest.emit('error', er);\n src.on('error', this.proxyErrors);\n }\n}\nconst isObjectModeOptions = (o) => !!o.objectMode;\nconst isEncodingOptions = (o) => !o.objectMode && !!o.encoding && o.encoding !== 'buffer';\n/**\n * Main export, the Minipass class\n *\n * `RType` is the type of data emitted, defaults to Buffer\n *\n * `WType` is the type of data to be written, if RType is buffer or string,\n * then any {@link Minipass.ContiguousData} is allowed.\n *\n * `Events` is the set of event handler signatures that this object\n * will emit, see {@link Minipass.Events}\n */\nexport class Minipass extends EventEmitter {\n [FLOWING] = false;\n [PAUSED] = false;\n [PIPES] = [];\n [BUFFER] = [];\n [OBJECTMODE];\n [ENCODING];\n [ASYNC];\n [DECODER];\n [EOF] = false;\n [EMITTED_END] = false;\n [EMITTING_END] = false;\n [CLOSED] = false;\n [EMITTED_ERROR] = null;\n [BUFFERLENGTH] = 0;\n [DESTROYED] = false;\n [SIGNAL];\n [ABORTED] = false;\n [DATALISTENERS] = 0;\n [DISCARDED] = false;\n /**\n * true if the stream can be written\n */\n writable = true;\n /**\n * true if the stream can be read\n */\n readable = true;\n /**\n * If `RType` is Buffer, then options do not need to be provided.\n * Otherwise, an options object must be provided to specify either\n * {@link Minipass.SharedOptions.objectMode} or\n * {@link Minipass.SharedOptions.encoding}, as appropriate.\n */\n constructor(...args) {\n const options = (args[0] ||\n {});\n super();\n if (options.objectMode && typeof options.encoding === 'string') {\n throw new TypeError('Encoding and objectMode may not be used together');\n }\n if (isObjectModeOptions(options)) {\n this[OBJECTMODE] = true;\n this[ENCODING] = null;\n }\n else if (isEncodingOptions(options)) {\n this[ENCODING] = options.encoding;\n this[OBJECTMODE] = false;\n }\n else {\n this[OBJECTMODE] = false;\n this[ENCODING] = null;\n }\n this[ASYNC] = !!options.async;\n this[DECODER] = this[ENCODING]\n ? new StringDecoder(this[ENCODING])\n : null;\n //@ts-ignore - private option for debugging and testing\n if (options && options.debugExposeBuffer === true) {\n Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] });\n }\n //@ts-ignore - private option for debugging and testing\n if (options && options.debugExposePipes === true) {\n Object.defineProperty(this, 'pipes', { get: () => this[PIPES] });\n }\n const { signal } = options;\n if (signal) {\n this[SIGNAL] = signal;\n if (signal.aborted) {\n this[ABORT]();\n }\n else {\n signal.addEventListener('abort', () => this[ABORT]());\n }\n }\n }\n /**\n * The amount of data stored in the buffer waiting to be read.\n *\n * For Buffer strings, this will be the total byte length.\n * For string encoding streams, this will be the string character length,\n * according to JavaScript's `string.length` logic.\n * For objectMode streams, this is a count of the items waiting to be\n * emitted.\n */\n get bufferLength() {\n return this[BUFFERLENGTH];\n }\n /**\n * The `BufferEncoding` currently in use, or `null`\n */\n get encoding() {\n return this[ENCODING];\n }\n /**\n * @deprecated - This is a read only property\n */\n set encoding(_enc) {\n throw new Error('Encoding must be set at instantiation time');\n }\n /**\n * @deprecated - Encoding may only be set at instantiation time\n */\n setEncoding(_enc) {\n throw new Error('Encoding must be set at instantiation time');\n }\n /**\n * True if this is an objectMode stream\n */\n get objectMode() {\n return this[OBJECTMODE];\n }\n /**\n * @deprecated - This is a read-only property\n */\n set objectMode(_om) {\n throw new Error('objectMode must be set at instantiation time');\n }\n /**\n * true if this is an async stream\n */\n get ['async']() {\n return this[ASYNC];\n }\n /**\n * Set to true to make this stream async.\n *\n * Once set, it cannot be unset, as this would potentially cause incorrect\n * behavior. Ie, a sync stream can be made async, but an async stream\n * cannot be safely made sync.\n */\n set ['async'](a) {\n this[ASYNC] = this[ASYNC] || !!a;\n }\n // drop everything and get out of the flow completely\n [ABORT]() {\n this[ABORTED] = true;\n this.emit('abort', this[SIGNAL]?.reason);\n this.destroy(this[SIGNAL]?.reason);\n }\n /**\n * True if the stream has been aborted.\n */\n get aborted() {\n return this[ABORTED];\n }\n /**\n * No-op setter. Stream aborted status is set via the AbortSignal provided\n * in the constructor options.\n */\n set aborted(_) { }\n write(chunk, encoding, cb) {\n if (this[ABORTED])\n return false;\n if (this[EOF])\n throw new Error('write after end');\n if (this[DESTROYED]) {\n this.emit('error', Object.assign(new Error('Cannot call write after a stream was destroyed'), { code: 'ERR_STREAM_DESTROYED' }));\n return true;\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = 'utf8';\n }\n if (!encoding)\n encoding = 'utf8';\n const fn = this[ASYNC] ? defer : nodefer;\n // convert array buffers and typed array views into buffers\n // at some point in the future, we may want to do the opposite!\n // leave strings and buffers as-is\n // anything is only allowed if in object mode, so throw\n if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {\n if (isArrayBufferView(chunk)) {\n //@ts-ignore - sinful unsafe type changing\n chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);\n }\n else if (isArrayBufferLike(chunk)) {\n //@ts-ignore - sinful unsafe type changing\n chunk = Buffer.from(chunk);\n }\n else if (typeof chunk !== 'string') {\n throw new Error('Non-contiguous data written to non-objectMode stream');\n }\n }\n // handle object mode up front, since it's simpler\n // this yields better performance, fewer checks later.\n if (this[OBJECTMODE]) {\n // maybe impossible?\n /* c8 ignore start */\n if (this[FLOWING] && this[BUFFERLENGTH] !== 0)\n this[FLUSH](true);\n /* c8 ignore stop */\n if (this[FLOWING])\n this.emit('data', chunk);\n else\n this[BUFFERPUSH](chunk);\n if (this[BUFFERLENGTH] !== 0)\n this.emit('readable');\n if (cb)\n fn(cb);\n return this[FLOWING];\n }\n // at this point the chunk is a buffer or string\n // don't buffer it up or send it to the decoder\n if (!chunk.length) {\n if (this[BUFFERLENGTH] !== 0)\n this.emit('readable');\n if (cb)\n fn(cb);\n return this[FLOWING];\n }\n // fast-path writing strings of same encoding to a stream with\n // an empty buffer, skipping the buffer/decoder dance\n if (typeof chunk === 'string' &&\n // unless it is a string already ready for us to use\n !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)) {\n //@ts-ignore - sinful unsafe type change\n chunk = Buffer.from(chunk, encoding);\n }\n if (Buffer.isBuffer(chunk) && this[ENCODING]) {\n //@ts-ignore - sinful unsafe type change\n chunk = this[DECODER].write(chunk);\n }\n // Note: flushing CAN potentially switch us into not-flowing mode\n if (this[FLOWING] && this[BUFFERLENGTH] !== 0)\n this[FLUSH](true);\n if (this[FLOWING])\n this.emit('data', chunk);\n else\n this[BUFFERPUSH](chunk);\n if (this[BUFFERLENGTH] !== 0)\n this.emit('readable');\n if (cb)\n fn(cb);\n return this[FLOWING];\n }\n /**\n * Low-level explicit read method.\n *\n * In objectMode, the argument is ignored, and one item is returned if\n * available.\n *\n * `n` is the number of bytes (or in the case of encoding streams,\n * characters) to consume. If `n` is not provided, then the entire buffer\n * is returned, or `null` is returned if no data is available.\n *\n * If `n` is greater that the amount of data in the internal buffer,\n * then `null` is returned.\n */\n read(n) {\n if (this[DESTROYED])\n return null;\n this[DISCARDED] = false;\n if (this[BUFFERLENGTH] === 0 ||\n n === 0 ||\n (n && n > this[BUFFERLENGTH])) {\n this[MAYBE_EMIT_END]();\n return null;\n }\n if (this[OBJECTMODE])\n n = null;\n if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {\n // not object mode, so if we have an encoding, then RType is string\n // otherwise, must be Buffer\n this[BUFFER] = [\n (this[ENCODING]\n ? this[BUFFER].join('')\n : Buffer.concat(this[BUFFER], this[BUFFERLENGTH])),\n ];\n }\n const ret = this[READ](n || null, this[BUFFER][0]);\n this[MAYBE_EMIT_END]();\n return ret;\n }\n [READ](n, chunk) {\n if (this[OBJECTMODE])\n this[BUFFERSHIFT]();\n else {\n const c = chunk;\n if (n === c.length || n === null)\n this[BUFFERSHIFT]();\n else if (typeof c === 'string') {\n this[BUFFER][0] = c.slice(n);\n chunk = c.slice(0, n);\n this[BUFFERLENGTH] -= n;\n }\n else {\n this[BUFFER][0] = c.subarray(n);\n chunk = c.subarray(0, n);\n this[BUFFERLENGTH] -= n;\n }\n }\n this.emit('data', chunk);\n if (!this[BUFFER].length && !this[EOF])\n this.emit('drain');\n return chunk;\n }\n end(chunk, encoding, cb) {\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = undefined;\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = 'utf8';\n }\n if (chunk !== undefined)\n this.write(chunk, encoding);\n if (cb)\n this.once('end', cb);\n this[EOF] = true;\n this.writable = false;\n // if we haven't written anything, then go ahead and emit,\n // even if we're not reading.\n // we'll re-emit if a new 'end' listener is added anyway.\n // This makes MP more suitable to write-only use cases.\n if (this[FLOWING] || !this[PAUSED])\n this[MAYBE_EMIT_END]();\n return this;\n }\n // don't let the internal resume be overwritten\n [RESUME]() {\n if (this[DESTROYED])\n return;\n if (!this[DATALISTENERS] && !this[PIPES].length) {\n this[DISCARDED] = true;\n }\n this[PAUSED] = false;\n this[FLOWING] = true;\n this.emit('resume');\n if (this[BUFFER].length)\n this[FLUSH]();\n else if (this[EOF])\n this[MAYBE_EMIT_END]();\n else\n this.emit('drain');\n }\n /**\n * Resume the stream if it is currently in a paused state\n *\n * If called when there are no pipe destinations or `data` event listeners,\n * this will place the stream in a \"discarded\" state, where all data will\n * be thrown away. The discarded state is removed if a pipe destination or\n * data handler is added, if pause() is called, or if any synchronous or\n * asynchronous iteration is started.\n */\n resume() {\n return this[RESUME]();\n }\n /**\n * Pause the stream\n */\n pause() {\n this[FLOWING] = false;\n this[PAUSED] = true;\n this[DISCARDED] = false;\n }\n /**\n * true if the stream has been forcibly destroyed\n */\n get destroyed() {\n return this[DESTROYED];\n }\n /**\n * true if the stream is currently in a flowing state, meaning that\n * any writes will be immediately emitted.\n */\n get flowing() {\n return this[FLOWING];\n }\n /**\n * true if the stream is currently in a paused state\n */\n get paused() {\n return this[PAUSED];\n }\n [BUFFERPUSH](chunk) {\n if (this[OBJECTMODE])\n this[BUFFERLENGTH] += 1;\n else\n this[BUFFERLENGTH] += chunk.length;\n this[BUFFER].push(chunk);\n }\n [BUFFERSHIFT]() {\n if (this[OBJECTMODE])\n this[BUFFERLENGTH] -= 1;\n else\n this[BUFFERLENGTH] -= this[BUFFER][0].length;\n return this[BUFFER].shift();\n }\n [FLUSH](noDrain = false) {\n do { } while (this[FLUSHCHUNK](this[BUFFERSHIFT]()) &&\n this[BUFFER].length);\n if (!noDrain && !this[BUFFER].length && !this[EOF])\n this.emit('drain');\n }\n [FLUSHCHUNK](chunk) {\n this.emit('data', chunk);\n return this[FLOWING];\n }\n /**\n * Pipe all data emitted by this stream into the destination provided.\n *\n * Triggers the flow of data.\n */\n pipe(dest, opts) {\n if (this[DESTROYED])\n return dest;\n this[DISCARDED] = false;\n const ended = this[EMITTED_END];\n opts = opts || {};\n if (dest === proc.stdout || dest === proc.stderr)\n opts.end = false;\n else\n opts.end = opts.end !== false;\n opts.proxyErrors = !!opts.proxyErrors;\n // piping an ended stream ends immediately\n if (ended) {\n if (opts.end)\n dest.end();\n }\n else {\n // \"as\" here just ignores the WType, which pipes don't care about,\n // since they're only consuming from us, and writing to the dest\n this[PIPES].push(!opts.proxyErrors\n ? new Pipe(this, dest, opts)\n : new PipeProxyErrors(this, dest, opts));\n if (this[ASYNC])\n defer(() => this[RESUME]());\n else\n this[RESUME]();\n }\n return dest;\n }\n /**\n * Fully unhook a piped destination stream.\n *\n * If the destination stream was the only consumer of this stream (ie,\n * there are no other piped destinations or `'data'` event listeners)\n * then the flow of data will stop until there is another consumer or\n * {@link Minipass#resume} is explicitly called.\n */\n unpipe(dest) {\n const p = this[PIPES].find(p => p.dest === dest);\n if (p) {\n if (this[PIPES].length === 1) {\n if (this[FLOWING] && this[DATALISTENERS] === 0) {\n this[FLOWING] = false;\n }\n this[PIPES] = [];\n }\n else\n this[PIPES].splice(this[PIPES].indexOf(p), 1);\n p.unpipe();\n }\n }\n /**\n * Alias for {@link Minipass#on}\n */\n addListener(ev, handler) {\n return this.on(ev, handler);\n }\n /**\n * Mostly identical to `EventEmitter.on`, with the following\n * behavior differences to prevent data loss and unnecessary hangs:\n *\n * - Adding a 'data' event handler will trigger the flow of data\n *\n * - Adding a 'readable' event handler when there is data waiting to be read\n * will cause 'readable' to be emitted immediately.\n *\n * - Adding an 'endish' event handler ('end', 'finish', etc.) which has\n * already passed will cause the event to be emitted immediately and all\n * handlers removed.\n *\n * - Adding an 'error' event handler after an error has been emitted will\n * cause the event to be re-emitted immediately with the error previously\n * raised.\n */\n on(ev, handler) {\n const ret = super.on(ev, handler);\n if (ev === 'data') {\n this[DISCARDED] = false;\n this[DATALISTENERS]++;\n if (!this[PIPES].length && !this[FLOWING]) {\n this[RESUME]();\n }\n }\n else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) {\n super.emit('readable');\n }\n else if (isEndish(ev) && this[EMITTED_END]) {\n super.emit(ev);\n this.removeAllListeners(ev);\n }\n else if (ev === 'error' && this[EMITTED_ERROR]) {\n const h = handler;\n if (this[ASYNC])\n defer(() => h.call(this, this[EMITTED_ERROR]));\n else\n h.call(this, this[EMITTED_ERROR]);\n }\n return ret;\n }\n /**\n * Alias for {@link Minipass#off}\n */\n removeListener(ev, handler) {\n return this.off(ev, handler);\n }\n /**\n * Mostly identical to `EventEmitter.off`\n *\n * If a 'data' event handler is removed, and it was the last consumer\n * (ie, there are no pipe destinations or other 'data' event listeners),\n * then the flow of data will stop until there is another consumer or\n * {@link Minipass#resume} is explicitly called.\n */\n off(ev, handler) {\n const ret = super.off(ev, handler);\n // if we previously had listeners, and now we don't, and we don't\n // have any pipes, then stop the flow, unless it's been explicitly\n // put in a discarded flowing state via stream.resume().\n if (ev === 'data') {\n this[DATALISTENERS] = this.listeners('data').length;\n if (this[DATALISTENERS] === 0 &&\n !this[DISCARDED] &&\n !this[PIPES].length) {\n this[FLOWING] = false;\n }\n }\n return ret;\n }\n /**\n * Mostly identical to `EventEmitter.removeAllListeners`\n *\n * If all 'data' event handlers are removed, and they were the last consumer\n * (ie, there are no pipe destinations), then the flow of data will stop\n * until there is another consumer or {@link Minipass#resume} is explicitly\n * called.\n */\n removeAllListeners(ev) {\n const ret = super.removeAllListeners(ev);\n if (ev === 'data' || ev === undefined) {\n this[DATALISTENERS] = 0;\n if (!this[DISCARDED] && !this[PIPES].length) {\n this[FLOWING] = false;\n }\n }\n return ret;\n }\n /**\n * true if the 'end' event has been emitted\n */\n get emittedEnd() {\n return this[EMITTED_END];\n }\n [MAYBE_EMIT_END]() {\n if (!this[EMITTING_END] &&\n !this[EMITTED_END] &&\n !this[DESTROYED] &&\n this[BUFFER].length === 0 &&\n this[EOF]) {\n this[EMITTING_END] = true;\n this.emit('end');\n this.emit('prefinish');\n this.emit('finish');\n if (this[CLOSED])\n this.emit('close');\n this[EMITTING_END] = false;\n }\n }\n /**\n * Mostly identical to `EventEmitter.emit`, with the following\n * behavior differences to prevent data loss and unnecessary hangs:\n *\n * If the stream has been destroyed, and the event is something other\n * than 'close' or 'error', then `false` is returned and no handlers\n * are called.\n *\n * If the event is 'end', and has already been emitted, then the event\n * is ignored. If the stream is in a paused or non-flowing state, then\n * the event will be deferred until data flow resumes. If the stream is\n * async, then handlers will be called on the next tick rather than\n * immediately.\n *\n * If the event is 'close', and 'end' has not yet been emitted, then\n * the event will be deferred until after 'end' is emitted.\n *\n * If the event is 'error', and an AbortSignal was provided for the stream,\n * and there are no listeners, then the event is ignored, matching the\n * behavior of node core streams in the presense of an AbortSignal.\n *\n * If the event is 'finish' or 'prefinish', then all listeners will be\n * removed after emitting the event, to prevent double-firing.\n */\n emit(ev, ...args) {\n const data = args[0];\n // error and close are only events allowed after calling destroy()\n if (ev !== 'error' &&\n ev !== 'close' &&\n ev !== DESTROYED &&\n this[DESTROYED]) {\n return false;\n }\n else if (ev === 'data') {\n return !this[OBJECTMODE] && !data\n ? false\n : this[ASYNC]\n ? (defer(() => this[EMITDATA](data)), true)\n : this[EMITDATA](data);\n }\n else if (ev === 'end') {\n return this[EMITEND]();\n }\n else if (ev === 'close') {\n this[CLOSED] = true;\n // don't emit close before 'end' and 'finish'\n if (!this[EMITTED_END] && !this[DESTROYED])\n return false;\n const ret = super.emit('close');\n this.removeAllListeners('close');\n return ret;\n }\n else if (ev === 'error') {\n this[EMITTED_ERROR] = data;\n super.emit(ERROR, data);\n const ret = !this[SIGNAL] || this.listeners('error').length\n ? super.emit('error', data)\n : false;\n this[MAYBE_EMIT_END]();\n return ret;\n }\n else if (ev === 'resume') {\n const ret = super.emit('resume');\n this[MAYBE_EMIT_END]();\n return ret;\n }\n else if (ev === 'finish' || ev === 'prefinish') {\n const ret = super.emit(ev);\n this.removeAllListeners(ev);\n return ret;\n }\n // Some other unknown event\n const ret = super.emit(ev, ...args);\n this[MAYBE_EMIT_END]();\n return ret;\n }\n [EMITDATA](data) {\n for (const p of this[PIPES]) {\n if (p.dest.write(data) === false)\n this.pause();\n }\n const ret = this[DISCARDED] ? false : super.emit('data', data);\n this[MAYBE_EMIT_END]();\n return ret;\n }\n [EMITEND]() {\n if (this[EMITTED_END])\n return false;\n this[EMITTED_END] = true;\n this.readable = false;\n return this[ASYNC]\n ? (defer(() => this[EMITEND2]()), true)\n : this[EMITEND2]();\n }\n [EMITEND2]() {\n if (this[DECODER]) {\n const data = this[DECODER].end();\n if (data) {\n for (const p of this[PIPES]) {\n p.dest.write(data);\n }\n if (!this[DISCARDED])\n super.emit('data', data);\n }\n }\n for (const p of this[PIPES]) {\n p.end();\n }\n const ret = super.emit('end');\n this.removeAllListeners('end');\n return ret;\n }\n /**\n * Return a Promise that resolves to an array of all emitted data once\n * the stream ends.\n */\n async collect() {\n const buf = Object.assign([], {\n dataLength: 0,\n });\n if (!this[OBJECTMODE])\n buf.dataLength = 0;\n // set the promise first, in case an error is raised\n // by triggering the flow here.\n const p = this.promise();\n this.on('data', c => {\n buf.push(c);\n if (!this[OBJECTMODE])\n buf.dataLength += c.length;\n });\n await p;\n return buf;\n }\n /**\n * Return a Promise that resolves to the concatenation of all emitted data\n * once the stream ends.\n *\n * Not allowed on objectMode streams.\n */\n async concat() {\n if (this[OBJECTMODE]) {\n throw new Error('cannot concat in objectMode');\n }\n const buf = await this.collect();\n return (this[ENCODING]\n ? buf.join('')\n : Buffer.concat(buf, buf.dataLength));\n }\n /**\n * Return a void Promise that resolves once the stream ends.\n */\n async promise() {\n return new Promise((resolve, reject) => {\n this.on(DESTROYED, () => reject(new Error('stream destroyed')));\n this.on('error', er => reject(er));\n this.on('end', () => resolve());\n });\n }\n /**\n * Asynchronous `for await of` iteration.\n *\n * This will continue emitting all chunks until the stream terminates.\n */\n [Symbol.asyncIterator]() {\n // set this up front, in case the consumer doesn't call next()\n // right away.\n this[DISCARDED] = false;\n let stopped = false;\n const stop = async () => {\n this.pause();\n stopped = true;\n return { value: undefined, done: true };\n };\n const next = () => {\n if (stopped)\n return stop();\n const res = this.read();\n if (res !== null)\n return Promise.resolve({ done: false, value: res });\n if (this[EOF])\n return stop();\n let resolve;\n let reject;\n const onerr = (er) => {\n this.off('data', ondata);\n this.off('end', onend);\n this.off(DESTROYED, ondestroy);\n stop();\n reject(er);\n };\n const ondata = (value) => {\n this.off('error', onerr);\n this.off('end', onend);\n this.off(DESTROYED, ondestroy);\n this.pause();\n resolve({ value, done: !!this[EOF] });\n };\n const onend = () => {\n this.off('error', onerr);\n this.off('data', ondata);\n this.off(DESTROYED, ondestroy);\n stop();\n resolve({ done: true, value: undefined });\n };\n const ondestroy = () => onerr(new Error('stream destroyed'));\n return new Promise((res, rej) => {\n reject = rej;\n resolve = res;\n this.once(DESTROYED, ondestroy);\n this.once('error', onerr);\n this.once('end', onend);\n this.once('data', ondata);\n });\n };\n return {\n next,\n throw: stop,\n return: stop,\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n }\n /**\n * Synchronous `for of` iteration.\n *\n * The iteration will terminate when the internal buffer runs out, even\n * if the stream has not yet terminated.\n */\n [Symbol.iterator]() {\n // set this up front, in case the consumer doesn't call next()\n // right away.\n this[DISCARDED] = false;\n let stopped = false;\n const stop = () => {\n this.pause();\n this.off(ERROR, stop);\n this.off(DESTROYED, stop);\n this.off('end', stop);\n stopped = true;\n return { done: true, value: undefined };\n };\n const next = () => {\n if (stopped)\n return stop();\n const value = this.read();\n return value === null ? stop() : { done: false, value };\n };\n this.once('end', stop);\n this.once(ERROR, stop);\n this.once(DESTROYED, stop);\n return {\n next,\n throw: stop,\n return: stop,\n [Symbol.iterator]() {\n return this;\n },\n };\n }\n /**\n * Destroy a stream, preventing it from being used for any further purpose.\n *\n * If the stream has a `close()` method, then it will be called on\n * destruction.\n *\n * After destruction, any attempt to write data, read data, or emit most\n * events will be ignored.\n *\n * If an error argument is provided, then it will be emitted in an\n * 'error' event.\n */\n destroy(er) {\n if (this[DESTROYED]) {\n if (er)\n this.emit('error', er);\n else\n this.emit(DESTROYED);\n return this;\n }\n this[DESTROYED] = true;\n this[DISCARDED] = true;\n // throw away all buffered data, it's never coming out\n this[BUFFER].length = 0;\n this[BUFFERLENGTH] = 0;\n const wc = this;\n if (typeof wc.close === 'function' && !this[CLOSED])\n wc.close();\n if (er)\n this.emit('error', er);\n // if no error to emit, still reject pending promises\n else\n this.emit(DESTROYED);\n return this;\n }\n /**\n * Alias for {@link isStream}\n *\n * Former export location, maintained for backwards compatibility.\n *\n * @deprecated\n */\n static get isStream() {\n return isStream;\n }\n}\n//# sourceMappingURL=index.js.map","import EE from 'events';\nimport fs from 'fs';\nimport { Minipass } from 'minipass';\nconst writev = fs.writev;\nconst _autoClose = Symbol('_autoClose');\nconst _close = Symbol('_close');\nconst _ended = Symbol('_ended');\nconst _fd = Symbol('_fd');\nconst _finished = Symbol('_finished');\nconst _flags = Symbol('_flags');\nconst _flush = Symbol('_flush');\nconst _handleChunk = Symbol('_handleChunk');\nconst _makeBuf = Symbol('_makeBuf');\nconst _mode = Symbol('_mode');\nconst _needDrain = Symbol('_needDrain');\nconst _onerror = Symbol('_onerror');\nconst _onopen = Symbol('_onopen');\nconst _onread = Symbol('_onread');\nconst _onwrite = Symbol('_onwrite');\nconst _open = Symbol('_open');\nconst _path = Symbol('_path');\nconst _pos = Symbol('_pos');\nconst _queue = Symbol('_queue');\nconst _read = Symbol('_read');\nconst _readSize = Symbol('_readSize');\nconst _reading = Symbol('_reading');\nconst _remain = Symbol('_remain');\nconst _size = Symbol('_size');\nconst _write = Symbol('_write');\nconst _writing = Symbol('_writing');\nconst _defaultFlag = Symbol('_defaultFlag');\nconst _errored = Symbol('_errored');\nexport class ReadStream extends Minipass {\n [_errored] = false;\n [_fd];\n [_path];\n [_readSize];\n [_reading] = false;\n [_size];\n [_remain];\n [_autoClose];\n constructor(path, opt) {\n opt = opt || {};\n super(opt);\n this.readable = true;\n this.writable = false;\n if (typeof path !== 'string') {\n throw new TypeError('path must be a string');\n }\n this[_errored] = false;\n this[_fd] = typeof opt.fd === 'number' ? opt.fd : undefined;\n this[_path] = path;\n this[_readSize] = opt.readSize || 16 * 1024 * 1024;\n this[_reading] = false;\n this[_size] = typeof opt.size === 'number' ? opt.size : Infinity;\n this[_remain] = this[_size];\n this[_autoClose] =\n typeof opt.autoClose === 'boolean' ? opt.autoClose : true;\n if (typeof this[_fd] === 'number') {\n this[_read]();\n }\n else {\n this[_open]();\n }\n }\n get fd() {\n return this[_fd];\n }\n get path() {\n return this[_path];\n }\n //@ts-ignore\n write() {\n throw new TypeError('this is a readable stream');\n }\n //@ts-ignore\n end() {\n throw new TypeError('this is a readable stream');\n }\n [_open]() {\n fs.open(this[_path], 'r', (er, fd) => this[_onopen](er, fd));\n }\n [_onopen](er, fd) {\n if (er) {\n this[_onerror](er);\n }\n else {\n this[_fd] = fd;\n this.emit('open', fd);\n this[_read]();\n }\n }\n [_makeBuf]() {\n return Buffer.allocUnsafe(Math.min(this[_readSize], this[_remain]));\n }\n [_read]() {\n if (!this[_reading]) {\n this[_reading] = true;\n const buf = this[_makeBuf]();\n /* c8 ignore start */\n if (buf.length === 0) {\n return process.nextTick(() => this[_onread](null, 0, buf));\n }\n /* c8 ignore stop */\n fs.read(this[_fd], buf, 0, buf.length, null, (er, br, b) => this[_onread](er, br, b));\n }\n }\n [_onread](er, br, buf) {\n this[_reading] = false;\n if (er) {\n this[_onerror](er);\n }\n else if (this[_handleChunk](br, buf)) {\n this[_read]();\n }\n }\n [_close]() {\n if (this[_autoClose] && typeof this[_fd] === 'number') {\n const fd = this[_fd];\n this[_fd] = undefined;\n fs.close(fd, er => er ? this.emit('error', er) : this.emit('close'));\n }\n }\n [_onerror](er) {\n this[_reading] = true;\n this[_close]();\n this.emit('error', er);\n }\n [_handleChunk](br, buf) {\n let ret = false;\n // no effect if infinite\n this[_remain] -= br;\n if (br > 0) {\n ret = super.write(br < buf.length ? buf.subarray(0, br) : buf);\n }\n if (br === 0 || this[_remain] <= 0) {\n ret = false;\n this[_close]();\n super.end();\n }\n return ret;\n }\n emit(ev, ...args) {\n switch (ev) {\n case 'prefinish':\n case 'finish':\n return false;\n case 'drain':\n if (typeof this[_fd] === 'number') {\n this[_read]();\n }\n return false;\n case 'error':\n if (this[_errored]) {\n return false;\n }\n this[_errored] = true;\n return super.emit(ev, ...args);\n default:\n return super.emit(ev, ...args);\n }\n }\n}\nexport class ReadStreamSync extends ReadStream {\n [_open]() {\n let threw = true;\n try {\n this[_onopen](null, fs.openSync(this[_path], 'r'));\n threw = false;\n }\n finally {\n if (threw) {\n this[_close]();\n }\n }\n }\n [_read]() {\n let threw = true;\n try {\n if (!this[_reading]) {\n this[_reading] = true;\n do {\n const buf = this[_makeBuf]();\n /* c8 ignore start */\n const br = buf.length === 0\n ? 0\n : fs.readSync(this[_fd], buf, 0, buf.length, null);\n /* c8 ignore stop */\n if (!this[_handleChunk](br, buf)) {\n break;\n }\n } while (true);\n this[_reading] = false;\n }\n threw = false;\n }\n finally {\n if (threw) {\n this[_close]();\n }\n }\n }\n [_close]() {\n if (this[_autoClose] && typeof this[_fd] === 'number') {\n const fd = this[_fd];\n this[_fd] = undefined;\n fs.closeSync(fd);\n this.emit('close');\n }\n }\n}\nexport class WriteStream extends EE {\n readable = false;\n writable = true;\n [_errored] = false;\n [_writing] = false;\n [_ended] = false;\n [_queue] = [];\n [_needDrain] = false;\n [_path];\n [_mode];\n [_autoClose];\n [_fd];\n [_defaultFlag];\n [_flags];\n [_finished] = false;\n [_pos];\n constructor(path, opt) {\n opt = opt || {};\n super(opt);\n this[_path] = path;\n this[_fd] = typeof opt.fd === 'number' ? opt.fd : undefined;\n this[_mode] = opt.mode === undefined ? 0o666 : opt.mode;\n this[_pos] = typeof opt.start === 'number' ? opt.start : undefined;\n this[_autoClose] =\n typeof opt.autoClose === 'boolean' ? opt.autoClose : true;\n // truncating makes no sense when writing into the middle\n const defaultFlag = this[_pos] !== undefined ? 'r+' : 'w';\n this[_defaultFlag] = opt.flags === undefined;\n this[_flags] = opt.flags === undefined ? defaultFlag : opt.flags;\n if (this[_fd] === undefined) {\n this[_open]();\n }\n }\n emit(ev, ...args) {\n if (ev === 'error') {\n if (this[_errored]) {\n return false;\n }\n this[_errored] = true;\n }\n return super.emit(ev, ...args);\n }\n get fd() {\n return this[_fd];\n }\n get path() {\n return this[_path];\n }\n [_onerror](er) {\n this[_close]();\n this[_writing] = true;\n this.emit('error', er);\n }\n [_open]() {\n fs.open(this[_path], this[_flags], this[_mode], (er, fd) => this[_onopen](er, fd));\n }\n [_onopen](er, fd) {\n if (this[_defaultFlag] &&\n this[_flags] === 'r+' &&\n er &&\n er.code === 'ENOENT') {\n this[_flags] = 'w';\n this[_open]();\n }\n else if (er) {\n this[_onerror](er);\n }\n else {\n this[_fd] = fd;\n this.emit('open', fd);\n if (!this[_writing]) {\n this[_flush]();\n }\n }\n }\n end(buf, enc) {\n if (buf) {\n //@ts-ignore\n this.write(buf, enc);\n }\n this[_ended] = true;\n // synthetic after-write logic, where drain/finish live\n if (!this[_writing] &&\n !this[_queue].length &&\n typeof this[_fd] === 'number') {\n this[_onwrite](null, 0);\n }\n return this;\n }\n write(buf, enc) {\n if (typeof buf === 'string') {\n buf = Buffer.from(buf, enc);\n }\n if (this[_ended]) {\n this.emit('error', new Error('write() after end()'));\n return false;\n }\n if (this[_fd] === undefined || this[_writing] || this[_queue].length) {\n this[_queue].push(buf);\n this[_needDrain] = true;\n return false;\n }\n this[_writing] = true;\n this[_write](buf);\n return true;\n }\n [_write](buf) {\n fs.write(this[_fd], buf, 0, buf.length, this[_pos], (er, bw) => this[_onwrite](er, bw));\n }\n [_onwrite](er, bw) {\n if (er) {\n this[_onerror](er);\n }\n else {\n if (this[_pos] !== undefined && typeof bw === 'number') {\n this[_pos] += bw;\n }\n if (this[_queue].length) {\n this[_flush]();\n }\n else {\n this[_writing] = false;\n if (this[_ended] && !this[_finished]) {\n this[_finished] = true;\n this[_close]();\n this.emit('finish');\n }\n else if (this[_needDrain]) {\n this[_needDrain] = false;\n this.emit('drain');\n }\n }\n }\n }\n [_flush]() {\n if (this[_queue].length === 0) {\n if (this[_ended]) {\n this[_onwrite](null, 0);\n }\n }\n else if (this[_queue].length === 1) {\n this[_write](this[_queue].pop());\n }\n else {\n const iovec = this[_queue];\n this[_queue] = [];\n writev(this[_fd], iovec, this[_pos], (er, bw) => this[_onwrite](er, bw));\n }\n }\n [_close]() {\n if (this[_autoClose] && typeof this[_fd] === 'number') {\n const fd = this[_fd];\n this[_fd] = undefined;\n fs.close(fd, er => er ? this.emit('error', er) : this.emit('close'));\n }\n }\n}\nexport class WriteStreamSync extends WriteStream {\n [_open]() {\n let fd;\n // only wrap in a try{} block if we know we'll retry, to avoid\n // the rethrow obscuring the error's source frame in most cases.\n if (this[_defaultFlag] && this[_flags] === 'r+') {\n try {\n fd = fs.openSync(this[_path], this[_flags], this[_mode]);\n }\n catch (er) {\n if (er?.code === 'ENOENT') {\n this[_flags] = 'w';\n return this[_open]();\n }\n else {\n throw er;\n }\n }\n }\n else {\n fd = fs.openSync(this[_path], this[_flags], this[_mode]);\n }\n this[_onopen](null, fd);\n }\n [_close]() {\n if (this[_autoClose] && typeof this[_fd] === 'number') {\n const fd = this[_fd];\n this[_fd] = undefined;\n fs.closeSync(fd);\n this.emit('close');\n }\n }\n [_write](buf) {\n // throw the original, but try to close if it fails\n let threw = true;\n try {\n this[_onwrite](null, fs.writeSync(this[_fd], buf, 0, buf.length, this[_pos]));\n threw = false;\n }\n finally {\n if (threw) {\n try {\n this[_close]();\n }\n catch {\n // ok error\n }\n }\n }\n }\n}\n//# sourceMappingURL=index.js.map","// turn tar(1) style args like `C` into the more verbose things like `cwd`\nconst argmap = new Map([\n ['C', 'cwd'],\n ['f', 'file'],\n ['z', 'gzip'],\n ['P', 'preservePaths'],\n ['U', 'unlink'],\n ['strip-components', 'strip'],\n ['stripComponents', 'strip'],\n ['keep-newer', 'newer'],\n ['keepNewer', 'newer'],\n ['keep-newer-files', 'newer'],\n ['keepNewerFiles', 'newer'],\n ['k', 'keep'],\n ['keep-existing', 'keep'],\n ['keepExisting', 'keep'],\n ['m', 'noMtime'],\n ['no-mtime', 'noMtime'],\n ['p', 'preserveOwner'],\n ['L', 'follow'],\n ['h', 'follow'],\n ['onentry', 'onReadEntry'],\n]);\nexport const isSyncFile = (o) => !!o.sync && !!o.file;\nexport const isAsyncFile = (o) => !o.sync && !!o.file;\nexport const isSyncNoFile = (o) => !!o.sync && !o.file;\nexport const isAsyncNoFile = (o) => !o.sync && !o.file;\nexport const isSync = (o) => !!o.sync;\nexport const isAsync = (o) => !o.sync;\nexport const isFile = (o) => !!o.file;\nexport const isNoFile = (o) => !o.file;\nconst dealiasKey = (k) => {\n const d = argmap.get(k);\n if (d)\n return d;\n return k;\n};\nexport const dealias = (opt = {}) => {\n if (!opt)\n return {};\n const result = {};\n for (const [key, v] of Object.entries(opt)) {\n // TS doesn't know that aliases are going to always be the same type\n const k = dealiasKey(key);\n result[k] = v;\n }\n // affordance for deprecated noChmod -> chmod\n if (result.chmod === undefined && result.noChmod === false) {\n result.chmod = true;\n }\n delete result.noChmod;\n return result;\n};\n//# sourceMappingURL=options.js.map","import { dealias, isAsyncFile, isAsyncNoFile, isSyncFile, isSyncNoFile, } from './options.js';\nexport const makeCommand = (syncFile, asyncFile, syncNoFile, asyncNoFile, validate) => {\n return Object.assign((opt_ = [], entries, cb) => {\n if (Array.isArray(opt_)) {\n entries = opt_;\n opt_ = {};\n }\n if (typeof entries === 'function') {\n cb = entries;\n entries = undefined;\n }\n if (!entries) {\n entries = [];\n }\n else {\n entries = Array.from(entries);\n }\n const opt = dealias(opt_);\n validate?.(opt, entries);\n if (isSyncFile(opt)) {\n if (typeof cb === 'function') {\n throw new TypeError('callback not supported for sync tar functions');\n }\n return syncFile(opt, entries);\n }\n else if (isAsyncFile(opt)) {\n const p = asyncFile(opt, entries);\n // weirdness to make TS happy\n const c = cb ? cb : undefined;\n return c ? p.then(() => c(), c) : p;\n }\n else if (isSyncNoFile(opt)) {\n if (typeof cb === 'function') {\n throw new TypeError('callback not supported for sync tar functions');\n }\n return syncNoFile(opt, entries);\n }\n else if (isAsyncNoFile(opt)) {\n if (typeof cb === 'function') {\n throw new TypeError('callback only supported with file option');\n }\n return asyncNoFile(opt, entries);\n /* c8 ignore start */\n }\n else {\n throw new Error('impossible options??');\n }\n /* c8 ignore stop */\n }, {\n syncFile,\n asyncFile,\n syncNoFile,\n asyncNoFile,\n validate,\n });\n};\n//# sourceMappingURL=make-command.js.map","// Update with any zlib constants that are added or changed in the future.\n// Node v6 didn't export this, so we just hard code the version and rely\n// on all the other hard-coded values from zlib v4736. When node v6\n// support drops, we can just export the realZlibConstants object.\nimport realZlib from 'zlib';\n/* c8 ignore start */\nconst realZlibConstants = realZlib.constants || { ZLIB_VERNUM: 4736 };\n/* c8 ignore stop */\nexport const constants = Object.freeze(Object.assign(Object.create(null), {\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n Z_VERSION_ERROR: -6,\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n DEFLATE: 1,\n INFLATE: 2,\n GZIP: 3,\n GUNZIP: 4,\n DEFLATERAW: 5,\n INFLATERAW: 6,\n UNZIP: 7,\n BROTLI_DECODE: 8,\n BROTLI_ENCODE: 9,\n Z_MIN_WINDOWBITS: 8,\n Z_MAX_WINDOWBITS: 15,\n Z_DEFAULT_WINDOWBITS: 15,\n Z_MIN_CHUNK: 64,\n Z_MAX_CHUNK: Infinity,\n Z_DEFAULT_CHUNK: 16384,\n Z_MIN_MEMLEVEL: 1,\n Z_MAX_MEMLEVEL: 9,\n Z_DEFAULT_MEMLEVEL: 8,\n Z_MIN_LEVEL: -1,\n Z_MAX_LEVEL: 9,\n Z_DEFAULT_LEVEL: -1,\n BROTLI_OPERATION_PROCESS: 0,\n BROTLI_OPERATION_FLUSH: 1,\n BROTLI_OPERATION_FINISH: 2,\n BROTLI_OPERATION_EMIT_METADATA: 3,\n BROTLI_MODE_GENERIC: 0,\n BROTLI_MODE_TEXT: 1,\n BROTLI_MODE_FONT: 2,\n BROTLI_DEFAULT_MODE: 0,\n BROTLI_MIN_QUALITY: 0,\n BROTLI_MAX_QUALITY: 11,\n BROTLI_DEFAULT_QUALITY: 11,\n BROTLI_MIN_WINDOW_BITS: 10,\n BROTLI_MAX_WINDOW_BITS: 24,\n BROTLI_LARGE_MAX_WINDOW_BITS: 30,\n BROTLI_DEFAULT_WINDOW: 22,\n BROTLI_MIN_INPUT_BLOCK_BITS: 16,\n BROTLI_MAX_INPUT_BLOCK_BITS: 24,\n BROTLI_PARAM_MODE: 0,\n BROTLI_PARAM_QUALITY: 1,\n BROTLI_PARAM_LGWIN: 2,\n BROTLI_PARAM_LGBLOCK: 3,\n BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4,\n BROTLI_PARAM_SIZE_HINT: 5,\n BROTLI_PARAM_LARGE_WINDOW: 6,\n BROTLI_PARAM_NPOSTFIX: 7,\n BROTLI_PARAM_NDIRECT: 8,\n BROTLI_DECODER_RESULT_ERROR: 0,\n BROTLI_DECODER_RESULT_SUCCESS: 1,\n BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2,\n BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3,\n BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0,\n BROTLI_DECODER_PARAM_LARGE_WINDOW: 1,\n BROTLI_DECODER_NO_ERROR: 0,\n BROTLI_DECODER_SUCCESS: 1,\n BROTLI_DECODER_NEEDS_MORE_INPUT: 2,\n BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3,\n BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1,\n BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2,\n BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3,\n BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4,\n BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5,\n BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6,\n BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7,\n BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8,\n BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9,\n BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10,\n BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11,\n BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12,\n BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13,\n BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14,\n BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15,\n BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16,\n BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19,\n BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20,\n BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21,\n BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22,\n BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25,\n BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26,\n BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27,\n BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30,\n BROTLI_DECODER_ERROR_UNREACHABLE: -31,\n}, realZlibConstants));\n//# sourceMappingURL=constants.js.map","import assert from 'assert';\nimport { Buffer } from 'buffer';\nimport { Minipass } from 'minipass';\nimport * as realZlib from 'zlib';\nimport { constants } from './constants.js';\nexport { constants } from './constants.js';\nconst OriginalBufferConcat = Buffer.concat;\nconst desc = Object.getOwnPropertyDescriptor(Buffer, 'concat');\nconst noop = (args) => args;\nconst passthroughBufferConcat = desc?.writable === true || desc?.set !== undefined\n ? (makeNoOp) => {\n Buffer.concat = makeNoOp ? noop : OriginalBufferConcat;\n }\n : (_) => { };\nconst _superWrite = Symbol('_superWrite');\nexport class ZlibError extends Error {\n code;\n errno;\n constructor(err, origin) {\n super('zlib: ' + err.message, { cause: err });\n this.code = err.code;\n this.errno = err.errno;\n /* c8 ignore next */\n if (!this.code)\n this.code = 'ZLIB_ERROR';\n this.message = 'zlib: ' + err.message;\n Error.captureStackTrace(this, origin ?? this.constructor);\n }\n get name() {\n return 'ZlibError';\n }\n}\n// the Zlib class they all inherit from\n// This thing manages the queue of requests, and returns\n// true or false if there is anything in the queue when\n// you call the .write() method.\nconst _flushFlag = Symbol('flushFlag');\nclass ZlibBase extends Minipass {\n #sawError = false;\n #ended = false;\n #flushFlag;\n #finishFlushFlag;\n #fullFlushFlag;\n #handle;\n #onError;\n get sawError() {\n return this.#sawError;\n }\n get handle() {\n return this.#handle;\n }\n /* c8 ignore start */\n get flushFlag() {\n return this.#flushFlag;\n }\n /* c8 ignore stop */\n constructor(opts, mode) {\n if (!opts || typeof opts !== 'object')\n throw new TypeError('invalid options for ZlibBase constructor');\n //@ts-ignore\n super(opts);\n /* c8 ignore start */\n this.#flushFlag = opts.flush ?? 0;\n this.#finishFlushFlag = opts.finishFlush ?? 0;\n this.#fullFlushFlag = opts.fullFlushFlag ?? 0;\n /* c8 ignore stop */\n //@ts-ignore\n if (typeof realZlib[mode] !== 'function') {\n throw new TypeError('Compression method not supported: ' + mode);\n }\n // this will throw if any options are invalid for the class selected\n try {\n // @types/node doesn't know that it exports the classes, but they're there\n //@ts-ignore\n this.#handle = new realZlib[mode](opts);\n }\n catch (er) {\n // make sure that all errors get decorated properly\n throw new ZlibError(er, this.constructor);\n }\n this.#onError = err => {\n // no sense raising multiple errors, since we abort on the first one.\n if (this.#sawError)\n return;\n this.#sawError = true;\n // there is no way to cleanly recover.\n // continuing only obscures problems.\n this.close();\n this.emit('error', err);\n };\n this.#handle?.on('error', er => this.#onError(new ZlibError(er)));\n this.once('end', () => this.close);\n }\n close() {\n if (this.#handle) {\n this.#handle.close();\n this.#handle = undefined;\n this.emit('close');\n }\n }\n reset() {\n if (!this.#sawError) {\n assert(this.#handle, 'zlib binding closed');\n //@ts-ignore\n return this.#handle.reset?.();\n }\n }\n flush(flushFlag) {\n if (this.ended)\n return;\n if (typeof flushFlag !== 'number')\n flushFlag = this.#fullFlushFlag;\n this.write(Object.assign(Buffer.alloc(0), { [_flushFlag]: flushFlag }));\n }\n end(chunk, encoding, cb) {\n /* c8 ignore start */\n if (typeof chunk === 'function') {\n cb = chunk;\n encoding = undefined;\n chunk = undefined;\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = undefined;\n }\n /* c8 ignore stop */\n if (chunk) {\n if (encoding)\n this.write(chunk, encoding);\n else\n this.write(chunk);\n }\n this.flush(this.#finishFlushFlag);\n this.#ended = true;\n return super.end(cb);\n }\n get ended() {\n return this.#ended;\n }\n // overridden in the gzip classes to do portable writes\n [_superWrite](data) {\n return super.write(data);\n }\n write(chunk, encoding, cb) {\n // process the chunk using the sync process\n // then super.write() all the outputted chunks\n if (typeof encoding === 'function')\n (cb = encoding), (encoding = 'utf8');\n if (typeof chunk === 'string')\n chunk = Buffer.from(chunk, encoding);\n if (this.#sawError)\n return;\n assert(this.#handle, 'zlib binding closed');\n // _processChunk tries to .close() the native handle after it's done, so we\n // intercept that by temporarily making it a no-op.\n // diving into the node:zlib internals a bit here\n const nativeHandle = this.#handle\n ._handle;\n const originalNativeClose = nativeHandle.close;\n nativeHandle.close = () => { };\n const originalClose = this.#handle.close;\n this.#handle.close = () => { };\n // It also calls `Buffer.concat()` at the end, which may be convenient\n // for some, but which we are not interested in as it slows us down.\n passthroughBufferConcat(true);\n let result = undefined;\n try {\n const flushFlag = typeof chunk[_flushFlag] === 'number'\n ? chunk[_flushFlag]\n : this.#flushFlag;\n result = this.#handle._processChunk(chunk, flushFlag);\n // if we don't throw, reset it back how it was\n passthroughBufferConcat(false);\n }\n catch (err) {\n // or if we do, put Buffer.concat() back before we emit error\n // Error events call into user code, which may call Buffer.concat()\n passthroughBufferConcat(false);\n this.#onError(new ZlibError(err, this.write));\n }\n finally {\n if (this.#handle) {\n // Core zlib resets `_handle` to null after attempting to close the\n // native handle. Our no-op handler prevented actual closure, but we\n // need to restore the `._handle` property.\n ;\n this.#handle._handle =\n nativeHandle;\n nativeHandle.close = originalNativeClose;\n this.#handle.close = originalClose;\n // `_processChunk()` adds an 'error' listener. If we don't remove it\n // after each call, these handlers start piling up.\n this.#handle.removeAllListeners('error');\n // make sure OUR error listener is still attached tho\n }\n }\n if (this.#handle)\n this.#handle.on('error', er => this.#onError(new ZlibError(er, this.write)));\n let writeReturn;\n if (result) {\n if (Array.isArray(result) && result.length > 0) {\n const r = result[0];\n // The first buffer is always `handle._outBuffer`, which would be\n // re-used for later invocations; so, we always have to copy that one.\n writeReturn = this[_superWrite](Buffer.from(r));\n for (let i = 1; i < result.length; i++) {\n writeReturn = this[_superWrite](result[i]);\n }\n }\n else {\n // either a single Buffer or an empty array\n writeReturn = this[_superWrite](Buffer.from(result));\n }\n }\n if (cb)\n cb();\n return writeReturn;\n }\n}\nexport class Zlib extends ZlibBase {\n #level;\n #strategy;\n constructor(opts, mode) {\n opts = opts || {};\n opts.flush = opts.flush || constants.Z_NO_FLUSH;\n opts.finishFlush = opts.finishFlush || constants.Z_FINISH;\n opts.fullFlushFlag = constants.Z_FULL_FLUSH;\n super(opts, mode);\n this.#level = opts.level;\n this.#strategy = opts.strategy;\n }\n params(level, strategy) {\n if (this.sawError)\n return;\n if (!this.handle)\n throw new Error('cannot switch params when binding is closed');\n // no way to test this without also not supporting params at all\n /* c8 ignore start */\n if (!this.handle.params)\n throw new Error('not supported in this implementation');\n /* c8 ignore stop */\n if (this.#level !== level || this.#strategy !== strategy) {\n this.flush(constants.Z_SYNC_FLUSH);\n assert(this.handle, 'zlib binding closed');\n // .params() calls .flush(), but the latter is always async in the\n // core zlib. We override .flush() temporarily to intercept that and\n // flush synchronously.\n const origFlush = this.handle.flush;\n this.handle.flush = (flushFlag, cb) => {\n /* c8 ignore start */\n if (typeof flushFlag === 'function') {\n cb = flushFlag;\n flushFlag = this.flushFlag;\n }\n /* c8 ignore stop */\n this.flush(flushFlag);\n cb?.();\n };\n try {\n ;\n this.handle.params(level, strategy);\n }\n finally {\n this.handle.flush = origFlush;\n }\n /* c8 ignore start */\n if (this.handle) {\n this.#level = level;\n this.#strategy = strategy;\n }\n /* c8 ignore stop */\n }\n }\n}\n// minimal 2-byte header\nexport class Deflate extends Zlib {\n constructor(opts) {\n super(opts, 'Deflate');\n }\n}\nexport class Inflate extends Zlib {\n constructor(opts) {\n super(opts, 'Inflate');\n }\n}\nexport class Gzip extends Zlib {\n #portable;\n constructor(opts) {\n super(opts, 'Gzip');\n this.#portable = opts && !!opts.portable;\n }\n [_superWrite](data) {\n if (!this.#portable)\n return super[_superWrite](data);\n // we'll always get the header emitted in one first chunk\n // overwrite the OS indicator byte with 0xFF\n this.#portable = false;\n data[9] = 255;\n return super[_superWrite](data);\n }\n}\nexport class Gunzip extends Zlib {\n constructor(opts) {\n super(opts, 'Gunzip');\n }\n}\n// raw - no header\nexport class DeflateRaw extends Zlib {\n constructor(opts) {\n super(opts, 'DeflateRaw');\n }\n}\nexport class InflateRaw extends Zlib {\n constructor(opts) {\n super(opts, 'InflateRaw');\n }\n}\n// auto-detect header.\nexport class Unzip extends Zlib {\n constructor(opts) {\n super(opts, 'Unzip');\n }\n}\nclass Brotli extends ZlibBase {\n constructor(opts, mode) {\n opts = opts || {};\n opts.flush = opts.flush || constants.BROTLI_OPERATION_PROCESS;\n opts.finishFlush =\n opts.finishFlush || constants.BROTLI_OPERATION_FINISH;\n opts.fullFlushFlag = constants.BROTLI_OPERATION_FLUSH;\n super(opts, mode);\n }\n}\nexport class BrotliCompress extends Brotli {\n constructor(opts) {\n super(opts, 'BrotliCompress');\n }\n}\nexport class BrotliDecompress extends Brotli {\n constructor(opts) {\n super(opts, 'BrotliDecompress');\n }\n}\nclass Zstd extends ZlibBase {\n constructor(opts, mode) {\n opts = opts || {};\n opts.flush = opts.flush || constants.ZSTD_e_continue;\n opts.finishFlush = opts.finishFlush || constants.ZSTD_e_end;\n opts.fullFlushFlag = constants.ZSTD_e_flush;\n super(opts, mode);\n }\n}\nexport class ZstdCompress extends Zstd {\n constructor(opts) {\n super(opts, 'ZstdCompress');\n }\n}\nexport class ZstdDecompress extends Zstd {\n constructor(opts) {\n super(opts, 'ZstdDecompress');\n }\n}\n//# sourceMappingURL=index.js.map","// Tar can encode large and negative numbers using a leading byte of\n// 0xff for negative, and 0x80 for positive.\nexport const encode = (num, buf) => {\n if (!Number.isSafeInteger(num)) {\n // The number is so large that javascript cannot represent it with integer\n // precision.\n throw Error('cannot encode number outside of javascript safe integer range');\n }\n else if (num < 0) {\n encodeNegative(num, buf);\n }\n else {\n encodePositive(num, buf);\n }\n return buf;\n};\nconst encodePositive = (num, buf) => {\n buf[0] = 0x80;\n for (var i = buf.length; i > 1; i--) {\n buf[i - 1] = num & 0xff;\n num = Math.floor(num / 0x100);\n }\n};\nconst encodeNegative = (num, buf) => {\n buf[0] = 0xff;\n var flipped = false;\n num = num * -1;\n for (var i = buf.length; i > 1; i--) {\n var byte = num & 0xff;\n num = Math.floor(num / 0x100);\n if (flipped) {\n buf[i - 1] = onesComp(byte);\n }\n else if (byte === 0) {\n buf[i - 1] = 0;\n }\n else {\n flipped = true;\n buf[i - 1] = twosComp(byte);\n }\n }\n};\nexport const parse = (buf) => {\n const pre = buf[0];\n const value = pre === 0x80 ? pos(buf.subarray(1, buf.length))\n : pre === 0xff ? twos(buf)\n : null;\n if (value === null) {\n throw Error('invalid base256 encoding');\n }\n if (!Number.isSafeInteger(value)) {\n // The number is so large that javascript cannot represent it with integer\n // precision.\n throw Error('parsed number outside of javascript safe integer range');\n }\n return value;\n};\nconst twos = (buf) => {\n var len = buf.length;\n var sum = 0;\n var flipped = false;\n for (var i = len - 1; i > -1; i--) {\n var byte = Number(buf[i]);\n var f;\n if (flipped) {\n f = onesComp(byte);\n }\n else if (byte === 0) {\n f = byte;\n }\n else {\n flipped = true;\n f = twosComp(byte);\n }\n if (f !== 0) {\n sum -= f * Math.pow(256, len - i - 1);\n }\n }\n return sum;\n};\nconst pos = (buf) => {\n var len = buf.length;\n var sum = 0;\n for (var i = len - 1; i > -1; i--) {\n var byte = Number(buf[i]);\n if (byte !== 0) {\n sum += byte * Math.pow(256, len - i - 1);\n }\n }\n return sum;\n};\nconst onesComp = (byte) => (0xff ^ byte) & 0xff;\nconst twosComp = (byte) => ((0xff ^ byte) + 1) & 0xff;\n//# sourceMappingURL=large-numbers.js.map","export const isCode = (c) => name.has(c);\nexport const isName = (c) => code.has(c);\n// map types from key to human-friendly name\nexport const name = new Map([\n ['0', 'File'],\n // same as File\n ['', 'OldFile'],\n ['1', 'Link'],\n ['2', 'SymbolicLink'],\n // Devices and FIFOs aren't fully supported\n // they are parsed, but skipped when unpacking\n ['3', 'CharacterDevice'],\n ['4', 'BlockDevice'],\n ['5', 'Directory'],\n ['6', 'FIFO'],\n // same as File\n ['7', 'ContiguousFile'],\n // pax headers\n ['g', 'GlobalExtendedHeader'],\n ['x', 'ExtendedHeader'],\n // vendor-specific stuff\n // skip\n ['A', 'SolarisACL'],\n // like 5, but with data, which should be skipped\n ['D', 'GNUDumpDir'],\n // metadata only, skip\n ['I', 'Inode'],\n // data = link path of next file\n ['K', 'NextFileHasLongLinkpath'],\n // data = path of next file\n ['L', 'NextFileHasLongPath'],\n // skip\n ['M', 'ContinuationFile'],\n // like L\n ['N', 'OldGnuLongPath'],\n // skip\n ['S', 'SparseFile'],\n // skip\n ['V', 'TapeVolumeHeader'],\n // like x\n ['X', 'OldExtendedHeader'],\n]);\n// map the other direction\nexport const code = new Map(Array.from(name).map(kv => [kv[1], kv[0]]));\n//# sourceMappingURL=types.js.map","// parse a 512-byte header block to a data object, or vice-versa\n// encode returns `true` if a pax extended header is needed, because\n// the data could not be faithfully encoded in a simple header.\n// (Also, check header.needPax to see if it needs a pax header.)\nimport { posix as pathModule } from 'node:path';\nimport * as large from './large-numbers.js';\nimport * as types from './types.js';\nexport class Header {\n cksumValid = false;\n needPax = false;\n nullBlock = false;\n block;\n path;\n mode;\n uid;\n gid;\n size;\n cksum;\n #type = 'Unsupported';\n linkpath;\n uname;\n gname;\n devmaj = 0;\n devmin = 0;\n atime;\n ctime;\n mtime;\n charset;\n comment;\n constructor(data, off = 0, ex, gex) {\n if (Buffer.isBuffer(data)) {\n this.decode(data, off || 0, ex, gex);\n }\n else if (data) {\n this.#slurp(data);\n }\n }\n decode(buf, off, ex, gex) {\n if (!off) {\n off = 0;\n }\n if (!buf || !(buf.length >= off + 512)) {\n throw new Error('need 512 bytes for header');\n }\n this.path = ex?.path ?? decString(buf, off, 100);\n this.mode = ex?.mode ?? gex?.mode ?? decNumber(buf, off + 100, 8);\n this.uid = ex?.uid ?? gex?.uid ?? decNumber(buf, off + 108, 8);\n this.gid = ex?.gid ?? gex?.gid ?? decNumber(buf, off + 116, 8);\n this.size = ex?.size ?? gex?.size ?? decNumber(buf, off + 124, 12);\n this.mtime =\n ex?.mtime ?? gex?.mtime ?? decDate(buf, off + 136, 12);\n this.cksum = decNumber(buf, off + 148, 12);\n // if we have extended or global extended headers, apply them now\n // See https://github.com/npm/node-tar/pull/187\n // Apply global before local, so it overrides\n if (gex)\n this.#slurp(gex, true);\n if (ex)\n this.#slurp(ex);\n // old tar versions marked dirs as a file with a trailing /\n const t = decString(buf, off + 156, 1);\n if (types.isCode(t)) {\n this.#type = t || '0';\n }\n if (this.#type === '0' && this.path.slice(-1) === '/') {\n this.#type = '5';\n }\n // tar implementations sometimes incorrectly put the stat(dir).size\n // as the size in the tarball, even though Directory entries are\n // not able to have any body at all. In the very rare chance that\n // it actually DOES have a body, we weren't going to do anything with\n // it anyway, and it'll just be a warning about an invalid header.\n if (this.#type === '5') {\n this.size = 0;\n }\n this.linkpath = decString(buf, off + 157, 100);\n if (buf.subarray(off + 257, off + 265).toString() ===\n 'ustar\\u000000') {\n /* c8 ignore start */\n this.uname =\n ex?.uname ?? gex?.uname ?? decString(buf, off + 265, 32);\n this.gname =\n ex?.gname ?? gex?.gname ?? decString(buf, off + 297, 32);\n this.devmaj =\n ex?.devmaj ?? gex?.devmaj ?? decNumber(buf, off + 329, 8) ?? 0;\n this.devmin =\n ex?.devmin ?? gex?.devmin ?? decNumber(buf, off + 337, 8) ?? 0;\n /* c8 ignore stop */\n if (buf[off + 475] !== 0) {\n // definitely a prefix, definitely >130 chars.\n const prefix = decString(buf, off + 345, 155);\n this.path = prefix + '/' + this.path;\n }\n else {\n const prefix = decString(buf, off + 345, 130);\n if (prefix) {\n this.path = prefix + '/' + this.path;\n }\n /* c8 ignore start */\n this.atime =\n ex?.atime ?? gex?.atime ?? decDate(buf, off + 476, 12);\n this.ctime =\n ex?.ctime ?? gex?.ctime ?? decDate(buf, off + 488, 12);\n /* c8 ignore stop */\n }\n }\n let sum = 8 * 0x20;\n for (let i = off; i < off + 148; i++) {\n sum += buf[i];\n }\n for (let i = off + 156; i < off + 512; i++) {\n sum += buf[i];\n }\n this.cksumValid = sum === this.cksum;\n if (this.cksum === undefined && sum === 8 * 0x20) {\n this.nullBlock = true;\n }\n }\n #slurp(ex, gex = false) {\n Object.assign(this, Object.fromEntries(Object.entries(ex).filter(([k, v]) => {\n // we slurp in everything except for the path attribute in\n // a global extended header, because that's weird. Also, any\n // null/undefined values are ignored.\n return !(v === null ||\n v === undefined ||\n (k === 'path' && gex) ||\n (k === 'linkpath' && gex) ||\n k === 'global');\n })));\n }\n encode(buf, off = 0) {\n if (!buf) {\n buf = this.block = Buffer.alloc(512);\n }\n if (this.#type === 'Unsupported') {\n this.#type = '0';\n }\n if (!(buf.length >= off + 512)) {\n throw new Error('need 512 bytes for header');\n }\n const prefixSize = this.ctime || this.atime ? 130 : 155;\n const split = splitPrefix(this.path || '', prefixSize);\n const path = split[0];\n const prefix = split[1];\n this.needPax = !!split[2];\n this.needPax = encString(buf, off, 100, path) || this.needPax;\n this.needPax =\n encNumber(buf, off + 100, 8, this.mode) || this.needPax;\n this.needPax =\n encNumber(buf, off + 108, 8, this.uid) || this.needPax;\n this.needPax =\n encNumber(buf, off + 116, 8, this.gid) || this.needPax;\n this.needPax =\n encNumber(buf, off + 124, 12, this.size) || this.needPax;\n this.needPax =\n encDate(buf, off + 136, 12, this.mtime) || this.needPax;\n buf[off + 156] = this.#type.charCodeAt(0);\n this.needPax =\n encString(buf, off + 157, 100, this.linkpath) || this.needPax;\n buf.write('ustar\\u000000', off + 257, 8);\n this.needPax =\n encString(buf, off + 265, 32, this.uname) || this.needPax;\n this.needPax =\n encString(buf, off + 297, 32, this.gname) || this.needPax;\n this.needPax =\n encNumber(buf, off + 329, 8, this.devmaj) || this.needPax;\n this.needPax =\n encNumber(buf, off + 337, 8, this.devmin) || this.needPax;\n this.needPax =\n encString(buf, off + 345, prefixSize, prefix) || this.needPax;\n if (buf[off + 475] !== 0) {\n this.needPax =\n encString(buf, off + 345, 155, prefix) || this.needPax;\n }\n else {\n this.needPax =\n encString(buf, off + 345, 130, prefix) || this.needPax;\n this.needPax =\n encDate(buf, off + 476, 12, this.atime) || this.needPax;\n this.needPax =\n encDate(buf, off + 488, 12, this.ctime) || this.needPax;\n }\n let sum = 8 * 0x20;\n for (let i = off; i < off + 148; i++) {\n sum += buf[i];\n }\n for (let i = off + 156; i < off + 512; i++) {\n sum += buf[i];\n }\n this.cksum = sum;\n encNumber(buf, off + 148, 8, this.cksum);\n this.cksumValid = true;\n return this.needPax;\n }\n get type() {\n return (this.#type === 'Unsupported' ?\n this.#type\n : types.name.get(this.#type));\n }\n get typeKey() {\n return this.#type;\n }\n set type(type) {\n const c = String(types.code.get(type));\n if (types.isCode(c) || c === 'Unsupported') {\n this.#type = c;\n }\n else if (types.isCode(type)) {\n this.#type = type;\n }\n else {\n throw new TypeError('invalid entry type: ' + type);\n }\n }\n}\nconst splitPrefix = (p, prefixSize) => {\n const pathSize = 100;\n let pp = p;\n let prefix = '';\n let ret = undefined;\n const root = pathModule.parse(p).root || '.';\n if (Buffer.byteLength(pp) < pathSize) {\n ret = [pp, prefix, false];\n }\n else {\n // first set prefix to the dir, and path to the base\n prefix = pathModule.dirname(pp);\n pp = pathModule.basename(pp);\n do {\n if (Buffer.byteLength(pp) <= pathSize &&\n Buffer.byteLength(prefix) <= prefixSize) {\n // both fit!\n ret = [pp, prefix, false];\n }\n else if (Buffer.byteLength(pp) > pathSize &&\n Buffer.byteLength(prefix) <= prefixSize) {\n // prefix fits in prefix, but path doesn't fit in path\n ret = [pp.slice(0, pathSize - 1), prefix, true];\n }\n else {\n // make path take a bit from prefix\n pp = pathModule.join(pathModule.basename(prefix), pp);\n prefix = pathModule.dirname(prefix);\n }\n } while (prefix !== root && ret === undefined);\n // at this point, found no resolution, just truncate\n if (!ret) {\n ret = [p.slice(0, pathSize - 1), '', true];\n }\n }\n return ret;\n};\nconst decString = (buf, off, size) => buf\n .subarray(off, off + size)\n .toString('utf8')\n .replace(/\\0.*/, '');\nconst decDate = (buf, off, size) => numToDate(decNumber(buf, off, size));\nconst numToDate = (num) => num === undefined ? undefined : new Date(num * 1000);\nconst decNumber = (buf, off, size) => Number(buf[off]) & 0x80 ?\n large.parse(buf.subarray(off, off + size))\n : decSmallNumber(buf, off, size);\nconst nanUndef = (value) => (isNaN(value) ? undefined : value);\nconst decSmallNumber = (buf, off, size) => nanUndef(parseInt(buf\n .subarray(off, off + size)\n .toString('utf8')\n .replace(/\\0.*$/, '')\n .trim(), 8));\n// the maximum encodable as a null-terminated octal, by field size\nconst MAXNUM = {\n 12: 0o77777777777,\n 8: 0o7777777,\n};\nconst encNumber = (buf, off, size, num) => num === undefined ? false\n : num > MAXNUM[size] || num < 0 ?\n (large.encode(num, buf.subarray(off, off + size)), true)\n : (encSmallNumber(buf, off, size, num), false);\nconst encSmallNumber = (buf, off, size, num) => buf.write(octalString(num, size), off, size, 'ascii');\nconst octalString = (num, size) => padOctal(Math.floor(num).toString(8), size);\nconst padOctal = (str, size) => (str.length === size - 1 ?\n str\n : new Array(size - str.length - 1).join('0') + str + ' ') + '\\0';\nconst encDate = (buf, off, size, date) => date === undefined ? false : (encNumber(buf, off, size, date.getTime() / 1000));\n// enough to fill the longest string we've got\nconst NULLS = new Array(156).join('\\0');\n// pad with nulls, return true if it's longer or non-ascii\nconst encString = (buf, off, size, str) => str === undefined ? false : ((buf.write(str + NULLS, off, size, 'utf8'),\n str.length !== Buffer.byteLength(str) || str.length > size));\n//# sourceMappingURL=header.js.map","import { basename } from 'node:path';\nimport { Header } from './header.js';\nexport class Pax {\n atime;\n mtime;\n ctime;\n charset;\n comment;\n gid;\n uid;\n gname;\n uname;\n linkpath;\n dev;\n ino;\n nlink;\n path;\n size;\n mode;\n global;\n constructor(obj, global = false) {\n this.atime = obj.atime;\n this.charset = obj.charset;\n this.comment = obj.comment;\n this.ctime = obj.ctime;\n this.dev = obj.dev;\n this.gid = obj.gid;\n this.global = global;\n this.gname = obj.gname;\n this.ino = obj.ino;\n this.linkpath = obj.linkpath;\n this.mtime = obj.mtime;\n this.nlink = obj.nlink;\n this.path = obj.path;\n this.size = obj.size;\n this.uid = obj.uid;\n this.uname = obj.uname;\n }\n encode() {\n const body = this.encodeBody();\n if (body === '') {\n return Buffer.allocUnsafe(0);\n }\n const bodyLen = Buffer.byteLength(body);\n // round up to 512 bytes\n // add 512 for header\n const bufLen = 512 * Math.ceil(1 + bodyLen / 512);\n const buf = Buffer.allocUnsafe(bufLen);\n // 0-fill the header section, it might not hit every field\n for (let i = 0; i < 512; i++) {\n buf[i] = 0;\n }\n new Header({\n // XXX split the path\n // then the path should be PaxHeader + basename, but less than 99,\n // prepend with the dirname\n /* c8 ignore start */\n path: ('PaxHeader/' + basename(this.path ?? '')).slice(0, 99),\n /* c8 ignore stop */\n mode: this.mode || 0o644,\n uid: this.uid,\n gid: this.gid,\n size: bodyLen,\n mtime: this.mtime,\n type: this.global ? 'GlobalExtendedHeader' : 'ExtendedHeader',\n linkpath: '',\n uname: this.uname || '',\n gname: this.gname || '',\n devmaj: 0,\n devmin: 0,\n atime: this.atime,\n ctime: this.ctime,\n }).encode(buf);\n buf.write(body, 512, bodyLen, 'utf8');\n // null pad after the body\n for (let i = bodyLen + 512; i < buf.length; i++) {\n buf[i] = 0;\n }\n return buf;\n }\n encodeBody() {\n return (this.encodeField('path') +\n this.encodeField('ctime') +\n this.encodeField('atime') +\n this.encodeField('dev') +\n this.encodeField('ino') +\n this.encodeField('nlink') +\n this.encodeField('charset') +\n this.encodeField('comment') +\n this.encodeField('gid') +\n this.encodeField('gname') +\n this.encodeField('linkpath') +\n this.encodeField('mtime') +\n this.encodeField('size') +\n this.encodeField('uid') +\n this.encodeField('uname'));\n }\n encodeField(field) {\n if (this[field] === undefined) {\n return '';\n }\n const r = this[field];\n const v = r instanceof Date ? r.getTime() / 1000 : r;\n const s = ' ' +\n (field === 'dev' || field === 'ino' || field === 'nlink' ?\n 'SCHILY.'\n : '') +\n field +\n '=' +\n v +\n '\\n';\n const byteLen = Buffer.byteLength(s);\n // the digits includes the length of the digits in ascii base-10\n // so if it's 9 characters, then adding 1 for the 9 makes it 10\n // which makes it 11 chars.\n let digits = Math.floor(Math.log(byteLen) / Math.log(10)) + 1;\n if (byteLen + digits >= Math.pow(10, digits)) {\n digits += 1;\n }\n const len = digits + byteLen;\n return len + s;\n }\n static parse(str, ex, g = false) {\n return new Pax(merge(parseKV(str), ex), g);\n }\n}\nconst merge = (a, b) => b ? Object.assign({}, b, a) : a;\nconst parseKV = (str) => str\n .replace(/\\n$/, '')\n .split('\\n')\n .reduce(parseKVLine, Object.create(null));\nconst parseKVLine = (set, line) => {\n const n = parseInt(line, 10);\n // XXX Values with \\n in them will fail this.\n // Refactor to not be a naive line-by-line parse.\n if (n !== Buffer.byteLength(line) + 1) {\n return set;\n }\n line = line.slice((n + ' ').length);\n const kv = line.split('=');\n const r = kv.shift();\n if (!r) {\n return set;\n }\n const k = r.replace(/^SCHILY\\.(dev|ino|nlink)/, '$1');\n const v = kv.join('=');\n set[k] =\n /^([A-Z]+\\.)?([mac]|birth|creation)time$/.test(k) ?\n new Date(Number(v) * 1000)\n : /^[0-9]+$/.test(v) ? +v\n : v;\n return set;\n};\n//# sourceMappingURL=pax.js.map","// on windows, either \\ or / are valid directory separators.\n// on unix, \\ is a valid character in filenames.\n// so, on windows, and only on windows, we replace all \\ chars with /,\n// so that we can use / as our one and only directory separator char.\nconst platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform;\nexport const normalizeWindowsPath = platform !== 'win32' ?\n (p) => p\n : (p) => p && p.replace(/\\\\/g, '/');\n//# sourceMappingURL=normalize-windows-path.js.map","import { Minipass } from 'minipass';\nimport { normalizeWindowsPath } from './normalize-windows-path.js';\nexport class ReadEntry extends Minipass {\n extended;\n globalExtended;\n header;\n startBlockSize;\n blockRemain;\n remain;\n type;\n meta = false;\n ignore = false;\n path;\n mode;\n uid;\n gid;\n uname;\n gname;\n size = 0;\n mtime;\n atime;\n ctime;\n linkpath;\n dev;\n ino;\n nlink;\n invalid = false;\n absolute;\n unsupported = false;\n constructor(header, ex, gex) {\n super({});\n // read entries always start life paused. this is to avoid the\n // situation where Minipass's auto-ending empty streams results\n // in an entry ending before we're ready for it.\n this.pause();\n this.extended = ex;\n this.globalExtended = gex;\n this.header = header;\n /* c8 ignore start */\n this.remain = header.size ?? 0;\n /* c8 ignore stop */\n this.startBlockSize = 512 * Math.ceil(this.remain / 512);\n this.blockRemain = this.startBlockSize;\n this.type = header.type;\n switch (this.type) {\n case 'File':\n case 'OldFile':\n case 'Link':\n case 'SymbolicLink':\n case 'CharacterDevice':\n case 'BlockDevice':\n case 'Directory':\n case 'FIFO':\n case 'ContiguousFile':\n case 'GNUDumpDir':\n break;\n case 'NextFileHasLongLinkpath':\n case 'NextFileHasLongPath':\n case 'OldGnuLongPath':\n case 'GlobalExtendedHeader':\n case 'ExtendedHeader':\n case 'OldExtendedHeader':\n this.meta = true;\n break;\n // NOTE: gnutar and bsdtar treat unrecognized types as 'File'\n // it may be worth doing the same, but with a warning.\n default:\n this.ignore = true;\n }\n /* c8 ignore start */\n if (!header.path) {\n throw new Error('no path provided for tar.ReadEntry');\n }\n /* c8 ignore stop */\n this.path = normalizeWindowsPath(header.path);\n this.mode = header.mode;\n if (this.mode) {\n this.mode = this.mode & 0o7777;\n }\n this.uid = header.uid;\n this.gid = header.gid;\n this.uname = header.uname;\n this.gname = header.gname;\n this.size = this.remain;\n this.mtime = header.mtime;\n this.atime = header.atime;\n this.ctime = header.ctime;\n /* c8 ignore start */\n this.linkpath =\n header.linkpath ?\n normalizeWindowsPath(header.linkpath)\n : undefined;\n /* c8 ignore stop */\n this.uname = header.uname;\n this.gname = header.gname;\n if (ex) {\n this.#slurp(ex);\n }\n if (gex) {\n this.#slurp(gex, true);\n }\n }\n write(data) {\n const writeLen = data.length;\n if (writeLen > this.blockRemain) {\n throw new Error('writing more to entry than is appropriate');\n }\n const r = this.remain;\n const br = this.blockRemain;\n this.remain = Math.max(0, r - writeLen);\n this.blockRemain = Math.max(0, br - writeLen);\n if (this.ignore) {\n return true;\n }\n if (r >= writeLen) {\n return super.write(data);\n }\n // r < writeLen\n return super.write(data.subarray(0, r));\n }\n #slurp(ex, gex = false) {\n if (ex.path)\n ex.path = normalizeWindowsPath(ex.path);\n if (ex.linkpath)\n ex.linkpath = normalizeWindowsPath(ex.linkpath);\n Object.assign(this, Object.fromEntries(Object.entries(ex).filter(([k, v]) => {\n // we slurp in everything except for the path attribute in\n // a global extended header, because that's weird. Also, any\n // null/undefined values are ignored.\n return !(v === null ||\n v === undefined ||\n (k === 'path' && gex));\n })));\n }\n}\n//# sourceMappingURL=read-entry.js.map","export const warnMethod = (self, code, message, data = {}) => {\n if (self.file) {\n data.file = self.file;\n }\n if (self.cwd) {\n data.cwd = self.cwd;\n }\n data.code =\n (message instanceof Error &&\n message.code) ||\n code;\n data.tarCode = code;\n if (!self.strict && data.recoverable !== false) {\n if (message instanceof Error) {\n data = Object.assign(message, data);\n message = message.message;\n }\n self.emit('warn', code, message, data);\n }\n else if (message instanceof Error) {\n self.emit('error', Object.assign(message, data));\n }\n else {\n self.emit('error', Object.assign(new Error(`${code}: ${message}`), data));\n }\n};\n//# sourceMappingURL=warn-method.js.map","// this[BUFFER] is the remainder of a chunk if we're waiting for\n// the full 512 bytes of a header to come in. We will Buffer.concat()\n// it to the next write(), which is a mem copy, but a small one.\n//\n// this[QUEUE] is a list of entries that haven't been emitted\n// yet this can only get filled up if the user keeps write()ing after\n// a write() returns false, or does a write() with more than one entry\n//\n// We don't buffer chunks, we always parse them and either create an\n// entry, or push it into the active entry. The ReadEntry class knows\n// to throw data away if .ignore=true\n//\n// Shift entry off the buffer when it emits 'end', and emit 'entry' for\n// the next one in the list.\n//\n// At any time, we're pushing body chunks into the entry at WRITEENTRY,\n// and waiting for 'end' on the entry at READENTRY\n//\n// ignored entries get .resume() called on them straight away\nimport { EventEmitter as EE } from 'events';\nimport { BrotliDecompress, Unzip, ZstdDecompress } from 'minizlib';\nimport { Header } from './header.js';\nimport { Pax } from './pax.js';\nimport { ReadEntry } from './read-entry.js';\nimport { warnMethod, } from './warn-method.js';\nconst maxMetaEntrySize = 1024 * 1024;\nconst gzipHeader = Buffer.from([0x1f, 0x8b]);\nconst zstdHeader = Buffer.from([0x28, 0xb5, 0x2f, 0xfd]);\nconst ZIP_HEADER_LEN = Math.max(gzipHeader.length, zstdHeader.length);\nconst STATE = Symbol('state');\nconst WRITEENTRY = Symbol('writeEntry');\nconst READENTRY = Symbol('readEntry');\nconst NEXTENTRY = Symbol('nextEntry');\nconst PROCESSENTRY = Symbol('processEntry');\nconst EX = Symbol('extendedHeader');\nconst GEX = Symbol('globalExtendedHeader');\nconst META = Symbol('meta');\nconst EMITMETA = Symbol('emitMeta');\nconst BUFFER = Symbol('buffer');\nconst QUEUE = Symbol('queue');\nconst ENDED = Symbol('ended');\nconst EMITTEDEND = Symbol('emittedEnd');\nconst EMIT = Symbol('emit');\nconst UNZIP = Symbol('unzip');\nconst CONSUMECHUNK = Symbol('consumeChunk');\nconst CONSUMECHUNKSUB = Symbol('consumeChunkSub');\nconst CONSUMEBODY = Symbol('consumeBody');\nconst CONSUMEMETA = Symbol('consumeMeta');\nconst CONSUMEHEADER = Symbol('consumeHeader');\nconst CONSUMING = Symbol('consuming');\nconst BUFFERCONCAT = Symbol('bufferConcat');\nconst MAYBEEND = Symbol('maybeEnd');\nconst WRITING = Symbol('writing');\nconst ABORTED = Symbol('aborted');\nconst DONE = Symbol('onDone');\nconst SAW_VALID_ENTRY = Symbol('sawValidEntry');\nconst SAW_NULL_BLOCK = Symbol('sawNullBlock');\nconst SAW_EOF = Symbol('sawEOF');\nconst CLOSESTREAM = Symbol('closeStream');\nconst noop = () => true;\nexport class Parser extends EE {\n file;\n strict;\n maxMetaEntrySize;\n filter;\n brotli;\n zstd;\n writable = true;\n readable = false;\n [QUEUE] = [];\n [BUFFER];\n [READENTRY];\n [WRITEENTRY];\n [STATE] = 'begin';\n [META] = '';\n [EX];\n [GEX];\n [ENDED] = false;\n [UNZIP];\n [ABORTED] = false;\n [SAW_VALID_ENTRY];\n [SAW_NULL_BLOCK] = false;\n [SAW_EOF] = false;\n [WRITING] = false;\n [CONSUMING] = false;\n [EMITTEDEND] = false;\n constructor(opt = {}) {\n super();\n this.file = opt.file || '';\n // these BADARCHIVE errors can't be detected early. listen on DONE.\n this.on(DONE, () => {\n if (this[STATE] === 'begin' ||\n this[SAW_VALID_ENTRY] === false) {\n // either less than 1 block of data, or all entries were invalid.\n // Either way, probably not even a tarball.\n this.warn('TAR_BAD_ARCHIVE', 'Unrecognized archive format');\n }\n });\n if (opt.ondone) {\n this.on(DONE, opt.ondone);\n }\n else {\n this.on(DONE, () => {\n this.emit('prefinish');\n this.emit('finish');\n this.emit('end');\n });\n }\n this.strict = !!opt.strict;\n this.maxMetaEntrySize = opt.maxMetaEntrySize || maxMetaEntrySize;\n this.filter = typeof opt.filter === 'function' ? opt.filter : noop;\n // Unlike gzip, brotli doesn't have any magic bytes to identify it\n // Users need to explicitly tell us they're extracting a brotli file\n // Or we infer from the file extension\n const isTBR = opt.file &&\n (opt.file.endsWith('.tar.br') || opt.file.endsWith('.tbr'));\n // if it's a tbr file it MIGHT be brotli, but we don't know until\n // we look at it and verify it's not a valid tar file.\n this.brotli =\n !(opt.gzip || opt.zstd) && opt.brotli !== undefined ? opt.brotli\n : isTBR ? undefined\n : false;\n // zstd has magic bytes to identify it, but we also support explicit options\n // and file extension detection\n const isTZST = opt.file &&\n (opt.file.endsWith('.tar.zst') || opt.file.endsWith('.tzst'));\n this.zstd =\n !(opt.gzip || opt.brotli) && opt.zstd !== undefined ? opt.zstd\n : isTZST ? true\n : undefined;\n // have to set this so that streams are ok piping into it\n this.on('end', () => this[CLOSESTREAM]());\n if (typeof opt.onwarn === 'function') {\n this.on('warn', opt.onwarn);\n }\n if (typeof opt.onReadEntry === 'function') {\n this.on('entry', opt.onReadEntry);\n }\n }\n warn(code, message, data = {}) {\n warnMethod(this, code, message, data);\n }\n [CONSUMEHEADER](chunk, position) {\n if (this[SAW_VALID_ENTRY] === undefined) {\n this[SAW_VALID_ENTRY] = false;\n }\n let header;\n try {\n header = new Header(chunk, position, this[EX], this[GEX]);\n }\n catch (er) {\n return this.warn('TAR_ENTRY_INVALID', er);\n }\n if (header.nullBlock) {\n if (this[SAW_NULL_BLOCK]) {\n this[SAW_EOF] = true;\n // ending an archive with no entries. pointless, but legal.\n if (this[STATE] === 'begin') {\n this[STATE] = 'header';\n }\n this[EMIT]('eof');\n }\n else {\n this[SAW_NULL_BLOCK] = true;\n this[EMIT]('nullBlock');\n }\n }\n else {\n this[SAW_NULL_BLOCK] = false;\n if (!header.cksumValid) {\n this.warn('TAR_ENTRY_INVALID', 'checksum failure', { header });\n }\n else if (!header.path) {\n this.warn('TAR_ENTRY_INVALID', 'path is required', { header });\n }\n else {\n const type = header.type;\n if (/^(Symbolic)?Link$/.test(type) && !header.linkpath) {\n this.warn('TAR_ENTRY_INVALID', 'linkpath required', {\n header,\n });\n }\n else if (!/^(Symbolic)?Link$/.test(type) &&\n !/^(Global)?ExtendedHeader$/.test(type) &&\n header.linkpath) {\n this.warn('TAR_ENTRY_INVALID', 'linkpath forbidden', {\n header,\n });\n }\n else {\n const entry = (this[WRITEENTRY] = new ReadEntry(header, this[EX], this[GEX]));\n // we do this for meta & ignored entries as well, because they\n // are still valid tar, or else we wouldn't know to ignore them\n if (!this[SAW_VALID_ENTRY]) {\n if (entry.remain) {\n // this might be the one!\n const onend = () => {\n if (!entry.invalid) {\n this[SAW_VALID_ENTRY] = true;\n }\n };\n entry.on('end', onend);\n }\n else {\n this[SAW_VALID_ENTRY] = true;\n }\n }\n if (entry.meta) {\n if (entry.size > this.maxMetaEntrySize) {\n entry.ignore = true;\n this[EMIT]('ignoredEntry', entry);\n this[STATE] = 'ignore';\n entry.resume();\n }\n else if (entry.size > 0) {\n this[META] = '';\n entry.on('data', c => (this[META] += c));\n this[STATE] = 'meta';\n }\n }\n else {\n this[EX] = undefined;\n entry.ignore =\n entry.ignore || !this.filter(entry.path, entry);\n if (entry.ignore) {\n // probably valid, just not something we care about\n this[EMIT]('ignoredEntry', entry);\n this[STATE] = entry.remain ? 'ignore' : 'header';\n entry.resume();\n }\n else {\n if (entry.remain) {\n this[STATE] = 'body';\n }\n else {\n this[STATE] = 'header';\n entry.end();\n }\n if (!this[READENTRY]) {\n this[QUEUE].push(entry);\n this[NEXTENTRY]();\n }\n else {\n this[QUEUE].push(entry);\n }\n }\n }\n }\n }\n }\n }\n [CLOSESTREAM]() {\n queueMicrotask(() => this.emit('close'));\n }\n [PROCESSENTRY](entry) {\n let go = true;\n if (!entry) {\n this[READENTRY] = undefined;\n go = false;\n }\n else if (Array.isArray(entry)) {\n const [ev, ...args] = entry;\n this.emit(ev, ...args);\n }\n else {\n this[READENTRY] = entry;\n this.emit('entry', entry);\n if (!entry.emittedEnd) {\n entry.on('end', () => this[NEXTENTRY]());\n go = false;\n }\n }\n return go;\n }\n [NEXTENTRY]() {\n do { } while (this[PROCESSENTRY](this[QUEUE].shift()));\n if (!this[QUEUE].length) {\n // At this point, there's nothing in the queue, but we may have an\n // entry which is being consumed (readEntry).\n // If we don't, then we definitely can handle more data.\n // If we do, and either it's flowing, or it has never had any data\n // written to it, then it needs more.\n // The only other possibility is that it has returned false from a\n // write() call, so we wait for the next drain to continue.\n const re = this[READENTRY];\n const drainNow = !re || re.flowing || re.size === re.remain;\n if (drainNow) {\n if (!this[WRITING]) {\n this.emit('drain');\n }\n }\n else {\n re.once('drain', () => this.emit('drain'));\n }\n }\n }\n [CONSUMEBODY](chunk, position) {\n // write up to but no more than writeEntry.blockRemain\n const entry = this[WRITEENTRY];\n /* c8 ignore start */\n if (!entry) {\n throw new Error('attempt to consume body without entry??');\n }\n const br = entry.blockRemain ?? 0;\n /* c8 ignore stop */\n const c = br >= chunk.length && position === 0 ?\n chunk\n : chunk.subarray(position, position + br);\n entry.write(c);\n if (!entry.blockRemain) {\n this[STATE] = 'header';\n this[WRITEENTRY] = undefined;\n entry.end();\n }\n return c.length;\n }\n [CONSUMEMETA](chunk, position) {\n const entry = this[WRITEENTRY];\n const ret = this[CONSUMEBODY](chunk, position);\n // if we finished, then the entry is reset\n if (!this[WRITEENTRY] && entry) {\n this[EMITMETA](entry);\n }\n return ret;\n }\n [EMIT](ev, data, extra) {\n if (!this[QUEUE].length && !this[READENTRY]) {\n this.emit(ev, data, extra);\n }\n else {\n this[QUEUE].push([ev, data, extra]);\n }\n }\n [EMITMETA](entry) {\n this[EMIT]('meta', this[META]);\n switch (entry.type) {\n case 'ExtendedHeader':\n case 'OldExtendedHeader':\n this[EX] = Pax.parse(this[META], this[EX], false);\n break;\n case 'GlobalExtendedHeader':\n this[GEX] = Pax.parse(this[META], this[GEX], true);\n break;\n case 'NextFileHasLongPath':\n case 'OldGnuLongPath': {\n const ex = this[EX] ?? Object.create(null);\n this[EX] = ex;\n ex.path = this[META].replace(/\\0.*/, '');\n break;\n }\n case 'NextFileHasLongLinkpath': {\n const ex = this[EX] || Object.create(null);\n this[EX] = ex;\n ex.linkpath = this[META].replace(/\\0.*/, '');\n break;\n }\n /* c8 ignore start */\n default:\n throw new Error('unknown meta: ' + entry.type);\n /* c8 ignore stop */\n }\n }\n abort(error) {\n this[ABORTED] = true;\n this.emit('abort', error);\n // always throws, even in non-strict mode\n this.warn('TAR_ABORT', error, { recoverable: false });\n }\n write(chunk, encoding, cb) {\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = undefined;\n }\n if (typeof chunk === 'string') {\n chunk = Buffer.from(chunk, \n /* c8 ignore next */\n typeof encoding === 'string' ? encoding : 'utf8');\n }\n if (this[ABORTED]) {\n /* c8 ignore next */\n cb?.();\n return false;\n }\n // first write, might be gzipped, zstd, or brotli compressed\n const needSniff = this[UNZIP] === undefined ||\n (this.brotli === undefined && this[UNZIP] === false);\n if (needSniff && chunk) {\n if (this[BUFFER]) {\n chunk = Buffer.concat([this[BUFFER], chunk]);\n this[BUFFER] = undefined;\n }\n if (chunk.length < ZIP_HEADER_LEN) {\n this[BUFFER] = chunk;\n /* c8 ignore next */\n cb?.();\n return true;\n }\n // look for gzip header\n for (let i = 0; this[UNZIP] === undefined && i < gzipHeader.length; i++) {\n if (chunk[i] !== gzipHeader[i]) {\n this[UNZIP] = false;\n }\n }\n // look for zstd header if gzip header not found\n let isZstd = false;\n if (this[UNZIP] === false && this.zstd !== false) {\n isZstd = true;\n for (let i = 0; i < zstdHeader.length; i++) {\n if (chunk[i] !== zstdHeader[i]) {\n isZstd = false;\n break;\n }\n }\n }\n const maybeBrotli = this.brotli === undefined && !isZstd;\n if (this[UNZIP] === false && maybeBrotli) {\n // read the first header to see if it's a valid tar file. If so,\n // we can safely assume that it's not actually brotli, despite the\n // .tbr or .tar.br file extension.\n // if we ended before getting a full chunk, yes, def brotli\n if (chunk.length < 512) {\n if (this[ENDED]) {\n this.brotli = true;\n }\n else {\n this[BUFFER] = chunk;\n /* c8 ignore next */\n cb?.();\n return true;\n }\n }\n else {\n // if it's tar, it's pretty reliably not brotli, chances of\n // that happening are astronomical.\n try {\n new Header(chunk.subarray(0, 512));\n this.brotli = false;\n }\n catch (_) {\n this.brotli = true;\n }\n }\n }\n if (this[UNZIP] === undefined ||\n (this[UNZIP] === false && (this.brotli || isZstd))) {\n const ended = this[ENDED];\n this[ENDED] = false;\n this[UNZIP] =\n this[UNZIP] === undefined ? new Unzip({})\n : isZstd ? new ZstdDecompress({})\n : new BrotliDecompress({});\n this[UNZIP].on('data', chunk => this[CONSUMECHUNK](chunk));\n this[UNZIP].on('error', er => this.abort(er));\n this[UNZIP].on('end', () => {\n this[ENDED] = true;\n this[CONSUMECHUNK]();\n });\n this[WRITING] = true;\n const ret = !!this[UNZIP][ended ? 'end' : 'write'](chunk);\n this[WRITING] = false;\n cb?.();\n return ret;\n }\n }\n this[WRITING] = true;\n if (this[UNZIP]) {\n this[UNZIP].write(chunk);\n }\n else {\n this[CONSUMECHUNK](chunk);\n }\n this[WRITING] = false;\n // return false if there's a queue, or if the current entry isn't flowing\n const ret = this[QUEUE].length ? false\n : this[READENTRY] ? this[READENTRY].flowing\n : true;\n // if we have no queue, then that means a clogged READENTRY\n if (!ret && !this[QUEUE].length) {\n this[READENTRY]?.once('drain', () => this.emit('drain'));\n }\n /* c8 ignore next */\n cb?.();\n return ret;\n }\n [BUFFERCONCAT](c) {\n if (c && !this[ABORTED]) {\n this[BUFFER] =\n this[BUFFER] ? Buffer.concat([this[BUFFER], c]) : c;\n }\n }\n [MAYBEEND]() {\n if (this[ENDED] &&\n !this[EMITTEDEND] &&\n !this[ABORTED] &&\n !this[CONSUMING]) {\n this[EMITTEDEND] = true;\n const entry = this[WRITEENTRY];\n if (entry && entry.blockRemain) {\n // truncated, likely a damaged file\n const have = this[BUFFER] ? this[BUFFER].length : 0;\n this.warn('TAR_BAD_ARCHIVE', `Truncated input (needed ${entry.blockRemain} more bytes, only ${have} available)`, { entry });\n if (this[BUFFER]) {\n entry.write(this[BUFFER]);\n }\n entry.end();\n }\n this[EMIT](DONE);\n }\n }\n [CONSUMECHUNK](chunk) {\n if (this[CONSUMING] && chunk) {\n this[BUFFERCONCAT](chunk);\n }\n else if (!chunk && !this[BUFFER]) {\n this[MAYBEEND]();\n }\n else if (chunk) {\n this[CONSUMING] = true;\n if (this[BUFFER]) {\n this[BUFFERCONCAT](chunk);\n const c = this[BUFFER];\n this[BUFFER] = undefined;\n this[CONSUMECHUNKSUB](c);\n }\n else {\n this[CONSUMECHUNKSUB](chunk);\n }\n while (this[BUFFER] &&\n this[BUFFER]?.length >= 512 &&\n !this[ABORTED] &&\n !this[SAW_EOF]) {\n const c = this[BUFFER];\n this[BUFFER] = undefined;\n this[CONSUMECHUNKSUB](c);\n }\n this[CONSUMING] = false;\n }\n if (!this[BUFFER] || this[ENDED]) {\n this[MAYBEEND]();\n }\n }\n [CONSUMECHUNKSUB](chunk) {\n // we know that we are in CONSUMING mode, so anything written goes into\n // the buffer. Advance the position and put any remainder in the buffer.\n let position = 0;\n const length = chunk.length;\n while (position + 512 <= length &&\n !this[ABORTED] &&\n !this[SAW_EOF]) {\n switch (this[STATE]) {\n case 'begin':\n case 'header':\n this[CONSUMEHEADER](chunk, position);\n position += 512;\n break;\n case 'ignore':\n case 'body':\n position += this[CONSUMEBODY](chunk, position);\n break;\n case 'meta':\n position += this[CONSUMEMETA](chunk, position);\n break;\n /* c8 ignore start */\n default:\n throw new Error('invalid state: ' + this[STATE]);\n /* c8 ignore stop */\n }\n }\n if (position < length) {\n if (this[BUFFER]) {\n this[BUFFER] = Buffer.concat([\n chunk.subarray(position),\n this[BUFFER],\n ]);\n }\n else {\n this[BUFFER] = chunk.subarray(position);\n }\n }\n }\n end(chunk, encoding, cb) {\n if (typeof chunk === 'function') {\n cb = chunk;\n encoding = undefined;\n chunk = undefined;\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = undefined;\n }\n if (typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n if (cb)\n this.once('finish', cb);\n if (!this[ABORTED]) {\n if (this[UNZIP]) {\n /* c8 ignore start */\n if (chunk)\n this[UNZIP].write(chunk);\n /* c8 ignore stop */\n this[UNZIP].end();\n }\n else {\n this[ENDED] = true;\n if (this.brotli === undefined || this.zstd === undefined)\n chunk = chunk || Buffer.alloc(0);\n if (chunk)\n this.write(chunk);\n this[MAYBEEND]();\n }\n }\n return this;\n }\n}\n//# sourceMappingURL=parse.js.map","// warning: extremely hot code path.\n// This has been meticulously optimized for use\n// within npm install on large package trees.\n// Do not edit without careful benchmarking.\nexport const stripTrailingSlashes = (str) => {\n let i = str.length - 1;\n let slashesStart = -1;\n while (i > -1 && str.charAt(i) === '/') {\n slashesStart = i;\n i--;\n }\n return slashesStart === -1 ? str : str.slice(0, slashesStart);\n};\n//# sourceMappingURL=strip-trailing-slashes.js.map","// tar -t\nimport * as fsm from '@isaacs/fs-minipass';\nimport fs from 'node:fs';\nimport { dirname, parse } from 'path';\nimport { makeCommand } from './make-command.js';\nimport { Parser } from './parse.js';\nimport { stripTrailingSlashes } from './strip-trailing-slashes.js';\nconst onReadEntryFunction = (opt) => {\n const onReadEntry = opt.onReadEntry;\n opt.onReadEntry =\n onReadEntry ?\n e => {\n onReadEntry(e);\n e.resume();\n }\n : e => e.resume();\n};\n// construct a filter that limits the file entries listed\n// include child entries if a dir is included\nexport const filesFilter = (opt, files) => {\n const map = new Map(files.map(f => [stripTrailingSlashes(f), true]));\n const filter = opt.filter;\n const mapHas = (file, r = '') => {\n const root = r || parse(file).root || '.';\n let ret;\n if (file === root)\n ret = false;\n else {\n const m = map.get(file);\n if (m !== undefined) {\n ret = m;\n }\n else {\n ret = mapHas(dirname(file), root);\n }\n }\n map.set(file, ret);\n return ret;\n };\n opt.filter =\n filter ?\n (file, entry) => filter(file, entry) && mapHas(stripTrailingSlashes(file))\n : file => mapHas(stripTrailingSlashes(file));\n};\nconst listFileSync = (opt) => {\n const p = new Parser(opt);\n const file = opt.file;\n let fd;\n try {\n fd = fs.openSync(file, 'r');\n const stat = fs.fstatSync(fd);\n const readSize = opt.maxReadSize || 16 * 1024 * 1024;\n if (stat.size < readSize) {\n const buf = Buffer.allocUnsafe(stat.size);\n const read = fs.readSync(fd, buf, 0, stat.size, 0);\n p.end(read === buf.byteLength ? buf : buf.subarray(0, read));\n }\n else {\n let pos = 0;\n const buf = Buffer.allocUnsafe(readSize);\n while (pos < stat.size) {\n const bytesRead = fs.readSync(fd, buf, 0, readSize, pos);\n if (bytesRead === 0)\n break;\n pos += bytesRead;\n p.write(buf.subarray(0, bytesRead));\n }\n p.end();\n }\n }\n finally {\n if (typeof fd === 'number') {\n try {\n fs.closeSync(fd);\n /* c8 ignore next */\n }\n catch (er) { }\n }\n }\n};\nconst listFile = (opt, _files) => {\n const parse = new Parser(opt);\n const readSize = opt.maxReadSize || 16 * 1024 * 1024;\n const file = opt.file;\n const p = new Promise((resolve, reject) => {\n parse.on('error', reject);\n parse.on('end', resolve);\n fs.stat(file, (er, stat) => {\n if (er) {\n reject(er);\n }\n else {\n const stream = new fsm.ReadStream(file, {\n readSize: readSize,\n size: stat.size,\n });\n stream.on('error', reject);\n stream.pipe(parse);\n }\n });\n });\n return p;\n};\nexport const list = makeCommand(listFileSync, listFile, opt => new Parser(opt), opt => new Parser(opt), (opt, files) => {\n if (files?.length)\n filesFilter(opt, files);\n if (!opt.noResume)\n onReadEntryFunction(opt);\n});\n//# sourceMappingURL=list.js.map","export const modeFix = (mode, isDir, portable) => {\n mode &= 0o7777;\n // in portable mode, use the minimum reasonable umask\n // if this system creates files with 0o664 by default\n // (as some linux distros do), then we'll write the\n // archive with 0o644 instead. Also, don't ever create\n // a file that is not readable/writable by the owner.\n if (portable) {\n mode = (mode | 0o600) & ~0o22;\n }\n // if dirs are readable, then they should be listable\n if (isDir) {\n if (mode & 0o400) {\n mode |= 0o100;\n }\n if (mode & 0o40) {\n mode |= 0o10;\n }\n if (mode & 0o4) {\n mode |= 0o1;\n }\n }\n return mode;\n};\n//# sourceMappingURL=mode-fix.js.map","// unix absolute paths are also absolute on win32, so we use this for both\nimport { win32 } from 'node:path';\nconst { isAbsolute, parse } = win32;\n// returns [root, stripped]\n// Note that windows will think that //x/y/z/a has a \"root\" of //x/y, and in\n// those cases, we want to sanitize it to x/y/z/a, not z/a, so we strip /\n// explicitly if it's the first character.\n// drive-specific relative paths on Windows get their root stripped off even\n// though they are not absolute, so `c:../foo` becomes ['c:', '../foo']\nexport const stripAbsolutePath = (path) => {\n let r = '';\n let parsed = parse(path);\n while (isAbsolute(path) || parsed.root) {\n // windows will think that //x/y/z has a \"root\" of //x/y/\n // but strip the //?/C:/ off of //?/C:/path\n const root = path.charAt(0) === '/' && path.slice(0, 4) !== '//?/' ?\n '/'\n : parsed.root;\n path = path.slice(root.length);\n r += root;\n parsed = parse(path);\n }\n return [r, path];\n};\n//# sourceMappingURL=strip-absolute-path.js.map","// When writing files on Windows, translate the characters to their\n// 0xf000 higher-encoded versions.\nconst raw = ['|', '<', '>', '?', ':'];\nconst win = raw.map(char => String.fromCharCode(0xf000 + char.charCodeAt(0)));\nconst toWin = new Map(raw.map((char, i) => [char, win[i]]));\nconst toRaw = new Map(win.map((char, i) => [char, raw[i]]));\nexport const encode = (s) => raw.reduce((s, c) => s.split(c).join(toWin.get(c)), s);\nexport const decode = (s) => win.reduce((s, c) => s.split(c).join(toRaw.get(c)), s);\n//# sourceMappingURL=winchars.js.map","import fs from 'fs';\nimport { Minipass } from 'minipass';\nimport path from 'path';\nimport { Header } from './header.js';\nimport { modeFix } from './mode-fix.js';\nimport { normalizeWindowsPath } from './normalize-windows-path.js';\nimport { dealias, } from './options.js';\nimport { Pax } from './pax.js';\nimport { stripAbsolutePath } from './strip-absolute-path.js';\nimport { stripTrailingSlashes } from './strip-trailing-slashes.js';\nimport { warnMethod, } from './warn-method.js';\nimport * as winchars from './winchars.js';\nconst prefixPath = (path, prefix) => {\n if (!prefix) {\n return normalizeWindowsPath(path);\n }\n path = normalizeWindowsPath(path).replace(/^\\.(\\/|$)/, '');\n return stripTrailingSlashes(prefix) + '/' + path;\n};\nconst maxReadSize = 16 * 1024 * 1024;\nconst PROCESS = Symbol('process');\nconst FILE = Symbol('file');\nconst DIRECTORY = Symbol('directory');\nconst SYMLINK = Symbol('symlink');\nconst HARDLINK = Symbol('hardlink');\nconst HEADER = Symbol('header');\nconst READ = Symbol('read');\nconst LSTAT = Symbol('lstat');\nconst ONLSTAT = Symbol('onlstat');\nconst ONREAD = Symbol('onread');\nconst ONREADLINK = Symbol('onreadlink');\nconst OPENFILE = Symbol('openfile');\nconst ONOPENFILE = Symbol('onopenfile');\nconst CLOSE = Symbol('close');\nconst MODE = Symbol('mode');\nconst AWAITDRAIN = Symbol('awaitDrain');\nconst ONDRAIN = Symbol('ondrain');\nconst PREFIX = Symbol('prefix');\nexport class WriteEntry extends Minipass {\n path;\n portable;\n myuid = (process.getuid && process.getuid()) || 0;\n // until node has builtin pwnam functions, this'll have to do\n myuser = process.env.USER || '';\n maxReadSize;\n linkCache;\n statCache;\n preservePaths;\n cwd;\n strict;\n mtime;\n noPax;\n noMtime;\n prefix;\n fd;\n blockLen = 0;\n blockRemain = 0;\n buf;\n pos = 0;\n remain = 0;\n length = 0;\n offset = 0;\n win32;\n absolute;\n header;\n type;\n linkpath;\n stat;\n onWriteEntry;\n #hadError = false;\n constructor(p, opt_ = {}) {\n const opt = dealias(opt_);\n super();\n this.path = normalizeWindowsPath(p);\n // suppress atime, ctime, uid, gid, uname, gname\n this.portable = !!opt.portable;\n this.maxReadSize = opt.maxReadSize || maxReadSize;\n this.linkCache = opt.linkCache || new Map();\n this.statCache = opt.statCache || new Map();\n this.preservePaths = !!opt.preservePaths;\n this.cwd = normalizeWindowsPath(opt.cwd || process.cwd());\n this.strict = !!opt.strict;\n this.noPax = !!opt.noPax;\n this.noMtime = !!opt.noMtime;\n this.mtime = opt.mtime;\n this.prefix =\n opt.prefix ? normalizeWindowsPath(opt.prefix) : undefined;\n this.onWriteEntry = opt.onWriteEntry;\n if (typeof opt.onwarn === 'function') {\n this.on('warn', opt.onwarn);\n }\n let pathWarn = false;\n if (!this.preservePaths) {\n const [root, stripped] = stripAbsolutePath(this.path);\n if (root && typeof stripped === 'string') {\n this.path = stripped;\n pathWarn = root;\n }\n }\n this.win32 = !!opt.win32 || process.platform === 'win32';\n if (this.win32) {\n // force the \\ to / normalization, since we might not *actually*\n // be on windows, but want \\ to be considered a path separator.\n this.path = winchars.decode(this.path.replace(/\\\\/g, '/'));\n p = p.replace(/\\\\/g, '/');\n }\n this.absolute = normalizeWindowsPath(opt.absolute || path.resolve(this.cwd, p));\n if (this.path === '') {\n this.path = './';\n }\n if (pathWarn) {\n this.warn('TAR_ENTRY_INFO', `stripping ${pathWarn} from absolute path`, {\n entry: this,\n path: pathWarn + this.path,\n });\n }\n const cs = this.statCache.get(this.absolute);\n if (cs) {\n this[ONLSTAT](cs);\n }\n else {\n this[LSTAT]();\n }\n }\n warn(code, message, data = {}) {\n return warnMethod(this, code, message, data);\n }\n emit(ev, ...data) {\n if (ev === 'error') {\n this.#hadError = true;\n }\n return super.emit(ev, ...data);\n }\n [LSTAT]() {\n fs.lstat(this.absolute, (er, stat) => {\n if (er) {\n return this.emit('error', er);\n }\n this[ONLSTAT](stat);\n });\n }\n [ONLSTAT](stat) {\n this.statCache.set(this.absolute, stat);\n this.stat = stat;\n if (!stat.isFile()) {\n stat.size = 0;\n }\n this.type = getType(stat);\n this.emit('stat', stat);\n this[PROCESS]();\n }\n [PROCESS]() {\n switch (this.type) {\n case 'File':\n return this[FILE]();\n case 'Directory':\n return this[DIRECTORY]();\n case 'SymbolicLink':\n return this[SYMLINK]();\n // unsupported types are ignored.\n default:\n return this.end();\n }\n }\n [MODE](mode) {\n return modeFix(mode, this.type === 'Directory', this.portable);\n }\n [PREFIX](path) {\n return prefixPath(path, this.prefix);\n }\n [HEADER]() {\n /* c8 ignore start */\n if (!this.stat) {\n throw new Error('cannot write header before stat');\n }\n /* c8 ignore stop */\n if (this.type === 'Directory' && this.portable) {\n this.noMtime = true;\n }\n this.onWriteEntry?.(this);\n this.header = new Header({\n path: this[PREFIX](this.path),\n // only apply the prefix to hard links.\n linkpath: this.type === 'Link' && this.linkpath !== undefined ?\n this[PREFIX](this.linkpath)\n : this.linkpath,\n // only the permissions and setuid/setgid/sticky bitflags\n // not the higher-order bits that specify file type\n mode: this[MODE](this.stat.mode),\n uid: this.portable ? undefined : this.stat.uid,\n gid: this.portable ? undefined : this.stat.gid,\n size: this.stat.size,\n mtime: this.noMtime ? undefined : this.mtime || this.stat.mtime,\n /* c8 ignore next */\n type: this.type === 'Unsupported' ? undefined : this.type,\n uname: this.portable ? undefined\n : this.stat.uid === this.myuid ? this.myuser\n : '',\n atime: this.portable ? undefined : this.stat.atime,\n ctime: this.portable ? undefined : this.stat.ctime,\n });\n if (this.header.encode() && !this.noPax) {\n super.write(new Pax({\n atime: this.portable ? undefined : this.header.atime,\n ctime: this.portable ? undefined : this.header.ctime,\n gid: this.portable ? undefined : this.header.gid,\n mtime: this.noMtime ? undefined : (this.mtime || this.header.mtime),\n path: this[PREFIX](this.path),\n linkpath: this.type === 'Link' && this.linkpath !== undefined ?\n this[PREFIX](this.linkpath)\n : this.linkpath,\n size: this.header.size,\n uid: this.portable ? undefined : this.header.uid,\n uname: this.portable ? undefined : this.header.uname,\n dev: this.portable ? undefined : this.stat.dev,\n ino: this.portable ? undefined : this.stat.ino,\n nlink: this.portable ? undefined : this.stat.nlink,\n }).encode());\n }\n const block = this.header?.block;\n /* c8 ignore start */\n if (!block) {\n throw new Error('failed to encode header');\n }\n /* c8 ignore stop */\n super.write(block);\n }\n [DIRECTORY]() {\n /* c8 ignore start */\n if (!this.stat) {\n throw new Error('cannot create directory entry without stat');\n }\n /* c8 ignore stop */\n if (this.path.slice(-1) !== '/') {\n this.path += '/';\n }\n this.stat.size = 0;\n this[HEADER]();\n this.end();\n }\n [SYMLINK]() {\n fs.readlink(this.absolute, (er, linkpath) => {\n if (er) {\n return this.emit('error', er);\n }\n this[ONREADLINK](linkpath);\n });\n }\n [ONREADLINK](linkpath) {\n this.linkpath = normalizeWindowsPath(linkpath);\n this[HEADER]();\n this.end();\n }\n [HARDLINK](linkpath) {\n /* c8 ignore start */\n if (!this.stat) {\n throw new Error('cannot create link entry without stat');\n }\n /* c8 ignore stop */\n this.type = 'Link';\n this.linkpath = normalizeWindowsPath(path.relative(this.cwd, linkpath));\n this.stat.size = 0;\n this[HEADER]();\n this.end();\n }\n [FILE]() {\n /* c8 ignore start */\n if (!this.stat) {\n throw new Error('cannot create file entry without stat');\n }\n /* c8 ignore stop */\n if (this.stat.nlink > 1) {\n const linkKey = `${this.stat.dev}:${this.stat.ino}`;\n const linkpath = this.linkCache.get(linkKey);\n if (linkpath?.indexOf(this.cwd) === 0) {\n return this[HARDLINK](linkpath);\n }\n this.linkCache.set(linkKey, this.absolute);\n }\n this[HEADER]();\n if (this.stat.size === 0) {\n return this.end();\n }\n this[OPENFILE]();\n }\n [OPENFILE]() {\n fs.open(this.absolute, 'r', (er, fd) => {\n if (er) {\n return this.emit('error', er);\n }\n this[ONOPENFILE](fd);\n });\n }\n [ONOPENFILE](fd) {\n this.fd = fd;\n if (this.#hadError) {\n return this[CLOSE]();\n }\n /* c8 ignore start */\n if (!this.stat) {\n throw new Error('should stat before calling onopenfile');\n }\n /* c8 ignore start */\n this.blockLen = 512 * Math.ceil(this.stat.size / 512);\n this.blockRemain = this.blockLen;\n const bufLen = Math.min(this.blockLen, this.maxReadSize);\n this.buf = Buffer.allocUnsafe(bufLen);\n this.offset = 0;\n this.pos = 0;\n this.remain = this.stat.size;\n this.length = this.buf.length;\n this[READ]();\n }\n [READ]() {\n const { fd, buf, offset, length, pos } = this;\n if (fd === undefined || buf === undefined) {\n throw new Error('cannot read file without first opening');\n }\n fs.read(fd, buf, offset, length, pos, (er, bytesRead) => {\n if (er) {\n // ignoring the error from close(2) is a bad practice, but at\n // this point we already have an error, don't need another one\n return this[CLOSE](() => this.emit('error', er));\n }\n this[ONREAD](bytesRead);\n });\n }\n /* c8 ignore start */\n [CLOSE](cb = () => { }) {\n /* c8 ignore stop */\n if (this.fd !== undefined)\n fs.close(this.fd, cb);\n }\n [ONREAD](bytesRead) {\n if (bytesRead <= 0 && this.remain > 0) {\n const er = Object.assign(new Error('encountered unexpected EOF'), {\n path: this.absolute,\n syscall: 'read',\n code: 'EOF',\n });\n return this[CLOSE](() => this.emit('error', er));\n }\n if (bytesRead > this.remain) {\n const er = Object.assign(new Error('did not encounter expected EOF'), {\n path: this.absolute,\n syscall: 'read',\n code: 'EOF',\n });\n return this[CLOSE](() => this.emit('error', er));\n }\n /* c8 ignore start */\n if (!this.buf) {\n throw new Error('should have created buffer prior to reading');\n }\n /* c8 ignore stop */\n // null out the rest of the buffer, if we could fit the block padding\n // at the end of this loop, we've incremented bytesRead and this.remain\n // to be incremented up to the blockRemain level, as if we had expected\n // to get a null-padded file, and read it until the end. then we will\n // decrement both remain and blockRemain by bytesRead, and know that we\n // reached the expected EOF, without any null buffer to append.\n if (bytesRead === this.remain) {\n for (let i = bytesRead; i < this.length && bytesRead < this.blockRemain; i++) {\n this.buf[i + this.offset] = 0;\n bytesRead++;\n this.remain++;\n }\n }\n const chunk = this.offset === 0 && bytesRead === this.buf.length ?\n this.buf\n : this.buf.subarray(this.offset, this.offset + bytesRead);\n const flushed = this.write(chunk);\n if (!flushed) {\n this[AWAITDRAIN](() => this[ONDRAIN]());\n }\n else {\n this[ONDRAIN]();\n }\n }\n [AWAITDRAIN](cb) {\n this.once('drain', cb);\n }\n write(chunk, encoding, cb) {\n /* c8 ignore start - just junk to comply with NodeJS.WritableStream */\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = undefined;\n }\n if (typeof chunk === 'string') {\n chunk = Buffer.from(chunk, typeof encoding === 'string' ? encoding : 'utf8');\n }\n /* c8 ignore stop */\n if (this.blockRemain < chunk.length) {\n const er = Object.assign(new Error('writing more data than expected'), {\n path: this.absolute,\n });\n return this.emit('error', er);\n }\n this.remain -= chunk.length;\n this.blockRemain -= chunk.length;\n this.pos += chunk.length;\n this.offset += chunk.length;\n return super.write(chunk, null, cb);\n }\n [ONDRAIN]() {\n if (!this.remain) {\n if (this.blockRemain) {\n super.write(Buffer.alloc(this.blockRemain));\n }\n return this[CLOSE](er => er ? this.emit('error', er) : this.end());\n }\n /* c8 ignore start */\n if (!this.buf) {\n throw new Error('buffer lost somehow in ONDRAIN');\n }\n /* c8 ignore stop */\n if (this.offset >= this.length) {\n // if we only have a smaller bit left to read, alloc a smaller buffer\n // otherwise, keep it the same length it was before.\n this.buf = Buffer.allocUnsafe(Math.min(this.blockRemain, this.buf.length));\n this.offset = 0;\n }\n this.length = this.buf.length - this.offset;\n this[READ]();\n }\n}\nexport class WriteEntrySync extends WriteEntry {\n sync = true;\n [LSTAT]() {\n this[ONLSTAT](fs.lstatSync(this.absolute));\n }\n [SYMLINK]() {\n this[ONREADLINK](fs.readlinkSync(this.absolute));\n }\n [OPENFILE]() {\n this[ONOPENFILE](fs.openSync(this.absolute, 'r'));\n }\n [READ]() {\n let threw = true;\n try {\n const { fd, buf, offset, length, pos } = this;\n /* c8 ignore start */\n if (fd === undefined || buf === undefined) {\n throw new Error('fd and buf must be set in READ method');\n }\n /* c8 ignore stop */\n const bytesRead = fs.readSync(fd, buf, offset, length, pos);\n this[ONREAD](bytesRead);\n threw = false;\n }\n finally {\n // ignoring the error from close(2) is a bad practice, but at\n // this point we already have an error, don't need another one\n if (threw) {\n try {\n this[CLOSE](() => { });\n }\n catch (er) { }\n }\n }\n }\n [AWAITDRAIN](cb) {\n cb();\n }\n /* c8 ignore start */\n [CLOSE](cb = () => { }) {\n /* c8 ignore stop */\n if (this.fd !== undefined)\n fs.closeSync(this.fd);\n cb();\n }\n}\nexport class WriteEntryTar extends Minipass {\n blockLen = 0;\n blockRemain = 0;\n buf = 0;\n pos = 0;\n remain = 0;\n length = 0;\n preservePaths;\n portable;\n strict;\n noPax;\n noMtime;\n readEntry;\n type;\n prefix;\n path;\n mode;\n uid;\n gid;\n uname;\n gname;\n header;\n mtime;\n atime;\n ctime;\n linkpath;\n size;\n onWriteEntry;\n warn(code, message, data = {}) {\n return warnMethod(this, code, message, data);\n }\n constructor(readEntry, opt_ = {}) {\n const opt = dealias(opt_);\n super();\n this.preservePaths = !!opt.preservePaths;\n this.portable = !!opt.portable;\n this.strict = !!opt.strict;\n this.noPax = !!opt.noPax;\n this.noMtime = !!opt.noMtime;\n this.onWriteEntry = opt.onWriteEntry;\n this.readEntry = readEntry;\n const { type } = readEntry;\n /* c8 ignore start */\n if (type === 'Unsupported') {\n throw new Error('writing entry that should be ignored');\n }\n /* c8 ignore stop */\n this.type = type;\n if (this.type === 'Directory' && this.portable) {\n this.noMtime = true;\n }\n this.prefix = opt.prefix;\n this.path = normalizeWindowsPath(readEntry.path);\n this.mode =\n readEntry.mode !== undefined ?\n this[MODE](readEntry.mode)\n : undefined;\n this.uid = this.portable ? undefined : readEntry.uid;\n this.gid = this.portable ? undefined : readEntry.gid;\n this.uname = this.portable ? undefined : readEntry.uname;\n this.gname = this.portable ? undefined : readEntry.gname;\n this.size = readEntry.size;\n this.mtime =\n this.noMtime ? undefined : opt.mtime || readEntry.mtime;\n this.atime = this.portable ? undefined : readEntry.atime;\n this.ctime = this.portable ? undefined : readEntry.ctime;\n this.linkpath =\n readEntry.linkpath !== undefined ?\n normalizeWindowsPath(readEntry.linkpath)\n : undefined;\n if (typeof opt.onwarn === 'function') {\n this.on('warn', opt.onwarn);\n }\n let pathWarn = false;\n if (!this.preservePaths) {\n const [root, stripped] = stripAbsolutePath(this.path);\n if (root && typeof stripped === 'string') {\n this.path = stripped;\n pathWarn = root;\n }\n }\n this.remain = readEntry.size;\n this.blockRemain = readEntry.startBlockSize;\n this.onWriteEntry?.(this);\n this.header = new Header({\n path: this[PREFIX](this.path),\n linkpath: this.type === 'Link' && this.linkpath !== undefined ?\n this[PREFIX](this.linkpath)\n : this.linkpath,\n // only the permissions and setuid/setgid/sticky bitflags\n // not the higher-order bits that specify file type\n mode: this.mode,\n uid: this.portable ? undefined : this.uid,\n gid: this.portable ? undefined : this.gid,\n size: this.size,\n mtime: this.noMtime ? undefined : this.mtime,\n type: this.type,\n uname: this.portable ? undefined : this.uname,\n atime: this.portable ? undefined : this.atime,\n ctime: this.portable ? undefined : this.ctime,\n });\n if (pathWarn) {\n this.warn('TAR_ENTRY_INFO', `stripping ${pathWarn} from absolute path`, {\n entry: this,\n path: pathWarn + this.path,\n });\n }\n if (this.header.encode() && !this.noPax) {\n super.write(new Pax({\n atime: this.portable ? undefined : this.atime,\n ctime: this.portable ? undefined : this.ctime,\n gid: this.portable ? undefined : this.gid,\n mtime: this.noMtime ? undefined : this.mtime,\n path: this[PREFIX](this.path),\n linkpath: this.type === 'Link' && this.linkpath !== undefined ?\n this[PREFIX](this.linkpath)\n : this.linkpath,\n size: this.size,\n uid: this.portable ? undefined : this.uid,\n uname: this.portable ? undefined : this.uname,\n dev: this.portable ? undefined : this.readEntry.dev,\n ino: this.portable ? undefined : this.readEntry.ino,\n nlink: this.portable ? undefined : this.readEntry.nlink,\n }).encode());\n }\n const b = this.header?.block;\n /* c8 ignore start */\n if (!b)\n throw new Error('failed to encode header');\n /* c8 ignore stop */\n super.write(b);\n readEntry.pipe(this);\n }\n [PREFIX](path) {\n return prefixPath(path, this.prefix);\n }\n [MODE](mode) {\n return modeFix(mode, this.type === 'Directory', this.portable);\n }\n write(chunk, encoding, cb) {\n /* c8 ignore start - just junk to comply with NodeJS.WritableStream */\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = undefined;\n }\n if (typeof chunk === 'string') {\n chunk = Buffer.from(chunk, typeof encoding === 'string' ? encoding : 'utf8');\n }\n /* c8 ignore stop */\n const writeLen = chunk.length;\n if (writeLen > this.blockRemain) {\n throw new Error('writing more to entry than is appropriate');\n }\n this.blockRemain -= writeLen;\n return super.write(chunk, cb);\n }\n end(chunk, encoding, cb) {\n if (this.blockRemain) {\n super.write(Buffer.alloc(this.blockRemain));\n }\n /* c8 ignore start - just junk to comply with NodeJS.WritableStream */\n if (typeof chunk === 'function') {\n cb = chunk;\n encoding = undefined;\n chunk = undefined;\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = undefined;\n }\n if (typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding ?? 'utf8');\n }\n if (cb)\n this.once('finish', cb);\n chunk ? super.end(chunk, cb) : super.end(cb);\n /* c8 ignore stop */\n return this;\n }\n}\nconst getType = (stat) => stat.isFile() ? 'File'\n : stat.isDirectory() ? 'Directory'\n : stat.isSymbolicLink() ? 'SymbolicLink'\n : 'Unsupported';\n//# sourceMappingURL=write-entry.js.map","export class Yallist {\n tail;\n head;\n length = 0;\n static create(list = []) {\n return new Yallist(list);\n }\n constructor(list = []) {\n for (const item of list) {\n this.push(item);\n }\n }\n *[Symbol.iterator]() {\n for (let walker = this.head; walker; walker = walker.next) {\n yield walker.value;\n }\n }\n removeNode(node) {\n if (node.list !== this) {\n throw new Error('removing node which does not belong to this list');\n }\n const next = node.next;\n const prev = node.prev;\n if (next) {\n next.prev = prev;\n }\n if (prev) {\n prev.next = next;\n }\n if (node === this.head) {\n this.head = next;\n }\n if (node === this.tail) {\n this.tail = prev;\n }\n this.length--;\n node.next = undefined;\n node.prev = undefined;\n node.list = undefined;\n return next;\n }\n unshiftNode(node) {\n if (node === this.head) {\n return;\n }\n if (node.list) {\n node.list.removeNode(node);\n }\n const head = this.head;\n node.list = this;\n node.next = head;\n if (head) {\n head.prev = node;\n }\n this.head = node;\n if (!this.tail) {\n this.tail = node;\n }\n this.length++;\n }\n pushNode(node) {\n if (node === this.tail) {\n return;\n }\n if (node.list) {\n node.list.removeNode(node);\n }\n const tail = this.tail;\n node.list = this;\n node.prev = tail;\n if (tail) {\n tail.next = node;\n }\n this.tail = node;\n if (!this.head) {\n this.head = node;\n }\n this.length++;\n }\n push(...args) {\n for (let i = 0, l = args.length; i < l; i++) {\n push(this, args[i]);\n }\n return this.length;\n }\n unshift(...args) {\n for (var i = 0, l = args.length; i < l; i++) {\n unshift(this, args[i]);\n }\n return this.length;\n }\n pop() {\n if (!this.tail) {\n return undefined;\n }\n const res = this.tail.value;\n const t = this.tail;\n this.tail = this.tail.prev;\n if (this.tail) {\n this.tail.next = undefined;\n }\n else {\n this.head = undefined;\n }\n t.list = undefined;\n this.length--;\n return res;\n }\n shift() {\n if (!this.head) {\n return undefined;\n }\n const res = this.head.value;\n const h = this.head;\n this.head = this.head.next;\n if (this.head) {\n this.head.prev = undefined;\n }\n else {\n this.tail = undefined;\n }\n h.list = undefined;\n this.length--;\n return res;\n }\n forEach(fn, thisp) {\n thisp = thisp || this;\n for (let walker = this.head, i = 0; !!walker; i++) {\n fn.call(thisp, walker.value, i, this);\n walker = walker.next;\n }\n }\n forEachReverse(fn, thisp) {\n thisp = thisp || this;\n for (let walker = this.tail, i = this.length - 1; !!walker; i--) {\n fn.call(thisp, walker.value, i, this);\n walker = walker.prev;\n }\n }\n get(n) {\n let i = 0;\n let walker = this.head;\n for (; !!walker && i < n; i++) {\n walker = walker.next;\n }\n if (i === n && !!walker) {\n return walker.value;\n }\n }\n getReverse(n) {\n let i = 0;\n let walker = this.tail;\n for (; !!walker && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.prev;\n }\n if (i === n && !!walker) {\n return walker.value;\n }\n }\n map(fn, thisp) {\n thisp = thisp || this;\n const res = new Yallist();\n for (let walker = this.head; !!walker;) {\n res.push(fn.call(thisp, walker.value, this));\n walker = walker.next;\n }\n return res;\n }\n mapReverse(fn, thisp) {\n thisp = thisp || this;\n var res = new Yallist();\n for (let walker = this.tail; !!walker;) {\n res.push(fn.call(thisp, walker.value, this));\n walker = walker.prev;\n }\n return res;\n }\n reduce(fn, initial) {\n let acc;\n let walker = this.head;\n if (arguments.length > 1) {\n acc = initial;\n }\n else if (this.head) {\n walker = this.head.next;\n acc = this.head.value;\n }\n else {\n throw new TypeError('Reduce of empty list with no initial value');\n }\n for (var i = 0; !!walker; i++) {\n acc = fn(acc, walker.value, i);\n walker = walker.next;\n }\n return acc;\n }\n reduceReverse(fn, initial) {\n let acc;\n let walker = this.tail;\n if (arguments.length > 1) {\n acc = initial;\n }\n else if (this.tail) {\n walker = this.tail.prev;\n acc = this.tail.value;\n }\n else {\n throw new TypeError('Reduce of empty list with no initial value');\n }\n for (let i = this.length - 1; !!walker; i--) {\n acc = fn(acc, walker.value, i);\n walker = walker.prev;\n }\n return acc;\n }\n toArray() {\n const arr = new Array(this.length);\n for (let i = 0, walker = this.head; !!walker; i++) {\n arr[i] = walker.value;\n walker = walker.next;\n }\n return arr;\n }\n toArrayReverse() {\n const arr = new Array(this.length);\n for (let i = 0, walker = this.tail; !!walker; i++) {\n arr[i] = walker.value;\n walker = walker.prev;\n }\n return arr;\n }\n slice(from = 0, to = this.length) {\n if (to < 0) {\n to += this.length;\n }\n if (from < 0) {\n from += this.length;\n }\n const ret = new Yallist();\n if (to < from || to < 0) {\n return ret;\n }\n if (from < 0) {\n from = 0;\n }\n if (to > this.length) {\n to = this.length;\n }\n let walker = this.head;\n let i = 0;\n for (i = 0; !!walker && i < from; i++) {\n walker = walker.next;\n }\n for (; !!walker && i < to; i++, walker = walker.next) {\n ret.push(walker.value);\n }\n return ret;\n }\n sliceReverse(from = 0, to = this.length) {\n if (to < 0) {\n to += this.length;\n }\n if (from < 0) {\n from += this.length;\n }\n const ret = new Yallist();\n if (to < from || to < 0) {\n return ret;\n }\n if (from < 0) {\n from = 0;\n }\n if (to > this.length) {\n to = this.length;\n }\n let i = this.length;\n let walker = this.tail;\n for (; !!walker && i > to; i--) {\n walker = walker.prev;\n }\n for (; !!walker && i > from; i--, walker = walker.prev) {\n ret.push(walker.value);\n }\n return ret;\n }\n splice(start, deleteCount = 0, ...nodes) {\n if (start > this.length) {\n start = this.length - 1;\n }\n if (start < 0) {\n start = this.length + start;\n }\n let walker = this.head;\n for (let i = 0; !!walker && i < start; i++) {\n walker = walker.next;\n }\n const ret = [];\n for (let i = 0; !!walker && i < deleteCount; i++) {\n ret.push(walker.value);\n walker = this.removeNode(walker);\n }\n if (!walker) {\n walker = this.tail;\n }\n else if (walker !== this.tail) {\n walker = walker.prev;\n }\n for (const v of nodes) {\n walker = insertAfter(this, walker, v);\n }\n return ret;\n }\n reverse() {\n const head = this.head;\n const tail = this.tail;\n for (let walker = head; !!walker; walker = walker.prev) {\n const p = walker.prev;\n walker.prev = walker.next;\n walker.next = p;\n }\n this.head = tail;\n this.tail = head;\n return this;\n }\n}\n// insertAfter undefined means \"make the node the new head of list\"\nfunction insertAfter(self, node, value) {\n const prev = node;\n const next = node ? node.next : self.head;\n const inserted = new Node(value, prev, next, self);\n if (inserted.next === undefined) {\n self.tail = inserted;\n }\n if (inserted.prev === undefined) {\n self.head = inserted;\n }\n self.length++;\n return inserted;\n}\nfunction push(self, item) {\n self.tail = new Node(item, self.tail, undefined, self);\n if (!self.head) {\n self.head = self.tail;\n }\n self.length++;\n}\nfunction unshift(self, item) {\n self.head = new Node(item, undefined, self.head, self);\n if (!self.tail) {\n self.tail = self.head;\n }\n self.length++;\n}\nexport class Node {\n list;\n next;\n prev;\n value;\n constructor(value, prev, next, list) {\n this.list = list;\n this.value = value;\n if (prev) {\n prev.next = this;\n this.prev = prev;\n }\n else {\n this.prev = undefined;\n }\n if (next) {\n next.prev = this;\n this.next = next;\n }\n else {\n this.next = undefined;\n }\n }\n}\n//# sourceMappingURL=index.js.map","// A readable tar stream creator\n// Technically, this is a transform stream that you write paths into,\n// and tar format comes out of.\n// The `add()` method is like `write()` but returns this,\n// and end() return `this` as well, so you can\n// do `new Pack(opt).add('files').add('dir').end().pipe(output)\n// You could also do something like:\n// streamOfPaths().pipe(new Pack()).pipe(new fs.WriteStream('out.tar'))\nimport fs from 'fs';\nimport { WriteEntry, WriteEntrySync, WriteEntryTar, } from './write-entry.js';\nexport class PackJob {\n path;\n absolute;\n entry;\n stat;\n readdir;\n pending = false;\n ignore = false;\n piped = false;\n constructor(path, absolute) {\n this.path = path || './';\n this.absolute = absolute;\n }\n}\nimport { Minipass } from 'minipass';\nimport * as zlib from 'minizlib';\nimport { Yallist } from 'yallist';\nimport { ReadEntry } from './read-entry.js';\nimport { warnMethod, } from './warn-method.js';\nconst EOF = Buffer.alloc(1024);\nconst ONSTAT = Symbol('onStat');\nconst ENDED = Symbol('ended');\nconst QUEUE = Symbol('queue');\nconst CURRENT = Symbol('current');\nconst PROCESS = Symbol('process');\nconst PROCESSING = Symbol('processing');\nconst PROCESSJOB = Symbol('processJob');\nconst JOBS = Symbol('jobs');\nconst JOBDONE = Symbol('jobDone');\nconst ADDFSENTRY = Symbol('addFSEntry');\nconst ADDTARENTRY = Symbol('addTarEntry');\nconst STAT = Symbol('stat');\nconst READDIR = Symbol('readdir');\nconst ONREADDIR = Symbol('onreaddir');\nconst PIPE = Symbol('pipe');\nconst ENTRY = Symbol('entry');\nconst ENTRYOPT = Symbol('entryOpt');\nconst WRITEENTRYCLASS = Symbol('writeEntryClass');\nconst WRITE = Symbol('write');\nconst ONDRAIN = Symbol('ondrain');\nimport path from 'path';\nimport { normalizeWindowsPath } from './normalize-windows-path.js';\nexport class Pack extends Minipass {\n opt;\n cwd;\n maxReadSize;\n preservePaths;\n strict;\n noPax;\n prefix;\n linkCache;\n statCache;\n file;\n portable;\n zip;\n readdirCache;\n noDirRecurse;\n follow;\n noMtime;\n mtime;\n filter;\n jobs;\n [WRITEENTRYCLASS];\n onWriteEntry;\n // Note: we actually DO need a linked list here, because we\n // shift() to update the head of the list where we start, but still\n // while that happens, need to know what the next item in the queue\n // will be. Since we do multiple jobs in parallel, it's not as simple\n // as just an Array.shift(), since that would lose the information about\n // the next job in the list. We could add a .next field on the PackJob\n // class, but then we'd have to be tracking the tail of the queue the\n // whole time, and Yallist just does that for us anyway.\n [QUEUE];\n [JOBS] = 0;\n [PROCESSING] = false;\n [ENDED] = false;\n constructor(opt = {}) {\n //@ts-ignore\n super();\n this.opt = opt;\n this.file = opt.file || '';\n this.cwd = opt.cwd || process.cwd();\n this.maxReadSize = opt.maxReadSize;\n this.preservePaths = !!opt.preservePaths;\n this.strict = !!opt.strict;\n this.noPax = !!opt.noPax;\n this.prefix = normalizeWindowsPath(opt.prefix || '');\n this.linkCache = opt.linkCache || new Map();\n this.statCache = opt.statCache || new Map();\n this.readdirCache = opt.readdirCache || new Map();\n this.onWriteEntry = opt.onWriteEntry;\n this[WRITEENTRYCLASS] = WriteEntry;\n if (typeof opt.onwarn === 'function') {\n this.on('warn', opt.onwarn);\n }\n this.portable = !!opt.portable;\n if (opt.gzip || opt.brotli || opt.zstd) {\n if ((opt.gzip ? 1 : 0) +\n (opt.brotli ? 1 : 0) +\n (opt.zstd ? 1 : 0) >\n 1) {\n throw new TypeError('gzip, brotli, zstd are mutually exclusive');\n }\n if (opt.gzip) {\n if (typeof opt.gzip !== 'object') {\n opt.gzip = {};\n }\n if (this.portable) {\n opt.gzip.portable = true;\n }\n this.zip = new zlib.Gzip(opt.gzip);\n }\n if (opt.brotli) {\n if (typeof opt.brotli !== 'object') {\n opt.brotli = {};\n }\n this.zip = new zlib.BrotliCompress(opt.brotli);\n }\n if (opt.zstd) {\n if (typeof opt.zstd !== 'object') {\n opt.zstd = {};\n }\n this.zip = new zlib.ZstdCompress(opt.zstd);\n }\n /* c8 ignore next */\n if (!this.zip)\n throw new Error('impossible');\n const zip = this.zip;\n zip.on('data', chunk => super.write(chunk));\n zip.on('end', () => super.end());\n zip.on('drain', () => this[ONDRAIN]());\n this.on('resume', () => zip.resume());\n }\n else {\n this.on('drain', this[ONDRAIN]);\n }\n this.noDirRecurse = !!opt.noDirRecurse;\n this.follow = !!opt.follow;\n this.noMtime = !!opt.noMtime;\n if (opt.mtime)\n this.mtime = opt.mtime;\n this.filter =\n typeof opt.filter === 'function' ? opt.filter : () => true;\n this[QUEUE] = new Yallist();\n this[JOBS] = 0;\n this.jobs = Number(opt.jobs) || 4;\n this[PROCESSING] = false;\n this[ENDED] = false;\n }\n [WRITE](chunk) {\n return super.write(chunk);\n }\n add(path) {\n this.write(path);\n return this;\n }\n end(path, encoding, cb) {\n /* c8 ignore start */\n if (typeof path === 'function') {\n cb = path;\n path = undefined;\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = undefined;\n }\n /* c8 ignore stop */\n if (path) {\n this.add(path);\n }\n this[ENDED] = true;\n this[PROCESS]();\n /* c8 ignore next */\n if (cb)\n cb();\n return this;\n }\n write(path) {\n if (this[ENDED]) {\n throw new Error('write after end');\n }\n if (path instanceof ReadEntry) {\n this[ADDTARENTRY](path);\n }\n else {\n this[ADDFSENTRY](path);\n }\n return this.flowing;\n }\n [ADDTARENTRY](p) {\n const absolute = normalizeWindowsPath(path.resolve(this.cwd, p.path));\n // in this case, we don't have to wait for the stat\n if (!this.filter(p.path, p)) {\n p.resume();\n }\n else {\n const job = new PackJob(p.path, absolute);\n job.entry = new WriteEntryTar(p, this[ENTRYOPT](job));\n job.entry.on('end', () => this[JOBDONE](job));\n this[JOBS] += 1;\n this[QUEUE].push(job);\n }\n this[PROCESS]();\n }\n [ADDFSENTRY](p) {\n const absolute = normalizeWindowsPath(path.resolve(this.cwd, p));\n this[QUEUE].push(new PackJob(p, absolute));\n this[PROCESS]();\n }\n [STAT](job) {\n job.pending = true;\n this[JOBS] += 1;\n const stat = this.follow ? 'stat' : 'lstat';\n fs[stat](job.absolute, (er, stat) => {\n job.pending = false;\n this[JOBS] -= 1;\n if (er) {\n this.emit('error', er);\n }\n else {\n this[ONSTAT](job, stat);\n }\n });\n }\n [ONSTAT](job, stat) {\n this.statCache.set(job.absolute, stat);\n job.stat = stat;\n // now we have the stat, we can filter it.\n if (!this.filter(job.path, stat)) {\n job.ignore = true;\n }\n this[PROCESS]();\n }\n [READDIR](job) {\n job.pending = true;\n this[JOBS] += 1;\n fs.readdir(job.absolute, (er, entries) => {\n job.pending = false;\n this[JOBS] -= 1;\n if (er) {\n return this.emit('error', er);\n }\n this[ONREADDIR](job, entries);\n });\n }\n [ONREADDIR](job, entries) {\n this.readdirCache.set(job.absolute, entries);\n job.readdir = entries;\n this[PROCESS]();\n }\n [PROCESS]() {\n if (this[PROCESSING]) {\n return;\n }\n this[PROCESSING] = true;\n for (let w = this[QUEUE].head; !!w && this[JOBS] < this.jobs; w = w.next) {\n this[PROCESSJOB](w.value);\n if (w.value.ignore) {\n const p = w.next;\n this[QUEUE].removeNode(w);\n w.next = p;\n }\n }\n this[PROCESSING] = false;\n if (this[ENDED] && !this[QUEUE].length && this[JOBS] === 0) {\n if (this.zip) {\n this.zip.end(EOF);\n }\n else {\n super.write(EOF);\n super.end();\n }\n }\n }\n get [CURRENT]() {\n return this[QUEUE] && this[QUEUE].head && this[QUEUE].head.value;\n }\n [JOBDONE](_job) {\n this[QUEUE].shift();\n this[JOBS] -= 1;\n this[PROCESS]();\n }\n [PROCESSJOB](job) {\n if (job.pending) {\n return;\n }\n if (job.entry) {\n if (job === this[CURRENT] && !job.piped) {\n this[PIPE](job);\n }\n return;\n }\n if (!job.stat) {\n const sc = this.statCache.get(job.absolute);\n if (sc) {\n this[ONSTAT](job, sc);\n }\n else {\n this[STAT](job);\n }\n }\n if (!job.stat) {\n return;\n }\n // filtered out!\n if (job.ignore) {\n return;\n }\n if (!this.noDirRecurse &&\n job.stat.isDirectory() &&\n !job.readdir) {\n const rc = this.readdirCache.get(job.absolute);\n if (rc) {\n this[ONREADDIR](job, rc);\n }\n else {\n this[READDIR](job);\n }\n if (!job.readdir) {\n return;\n }\n }\n // we know it doesn't have an entry, because that got checked above\n job.entry = this[ENTRY](job);\n if (!job.entry) {\n job.ignore = true;\n return;\n }\n if (job === this[CURRENT] && !job.piped) {\n this[PIPE](job);\n }\n }\n [ENTRYOPT](job) {\n return {\n onwarn: (code, msg, data) => this.warn(code, msg, data),\n noPax: this.noPax,\n cwd: this.cwd,\n absolute: job.absolute,\n preservePaths: this.preservePaths,\n maxReadSize: this.maxReadSize,\n strict: this.strict,\n portable: this.portable,\n linkCache: this.linkCache,\n statCache: this.statCache,\n noMtime: this.noMtime,\n mtime: this.mtime,\n prefix: this.prefix,\n onWriteEntry: this.onWriteEntry,\n };\n }\n [ENTRY](job) {\n this[JOBS] += 1;\n try {\n const e = new this[WRITEENTRYCLASS](job.path, this[ENTRYOPT](job));\n return e\n .on('end', () => this[JOBDONE](job))\n .on('error', er => this.emit('error', er));\n }\n catch (er) {\n this.emit('error', er);\n }\n }\n [ONDRAIN]() {\n if (this[CURRENT] && this[CURRENT].entry) {\n this[CURRENT].entry.resume();\n }\n }\n // like .pipe() but using super, because our write() is special\n [PIPE](job) {\n job.piped = true;\n if (job.readdir) {\n job.readdir.forEach(entry => {\n const p = job.path;\n const base = p === './' ? '' : p.replace(/\\/*$/, '/');\n this[ADDFSENTRY](base + entry);\n });\n }\n const source = job.entry;\n const zip = this.zip;\n /* c8 ignore start */\n if (!source)\n throw new Error('cannot pipe without source');\n /* c8 ignore stop */\n if (zip) {\n source.on('data', chunk => {\n if (!zip.write(chunk)) {\n source.pause();\n }\n });\n }\n else {\n source.on('data', chunk => {\n if (!super.write(chunk)) {\n source.pause();\n }\n });\n }\n }\n pause() {\n if (this.zip) {\n this.zip.pause();\n }\n return super.pause();\n }\n warn(code, message, data = {}) {\n warnMethod(this, code, message, data);\n }\n}\nexport class PackSync extends Pack {\n sync = true;\n constructor(opt) {\n super(opt);\n this[WRITEENTRYCLASS] = WriteEntrySync;\n }\n // pause/resume are no-ops in sync streams.\n pause() { }\n resume() { }\n [STAT](job) {\n const stat = this.follow ? 'statSync' : 'lstatSync';\n this[ONSTAT](job, fs[stat](job.absolute));\n }\n [READDIR](job) {\n this[ONREADDIR](job, fs.readdirSync(job.absolute));\n }\n // gotta get it all in this tick\n [PIPE](job) {\n const source = job.entry;\n const zip = this.zip;\n if (job.readdir) {\n job.readdir.forEach(entry => {\n const p = job.path;\n const base = p === './' ? '' : p.replace(/\\/*$/, '/');\n this[ADDFSENTRY](base + entry);\n });\n }\n /* c8 ignore start */\n if (!source)\n throw new Error('Cannot pipe without source');\n /* c8 ignore stop */\n if (zip) {\n source.on('data', chunk => {\n zip.write(chunk);\n });\n }\n else {\n source.on('data', chunk => {\n super[WRITE](chunk);\n });\n }\n }\n}\n//# sourceMappingURL=pack.js.map","import { WriteStream, WriteStreamSync } from '@isaacs/fs-minipass';\nimport path from 'node:path';\nimport { list } from './list.js';\nimport { makeCommand } from './make-command.js';\nimport { Pack, PackSync } from './pack.js';\nconst createFileSync = (opt, files) => {\n const p = new PackSync(opt);\n const stream = new WriteStreamSync(opt.file, {\n mode: opt.mode || 0o666,\n });\n p.pipe(stream);\n addFilesSync(p, files);\n};\nconst createFile = (opt, files) => {\n const p = new Pack(opt);\n const stream = new WriteStream(opt.file, {\n mode: opt.mode || 0o666,\n });\n p.pipe(stream);\n const promise = new Promise((res, rej) => {\n stream.on('error', rej);\n stream.on('close', res);\n p.on('error', rej);\n });\n addFilesAsync(p, files);\n return promise;\n};\nconst addFilesSync = (p, files) => {\n files.forEach(file => {\n if (file.charAt(0) === '@') {\n list({\n file: path.resolve(p.cwd, file.slice(1)),\n sync: true,\n noResume: true,\n onReadEntry: entry => p.add(entry),\n });\n }\n else {\n p.add(file);\n }\n });\n p.end();\n};\nconst addFilesAsync = async (p, files) => {\n for (let i = 0; i < files.length; i++) {\n const file = String(files[i]);\n if (file.charAt(0) === '@') {\n await list({\n file: path.resolve(String(p.cwd), file.slice(1)),\n noResume: true,\n onReadEntry: entry => {\n p.add(entry);\n },\n });\n }\n else {\n p.add(file);\n }\n }\n p.end();\n};\nconst createSync = (opt, files) => {\n const p = new PackSync(opt);\n addFilesSync(p, files);\n return p;\n};\nconst createAsync = (opt, files) => {\n const p = new Pack(opt);\n addFilesAsync(p, files);\n return p;\n};\nexport const create = makeCommand(createFileSync, createFile, createSync, createAsync, (_opt, files) => {\n if (!files?.length) {\n throw new TypeError('no paths specified to add to archive');\n }\n});\n//# sourceMappingURL=create.js.map","// Get the appropriate flag to use for creating files\n// We use fmap on Windows platforms for files less than\n// 512kb. This is a fairly low limit, but avoids making\n// things slower in some cases. Since most of what this\n// library is used for is extracting tarballs of many\n// relatively small files in npm packages and the like,\n// it can be a big boost on Windows platforms.\nimport fs from 'fs';\nconst platform = process.env.__FAKE_PLATFORM__ || process.platform;\nconst isWindows = platform === 'win32';\n/* c8 ignore start */\nconst { O_CREAT, O_TRUNC, O_WRONLY } = fs.constants;\nconst UV_FS_O_FILEMAP = Number(process.env.__FAKE_FS_O_FILENAME__) ||\n fs.constants.UV_FS_O_FILEMAP ||\n 0;\n/* c8 ignore stop */\nconst fMapEnabled = isWindows && !!UV_FS_O_FILEMAP;\nconst fMapLimit = 512 * 1024;\nconst fMapFlag = UV_FS_O_FILEMAP | O_TRUNC | O_CREAT | O_WRONLY;\nexport const getWriteFlag = !fMapEnabled ?\n () => 'w'\n : (size) => (size < fMapLimit ? fMapFlag : 'w');\n//# sourceMappingURL=get-write-flag.js.map","import fs from 'node:fs';\nimport path from 'node:path';\nconst lchownSync = (path, uid, gid) => {\n try {\n return fs.lchownSync(path, uid, gid);\n }\n catch (er) {\n if (er?.code !== 'ENOENT')\n throw er;\n }\n};\nconst chown = (cpath, uid, gid, cb) => {\n fs.lchown(cpath, uid, gid, er => {\n // Skip ENOENT error\n cb(er && er?.code !== 'ENOENT' ? er : null);\n });\n};\nconst chownrKid = (p, child, uid, gid, cb) => {\n if (child.isDirectory()) {\n chownr(path.resolve(p, child.name), uid, gid, (er) => {\n if (er)\n return cb(er);\n const cpath = path.resolve(p, child.name);\n chown(cpath, uid, gid, cb);\n });\n }\n else {\n const cpath = path.resolve(p, child.name);\n chown(cpath, uid, gid, cb);\n }\n};\nexport const chownr = (p, uid, gid, cb) => {\n fs.readdir(p, { withFileTypes: true }, (er, children) => {\n // any error other than ENOTDIR or ENOTSUP means it's not readable,\n // or doesn't exist. give up.\n if (er) {\n if (er.code === 'ENOENT')\n return cb();\n else if (er.code !== 'ENOTDIR' && er.code !== 'ENOTSUP')\n return cb(er);\n }\n if (er || !children.length)\n return chown(p, uid, gid, cb);\n let len = children.length;\n let errState = null;\n const then = (er) => {\n /* c8 ignore start */\n if (errState)\n return;\n /* c8 ignore stop */\n if (er)\n return cb((errState = er));\n if (--len === 0)\n return chown(p, uid, gid, cb);\n };\n for (const child of children) {\n chownrKid(p, child, uid, gid, then);\n }\n });\n};\nconst chownrKidSync = (p, child, uid, gid) => {\n if (child.isDirectory())\n chownrSync(path.resolve(p, child.name), uid, gid);\n lchownSync(path.resolve(p, child.name), uid, gid);\n};\nexport const chownrSync = (p, uid, gid) => {\n let children;\n try {\n children = fs.readdirSync(p, { withFileTypes: true });\n }\n catch (er) {\n const e = er;\n if (e?.code === 'ENOENT')\n return;\n else if (e?.code === 'ENOTDIR' || e?.code === 'ENOTSUP')\n return lchownSync(p, uid, gid);\n else\n throw e;\n }\n for (const child of children) {\n chownrKidSync(p, child, uid, gid);\n }\n return lchownSync(p, uid, gid);\n};\n//# sourceMappingURL=index.js.map","export class CwdError extends Error {\n path;\n code;\n syscall = 'chdir';\n constructor(path, code) {\n super(`${code}: Cannot cd into '${path}'`);\n this.path = path;\n this.code = code;\n }\n get name() {\n return 'CwdError';\n }\n}\n//# sourceMappingURL=cwd-error.js.map","export class SymlinkError extends Error {\n path;\n symlink;\n syscall = 'symlink';\n code = 'TAR_SYMLINK_ERROR';\n constructor(symlink, path) {\n super('TAR_SYMLINK_ERROR: Cannot extract through symbolic link');\n this.symlink = symlink;\n this.path = path;\n }\n get name() {\n return 'SymlinkError';\n }\n}\n//# sourceMappingURL=symlink-error.js.map","import { chownr, chownrSync } from 'chownr';\nimport fs from 'node:fs';\nimport fsp from 'node:fs/promises';\nimport path from 'node:path';\nimport { CwdError } from './cwd-error.js';\nimport { normalizeWindowsPath } from './normalize-windows-path.js';\nimport { SymlinkError } from './symlink-error.js';\nconst checkCwd = (dir, cb) => {\n fs.stat(dir, (er, st) => {\n if (er || !st.isDirectory()) {\n er = new CwdError(dir, er?.code || 'ENOTDIR');\n }\n cb(er);\n });\n};\n/**\n * Wrapper around fs/promises.mkdir for tar's needs.\n *\n * The main purpose is to avoid creating directories if we know that\n * they already exist (and track which ones exist for this purpose),\n * and prevent entries from being extracted into symlinked folders,\n * if `preservePaths` is not set.\n */\nexport const mkdir = (dir, opt, cb) => {\n dir = normalizeWindowsPath(dir);\n // if there's any overlap between mask and mode,\n // then we'll need an explicit chmod\n /* c8 ignore next */\n const umask = opt.umask ?? 0o22;\n const mode = opt.mode | 0o0700;\n const needChmod = (mode & umask) !== 0;\n const uid = opt.uid;\n const gid = opt.gid;\n const doChown = typeof uid === 'number' &&\n typeof gid === 'number' &&\n (uid !== opt.processUid || gid !== opt.processGid);\n const preserve = opt.preserve;\n const unlink = opt.unlink;\n const cwd = normalizeWindowsPath(opt.cwd);\n const done = (er, created) => {\n if (er) {\n cb(er);\n }\n else {\n if (created && doChown) {\n chownr(created, uid, gid, er => done(er));\n }\n else if (needChmod) {\n fs.chmod(dir, mode, cb);\n }\n else {\n cb();\n }\n }\n };\n if (dir === cwd) {\n return checkCwd(dir, done);\n }\n if (preserve) {\n return fsp.mkdir(dir, { mode, recursive: true }).then(made => done(null, made ?? undefined), // oh, ts\n done);\n }\n const sub = normalizeWindowsPath(path.relative(cwd, dir));\n const parts = sub.split('/');\n mkdir_(cwd, parts, mode, unlink, cwd, undefined, done);\n};\nconst mkdir_ = (base, parts, mode, unlink, cwd, created, cb) => {\n if (!parts.length) {\n return cb(null, created);\n }\n const p = parts.shift();\n const part = normalizeWindowsPath(path.resolve(base + '/' + p));\n fs.mkdir(part, mode, onmkdir(part, parts, mode, unlink, cwd, created, cb));\n};\nconst onmkdir = (part, parts, mode, unlink, cwd, created, cb) => (er) => {\n if (er) {\n fs.lstat(part, (statEr, st) => {\n if (statEr) {\n statEr.path =\n statEr.path && normalizeWindowsPath(statEr.path);\n cb(statEr);\n }\n else if (st.isDirectory()) {\n mkdir_(part, parts, mode, unlink, cwd, created, cb);\n }\n else if (unlink) {\n fs.unlink(part, er => {\n if (er) {\n return cb(er);\n }\n fs.mkdir(part, mode, onmkdir(part, parts, mode, unlink, cwd, created, cb));\n });\n }\n else if (st.isSymbolicLink()) {\n return cb(new SymlinkError(part, part + '/' + parts.join('/')));\n }\n else {\n cb(er);\n }\n });\n }\n else {\n created = created || part;\n mkdir_(part, parts, mode, unlink, cwd, created, cb);\n }\n};\nconst checkCwdSync = (dir) => {\n let ok = false;\n let code = undefined;\n try {\n ok = fs.statSync(dir).isDirectory();\n }\n catch (er) {\n code = er?.code;\n }\n finally {\n if (!ok) {\n throw new CwdError(dir, code ?? 'ENOTDIR');\n }\n }\n};\nexport const mkdirSync = (dir, opt) => {\n dir = normalizeWindowsPath(dir);\n // if there's any overlap between mask and mode,\n // then we'll need an explicit chmod\n /* c8 ignore next */\n const umask = opt.umask ?? 0o22;\n const mode = opt.mode | 0o700;\n const needChmod = (mode & umask) !== 0;\n const uid = opt.uid;\n const gid = opt.gid;\n const doChown = typeof uid === 'number' &&\n typeof gid === 'number' &&\n (uid !== opt.processUid || gid !== opt.processGid);\n const preserve = opt.preserve;\n const unlink = opt.unlink;\n const cwd = normalizeWindowsPath(opt.cwd);\n const done = (created) => {\n if (created && doChown) {\n chownrSync(created, uid, gid);\n }\n if (needChmod) {\n fs.chmodSync(dir, mode);\n }\n };\n if (dir === cwd) {\n checkCwdSync(cwd);\n return done();\n }\n if (preserve) {\n return done(fs.mkdirSync(dir, { mode, recursive: true }) ?? undefined);\n }\n const sub = normalizeWindowsPath(path.relative(cwd, dir));\n const parts = sub.split('/');\n let created = undefined;\n for (let p = parts.shift(), part = cwd; p && (part += '/' + p); p = parts.shift()) {\n part = normalizeWindowsPath(path.resolve(part));\n try {\n fs.mkdirSync(part, mode);\n created = created || part;\n }\n catch (er) {\n const st = fs.lstatSync(part);\n if (st.isDirectory()) {\n continue;\n }\n else if (unlink) {\n fs.unlinkSync(part);\n fs.mkdirSync(part, mode);\n created = created || part;\n continue;\n }\n else if (st.isSymbolicLink()) {\n return new SymlinkError(part, part + '/' + parts.join('/'));\n }\n }\n }\n return done(created);\n};\n//# sourceMappingURL=mkdir.js.map","// warning: extremely hot code path.\n// This has been meticulously optimized for use\n// within npm install on large package trees.\n// Do not edit without careful benchmarking.\nconst normalizeCache = Object.create(null);\n// Limit the size of this. Very low-sophistication LRU cache\nconst MAX = 10000;\nconst cache = new Set();\nexport const normalizeUnicode = (s) => {\n if (!cache.has(s)) {\n normalizeCache[s] = s.normalize('NFD');\n }\n else {\n cache.delete(s);\n }\n cache.add(s);\n const ret = normalizeCache[s];\n let i = cache.size - MAX;\n // only prune when we're 10% over the max\n if (i > MAX / 10) {\n for (const s of cache) {\n cache.delete(s);\n delete normalizeCache[s];\n if (--i <= 0)\n break;\n }\n }\n return ret;\n};\n//# sourceMappingURL=normalize-unicode.js.map","// A path exclusive reservation system\n// reserve([list, of, paths], fn)\n// When the fn is first in line for all its paths, it\n// is called with a cb that clears the reservation.\n//\n// Used by async unpack to avoid clobbering paths in use,\n// while still allowing maximal safe parallelization.\nimport { join } from 'node:path';\nimport { normalizeUnicode } from './normalize-unicode.js';\nimport { stripTrailingSlashes } from './strip-trailing-slashes.js';\nconst platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform;\nconst isWindows = platform === 'win32';\n// return a set of parent dirs for a given path\n// '/a/b/c/d' -> ['/', '/a', '/a/b', '/a/b/c', '/a/b/c/d']\nconst getDirs = (path) => {\n const dirs = path\n .split('/')\n .slice(0, -1)\n .reduce((set, path) => {\n const s = set[set.length - 1];\n if (s !== undefined) {\n path = join(s, path);\n }\n set.push(path || '/');\n return set;\n }, []);\n return dirs;\n};\nexport class PathReservations {\n // path => [function or Set]\n // A Set object means a directory reservation\n // A fn is a direct reservation on that path\n #queues = new Map();\n // fn => {paths:[path,...], dirs:[path, ...]}\n #reservations = new Map();\n // functions currently running\n #running = new Set();\n reserve(paths, fn) {\n paths =\n isWindows ?\n ['win32 parallelization disabled']\n : paths.map(p => {\n // don't need normPath, because we skip this entirely for windows\n return stripTrailingSlashes(join(normalizeUnicode(p))).toLowerCase();\n });\n const dirs = new Set(paths.map(path => getDirs(path)).reduce((a, b) => a.concat(b)));\n this.#reservations.set(fn, { dirs, paths });\n for (const p of paths) {\n const q = this.#queues.get(p);\n if (!q) {\n this.#queues.set(p, [fn]);\n }\n else {\n q.push(fn);\n }\n }\n for (const dir of dirs) {\n const q = this.#queues.get(dir);\n if (!q) {\n this.#queues.set(dir, [new Set([fn])]);\n }\n else {\n const l = q[q.length - 1];\n if (l instanceof Set) {\n l.add(fn);\n }\n else {\n q.push(new Set([fn]));\n }\n }\n }\n return this.#run(fn);\n }\n // return the queues for each path the function cares about\n // fn => {paths, dirs}\n #getQueues(fn) {\n const res = this.#reservations.get(fn);\n /* c8 ignore start */\n if (!res) {\n throw new Error('function does not have any path reservations');\n }\n /* c8 ignore stop */\n return {\n paths: res.paths.map((path) => this.#queues.get(path)),\n dirs: [...res.dirs].map(path => this.#queues.get(path)),\n };\n }\n // check if fn is first in line for all its paths, and is\n // included in the first set for all its dir queues\n check(fn) {\n const { paths, dirs } = this.#getQueues(fn);\n return (paths.every(q => q && q[0] === fn) &&\n dirs.every(q => q && q[0] instanceof Set && q[0].has(fn)));\n }\n // run the function if it's first in line and not already running\n #run(fn) {\n if (this.#running.has(fn) || !this.check(fn)) {\n return false;\n }\n this.#running.add(fn);\n fn(() => this.#clear(fn));\n return true;\n }\n #clear(fn) {\n if (!this.#running.has(fn)) {\n return false;\n }\n const res = this.#reservations.get(fn);\n /* c8 ignore start */\n if (!res) {\n throw new Error('invalid reservation');\n }\n /* c8 ignore stop */\n const { paths, dirs } = res;\n const next = new Set();\n for (const path of paths) {\n const q = this.#queues.get(path);\n /* c8 ignore start */\n if (!q || q?.[0] !== fn) {\n continue;\n }\n /* c8 ignore stop */\n const q0 = q[1];\n if (!q0) {\n this.#queues.delete(path);\n continue;\n }\n q.shift();\n if (typeof q0 === 'function') {\n next.add(q0);\n }\n else {\n for (const f of q0) {\n next.add(f);\n }\n }\n }\n for (const dir of dirs) {\n const q = this.#queues.get(dir);\n const q0 = q?.[0];\n /* c8 ignore next - type safety only */\n if (!q || !(q0 instanceof Set))\n continue;\n if (q0.size === 1 && q.length === 1) {\n this.#queues.delete(dir);\n continue;\n }\n else if (q0.size === 1) {\n q.shift();\n // next one must be a function,\n // or else the Set would've been reused\n const n = q[0];\n if (typeof n === 'function') {\n next.add(n);\n }\n }\n else {\n q0.delete(fn);\n }\n }\n this.#running.delete(fn);\n next.forEach(fn => this.#run(fn));\n return true;\n }\n}\n//# sourceMappingURL=path-reservations.js.map","// the PEND/UNPEND stuff tracks whether we're ready to emit end/close yet.\n// but the path reservations are required to avoid race conditions where\n// parallelized unpack ops may mess with one another, due to dependencies\n// (like a Link depending on its target) or destructive operations (like\n// clobbering an fs object to create one of a different type.)\nimport * as fsm from '@isaacs/fs-minipass';\nimport assert from 'node:assert';\nimport { randomBytes } from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { getWriteFlag } from './get-write-flag.js';\nimport { mkdir, mkdirSync } from './mkdir.js';\nimport { normalizeWindowsPath } from './normalize-windows-path.js';\nimport { Parser } from './parse.js';\nimport { stripAbsolutePath } from './strip-absolute-path.js';\nimport * as wc from './winchars.js';\nimport { PathReservations } from './path-reservations.js';\nconst ONENTRY = Symbol('onEntry');\nconst CHECKFS = Symbol('checkFs');\nconst CHECKFS2 = Symbol('checkFs2');\nconst ISREUSABLE = Symbol('isReusable');\nconst MAKEFS = Symbol('makeFs');\nconst FILE = Symbol('file');\nconst DIRECTORY = Symbol('directory');\nconst LINK = Symbol('link');\nconst SYMLINK = Symbol('symlink');\nconst HARDLINK = Symbol('hardlink');\nconst UNSUPPORTED = Symbol('unsupported');\nconst CHECKPATH = Symbol('checkPath');\nconst MKDIR = Symbol('mkdir');\nconst ONERROR = Symbol('onError');\nconst PENDING = Symbol('pending');\nconst PEND = Symbol('pend');\nconst UNPEND = Symbol('unpend');\nconst ENDED = Symbol('ended');\nconst MAYBECLOSE = Symbol('maybeClose');\nconst SKIP = Symbol('skip');\nconst DOCHOWN = Symbol('doChown');\nconst UID = Symbol('uid');\nconst GID = Symbol('gid');\nconst CHECKED_CWD = Symbol('checkedCwd');\nconst platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform;\nconst isWindows = platform === 'win32';\nconst DEFAULT_MAX_DEPTH = 1024;\n// Unlinks on Windows are not atomic.\n//\n// This means that if you have a file entry, followed by another\n// file entry with an identical name, and you cannot re-use the file\n// (because it's a hardlink, or because unlink:true is set, or it's\n// Windows, which does not have useful nlink values), then the unlink\n// will be committed to the disk AFTER the new file has been written\n// over the old one, deleting the new file.\n//\n// To work around this, on Windows systems, we rename the file and then\n// delete the renamed file. It's a sloppy kludge, but frankly, I do not\n// know of a better way to do this, given windows' non-atomic unlink\n// semantics.\n//\n// See: https://github.com/npm/node-tar/issues/183\n/* c8 ignore start */\nconst unlinkFile = (path, cb) => {\n if (!isWindows) {\n return fs.unlink(path, cb);\n }\n const name = path + '.DELETE.' + randomBytes(16).toString('hex');\n fs.rename(path, name, er => {\n if (er) {\n return cb(er);\n }\n fs.unlink(name, cb);\n });\n};\n/* c8 ignore stop */\n/* c8 ignore start */\nconst unlinkFileSync = (path) => {\n if (!isWindows) {\n return fs.unlinkSync(path);\n }\n const name = path + '.DELETE.' + randomBytes(16).toString('hex');\n fs.renameSync(path, name);\n fs.unlinkSync(name);\n};\n/* c8 ignore stop */\n// this.gid, entry.gid, this.processUid\nconst uint32 = (a, b, c) => a !== undefined && a === a >>> 0 ? a\n : b !== undefined && b === b >>> 0 ? b\n : c;\nexport class Unpack extends Parser {\n [ENDED] = false;\n [CHECKED_CWD] = false;\n [PENDING] = 0;\n reservations = new PathReservations();\n transform;\n writable = true;\n readable = false;\n uid;\n gid;\n setOwner;\n preserveOwner;\n processGid;\n processUid;\n maxDepth;\n forceChown;\n win32;\n newer;\n keep;\n noMtime;\n preservePaths;\n unlink;\n cwd;\n strip;\n processUmask;\n umask;\n dmode;\n fmode;\n chmod;\n constructor(opt = {}) {\n opt.ondone = () => {\n this[ENDED] = true;\n this[MAYBECLOSE]();\n };\n super(opt);\n this.transform = opt.transform;\n this.chmod = !!opt.chmod;\n if (typeof opt.uid === 'number' || typeof opt.gid === 'number') {\n // need both or neither\n if (typeof opt.uid !== 'number' ||\n typeof opt.gid !== 'number') {\n throw new TypeError('cannot set owner without number uid and gid');\n }\n if (opt.preserveOwner) {\n throw new TypeError('cannot preserve owner in archive and also set owner explicitly');\n }\n this.uid = opt.uid;\n this.gid = opt.gid;\n this.setOwner = true;\n }\n else {\n this.uid = undefined;\n this.gid = undefined;\n this.setOwner = false;\n }\n // default true for root\n if (opt.preserveOwner === undefined &&\n typeof opt.uid !== 'number') {\n this.preserveOwner = !!(process.getuid && process.getuid() === 0);\n }\n else {\n this.preserveOwner = !!opt.preserveOwner;\n }\n this.processUid =\n (this.preserveOwner || this.setOwner) && process.getuid ?\n process.getuid()\n : undefined;\n this.processGid =\n (this.preserveOwner || this.setOwner) && process.getgid ?\n process.getgid()\n : undefined;\n // prevent excessively deep nesting of subfolders\n // set to `Infinity` to remove this restriction\n this.maxDepth =\n typeof opt.maxDepth === 'number' ?\n opt.maxDepth\n : DEFAULT_MAX_DEPTH;\n // mostly just for testing, but useful in some cases.\n // Forcibly trigger a chown on every entry, no matter what\n this.forceChown = opt.forceChown === true;\n // turn ><?| in filenames into 0xf000-higher encoded forms\n this.win32 = !!opt.win32 || isWindows;\n // do not unpack over files that are newer than what's in the archive\n this.newer = !!opt.newer;\n // do not unpack over ANY files\n this.keep = !!opt.keep;\n // do not set mtime/atime of extracted entries\n this.noMtime = !!opt.noMtime;\n // allow .., absolute path entries, and unpacking through symlinks\n // without this, warn and skip .., relativize absolutes, and error\n // on symlinks in extraction path\n this.preservePaths = !!opt.preservePaths;\n // unlink files and links before writing. This breaks existing hard\n // links, and removes symlink directories rather than erroring\n this.unlink = !!opt.unlink;\n this.cwd = normalizeWindowsPath(path.resolve(opt.cwd || process.cwd()));\n this.strip = Number(opt.strip) || 0;\n // if we're not chmodding, then we don't need the process umask\n this.processUmask =\n !this.chmod ? 0\n : typeof opt.processUmask === 'number' ? opt.processUmask\n : process.umask();\n this.umask =\n typeof opt.umask === 'number' ? opt.umask : this.processUmask;\n // default mode for dirs created as parents\n this.dmode = opt.dmode || 0o0777 & ~this.umask;\n this.fmode = opt.fmode || 0o0666 & ~this.umask;\n this.on('entry', entry => this[ONENTRY](entry));\n }\n // a bad or damaged archive is a warning for Parser, but an error\n // when extracting. Mark those errors as unrecoverable, because\n // the Unpack contract cannot be met.\n warn(code, msg, data = {}) {\n if (code === 'TAR_BAD_ARCHIVE' || code === 'TAR_ABORT') {\n data.recoverable = false;\n }\n return super.warn(code, msg, data);\n }\n [MAYBECLOSE]() {\n if (this[ENDED] && this[PENDING] === 0) {\n this.emit('prefinish');\n this.emit('finish');\n this.emit('end');\n }\n }\n [CHECKPATH](entry) {\n const p = normalizeWindowsPath(entry.path);\n const parts = p.split('/');\n if (this.strip) {\n if (parts.length < this.strip) {\n return false;\n }\n if (entry.type === 'Link') {\n const linkparts = normalizeWindowsPath(String(entry.linkpath)).split('/');\n if (linkparts.length >= this.strip) {\n entry.linkpath = linkparts.slice(this.strip).join('/');\n }\n else {\n return false;\n }\n }\n parts.splice(0, this.strip);\n entry.path = parts.join('/');\n }\n if (isFinite(this.maxDepth) && parts.length > this.maxDepth) {\n this.warn('TAR_ENTRY_ERROR', 'path excessively deep', {\n entry,\n path: p,\n depth: parts.length,\n maxDepth: this.maxDepth,\n });\n return false;\n }\n if (!this.preservePaths) {\n if (parts.includes('..') ||\n /* c8 ignore next */\n (isWindows && /^[a-z]:\\.\\.$/i.test(parts[0] ?? ''))) {\n this.warn('TAR_ENTRY_ERROR', `path contains '..'`, {\n entry,\n path: p,\n });\n return false;\n }\n // strip off the root\n const [root, stripped] = stripAbsolutePath(p);\n if (root) {\n entry.path = String(stripped);\n this.warn('TAR_ENTRY_INFO', `stripping ${root} from absolute path`, {\n entry,\n path: p,\n });\n }\n }\n if (path.isAbsolute(entry.path)) {\n entry.absolute = normalizeWindowsPath(path.resolve(entry.path));\n }\n else {\n entry.absolute = normalizeWindowsPath(path.resolve(this.cwd, entry.path));\n }\n // if we somehow ended up with a path that escapes the cwd, and we are\n // not in preservePaths mode, then something is fishy! This should have\n // been prevented above, so ignore this for coverage.\n /* c8 ignore start - defense in depth */\n if (!this.preservePaths &&\n typeof entry.absolute === 'string' &&\n entry.absolute.indexOf(this.cwd + '/') !== 0 &&\n entry.absolute !== this.cwd) {\n this.warn('TAR_ENTRY_ERROR', 'path escaped extraction target', {\n entry,\n path: normalizeWindowsPath(entry.path),\n resolvedPath: entry.absolute,\n cwd: this.cwd,\n });\n return false;\n }\n /* c8 ignore stop */\n // an archive can set properties on the extraction directory, but it\n // may not replace the cwd with a different kind of thing entirely.\n if (entry.absolute === this.cwd &&\n entry.type !== 'Directory' &&\n entry.type !== 'GNUDumpDir') {\n return false;\n }\n // only encode : chars that aren't drive letter indicators\n if (this.win32) {\n const { root: aRoot } = path.win32.parse(String(entry.absolute));\n entry.absolute =\n aRoot + wc.encode(String(entry.absolute).slice(aRoot.length));\n const { root: pRoot } = path.win32.parse(entry.path);\n entry.path = pRoot + wc.encode(entry.path.slice(pRoot.length));\n }\n return true;\n }\n [ONENTRY](entry) {\n if (!this[CHECKPATH](entry)) {\n return entry.resume();\n }\n assert.equal(typeof entry.absolute, 'string');\n switch (entry.type) {\n case 'Directory':\n case 'GNUDumpDir':\n if (entry.mode) {\n entry.mode = entry.mode | 0o700;\n }\n // eslint-disable-next-line no-fallthrough\n case 'File':\n case 'OldFile':\n case 'ContiguousFile':\n case 'Link':\n case 'SymbolicLink':\n return this[CHECKFS](entry);\n case 'CharacterDevice':\n case 'BlockDevice':\n case 'FIFO':\n default:\n return this[UNSUPPORTED](entry);\n }\n }\n [ONERROR](er, entry) {\n // Cwd has to exist, or else nothing works. That's serious.\n // Other errors are warnings, which raise the error in strict\n // mode, but otherwise continue on.\n if (er.name === 'CwdError') {\n this.emit('error', er);\n }\n else {\n this.warn('TAR_ENTRY_ERROR', er, { entry });\n this[UNPEND]();\n entry.resume();\n }\n }\n [MKDIR](dir, mode, cb) {\n mkdir(normalizeWindowsPath(dir), {\n uid: this.uid,\n gid: this.gid,\n processUid: this.processUid,\n processGid: this.processGid,\n umask: this.processUmask,\n preserve: this.preservePaths,\n unlink: this.unlink,\n cwd: this.cwd,\n mode: mode,\n }, cb);\n }\n [DOCHOWN](entry) {\n // in preserve owner mode, chown if the entry doesn't match process\n // in set owner mode, chown if setting doesn't match process\n return (this.forceChown ||\n (this.preserveOwner &&\n ((typeof entry.uid === 'number' &&\n entry.uid !== this.processUid) ||\n (typeof entry.gid === 'number' &&\n entry.gid !== this.processGid))) ||\n (typeof this.uid === 'number' &&\n this.uid !== this.processUid) ||\n (typeof this.gid === 'number' && this.gid !== this.processGid));\n }\n [UID](entry) {\n return uint32(this.uid, entry.uid, this.processUid);\n }\n [GID](entry) {\n return uint32(this.gid, entry.gid, this.processGid);\n }\n [FILE](entry, fullyDone) {\n const mode = typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.fmode;\n const stream = new fsm.WriteStream(String(entry.absolute), {\n // slight lie, but it can be numeric flags\n flags: getWriteFlag(entry.size),\n mode: mode,\n autoClose: false,\n });\n stream.on('error', (er) => {\n if (stream.fd) {\n fs.close(stream.fd, () => { });\n }\n // flush all the data out so that we aren't left hanging\n // if the error wasn't actually fatal. otherwise the parse\n // is blocked, and we never proceed.\n stream.write = () => true;\n this[ONERROR](er, entry);\n fullyDone();\n });\n let actions = 1;\n const done = (er) => {\n if (er) {\n /* c8 ignore start - we should always have a fd by now */\n if (stream.fd) {\n fs.close(stream.fd, () => { });\n }\n /* c8 ignore stop */\n this[ONERROR](er, entry);\n fullyDone();\n return;\n }\n if (--actions === 0) {\n if (stream.fd !== undefined) {\n fs.close(stream.fd, er => {\n if (er) {\n this[ONERROR](er, entry);\n }\n else {\n this[UNPEND]();\n }\n fullyDone();\n });\n }\n }\n };\n stream.on('finish', () => {\n // if futimes fails, try utimes\n // if utimes fails, fail with the original error\n // same for fchown/chown\n const abs = String(entry.absolute);\n const fd = stream.fd;\n if (typeof fd === 'number' && entry.mtime && !this.noMtime) {\n actions++;\n const atime = entry.atime || new Date();\n const mtime = entry.mtime;\n fs.futimes(fd, atime, mtime, er => er ?\n fs.utimes(abs, atime, mtime, er2 => done(er2 && er))\n : done());\n }\n if (typeof fd === 'number' && this[DOCHOWN](entry)) {\n actions++;\n const uid = this[UID](entry);\n const gid = this[GID](entry);\n if (typeof uid === 'number' && typeof gid === 'number') {\n fs.fchown(fd, uid, gid, er => er ?\n fs.chown(abs, uid, gid, er2 => done(er2 && er))\n : done());\n }\n }\n done();\n });\n const tx = this.transform ? this.transform(entry) || entry : entry;\n if (tx !== entry) {\n tx.on('error', (er) => {\n this[ONERROR](er, entry);\n fullyDone();\n });\n entry.pipe(tx);\n }\n tx.pipe(stream);\n }\n [DIRECTORY](entry, fullyDone) {\n const mode = typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.dmode;\n this[MKDIR](String(entry.absolute), mode, er => {\n if (er) {\n this[ONERROR](er, entry);\n fullyDone();\n return;\n }\n let actions = 1;\n const done = () => {\n if (--actions === 0) {\n fullyDone();\n this[UNPEND]();\n entry.resume();\n }\n };\n if (entry.mtime && !this.noMtime) {\n actions++;\n fs.utimes(String(entry.absolute), entry.atime || new Date(), entry.mtime, done);\n }\n if (this[DOCHOWN](entry)) {\n actions++;\n fs.chown(String(entry.absolute), Number(this[UID](entry)), Number(this[GID](entry)), done);\n }\n done();\n });\n }\n [UNSUPPORTED](entry) {\n entry.unsupported = true;\n this.warn('TAR_ENTRY_UNSUPPORTED', `unsupported entry type: ${entry.type}`, { entry });\n entry.resume();\n }\n [SYMLINK](entry, done) {\n this[LINK](entry, String(entry.linkpath), 'symlink', done);\n }\n [HARDLINK](entry, done) {\n const linkpath = normalizeWindowsPath(path.resolve(this.cwd, String(entry.linkpath)));\n this[LINK](entry, linkpath, 'link', done);\n }\n [PEND]() {\n this[PENDING]++;\n }\n [UNPEND]() {\n this[PENDING]--;\n this[MAYBECLOSE]();\n }\n [SKIP](entry) {\n this[UNPEND]();\n entry.resume();\n }\n // Check if we can reuse an existing filesystem entry safely and\n // overwrite it, rather than unlinking and recreating\n // Windows doesn't report a useful nlink, so we just never reuse entries\n [ISREUSABLE](entry, st) {\n return (entry.type === 'File' &&\n !this.unlink &&\n st.isFile() &&\n st.nlink <= 1 &&\n !isWindows);\n }\n // check if a thing is there, and if so, try to clobber it\n [CHECKFS](entry) {\n this[PEND]();\n const paths = [entry.path];\n if (entry.linkpath) {\n paths.push(entry.linkpath);\n }\n this.reservations.reserve(paths, done => this[CHECKFS2](entry, done));\n }\n [CHECKFS2](entry, fullyDone) {\n const done = (er) => {\n fullyDone(er);\n };\n const checkCwd = () => {\n this[MKDIR](this.cwd, this.dmode, er => {\n if (er) {\n this[ONERROR](er, entry);\n done();\n return;\n }\n this[CHECKED_CWD] = true;\n start();\n });\n };\n const start = () => {\n if (entry.absolute !== this.cwd) {\n const parent = normalizeWindowsPath(path.dirname(String(entry.absolute)));\n if (parent !== this.cwd) {\n return this[MKDIR](parent, this.dmode, er => {\n if (er) {\n this[ONERROR](er, entry);\n done();\n return;\n }\n afterMakeParent();\n });\n }\n }\n afterMakeParent();\n };\n const afterMakeParent = () => {\n fs.lstat(String(entry.absolute), (lstatEr, st) => {\n if (st &&\n (this.keep ||\n /* c8 ignore next */\n (this.newer && st.mtime > (entry.mtime ?? st.mtime)))) {\n this[SKIP](entry);\n done();\n return;\n }\n if (lstatEr || this[ISREUSABLE](entry, st)) {\n return this[MAKEFS](null, entry, done);\n }\n if (st.isDirectory()) {\n if (entry.type === 'Directory') {\n const needChmod = this.chmod &&\n entry.mode &&\n (st.mode & 0o7777) !== entry.mode;\n const afterChmod = (er) => this[MAKEFS](er ?? null, entry, done);\n if (!needChmod) {\n return afterChmod();\n }\n return fs.chmod(String(entry.absolute), Number(entry.mode), afterChmod);\n }\n // Not a dir entry, have to remove it.\n // NB: the only way to end up with an entry that is the cwd\n // itself, in such a way that == does not detect, is a\n // tricky windows absolute path with UNC or 8.3 parts (and\n // preservePaths:true, or else it will have been stripped).\n // In that case, the user has opted out of path protections\n // explicitly, so if they blow away the cwd, c'est la vie.\n if (entry.absolute !== this.cwd) {\n return fs.rmdir(String(entry.absolute), (er) => this[MAKEFS](er ?? null, entry, done));\n }\n }\n // not a dir, and not reusable\n // don't remove if the cwd, we want that error\n if (entry.absolute === this.cwd) {\n return this[MAKEFS](null, entry, done);\n }\n unlinkFile(String(entry.absolute), er => this[MAKEFS](er ?? null, entry, done));\n });\n };\n if (this[CHECKED_CWD]) {\n start();\n }\n else {\n checkCwd();\n }\n }\n [MAKEFS](er, entry, done) {\n if (er) {\n this[ONERROR](er, entry);\n done();\n return;\n }\n switch (entry.type) {\n case 'File':\n case 'OldFile':\n case 'ContiguousFile':\n return this[FILE](entry, done);\n case 'Link':\n return this[HARDLINK](entry, done);\n case 'SymbolicLink':\n return this[SYMLINK](entry, done);\n case 'Directory':\n case 'GNUDumpDir':\n return this[DIRECTORY](entry, done);\n }\n }\n [LINK](entry, linkpath, link, done) {\n // XXX: get the type ('symlink' or 'junction') for windows\n fs[link](linkpath, String(entry.absolute), er => {\n if (er) {\n this[ONERROR](er, entry);\n }\n else {\n this[UNPEND]();\n entry.resume();\n }\n done();\n });\n }\n}\nconst callSync = (fn) => {\n try {\n return [null, fn()];\n }\n catch (er) {\n return [er, null];\n }\n};\nexport class UnpackSync extends Unpack {\n sync = true;\n [MAKEFS](er, entry) {\n return super[MAKEFS](er, entry, () => { });\n }\n [CHECKFS](entry) {\n if (!this[CHECKED_CWD]) {\n const er = this[MKDIR](this.cwd, this.dmode);\n if (er) {\n return this[ONERROR](er, entry);\n }\n this[CHECKED_CWD] = true;\n }\n // don't bother to make the parent if the current entry is the cwd,\n // we've already checked it.\n if (entry.absolute !== this.cwd) {\n const parent = normalizeWindowsPath(path.dirname(String(entry.absolute)));\n if (parent !== this.cwd) {\n const mkParent = this[MKDIR](parent, this.dmode);\n if (mkParent) {\n return this[ONERROR](mkParent, entry);\n }\n }\n }\n const [lstatEr, st] = callSync(() => fs.lstatSync(String(entry.absolute)));\n if (st &&\n (this.keep ||\n /* c8 ignore next */\n (this.newer && st.mtime > (entry.mtime ?? st.mtime)))) {\n return this[SKIP](entry);\n }\n if (lstatEr || this[ISREUSABLE](entry, st)) {\n return this[MAKEFS](null, entry);\n }\n if (st.isDirectory()) {\n if (entry.type === 'Directory') {\n const needChmod = this.chmod &&\n entry.mode &&\n (st.mode & 0o7777) !== entry.mode;\n const [er] = needChmod ?\n callSync(() => {\n fs.chmodSync(String(entry.absolute), Number(entry.mode));\n })\n : [];\n return this[MAKEFS](er, entry);\n }\n // not a dir entry, have to remove it\n const [er] = callSync(() => fs.rmdirSync(String(entry.absolute)));\n this[MAKEFS](er, entry);\n }\n // not a dir, and not reusable.\n // don't remove if it's the cwd, since we want that error.\n const [er] = entry.absolute === this.cwd ?\n []\n : callSync(() => unlinkFileSync(String(entry.absolute)));\n this[MAKEFS](er, entry);\n }\n [FILE](entry, done) {\n const mode = typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.fmode;\n const oner = (er) => {\n let closeError;\n try {\n fs.closeSync(fd);\n }\n catch (e) {\n closeError = e;\n }\n if (er || closeError) {\n this[ONERROR](er || closeError, entry);\n }\n done();\n };\n let fd;\n try {\n fd = fs.openSync(String(entry.absolute), getWriteFlag(entry.size), mode);\n /* c8 ignore start - This is only a problem if the file was successfully\n * statted, BUT failed to open. Testing this is annoying, and we\n * already have ample testint for other uses of oner() methods.\n */\n }\n catch (er) {\n return oner(er);\n }\n /* c8 ignore stop */\n const tx = this.transform ? this.transform(entry) || entry : entry;\n if (tx !== entry) {\n tx.on('error', (er) => this[ONERROR](er, entry));\n entry.pipe(tx);\n }\n tx.on('data', (chunk) => {\n try {\n fs.writeSync(fd, chunk, 0, chunk.length);\n }\n catch (er) {\n oner(er);\n }\n });\n tx.on('end', () => {\n let er = null;\n // try both, falling futimes back to utimes\n // if either fails, handle the first error\n if (entry.mtime && !this.noMtime) {\n const atime = entry.atime || new Date();\n const mtime = entry.mtime;\n try {\n fs.futimesSync(fd, atime, mtime);\n }\n catch (futimeser) {\n try {\n fs.utimesSync(String(entry.absolute), atime, mtime);\n }\n catch (utimeser) {\n er = futimeser;\n }\n }\n }\n if (this[DOCHOWN](entry)) {\n const uid = this[UID](entry);\n const gid = this[GID](entry);\n try {\n fs.fchownSync(fd, Number(uid), Number(gid));\n }\n catch (fchowner) {\n try {\n fs.chownSync(String(entry.absolute), Number(uid), Number(gid));\n }\n catch (chowner) {\n er = er || fchowner;\n }\n }\n }\n oner(er);\n });\n }\n [DIRECTORY](entry, done) {\n const mode = typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.dmode;\n const er = this[MKDIR](String(entry.absolute), mode);\n if (er) {\n this[ONERROR](er, entry);\n done();\n return;\n }\n if (entry.mtime && !this.noMtime) {\n try {\n fs.utimesSync(String(entry.absolute), entry.atime || new Date(), entry.mtime);\n /* c8 ignore next */\n }\n catch (er) { }\n }\n if (this[DOCHOWN](entry)) {\n try {\n fs.chownSync(String(entry.absolute), Number(this[UID](entry)), Number(this[GID](entry)));\n }\n catch (er) { }\n }\n done();\n entry.resume();\n }\n [MKDIR](dir, mode) {\n try {\n return mkdirSync(normalizeWindowsPath(dir), {\n uid: this.uid,\n gid: this.gid,\n processUid: this.processUid,\n processGid: this.processGid,\n umask: this.processUmask,\n preserve: this.preservePaths,\n unlink: this.unlink,\n cwd: this.cwd,\n mode: mode,\n });\n }\n catch (er) {\n return er;\n }\n }\n [LINK](entry, linkpath, link, done) {\n const ls = `${link}Sync`;\n try {\n fs[ls](linkpath, String(entry.absolute));\n done();\n entry.resume();\n }\n catch (er) {\n return this[ONERROR](er, entry);\n }\n }\n}\n//# sourceMappingURL=unpack.js.map","// tar -x\nimport * as fsm from '@isaacs/fs-minipass';\nimport fs from 'node:fs';\nimport { filesFilter } from './list.js';\nimport { makeCommand } from './make-command.js';\nimport { Unpack, UnpackSync } from './unpack.js';\nconst extractFileSync = (opt) => {\n const u = new UnpackSync(opt);\n const file = opt.file;\n const stat = fs.statSync(file);\n // This trades a zero-byte read() syscall for a stat\n // However, it will usually result in less memory allocation\n const readSize = opt.maxReadSize || 16 * 1024 * 1024;\n const stream = new fsm.ReadStreamSync(file, {\n readSize: readSize,\n size: stat.size,\n });\n stream.pipe(u);\n};\nconst extractFile = (opt, _) => {\n const u = new Unpack(opt);\n const readSize = opt.maxReadSize || 16 * 1024 * 1024;\n const file = opt.file;\n const p = new Promise((resolve, reject) => {\n u.on('error', reject);\n u.on('close', resolve);\n // This trades a zero-byte read() syscall for a stat\n // However, it will usually result in less memory allocation\n fs.stat(file, (er, stat) => {\n if (er) {\n reject(er);\n }\n else {\n const stream = new fsm.ReadStream(file, {\n readSize: readSize,\n size: stat.size,\n });\n stream.on('error', reject);\n stream.pipe(u);\n }\n });\n });\n return p;\n};\nexport const extract = makeCommand(extractFileSync, extractFile, opt => new UnpackSync(opt), opt => new Unpack(opt), (opt, files) => {\n if (files?.length)\n filesFilter(opt, files);\n});\n//# sourceMappingURL=extract.js.map","// tar -r\nimport { WriteStream, WriteStreamSync } from '@isaacs/fs-minipass';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { Header } from './header.js';\nimport { list } from './list.js';\nimport { makeCommand } from './make-command.js';\nimport { isFile, } from './options.js';\nimport { Pack, PackSync } from './pack.js';\n// starting at the head of the file, read a Header\n// If the checksum is invalid, that's our position to start writing\n// If it is, jump forward by the specified size (round up to 512)\n// and try again.\n// Write the new Pack stream starting there.\nconst replaceSync = (opt, files) => {\n const p = new PackSync(opt);\n let threw = true;\n let fd;\n let position;\n try {\n try {\n fd = fs.openSync(opt.file, 'r+');\n }\n catch (er) {\n if (er?.code === 'ENOENT') {\n fd = fs.openSync(opt.file, 'w+');\n }\n else {\n throw er;\n }\n }\n const st = fs.fstatSync(fd);\n const headBuf = Buffer.alloc(512);\n POSITION: for (position = 0; position < st.size; position += 512) {\n for (let bufPos = 0, bytes = 0; bufPos < 512; bufPos += bytes) {\n bytes = fs.readSync(fd, headBuf, bufPos, headBuf.length - bufPos, position + bufPos);\n if (position === 0 &&\n headBuf[0] === 0x1f &&\n headBuf[1] === 0x8b) {\n throw new Error('cannot append to compressed archives');\n }\n if (!bytes) {\n break POSITION;\n }\n }\n const h = new Header(headBuf);\n if (!h.cksumValid) {\n break;\n }\n const entryBlockSize = 512 * Math.ceil((h.size || 0) / 512);\n if (position + entryBlockSize + 512 > st.size) {\n break;\n }\n // the 512 for the header we just parsed will be added as well\n // also jump ahead all the blocks for the body\n position += entryBlockSize;\n if (opt.mtimeCache && h.mtime) {\n opt.mtimeCache.set(String(h.path), h.mtime);\n }\n }\n threw = false;\n streamSync(opt, p, position, fd, files);\n }\n finally {\n if (threw) {\n try {\n fs.closeSync(fd);\n }\n catch (er) { }\n }\n }\n};\nconst streamSync = (opt, p, position, fd, files) => {\n const stream = new WriteStreamSync(opt.file, {\n fd: fd,\n start: position,\n });\n p.pipe(stream);\n addFilesSync(p, files);\n};\nconst replaceAsync = (opt, files) => {\n files = Array.from(files);\n const p = new Pack(opt);\n const getPos = (fd, size, cb_) => {\n const cb = (er, pos) => {\n if (er) {\n fs.close(fd, _ => cb_(er));\n }\n else {\n cb_(null, pos);\n }\n };\n let position = 0;\n if (size === 0) {\n return cb(null, 0);\n }\n let bufPos = 0;\n const headBuf = Buffer.alloc(512);\n const onread = (er, bytes) => {\n if (er || typeof bytes === 'undefined') {\n return cb(er);\n }\n bufPos += bytes;\n if (bufPos < 512 && bytes) {\n return fs.read(fd, headBuf, bufPos, headBuf.length - bufPos, position + bufPos, onread);\n }\n if (position === 0 &&\n headBuf[0] === 0x1f &&\n headBuf[1] === 0x8b) {\n return cb(new Error('cannot append to compressed archives'));\n }\n // truncated header\n if (bufPos < 512) {\n return cb(null, position);\n }\n const h = new Header(headBuf);\n if (!h.cksumValid) {\n return cb(null, position);\n }\n /* c8 ignore next */\n const entryBlockSize = 512 * Math.ceil((h.size ?? 0) / 512);\n if (position + entryBlockSize + 512 > size) {\n return cb(null, position);\n }\n position += entryBlockSize + 512;\n if (position >= size) {\n return cb(null, position);\n }\n if (opt.mtimeCache && h.mtime) {\n opt.mtimeCache.set(String(h.path), h.mtime);\n }\n bufPos = 0;\n fs.read(fd, headBuf, 0, 512, position, onread);\n };\n fs.read(fd, headBuf, 0, 512, position, onread);\n };\n const promise = new Promise((resolve, reject) => {\n p.on('error', reject);\n let flag = 'r+';\n const onopen = (er, fd) => {\n if (er && er.code === 'ENOENT' && flag === 'r+') {\n flag = 'w+';\n return fs.open(opt.file, flag, onopen);\n }\n if (er || !fd) {\n return reject(er);\n }\n fs.fstat(fd, (er, st) => {\n if (er) {\n return fs.close(fd, () => reject(er));\n }\n getPos(fd, st.size, (er, position) => {\n if (er) {\n return reject(er);\n }\n const stream = new WriteStream(opt.file, {\n fd: fd,\n start: position,\n });\n p.pipe(stream);\n stream.on('error', reject);\n stream.on('close', resolve);\n addFilesAsync(p, files);\n });\n });\n };\n fs.open(opt.file, flag, onopen);\n });\n return promise;\n};\nconst addFilesSync = (p, files) => {\n files.forEach(file => {\n if (file.charAt(0) === '@') {\n list({\n file: path.resolve(p.cwd, file.slice(1)),\n sync: true,\n noResume: true,\n onReadEntry: entry => p.add(entry),\n });\n }\n else {\n p.add(file);\n }\n });\n p.end();\n};\nconst addFilesAsync = async (p, files) => {\n for (let i = 0; i < files.length; i++) {\n const file = String(files[i]);\n if (file.charAt(0) === '@') {\n await list({\n file: path.resolve(String(p.cwd), file.slice(1)),\n noResume: true,\n onReadEntry: entry => p.add(entry),\n });\n }\n else {\n p.add(file);\n }\n }\n p.end();\n};\nexport const replace = makeCommand(replaceSync, replaceAsync, \n/* c8 ignore start */\n() => {\n throw new TypeError('file is required');\n}, () => {\n throw new TypeError('file is required');\n}, \n/* c8 ignore stop */\n(opt, entries) => {\n if (!isFile(opt)) {\n throw new TypeError('file is required');\n }\n if (opt.gzip ||\n opt.brotli ||\n opt.zstd ||\n opt.file.endsWith('.br') ||\n opt.file.endsWith('.tbr')) {\n throw new TypeError('cannot append to compressed archives');\n }\n if (!entries?.length) {\n throw new TypeError('no paths specified to add/replace');\n }\n});\n//# sourceMappingURL=replace.js.map","// tar -u\nimport { makeCommand } from './make-command.js';\nimport { replace as r } from './replace.js';\n// just call tar.r with the filter and mtimeCache\nexport const update = makeCommand(r.syncFile, r.asyncFile, r.syncNoFile, r.asyncNoFile, (opt, entries = []) => {\n r.validate?.(opt, entries);\n mtimeFilter(opt);\n});\nconst mtimeFilter = (opt) => {\n const filter = opt.filter;\n if (!opt.mtimeCache) {\n opt.mtimeCache = new Map();\n }\n opt.filter =\n filter ?\n (path, stat) => filter(path, stat) &&\n !(\n /* c8 ignore start */\n ((opt.mtimeCache?.get(path) ?? stat.mtime ?? 0) >\n (stat.mtime ?? 0))\n /* c8 ignore stop */\n )\n : (path, stat) => !(\n /* c8 ignore start */\n ((opt.mtimeCache?.get(path) ?? stat.mtime ?? 0) >\n (stat.mtime ?? 0))\n /* c8 ignore stop */\n );\n};\n//# sourceMappingURL=update.js.map","export const biomeJson = `\n{\n \"$schema\": \"https://biomejs.dev/schemas/latest/schema.json\",\n \"vcs\": {\n \"enabled\": true,\n \"clientKind\": \"git\"\n },\n \"files\": {\n \"ignoreUnknown\": true,\n \"includes\": [\"**\", \"!node_modules\", \"!dist\"]\n },\n \"formatter\": {\n \"enabled\": true,\n \"indentStyle\": \"space\"\n },\n \"linter\": {\n \"enabled\": true,\n \"rules\": {\n \"recommended\": true\n },\n \"domains\": {\n \"react\": \"recommended\"\n }\n },\n \"assist\": {\n \"actions\": {\n \"source\": {\n \"organizeImports\": \"on\"\n }\n }\n }\n}\n`.trim()\n","export const tsconfigJson = `\n{\n \"extends\": \"alepha/tsconfig\"\n}\n`.trim();\n","export const viteConfigTs = (\n serverEntry?: string,\n) => `\nimport { viteAlepha } from \"alepha/vite\";\n\nexport default {\n plugins: [\n viteAlepha(${serverEntry ? `{ serverEntry: \"${serverEntry}\" }` : \"\"}),\n ],\n test: {\n globals: true,\n },\n};\n`.trim()\n","import { readFileSync } from \"node:fs\";\n\nconst packageJson = JSON.parse(\n readFileSync(new URL(\"../../package.json\", import.meta.url), \"utf-8\"),\n);\n\nexport const version = packageJson.version;\n","export const indexHtml = (\n browserEntry: string = \"src/main.tsx\",\n) => `\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <title>App</title>\n</head>\n<body>\n<script type=\"module\" src=\"/${browserEntry}\"></script>\n</body>\n</html>\n`.trim()\n","import { access, readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport { $inject, Alepha, AlephaError } from \"alepha\";\nimport { FileSystemProvider } from \"alepha/file\";\nimport { $logger } from \"alepha/logger\";\nimport type { RepositoryProvider } from \"alepha/orm\";\nimport { boot } from \"alepha/vite\";\nimport * as tar from \"tar\";\nimport { tsImport } from \"tsx/esm/api\";\nimport { biomeJson } from \"../assets/biomeJson.ts\";\nimport { tsconfigJson } from \"../assets/tsconfigJson.ts\";\nimport { viteConfigTs } from \"../assets/viteConfigTs.ts\";\nimport { version } from \"../version.ts\";\nimport { ProcessRunner } from \"./ProcessRunner.ts\";\nimport { indexHtml } from \"../assets/indexHtml.ts\";\n\n/**\n * Utility service for common project operations used by CLI commands.\n *\n * This service provides helper methods for:\n * - Project configuration file management (tsconfig.json, package.json, etc.)\n * - Package manager setup (Yarn, npm, pnpm)\n * - Sample project downloading\n * - Drizzle ORM/Kit utilities\n * - Alepha instance loading\n */\nexport class ProjectUtils {\n protected readonly log = $logger();\n protected readonly runner = $inject(ProcessRunner);\n protected readonly fs = $inject(FileSystemProvider);\n\n // ===================================================================================================================\n // Package Manager & Project Setup\n // ===================================================================================================================\n\n /**\n * Ensure Yarn is configured in the project directory.\n *\n * Creates a .yarnrc.yml file with node-modules linker if it doesn't exist.\n *\n * @param root - The root directory of the project\n */\n public async ensureYarn(root: string): Promise<void> {\n const yarnrcPath = join(root, \".yarnrc.yml\");\n try {\n await access(yarnrcPath);\n } catch {\n await writeFile(yarnrcPath, \"nodeLinker: node-modules\");\n }\n\n // remove lock files from other package managers\n const npmLockPath = join(root, \"package-lock.json\");\n const pnpmLockPath = join(root, \"pnpm-lock.yaml\");\n await this.fs.rm(npmLockPath, { force: true });\n await this.fs.rm(pnpmLockPath, { force: true });\n }\n\n /**\n * Generate package.json content with Alepha dependencies.\n *\n * @param modes - Configuration for which dependencies to include\n * @returns Package.json partial with dependencies, devDependencies, and scripts\n */\n public generatePackageJsonContent(modes: DependencyModes): {\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n scripts: Record<string, string>;\n type: \"module\";\n } {\n const dependencies: Record<string, string> = {\n alepha: `^${version}`,\n };\n\n const devDependencies: Record<string, string> = {};\n\n if (modes.react) {\n dependencies[\"@alepha/react\"] = `^${version}`;\n dependencies.react = \"^19.2.0\";\n devDependencies[\"@types/react\"] = \"^19.2.0\";\n }\n\n return {\n type: \"module\",\n dependencies,\n devDependencies,\n scripts: {\n dev: \"alepha dev\",\n build: \"alepha build\",\n },\n };\n }\n\n /**\n * Ensure package.json exists and has correct configuration.\n *\n * Creates a new package.json if none exists, or updates an existing one to:\n * - Set \"type\": \"module\"\n * - Add Alepha dependencies\n * - Add standard scripts\n *\n * @param root - The root directory of the project\n * @param modes - Configuration for which dependencies to include\n */\n public async ensurePackageJson(\n root: string,\n modes: DependencyModes,\n ): Promise<void> {\n const packageJsonPath = join(root, \"package.json\");\n try {\n await access(packageJsonPath);\n } catch (error) {\n await writeFile(\n packageJsonPath,\n JSON.stringify(this.generatePackageJsonContent(modes), null, 2),\n );\n return;\n }\n\n const content = await readFile(packageJsonPath, \"utf8\");\n const packageJson = JSON.parse(content);\n\n const newPackageJson = this.generatePackageJsonContent(modes);\n\n packageJson.type = \"module\";\n packageJson.dependencies ??= {};\n packageJson.devDependencies ??= {};\n packageJson.scripts ??= {};\n\n Object.assign(packageJson.dependencies, newPackageJson.dependencies);\n Object.assign(packageJson.devDependencies, newPackageJson.devDependencies);\n Object.assign(packageJson.scripts, newPackageJson.scripts);\n\n await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));\n }\n\n /**\n * Ensure package.json exists and is configured as ES module.\n *\n * Similar to ensurePackageJson but only validates/sets the \"type\": \"module\" field.\n * Throws an error if no package.json exists.\n *\n * @param root - The root directory of the project\n * @throws {AlephaError} If no package.json is found\n */\n public async ensurePackageJsonModule(root: string): Promise<void> {\n const packageJsonPath = join(root, \"package.json\");\n try {\n await access(packageJsonPath);\n } catch (error) {\n throw new AlephaError(\n \"No package.json found in project root. Run 'npx alepha init' to create one.\",\n );\n }\n\n const content = await readFile(packageJsonPath, \"utf8\");\n const packageJson = JSON.parse(content);\n if (!packageJson.type || packageJson.type !== \"module\") {\n packageJson.type = \"module\";\n await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));\n }\n }\n\n /**\n * Ensure tsconfig.json exists in the project.\n *\n * Creates a standard Alepha tsconfig.json if none exists.\n *\n * @param root - The root directory of the project\n */\n public async ensureTsConfig(root: string): Promise<void> {\n const tsconfigPath = join(root, \"tsconfig.json\");\n try {\n await access(tsconfigPath);\n } catch {\n await writeFile(tsconfigPath, tsconfigJson);\n }\n }\n\n /**\n * Download Alepha starter project from GitHub.\n *\n * Downloads and extracts the apps/starter directory from the main Alepha repository.\n *\n * @param targetDir - The directory where the project should be extracted\n * @throws {AlephaError} If the download fails\n */\n public async downloadSampleProject(targetDir: string): Promise<void> {\n const url = \"https://api.github.com/repos/feunard/alepha/tarball/main\";\n const response = await fetch(url, {\n headers: {\n \"User-Agent\": \"Alepha-CLI\", // GitHub API requires User-Agent\n },\n });\n\n if (!response.ok) {\n throw new AlephaError(`Failed to download: ${response.statusText}`);\n }\n\n const tarStream = Readable.fromWeb(response.body as any);\n await pipeline(\n tarStream,\n tar.extract({\n cwd: targetDir, // Extract to target directory\n strip: 3, // Remove feunard-alepha-<hash>/apps/starter prefix\n filter: (path) => {\n // Only extract files from apps/starter/\n const parts = path.split(\"/\");\n return (\n parts.length >= 3 && parts[1] === \"apps\" && parts[2] === \"starter\"\n );\n },\n }),\n );\n }\n\n // ===================================================================================================================\n // Biome Configuration\n // ===================================================================================================================\n\n /**\n * Get the path to Biome configuration file.\n *\n * Looks for an existing biome.json in the project root, or creates one if it doesn't exist.\n *\n * @param maybePath - Optional custom path to biome config\n * @returns Absolute path to the biome.json config file\n */\n public async getBiomeConfigPath(maybePath?: string): Promise<string> {\n const root = process.cwd();\n if (maybePath) {\n try {\n const path = join(root, maybePath);\n await access(path);\n return path;\n } catch {}\n }\n\n try {\n const path = join(root, \"biome.json\");\n await access(path);\n return path;\n } catch {\n return await this.runner.writeConfigFile(\"biome.json\", biomeJson);\n }\n }\n\n // ===================================================================================================================\n // Vite Configuration\n // ===================================================================================================================\n\n /**\n * Get the path to Vite configuration file.\n *\n * Looks for an existing vite.config.ts in the project root, or creates one if it doesn't exist.\n *\n * @param root - The root directory of the project (defaults to process.cwd())\n * @param serverEntry - Optional path to the server entry file to include in the config\n * @returns Absolute path to the vite.config.ts file\n */\n public async getViteConfigPath(\n root: string,\n serverEntry?: string,\n ): Promise<string> {\n try {\n const viteConfigPath = join(root, \"vite.config.ts\");\n await access(viteConfigPath);\n return viteConfigPath;\n } catch {\n return this.runner.writeConfigFile(\n \"vite.config.ts\",\n viteConfigTs(serverEntry),\n );\n }\n }\n\n // ===================================================================================================================\n // Drizzle ORM & Kit Utilities\n // ===================================================================================================================\n\n /**\n * Load Alepha instance from a server entry file.\n *\n * Dynamically imports the server entry file and extracts the Alepha instance.\n * Skips the automatic start process.\n *\n * @param rootDir - The root directory of the project\n * @param explicitEntry - Optional explicit path to the entry file\n * @returns Object containing the Alepha instance and the entry file path\n * @throws {AlephaError} If the Alepha instance cannot be found\n */\n public async loadAlephaFromServerEntryFile(\n rootDir?: string,\n explicitEntry?: string,\n ): Promise<{\n alepha: Alepha;\n entry: string;\n }> {\n process.env.ALEPHA_SKIP_START = \"true\";\n\n const entry = await boot.getServerEntry(rootDir, explicitEntry);\n const mod = await tsImport(entry, {\n parentURL: import.meta.url,\n });\n\n this.log.debug(`Load entry: ${entry}`);\n\n // check if alepha is correctly exported\n if (mod.default instanceof Alepha) {\n return {\n alepha: mod.default,\n entry,\n };\n }\n\n // else, try with global variable\n const g: any = global;\n if (g.__alepha) {\n return {\n alepha: g.__alepha,\n entry,\n };\n }\n\n throw new AlephaError(\n `Could not find Alepha instance in entry file: ${entry}`,\n );\n }\n\n /**\n * Get DrizzleKitProvider from an Alepha instance.\n *\n * Searches the Alepha registry for the DrizzleKitProvider instance.\n *\n * @param alepha - The Alepha instance to search\n * @returns The DrizzleKitProvider instance\n */\n public getKitFromAlepha(alepha: Alepha): any {\n // biome-ignore lint/complexity/useLiteralKeys: private key\n return alepha[\"registry\"]\n .values()\n .find((it: any) => it.instance.constructor.name === \"DrizzleKitProvider\")\n ?.instance;\n }\n\n /**\n * Generate JavaScript code for Drizzle entities export.\n *\n * Creates a temporary entities.js file that imports from the entry file\n * and exports database models for Drizzle Kit to process.\n *\n * @param entry - Path to the server entry file\n * @param provider - Name of the database provider\n * @param models - Array of model names to export\n * @returns JavaScript code as a string\n */\n public generateEntitiesJs(\n entry: string,\n provider: string,\n models: string[] = [],\n ): string {\n return `\nimport \"${entry}\";\nimport { DrizzleKitProvider, Repository } from \"alepha/orm\";\n\nconst alepha = globalThis.__alepha;\nconst kit = alepha.inject(DrizzleKitProvider);\nconst provider = alepha.services(Repository).find((it) => it.provider.name === \"${provider}\").provider;\nconst models = kit.getModels(provider);\n\n${models.map((it: string) => `export const ${it} = models[\"${it}\"];`).join(\"\\n\")}\n\n`.trim();\n }\n\n /**\n * Prepare Drizzle configuration files for a database provider.\n *\n * Creates temporary entities.js and drizzle.config.js files needed\n * for Drizzle Kit commands to run properly.\n *\n * @param options - Configuration options including kit, provider info, and paths\n * @returns Path to the generated drizzle.config.js file\n */\n public async prepareDrizzleConfig(options: {\n kit: any;\n provider: any;\n providerName: string;\n providerUrl: string;\n dialect: string;\n entry: string;\n rootDir: string;\n }): Promise<string> {\n const models = Object.keys(options.kit.getModels(options.provider));\n const entitiesJs = this.generateEntitiesJs(\n options.entry,\n options.providerName,\n models,\n );\n\n const entitiesJsPath = await this.runner.writeConfigFile(\n \"entities.js\",\n entitiesJs,\n options.rootDir,\n );\n\n const config: Record<string, any> = {\n schema: entitiesJsPath,\n out: `./migrations/${options.providerName}`,\n dialect: options.dialect,\n dbCredentials: {\n url: options.providerUrl,\n },\n };\n\n if (options.providerName === \"pglite\") {\n config.driver = \"pglite\";\n }\n\n const drizzleConfigJs = `export default ${JSON.stringify(config, null, 2)}`;\n\n return await this.runner.writeConfigFile(\n \"drizzle.config.js\",\n drizzleConfigJs,\n options.rootDir,\n );\n }\n\n /**\n * Run a drizzle-kit command for all database providers in an Alepha instance.\n *\n * Iterates through all repository providers, prepares Drizzle config for each,\n * and executes the specified drizzle-kit command.\n *\n * @param options - Configuration including command to run, flags, and logging\n */\n public async runDrizzleKitCommand(options: {\n root: string;\n args?: string;\n command: string;\n logMessage: (providerName: string, dialect: string) => string;\n }): Promise<void> {\n const rootDir = options.root;\n this.log.debug(`Using project root: ${rootDir}`);\n\n const { alepha, entry } = await this.loadAlephaFromServerEntryFile(\n rootDir,\n options.args,\n );\n\n const kit = this.getKitFromAlepha(alepha);\n const repositoryProvider =\n alepha.inject<RepositoryProvider>(\"RepositoryProvider\");\n const accepted = new Set<string>([]);\n\n for (const descriptor of repositoryProvider.getRepositories()) {\n const provider = descriptor.provider;\n const providerName = provider.name;\n const dialect = provider.dialect;\n\n if (accepted.has(providerName)) {\n continue;\n }\n accepted.add(providerName);\n\n this.log.info(\"\");\n this.log.info(options.logMessage(providerName, dialect));\n\n const drizzleConfigJsPath = await this.prepareDrizzleConfig({\n kit,\n provider,\n providerName,\n providerUrl: provider.url,\n dialect,\n entry,\n rootDir,\n });\n\n await this.runner.exec(\n `drizzle-kit ${options.command} --config=${drizzleConfigJsPath}`,\n );\n }\n }\n\n public async getPackageManager(root: string): Promise<\"yarn\" | \"pnpm\" | \"npm\"> {\n if (await this.fs.exists(join(root, \"yarn.lock\"))) {\n return \"yarn\";\n } else if (await this.fs.exists(join(root, \"pnpm-lock.yaml\"))) {\n return \"pnpm\";\n } else {\n return \"npm\";\n }\n }\n\n public async ensureIndexHtml(\n root: string,\n ) {\n if (await this.fs.exists(join(root, \"index.html\"))) {\n return;\n }\n\n const entry = await boot.getServerEntry(root).catch(() => null);\n await this.fs.writeFile(\n join(root, \"index.html\"), indexHtml(entry ? entry.replace(root, \"\") : undefined)\n )\n }\n}\n\nexport interface DependencyModes {\n react?: boolean;\n // testing?: boolean;\n // ui?: boolean;\n}\n","import { $inject, t } from \"alepha\";\nimport { $command } from \"alepha/command\";\nimport { $logger } from \"alepha/logger\";\nimport { ProcessRunner } from \"../services/ProcessRunner.ts\";\nimport { ProjectUtils } from \"../services/ProjectUtils.ts\";\n\nexport class BiomeCommands {\n protected readonly log = $logger();\n protected readonly runner = $inject(ProcessRunner);\n protected readonly utils = $inject(ProjectUtils);\n\n protected readonly biomeFlags = t.object({\n config: t.optional(\n t.text({\n aliases: [\"c\"],\n }),\n ),\n });\n\n public readonly format = $command({\n name: \"format\",\n description: \"Format the codebase using Biome\",\n flags: this.biomeFlags,\n handler: async ({ flags }) => {\n const configPath = await this.utils.getBiomeConfigPath(flags.config);\n await this.runner.exec(`biome format --fix --config-path=${configPath}`);\n },\n });\n\n public readonly lint = $command({\n name: \"lint\",\n description: \"Run linter across the codebase using Biome\",\n flags: this.biomeFlags,\n handler: async ({ flags }) => {\n const configPath = await this.utils.getBiomeConfigPath(flags.config);\n await this.runner.exec(\n `biome check --formatter-enabled=false --fix --config-path=${configPath}`,\n );\n },\n });\n}\n","import { access, mkdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { $inject, t } from \"alepha\";\nimport { $command, CliProvider } from \"alepha/command\";\nimport { $logger } from \"alepha/logger\";\nimport { ProjectUtils } from \"../services/ProjectUtils.ts\";\nimport { version } from \"../version.ts\";\n\nexport class CoreCommands {\n protected readonly log = $logger();\n protected readonly cli = $inject(CliProvider);\n protected readonly utils = $inject(ProjectUtils);\n\n /**\n * Called when no command is provided\n */\n public readonly root = $command({\n root: true,\n flags: t.object({\n version: t.optional(\n t.boolean({\n description: \"Show Alepha CLI version\",\n aliases: [\"v\"],\n }),\n ),\n }),\n handler: async ({ flags }) => {\n if (flags.version) {\n this.log.info(version);\n return;\n }\n\n this.cli.printHelp();\n },\n });\n\n /**\n * Create a new Alepha project based on one of the sample projects (for now, only one sample project is available)\n */\n public readonly create = $command({\n name: \"create\",\n description: \"Create a new Alepha project\",\n aliases: [\"new\"],\n args: t.text({\n title: \"name\",\n }),\n flags: t.object({\n yarn: t.optional(t.boolean({ description: \"Use Yarn package manager\" })),\n pnpm: t.optional(t.boolean({ description: \"Use pnpm package manager\" })),\n }),\n summary: false,\n handler: async ({ run, args, flags, root }) => {\n const name = args;\n const dest = join(root, name);\n\n try {\n await access(dest);\n this.log.error(\n `Directory \"${name}\" already exists. Please choose a different project name.`,\n );\n return;\n } catch {\n // Directory does not exist, proceed\n }\n\n let installCmd = \"npm install\";\n let execCmd = \"npx\";\n if (flags.yarn) {\n installCmd = \"yarn\";\n execCmd = \"yarn\";\n } else if (flags.pnpm) {\n installCmd = \"pnpm install\";\n execCmd = \"pnpm\";\n }\n\n await mkdir(dest, { recursive: true }).catch(() => null);\n\n await run(\"Downloading sample project\", () =>\n this.utils.downloadSampleProject(dest),\n );\n\n if (flags.yarn) {\n await this.utils.ensureYarn(dest);\n await run(`cd ${name} && yarn set version stable`, {\n alias: \"Setting Yarn to stable version\",\n });\n }\n\n await run(`cd ${name} && ${installCmd}`, {\n alias: \"Installing dependencies\",\n });\n\n await run(`cd ${name} && npx alepha lint`, {\n alias: \"Linting code\",\n });\n\n await run(`cd ${name} && npx alepha typecheck`, {\n alias: \"Type checking\",\n });\n\n await run(`cd ${name} && npx alepha test`, {\n alias: \"Running tests\",\n });\n\n await run(`cd ${name} && npx alepha build`, {\n alias: \"Building project\",\n });\n\n this.log.info(\"\");\n this.log.info(`$ cd ${name} && ${execCmd} alepha dev`.trim());\n this.log.info(\"\");\n },\n });\n\n /**\n * Clean the project, removing the \"dist\" directory\n */\n public readonly clean = $command({\n name: \"clean\",\n description: \"Clean the project\",\n handler: async ({ run }) => {\n await run.rm(\"./dist\");\n },\n });\n\n /**\n * Ensure the project has the necessary Alepha configuration files.\n * Add the correct dependencies to package.json and install them.\n */\n public readonly init = $command({\n name: \"init\",\n description: \"Add missing Alepha configuration files to the project\",\n flags: t.object({\n // TODO:\n // force: t.boolean({\n // description: \"If true, all config files will be overwritten\",\n // }),\n // choose package manager\n yarn: t.optional(t.boolean({ description: \"Use Yarn package manager\" })),\n // choose which dependencies to add\n api: t.optional(\n t.boolean({ description: \"Include Alepha Server dependencies\" }),\n ),\n react: t.optional(\n t.boolean({ description: \"Include Alepha React dependencies\" }),\n ),\n orm: t.optional(\n t.boolean({ description: \"Include Alepha ORM dependencies\" }),\n ),\n }),\n handler: async ({ run, flags, root }) => {\n await run(\"Ensuring Alepha configuration files\", async () => {\n await this.utils.ensureTsConfig(root);\n await this.utils.ensurePackageJson(root, flags);\n });\n\n if (flags.react) {\n // if index.html does not exist, create it\n await run(\"Ensuring index.html file\", async () => {\n await this.utils.ensureIndexHtml(root);\n });\n }\n\n // TODO: check if all alepha dependencies are same version\n\n const guessedPm = await this.utils.getPackageManager(root);\n\n if (flags.yarn || guessedPm === \"yarn\") {\n await this.utils.ensureYarn(root);\n await run(\"yarn install\", {\n alias: \"Installing dependencies with Yarn\",\n });\n } else {\n await run(\"npm install\", {\n alias: \"Installing dependencies with npm\",\n });\n }\n },\n });\n}\n","import { readFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { join } from \"node:path\";\nimport { $inject, AlephaError, t } from \"alepha\";\nimport { $command } from \"alepha/command\";\nimport { $logger } from \"alepha/logger\";\nimport { ProcessRunner } from \"../services/ProcessRunner.ts\";\nimport { ProjectUtils } from \"../services/ProjectUtils.ts\";\n\nexport class DrizzleCommands {\n log = $logger();\n runner = $inject(ProcessRunner);\n utils = $inject(ProjectUtils);\n\n /**\n * Check if database migrations are up to date\n *\n * - Loads the Alepha instance from the specified entry file.\n * - Retrieves all repository descriptors to gather database models.\n * - Reads the last migration snapshot from the migration journal.\n * - Generates the current database schema representation.\n * - Compares the current schema with the last snapshot to detect changes.\n * - If changes are detected, prompts the user to run the migration generation command!\n */\n check = $command({\n name: \"db:check-migrations\",\n description: \"Verify database migration files are up to date\",\n args: t.optional(\n t.text({\n title: \"path\",\n description: \"Path to the Alepha server entry file\",\n }),\n ),\n handler: async ({ args, root }) => {\n const rootDir = root;\n this.log.debug(`Using project root: ${rootDir}`);\n const { alepha } = await this.utils.loadAlephaFromServerEntryFile(\n rootDir,\n args,\n );\n\n const models: any[] = [];\n const repositories = alepha.descriptors(\"repository\") as any[];\n const kit = createRequire(import.meta.url)(\"drizzle-kit/api\");\n const migrationDir = join(rootDir, \"migrations\");\n\n const journalFile = await readFile(\n `${migrationDir}/meta/_journal.json`,\n \"utf-8\",\n ).catch(() => null);\n\n if (!journalFile) {\n this.log.info(`No migration journal found.`);\n return;\n }\n\n const journal = JSON.parse(journalFile);\n\n const lastMigration = journal.entries[journal.entries.length - 1];\n\n const lastSnapshot = JSON.parse(\n await readFile(\n `${migrationDir}/meta/${String(lastMigration.idx).padStart(4, \"0\")}_snapshot.json`,\n \"utf-8\",\n ),\n );\n\n for (const repository of repositories) {\n if (!models.includes(repository.table)) {\n models.push(repository.table);\n }\n }\n\n const now = kit.generateDrizzleJson(models, lastSnapshot.id);\n\n const migrationStatements = await new Promise<Array<any>>((resolve) => {\n (async () => {\n const timer = setTimeout(() => {\n resolve([{ message: \"Migration generation timed out.\" }]);\n }, 5000);\n const statements = await kit.generateMigration(lastSnapshot, now);\n clearTimeout(timer);\n resolve(statements);\n })();\n });\n\n if (migrationStatements.length === 0) {\n this.log.info(\"No changes detected.\");\n return;\n }\n\n this.log.info(\"\");\n this.log.info(\"Detected migration statements:\");\n this.log.info(\"\");\n for (const stmt of migrationStatements) {\n this.log.info(stmt);\n }\n this.log.info(\"\");\n\n this.log.info(\n `At least ${migrationStatements.length} change(s) detected.`,\n );\n this.log.info(\n \"Please, run 'alepha db:generate' to update the migration files.\",\n );\n this.log.info(\"\");\n\n throw new AlephaError(\"Database migrations are not up to date.\");\n },\n });\n\n /**\n * Generate database migration files\n *\n * - Loads the Alepha instance from the specified entry file.\n * - Retrieves all repository descriptors to gather database models.\n * - Creates temporary entity definitions based on the current database schema.\n * - Writes these definitions to a temporary schema file. (node_modules/.db/entities.ts)\n * - Invokes Drizzle Kit's CLI to generate migration files based on the current schema.\n */\n generate = $command({\n name: \"db:generate\",\n description: \"Generate migration files based on current database schema\",\n summary: false,\n args: t.optional(\n t.text({\n title: \"path\",\n description: \"Path to the Alepha server entry file\",\n }),\n ),\n handler: async ({ args, root }) => {\n await this.utils.runDrizzleKitCommand({\n root,\n args,\n command: \"generate\",\n logMessage: (providerName, dialect) =>\n `Generate '${providerName}' migrations (${dialect}) ...`,\n });\n },\n });\n\n /**\n * Push database schema changes directly to the database\n *\n * - Loads the Alepha instance from the specified entry file.\n * - Retrieves all repository descriptors to gather database models.\n * - Creates temporary entity definitions and Drizzle config.\n * - Invokes Drizzle Kit's push command to apply schema changes directly.\n */\n push = $command({\n name: \"db:push\",\n description: \"Push database schema changes directly to the database\",\n summary: false,\n args: t.optional(\n t.text({\n title: \"path\",\n description: \"Path to the Alepha server entry file\",\n }),\n ),\n handler: async ({ root, args }) => {\n await this.utils.runDrizzleKitCommand({\n root,\n args,\n command: \"push\",\n logMessage: (providerName, dialect) =>\n `Push '${providerName}' schema (${dialect}) ...`,\n });\n },\n });\n\n /**\n * Apply pending database migrations\n *\n * - Loads the Alepha instance from the specified entry file.\n * - Retrieves all repository descriptors to gather database models.\n * - Creates temporary entity definitions and Drizzle config.\n * - Invokes Drizzle Kit's migrate command to apply pending migrations.\n */\n migrate = $command({\n name: \"db:migrate\",\n description: \"Apply pending database migrations\",\n summary: false,\n args: t.optional(\n t.text({\n title: \"path\",\n description: \"Path to the Alepha server entry file\",\n }),\n ),\n handler: async ({ root, args }) => {\n await this.utils.runDrizzleKitCommand({\n root,\n args,\n command: \"migrate\",\n logMessage: (providerName, dialect) =>\n `Migrate '${providerName}' database (${dialect}) ...`,\n });\n },\n });\n\n /**\n * Launch Drizzle Studio database browser\n *\n * - Loads the Alepha instance from the specified entry file.\n * - Retrieves all repository descriptors to gather database models.\n * - Creates temporary entity definitions and Drizzle config.\n * - Invokes Drizzle Kit's studio command to launch the web-based database browser.\n */\n studio = $command({\n name: \"db:studio\",\n description: \"Launch Drizzle Studio database browser\",\n summary: false,\n args: t.optional(\n t.text({\n title: \"path\",\n description: \"Path to the Alepha server entry file\",\n }),\n ),\n handler: async ({ root, args }) => {\n await this.utils.runDrizzleKitCommand({\n root,\n args,\n command: \"studio\",\n logMessage: (providerName, dialect) =>\n `Launch Studio for '${providerName}' (${dialect}) ...`,\n });\n },\n });\n}\n","import { $inject } from \"alepha\";\nimport { $command } from \"alepha/command\";\nimport { ProcessRunner } from \"../services/ProcessRunner.ts\";\n\nexport class VerifyCommands {\n protected readonly processRunner = $inject(ProcessRunner);\n\n /**\n * Run a series of verification commands to ensure code quality and correctness.\n *\n * This command runs the following checks in order:\n * 1. Clean the project\n * 2. Format the code\n * 3. Lint the code\n * 4. Run tests\n * 5. Type check the code\n * 8. Build the project\n * 9. Clean the project again\n */\n public readonly verify = $command({\n name: \"verify\",\n description: \"Verify the Alepha project\",\n handler: async ({ run }) => {\n await run(\"alepha clean\");\n await run(\"alepha format\");\n await run(\"alepha lint\");\n await run(\"alepha test\");\n await run(\"alepha typecheck\");\n await run(\"alepha build\");\n await run(\"alepha clean\");\n },\n });\n\n /**\n * Run TypeScript type checking across the codebase with no emit.\n */\n public readonly typecheck = $command({\n name: \"typecheck\",\n description: \"Check TypeScript types across the codebase\",\n handler: async () => {\n await this.processRunner.exec(\"tsc --noEmit\");\n },\n });\n}\n","import { access, rm } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { $inject, t } from \"alepha\";\nimport { $command } from \"alepha/command\";\nimport { $logger } from \"alepha/logger\";\nimport { boot } from \"alepha/vite\";\nimport { ProcessRunner } from \"../services/ProcessRunner.ts\";\nimport { ProjectUtils } from \"../services/ProjectUtils.ts\";\n\nexport class ViteCommands {\n protected readonly log = $logger();\n protected readonly runner = $inject(ProcessRunner);\n protected readonly utils = $inject(ProjectUtils);\n\n public readonly run = $command({\n name: \"run\",\n description: \"Run a TypeScript file directly\",\n flags: t.object({\n watch: t.optional(\n t.boolean({ description: \"Watch file for changes\", alias: \"w\" }),\n ),\n }),\n summary: false,\n args: t.text({ title: \"path\", description: \"Filepath to run\" }),\n handler: async ({ args, flags, root }) => {\n await this.utils.ensureTsConfig(root);\n await this.runner.exec(`tsx ${flags.watch ? \"watch \" : \"\"}${args}`);\n },\n });\n\n /**\n * Will run the project in watch mode.\n *\n * - If an index.html file is found in the project root, it will run Vite in dev mode.\n * - Otherwise, it will look for a server entry file and run it with tsx in watch mode.\n */\n public readonly dev = $command({\n name: \"dev\",\n description: \"Run the project in development mode\",\n args: t.optional(t.text({ title: \"path\", description: \"Filepath to run\" })),\n handler: async ({ args, root }) => {\n await this.utils.ensureTsConfig(root);\n await this.utils.ensurePackageJsonModule(root);\n const entry = await boot.getServerEntry(root, args);\n this.log.trace(\"Entry file found\", { entry });\n\n try {\n await access(join(root, \"index.html\"));\n } catch {\n this.log.trace(\"No index.html found, running entry file with tsx\");\n await this.runner.exec(`tsx watch ${entry}`);\n return;\n }\n\n const configPath = await this.utils.getViteConfigPath(\n root,\n args ? entry : undefined,\n );\n this.log.trace(\"Vite config found\", { configPath });\n await this.runner.exec(`vite -c=${configPath}`);\n },\n });\n\n public readonly build = $command({\n name: \"build\",\n description: \"Build the project for production\",\n args: t.optional(\n t.text({ title: \"path\", description: \"Filepath to build\" }),\n ),\n flags: t.object({\n config: t.optional(\n t.text({ aliases: [\"c\"], description: \"Path to config file\" }),\n ),\n stats: t.optional(\n t.boolean({\n description: \"Generate build stats report\",\n }),\n ),\n }),\n handler: async ({ flags, args }) => {\n const root = process.cwd();\n await this.utils.ensureTsConfig(root);\n await this.utils.ensurePackageJsonModule(root);\n const entry = await boot.getServerEntry(root, args);\n this.log.trace(\"Entry file found\", { entry });\n\n await rm(\"dist\", { recursive: true, force: true });\n\n // DISABLED FOR NOW (waiting for vite-rolldown)\n // if (flags.lib) {\n // await this.runner.exec(\n // `tsdown${flags.config ? ` -c=${flags.config}` : \"\"}`,\n // );\n // return;\n // }\n\n const configPath = await this.utils.getViteConfigPath(\n root,\n args ? entry : undefined,\n );\n\n const env: Record<string, string> = {};\n if (flags.stats) {\n env.ALEPHA_BUILD_STATS = \"true\";\n }\n\n await this.runner.exec(`vite build -c=${configPath}`, env);\n },\n });\n\n public readonly test = $command({\n name: \"test\",\n description: \"Run tests using Vitest\",\n handler: async ({ root }) => {\n await this.utils.ensureTsConfig(root);\n const configPath = await this.utils.getViteConfigPath(root);\n await this.runner.exec(`vitest run -c=${configPath}`);\n },\n });\n}\n","import { access, readdir, readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { $inject } from \"alepha\";\nimport { $command } from \"alepha/command\";\nimport { FileSystemProvider } from \"alepha/file\";\nimport type { InlineConfig } from \"tsdown\";\nimport * as os from \"node:os\";\n\ninterface Module {\n name: string;\n dependencies: string[];\n browser?: boolean;\n node?: boolean;\n}\n\nexport class PackageBuilderCli {\n src = \"src\";\n dist = \"dist\";\n fs = $inject(FileSystemProvider);\n\n make = $command({\n root: true,\n handler: async ({ run, root }) => {\n const modules: Array<Module> = [];\n\n\n const pkg = await readFile(\"package.json\", \"utf-8\");\n const pkgData = JSON.parse(pkg);\n const packageName = pkgData.name as string;\n\n await run(\"analyze modules\", async () => {\n modules.push(...(await analyzeModules(join(root, this.src), packageName)));\n });\n\n pkgData.exports = {};\n for (const item of modules) {\n const path =\n item.name === \"core\" ? \".\" : `./${item.name.replace(\"-\", \"/\")}`;\n pkgData.exports[path] = {};\n // order is important here for compatibility\n pkgData.exports[path].types = `./src/${item.name}/index.ts`;\n if (item.browser) {\n pkgData.exports[path].browser = `./src/${item.name}/index.browser.ts`;\n }\n pkgData.exports[path].import = `./src/${item.name}/index.ts`;\n pkgData.exports[path].require = `./src/${item.name}/index.ts`;\n }\n if (packageName === \"alepha\") {\n pkgData.exports[\"./tsconfig\"] = \"./tsconfig.base.json\";\n pkgData.exports[\"./package.json\"] = \"./package.json\";\n }\n await this.fs.writeFile(\"package.json\", JSON.stringify(pkgData, null, 2));\n\n const tmpDir = join(root, \"node_modules/.alepha\");\n await this.fs.mkdir(tmpDir, { recursive: true }).catch(() => {});\n\n await this.fs.writeFile(\n join(tmpDir, \"module-dependencies.json\"),\n JSON.stringify(modules, null, 2),\n );\n\n const external = [\n \"alepha\",\n ...modules.map((item) => `alepha/${item.name}`),\n ];\n\n await run.rm(this.dist);\n\n const build = async (item: Module) => {\n const entries: InlineConfig[] = [];\n const src = join(root, this.src, item.name);\n const dest = join(root, this.dist, item.name);\n\n entries.push({\n entry: join(src, \"index.ts\"),\n outDir: dest,\n format: [\"esm\", \"cjs\"],\n sourcemap: true,\n fixedExtension: false,\n platform: \"node\", // TODO: node must be enabled only if index.node.ts exists\n external,\n });\n\n if (item.browser) {\n entries.push({\n entry: join(src, \"index.browser.ts\"),\n outDir: dest,\n platform: \"browser\",\n sourcemap: true,\n dts: false,\n external,\n });\n }\n\n const config = join(tmpDir, `tsdown-${item.name}.config.js`);\n await this.fs.writeFile(\n config,\n `export default ${JSON.stringify(entries, null, 2)};`,\n );\n await run(`npx tsdown -c=${config}`);\n await this.fs.rm(config);\n };\n\n\n const concurrency = Math.ceil(os.cpus().length / 2);\n const queue = modules.slice();\n const workers: Promise<void>[] = [];\n for (let i = 0; i < concurrency; i++) {\n const worker = (async () => {\n while (queue.length > 0) {\n const item = queue.shift();\n if (item) {\n await build(item);\n } else {\n await new Promise((r) => setTimeout(r, 100));\n }\n }\n })();\n workers.push(worker);\n }\n await Promise.all(workers);\n },\n });\n}\n\nasync function getAllFiles(dir: string): Promise<string[]> {\n const files: string[] = [];\n\n async function scan(currentDir: string) {\n const entries = await readdir(currentDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = join(currentDir, entry.name);\n\n if (entry.isDirectory()) {\n await scan(fullPath);\n } else if (entry.isFile() && /\\.(ts|tsx)$/.test(entry.name)) {\n files.push(fullPath);\n }\n }\n }\n\n await scan(dir);\n return files;\n}\n\nfunction removeComments(content: string): string {\n // Remove single-line comments\n let cleaned = content.replace(/\\/\\/.*$/gm, \"\");\n\n // Remove multi-line comments\n cleaned = cleaned.replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\");\n\n return cleaned;\n}\n\nfunction extractAlephaDependencies(content: string, packageName: string, moduleName:string): string[] {\n const deps = new Set<string>();\n const cleanedContent = removeComments(content);\n\n // Match: from \"alepha/xxx\" or from 'alepha/xxx'\n const importRegex = new RegExp(`from \"${packageName}/([a-zA-Z0-9_/]+)\";`, \"g\");\n\n const matches = cleanedContent.matchAll(importRegex);\n for (const match of matches) {\n deps.add(match[1]);\n }\n\n return Array.from(deps);\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction detectCircularDependencies(modules: Module[]): void {\n const moduleMap = new Map(modules.map((m) => [m.name, m.dependencies]));\n\n function hasCycle(\n moduleName: string,\n visited: Set<string> = new Set(),\n path: string[] = [],\n ): string[] | null {\n if (visited.has(moduleName)) {\n // Found a cycle, return the path\n const cycleStart = path.indexOf(moduleName);\n return [...path.slice(cycleStart), moduleName];\n }\n\n const deps = moduleMap.get(moduleName);\n if (!deps) return null;\n\n visited.add(moduleName);\n path.push(moduleName);\n\n for (const dep of deps) {\n const cycle = hasCycle(dep, new Set(visited), [...path]);\n if (cycle) return cycle;\n }\n\n return null;\n }\n\n for (const module of modules) {\n const cycle = hasCycle(module.name);\n if (cycle) {\n throw new Error(`Circular dependency detected: ${cycle.join(\" -> \")}`);\n }\n }\n}\n\nexport async function analyzeModules(srcDir: string, packageName: string): Promise<Module[]> {\n const modules: Module[] = [];\n const entries = await readdir(srcDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const moduleName = entry.name;\n const modulePath = join(srcDir, moduleName);\n const dependencies = new Set<string>();\n\n // Check for browser/node entry points\n const hasBrowser = await fileExists(join(modulePath, \"index.browser.ts\"));\n const hasNode = await fileExists(join(modulePath, \"index.node.ts\"));\n\n // Get all .ts/.tsx files in this module\n const files = await getAllFiles(modulePath);\n\n for (const file of files) {\n const content = await readFile(file, \"utf-8\");\n const deps = extractAlephaDependencies(content, packageName, moduleName);\n for (const dep of deps) {\n if (dep.endsWith(\".ts\")) {\n throw new Error(\n `Invalid dependency '${dep}' in module '${moduleName}'. Do not include file extensions in Alepha module imports.`,\n );\n }\n if (dep.includes(\"-\")) {\n throw new Error(\n `Invalid dependency '${dep}' in module '${moduleName}'. Use '/' instead of '-' in Alepha module imports.`,\n );\n }\n dependencies.add(dep);\n }\n }\n\n const module: Module = {\n name: moduleName,\n dependencies: Array.from(dependencies),\n };\n\n if (hasBrowser) module.browser = true;\n if (hasNode) module.node = true;\n\n modules.push(module);\n }\n }\n\n // Check for circular dependencies\n detectCircularDependencies(modules);\n\n return modules;\n}\n","import { $module } from \"alepha\";\nimport { BiomeCommands } from \"./commands/BiomeCommands.ts\";\nimport { CoreCommands } from \"./commands/CoreCommands.ts\";\nimport { DrizzleCommands } from \"./commands/DrizzleCommands.ts\";\nimport { VerifyCommands } from \"./commands/VerifyCommands.ts\";\nimport { ViteCommands } from \"./commands/ViteCommands.ts\";\nimport { ProcessRunner } from \"./services/ProcessRunner.ts\";\n\nexport * from \"./packageBuilderCli.ts\";\nexport * from \"./version.ts\";\n\nexport const AlephaCli = $module({\n name: \"alepha.cli\",\n services: [\n ProcessRunner,\n CoreCommands,\n DrizzleCommands,\n VerifyCommands,\n ViteCommands,\n BiomeCommands,\n ],\n});\n"],"x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["path","name","EventEmitter","EOF","READ","BUFFER","ABORTED","p","ret","res","path","Buffer","noop","#sawError","#handle","#flushFlag","#finishFlushFlag","#fullFlushFlag","realZlib","#onError","#ended","#level","#strategy","#portable","encode","parse","#slurp","t","types.isCode","#type","path","pathModule","large.parse","large.encode","global","#slurp","code","QUEUE","ENDED","EE","code","chunk","ret","fs","pos","parse","fsm.ReadStream","parse","path","s","path","PROCESS","FILE","DIRECTORY","SYMLINK","HARDLINK","ONDRAIN","winchars.decode","code","#hadError","pos","list","t","path","ENDED","zlib.Gzip","zlib.BrotliCompress","zlib.ZstdCompress","code","addFilesSync","addFilesAsync","isWindows","fs","path","er","code","path","path","mkdir","er","code","fs","created","s","isWindows","path","#reservations","#queues","#run","#getQueues","#running","#clear","fn","fs","path","name","code","wc.encode","fsm.WriteStream","er","checkCwd","fs","fsm.ReadStreamSync","fsm.ReadStream","fs","pos","er","r","path","dependencies: Record<string, string>","devDependencies: Record<string, string>","packageJson","tar.extract","path","g: any","config: Record<string, any>","name","models: any[]","env: Record<string, string>","modules: Array<Module>","path","entries: InlineConfig[]","workers: Promise<void>[]","files: string[]","modules: Module[]","module: Module"],"sources":["../../src/cli/services/ProcessRunner.ts","../../../../node_modules/minipass/dist/esm/index.js","../../../../node_modules/@isaacs/fs-minipass/dist/esm/index.js","../../../../node_modules/tar/dist/esm/options.js","../../../../node_modules/tar/dist/esm/make-command.js","../../../../node_modules/minizlib/dist/esm/constants.js","../../../../node_modules/minizlib/dist/esm/index.js","../../../../node_modules/tar/dist/esm/large-numbers.js","../../../../node_modules/tar/dist/esm/types.js","../../../../node_modules/tar/dist/esm/header.js","../../../../node_modules/tar/dist/esm/pax.js","../../../../node_modules/tar/dist/esm/normalize-windows-path.js","../../../../node_modules/tar/dist/esm/read-entry.js","../../../../node_modules/tar/dist/esm/warn-method.js","../../../../node_modules/tar/dist/esm/parse.js","../../../../node_modules/tar/dist/esm/strip-trailing-slashes.js","../../../../node_modules/tar/dist/esm/list.js","../../../../node_modules/tar/dist/esm/mode-fix.js","../../../../node_modules/tar/dist/esm/strip-absolute-path.js","../../../../node_modules/tar/dist/esm/winchars.js","../../../../node_modules/tar/dist/esm/write-entry.js","../../../../node_modules/tar/node_modules/yallist/dist/esm/index.js","../../../../node_modules/tar/dist/esm/pack.js","../../../../node_modules/tar/dist/esm/create.js","../../../../node_modules/tar/dist/esm/get-write-flag.js","../../../../node_modules/chownr/dist/esm/index.js","../../../../node_modules/tar/dist/esm/cwd-error.js","../../../../node_modules/tar/dist/esm/symlink-error.js","../../../../node_modules/tar/dist/esm/mkdir.js","../../../../node_modules/tar/dist/esm/normalize-unicode.js","../../../../node_modules/tar/dist/esm/path-reservations.js","../../../../node_modules/tar/dist/esm/unpack.js","../../../../node_modules/tar/dist/esm/extract.js","../../../../node_modules/tar/dist/esm/replace.js","../../../../node_modules/tar/dist/esm/update.js","../../src/cli/assets/biomeJson.ts","../../src/cli/assets/tsconfigJson.ts","../../src/cli/assets/viteConfigTs.ts","../../src/cli/version.ts","../../src/cli/assets/indexHtml.ts","../../src/cli/services/ProjectUtils.ts","../../src/cli/commands/BiomeCommands.ts","../../src/cli/commands/CoreCommands.ts","../../src/cli/commands/DrizzleCommands.ts","../../src/cli/commands/VerifyCommands.ts","../../src/cli/commands/ViteCommands.ts","../../src/cli/packageBuilderCli.ts","../../src/cli/index.ts"],"sourcesContent":["import { spawn } from \"node:child_process\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { $logger } from \"alepha/logger\";\n\n/**\n * Service for running external processes with logging support.\n *\n * This service wraps Node.js child_process functionality and provides:\n * - Automatic logging of executed commands\n * - Promise-based execution\n * - Inherited stdio for seamless output\n * - Working directory context\n * - Config file management in node_modules/.alepha\n */\nexport class ProcessRunner {\n protected readonly log = $logger();\n\n /**\n * Execute a command using npx with inherited stdio.\n *\n * @param command - The command to execute (will be passed to npx)\n * @param env - Optional environment variables to set for the command\n * @returns Promise that resolves when the process exits\n *\n * @example\n * ```ts\n * const runner = alepha.inject(ProcessRunner);\n * await runner.exec(\"tsx watch src/index.ts\");\n * ```\n */\n public async exec(\n command: string,\n env: Record<string, string> = {},\n ): Promise<void> {\n this.log.debug(`Executing command: npx ${command}`, { cwd: process.cwd() });\n\n const prog = spawn(\"npx\", command.split(\" \"), {\n stdio: \"inherit\",\n cwd: process.cwd(),\n env: {\n ...process.env,\n ...env,\n NODE_OPTIONS: \"--import tsx\",\n },\n });\n\n await new Promise<void>((resolve) =>\n prog.on(\"exit\", () => {\n resolve();\n }),\n );\n }\n\n /**\n * Write a configuration file to node_modules/.alepha directory.\n *\n * Creates the .alepha directory if it doesn't exist and writes the file with the given content.\n *\n * @param name - The name of the config file to create\n * @param content - The content to write to the file\n * @param root - The root directory (defaults to process.cwd())\n * @returns The absolute path to the created file\n *\n * @example\n * ```ts\n * const runner = alepha.inject(ProcessRunner);\n * const configPath = await runner.writeConfigFile(\"biome.json\", biomeConfig);\n * ```\n */\n public async writeConfigFile(\n name: string,\n content: string,\n root = process.cwd(),\n ): Promise<string> {\n const dir = join(root, \"node_modules\", \".alepha\");\n\n await mkdir(dir, {\n recursive: true,\n }).catch(() => null);\n\n const path = join(dir, name);\n await writeFile(path, content);\n\n this.log.debug(`Config file written: ${path}`);\n\n return path;\n }\n}\n","const proc = typeof process === 'object' && process\n ? process\n : {\n stdout: null,\n stderr: null,\n };\nimport { EventEmitter } from 'node:events';\nimport Stream from 'node:stream';\nimport { StringDecoder } from 'node:string_decoder';\n/**\n * Return true if the argument is a Minipass stream, Node stream, or something\n * else that Minipass can interact with.\n */\nexport const isStream = (s) => !!s &&\n typeof s === 'object' &&\n (s instanceof Minipass ||\n s instanceof Stream ||\n isReadable(s) ||\n isWritable(s));\n/**\n * Return true if the argument is a valid {@link Minipass.Readable}\n */\nexport const isReadable = (s) => !!s &&\n typeof s === 'object' &&\n s instanceof EventEmitter &&\n typeof s.pipe === 'function' &&\n // node core Writable streams have a pipe() method, but it throws\n s.pipe !== Stream.Writable.prototype.pipe;\n/**\n * Return true if the argument is a valid {@link Minipass.Writable}\n */\nexport const isWritable = (s) => !!s &&\n typeof s === 'object' &&\n s instanceof EventEmitter &&\n typeof s.write === 'function' &&\n typeof s.end === 'function';\nconst EOF = Symbol('EOF');\nconst MAYBE_EMIT_END = Symbol('maybeEmitEnd');\nconst EMITTED_END = Symbol('emittedEnd');\nconst EMITTING_END = Symbol('emittingEnd');\nconst EMITTED_ERROR = Symbol('emittedError');\nconst CLOSED = Symbol('closed');\nconst READ = Symbol('read');\nconst FLUSH = Symbol('flush');\nconst FLUSHCHUNK = Symbol('flushChunk');\nconst ENCODING = Symbol('encoding');\nconst DECODER = Symbol('decoder');\nconst FLOWING = Symbol('flowing');\nconst PAUSED = Symbol('paused');\nconst RESUME = Symbol('resume');\nconst BUFFER = Symbol('buffer');\nconst PIPES = Symbol('pipes');\nconst BUFFERLENGTH = Symbol('bufferLength');\nconst BUFFERPUSH = Symbol('bufferPush');\nconst BUFFERSHIFT = Symbol('bufferShift');\nconst OBJECTMODE = Symbol('objectMode');\n// internal event when stream is destroyed\nconst DESTROYED = Symbol('destroyed');\n// internal event when stream has an error\nconst ERROR = Symbol('error');\nconst EMITDATA = Symbol('emitData');\nconst EMITEND = Symbol('emitEnd');\nconst EMITEND2 = Symbol('emitEnd2');\nconst ASYNC = Symbol('async');\nconst ABORT = Symbol('abort');\nconst ABORTED = Symbol('aborted');\nconst SIGNAL = Symbol('signal');\nconst DATALISTENERS = Symbol('dataListeners');\nconst DISCARDED = Symbol('discarded');\nconst defer = (fn) => Promise.resolve().then(fn);\nconst nodefer = (fn) => fn();\nconst isEndish = (ev) => ev === 'end' || ev === 'finish' || ev === 'prefinish';\nconst isArrayBufferLike = (b) => b instanceof ArrayBuffer ||\n (!!b &&\n typeof b === 'object' &&\n b.constructor &&\n b.constructor.name === 'ArrayBuffer' &&\n b.byteLength >= 0);\nconst isArrayBufferView = (b) => !Buffer.isBuffer(b) && ArrayBuffer.isView(b);\n/**\n * Internal class representing a pipe to a destination stream.\n *\n * @internal\n */\nclass Pipe {\n src;\n dest;\n opts;\n ondrain;\n constructor(src, dest, opts) {\n this.src = src;\n this.dest = dest;\n this.opts = opts;\n this.ondrain = () => src[RESUME]();\n this.dest.on('drain', this.ondrain);\n }\n unpipe() {\n this.dest.removeListener('drain', this.ondrain);\n }\n // only here for the prototype\n /* c8 ignore start */\n proxyErrors(_er) { }\n /* c8 ignore stop */\n end() {\n this.unpipe();\n if (this.opts.end)\n this.dest.end();\n }\n}\n/**\n * Internal class representing a pipe to a destination stream where\n * errors are proxied.\n *\n * @internal\n */\nclass PipeProxyErrors extends Pipe {\n unpipe() {\n this.src.removeListener('error', this.proxyErrors);\n super.unpipe();\n }\n constructor(src, dest, opts) {\n super(src, dest, opts);\n this.proxyErrors = er => dest.emit('error', er);\n src.on('error', this.proxyErrors);\n }\n}\nconst isObjectModeOptions = (o) => !!o.objectMode;\nconst isEncodingOptions = (o) => !o.objectMode && !!o.encoding && o.encoding !== 'buffer';\n/**\n * Main export, the Minipass class\n *\n * `RType` is the type of data emitted, defaults to Buffer\n *\n * `WType` is the type of data to be written, if RType is buffer or string,\n * then any {@link Minipass.ContiguousData} is allowed.\n *\n * `Events` is the set of event handler signatures that this object\n * will emit, see {@link Minipass.Events}\n */\nexport class Minipass extends EventEmitter {\n [FLOWING] = false;\n [PAUSED] = false;\n [PIPES] = [];\n [BUFFER] = [];\n [OBJECTMODE];\n [ENCODING];\n [ASYNC];\n [DECODER];\n [EOF] = false;\n [EMITTED_END] = false;\n [EMITTING_END] = false;\n [CLOSED] = false;\n [EMITTED_ERROR] = null;\n [BUFFERLENGTH] = 0;\n [DESTROYED] = false;\n [SIGNAL];\n [ABORTED] = false;\n [DATALISTENERS] = 0;\n [DISCARDED] = false;\n /**\n * true if the stream can be written\n */\n writable = true;\n /**\n * true if the stream can be read\n */\n readable = true;\n /**\n * If `RType` is Buffer, then options do not need to be provided.\n * Otherwise, an options object must be provided to specify either\n * {@link Minipass.SharedOptions.objectMode} or\n * {@link Minipass.SharedOptions.encoding}, as appropriate.\n */\n constructor(...args) {\n const options = (args[0] ||\n {});\n super();\n if (options.objectMode && typeof options.encoding === 'string') {\n throw new TypeError('Encoding and objectMode may not be used together');\n }\n if (isObjectModeOptions(options)) {\n this[OBJECTMODE] = true;\n this[ENCODING] = null;\n }\n else if (isEncodingOptions(options)) {\n this[ENCODING] = options.encoding;\n this[OBJECTMODE] = false;\n }\n else {\n this[OBJECTMODE] = false;\n this[ENCODING] = null;\n }\n this[ASYNC] = !!options.async;\n this[DECODER] = this[ENCODING]\n ? new StringDecoder(this[ENCODING])\n : null;\n //@ts-ignore - private option for debugging and testing\n if (options && options.debugExposeBuffer === true) {\n Object.defineProperty(this, 'buffer', { get: () => this[BUFFER] });\n }\n //@ts-ignore - private option for debugging and testing\n if (options && options.debugExposePipes === true) {\n Object.defineProperty(this, 'pipes', { get: () => this[PIPES] });\n }\n const { signal } = options;\n if (signal) {\n this[SIGNAL] = signal;\n if (signal.aborted) {\n this[ABORT]();\n }\n else {\n signal.addEventListener('abort', () => this[ABORT]());\n }\n }\n }\n /**\n * The amount of data stored in the buffer waiting to be read.\n *\n * For Buffer strings, this will be the total byte length.\n * For string encoding streams, this will be the string character length,\n * according to JavaScript's `string.length` logic.\n * For objectMode streams, this is a count of the items waiting to be\n * emitted.\n */\n get bufferLength() {\n return this[BUFFERLENGTH];\n }\n /**\n * The `BufferEncoding` currently in use, or `null`\n */\n get encoding() {\n return this[ENCODING];\n }\n /**\n * @deprecated - This is a read only property\n */\n set encoding(_enc) {\n throw new Error('Encoding must be set at instantiation time');\n }\n /**\n * @deprecated - Encoding may only be set at instantiation time\n */\n setEncoding(_enc) {\n throw new Error('Encoding must be set at instantiation time');\n }\n /**\n * True if this is an objectMode stream\n */\n get objectMode() {\n return this[OBJECTMODE];\n }\n /**\n * @deprecated - This is a read-only property\n */\n set objectMode(_om) {\n throw new Error('objectMode must be set at instantiation time');\n }\n /**\n * true if this is an async stream\n */\n get ['async']() {\n return this[ASYNC];\n }\n /**\n * Set to true to make this stream async.\n *\n * Once set, it cannot be unset, as this would potentially cause incorrect\n * behavior. Ie, a sync stream can be made async, but an async stream\n * cannot be safely made sync.\n */\n set ['async'](a) {\n this[ASYNC] = this[ASYNC] || !!a;\n }\n // drop everything and get out of the flow completely\n [ABORT]() {\n this[ABORTED] = true;\n this.emit('abort', this[SIGNAL]?.reason);\n this.destroy(this[SIGNAL]?.reason);\n }\n /**\n * True if the stream has been aborted.\n */\n get aborted() {\n return this[ABORTED];\n }\n /**\n * No-op setter. Stream aborted status is set via the AbortSignal provided\n * in the constructor options.\n */\n set aborted(_) { }\n write(chunk, encoding, cb) {\n if (this[ABORTED])\n return false;\n if (this[EOF])\n throw new Error('write after end');\n if (this[DESTROYED]) {\n this.emit('error', Object.assign(new Error('Cannot call write after a stream was destroyed'), { code: 'ERR_STREAM_DESTROYED' }));\n return true;\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = 'utf8';\n }\n if (!encoding)\n encoding = 'utf8';\n const fn = this[ASYNC] ? defer : nodefer;\n // convert array buffers and typed array views into buffers\n // at some point in the future, we may want to do the opposite!\n // leave strings and buffers as-is\n // anything is only allowed if in object mode, so throw\n if (!this[OBJECTMODE] && !Buffer.isBuffer(chunk)) {\n if (isArrayBufferView(chunk)) {\n //@ts-ignore - sinful unsafe type changing\n chunk = Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);\n }\n else if (isArrayBufferLike(chunk)) {\n //@ts-ignore - sinful unsafe type changing\n chunk = Buffer.from(chunk);\n }\n else if (typeof chunk !== 'string') {\n throw new Error('Non-contiguous data written to non-objectMode stream');\n }\n }\n // handle object mode up front, since it's simpler\n // this yields better performance, fewer checks later.\n if (this[OBJECTMODE]) {\n // maybe impossible?\n /* c8 ignore start */\n if (this[FLOWING] && this[BUFFERLENGTH] !== 0)\n this[FLUSH](true);\n /* c8 ignore stop */\n if (this[FLOWING])\n this.emit('data', chunk);\n else\n this[BUFFERPUSH](chunk);\n if (this[BUFFERLENGTH] !== 0)\n this.emit('readable');\n if (cb)\n fn(cb);\n return this[FLOWING];\n }\n // at this point the chunk is a buffer or string\n // don't buffer it up or send it to the decoder\n if (!chunk.length) {\n if (this[BUFFERLENGTH] !== 0)\n this.emit('readable');\n if (cb)\n fn(cb);\n return this[FLOWING];\n }\n // fast-path writing strings of same encoding to a stream with\n // an empty buffer, skipping the buffer/decoder dance\n if (typeof chunk === 'string' &&\n // unless it is a string already ready for us to use\n !(encoding === this[ENCODING] && !this[DECODER]?.lastNeed)) {\n //@ts-ignore - sinful unsafe type change\n chunk = Buffer.from(chunk, encoding);\n }\n if (Buffer.isBuffer(chunk) && this[ENCODING]) {\n //@ts-ignore - sinful unsafe type change\n chunk = this[DECODER].write(chunk);\n }\n // Note: flushing CAN potentially switch us into not-flowing mode\n if (this[FLOWING] && this[BUFFERLENGTH] !== 0)\n this[FLUSH](true);\n if (this[FLOWING])\n this.emit('data', chunk);\n else\n this[BUFFERPUSH](chunk);\n if (this[BUFFERLENGTH] !== 0)\n this.emit('readable');\n if (cb)\n fn(cb);\n return this[FLOWING];\n }\n /**\n * Low-level explicit read method.\n *\n * In objectMode, the argument is ignored, and one item is returned if\n * available.\n *\n * `n` is the number of bytes (or in the case of encoding streams,\n * characters) to consume. If `n` is not provided, then the entire buffer\n * is returned, or `null` is returned if no data is available.\n *\n * If `n` is greater that the amount of data in the internal buffer,\n * then `null` is returned.\n */\n read(n) {\n if (this[DESTROYED])\n return null;\n this[DISCARDED] = false;\n if (this[BUFFERLENGTH] === 0 ||\n n === 0 ||\n (n && n > this[BUFFERLENGTH])) {\n this[MAYBE_EMIT_END]();\n return null;\n }\n if (this[OBJECTMODE])\n n = null;\n if (this[BUFFER].length > 1 && !this[OBJECTMODE]) {\n // not object mode, so if we have an encoding, then RType is string\n // otherwise, must be Buffer\n this[BUFFER] = [\n (this[ENCODING]\n ? this[BUFFER].join('')\n : Buffer.concat(this[BUFFER], this[BUFFERLENGTH])),\n ];\n }\n const ret = this[READ](n || null, this[BUFFER][0]);\n this[MAYBE_EMIT_END]();\n return ret;\n }\n [READ](n, chunk) {\n if (this[OBJECTMODE])\n this[BUFFERSHIFT]();\n else {\n const c = chunk;\n if (n === c.length || n === null)\n this[BUFFERSHIFT]();\n else if (typeof c === 'string') {\n this[BUFFER][0] = c.slice(n);\n chunk = c.slice(0, n);\n this[BUFFERLENGTH] -= n;\n }\n else {\n this[BUFFER][0] = c.subarray(n);\n chunk = c.subarray(0, n);\n this[BUFFERLENGTH] -= n;\n }\n }\n this.emit('data', chunk);\n if (!this[BUFFER].length && !this[EOF])\n this.emit('drain');\n return chunk;\n }\n end(chunk, encoding, cb) {\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = undefined;\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = 'utf8';\n }\n if (chunk !== undefined)\n this.write(chunk, encoding);\n if (cb)\n this.once('end', cb);\n this[EOF] = true;\n this.writable = false;\n // if we haven't written anything, then go ahead and emit,\n // even if we're not reading.\n // we'll re-emit if a new 'end' listener is added anyway.\n // This makes MP more suitable to write-only use cases.\n if (this[FLOWING] || !this[PAUSED])\n this[MAYBE_EMIT_END]();\n return this;\n }\n // don't let the internal resume be overwritten\n [RESUME]() {\n if (this[DESTROYED])\n return;\n if (!this[DATALISTENERS] && !this[PIPES].length) {\n this[DISCARDED] = true;\n }\n this[PAUSED] = false;\n this[FLOWING] = true;\n this.emit('resume');\n if (this[BUFFER].length)\n this[FLUSH]();\n else if (this[EOF])\n this[MAYBE_EMIT_END]();\n else\n this.emit('drain');\n }\n /**\n * Resume the stream if it is currently in a paused state\n *\n * If called when there are no pipe destinations or `data` event listeners,\n * this will place the stream in a \"discarded\" state, where all data will\n * be thrown away. The discarded state is removed if a pipe destination or\n * data handler is added, if pause() is called, or if any synchronous or\n * asynchronous iteration is started.\n */\n resume() {\n return this[RESUME]();\n }\n /**\n * Pause the stream\n */\n pause() {\n this[FLOWING] = false;\n this[PAUSED] = true;\n this[DISCARDED] = false;\n }\n /**\n * true if the stream has been forcibly destroyed\n */\n get destroyed() {\n return this[DESTROYED];\n }\n /**\n * true if the stream is currently in a flowing state, meaning that\n * any writes will be immediately emitted.\n */\n get flowing() {\n return this[FLOWING];\n }\n /**\n * true if the stream is currently in a paused state\n */\n get paused() {\n return this[PAUSED];\n }\n [BUFFERPUSH](chunk) {\n if (this[OBJECTMODE])\n this[BUFFERLENGTH] += 1;\n else\n this[BUFFERLENGTH] += chunk.length;\n this[BUFFER].push(chunk);\n }\n [BUFFERSHIFT]() {\n if (this[OBJECTMODE])\n this[BUFFERLENGTH] -= 1;\n else\n this[BUFFERLENGTH] -= this[BUFFER][0].length;\n return this[BUFFER].shift();\n }\n [FLUSH](noDrain = false) {\n do { } while (this[FLUSHCHUNK](this[BUFFERSHIFT]()) &&\n this[BUFFER].length);\n if (!noDrain && !this[BUFFER].length && !this[EOF])\n this.emit('drain');\n }\n [FLUSHCHUNK](chunk) {\n this.emit('data', chunk);\n return this[FLOWING];\n }\n /**\n * Pipe all data emitted by this stream into the destination provided.\n *\n * Triggers the flow of data.\n */\n pipe(dest, opts) {\n if (this[DESTROYED])\n return dest;\n this[DISCARDED] = false;\n const ended = this[EMITTED_END];\n opts = opts || {};\n if (dest === proc.stdout || dest === proc.stderr)\n opts.end = false;\n else\n opts.end = opts.end !== false;\n opts.proxyErrors = !!opts.proxyErrors;\n // piping an ended stream ends immediately\n if (ended) {\n if (opts.end)\n dest.end();\n }\n else {\n // \"as\" here just ignores the WType, which pipes don't care about,\n // since they're only consuming from us, and writing to the dest\n this[PIPES].push(!opts.proxyErrors\n ? new Pipe(this, dest, opts)\n : new PipeProxyErrors(this, dest, opts));\n if (this[ASYNC])\n defer(() => this[RESUME]());\n else\n this[RESUME]();\n }\n return dest;\n }\n /**\n * Fully unhook a piped destination stream.\n *\n * If the destination stream was the only consumer of this stream (ie,\n * there are no other piped destinations or `'data'` event listeners)\n * then the flow of data will stop until there is another consumer or\n * {@link Minipass#resume} is explicitly called.\n */\n unpipe(dest) {\n const p = this[PIPES].find(p => p.dest === dest);\n if (p) {\n if (this[PIPES].length === 1) {\n if (this[FLOWING] && this[DATALISTENERS] === 0) {\n this[FLOWING] = false;\n }\n this[PIPES] = [];\n }\n else\n this[PIPES].splice(this[PIPES].indexOf(p), 1);\n p.unpipe();\n }\n }\n /**\n * Alias for {@link Minipass#on}\n */\n addListener(ev, handler) {\n return this.on(ev, handler);\n }\n /**\n * Mostly identical to `EventEmitter.on`, with the following\n * behavior differences to prevent data loss and unnecessary hangs:\n *\n * - Adding a 'data' event handler will trigger the flow of data\n *\n * - Adding a 'readable' event handler when there is data waiting to be read\n * will cause 'readable' to be emitted immediately.\n *\n * - Adding an 'endish' event handler ('end', 'finish', etc.) which has\n * already passed will cause the event to be emitted immediately and all\n * handlers removed.\n *\n * - Adding an 'error' event handler after an error has been emitted will\n * cause the event to be re-emitted immediately with the error previously\n * raised.\n */\n on(ev, handler) {\n const ret = super.on(ev, handler);\n if (ev === 'data') {\n this[DISCARDED] = false;\n this[DATALISTENERS]++;\n if (!this[PIPES].length && !this[FLOWING]) {\n this[RESUME]();\n }\n }\n else if (ev === 'readable' && this[BUFFERLENGTH] !== 0) {\n super.emit('readable');\n }\n else if (isEndish(ev) && this[EMITTED_END]) {\n super.emit(ev);\n this.removeAllListeners(ev);\n }\n else if (ev === 'error' && this[EMITTED_ERROR]) {\n const h = handler;\n if (this[ASYNC])\n defer(() => h.call(this, this[EMITTED_ERROR]));\n else\n h.call(this, this[EMITTED_ERROR]);\n }\n return ret;\n }\n /**\n * Alias for {@link Minipass#off}\n */\n removeListener(ev, handler) {\n return this.off(ev, handler);\n }\n /**\n * Mostly identical to `EventEmitter.off`\n *\n * If a 'data' event handler is removed, and it was the last consumer\n * (ie, there are no pipe destinations or other 'data' event listeners),\n * then the flow of data will stop until there is another consumer or\n * {@link Minipass#resume} is explicitly called.\n */\n off(ev, handler) {\n const ret = super.off(ev, handler);\n // if we previously had listeners, and now we don't, and we don't\n // have any pipes, then stop the flow, unless it's been explicitly\n // put in a discarded flowing state via stream.resume().\n if (ev === 'data') {\n this[DATALISTENERS] = this.listeners('data').length;\n if (this[DATALISTENERS] === 0 &&\n !this[DISCARDED] &&\n !this[PIPES].length) {\n this[FLOWING] = false;\n }\n }\n return ret;\n }\n /**\n * Mostly identical to `EventEmitter.removeAllListeners`\n *\n * If all 'data' event handlers are removed, and they were the last consumer\n * (ie, there are no pipe destinations), then the flow of data will stop\n * until there is another consumer or {@link Minipass#resume} is explicitly\n * called.\n */\n removeAllListeners(ev) {\n const ret = super.removeAllListeners(ev);\n if (ev === 'data' || ev === undefined) {\n this[DATALISTENERS] = 0;\n if (!this[DISCARDED] && !this[PIPES].length) {\n this[FLOWING] = false;\n }\n }\n return ret;\n }\n /**\n * true if the 'end' event has been emitted\n */\n get emittedEnd() {\n return this[EMITTED_END];\n }\n [MAYBE_EMIT_END]() {\n if (!this[EMITTING_END] &&\n !this[EMITTED_END] &&\n !this[DESTROYED] &&\n this[BUFFER].length === 0 &&\n this[EOF]) {\n this[EMITTING_END] = true;\n this.emit('end');\n this.emit('prefinish');\n this.emit('finish');\n if (this[CLOSED])\n this.emit('close');\n this[EMITTING_END] = false;\n }\n }\n /**\n * Mostly identical to `EventEmitter.emit`, with the following\n * behavior differences to prevent data loss and unnecessary hangs:\n *\n * If the stream has been destroyed, and the event is something other\n * than 'close' or 'error', then `false` is returned and no handlers\n * are called.\n *\n * If the event is 'end', and has already been emitted, then the event\n * is ignored. If the stream is in a paused or non-flowing state, then\n * the event will be deferred until data flow resumes. If the stream is\n * async, then handlers will be called on the next tick rather than\n * immediately.\n *\n * If the event is 'close', and 'end' has not yet been emitted, then\n * the event will be deferred until after 'end' is emitted.\n *\n * If the event is 'error', and an AbortSignal was provided for the stream,\n * and there are no listeners, then the event is ignored, matching the\n * behavior of node core streams in the presense of an AbortSignal.\n *\n * If the event is 'finish' or 'prefinish', then all listeners will be\n * removed after emitting the event, to prevent double-firing.\n */\n emit(ev, ...args) {\n const data = args[0];\n // error and close are only events allowed after calling destroy()\n if (ev !== 'error' &&\n ev !== 'close' &&\n ev !== DESTROYED &&\n this[DESTROYED]) {\n return false;\n }\n else if (ev === 'data') {\n return !this[OBJECTMODE] && !data\n ? false\n : this[ASYNC]\n ? (defer(() => this[EMITDATA](data)), true)\n : this[EMITDATA](data);\n }\n else if (ev === 'end') {\n return this[EMITEND]();\n }\n else if (ev === 'close') {\n this[CLOSED] = true;\n // don't emit close before 'end' and 'finish'\n if (!this[EMITTED_END] && !this[DESTROYED])\n return false;\n const ret = super.emit('close');\n this.removeAllListeners('close');\n return ret;\n }\n else if (ev === 'error') {\n this[EMITTED_ERROR] = data;\n super.emit(ERROR, data);\n const ret = !this[SIGNAL] || this.listeners('error').length\n ? super.emit('error', data)\n : false;\n this[MAYBE_EMIT_END]();\n return ret;\n }\n else if (ev === 'resume') {\n const ret = super.emit('resume');\n this[MAYBE_EMIT_END]();\n return ret;\n }\n else if (ev === 'finish' || ev === 'prefinish') {\n const ret = super.emit(ev);\n this.removeAllListeners(ev);\n return ret;\n }\n // Some other unknown event\n const ret = super.emit(ev, ...args);\n this[MAYBE_EMIT_END]();\n return ret;\n }\n [EMITDATA](data) {\n for (const p of this[PIPES]) {\n if (p.dest.write(data) === false)\n this.pause();\n }\n const ret = this[DISCARDED] ? false : super.emit('data', data);\n this[MAYBE_EMIT_END]();\n return ret;\n }\n [EMITEND]() {\n if (this[EMITTED_END])\n return false;\n this[EMITTED_END] = true;\n this.readable = false;\n return this[ASYNC]\n ? (defer(() => this[EMITEND2]()), true)\n : this[EMITEND2]();\n }\n [EMITEND2]() {\n if (this[DECODER]) {\n const data = this[DECODER].end();\n if (data) {\n for (const p of this[PIPES]) {\n p.dest.write(data);\n }\n if (!this[DISCARDED])\n super.emit('data', data);\n }\n }\n for (const p of this[PIPES]) {\n p.end();\n }\n const ret = super.emit('end');\n this.removeAllListeners('end');\n return ret;\n }\n /**\n * Return a Promise that resolves to an array of all emitted data once\n * the stream ends.\n */\n async collect() {\n const buf = Object.assign([], {\n dataLength: 0,\n });\n if (!this[OBJECTMODE])\n buf.dataLength = 0;\n // set the promise first, in case an error is raised\n // by triggering the flow here.\n const p = this.promise();\n this.on('data', c => {\n buf.push(c);\n if (!this[OBJECTMODE])\n buf.dataLength += c.length;\n });\n await p;\n return buf;\n }\n /**\n * Return a Promise that resolves to the concatenation of all emitted data\n * once the stream ends.\n *\n * Not allowed on objectMode streams.\n */\n async concat() {\n if (this[OBJECTMODE]) {\n throw new Error('cannot concat in objectMode');\n }\n const buf = await this.collect();\n return (this[ENCODING]\n ? buf.join('')\n : Buffer.concat(buf, buf.dataLength));\n }\n /**\n * Return a void Promise that resolves once the stream ends.\n */\n async promise() {\n return new Promise((resolve, reject) => {\n this.on(DESTROYED, () => reject(new Error('stream destroyed')));\n this.on('error', er => reject(er));\n this.on('end', () => resolve());\n });\n }\n /**\n * Asynchronous `for await of` iteration.\n *\n * This will continue emitting all chunks until the stream terminates.\n */\n [Symbol.asyncIterator]() {\n // set this up front, in case the consumer doesn't call next()\n // right away.\n this[DISCARDED] = false;\n let stopped = false;\n const stop = async () => {\n this.pause();\n stopped = true;\n return { value: undefined, done: true };\n };\n const next = () => {\n if (stopped)\n return stop();\n const res = this.read();\n if (res !== null)\n return Promise.resolve({ done: false, value: res });\n if (this[EOF])\n return stop();\n let resolve;\n let reject;\n const onerr = (er) => {\n this.off('data', ondata);\n this.off('end', onend);\n this.off(DESTROYED, ondestroy);\n stop();\n reject(er);\n };\n const ondata = (value) => {\n this.off('error', onerr);\n this.off('end', onend);\n this.off(DESTROYED, ondestroy);\n this.pause();\n resolve({ value, done: !!this[EOF] });\n };\n const onend = () => {\n this.off('error', onerr);\n this.off('data', ondata);\n this.off(DESTROYED, ondestroy);\n stop();\n resolve({ done: true, value: undefined });\n };\n const ondestroy = () => onerr(new Error('stream destroyed'));\n return new Promise((res, rej) => {\n reject = rej;\n resolve = res;\n this.once(DESTROYED, ondestroy);\n this.once('error', onerr);\n this.once('end', onend);\n this.once('data', ondata);\n });\n };\n return {\n next,\n throw: stop,\n return: stop,\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n }\n /**\n * Synchronous `for of` iteration.\n *\n * The iteration will terminate when the internal buffer runs out, even\n * if the stream has not yet terminated.\n */\n [Symbol.iterator]() {\n // set this up front, in case the consumer doesn't call next()\n // right away.\n this[DISCARDED] = false;\n let stopped = false;\n const stop = () => {\n this.pause();\n this.off(ERROR, stop);\n this.off(DESTROYED, stop);\n this.off('end', stop);\n stopped = true;\n return { done: true, value: undefined };\n };\n const next = () => {\n if (stopped)\n return stop();\n const value = this.read();\n return value === null ? stop() : { done: false, value };\n };\n this.once('end', stop);\n this.once(ERROR, stop);\n this.once(DESTROYED, stop);\n return {\n next,\n throw: stop,\n return: stop,\n [Symbol.iterator]() {\n return this;\n },\n };\n }\n /**\n * Destroy a stream, preventing it from being used for any further purpose.\n *\n * If the stream has a `close()` method, then it will be called on\n * destruction.\n *\n * After destruction, any attempt to write data, read data, or emit most\n * events will be ignored.\n *\n * If an error argument is provided, then it will be emitted in an\n * 'error' event.\n */\n destroy(er) {\n if (this[DESTROYED]) {\n if (er)\n this.emit('error', er);\n else\n this.emit(DESTROYED);\n return this;\n }\n this[DESTROYED] = true;\n this[DISCARDED] = true;\n // throw away all buffered data, it's never coming out\n this[BUFFER].length = 0;\n this[BUFFERLENGTH] = 0;\n const wc = this;\n if (typeof wc.close === 'function' && !this[CLOSED])\n wc.close();\n if (er)\n this.emit('error', er);\n // if no error to emit, still reject pending promises\n else\n this.emit(DESTROYED);\n return this;\n }\n /**\n * Alias for {@link isStream}\n *\n * Former export location, maintained for backwards compatibility.\n *\n * @deprecated\n */\n static get isStream() {\n return isStream;\n }\n}\n//# sourceMappingURL=index.js.map","import EE from 'events';\nimport fs from 'fs';\nimport { Minipass } from 'minipass';\nconst writev = fs.writev;\nconst _autoClose = Symbol('_autoClose');\nconst _close = Symbol('_close');\nconst _ended = Symbol('_ended');\nconst _fd = Symbol('_fd');\nconst _finished = Symbol('_finished');\nconst _flags = Symbol('_flags');\nconst _flush = Symbol('_flush');\nconst _handleChunk = Symbol('_handleChunk');\nconst _makeBuf = Symbol('_makeBuf');\nconst _mode = Symbol('_mode');\nconst _needDrain = Symbol('_needDrain');\nconst _onerror = Symbol('_onerror');\nconst _onopen = Symbol('_onopen');\nconst _onread = Symbol('_onread');\nconst _onwrite = Symbol('_onwrite');\nconst _open = Symbol('_open');\nconst _path = Symbol('_path');\nconst _pos = Symbol('_pos');\nconst _queue = Symbol('_queue');\nconst _read = Symbol('_read');\nconst _readSize = Symbol('_readSize');\nconst _reading = Symbol('_reading');\nconst _remain = Symbol('_remain');\nconst _size = Symbol('_size');\nconst _write = Symbol('_write');\nconst _writing = Symbol('_writing');\nconst _defaultFlag = Symbol('_defaultFlag');\nconst _errored = Symbol('_errored');\nexport class ReadStream extends Minipass {\n [_errored] = false;\n [_fd];\n [_path];\n [_readSize];\n [_reading] = false;\n [_size];\n [_remain];\n [_autoClose];\n constructor(path, opt) {\n opt = opt || {};\n super(opt);\n this.readable = true;\n this.writable = false;\n if (typeof path !== 'string') {\n throw new TypeError('path must be a string');\n }\n this[_errored] = false;\n this[_fd] = typeof opt.fd === 'number' ? opt.fd : undefined;\n this[_path] = path;\n this[_readSize] = opt.readSize || 16 * 1024 * 1024;\n this[_reading] = false;\n this[_size] = typeof opt.size === 'number' ? opt.size : Infinity;\n this[_remain] = this[_size];\n this[_autoClose] =\n typeof opt.autoClose === 'boolean' ? opt.autoClose : true;\n if (typeof this[_fd] === 'number') {\n this[_read]();\n }\n else {\n this[_open]();\n }\n }\n get fd() {\n return this[_fd];\n }\n get path() {\n return this[_path];\n }\n //@ts-ignore\n write() {\n throw new TypeError('this is a readable stream');\n }\n //@ts-ignore\n end() {\n throw new TypeError('this is a readable stream');\n }\n [_open]() {\n fs.open(this[_path], 'r', (er, fd) => this[_onopen](er, fd));\n }\n [_onopen](er, fd) {\n if (er) {\n this[_onerror](er);\n }\n else {\n this[_fd] = fd;\n this.emit('open', fd);\n this[_read]();\n }\n }\n [_makeBuf]() {\n return Buffer.allocUnsafe(Math.min(this[_readSize], this[_remain]));\n }\n [_read]() {\n if (!this[_reading]) {\n this[_reading] = true;\n const buf = this[_makeBuf]();\n /* c8 ignore start */\n if (buf.length === 0) {\n return process.nextTick(() => this[_onread](null, 0, buf));\n }\n /* c8 ignore stop */\n fs.read(this[_fd], buf, 0, buf.length, null, (er, br, b) => this[_onread](er, br, b));\n }\n }\n [_onread](er, br, buf) {\n this[_reading] = false;\n if (er) {\n this[_onerror](er);\n }\n else if (this[_handleChunk](br, buf)) {\n this[_read]();\n }\n }\n [_close]() {\n if (this[_autoClose] && typeof this[_fd] === 'number') {\n const fd = this[_fd];\n this[_fd] = undefined;\n fs.close(fd, er => er ? this.emit('error', er) : this.emit('close'));\n }\n }\n [_onerror](er) {\n this[_reading] = true;\n this[_close]();\n this.emit('error', er);\n }\n [_handleChunk](br, buf) {\n let ret = false;\n // no effect if infinite\n this[_remain] -= br;\n if (br > 0) {\n ret = super.write(br < buf.length ? buf.subarray(0, br) : buf);\n }\n if (br === 0 || this[_remain] <= 0) {\n ret = false;\n this[_close]();\n super.end();\n }\n return ret;\n }\n emit(ev, ...args) {\n switch (ev) {\n case 'prefinish':\n case 'finish':\n return false;\n case 'drain':\n if (typeof this[_fd] === 'number') {\n this[_read]();\n }\n return false;\n case 'error':\n if (this[_errored]) {\n return false;\n }\n this[_errored] = true;\n return super.emit(ev, ...args);\n default:\n return super.emit(ev, ...args);\n }\n }\n}\nexport class ReadStreamSync extends ReadStream {\n [_open]() {\n let threw = true;\n try {\n this[_onopen](null, fs.openSync(this[_path], 'r'));\n threw = false;\n }\n finally {\n if (threw) {\n this[_close]();\n }\n }\n }\n [_read]() {\n let threw = true;\n try {\n if (!this[_reading]) {\n this[_reading] = true;\n do {\n const buf = this[_makeBuf]();\n /* c8 ignore start */\n const br = buf.length === 0\n ? 0\n : fs.readSync(this[_fd], buf, 0, buf.length, null);\n /* c8 ignore stop */\n if (!this[_handleChunk](br, buf)) {\n break;\n }\n } while (true);\n this[_reading] = false;\n }\n threw = false;\n }\n finally {\n if (threw) {\n this[_close]();\n }\n }\n }\n [_close]() {\n if (this[_autoClose] && typeof this[_fd] === 'number') {\n const fd = this[_fd];\n this[_fd] = undefined;\n fs.closeSync(fd);\n this.emit('close');\n }\n }\n}\nexport class WriteStream extends EE {\n readable = false;\n writable = true;\n [_errored] = false;\n [_writing] = false;\n [_ended] = false;\n [_queue] = [];\n [_needDrain] = false;\n [_path];\n [_mode];\n [_autoClose];\n [_fd];\n [_defaultFlag];\n [_flags];\n [_finished] = false;\n [_pos];\n constructor(path, opt) {\n opt = opt || {};\n super(opt);\n this[_path] = path;\n this[_fd] = typeof opt.fd === 'number' ? opt.fd : undefined;\n this[_mode] = opt.mode === undefined ? 0o666 : opt.mode;\n this[_pos] = typeof opt.start === 'number' ? opt.start : undefined;\n this[_autoClose] =\n typeof opt.autoClose === 'boolean' ? opt.autoClose : true;\n // truncating makes no sense when writing into the middle\n const defaultFlag = this[_pos] !== undefined ? 'r+' : 'w';\n this[_defaultFlag] = opt.flags === undefined;\n this[_flags] = opt.flags === undefined ? defaultFlag : opt.flags;\n if (this[_fd] === undefined) {\n this[_open]();\n }\n }\n emit(ev, ...args) {\n if (ev === 'error') {\n if (this[_errored]) {\n return false;\n }\n this[_errored] = true;\n }\n return super.emit(ev, ...args);\n }\n get fd() {\n return this[_fd];\n }\n get path() {\n return this[_path];\n }\n [_onerror](er) {\n this[_close]();\n this[_writing] = true;\n this.emit('error', er);\n }\n [_open]() {\n fs.open(this[_path], this[_flags], this[_mode], (er, fd) => this[_onopen](er, fd));\n }\n [_onopen](er, fd) {\n if (this[_defaultFlag] &&\n this[_flags] === 'r+' &&\n er &&\n er.code === 'ENOENT') {\n this[_flags] = 'w';\n this[_open]();\n }\n else if (er) {\n this[_onerror](er);\n }\n else {\n this[_fd] = fd;\n this.emit('open', fd);\n if (!this[_writing]) {\n this[_flush]();\n }\n }\n }\n end(buf, enc) {\n if (buf) {\n //@ts-ignore\n this.write(buf, enc);\n }\n this[_ended] = true;\n // synthetic after-write logic, where drain/finish live\n if (!this[_writing] &&\n !this[_queue].length &&\n typeof this[_fd] === 'number') {\n this[_onwrite](null, 0);\n }\n return this;\n }\n write(buf, enc) {\n if (typeof buf === 'string') {\n buf = Buffer.from(buf, enc);\n }\n if (this[_ended]) {\n this.emit('error', new Error('write() after end()'));\n return false;\n }\n if (this[_fd] === undefined || this[_writing] || this[_queue].length) {\n this[_queue].push(buf);\n this[_needDrain] = true;\n return false;\n }\n this[_writing] = true;\n this[_write](buf);\n return true;\n }\n [_write](buf) {\n fs.write(this[_fd], buf, 0, buf.length, this[_pos], (er, bw) => this[_onwrite](er, bw));\n }\n [_onwrite](er, bw) {\n if (er) {\n this[_onerror](er);\n }\n else {\n if (this[_pos] !== undefined && typeof bw === 'number') {\n this[_pos] += bw;\n }\n if (this[_queue].length) {\n this[_flush]();\n }\n else {\n this[_writing] = false;\n if (this[_ended] && !this[_finished]) {\n this[_finished] = true;\n this[_close]();\n this.emit('finish');\n }\n else if (this[_needDrain]) {\n this[_needDrain] = false;\n this.emit('drain');\n }\n }\n }\n }\n [_flush]() {\n if (this[_queue].length === 0) {\n if (this[_ended]) {\n this[_onwrite](null, 0);\n }\n }\n else if (this[_queue].length === 1) {\n this[_write](this[_queue].pop());\n }\n else {\n const iovec = this[_queue];\n this[_queue] = [];\n writev(this[_fd], iovec, this[_pos], (er, bw) => this[_onwrite](er, bw));\n }\n }\n [_close]() {\n if (this[_autoClose] && typeof this[_fd] === 'number') {\n const fd = this[_fd];\n this[_fd] = undefined;\n fs.close(fd, er => er ? this.emit('error', er) : this.emit('close'));\n }\n }\n}\nexport class WriteStreamSync extends WriteStream {\n [_open]() {\n let fd;\n // only wrap in a try{} block if we know we'll retry, to avoid\n // the rethrow obscuring the error's source frame in most cases.\n if (this[_defaultFlag] && this[_flags] === 'r+') {\n try {\n fd = fs.openSync(this[_path], this[_flags], this[_mode]);\n }\n catch (er) {\n if (er?.code === 'ENOENT') {\n this[_flags] = 'w';\n return this[_open]();\n }\n else {\n throw er;\n }\n }\n }\n else {\n fd = fs.openSync(this[_path], this[_flags], this[_mode]);\n }\n this[_onopen](null, fd);\n }\n [_close]() {\n if (this[_autoClose] && typeof this[_fd] === 'number') {\n const fd = this[_fd];\n this[_fd] = undefined;\n fs.closeSync(fd);\n this.emit('close');\n }\n }\n [_write](buf) {\n // throw the original, but try to close if it fails\n let threw = true;\n try {\n this[_onwrite](null, fs.writeSync(this[_fd], buf, 0, buf.length, this[_pos]));\n threw = false;\n }\n finally {\n if (threw) {\n try {\n this[_close]();\n }\n catch {\n // ok error\n }\n }\n }\n }\n}\n//# sourceMappingURL=index.js.map","// turn tar(1) style args like `C` into the more verbose things like `cwd`\nconst argmap = new Map([\n ['C', 'cwd'],\n ['f', 'file'],\n ['z', 'gzip'],\n ['P', 'preservePaths'],\n ['U', 'unlink'],\n ['strip-components', 'strip'],\n ['stripComponents', 'strip'],\n ['keep-newer', 'newer'],\n ['keepNewer', 'newer'],\n ['keep-newer-files', 'newer'],\n ['keepNewerFiles', 'newer'],\n ['k', 'keep'],\n ['keep-existing', 'keep'],\n ['keepExisting', 'keep'],\n ['m', 'noMtime'],\n ['no-mtime', 'noMtime'],\n ['p', 'preserveOwner'],\n ['L', 'follow'],\n ['h', 'follow'],\n ['onentry', 'onReadEntry'],\n]);\nexport const isSyncFile = (o) => !!o.sync && !!o.file;\nexport const isAsyncFile = (o) => !o.sync && !!o.file;\nexport const isSyncNoFile = (o) => !!o.sync && !o.file;\nexport const isAsyncNoFile = (o) => !o.sync && !o.file;\nexport const isSync = (o) => !!o.sync;\nexport const isAsync = (o) => !o.sync;\nexport const isFile = (o) => !!o.file;\nexport const isNoFile = (o) => !o.file;\nconst dealiasKey = (k) => {\n const d = argmap.get(k);\n if (d)\n return d;\n return k;\n};\nexport const dealias = (opt = {}) => {\n if (!opt)\n return {};\n const result = {};\n for (const [key, v] of Object.entries(opt)) {\n // TS doesn't know that aliases are going to always be the same type\n const k = dealiasKey(key);\n result[k] = v;\n }\n // affordance for deprecated noChmod -> chmod\n if (result.chmod === undefined && result.noChmod === false) {\n result.chmod = true;\n }\n delete result.noChmod;\n return result;\n};\n//# sourceMappingURL=options.js.map","import { dealias, isAsyncFile, isAsyncNoFile, isSyncFile, isSyncNoFile, } from './options.js';\nexport const makeCommand = (syncFile, asyncFile, syncNoFile, asyncNoFile, validate) => {\n return Object.assign((opt_ = [], entries, cb) => {\n if (Array.isArray(opt_)) {\n entries = opt_;\n opt_ = {};\n }\n if (typeof entries === 'function') {\n cb = entries;\n entries = undefined;\n }\n if (!entries) {\n entries = [];\n }\n else {\n entries = Array.from(entries);\n }\n const opt = dealias(opt_);\n validate?.(opt, entries);\n if (isSyncFile(opt)) {\n if (typeof cb === 'function') {\n throw new TypeError('callback not supported for sync tar functions');\n }\n return syncFile(opt, entries);\n }\n else if (isAsyncFile(opt)) {\n const p = asyncFile(opt, entries);\n // weirdness to make TS happy\n const c = cb ? cb : undefined;\n return c ? p.then(() => c(), c) : p;\n }\n else if (isSyncNoFile(opt)) {\n if (typeof cb === 'function') {\n throw new TypeError('callback not supported for sync tar functions');\n }\n return syncNoFile(opt, entries);\n }\n else if (isAsyncNoFile(opt)) {\n if (typeof cb === 'function') {\n throw new TypeError('callback only supported with file option');\n }\n return asyncNoFile(opt, entries);\n /* c8 ignore start */\n }\n else {\n throw new Error('impossible options??');\n }\n /* c8 ignore stop */\n }, {\n syncFile,\n asyncFile,\n syncNoFile,\n asyncNoFile,\n validate,\n });\n};\n//# sourceMappingURL=make-command.js.map","// Update with any zlib constants that are added or changed in the future.\n// Node v6 didn't export this, so we just hard code the version and rely\n// on all the other hard-coded values from zlib v4736. When node v6\n// support drops, we can just export the realZlibConstants object.\nimport realZlib from 'zlib';\n/* c8 ignore start */\nconst realZlibConstants = realZlib.constants || { ZLIB_VERNUM: 4736 };\n/* c8 ignore stop */\nexport const constants = Object.freeze(Object.assign(Object.create(null), {\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n Z_VERSION_ERROR: -6,\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n DEFLATE: 1,\n INFLATE: 2,\n GZIP: 3,\n GUNZIP: 4,\n DEFLATERAW: 5,\n INFLATERAW: 6,\n UNZIP: 7,\n BROTLI_DECODE: 8,\n BROTLI_ENCODE: 9,\n Z_MIN_WINDOWBITS: 8,\n Z_MAX_WINDOWBITS: 15,\n Z_DEFAULT_WINDOWBITS: 15,\n Z_MIN_CHUNK: 64,\n Z_MAX_CHUNK: Infinity,\n Z_DEFAULT_CHUNK: 16384,\n Z_MIN_MEMLEVEL: 1,\n Z_MAX_MEMLEVEL: 9,\n Z_DEFAULT_MEMLEVEL: 8,\n Z_MIN_LEVEL: -1,\n Z_MAX_LEVEL: 9,\n Z_DEFAULT_LEVEL: -1,\n BROTLI_OPERATION_PROCESS: 0,\n BROTLI_OPERATION_FLUSH: 1,\n BROTLI_OPERATION_FINISH: 2,\n BROTLI_OPERATION_EMIT_METADATA: 3,\n BROTLI_MODE_GENERIC: 0,\n BROTLI_MODE_TEXT: 1,\n BROTLI_MODE_FONT: 2,\n BROTLI_DEFAULT_MODE: 0,\n BROTLI_MIN_QUALITY: 0,\n BROTLI_MAX_QUALITY: 11,\n BROTLI_DEFAULT_QUALITY: 11,\n BROTLI_MIN_WINDOW_BITS: 10,\n BROTLI_MAX_WINDOW_BITS: 24,\n BROTLI_LARGE_MAX_WINDOW_BITS: 30,\n BROTLI_DEFAULT_WINDOW: 22,\n BROTLI_MIN_INPUT_BLOCK_BITS: 16,\n BROTLI_MAX_INPUT_BLOCK_BITS: 24,\n BROTLI_PARAM_MODE: 0,\n BROTLI_PARAM_QUALITY: 1,\n BROTLI_PARAM_LGWIN: 2,\n BROTLI_PARAM_LGBLOCK: 3,\n BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: 4,\n BROTLI_PARAM_SIZE_HINT: 5,\n BROTLI_PARAM_LARGE_WINDOW: 6,\n BROTLI_PARAM_NPOSTFIX: 7,\n BROTLI_PARAM_NDIRECT: 8,\n BROTLI_DECODER_RESULT_ERROR: 0,\n BROTLI_DECODER_RESULT_SUCCESS: 1,\n BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: 2,\n BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: 3,\n BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: 0,\n BROTLI_DECODER_PARAM_LARGE_WINDOW: 1,\n BROTLI_DECODER_NO_ERROR: 0,\n BROTLI_DECODER_SUCCESS: 1,\n BROTLI_DECODER_NEEDS_MORE_INPUT: 2,\n BROTLI_DECODER_NEEDS_MORE_OUTPUT: 3,\n BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: -1,\n BROTLI_DECODER_ERROR_FORMAT_RESERVED: -2,\n BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: -3,\n BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: -4,\n BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: -5,\n BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: -6,\n BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: -7,\n BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: -8,\n BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: -9,\n BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: -10,\n BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: -11,\n BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: -12,\n BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: -13,\n BROTLI_DECODER_ERROR_FORMAT_PADDING_1: -14,\n BROTLI_DECODER_ERROR_FORMAT_PADDING_2: -15,\n BROTLI_DECODER_ERROR_FORMAT_DISTANCE: -16,\n BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: -19,\n BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: -20,\n BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: -21,\n BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: -22,\n BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: -25,\n BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: -26,\n BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: -27,\n BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: -30,\n BROTLI_DECODER_ERROR_UNREACHABLE: -31,\n}, realZlibConstants));\n//# sourceMappingURL=constants.js.map","import assert from 'assert';\nimport { Buffer } from 'buffer';\nimport { Minipass } from 'minipass';\nimport * as realZlib from 'zlib';\nimport { constants } from './constants.js';\nexport { constants } from './constants.js';\nconst OriginalBufferConcat = Buffer.concat;\nconst desc = Object.getOwnPropertyDescriptor(Buffer, 'concat');\nconst noop = (args) => args;\nconst passthroughBufferConcat = desc?.writable === true || desc?.set !== undefined\n ? (makeNoOp) => {\n Buffer.concat = makeNoOp ? noop : OriginalBufferConcat;\n }\n : (_) => { };\nconst _superWrite = Symbol('_superWrite');\nexport class ZlibError extends Error {\n code;\n errno;\n constructor(err, origin) {\n super('zlib: ' + err.message, { cause: err });\n this.code = err.code;\n this.errno = err.errno;\n /* c8 ignore next */\n if (!this.code)\n this.code = 'ZLIB_ERROR';\n this.message = 'zlib: ' + err.message;\n Error.captureStackTrace(this, origin ?? this.constructor);\n }\n get name() {\n return 'ZlibError';\n }\n}\n// the Zlib class they all inherit from\n// This thing manages the queue of requests, and returns\n// true or false if there is anything in the queue when\n// you call the .write() method.\nconst _flushFlag = Symbol('flushFlag');\nclass ZlibBase extends Minipass {\n #sawError = false;\n #ended = false;\n #flushFlag;\n #finishFlushFlag;\n #fullFlushFlag;\n #handle;\n #onError;\n get sawError() {\n return this.#sawError;\n }\n get handle() {\n return this.#handle;\n }\n /* c8 ignore start */\n get flushFlag() {\n return this.#flushFlag;\n }\n /* c8 ignore stop */\n constructor(opts, mode) {\n if (!opts || typeof opts !== 'object')\n throw new TypeError('invalid options for ZlibBase constructor');\n //@ts-ignore\n super(opts);\n /* c8 ignore start */\n this.#flushFlag = opts.flush ?? 0;\n this.#finishFlushFlag = opts.finishFlush ?? 0;\n this.#fullFlushFlag = opts.fullFlushFlag ?? 0;\n /* c8 ignore stop */\n //@ts-ignore\n if (typeof realZlib[mode] !== 'function') {\n throw new TypeError('Compression method not supported: ' + mode);\n }\n // this will throw if any options are invalid for the class selected\n try {\n // @types/node doesn't know that it exports the classes, but they're there\n //@ts-ignore\n this.#handle = new realZlib[mode](opts);\n }\n catch (er) {\n // make sure that all errors get decorated properly\n throw new ZlibError(er, this.constructor);\n }\n this.#onError = err => {\n // no sense raising multiple errors, since we abort on the first one.\n if (this.#sawError)\n return;\n this.#sawError = true;\n // there is no way to cleanly recover.\n // continuing only obscures problems.\n this.close();\n this.emit('error', err);\n };\n this.#handle?.on('error', er => this.#onError(new ZlibError(er)));\n this.once('end', () => this.close);\n }\n close() {\n if (this.#handle) {\n this.#handle.close();\n this.#handle = undefined;\n this.emit('close');\n }\n }\n reset() {\n if (!this.#sawError) {\n assert(this.#handle, 'zlib binding closed');\n //@ts-ignore\n return this.#handle.reset?.();\n }\n }\n flush(flushFlag) {\n if (this.ended)\n return;\n if (typeof flushFlag !== 'number')\n flushFlag = this.#fullFlushFlag;\n this.write(Object.assign(Buffer.alloc(0), { [_flushFlag]: flushFlag }));\n }\n end(chunk, encoding, cb) {\n /* c8 ignore start */\n if (typeof chunk === 'function') {\n cb = chunk;\n encoding = undefined;\n chunk = undefined;\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = undefined;\n }\n /* c8 ignore stop */\n if (chunk) {\n if (encoding)\n this.write(chunk, encoding);\n else\n this.write(chunk);\n }\n this.flush(this.#finishFlushFlag);\n this.#ended = true;\n return super.end(cb);\n }\n get ended() {\n return this.#ended;\n }\n // overridden in the gzip classes to do portable writes\n [_superWrite](data) {\n return super.write(data);\n }\n write(chunk, encoding, cb) {\n // process the chunk using the sync process\n // then super.write() all the outputted chunks\n if (typeof encoding === 'function')\n (cb = encoding), (encoding = 'utf8');\n if (typeof chunk === 'string')\n chunk = Buffer.from(chunk, encoding);\n if (this.#sawError)\n return;\n assert(this.#handle, 'zlib binding closed');\n // _processChunk tries to .close() the native handle after it's done, so we\n // intercept that by temporarily making it a no-op.\n // diving into the node:zlib internals a bit here\n const nativeHandle = this.#handle\n ._handle;\n const originalNativeClose = nativeHandle.close;\n nativeHandle.close = () => { };\n const originalClose = this.#handle.close;\n this.#handle.close = () => { };\n // It also calls `Buffer.concat()` at the end, which may be convenient\n // for some, but which we are not interested in as it slows us down.\n passthroughBufferConcat(true);\n let result = undefined;\n try {\n const flushFlag = typeof chunk[_flushFlag] === 'number'\n ? chunk[_flushFlag]\n : this.#flushFlag;\n result = this.#handle._processChunk(chunk, flushFlag);\n // if we don't throw, reset it back how it was\n passthroughBufferConcat(false);\n }\n catch (err) {\n // or if we do, put Buffer.concat() back before we emit error\n // Error events call into user code, which may call Buffer.concat()\n passthroughBufferConcat(false);\n this.#onError(new ZlibError(err, this.write));\n }\n finally {\n if (this.#handle) {\n // Core zlib resets `_handle` to null after attempting to close the\n // native handle. Our no-op handler prevented actual closure, but we\n // need to restore the `._handle` property.\n ;\n this.#handle._handle =\n nativeHandle;\n nativeHandle.close = originalNativeClose;\n this.#handle.close = originalClose;\n // `_processChunk()` adds an 'error' listener. If we don't remove it\n // after each call, these handlers start piling up.\n this.#handle.removeAllListeners('error');\n // make sure OUR error listener is still attached tho\n }\n }\n if (this.#handle)\n this.#handle.on('error', er => this.#onError(new ZlibError(er, this.write)));\n let writeReturn;\n if (result) {\n if (Array.isArray(result) && result.length > 0) {\n const r = result[0];\n // The first buffer is always `handle._outBuffer`, which would be\n // re-used for later invocations; so, we always have to copy that one.\n writeReturn = this[_superWrite](Buffer.from(r));\n for (let i = 1; i < result.length; i++) {\n writeReturn = this[_superWrite](result[i]);\n }\n }\n else {\n // either a single Buffer or an empty array\n writeReturn = this[_superWrite](Buffer.from(result));\n }\n }\n if (cb)\n cb();\n return writeReturn;\n }\n}\nexport class Zlib extends ZlibBase {\n #level;\n #strategy;\n constructor(opts, mode) {\n opts = opts || {};\n opts.flush = opts.flush || constants.Z_NO_FLUSH;\n opts.finishFlush = opts.finishFlush || constants.Z_FINISH;\n opts.fullFlushFlag = constants.Z_FULL_FLUSH;\n super(opts, mode);\n this.#level = opts.level;\n this.#strategy = opts.strategy;\n }\n params(level, strategy) {\n if (this.sawError)\n return;\n if (!this.handle)\n throw new Error('cannot switch params when binding is closed');\n // no way to test this without also not supporting params at all\n /* c8 ignore start */\n if (!this.handle.params)\n throw new Error('not supported in this implementation');\n /* c8 ignore stop */\n if (this.#level !== level || this.#strategy !== strategy) {\n this.flush(constants.Z_SYNC_FLUSH);\n assert(this.handle, 'zlib binding closed');\n // .params() calls .flush(), but the latter is always async in the\n // core zlib. We override .flush() temporarily to intercept that and\n // flush synchronously.\n const origFlush = this.handle.flush;\n this.handle.flush = (flushFlag, cb) => {\n /* c8 ignore start */\n if (typeof flushFlag === 'function') {\n cb = flushFlag;\n flushFlag = this.flushFlag;\n }\n /* c8 ignore stop */\n this.flush(flushFlag);\n cb?.();\n };\n try {\n ;\n this.handle.params(level, strategy);\n }\n finally {\n this.handle.flush = origFlush;\n }\n /* c8 ignore start */\n if (this.handle) {\n this.#level = level;\n this.#strategy = strategy;\n }\n /* c8 ignore stop */\n }\n }\n}\n// minimal 2-byte header\nexport class Deflate extends Zlib {\n constructor(opts) {\n super(opts, 'Deflate');\n }\n}\nexport class Inflate extends Zlib {\n constructor(opts) {\n super(opts, 'Inflate');\n }\n}\nexport class Gzip extends Zlib {\n #portable;\n constructor(opts) {\n super(opts, 'Gzip');\n this.#portable = opts && !!opts.portable;\n }\n [_superWrite](data) {\n if (!this.#portable)\n return super[_superWrite](data);\n // we'll always get the header emitted in one first chunk\n // overwrite the OS indicator byte with 0xFF\n this.#portable = false;\n data[9] = 255;\n return super[_superWrite](data);\n }\n}\nexport class Gunzip extends Zlib {\n constructor(opts) {\n super(opts, 'Gunzip');\n }\n}\n// raw - no header\nexport class DeflateRaw extends Zlib {\n constructor(opts) {\n super(opts, 'DeflateRaw');\n }\n}\nexport class InflateRaw extends Zlib {\n constructor(opts) {\n super(opts, 'InflateRaw');\n }\n}\n// auto-detect header.\nexport class Unzip extends Zlib {\n constructor(opts) {\n super(opts, 'Unzip');\n }\n}\nclass Brotli extends ZlibBase {\n constructor(opts, mode) {\n opts = opts || {};\n opts.flush = opts.flush || constants.BROTLI_OPERATION_PROCESS;\n opts.finishFlush =\n opts.finishFlush || constants.BROTLI_OPERATION_FINISH;\n opts.fullFlushFlag = constants.BROTLI_OPERATION_FLUSH;\n super(opts, mode);\n }\n}\nexport class BrotliCompress extends Brotli {\n constructor(opts) {\n super(opts, 'BrotliCompress');\n }\n}\nexport class BrotliDecompress extends Brotli {\n constructor(opts) {\n super(opts, 'BrotliDecompress');\n }\n}\nclass Zstd extends ZlibBase {\n constructor(opts, mode) {\n opts = opts || {};\n opts.flush = opts.flush || constants.ZSTD_e_continue;\n opts.finishFlush = opts.finishFlush || constants.ZSTD_e_end;\n opts.fullFlushFlag = constants.ZSTD_e_flush;\n super(opts, mode);\n }\n}\nexport class ZstdCompress extends Zstd {\n constructor(opts) {\n super(opts, 'ZstdCompress');\n }\n}\nexport class ZstdDecompress extends Zstd {\n constructor(opts) {\n super(opts, 'ZstdDecompress');\n }\n}\n//# sourceMappingURL=index.js.map","// Tar can encode large and negative numbers using a leading byte of\n// 0xff for negative, and 0x80 for positive.\nexport const encode = (num, buf) => {\n if (!Number.isSafeInteger(num)) {\n // The number is so large that javascript cannot represent it with integer\n // precision.\n throw Error('cannot encode number outside of javascript safe integer range');\n }\n else if (num < 0) {\n encodeNegative(num, buf);\n }\n else {\n encodePositive(num, buf);\n }\n return buf;\n};\nconst encodePositive = (num, buf) => {\n buf[0] = 0x80;\n for (var i = buf.length; i > 1; i--) {\n buf[i - 1] = num & 0xff;\n num = Math.floor(num / 0x100);\n }\n};\nconst encodeNegative = (num, buf) => {\n buf[0] = 0xff;\n var flipped = false;\n num = num * -1;\n for (var i = buf.length; i > 1; i--) {\n var byte = num & 0xff;\n num = Math.floor(num / 0x100);\n if (flipped) {\n buf[i - 1] = onesComp(byte);\n }\n else if (byte === 0) {\n buf[i - 1] = 0;\n }\n else {\n flipped = true;\n buf[i - 1] = twosComp(byte);\n }\n }\n};\nexport const parse = (buf) => {\n const pre = buf[0];\n const value = pre === 0x80 ? pos(buf.subarray(1, buf.length))\n : pre === 0xff ? twos(buf)\n : null;\n if (value === null) {\n throw Error('invalid base256 encoding');\n }\n if (!Number.isSafeInteger(value)) {\n // The number is so large that javascript cannot represent it with integer\n // precision.\n throw Error('parsed number outside of javascript safe integer range');\n }\n return value;\n};\nconst twos = (buf) => {\n var len = buf.length;\n var sum = 0;\n var flipped = false;\n for (var i = len - 1; i > -1; i--) {\n var byte = Number(buf[i]);\n var f;\n if (flipped) {\n f = onesComp(byte);\n }\n else if (byte === 0) {\n f = byte;\n }\n else {\n flipped = true;\n f = twosComp(byte);\n }\n if (f !== 0) {\n sum -= f * Math.pow(256, len - i - 1);\n }\n }\n return sum;\n};\nconst pos = (buf) => {\n var len = buf.length;\n var sum = 0;\n for (var i = len - 1; i > -1; i--) {\n var byte = Number(buf[i]);\n if (byte !== 0) {\n sum += byte * Math.pow(256, len - i - 1);\n }\n }\n return sum;\n};\nconst onesComp = (byte) => (0xff ^ byte) & 0xff;\nconst twosComp = (byte) => ((0xff ^ byte) + 1) & 0xff;\n//# sourceMappingURL=large-numbers.js.map","export const isCode = (c) => name.has(c);\nexport const isName = (c) => code.has(c);\n// map types from key to human-friendly name\nexport const name = new Map([\n ['0', 'File'],\n // same as File\n ['', 'OldFile'],\n ['1', 'Link'],\n ['2', 'SymbolicLink'],\n // Devices and FIFOs aren't fully supported\n // they are parsed, but skipped when unpacking\n ['3', 'CharacterDevice'],\n ['4', 'BlockDevice'],\n ['5', 'Directory'],\n ['6', 'FIFO'],\n // same as File\n ['7', 'ContiguousFile'],\n // pax headers\n ['g', 'GlobalExtendedHeader'],\n ['x', 'ExtendedHeader'],\n // vendor-specific stuff\n // skip\n ['A', 'SolarisACL'],\n // like 5, but with data, which should be skipped\n ['D', 'GNUDumpDir'],\n // metadata only, skip\n ['I', 'Inode'],\n // data = link path of next file\n ['K', 'NextFileHasLongLinkpath'],\n // data = path of next file\n ['L', 'NextFileHasLongPath'],\n // skip\n ['M', 'ContinuationFile'],\n // like L\n ['N', 'OldGnuLongPath'],\n // skip\n ['S', 'SparseFile'],\n // skip\n ['V', 'TapeVolumeHeader'],\n // like x\n ['X', 'OldExtendedHeader'],\n]);\n// map the other direction\nexport const code = new Map(Array.from(name).map(kv => [kv[1], kv[0]]));\n//# sourceMappingURL=types.js.map","// parse a 512-byte header block to a data object, or vice-versa\n// encode returns `true` if a pax extended header is needed, because\n// the data could not be faithfully encoded in a simple header.\n// (Also, check header.needPax to see if it needs a pax header.)\nimport { posix as pathModule } from 'node:path';\nimport * as large from './large-numbers.js';\nimport * as types from './types.js';\nexport class Header {\n cksumValid = false;\n needPax = false;\n nullBlock = false;\n block;\n path;\n mode;\n uid;\n gid;\n size;\n cksum;\n #type = 'Unsupported';\n linkpath;\n uname;\n gname;\n devmaj = 0;\n devmin = 0;\n atime;\n ctime;\n mtime;\n charset;\n comment;\n constructor(data, off = 0, ex, gex) {\n if (Buffer.isBuffer(data)) {\n this.decode(data, off || 0, ex, gex);\n }\n else if (data) {\n this.#slurp(data);\n }\n }\n decode(buf, off, ex, gex) {\n if (!off) {\n off = 0;\n }\n if (!buf || !(buf.length >= off + 512)) {\n throw new Error('need 512 bytes for header');\n }\n this.path = ex?.path ?? decString(buf, off, 100);\n this.mode = ex?.mode ?? gex?.mode ?? decNumber(buf, off + 100, 8);\n this.uid = ex?.uid ?? gex?.uid ?? decNumber(buf, off + 108, 8);\n this.gid = ex?.gid ?? gex?.gid ?? decNumber(buf, off + 116, 8);\n this.size = ex?.size ?? gex?.size ?? decNumber(buf, off + 124, 12);\n this.mtime =\n ex?.mtime ?? gex?.mtime ?? decDate(buf, off + 136, 12);\n this.cksum = decNumber(buf, off + 148, 12);\n // if we have extended or global extended headers, apply them now\n // See https://github.com/npm/node-tar/pull/187\n // Apply global before local, so it overrides\n if (gex)\n this.#slurp(gex, true);\n if (ex)\n this.#slurp(ex);\n // old tar versions marked dirs as a file with a trailing /\n const t = decString(buf, off + 156, 1);\n if (types.isCode(t)) {\n this.#type = t || '0';\n }\n if (this.#type === '0' && this.path.slice(-1) === '/') {\n this.#type = '5';\n }\n // tar implementations sometimes incorrectly put the stat(dir).size\n // as the size in the tarball, even though Directory entries are\n // not able to have any body at all. In the very rare chance that\n // it actually DOES have a body, we weren't going to do anything with\n // it anyway, and it'll just be a warning about an invalid header.\n if (this.#type === '5') {\n this.size = 0;\n }\n this.linkpath = decString(buf, off + 157, 100);\n if (buf.subarray(off + 257, off + 265).toString() ===\n 'ustar\\u000000') {\n /* c8 ignore start */\n this.uname =\n ex?.uname ?? gex?.uname ?? decString(buf, off + 265, 32);\n this.gname =\n ex?.gname ?? gex?.gname ?? decString(buf, off + 297, 32);\n this.devmaj =\n ex?.devmaj ?? gex?.devmaj ?? decNumber(buf, off + 329, 8) ?? 0;\n this.devmin =\n ex?.devmin ?? gex?.devmin ?? decNumber(buf, off + 337, 8) ?? 0;\n /* c8 ignore stop */\n if (buf[off + 475] !== 0) {\n // definitely a prefix, definitely >130 chars.\n const prefix = decString(buf, off + 345, 155);\n this.path = prefix + '/' + this.path;\n }\n else {\n const prefix = decString(buf, off + 345, 130);\n if (prefix) {\n this.path = prefix + '/' + this.path;\n }\n /* c8 ignore start */\n this.atime =\n ex?.atime ?? gex?.atime ?? decDate(buf, off + 476, 12);\n this.ctime =\n ex?.ctime ?? gex?.ctime ?? decDate(buf, off + 488, 12);\n /* c8 ignore stop */\n }\n }\n let sum = 8 * 0x20;\n for (let i = off; i < off + 148; i++) {\n sum += buf[i];\n }\n for (let i = off + 156; i < off + 512; i++) {\n sum += buf[i];\n }\n this.cksumValid = sum === this.cksum;\n if (this.cksum === undefined && sum === 8 * 0x20) {\n this.nullBlock = true;\n }\n }\n #slurp(ex, gex = false) {\n Object.assign(this, Object.fromEntries(Object.entries(ex).filter(([k, v]) => {\n // we slurp in everything except for the path attribute in\n // a global extended header, because that's weird. Also, any\n // null/undefined values are ignored.\n return !(v === null ||\n v === undefined ||\n (k === 'path' && gex) ||\n (k === 'linkpath' && gex) ||\n k === 'global');\n })));\n }\n encode(buf, off = 0) {\n if (!buf) {\n buf = this.block = Buffer.alloc(512);\n }\n if (this.#type === 'Unsupported') {\n this.#type = '0';\n }\n if (!(buf.length >= off + 512)) {\n throw new Error('need 512 bytes for header');\n }\n const prefixSize = this.ctime || this.atime ? 130 : 155;\n const split = splitPrefix(this.path || '', prefixSize);\n const path = split[0];\n const prefix = split[1];\n this.needPax = !!split[2];\n this.needPax = encString(buf, off, 100, path) || this.needPax;\n this.needPax =\n encNumber(buf, off + 100, 8, this.mode) || this.needPax;\n this.needPax =\n encNumber(buf, off + 108, 8, this.uid) || this.needPax;\n this.needPax =\n encNumber(buf, off + 116, 8, this.gid) || this.needPax;\n this.needPax =\n encNumber(buf, off + 124, 12, this.size) || this.needPax;\n this.needPax =\n encDate(buf, off + 136, 12, this.mtime) || this.needPax;\n buf[off + 156] = this.#type.charCodeAt(0);\n this.needPax =\n encString(buf, off + 157, 100, this.linkpath) || this.needPax;\n buf.write('ustar\\u000000', off + 257, 8);\n this.needPax =\n encString(buf, off + 265, 32, this.uname) || this.needPax;\n this.needPax =\n encString(buf, off + 297, 32, this.gname) || this.needPax;\n this.needPax =\n encNumber(buf, off + 329, 8, this.devmaj) || this.needPax;\n this.needPax =\n encNumber(buf, off + 337, 8, this.devmin) || this.needPax;\n this.needPax =\n encString(buf, off + 345, prefixSize, prefix) || this.needPax;\n if (buf[off + 475] !== 0) {\n this.needPax =\n encString(buf, off + 345, 155, prefix) || this.needPax;\n }\n else {\n this.needPax =\n encString(buf, off + 345, 130, prefix) || this.needPax;\n this.needPax =\n encDate(buf, off + 476, 12, this.atime) || this.needPax;\n this.needPax =\n encDate(buf, off + 488, 12, this.ctime) || this.needPax;\n }\n let sum = 8 * 0x20;\n for (let i = off; i < off + 148; i++) {\n sum += buf[i];\n }\n for (let i = off + 156; i < off + 512; i++) {\n sum += buf[i];\n }\n this.cksum = sum;\n encNumber(buf, off + 148, 8, this.cksum);\n this.cksumValid = true;\n return this.needPax;\n }\n get type() {\n return (this.#type === 'Unsupported' ?\n this.#type\n : types.name.get(this.#type));\n }\n get typeKey() {\n return this.#type;\n }\n set type(type) {\n const c = String(types.code.get(type));\n if (types.isCode(c) || c === 'Unsupported') {\n this.#type = c;\n }\n else if (types.isCode(type)) {\n this.#type = type;\n }\n else {\n throw new TypeError('invalid entry type: ' + type);\n }\n }\n}\nconst splitPrefix = (p, prefixSize) => {\n const pathSize = 100;\n let pp = p;\n let prefix = '';\n let ret = undefined;\n const root = pathModule.parse(p).root || '.';\n if (Buffer.byteLength(pp) < pathSize) {\n ret = [pp, prefix, false];\n }\n else {\n // first set prefix to the dir, and path to the base\n prefix = pathModule.dirname(pp);\n pp = pathModule.basename(pp);\n do {\n if (Buffer.byteLength(pp) <= pathSize &&\n Buffer.byteLength(prefix) <= prefixSize) {\n // both fit!\n ret = [pp, prefix, false];\n }\n else if (Buffer.byteLength(pp) > pathSize &&\n Buffer.byteLength(prefix) <= prefixSize) {\n // prefix fits in prefix, but path doesn't fit in path\n ret = [pp.slice(0, pathSize - 1), prefix, true];\n }\n else {\n // make path take a bit from prefix\n pp = pathModule.join(pathModule.basename(prefix), pp);\n prefix = pathModule.dirname(prefix);\n }\n } while (prefix !== root && ret === undefined);\n // at this point, found no resolution, just truncate\n if (!ret) {\n ret = [p.slice(0, pathSize - 1), '', true];\n }\n }\n return ret;\n};\nconst decString = (buf, off, size) => buf\n .subarray(off, off + size)\n .toString('utf8')\n .replace(/\\0.*/, '');\nconst decDate = (buf, off, size) => numToDate(decNumber(buf, off, size));\nconst numToDate = (num) => num === undefined ? undefined : new Date(num * 1000);\nconst decNumber = (buf, off, size) => Number(buf[off]) & 0x80 ?\n large.parse(buf.subarray(off, off + size))\n : decSmallNumber(buf, off, size);\nconst nanUndef = (value) => (isNaN(value) ? undefined : value);\nconst decSmallNumber = (buf, off, size) => nanUndef(parseInt(buf\n .subarray(off, off + size)\n .toString('utf8')\n .replace(/\\0.*$/, '')\n .trim(), 8));\n// the maximum encodable as a null-terminated octal, by field size\nconst MAXNUM = {\n 12: 0o77777777777,\n 8: 0o7777777,\n};\nconst encNumber = (buf, off, size, num) => num === undefined ? false\n : num > MAXNUM[size] || num < 0 ?\n (large.encode(num, buf.subarray(off, off + size)), true)\n : (encSmallNumber(buf, off, size, num), false);\nconst encSmallNumber = (buf, off, size, num) => buf.write(octalString(num, size), off, size, 'ascii');\nconst octalString = (num, size) => padOctal(Math.floor(num).toString(8), size);\nconst padOctal = (str, size) => (str.length === size - 1 ?\n str\n : new Array(size - str.length - 1).join('0') + str + ' ') + '\\0';\nconst encDate = (buf, off, size, date) => date === undefined ? false : (encNumber(buf, off, size, date.getTime() / 1000));\n// enough to fill the longest string we've got\nconst NULLS = new Array(156).join('\\0');\n// pad with nulls, return true if it's longer or non-ascii\nconst encString = (buf, off, size, str) => str === undefined ? false : ((buf.write(str + NULLS, off, size, 'utf8'),\n str.length !== Buffer.byteLength(str) || str.length > size));\n//# sourceMappingURL=header.js.map","import { basename } from 'node:path';\nimport { Header } from './header.js';\nexport class Pax {\n atime;\n mtime;\n ctime;\n charset;\n comment;\n gid;\n uid;\n gname;\n uname;\n linkpath;\n dev;\n ino;\n nlink;\n path;\n size;\n mode;\n global;\n constructor(obj, global = false) {\n this.atime = obj.atime;\n this.charset = obj.charset;\n this.comment = obj.comment;\n this.ctime = obj.ctime;\n this.dev = obj.dev;\n this.gid = obj.gid;\n this.global = global;\n this.gname = obj.gname;\n this.ino = obj.ino;\n this.linkpath = obj.linkpath;\n this.mtime = obj.mtime;\n this.nlink = obj.nlink;\n this.path = obj.path;\n this.size = obj.size;\n this.uid = obj.uid;\n this.uname = obj.uname;\n }\n encode() {\n const body = this.encodeBody();\n if (body === '') {\n return Buffer.allocUnsafe(0);\n }\n const bodyLen = Buffer.byteLength(body);\n // round up to 512 bytes\n // add 512 for header\n const bufLen = 512 * Math.ceil(1 + bodyLen / 512);\n const buf = Buffer.allocUnsafe(bufLen);\n // 0-fill the header section, it might not hit every field\n for (let i = 0; i < 512; i++) {\n buf[i] = 0;\n }\n new Header({\n // XXX split the path\n // then the path should be PaxHeader + basename, but less than 99,\n // prepend with the dirname\n /* c8 ignore start */\n path: ('PaxHeader/' + basename(this.path ?? '')).slice(0, 99),\n /* c8 ignore stop */\n mode: this.mode || 0o644,\n uid: this.uid,\n gid: this.gid,\n size: bodyLen,\n mtime: this.mtime,\n type: this.global ? 'GlobalExtendedHeader' : 'ExtendedHeader',\n linkpath: '',\n uname: this.uname || '',\n gname: this.gname || '',\n devmaj: 0,\n devmin: 0,\n atime: this.atime,\n ctime: this.ctime,\n }).encode(buf);\n buf.write(body, 512, bodyLen, 'utf8');\n // null pad after the body\n for (let i = bodyLen + 512; i < buf.length; i++) {\n buf[i] = 0;\n }\n return buf;\n }\n encodeBody() {\n return (this.encodeField('path') +\n this.encodeField('ctime') +\n this.encodeField('atime') +\n this.encodeField('dev') +\n this.encodeField('ino') +\n this.encodeField('nlink') +\n this.encodeField('charset') +\n this.encodeField('comment') +\n this.encodeField('gid') +\n this.encodeField('gname') +\n this.encodeField('linkpath') +\n this.encodeField('mtime') +\n this.encodeField('size') +\n this.encodeField('uid') +\n this.encodeField('uname'));\n }\n encodeField(field) {\n if (this[field] === undefined) {\n return '';\n }\n const r = this[field];\n const v = r instanceof Date ? r.getTime() / 1000 : r;\n const s = ' ' +\n (field === 'dev' || field === 'ino' || field === 'nlink' ?\n 'SCHILY.'\n : '') +\n field +\n '=' +\n v +\n '\\n';\n const byteLen = Buffer.byteLength(s);\n // the digits includes the length of the digits in ascii base-10\n // so if it's 9 characters, then adding 1 for the 9 makes it 10\n // which makes it 11 chars.\n let digits = Math.floor(Math.log(byteLen) / Math.log(10)) + 1;\n if (byteLen + digits >= Math.pow(10, digits)) {\n digits += 1;\n }\n const len = digits + byteLen;\n return len + s;\n }\n static parse(str, ex, g = false) {\n return new Pax(merge(parseKV(str), ex), g);\n }\n}\nconst merge = (a, b) => b ? Object.assign({}, b, a) : a;\nconst parseKV = (str) => str\n .replace(/\\n$/, '')\n .split('\\n')\n .reduce(parseKVLine, Object.create(null));\nconst parseKVLine = (set, line) => {\n const n = parseInt(line, 10);\n // XXX Values with \\n in them will fail this.\n // Refactor to not be a naive line-by-line parse.\n if (n !== Buffer.byteLength(line) + 1) {\n return set;\n }\n line = line.slice((n + ' ').length);\n const kv = line.split('=');\n const r = kv.shift();\n if (!r) {\n return set;\n }\n const k = r.replace(/^SCHILY\\.(dev|ino|nlink)/, '$1');\n const v = kv.join('=');\n set[k] =\n /^([A-Z]+\\.)?([mac]|birth|creation)time$/.test(k) ?\n new Date(Number(v) * 1000)\n : /^[0-9]+$/.test(v) ? +v\n : v;\n return set;\n};\n//# sourceMappingURL=pax.js.map","// on windows, either \\ or / are valid directory separators.\n// on unix, \\ is a valid character in filenames.\n// so, on windows, and only on windows, we replace all \\ chars with /,\n// so that we can use / as our one and only directory separator char.\nconst platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform;\nexport const normalizeWindowsPath = platform !== 'win32' ?\n (p) => p\n : (p) => p && p.replace(/\\\\/g, '/');\n//# sourceMappingURL=normalize-windows-path.js.map","import { Minipass } from 'minipass';\nimport { normalizeWindowsPath } from './normalize-windows-path.js';\nexport class ReadEntry extends Minipass {\n extended;\n globalExtended;\n header;\n startBlockSize;\n blockRemain;\n remain;\n type;\n meta = false;\n ignore = false;\n path;\n mode;\n uid;\n gid;\n uname;\n gname;\n size = 0;\n mtime;\n atime;\n ctime;\n linkpath;\n dev;\n ino;\n nlink;\n invalid = false;\n absolute;\n unsupported = false;\n constructor(header, ex, gex) {\n super({});\n // read entries always start life paused. this is to avoid the\n // situation where Minipass's auto-ending empty streams results\n // in an entry ending before we're ready for it.\n this.pause();\n this.extended = ex;\n this.globalExtended = gex;\n this.header = header;\n /* c8 ignore start */\n this.remain = header.size ?? 0;\n /* c8 ignore stop */\n this.startBlockSize = 512 * Math.ceil(this.remain / 512);\n this.blockRemain = this.startBlockSize;\n this.type = header.type;\n switch (this.type) {\n case 'File':\n case 'OldFile':\n case 'Link':\n case 'SymbolicLink':\n case 'CharacterDevice':\n case 'BlockDevice':\n case 'Directory':\n case 'FIFO':\n case 'ContiguousFile':\n case 'GNUDumpDir':\n break;\n case 'NextFileHasLongLinkpath':\n case 'NextFileHasLongPath':\n case 'OldGnuLongPath':\n case 'GlobalExtendedHeader':\n case 'ExtendedHeader':\n case 'OldExtendedHeader':\n this.meta = true;\n break;\n // NOTE: gnutar and bsdtar treat unrecognized types as 'File'\n // it may be worth doing the same, but with a warning.\n default:\n this.ignore = true;\n }\n /* c8 ignore start */\n if (!header.path) {\n throw new Error('no path provided for tar.ReadEntry');\n }\n /* c8 ignore stop */\n this.path = normalizeWindowsPath(header.path);\n this.mode = header.mode;\n if (this.mode) {\n this.mode = this.mode & 0o7777;\n }\n this.uid = header.uid;\n this.gid = header.gid;\n this.uname = header.uname;\n this.gname = header.gname;\n this.size = this.remain;\n this.mtime = header.mtime;\n this.atime = header.atime;\n this.ctime = header.ctime;\n /* c8 ignore start */\n this.linkpath =\n header.linkpath ?\n normalizeWindowsPath(header.linkpath)\n : undefined;\n /* c8 ignore stop */\n this.uname = header.uname;\n this.gname = header.gname;\n if (ex) {\n this.#slurp(ex);\n }\n if (gex) {\n this.#slurp(gex, true);\n }\n }\n write(data) {\n const writeLen = data.length;\n if (writeLen > this.blockRemain) {\n throw new Error('writing more to entry than is appropriate');\n }\n const r = this.remain;\n const br = this.blockRemain;\n this.remain = Math.max(0, r - writeLen);\n this.blockRemain = Math.max(0, br - writeLen);\n if (this.ignore) {\n return true;\n }\n if (r >= writeLen) {\n return super.write(data);\n }\n // r < writeLen\n return super.write(data.subarray(0, r));\n }\n #slurp(ex, gex = false) {\n if (ex.path)\n ex.path = normalizeWindowsPath(ex.path);\n if (ex.linkpath)\n ex.linkpath = normalizeWindowsPath(ex.linkpath);\n Object.assign(this, Object.fromEntries(Object.entries(ex).filter(([k, v]) => {\n // we slurp in everything except for the path attribute in\n // a global extended header, because that's weird. Also, any\n // null/undefined values are ignored.\n return !(v === null ||\n v === undefined ||\n (k === 'path' && gex));\n })));\n }\n}\n//# sourceMappingURL=read-entry.js.map","export const warnMethod = (self, code, message, data = {}) => {\n if (self.file) {\n data.file = self.file;\n }\n if (self.cwd) {\n data.cwd = self.cwd;\n }\n data.code =\n (message instanceof Error &&\n message.code) ||\n code;\n data.tarCode = code;\n if (!self.strict && data.recoverable !== false) {\n if (message instanceof Error) {\n data = Object.assign(message, data);\n message = message.message;\n }\n self.emit('warn', code, message, data);\n }\n else if (message instanceof Error) {\n self.emit('error', Object.assign(message, data));\n }\n else {\n self.emit('error', Object.assign(new Error(`${code}: ${message}`), data));\n }\n};\n//# sourceMappingURL=warn-method.js.map","// this[BUFFER] is the remainder of a chunk if we're waiting for\n// the full 512 bytes of a header to come in. We will Buffer.concat()\n// it to the next write(), which is a mem copy, but a small one.\n//\n// this[QUEUE] is a list of entries that haven't been emitted\n// yet this can only get filled up if the user keeps write()ing after\n// a write() returns false, or does a write() with more than one entry\n//\n// We don't buffer chunks, we always parse them and either create an\n// entry, or push it into the active entry. The ReadEntry class knows\n// to throw data away if .ignore=true\n//\n// Shift entry off the buffer when it emits 'end', and emit 'entry' for\n// the next one in the list.\n//\n// At any time, we're pushing body chunks into the entry at WRITEENTRY,\n// and waiting for 'end' on the entry at READENTRY\n//\n// ignored entries get .resume() called on them straight away\nimport { EventEmitter as EE } from 'events';\nimport { BrotliDecompress, Unzip, ZstdDecompress } from 'minizlib';\nimport { Header } from './header.js';\nimport { Pax } from './pax.js';\nimport { ReadEntry } from './read-entry.js';\nimport { warnMethod, } from './warn-method.js';\nconst maxMetaEntrySize = 1024 * 1024;\nconst gzipHeader = Buffer.from([0x1f, 0x8b]);\nconst zstdHeader = Buffer.from([0x28, 0xb5, 0x2f, 0xfd]);\nconst ZIP_HEADER_LEN = Math.max(gzipHeader.length, zstdHeader.length);\nconst STATE = Symbol('state');\nconst WRITEENTRY = Symbol('writeEntry');\nconst READENTRY = Symbol('readEntry');\nconst NEXTENTRY = Symbol('nextEntry');\nconst PROCESSENTRY = Symbol('processEntry');\nconst EX = Symbol('extendedHeader');\nconst GEX = Symbol('globalExtendedHeader');\nconst META = Symbol('meta');\nconst EMITMETA = Symbol('emitMeta');\nconst BUFFER = Symbol('buffer');\nconst QUEUE = Symbol('queue');\nconst ENDED = Symbol('ended');\nconst EMITTEDEND = Symbol('emittedEnd');\nconst EMIT = Symbol('emit');\nconst UNZIP = Symbol('unzip');\nconst CONSUMECHUNK = Symbol('consumeChunk');\nconst CONSUMECHUNKSUB = Symbol('consumeChunkSub');\nconst CONSUMEBODY = Symbol('consumeBody');\nconst CONSUMEMETA = Symbol('consumeMeta');\nconst CONSUMEHEADER = Symbol('consumeHeader');\nconst CONSUMING = Symbol('consuming');\nconst BUFFERCONCAT = Symbol('bufferConcat');\nconst MAYBEEND = Symbol('maybeEnd');\nconst WRITING = Symbol('writing');\nconst ABORTED = Symbol('aborted');\nconst DONE = Symbol('onDone');\nconst SAW_VALID_ENTRY = Symbol('sawValidEntry');\nconst SAW_NULL_BLOCK = Symbol('sawNullBlock');\nconst SAW_EOF = Symbol('sawEOF');\nconst CLOSESTREAM = Symbol('closeStream');\nconst noop = () => true;\nexport class Parser extends EE {\n file;\n strict;\n maxMetaEntrySize;\n filter;\n brotli;\n zstd;\n writable = true;\n readable = false;\n [QUEUE] = [];\n [BUFFER];\n [READENTRY];\n [WRITEENTRY];\n [STATE] = 'begin';\n [META] = '';\n [EX];\n [GEX];\n [ENDED] = false;\n [UNZIP];\n [ABORTED] = false;\n [SAW_VALID_ENTRY];\n [SAW_NULL_BLOCK] = false;\n [SAW_EOF] = false;\n [WRITING] = false;\n [CONSUMING] = false;\n [EMITTEDEND] = false;\n constructor(opt = {}) {\n super();\n this.file = opt.file || '';\n // these BADARCHIVE errors can't be detected early. listen on DONE.\n this.on(DONE, () => {\n if (this[STATE] === 'begin' ||\n this[SAW_VALID_ENTRY] === false) {\n // either less than 1 block of data, or all entries were invalid.\n // Either way, probably not even a tarball.\n this.warn('TAR_BAD_ARCHIVE', 'Unrecognized archive format');\n }\n });\n if (opt.ondone) {\n this.on(DONE, opt.ondone);\n }\n else {\n this.on(DONE, () => {\n this.emit('prefinish');\n this.emit('finish');\n this.emit('end');\n });\n }\n this.strict = !!opt.strict;\n this.maxMetaEntrySize = opt.maxMetaEntrySize || maxMetaEntrySize;\n this.filter = typeof opt.filter === 'function' ? opt.filter : noop;\n // Unlike gzip, brotli doesn't have any magic bytes to identify it\n // Users need to explicitly tell us they're extracting a brotli file\n // Or we infer from the file extension\n const isTBR = opt.file &&\n (opt.file.endsWith('.tar.br') || opt.file.endsWith('.tbr'));\n // if it's a tbr file it MIGHT be brotli, but we don't know until\n // we look at it and verify it's not a valid tar file.\n this.brotli =\n !(opt.gzip || opt.zstd) && opt.brotli !== undefined ? opt.brotli\n : isTBR ? undefined\n : false;\n // zstd has magic bytes to identify it, but we also support explicit options\n // and file extension detection\n const isTZST = opt.file &&\n (opt.file.endsWith('.tar.zst') || opt.file.endsWith('.tzst'));\n this.zstd =\n !(opt.gzip || opt.brotli) && opt.zstd !== undefined ? opt.zstd\n : isTZST ? true\n : undefined;\n // have to set this so that streams are ok piping into it\n this.on('end', () => this[CLOSESTREAM]());\n if (typeof opt.onwarn === 'function') {\n this.on('warn', opt.onwarn);\n }\n if (typeof opt.onReadEntry === 'function') {\n this.on('entry', opt.onReadEntry);\n }\n }\n warn(code, message, data = {}) {\n warnMethod(this, code, message, data);\n }\n [CONSUMEHEADER](chunk, position) {\n if (this[SAW_VALID_ENTRY] === undefined) {\n this[SAW_VALID_ENTRY] = false;\n }\n let header;\n try {\n header = new Header(chunk, position, this[EX], this[GEX]);\n }\n catch (er) {\n return this.warn('TAR_ENTRY_INVALID', er);\n }\n if (header.nullBlock) {\n if (this[SAW_NULL_BLOCK]) {\n this[SAW_EOF] = true;\n // ending an archive with no entries. pointless, but legal.\n if (this[STATE] === 'begin') {\n this[STATE] = 'header';\n }\n this[EMIT]('eof');\n }\n else {\n this[SAW_NULL_BLOCK] = true;\n this[EMIT]('nullBlock');\n }\n }\n else {\n this[SAW_NULL_BLOCK] = false;\n if (!header.cksumValid) {\n this.warn('TAR_ENTRY_INVALID', 'checksum failure', { header });\n }\n else if (!header.path) {\n this.warn('TAR_ENTRY_INVALID', 'path is required', { header });\n }\n else {\n const type = header.type;\n if (/^(Symbolic)?Link$/.test(type) && !header.linkpath) {\n this.warn('TAR_ENTRY_INVALID', 'linkpath required', {\n header,\n });\n }\n else if (!/^(Symbolic)?Link$/.test(type) &&\n !/^(Global)?ExtendedHeader$/.test(type) &&\n header.linkpath) {\n this.warn('TAR_ENTRY_INVALID', 'linkpath forbidden', {\n header,\n });\n }\n else {\n const entry = (this[WRITEENTRY] = new ReadEntry(header, this[EX], this[GEX]));\n // we do this for meta & ignored entries as well, because they\n // are still valid tar, or else we wouldn't know to ignore them\n if (!this[SAW_VALID_ENTRY]) {\n if (entry.remain) {\n // this might be the one!\n const onend = () => {\n if (!entry.invalid) {\n this[SAW_VALID_ENTRY] = true;\n }\n };\n entry.on('end', onend);\n }\n else {\n this[SAW_VALID_ENTRY] = true;\n }\n }\n if (entry.meta) {\n if (entry.size > this.maxMetaEntrySize) {\n entry.ignore = true;\n this[EMIT]('ignoredEntry', entry);\n this[STATE] = 'ignore';\n entry.resume();\n }\n else if (entry.size > 0) {\n this[META] = '';\n entry.on('data', c => (this[META] += c));\n this[STATE] = 'meta';\n }\n }\n else {\n this[EX] = undefined;\n entry.ignore =\n entry.ignore || !this.filter(entry.path, entry);\n if (entry.ignore) {\n // probably valid, just not something we care about\n this[EMIT]('ignoredEntry', entry);\n this[STATE] = entry.remain ? 'ignore' : 'header';\n entry.resume();\n }\n else {\n if (entry.remain) {\n this[STATE] = 'body';\n }\n else {\n this[STATE] = 'header';\n entry.end();\n }\n if (!this[READENTRY]) {\n this[QUEUE].push(entry);\n this[NEXTENTRY]();\n }\n else {\n this[QUEUE].push(entry);\n }\n }\n }\n }\n }\n }\n }\n [CLOSESTREAM]() {\n queueMicrotask(() => this.emit('close'));\n }\n [PROCESSENTRY](entry) {\n let go = true;\n if (!entry) {\n this[READENTRY] = undefined;\n go = false;\n }\n else if (Array.isArray(entry)) {\n const [ev, ...args] = entry;\n this.emit(ev, ...args);\n }\n else {\n this[READENTRY] = entry;\n this.emit('entry', entry);\n if (!entry.emittedEnd) {\n entry.on('end', () => this[NEXTENTRY]());\n go = false;\n }\n }\n return go;\n }\n [NEXTENTRY]() {\n do { } while (this[PROCESSENTRY](this[QUEUE].shift()));\n if (!this[QUEUE].length) {\n // At this point, there's nothing in the queue, but we may have an\n // entry which is being consumed (readEntry).\n // If we don't, then we definitely can handle more data.\n // If we do, and either it's flowing, or it has never had any data\n // written to it, then it needs more.\n // The only other possibility is that it has returned false from a\n // write() call, so we wait for the next drain to continue.\n const re = this[READENTRY];\n const drainNow = !re || re.flowing || re.size === re.remain;\n if (drainNow) {\n if (!this[WRITING]) {\n this.emit('drain');\n }\n }\n else {\n re.once('drain', () => this.emit('drain'));\n }\n }\n }\n [CONSUMEBODY](chunk, position) {\n // write up to but no more than writeEntry.blockRemain\n const entry = this[WRITEENTRY];\n /* c8 ignore start */\n if (!entry) {\n throw new Error('attempt to consume body without entry??');\n }\n const br = entry.blockRemain ?? 0;\n /* c8 ignore stop */\n const c = br >= chunk.length && position === 0 ?\n chunk\n : chunk.subarray(position, position + br);\n entry.write(c);\n if (!entry.blockRemain) {\n this[STATE] = 'header';\n this[WRITEENTRY] = undefined;\n entry.end();\n }\n return c.length;\n }\n [CONSUMEMETA](chunk, position) {\n const entry = this[WRITEENTRY];\n const ret = this[CONSUMEBODY](chunk, position);\n // if we finished, then the entry is reset\n if (!this[WRITEENTRY] && entry) {\n this[EMITMETA](entry);\n }\n return ret;\n }\n [EMIT](ev, data, extra) {\n if (!this[QUEUE].length && !this[READENTRY]) {\n this.emit(ev, data, extra);\n }\n else {\n this[QUEUE].push([ev, data, extra]);\n }\n }\n [EMITMETA](entry) {\n this[EMIT]('meta', this[META]);\n switch (entry.type) {\n case 'ExtendedHeader':\n case 'OldExtendedHeader':\n this[EX] = Pax.parse(this[META], this[EX], false);\n break;\n case 'GlobalExtendedHeader':\n this[GEX] = Pax.parse(this[META], this[GEX], true);\n break;\n case 'NextFileHasLongPath':\n case 'OldGnuLongPath': {\n const ex = this[EX] ?? Object.create(null);\n this[EX] = ex;\n ex.path = this[META].replace(/\\0.*/, '');\n break;\n }\n case 'NextFileHasLongLinkpath': {\n const ex = this[EX] || Object.create(null);\n this[EX] = ex;\n ex.linkpath = this[META].replace(/\\0.*/, '');\n break;\n }\n /* c8 ignore start */\n default:\n throw new Error('unknown meta: ' + entry.type);\n /* c8 ignore stop */\n }\n }\n abort(error) {\n this[ABORTED] = true;\n this.emit('abort', error);\n // always throws, even in non-strict mode\n this.warn('TAR_ABORT', error, { recoverable: false });\n }\n write(chunk, encoding, cb) {\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = undefined;\n }\n if (typeof chunk === 'string') {\n chunk = Buffer.from(chunk, \n /* c8 ignore next */\n typeof encoding === 'string' ? encoding : 'utf8');\n }\n if (this[ABORTED]) {\n /* c8 ignore next */\n cb?.();\n return false;\n }\n // first write, might be gzipped, zstd, or brotli compressed\n const needSniff = this[UNZIP] === undefined ||\n (this.brotli === undefined && this[UNZIP] === false);\n if (needSniff && chunk) {\n if (this[BUFFER]) {\n chunk = Buffer.concat([this[BUFFER], chunk]);\n this[BUFFER] = undefined;\n }\n if (chunk.length < ZIP_HEADER_LEN) {\n this[BUFFER] = chunk;\n /* c8 ignore next */\n cb?.();\n return true;\n }\n // look for gzip header\n for (let i = 0; this[UNZIP] === undefined && i < gzipHeader.length; i++) {\n if (chunk[i] !== gzipHeader[i]) {\n this[UNZIP] = false;\n }\n }\n // look for zstd header if gzip header not found\n let isZstd = false;\n if (this[UNZIP] === false && this.zstd !== false) {\n isZstd = true;\n for (let i = 0; i < zstdHeader.length; i++) {\n if (chunk[i] !== zstdHeader[i]) {\n isZstd = false;\n break;\n }\n }\n }\n const maybeBrotli = this.brotli === undefined && !isZstd;\n if (this[UNZIP] === false && maybeBrotli) {\n // read the first header to see if it's a valid tar file. If so,\n // we can safely assume that it's not actually brotli, despite the\n // .tbr or .tar.br file extension.\n // if we ended before getting a full chunk, yes, def brotli\n if (chunk.length < 512) {\n if (this[ENDED]) {\n this.brotli = true;\n }\n else {\n this[BUFFER] = chunk;\n /* c8 ignore next */\n cb?.();\n return true;\n }\n }\n else {\n // if it's tar, it's pretty reliably not brotli, chances of\n // that happening are astronomical.\n try {\n new Header(chunk.subarray(0, 512));\n this.brotli = false;\n }\n catch (_) {\n this.brotli = true;\n }\n }\n }\n if (this[UNZIP] === undefined ||\n (this[UNZIP] === false && (this.brotli || isZstd))) {\n const ended = this[ENDED];\n this[ENDED] = false;\n this[UNZIP] =\n this[UNZIP] === undefined ? new Unzip({})\n : isZstd ? new ZstdDecompress({})\n : new BrotliDecompress({});\n this[UNZIP].on('data', chunk => this[CONSUMECHUNK](chunk));\n this[UNZIP].on('error', er => this.abort(er));\n this[UNZIP].on('end', () => {\n this[ENDED] = true;\n this[CONSUMECHUNK]();\n });\n this[WRITING] = true;\n const ret = !!this[UNZIP][ended ? 'end' : 'write'](chunk);\n this[WRITING] = false;\n cb?.();\n return ret;\n }\n }\n this[WRITING] = true;\n if (this[UNZIP]) {\n this[UNZIP].write(chunk);\n }\n else {\n this[CONSUMECHUNK](chunk);\n }\n this[WRITING] = false;\n // return false if there's a queue, or if the current entry isn't flowing\n const ret = this[QUEUE].length ? false\n : this[READENTRY] ? this[READENTRY].flowing\n : true;\n // if we have no queue, then that means a clogged READENTRY\n if (!ret && !this[QUEUE].length) {\n this[READENTRY]?.once('drain', () => this.emit('drain'));\n }\n /* c8 ignore next */\n cb?.();\n return ret;\n }\n [BUFFERCONCAT](c) {\n if (c && !this[ABORTED]) {\n this[BUFFER] =\n this[BUFFER] ? Buffer.concat([this[BUFFER], c]) : c;\n }\n }\n [MAYBEEND]() {\n if (this[ENDED] &&\n !this[EMITTEDEND] &&\n !this[ABORTED] &&\n !this[CONSUMING]) {\n this[EMITTEDEND] = true;\n const entry = this[WRITEENTRY];\n if (entry && entry.blockRemain) {\n // truncated, likely a damaged file\n const have = this[BUFFER] ? this[BUFFER].length : 0;\n this.warn('TAR_BAD_ARCHIVE', `Truncated input (needed ${entry.blockRemain} more bytes, only ${have} available)`, { entry });\n if (this[BUFFER]) {\n entry.write(this[BUFFER]);\n }\n entry.end();\n }\n this[EMIT](DONE);\n }\n }\n [CONSUMECHUNK](chunk) {\n if (this[CONSUMING] && chunk) {\n this[BUFFERCONCAT](chunk);\n }\n else if (!chunk && !this[BUFFER]) {\n this[MAYBEEND]();\n }\n else if (chunk) {\n this[CONSUMING] = true;\n if (this[BUFFER]) {\n this[BUFFERCONCAT](chunk);\n const c = this[BUFFER];\n this[BUFFER] = undefined;\n this[CONSUMECHUNKSUB](c);\n }\n else {\n this[CONSUMECHUNKSUB](chunk);\n }\n while (this[BUFFER] &&\n this[BUFFER]?.length >= 512 &&\n !this[ABORTED] &&\n !this[SAW_EOF]) {\n const c = this[BUFFER];\n this[BUFFER] = undefined;\n this[CONSUMECHUNKSUB](c);\n }\n this[CONSUMING] = false;\n }\n if (!this[BUFFER] || this[ENDED]) {\n this[MAYBEEND]();\n }\n }\n [CONSUMECHUNKSUB](chunk) {\n // we know that we are in CONSUMING mode, so anything written goes into\n // the buffer. Advance the position and put any remainder in the buffer.\n let position = 0;\n const length = chunk.length;\n while (position + 512 <= length &&\n !this[ABORTED] &&\n !this[SAW_EOF]) {\n switch (this[STATE]) {\n case 'begin':\n case 'header':\n this[CONSUMEHEADER](chunk, position);\n position += 512;\n break;\n case 'ignore':\n case 'body':\n position += this[CONSUMEBODY](chunk, position);\n break;\n case 'meta':\n position += this[CONSUMEMETA](chunk, position);\n break;\n /* c8 ignore start */\n default:\n throw new Error('invalid state: ' + this[STATE]);\n /* c8 ignore stop */\n }\n }\n if (position < length) {\n if (this[BUFFER]) {\n this[BUFFER] = Buffer.concat([\n chunk.subarray(position),\n this[BUFFER],\n ]);\n }\n else {\n this[BUFFER] = chunk.subarray(position);\n }\n }\n }\n end(chunk, encoding, cb) {\n if (typeof chunk === 'function') {\n cb = chunk;\n encoding = undefined;\n chunk = undefined;\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = undefined;\n }\n if (typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n if (cb)\n this.once('finish', cb);\n if (!this[ABORTED]) {\n if (this[UNZIP]) {\n /* c8 ignore start */\n if (chunk)\n this[UNZIP].write(chunk);\n /* c8 ignore stop */\n this[UNZIP].end();\n }\n else {\n this[ENDED] = true;\n if (this.brotli === undefined || this.zstd === undefined)\n chunk = chunk || Buffer.alloc(0);\n if (chunk)\n this.write(chunk);\n this[MAYBEEND]();\n }\n }\n return this;\n }\n}\n//# sourceMappingURL=parse.js.map","// warning: extremely hot code path.\n// This has been meticulously optimized for use\n// within npm install on large package trees.\n// Do not edit without careful benchmarking.\nexport const stripTrailingSlashes = (str) => {\n let i = str.length - 1;\n let slashesStart = -1;\n while (i > -1 && str.charAt(i) === '/') {\n slashesStart = i;\n i--;\n }\n return slashesStart === -1 ? str : str.slice(0, slashesStart);\n};\n//# sourceMappingURL=strip-trailing-slashes.js.map","// tar -t\nimport * as fsm from '@isaacs/fs-minipass';\nimport fs from 'node:fs';\nimport { dirname, parse } from 'path';\nimport { makeCommand } from './make-command.js';\nimport { Parser } from './parse.js';\nimport { stripTrailingSlashes } from './strip-trailing-slashes.js';\nconst onReadEntryFunction = (opt) => {\n const onReadEntry = opt.onReadEntry;\n opt.onReadEntry =\n onReadEntry ?\n e => {\n onReadEntry(e);\n e.resume();\n }\n : e => e.resume();\n};\n// construct a filter that limits the file entries listed\n// include child entries if a dir is included\nexport const filesFilter = (opt, files) => {\n const map = new Map(files.map(f => [stripTrailingSlashes(f), true]));\n const filter = opt.filter;\n const mapHas = (file, r = '') => {\n const root = r || parse(file).root || '.';\n let ret;\n if (file === root)\n ret = false;\n else {\n const m = map.get(file);\n if (m !== undefined) {\n ret = m;\n }\n else {\n ret = mapHas(dirname(file), root);\n }\n }\n map.set(file, ret);\n return ret;\n };\n opt.filter =\n filter ?\n (file, entry) => filter(file, entry) && mapHas(stripTrailingSlashes(file))\n : file => mapHas(stripTrailingSlashes(file));\n};\nconst listFileSync = (opt) => {\n const p = new Parser(opt);\n const file = opt.file;\n let fd;\n try {\n fd = fs.openSync(file, 'r');\n const stat = fs.fstatSync(fd);\n const readSize = opt.maxReadSize || 16 * 1024 * 1024;\n if (stat.size < readSize) {\n const buf = Buffer.allocUnsafe(stat.size);\n const read = fs.readSync(fd, buf, 0, stat.size, 0);\n p.end(read === buf.byteLength ? buf : buf.subarray(0, read));\n }\n else {\n let pos = 0;\n const buf = Buffer.allocUnsafe(readSize);\n while (pos < stat.size) {\n const bytesRead = fs.readSync(fd, buf, 0, readSize, pos);\n if (bytesRead === 0)\n break;\n pos += bytesRead;\n p.write(buf.subarray(0, bytesRead));\n }\n p.end();\n }\n }\n finally {\n if (typeof fd === 'number') {\n try {\n fs.closeSync(fd);\n /* c8 ignore next */\n }\n catch (er) { }\n }\n }\n};\nconst listFile = (opt, _files) => {\n const parse = new Parser(opt);\n const readSize = opt.maxReadSize || 16 * 1024 * 1024;\n const file = opt.file;\n const p = new Promise((resolve, reject) => {\n parse.on('error', reject);\n parse.on('end', resolve);\n fs.stat(file, (er, stat) => {\n if (er) {\n reject(er);\n }\n else {\n const stream = new fsm.ReadStream(file, {\n readSize: readSize,\n size: stat.size,\n });\n stream.on('error', reject);\n stream.pipe(parse);\n }\n });\n });\n return p;\n};\nexport const list = makeCommand(listFileSync, listFile, opt => new Parser(opt), opt => new Parser(opt), (opt, files) => {\n if (files?.length)\n filesFilter(opt, files);\n if (!opt.noResume)\n onReadEntryFunction(opt);\n});\n//# sourceMappingURL=list.js.map","export const modeFix = (mode, isDir, portable) => {\n mode &= 0o7777;\n // in portable mode, use the minimum reasonable umask\n // if this system creates files with 0o664 by default\n // (as some linux distros do), then we'll write the\n // archive with 0o644 instead. Also, don't ever create\n // a file that is not readable/writable by the owner.\n if (portable) {\n mode = (mode | 0o600) & ~0o22;\n }\n // if dirs are readable, then they should be listable\n if (isDir) {\n if (mode & 0o400) {\n mode |= 0o100;\n }\n if (mode & 0o40) {\n mode |= 0o10;\n }\n if (mode & 0o4) {\n mode |= 0o1;\n }\n }\n return mode;\n};\n//# sourceMappingURL=mode-fix.js.map","// unix absolute paths are also absolute on win32, so we use this for both\nimport { win32 } from 'node:path';\nconst { isAbsolute, parse } = win32;\n// returns [root, stripped]\n// Note that windows will think that //x/y/z/a has a \"root\" of //x/y, and in\n// those cases, we want to sanitize it to x/y/z/a, not z/a, so we strip /\n// explicitly if it's the first character.\n// drive-specific relative paths on Windows get their root stripped off even\n// though they are not absolute, so `c:../foo` becomes ['c:', '../foo']\nexport const stripAbsolutePath = (path) => {\n let r = '';\n let parsed = parse(path);\n while (isAbsolute(path) || parsed.root) {\n // windows will think that //x/y/z has a \"root\" of //x/y/\n // but strip the //?/C:/ off of //?/C:/path\n const root = path.charAt(0) === '/' && path.slice(0, 4) !== '//?/' ?\n '/'\n : parsed.root;\n path = path.slice(root.length);\n r += root;\n parsed = parse(path);\n }\n return [r, path];\n};\n//# sourceMappingURL=strip-absolute-path.js.map","// When writing files on Windows, translate the characters to their\n// 0xf000 higher-encoded versions.\nconst raw = ['|', '<', '>', '?', ':'];\nconst win = raw.map(char => String.fromCharCode(0xf000 + char.charCodeAt(0)));\nconst toWin = new Map(raw.map((char, i) => [char, win[i]]));\nconst toRaw = new Map(win.map((char, i) => [char, raw[i]]));\nexport const encode = (s) => raw.reduce((s, c) => s.split(c).join(toWin.get(c)), s);\nexport const decode = (s) => win.reduce((s, c) => s.split(c).join(toRaw.get(c)), s);\n//# sourceMappingURL=winchars.js.map","import fs from 'fs';\nimport { Minipass } from 'minipass';\nimport path from 'path';\nimport { Header } from './header.js';\nimport { modeFix } from './mode-fix.js';\nimport { normalizeWindowsPath } from './normalize-windows-path.js';\nimport { dealias, } from './options.js';\nimport { Pax } from './pax.js';\nimport { stripAbsolutePath } from './strip-absolute-path.js';\nimport { stripTrailingSlashes } from './strip-trailing-slashes.js';\nimport { warnMethod, } from './warn-method.js';\nimport * as winchars from './winchars.js';\nconst prefixPath = (path, prefix) => {\n if (!prefix) {\n return normalizeWindowsPath(path);\n }\n path = normalizeWindowsPath(path).replace(/^\\.(\\/|$)/, '');\n return stripTrailingSlashes(prefix) + '/' + path;\n};\nconst maxReadSize = 16 * 1024 * 1024;\nconst PROCESS = Symbol('process');\nconst FILE = Symbol('file');\nconst DIRECTORY = Symbol('directory');\nconst SYMLINK = Symbol('symlink');\nconst HARDLINK = Symbol('hardlink');\nconst HEADER = Symbol('header');\nconst READ = Symbol('read');\nconst LSTAT = Symbol('lstat');\nconst ONLSTAT = Symbol('onlstat');\nconst ONREAD = Symbol('onread');\nconst ONREADLINK = Symbol('onreadlink');\nconst OPENFILE = Symbol('openfile');\nconst ONOPENFILE = Symbol('onopenfile');\nconst CLOSE = Symbol('close');\nconst MODE = Symbol('mode');\nconst AWAITDRAIN = Symbol('awaitDrain');\nconst ONDRAIN = Symbol('ondrain');\nconst PREFIX = Symbol('prefix');\nexport class WriteEntry extends Minipass {\n path;\n portable;\n myuid = (process.getuid && process.getuid()) || 0;\n // until node has builtin pwnam functions, this'll have to do\n myuser = process.env.USER || '';\n maxReadSize;\n linkCache;\n statCache;\n preservePaths;\n cwd;\n strict;\n mtime;\n noPax;\n noMtime;\n prefix;\n fd;\n blockLen = 0;\n blockRemain = 0;\n buf;\n pos = 0;\n remain = 0;\n length = 0;\n offset = 0;\n win32;\n absolute;\n header;\n type;\n linkpath;\n stat;\n onWriteEntry;\n #hadError = false;\n constructor(p, opt_ = {}) {\n const opt = dealias(opt_);\n super();\n this.path = normalizeWindowsPath(p);\n // suppress atime, ctime, uid, gid, uname, gname\n this.portable = !!opt.portable;\n this.maxReadSize = opt.maxReadSize || maxReadSize;\n this.linkCache = opt.linkCache || new Map();\n this.statCache = opt.statCache || new Map();\n this.preservePaths = !!opt.preservePaths;\n this.cwd = normalizeWindowsPath(opt.cwd || process.cwd());\n this.strict = !!opt.strict;\n this.noPax = !!opt.noPax;\n this.noMtime = !!opt.noMtime;\n this.mtime = opt.mtime;\n this.prefix =\n opt.prefix ? normalizeWindowsPath(opt.prefix) : undefined;\n this.onWriteEntry = opt.onWriteEntry;\n if (typeof opt.onwarn === 'function') {\n this.on('warn', opt.onwarn);\n }\n let pathWarn = false;\n if (!this.preservePaths) {\n const [root, stripped] = stripAbsolutePath(this.path);\n if (root && typeof stripped === 'string') {\n this.path = stripped;\n pathWarn = root;\n }\n }\n this.win32 = !!opt.win32 || process.platform === 'win32';\n if (this.win32) {\n // force the \\ to / normalization, since we might not *actually*\n // be on windows, but want \\ to be considered a path separator.\n this.path = winchars.decode(this.path.replace(/\\\\/g, '/'));\n p = p.replace(/\\\\/g, '/');\n }\n this.absolute = normalizeWindowsPath(opt.absolute || path.resolve(this.cwd, p));\n if (this.path === '') {\n this.path = './';\n }\n if (pathWarn) {\n this.warn('TAR_ENTRY_INFO', `stripping ${pathWarn} from absolute path`, {\n entry: this,\n path: pathWarn + this.path,\n });\n }\n const cs = this.statCache.get(this.absolute);\n if (cs) {\n this[ONLSTAT](cs);\n }\n else {\n this[LSTAT]();\n }\n }\n warn(code, message, data = {}) {\n return warnMethod(this, code, message, data);\n }\n emit(ev, ...data) {\n if (ev === 'error') {\n this.#hadError = true;\n }\n return super.emit(ev, ...data);\n }\n [LSTAT]() {\n fs.lstat(this.absolute, (er, stat) => {\n if (er) {\n return this.emit('error', er);\n }\n this[ONLSTAT](stat);\n });\n }\n [ONLSTAT](stat) {\n this.statCache.set(this.absolute, stat);\n this.stat = stat;\n if (!stat.isFile()) {\n stat.size = 0;\n }\n this.type = getType(stat);\n this.emit('stat', stat);\n this[PROCESS]();\n }\n [PROCESS]() {\n switch (this.type) {\n case 'File':\n return this[FILE]();\n case 'Directory':\n return this[DIRECTORY]();\n case 'SymbolicLink':\n return this[SYMLINK]();\n // unsupported types are ignored.\n default:\n return this.end();\n }\n }\n [MODE](mode) {\n return modeFix(mode, this.type === 'Directory', this.portable);\n }\n [PREFIX](path) {\n return prefixPath(path, this.prefix);\n }\n [HEADER]() {\n /* c8 ignore start */\n if (!this.stat) {\n throw new Error('cannot write header before stat');\n }\n /* c8 ignore stop */\n if (this.type === 'Directory' && this.portable) {\n this.noMtime = true;\n }\n this.onWriteEntry?.(this);\n this.header = new Header({\n path: this[PREFIX](this.path),\n // only apply the prefix to hard links.\n linkpath: this.type === 'Link' && this.linkpath !== undefined ?\n this[PREFIX](this.linkpath)\n : this.linkpath,\n // only the permissions and setuid/setgid/sticky bitflags\n // not the higher-order bits that specify file type\n mode: this[MODE](this.stat.mode),\n uid: this.portable ? undefined : this.stat.uid,\n gid: this.portable ? undefined : this.stat.gid,\n size: this.stat.size,\n mtime: this.noMtime ? undefined : this.mtime || this.stat.mtime,\n /* c8 ignore next */\n type: this.type === 'Unsupported' ? undefined : this.type,\n uname: this.portable ? undefined\n : this.stat.uid === this.myuid ? this.myuser\n : '',\n atime: this.portable ? undefined : this.stat.atime,\n ctime: this.portable ? undefined : this.stat.ctime,\n });\n if (this.header.encode() && !this.noPax) {\n super.write(new Pax({\n atime: this.portable ? undefined : this.header.atime,\n ctime: this.portable ? undefined : this.header.ctime,\n gid: this.portable ? undefined : this.header.gid,\n mtime: this.noMtime ? undefined : (this.mtime || this.header.mtime),\n path: this[PREFIX](this.path),\n linkpath: this.type === 'Link' && this.linkpath !== undefined ?\n this[PREFIX](this.linkpath)\n : this.linkpath,\n size: this.header.size,\n uid: this.portable ? undefined : this.header.uid,\n uname: this.portable ? undefined : this.header.uname,\n dev: this.portable ? undefined : this.stat.dev,\n ino: this.portable ? undefined : this.stat.ino,\n nlink: this.portable ? undefined : this.stat.nlink,\n }).encode());\n }\n const block = this.header?.block;\n /* c8 ignore start */\n if (!block) {\n throw new Error('failed to encode header');\n }\n /* c8 ignore stop */\n super.write(block);\n }\n [DIRECTORY]() {\n /* c8 ignore start */\n if (!this.stat) {\n throw new Error('cannot create directory entry without stat');\n }\n /* c8 ignore stop */\n if (this.path.slice(-1) !== '/') {\n this.path += '/';\n }\n this.stat.size = 0;\n this[HEADER]();\n this.end();\n }\n [SYMLINK]() {\n fs.readlink(this.absolute, (er, linkpath) => {\n if (er) {\n return this.emit('error', er);\n }\n this[ONREADLINK](linkpath);\n });\n }\n [ONREADLINK](linkpath) {\n this.linkpath = normalizeWindowsPath(linkpath);\n this[HEADER]();\n this.end();\n }\n [HARDLINK](linkpath) {\n /* c8 ignore start */\n if (!this.stat) {\n throw new Error('cannot create link entry without stat');\n }\n /* c8 ignore stop */\n this.type = 'Link';\n this.linkpath = normalizeWindowsPath(path.relative(this.cwd, linkpath));\n this.stat.size = 0;\n this[HEADER]();\n this.end();\n }\n [FILE]() {\n /* c8 ignore start */\n if (!this.stat) {\n throw new Error('cannot create file entry without stat');\n }\n /* c8 ignore stop */\n if (this.stat.nlink > 1) {\n const linkKey = `${this.stat.dev}:${this.stat.ino}`;\n const linkpath = this.linkCache.get(linkKey);\n if (linkpath?.indexOf(this.cwd) === 0) {\n return this[HARDLINK](linkpath);\n }\n this.linkCache.set(linkKey, this.absolute);\n }\n this[HEADER]();\n if (this.stat.size === 0) {\n return this.end();\n }\n this[OPENFILE]();\n }\n [OPENFILE]() {\n fs.open(this.absolute, 'r', (er, fd) => {\n if (er) {\n return this.emit('error', er);\n }\n this[ONOPENFILE](fd);\n });\n }\n [ONOPENFILE](fd) {\n this.fd = fd;\n if (this.#hadError) {\n return this[CLOSE]();\n }\n /* c8 ignore start */\n if (!this.stat) {\n throw new Error('should stat before calling onopenfile');\n }\n /* c8 ignore start */\n this.blockLen = 512 * Math.ceil(this.stat.size / 512);\n this.blockRemain = this.blockLen;\n const bufLen = Math.min(this.blockLen, this.maxReadSize);\n this.buf = Buffer.allocUnsafe(bufLen);\n this.offset = 0;\n this.pos = 0;\n this.remain = this.stat.size;\n this.length = this.buf.length;\n this[READ]();\n }\n [READ]() {\n const { fd, buf, offset, length, pos } = this;\n if (fd === undefined || buf === undefined) {\n throw new Error('cannot read file without first opening');\n }\n fs.read(fd, buf, offset, length, pos, (er, bytesRead) => {\n if (er) {\n // ignoring the error from close(2) is a bad practice, but at\n // this point we already have an error, don't need another one\n return this[CLOSE](() => this.emit('error', er));\n }\n this[ONREAD](bytesRead);\n });\n }\n /* c8 ignore start */\n [CLOSE](cb = () => { }) {\n /* c8 ignore stop */\n if (this.fd !== undefined)\n fs.close(this.fd, cb);\n }\n [ONREAD](bytesRead) {\n if (bytesRead <= 0 && this.remain > 0) {\n const er = Object.assign(new Error('encountered unexpected EOF'), {\n path: this.absolute,\n syscall: 'read',\n code: 'EOF',\n });\n return this[CLOSE](() => this.emit('error', er));\n }\n if (bytesRead > this.remain) {\n const er = Object.assign(new Error('did not encounter expected EOF'), {\n path: this.absolute,\n syscall: 'read',\n code: 'EOF',\n });\n return this[CLOSE](() => this.emit('error', er));\n }\n /* c8 ignore start */\n if (!this.buf) {\n throw new Error('should have created buffer prior to reading');\n }\n /* c8 ignore stop */\n // null out the rest of the buffer, if we could fit the block padding\n // at the end of this loop, we've incremented bytesRead and this.remain\n // to be incremented up to the blockRemain level, as if we had expected\n // to get a null-padded file, and read it until the end. then we will\n // decrement both remain and blockRemain by bytesRead, and know that we\n // reached the expected EOF, without any null buffer to append.\n if (bytesRead === this.remain) {\n for (let i = bytesRead; i < this.length && bytesRead < this.blockRemain; i++) {\n this.buf[i + this.offset] = 0;\n bytesRead++;\n this.remain++;\n }\n }\n const chunk = this.offset === 0 && bytesRead === this.buf.length ?\n this.buf\n : this.buf.subarray(this.offset, this.offset + bytesRead);\n const flushed = this.write(chunk);\n if (!flushed) {\n this[AWAITDRAIN](() => this[ONDRAIN]());\n }\n else {\n this[ONDRAIN]();\n }\n }\n [AWAITDRAIN](cb) {\n this.once('drain', cb);\n }\n write(chunk, encoding, cb) {\n /* c8 ignore start - just junk to comply with NodeJS.WritableStream */\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = undefined;\n }\n if (typeof chunk === 'string') {\n chunk = Buffer.from(chunk, typeof encoding === 'string' ? encoding : 'utf8');\n }\n /* c8 ignore stop */\n if (this.blockRemain < chunk.length) {\n const er = Object.assign(new Error('writing more data than expected'), {\n path: this.absolute,\n });\n return this.emit('error', er);\n }\n this.remain -= chunk.length;\n this.blockRemain -= chunk.length;\n this.pos += chunk.length;\n this.offset += chunk.length;\n return super.write(chunk, null, cb);\n }\n [ONDRAIN]() {\n if (!this.remain) {\n if (this.blockRemain) {\n super.write(Buffer.alloc(this.blockRemain));\n }\n return this[CLOSE](er => er ? this.emit('error', er) : this.end());\n }\n /* c8 ignore start */\n if (!this.buf) {\n throw new Error('buffer lost somehow in ONDRAIN');\n }\n /* c8 ignore stop */\n if (this.offset >= this.length) {\n // if we only have a smaller bit left to read, alloc a smaller buffer\n // otherwise, keep it the same length it was before.\n this.buf = Buffer.allocUnsafe(Math.min(this.blockRemain, this.buf.length));\n this.offset = 0;\n }\n this.length = this.buf.length - this.offset;\n this[READ]();\n }\n}\nexport class WriteEntrySync extends WriteEntry {\n sync = true;\n [LSTAT]() {\n this[ONLSTAT](fs.lstatSync(this.absolute));\n }\n [SYMLINK]() {\n this[ONREADLINK](fs.readlinkSync(this.absolute));\n }\n [OPENFILE]() {\n this[ONOPENFILE](fs.openSync(this.absolute, 'r'));\n }\n [READ]() {\n let threw = true;\n try {\n const { fd, buf, offset, length, pos } = this;\n /* c8 ignore start */\n if (fd === undefined || buf === undefined) {\n throw new Error('fd and buf must be set in READ method');\n }\n /* c8 ignore stop */\n const bytesRead = fs.readSync(fd, buf, offset, length, pos);\n this[ONREAD](bytesRead);\n threw = false;\n }\n finally {\n // ignoring the error from close(2) is a bad practice, but at\n // this point we already have an error, don't need another one\n if (threw) {\n try {\n this[CLOSE](() => { });\n }\n catch (er) { }\n }\n }\n }\n [AWAITDRAIN](cb) {\n cb();\n }\n /* c8 ignore start */\n [CLOSE](cb = () => { }) {\n /* c8 ignore stop */\n if (this.fd !== undefined)\n fs.closeSync(this.fd);\n cb();\n }\n}\nexport class WriteEntryTar extends Minipass {\n blockLen = 0;\n blockRemain = 0;\n buf = 0;\n pos = 0;\n remain = 0;\n length = 0;\n preservePaths;\n portable;\n strict;\n noPax;\n noMtime;\n readEntry;\n type;\n prefix;\n path;\n mode;\n uid;\n gid;\n uname;\n gname;\n header;\n mtime;\n atime;\n ctime;\n linkpath;\n size;\n onWriteEntry;\n warn(code, message, data = {}) {\n return warnMethod(this, code, message, data);\n }\n constructor(readEntry, opt_ = {}) {\n const opt = dealias(opt_);\n super();\n this.preservePaths = !!opt.preservePaths;\n this.portable = !!opt.portable;\n this.strict = !!opt.strict;\n this.noPax = !!opt.noPax;\n this.noMtime = !!opt.noMtime;\n this.onWriteEntry = opt.onWriteEntry;\n this.readEntry = readEntry;\n const { type } = readEntry;\n /* c8 ignore start */\n if (type === 'Unsupported') {\n throw new Error('writing entry that should be ignored');\n }\n /* c8 ignore stop */\n this.type = type;\n if (this.type === 'Directory' && this.portable) {\n this.noMtime = true;\n }\n this.prefix = opt.prefix;\n this.path = normalizeWindowsPath(readEntry.path);\n this.mode =\n readEntry.mode !== undefined ?\n this[MODE](readEntry.mode)\n : undefined;\n this.uid = this.portable ? undefined : readEntry.uid;\n this.gid = this.portable ? undefined : readEntry.gid;\n this.uname = this.portable ? undefined : readEntry.uname;\n this.gname = this.portable ? undefined : readEntry.gname;\n this.size = readEntry.size;\n this.mtime =\n this.noMtime ? undefined : opt.mtime || readEntry.mtime;\n this.atime = this.portable ? undefined : readEntry.atime;\n this.ctime = this.portable ? undefined : readEntry.ctime;\n this.linkpath =\n readEntry.linkpath !== undefined ?\n normalizeWindowsPath(readEntry.linkpath)\n : undefined;\n if (typeof opt.onwarn === 'function') {\n this.on('warn', opt.onwarn);\n }\n let pathWarn = false;\n if (!this.preservePaths) {\n const [root, stripped] = stripAbsolutePath(this.path);\n if (root && typeof stripped === 'string') {\n this.path = stripped;\n pathWarn = root;\n }\n }\n this.remain = readEntry.size;\n this.blockRemain = readEntry.startBlockSize;\n this.onWriteEntry?.(this);\n this.header = new Header({\n path: this[PREFIX](this.path),\n linkpath: this.type === 'Link' && this.linkpath !== undefined ?\n this[PREFIX](this.linkpath)\n : this.linkpath,\n // only the permissions and setuid/setgid/sticky bitflags\n // not the higher-order bits that specify file type\n mode: this.mode,\n uid: this.portable ? undefined : this.uid,\n gid: this.portable ? undefined : this.gid,\n size: this.size,\n mtime: this.noMtime ? undefined : this.mtime,\n type: this.type,\n uname: this.portable ? undefined : this.uname,\n atime: this.portable ? undefined : this.atime,\n ctime: this.portable ? undefined : this.ctime,\n });\n if (pathWarn) {\n this.warn('TAR_ENTRY_INFO', `stripping ${pathWarn} from absolute path`, {\n entry: this,\n path: pathWarn + this.path,\n });\n }\n if (this.header.encode() && !this.noPax) {\n super.write(new Pax({\n atime: this.portable ? undefined : this.atime,\n ctime: this.portable ? undefined : this.ctime,\n gid: this.portable ? undefined : this.gid,\n mtime: this.noMtime ? undefined : this.mtime,\n path: this[PREFIX](this.path),\n linkpath: this.type === 'Link' && this.linkpath !== undefined ?\n this[PREFIX](this.linkpath)\n : this.linkpath,\n size: this.size,\n uid: this.portable ? undefined : this.uid,\n uname: this.portable ? undefined : this.uname,\n dev: this.portable ? undefined : this.readEntry.dev,\n ino: this.portable ? undefined : this.readEntry.ino,\n nlink: this.portable ? undefined : this.readEntry.nlink,\n }).encode());\n }\n const b = this.header?.block;\n /* c8 ignore start */\n if (!b)\n throw new Error('failed to encode header');\n /* c8 ignore stop */\n super.write(b);\n readEntry.pipe(this);\n }\n [PREFIX](path) {\n return prefixPath(path, this.prefix);\n }\n [MODE](mode) {\n return modeFix(mode, this.type === 'Directory', this.portable);\n }\n write(chunk, encoding, cb) {\n /* c8 ignore start - just junk to comply with NodeJS.WritableStream */\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = undefined;\n }\n if (typeof chunk === 'string') {\n chunk = Buffer.from(chunk, typeof encoding === 'string' ? encoding : 'utf8');\n }\n /* c8 ignore stop */\n const writeLen = chunk.length;\n if (writeLen > this.blockRemain) {\n throw new Error('writing more to entry than is appropriate');\n }\n this.blockRemain -= writeLen;\n return super.write(chunk, cb);\n }\n end(chunk, encoding, cb) {\n if (this.blockRemain) {\n super.write(Buffer.alloc(this.blockRemain));\n }\n /* c8 ignore start - just junk to comply with NodeJS.WritableStream */\n if (typeof chunk === 'function') {\n cb = chunk;\n encoding = undefined;\n chunk = undefined;\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = undefined;\n }\n if (typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding ?? 'utf8');\n }\n if (cb)\n this.once('finish', cb);\n chunk ? super.end(chunk, cb) : super.end(cb);\n /* c8 ignore stop */\n return this;\n }\n}\nconst getType = (stat) => stat.isFile() ? 'File'\n : stat.isDirectory() ? 'Directory'\n : stat.isSymbolicLink() ? 'SymbolicLink'\n : 'Unsupported';\n//# sourceMappingURL=write-entry.js.map","export class Yallist {\n tail;\n head;\n length = 0;\n static create(list = []) {\n return new Yallist(list);\n }\n constructor(list = []) {\n for (const item of list) {\n this.push(item);\n }\n }\n *[Symbol.iterator]() {\n for (let walker = this.head; walker; walker = walker.next) {\n yield walker.value;\n }\n }\n removeNode(node) {\n if (node.list !== this) {\n throw new Error('removing node which does not belong to this list');\n }\n const next = node.next;\n const prev = node.prev;\n if (next) {\n next.prev = prev;\n }\n if (prev) {\n prev.next = next;\n }\n if (node === this.head) {\n this.head = next;\n }\n if (node === this.tail) {\n this.tail = prev;\n }\n this.length--;\n node.next = undefined;\n node.prev = undefined;\n node.list = undefined;\n return next;\n }\n unshiftNode(node) {\n if (node === this.head) {\n return;\n }\n if (node.list) {\n node.list.removeNode(node);\n }\n const head = this.head;\n node.list = this;\n node.next = head;\n if (head) {\n head.prev = node;\n }\n this.head = node;\n if (!this.tail) {\n this.tail = node;\n }\n this.length++;\n }\n pushNode(node) {\n if (node === this.tail) {\n return;\n }\n if (node.list) {\n node.list.removeNode(node);\n }\n const tail = this.tail;\n node.list = this;\n node.prev = tail;\n if (tail) {\n tail.next = node;\n }\n this.tail = node;\n if (!this.head) {\n this.head = node;\n }\n this.length++;\n }\n push(...args) {\n for (let i = 0, l = args.length; i < l; i++) {\n push(this, args[i]);\n }\n return this.length;\n }\n unshift(...args) {\n for (var i = 0, l = args.length; i < l; i++) {\n unshift(this, args[i]);\n }\n return this.length;\n }\n pop() {\n if (!this.tail) {\n return undefined;\n }\n const res = this.tail.value;\n const t = this.tail;\n this.tail = this.tail.prev;\n if (this.tail) {\n this.tail.next = undefined;\n }\n else {\n this.head = undefined;\n }\n t.list = undefined;\n this.length--;\n return res;\n }\n shift() {\n if (!this.head) {\n return undefined;\n }\n const res = this.head.value;\n const h = this.head;\n this.head = this.head.next;\n if (this.head) {\n this.head.prev = undefined;\n }\n else {\n this.tail = undefined;\n }\n h.list = undefined;\n this.length--;\n return res;\n }\n forEach(fn, thisp) {\n thisp = thisp || this;\n for (let walker = this.head, i = 0; !!walker; i++) {\n fn.call(thisp, walker.value, i, this);\n walker = walker.next;\n }\n }\n forEachReverse(fn, thisp) {\n thisp = thisp || this;\n for (let walker = this.tail, i = this.length - 1; !!walker; i--) {\n fn.call(thisp, walker.value, i, this);\n walker = walker.prev;\n }\n }\n get(n) {\n let i = 0;\n let walker = this.head;\n for (; !!walker && i < n; i++) {\n walker = walker.next;\n }\n if (i === n && !!walker) {\n return walker.value;\n }\n }\n getReverse(n) {\n let i = 0;\n let walker = this.tail;\n for (; !!walker && i < n; i++) {\n // abort out of the list early if we hit a cycle\n walker = walker.prev;\n }\n if (i === n && !!walker) {\n return walker.value;\n }\n }\n map(fn, thisp) {\n thisp = thisp || this;\n const res = new Yallist();\n for (let walker = this.head; !!walker;) {\n res.push(fn.call(thisp, walker.value, this));\n walker = walker.next;\n }\n return res;\n }\n mapReverse(fn, thisp) {\n thisp = thisp || this;\n var res = new Yallist();\n for (let walker = this.tail; !!walker;) {\n res.push(fn.call(thisp, walker.value, this));\n walker = walker.prev;\n }\n return res;\n }\n reduce(fn, initial) {\n let acc;\n let walker = this.head;\n if (arguments.length > 1) {\n acc = initial;\n }\n else if (this.head) {\n walker = this.head.next;\n acc = this.head.value;\n }\n else {\n throw new TypeError('Reduce of empty list with no initial value');\n }\n for (var i = 0; !!walker; i++) {\n acc = fn(acc, walker.value, i);\n walker = walker.next;\n }\n return acc;\n }\n reduceReverse(fn, initial) {\n let acc;\n let walker = this.tail;\n if (arguments.length > 1) {\n acc = initial;\n }\n else if (this.tail) {\n walker = this.tail.prev;\n acc = this.tail.value;\n }\n else {\n throw new TypeError('Reduce of empty list with no initial value');\n }\n for (let i = this.length - 1; !!walker; i--) {\n acc = fn(acc, walker.value, i);\n walker = walker.prev;\n }\n return acc;\n }\n toArray() {\n const arr = new Array(this.length);\n for (let i = 0, walker = this.head; !!walker; i++) {\n arr[i] = walker.value;\n walker = walker.next;\n }\n return arr;\n }\n toArrayReverse() {\n const arr = new Array(this.length);\n for (let i = 0, walker = this.tail; !!walker; i++) {\n arr[i] = walker.value;\n walker = walker.prev;\n }\n return arr;\n }\n slice(from = 0, to = this.length) {\n if (to < 0) {\n to += this.length;\n }\n if (from < 0) {\n from += this.length;\n }\n const ret = new Yallist();\n if (to < from || to < 0) {\n return ret;\n }\n if (from < 0) {\n from = 0;\n }\n if (to > this.length) {\n to = this.length;\n }\n let walker = this.head;\n let i = 0;\n for (i = 0; !!walker && i < from; i++) {\n walker = walker.next;\n }\n for (; !!walker && i < to; i++, walker = walker.next) {\n ret.push(walker.value);\n }\n return ret;\n }\n sliceReverse(from = 0, to = this.length) {\n if (to < 0) {\n to += this.length;\n }\n if (from < 0) {\n from += this.length;\n }\n const ret = new Yallist();\n if (to < from || to < 0) {\n return ret;\n }\n if (from < 0) {\n from = 0;\n }\n if (to > this.length) {\n to = this.length;\n }\n let i = this.length;\n let walker = this.tail;\n for (; !!walker && i > to; i--) {\n walker = walker.prev;\n }\n for (; !!walker && i > from; i--, walker = walker.prev) {\n ret.push(walker.value);\n }\n return ret;\n }\n splice(start, deleteCount = 0, ...nodes) {\n if (start > this.length) {\n start = this.length - 1;\n }\n if (start < 0) {\n start = this.length + start;\n }\n let walker = this.head;\n for (let i = 0; !!walker && i < start; i++) {\n walker = walker.next;\n }\n const ret = [];\n for (let i = 0; !!walker && i < deleteCount; i++) {\n ret.push(walker.value);\n walker = this.removeNode(walker);\n }\n if (!walker) {\n walker = this.tail;\n }\n else if (walker !== this.tail) {\n walker = walker.prev;\n }\n for (const v of nodes) {\n walker = insertAfter(this, walker, v);\n }\n return ret;\n }\n reverse() {\n const head = this.head;\n const tail = this.tail;\n for (let walker = head; !!walker; walker = walker.prev) {\n const p = walker.prev;\n walker.prev = walker.next;\n walker.next = p;\n }\n this.head = tail;\n this.tail = head;\n return this;\n }\n}\n// insertAfter undefined means \"make the node the new head of list\"\nfunction insertAfter(self, node, value) {\n const prev = node;\n const next = node ? node.next : self.head;\n const inserted = new Node(value, prev, next, self);\n if (inserted.next === undefined) {\n self.tail = inserted;\n }\n if (inserted.prev === undefined) {\n self.head = inserted;\n }\n self.length++;\n return inserted;\n}\nfunction push(self, item) {\n self.tail = new Node(item, self.tail, undefined, self);\n if (!self.head) {\n self.head = self.tail;\n }\n self.length++;\n}\nfunction unshift(self, item) {\n self.head = new Node(item, undefined, self.head, self);\n if (!self.tail) {\n self.tail = self.head;\n }\n self.length++;\n}\nexport class Node {\n list;\n next;\n prev;\n value;\n constructor(value, prev, next, list) {\n this.list = list;\n this.value = value;\n if (prev) {\n prev.next = this;\n this.prev = prev;\n }\n else {\n this.prev = undefined;\n }\n if (next) {\n next.prev = this;\n this.next = next;\n }\n else {\n this.next = undefined;\n }\n }\n}\n//# sourceMappingURL=index.js.map","// A readable tar stream creator\n// Technically, this is a transform stream that you write paths into,\n// and tar format comes out of.\n// The `add()` method is like `write()` but returns this,\n// and end() return `this` as well, so you can\n// do `new Pack(opt).add('files').add('dir').end().pipe(output)\n// You could also do something like:\n// streamOfPaths().pipe(new Pack()).pipe(new fs.WriteStream('out.tar'))\nimport fs from 'fs';\nimport { WriteEntry, WriteEntrySync, WriteEntryTar, } from './write-entry.js';\nexport class PackJob {\n path;\n absolute;\n entry;\n stat;\n readdir;\n pending = false;\n ignore = false;\n piped = false;\n constructor(path, absolute) {\n this.path = path || './';\n this.absolute = absolute;\n }\n}\nimport { Minipass } from 'minipass';\nimport * as zlib from 'minizlib';\nimport { Yallist } from 'yallist';\nimport { ReadEntry } from './read-entry.js';\nimport { warnMethod, } from './warn-method.js';\nconst EOF = Buffer.alloc(1024);\nconst ONSTAT = Symbol('onStat');\nconst ENDED = Symbol('ended');\nconst QUEUE = Symbol('queue');\nconst CURRENT = Symbol('current');\nconst PROCESS = Symbol('process');\nconst PROCESSING = Symbol('processing');\nconst PROCESSJOB = Symbol('processJob');\nconst JOBS = Symbol('jobs');\nconst JOBDONE = Symbol('jobDone');\nconst ADDFSENTRY = Symbol('addFSEntry');\nconst ADDTARENTRY = Symbol('addTarEntry');\nconst STAT = Symbol('stat');\nconst READDIR = Symbol('readdir');\nconst ONREADDIR = Symbol('onreaddir');\nconst PIPE = Symbol('pipe');\nconst ENTRY = Symbol('entry');\nconst ENTRYOPT = Symbol('entryOpt');\nconst WRITEENTRYCLASS = Symbol('writeEntryClass');\nconst WRITE = Symbol('write');\nconst ONDRAIN = Symbol('ondrain');\nimport path from 'path';\nimport { normalizeWindowsPath } from './normalize-windows-path.js';\nexport class Pack extends Minipass {\n opt;\n cwd;\n maxReadSize;\n preservePaths;\n strict;\n noPax;\n prefix;\n linkCache;\n statCache;\n file;\n portable;\n zip;\n readdirCache;\n noDirRecurse;\n follow;\n noMtime;\n mtime;\n filter;\n jobs;\n [WRITEENTRYCLASS];\n onWriteEntry;\n // Note: we actually DO need a linked list here, because we\n // shift() to update the head of the list where we start, but still\n // while that happens, need to know what the next item in the queue\n // will be. Since we do multiple jobs in parallel, it's not as simple\n // as just an Array.shift(), since that would lose the information about\n // the next job in the list. We could add a .next field on the PackJob\n // class, but then we'd have to be tracking the tail of the queue the\n // whole time, and Yallist just does that for us anyway.\n [QUEUE];\n [JOBS] = 0;\n [PROCESSING] = false;\n [ENDED] = false;\n constructor(opt = {}) {\n //@ts-ignore\n super();\n this.opt = opt;\n this.file = opt.file || '';\n this.cwd = opt.cwd || process.cwd();\n this.maxReadSize = opt.maxReadSize;\n this.preservePaths = !!opt.preservePaths;\n this.strict = !!opt.strict;\n this.noPax = !!opt.noPax;\n this.prefix = normalizeWindowsPath(opt.prefix || '');\n this.linkCache = opt.linkCache || new Map();\n this.statCache = opt.statCache || new Map();\n this.readdirCache = opt.readdirCache || new Map();\n this.onWriteEntry = opt.onWriteEntry;\n this[WRITEENTRYCLASS] = WriteEntry;\n if (typeof opt.onwarn === 'function') {\n this.on('warn', opt.onwarn);\n }\n this.portable = !!opt.portable;\n if (opt.gzip || opt.brotli || opt.zstd) {\n if ((opt.gzip ? 1 : 0) +\n (opt.brotli ? 1 : 0) +\n (opt.zstd ? 1 : 0) >\n 1) {\n throw new TypeError('gzip, brotli, zstd are mutually exclusive');\n }\n if (opt.gzip) {\n if (typeof opt.gzip !== 'object') {\n opt.gzip = {};\n }\n if (this.portable) {\n opt.gzip.portable = true;\n }\n this.zip = new zlib.Gzip(opt.gzip);\n }\n if (opt.brotli) {\n if (typeof opt.brotli !== 'object') {\n opt.brotli = {};\n }\n this.zip = new zlib.BrotliCompress(opt.brotli);\n }\n if (opt.zstd) {\n if (typeof opt.zstd !== 'object') {\n opt.zstd = {};\n }\n this.zip = new zlib.ZstdCompress(opt.zstd);\n }\n /* c8 ignore next */\n if (!this.zip)\n throw new Error('impossible');\n const zip = this.zip;\n zip.on('data', chunk => super.write(chunk));\n zip.on('end', () => super.end());\n zip.on('drain', () => this[ONDRAIN]());\n this.on('resume', () => zip.resume());\n }\n else {\n this.on('drain', this[ONDRAIN]);\n }\n this.noDirRecurse = !!opt.noDirRecurse;\n this.follow = !!opt.follow;\n this.noMtime = !!opt.noMtime;\n if (opt.mtime)\n this.mtime = opt.mtime;\n this.filter =\n typeof opt.filter === 'function' ? opt.filter : () => true;\n this[QUEUE] = new Yallist();\n this[JOBS] = 0;\n this.jobs = Number(opt.jobs) || 4;\n this[PROCESSING] = false;\n this[ENDED] = false;\n }\n [WRITE](chunk) {\n return super.write(chunk);\n }\n add(path) {\n this.write(path);\n return this;\n }\n end(path, encoding, cb) {\n /* c8 ignore start */\n if (typeof path === 'function') {\n cb = path;\n path = undefined;\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = undefined;\n }\n /* c8 ignore stop */\n if (path) {\n this.add(path);\n }\n this[ENDED] = true;\n this[PROCESS]();\n /* c8 ignore next */\n if (cb)\n cb();\n return this;\n }\n write(path) {\n if (this[ENDED]) {\n throw new Error('write after end');\n }\n if (path instanceof ReadEntry) {\n this[ADDTARENTRY](path);\n }\n else {\n this[ADDFSENTRY](path);\n }\n return this.flowing;\n }\n [ADDTARENTRY](p) {\n const absolute = normalizeWindowsPath(path.resolve(this.cwd, p.path));\n // in this case, we don't have to wait for the stat\n if (!this.filter(p.path, p)) {\n p.resume();\n }\n else {\n const job = new PackJob(p.path, absolute);\n job.entry = new WriteEntryTar(p, this[ENTRYOPT](job));\n job.entry.on('end', () => this[JOBDONE](job));\n this[JOBS] += 1;\n this[QUEUE].push(job);\n }\n this[PROCESS]();\n }\n [ADDFSENTRY](p) {\n const absolute = normalizeWindowsPath(path.resolve(this.cwd, p));\n this[QUEUE].push(new PackJob(p, absolute));\n this[PROCESS]();\n }\n [STAT](job) {\n job.pending = true;\n this[JOBS] += 1;\n const stat = this.follow ? 'stat' : 'lstat';\n fs[stat](job.absolute, (er, stat) => {\n job.pending = false;\n this[JOBS] -= 1;\n if (er) {\n this.emit('error', er);\n }\n else {\n this[ONSTAT](job, stat);\n }\n });\n }\n [ONSTAT](job, stat) {\n this.statCache.set(job.absolute, stat);\n job.stat = stat;\n // now we have the stat, we can filter it.\n if (!this.filter(job.path, stat)) {\n job.ignore = true;\n }\n this[PROCESS]();\n }\n [READDIR](job) {\n job.pending = true;\n this[JOBS] += 1;\n fs.readdir(job.absolute, (er, entries) => {\n job.pending = false;\n this[JOBS] -= 1;\n if (er) {\n return this.emit('error', er);\n }\n this[ONREADDIR](job, entries);\n });\n }\n [ONREADDIR](job, entries) {\n this.readdirCache.set(job.absolute, entries);\n job.readdir = entries;\n this[PROCESS]();\n }\n [PROCESS]() {\n if (this[PROCESSING]) {\n return;\n }\n this[PROCESSING] = true;\n for (let w = this[QUEUE].head; !!w && this[JOBS] < this.jobs; w = w.next) {\n this[PROCESSJOB](w.value);\n if (w.value.ignore) {\n const p = w.next;\n this[QUEUE].removeNode(w);\n w.next = p;\n }\n }\n this[PROCESSING] = false;\n if (this[ENDED] && !this[QUEUE].length && this[JOBS] === 0) {\n if (this.zip) {\n this.zip.end(EOF);\n }\n else {\n super.write(EOF);\n super.end();\n }\n }\n }\n get [CURRENT]() {\n return this[QUEUE] && this[QUEUE].head && this[QUEUE].head.value;\n }\n [JOBDONE](_job) {\n this[QUEUE].shift();\n this[JOBS] -= 1;\n this[PROCESS]();\n }\n [PROCESSJOB](job) {\n if (job.pending) {\n return;\n }\n if (job.entry) {\n if (job === this[CURRENT] && !job.piped) {\n this[PIPE](job);\n }\n return;\n }\n if (!job.stat) {\n const sc = this.statCache.get(job.absolute);\n if (sc) {\n this[ONSTAT](job, sc);\n }\n else {\n this[STAT](job);\n }\n }\n if (!job.stat) {\n return;\n }\n // filtered out!\n if (job.ignore) {\n return;\n }\n if (!this.noDirRecurse &&\n job.stat.isDirectory() &&\n !job.readdir) {\n const rc = this.readdirCache.get(job.absolute);\n if (rc) {\n this[ONREADDIR](job, rc);\n }\n else {\n this[READDIR](job);\n }\n if (!job.readdir) {\n return;\n }\n }\n // we know it doesn't have an entry, because that got checked above\n job.entry = this[ENTRY](job);\n if (!job.entry) {\n job.ignore = true;\n return;\n }\n if (job === this[CURRENT] && !job.piped) {\n this[PIPE](job);\n }\n }\n [ENTRYOPT](job) {\n return {\n onwarn: (code, msg, data) => this.warn(code, msg, data),\n noPax: this.noPax,\n cwd: this.cwd,\n absolute: job.absolute,\n preservePaths: this.preservePaths,\n maxReadSize: this.maxReadSize,\n strict: this.strict,\n portable: this.portable,\n linkCache: this.linkCache,\n statCache: this.statCache,\n noMtime: this.noMtime,\n mtime: this.mtime,\n prefix: this.prefix,\n onWriteEntry: this.onWriteEntry,\n };\n }\n [ENTRY](job) {\n this[JOBS] += 1;\n try {\n const e = new this[WRITEENTRYCLASS](job.path, this[ENTRYOPT](job));\n return e\n .on('end', () => this[JOBDONE](job))\n .on('error', er => this.emit('error', er));\n }\n catch (er) {\n this.emit('error', er);\n }\n }\n [ONDRAIN]() {\n if (this[CURRENT] && this[CURRENT].entry) {\n this[CURRENT].entry.resume();\n }\n }\n // like .pipe() but using super, because our write() is special\n [PIPE](job) {\n job.piped = true;\n if (job.readdir) {\n job.readdir.forEach(entry => {\n const p = job.path;\n const base = p === './' ? '' : p.replace(/\\/*$/, '/');\n this[ADDFSENTRY](base + entry);\n });\n }\n const source = job.entry;\n const zip = this.zip;\n /* c8 ignore start */\n if (!source)\n throw new Error('cannot pipe without source');\n /* c8 ignore stop */\n if (zip) {\n source.on('data', chunk => {\n if (!zip.write(chunk)) {\n source.pause();\n }\n });\n }\n else {\n source.on('data', chunk => {\n if (!super.write(chunk)) {\n source.pause();\n }\n });\n }\n }\n pause() {\n if (this.zip) {\n this.zip.pause();\n }\n return super.pause();\n }\n warn(code, message, data = {}) {\n warnMethod(this, code, message, data);\n }\n}\nexport class PackSync extends Pack {\n sync = true;\n constructor(opt) {\n super(opt);\n this[WRITEENTRYCLASS] = WriteEntrySync;\n }\n // pause/resume are no-ops in sync streams.\n pause() { }\n resume() { }\n [STAT](job) {\n const stat = this.follow ? 'statSync' : 'lstatSync';\n this[ONSTAT](job, fs[stat](job.absolute));\n }\n [READDIR](job) {\n this[ONREADDIR](job, fs.readdirSync(job.absolute));\n }\n // gotta get it all in this tick\n [PIPE](job) {\n const source = job.entry;\n const zip = this.zip;\n if (job.readdir) {\n job.readdir.forEach(entry => {\n const p = job.path;\n const base = p === './' ? '' : p.replace(/\\/*$/, '/');\n this[ADDFSENTRY](base + entry);\n });\n }\n /* c8 ignore start */\n if (!source)\n throw new Error('Cannot pipe without source');\n /* c8 ignore stop */\n if (zip) {\n source.on('data', chunk => {\n zip.write(chunk);\n });\n }\n else {\n source.on('data', chunk => {\n super[WRITE](chunk);\n });\n }\n }\n}\n//# sourceMappingURL=pack.js.map","import { WriteStream, WriteStreamSync } from '@isaacs/fs-minipass';\nimport path from 'node:path';\nimport { list } from './list.js';\nimport { makeCommand } from './make-command.js';\nimport { Pack, PackSync } from './pack.js';\nconst createFileSync = (opt, files) => {\n const p = new PackSync(opt);\n const stream = new WriteStreamSync(opt.file, {\n mode: opt.mode || 0o666,\n });\n p.pipe(stream);\n addFilesSync(p, files);\n};\nconst createFile = (opt, files) => {\n const p = new Pack(opt);\n const stream = new WriteStream(opt.file, {\n mode: opt.mode || 0o666,\n });\n p.pipe(stream);\n const promise = new Promise((res, rej) => {\n stream.on('error', rej);\n stream.on('close', res);\n p.on('error', rej);\n });\n addFilesAsync(p, files);\n return promise;\n};\nconst addFilesSync = (p, files) => {\n files.forEach(file => {\n if (file.charAt(0) === '@') {\n list({\n file: path.resolve(p.cwd, file.slice(1)),\n sync: true,\n noResume: true,\n onReadEntry: entry => p.add(entry),\n });\n }\n else {\n p.add(file);\n }\n });\n p.end();\n};\nconst addFilesAsync = async (p, files) => {\n for (let i = 0; i < files.length; i++) {\n const file = String(files[i]);\n if (file.charAt(0) === '@') {\n await list({\n file: path.resolve(String(p.cwd), file.slice(1)),\n noResume: true,\n onReadEntry: entry => {\n p.add(entry);\n },\n });\n }\n else {\n p.add(file);\n }\n }\n p.end();\n};\nconst createSync = (opt, files) => {\n const p = new PackSync(opt);\n addFilesSync(p, files);\n return p;\n};\nconst createAsync = (opt, files) => {\n const p = new Pack(opt);\n addFilesAsync(p, files);\n return p;\n};\nexport const create = makeCommand(createFileSync, createFile, createSync, createAsync, (_opt, files) => {\n if (!files?.length) {\n throw new TypeError('no paths specified to add to archive');\n }\n});\n//# sourceMappingURL=create.js.map","// Get the appropriate flag to use for creating files\n// We use fmap on Windows platforms for files less than\n// 512kb. This is a fairly low limit, but avoids making\n// things slower in some cases. Since most of what this\n// library is used for is extracting tarballs of many\n// relatively small files in npm packages and the like,\n// it can be a big boost on Windows platforms.\nimport fs from 'fs';\nconst platform = process.env.__FAKE_PLATFORM__ || process.platform;\nconst isWindows = platform === 'win32';\n/* c8 ignore start */\nconst { O_CREAT, O_TRUNC, O_WRONLY } = fs.constants;\nconst UV_FS_O_FILEMAP = Number(process.env.__FAKE_FS_O_FILENAME__) ||\n fs.constants.UV_FS_O_FILEMAP ||\n 0;\n/* c8 ignore stop */\nconst fMapEnabled = isWindows && !!UV_FS_O_FILEMAP;\nconst fMapLimit = 512 * 1024;\nconst fMapFlag = UV_FS_O_FILEMAP | O_TRUNC | O_CREAT | O_WRONLY;\nexport const getWriteFlag = !fMapEnabled ?\n () => 'w'\n : (size) => (size < fMapLimit ? fMapFlag : 'w');\n//# sourceMappingURL=get-write-flag.js.map","import fs from 'node:fs';\nimport path from 'node:path';\nconst lchownSync = (path, uid, gid) => {\n try {\n return fs.lchownSync(path, uid, gid);\n }\n catch (er) {\n if (er?.code !== 'ENOENT')\n throw er;\n }\n};\nconst chown = (cpath, uid, gid, cb) => {\n fs.lchown(cpath, uid, gid, er => {\n // Skip ENOENT error\n cb(er && er?.code !== 'ENOENT' ? er : null);\n });\n};\nconst chownrKid = (p, child, uid, gid, cb) => {\n if (child.isDirectory()) {\n chownr(path.resolve(p, child.name), uid, gid, (er) => {\n if (er)\n return cb(er);\n const cpath = path.resolve(p, child.name);\n chown(cpath, uid, gid, cb);\n });\n }\n else {\n const cpath = path.resolve(p, child.name);\n chown(cpath, uid, gid, cb);\n }\n};\nexport const chownr = (p, uid, gid, cb) => {\n fs.readdir(p, { withFileTypes: true }, (er, children) => {\n // any error other than ENOTDIR or ENOTSUP means it's not readable,\n // or doesn't exist. give up.\n if (er) {\n if (er.code === 'ENOENT')\n return cb();\n else if (er.code !== 'ENOTDIR' && er.code !== 'ENOTSUP')\n return cb(er);\n }\n if (er || !children.length)\n return chown(p, uid, gid, cb);\n let len = children.length;\n let errState = null;\n const then = (er) => {\n /* c8 ignore start */\n if (errState)\n return;\n /* c8 ignore stop */\n if (er)\n return cb((errState = er));\n if (--len === 0)\n return chown(p, uid, gid, cb);\n };\n for (const child of children) {\n chownrKid(p, child, uid, gid, then);\n }\n });\n};\nconst chownrKidSync = (p, child, uid, gid) => {\n if (child.isDirectory())\n chownrSync(path.resolve(p, child.name), uid, gid);\n lchownSync(path.resolve(p, child.name), uid, gid);\n};\nexport const chownrSync = (p, uid, gid) => {\n let children;\n try {\n children = fs.readdirSync(p, { withFileTypes: true });\n }\n catch (er) {\n const e = er;\n if (e?.code === 'ENOENT')\n return;\n else if (e?.code === 'ENOTDIR' || e?.code === 'ENOTSUP')\n return lchownSync(p, uid, gid);\n else\n throw e;\n }\n for (const child of children) {\n chownrKidSync(p, child, uid, gid);\n }\n return lchownSync(p, uid, gid);\n};\n//# sourceMappingURL=index.js.map","export class CwdError extends Error {\n path;\n code;\n syscall = 'chdir';\n constructor(path, code) {\n super(`${code}: Cannot cd into '${path}'`);\n this.path = path;\n this.code = code;\n }\n get name() {\n return 'CwdError';\n }\n}\n//# sourceMappingURL=cwd-error.js.map","export class SymlinkError extends Error {\n path;\n symlink;\n syscall = 'symlink';\n code = 'TAR_SYMLINK_ERROR';\n constructor(symlink, path) {\n super('TAR_SYMLINK_ERROR: Cannot extract through symbolic link');\n this.symlink = symlink;\n this.path = path;\n }\n get name() {\n return 'SymlinkError';\n }\n}\n//# sourceMappingURL=symlink-error.js.map","import { chownr, chownrSync } from 'chownr';\nimport fs from 'node:fs';\nimport fsp from 'node:fs/promises';\nimport path from 'node:path';\nimport { CwdError } from './cwd-error.js';\nimport { normalizeWindowsPath } from './normalize-windows-path.js';\nimport { SymlinkError } from './symlink-error.js';\nconst checkCwd = (dir, cb) => {\n fs.stat(dir, (er, st) => {\n if (er || !st.isDirectory()) {\n er = new CwdError(dir, er?.code || 'ENOTDIR');\n }\n cb(er);\n });\n};\n/**\n * Wrapper around fs/promises.mkdir for tar's needs.\n *\n * The main purpose is to avoid creating directories if we know that\n * they already exist (and track which ones exist for this purpose),\n * and prevent entries from being extracted into symlinked folders,\n * if `preservePaths` is not set.\n */\nexport const mkdir = (dir, opt, cb) => {\n dir = normalizeWindowsPath(dir);\n // if there's any overlap between mask and mode,\n // then we'll need an explicit chmod\n /* c8 ignore next */\n const umask = opt.umask ?? 0o22;\n const mode = opt.mode | 0o0700;\n const needChmod = (mode & umask) !== 0;\n const uid = opt.uid;\n const gid = opt.gid;\n const doChown = typeof uid === 'number' &&\n typeof gid === 'number' &&\n (uid !== opt.processUid || gid !== opt.processGid);\n const preserve = opt.preserve;\n const unlink = opt.unlink;\n const cwd = normalizeWindowsPath(opt.cwd);\n const done = (er, created) => {\n if (er) {\n cb(er);\n }\n else {\n if (created && doChown) {\n chownr(created, uid, gid, er => done(er));\n }\n else if (needChmod) {\n fs.chmod(dir, mode, cb);\n }\n else {\n cb();\n }\n }\n };\n if (dir === cwd) {\n return checkCwd(dir, done);\n }\n if (preserve) {\n return fsp.mkdir(dir, { mode, recursive: true }).then(made => done(null, made ?? undefined), // oh, ts\n done);\n }\n const sub = normalizeWindowsPath(path.relative(cwd, dir));\n const parts = sub.split('/');\n mkdir_(cwd, parts, mode, unlink, cwd, undefined, done);\n};\nconst mkdir_ = (base, parts, mode, unlink, cwd, created, cb) => {\n if (!parts.length) {\n return cb(null, created);\n }\n const p = parts.shift();\n const part = normalizeWindowsPath(path.resolve(base + '/' + p));\n fs.mkdir(part, mode, onmkdir(part, parts, mode, unlink, cwd, created, cb));\n};\nconst onmkdir = (part, parts, mode, unlink, cwd, created, cb) => (er) => {\n if (er) {\n fs.lstat(part, (statEr, st) => {\n if (statEr) {\n statEr.path =\n statEr.path && normalizeWindowsPath(statEr.path);\n cb(statEr);\n }\n else if (st.isDirectory()) {\n mkdir_(part, parts, mode, unlink, cwd, created, cb);\n }\n else if (unlink) {\n fs.unlink(part, er => {\n if (er) {\n return cb(er);\n }\n fs.mkdir(part, mode, onmkdir(part, parts, mode, unlink, cwd, created, cb));\n });\n }\n else if (st.isSymbolicLink()) {\n return cb(new SymlinkError(part, part + '/' + parts.join('/')));\n }\n else {\n cb(er);\n }\n });\n }\n else {\n created = created || part;\n mkdir_(part, parts, mode, unlink, cwd, created, cb);\n }\n};\nconst checkCwdSync = (dir) => {\n let ok = false;\n let code = undefined;\n try {\n ok = fs.statSync(dir).isDirectory();\n }\n catch (er) {\n code = er?.code;\n }\n finally {\n if (!ok) {\n throw new CwdError(dir, code ?? 'ENOTDIR');\n }\n }\n};\nexport const mkdirSync = (dir, opt) => {\n dir = normalizeWindowsPath(dir);\n // if there's any overlap between mask and mode,\n // then we'll need an explicit chmod\n /* c8 ignore next */\n const umask = opt.umask ?? 0o22;\n const mode = opt.mode | 0o700;\n const needChmod = (mode & umask) !== 0;\n const uid = opt.uid;\n const gid = opt.gid;\n const doChown = typeof uid === 'number' &&\n typeof gid === 'number' &&\n (uid !== opt.processUid || gid !== opt.processGid);\n const preserve = opt.preserve;\n const unlink = opt.unlink;\n const cwd = normalizeWindowsPath(opt.cwd);\n const done = (created) => {\n if (created && doChown) {\n chownrSync(created, uid, gid);\n }\n if (needChmod) {\n fs.chmodSync(dir, mode);\n }\n };\n if (dir === cwd) {\n checkCwdSync(cwd);\n return done();\n }\n if (preserve) {\n return done(fs.mkdirSync(dir, { mode, recursive: true }) ?? undefined);\n }\n const sub = normalizeWindowsPath(path.relative(cwd, dir));\n const parts = sub.split('/');\n let created = undefined;\n for (let p = parts.shift(), part = cwd; p && (part += '/' + p); p = parts.shift()) {\n part = normalizeWindowsPath(path.resolve(part));\n try {\n fs.mkdirSync(part, mode);\n created = created || part;\n }\n catch (er) {\n const st = fs.lstatSync(part);\n if (st.isDirectory()) {\n continue;\n }\n else if (unlink) {\n fs.unlinkSync(part);\n fs.mkdirSync(part, mode);\n created = created || part;\n continue;\n }\n else if (st.isSymbolicLink()) {\n return new SymlinkError(part, part + '/' + parts.join('/'));\n }\n }\n }\n return done(created);\n};\n//# sourceMappingURL=mkdir.js.map","// warning: extremely hot code path.\n// This has been meticulously optimized for use\n// within npm install on large package trees.\n// Do not edit without careful benchmarking.\nconst normalizeCache = Object.create(null);\n// Limit the size of this. Very low-sophistication LRU cache\nconst MAX = 10000;\nconst cache = new Set();\nexport const normalizeUnicode = (s) => {\n if (!cache.has(s)) {\n normalizeCache[s] = s.normalize('NFD');\n }\n else {\n cache.delete(s);\n }\n cache.add(s);\n const ret = normalizeCache[s];\n let i = cache.size - MAX;\n // only prune when we're 10% over the max\n if (i > MAX / 10) {\n for (const s of cache) {\n cache.delete(s);\n delete normalizeCache[s];\n if (--i <= 0)\n break;\n }\n }\n return ret;\n};\n//# sourceMappingURL=normalize-unicode.js.map","// A path exclusive reservation system\n// reserve([list, of, paths], fn)\n// When the fn is first in line for all its paths, it\n// is called with a cb that clears the reservation.\n//\n// Used by async unpack to avoid clobbering paths in use,\n// while still allowing maximal safe parallelization.\nimport { join } from 'node:path';\nimport { normalizeUnicode } from './normalize-unicode.js';\nimport { stripTrailingSlashes } from './strip-trailing-slashes.js';\nconst platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform;\nconst isWindows = platform === 'win32';\n// return a set of parent dirs for a given path\n// '/a/b/c/d' -> ['/', '/a', '/a/b', '/a/b/c', '/a/b/c/d']\nconst getDirs = (path) => {\n const dirs = path\n .split('/')\n .slice(0, -1)\n .reduce((set, path) => {\n const s = set[set.length - 1];\n if (s !== undefined) {\n path = join(s, path);\n }\n set.push(path || '/');\n return set;\n }, []);\n return dirs;\n};\nexport class PathReservations {\n // path => [function or Set]\n // A Set object means a directory reservation\n // A fn is a direct reservation on that path\n #queues = new Map();\n // fn => {paths:[path,...], dirs:[path, ...]}\n #reservations = new Map();\n // functions currently running\n #running = new Set();\n reserve(paths, fn) {\n paths =\n isWindows ?\n ['win32 parallelization disabled']\n : paths.map(p => {\n // don't need normPath, because we skip this entirely for windows\n return stripTrailingSlashes(join(normalizeUnicode(p))).toLowerCase();\n });\n const dirs = new Set(paths.map(path => getDirs(path)).reduce((a, b) => a.concat(b)));\n this.#reservations.set(fn, { dirs, paths });\n for (const p of paths) {\n const q = this.#queues.get(p);\n if (!q) {\n this.#queues.set(p, [fn]);\n }\n else {\n q.push(fn);\n }\n }\n for (const dir of dirs) {\n const q = this.#queues.get(dir);\n if (!q) {\n this.#queues.set(dir, [new Set([fn])]);\n }\n else {\n const l = q[q.length - 1];\n if (l instanceof Set) {\n l.add(fn);\n }\n else {\n q.push(new Set([fn]));\n }\n }\n }\n return this.#run(fn);\n }\n // return the queues for each path the function cares about\n // fn => {paths, dirs}\n #getQueues(fn) {\n const res = this.#reservations.get(fn);\n /* c8 ignore start */\n if (!res) {\n throw new Error('function does not have any path reservations');\n }\n /* c8 ignore stop */\n return {\n paths: res.paths.map((path) => this.#queues.get(path)),\n dirs: [...res.dirs].map(path => this.#queues.get(path)),\n };\n }\n // check if fn is first in line for all its paths, and is\n // included in the first set for all its dir queues\n check(fn) {\n const { paths, dirs } = this.#getQueues(fn);\n return (paths.every(q => q && q[0] === fn) &&\n dirs.every(q => q && q[0] instanceof Set && q[0].has(fn)));\n }\n // run the function if it's first in line and not already running\n #run(fn) {\n if (this.#running.has(fn) || !this.check(fn)) {\n return false;\n }\n this.#running.add(fn);\n fn(() => this.#clear(fn));\n return true;\n }\n #clear(fn) {\n if (!this.#running.has(fn)) {\n return false;\n }\n const res = this.#reservations.get(fn);\n /* c8 ignore start */\n if (!res) {\n throw new Error('invalid reservation');\n }\n /* c8 ignore stop */\n const { paths, dirs } = res;\n const next = new Set();\n for (const path of paths) {\n const q = this.#queues.get(path);\n /* c8 ignore start */\n if (!q || q?.[0] !== fn) {\n continue;\n }\n /* c8 ignore stop */\n const q0 = q[1];\n if (!q0) {\n this.#queues.delete(path);\n continue;\n }\n q.shift();\n if (typeof q0 === 'function') {\n next.add(q0);\n }\n else {\n for (const f of q0) {\n next.add(f);\n }\n }\n }\n for (const dir of dirs) {\n const q = this.#queues.get(dir);\n const q0 = q?.[0];\n /* c8 ignore next - type safety only */\n if (!q || !(q0 instanceof Set))\n continue;\n if (q0.size === 1 && q.length === 1) {\n this.#queues.delete(dir);\n continue;\n }\n else if (q0.size === 1) {\n q.shift();\n // next one must be a function,\n // or else the Set would've been reused\n const n = q[0];\n if (typeof n === 'function') {\n next.add(n);\n }\n }\n else {\n q0.delete(fn);\n }\n }\n this.#running.delete(fn);\n next.forEach(fn => this.#run(fn));\n return true;\n }\n}\n//# sourceMappingURL=path-reservations.js.map","// the PEND/UNPEND stuff tracks whether we're ready to emit end/close yet.\n// but the path reservations are required to avoid race conditions where\n// parallelized unpack ops may mess with one another, due to dependencies\n// (like a Link depending on its target) or destructive operations (like\n// clobbering an fs object to create one of a different type.)\nimport * as fsm from '@isaacs/fs-minipass';\nimport assert from 'node:assert';\nimport { randomBytes } from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { getWriteFlag } from './get-write-flag.js';\nimport { mkdir, mkdirSync } from './mkdir.js';\nimport { normalizeWindowsPath } from './normalize-windows-path.js';\nimport { Parser } from './parse.js';\nimport { stripAbsolutePath } from './strip-absolute-path.js';\nimport * as wc from './winchars.js';\nimport { PathReservations } from './path-reservations.js';\nconst ONENTRY = Symbol('onEntry');\nconst CHECKFS = Symbol('checkFs');\nconst CHECKFS2 = Symbol('checkFs2');\nconst ISREUSABLE = Symbol('isReusable');\nconst MAKEFS = Symbol('makeFs');\nconst FILE = Symbol('file');\nconst DIRECTORY = Symbol('directory');\nconst LINK = Symbol('link');\nconst SYMLINK = Symbol('symlink');\nconst HARDLINK = Symbol('hardlink');\nconst UNSUPPORTED = Symbol('unsupported');\nconst CHECKPATH = Symbol('checkPath');\nconst MKDIR = Symbol('mkdir');\nconst ONERROR = Symbol('onError');\nconst PENDING = Symbol('pending');\nconst PEND = Symbol('pend');\nconst UNPEND = Symbol('unpend');\nconst ENDED = Symbol('ended');\nconst MAYBECLOSE = Symbol('maybeClose');\nconst SKIP = Symbol('skip');\nconst DOCHOWN = Symbol('doChown');\nconst UID = Symbol('uid');\nconst GID = Symbol('gid');\nconst CHECKED_CWD = Symbol('checkedCwd');\nconst platform = process.env.TESTING_TAR_FAKE_PLATFORM || process.platform;\nconst isWindows = platform === 'win32';\nconst DEFAULT_MAX_DEPTH = 1024;\n// Unlinks on Windows are not atomic.\n//\n// This means that if you have a file entry, followed by another\n// file entry with an identical name, and you cannot re-use the file\n// (because it's a hardlink, or because unlink:true is set, or it's\n// Windows, which does not have useful nlink values), then the unlink\n// will be committed to the disk AFTER the new file has been written\n// over the old one, deleting the new file.\n//\n// To work around this, on Windows systems, we rename the file and then\n// delete the renamed file. It's a sloppy kludge, but frankly, I do not\n// know of a better way to do this, given windows' non-atomic unlink\n// semantics.\n//\n// See: https://github.com/npm/node-tar/issues/183\n/* c8 ignore start */\nconst unlinkFile = (path, cb) => {\n if (!isWindows) {\n return fs.unlink(path, cb);\n }\n const name = path + '.DELETE.' + randomBytes(16).toString('hex');\n fs.rename(path, name, er => {\n if (er) {\n return cb(er);\n }\n fs.unlink(name, cb);\n });\n};\n/* c8 ignore stop */\n/* c8 ignore start */\nconst unlinkFileSync = (path) => {\n if (!isWindows) {\n return fs.unlinkSync(path);\n }\n const name = path + '.DELETE.' + randomBytes(16).toString('hex');\n fs.renameSync(path, name);\n fs.unlinkSync(name);\n};\n/* c8 ignore stop */\n// this.gid, entry.gid, this.processUid\nconst uint32 = (a, b, c) => a !== undefined && a === a >>> 0 ? a\n : b !== undefined && b === b >>> 0 ? b\n : c;\nexport class Unpack extends Parser {\n [ENDED] = false;\n [CHECKED_CWD] = false;\n [PENDING] = 0;\n reservations = new PathReservations();\n transform;\n writable = true;\n readable = false;\n uid;\n gid;\n setOwner;\n preserveOwner;\n processGid;\n processUid;\n maxDepth;\n forceChown;\n win32;\n newer;\n keep;\n noMtime;\n preservePaths;\n unlink;\n cwd;\n strip;\n processUmask;\n umask;\n dmode;\n fmode;\n chmod;\n constructor(opt = {}) {\n opt.ondone = () => {\n this[ENDED] = true;\n this[MAYBECLOSE]();\n };\n super(opt);\n this.transform = opt.transform;\n this.chmod = !!opt.chmod;\n if (typeof opt.uid === 'number' || typeof opt.gid === 'number') {\n // need both or neither\n if (typeof opt.uid !== 'number' ||\n typeof opt.gid !== 'number') {\n throw new TypeError('cannot set owner without number uid and gid');\n }\n if (opt.preserveOwner) {\n throw new TypeError('cannot preserve owner in archive and also set owner explicitly');\n }\n this.uid = opt.uid;\n this.gid = opt.gid;\n this.setOwner = true;\n }\n else {\n this.uid = undefined;\n this.gid = undefined;\n this.setOwner = false;\n }\n // default true for root\n if (opt.preserveOwner === undefined &&\n typeof opt.uid !== 'number') {\n this.preserveOwner = !!(process.getuid && process.getuid() === 0);\n }\n else {\n this.preserveOwner = !!opt.preserveOwner;\n }\n this.processUid =\n (this.preserveOwner || this.setOwner) && process.getuid ?\n process.getuid()\n : undefined;\n this.processGid =\n (this.preserveOwner || this.setOwner) && process.getgid ?\n process.getgid()\n : undefined;\n // prevent excessively deep nesting of subfolders\n // set to `Infinity` to remove this restriction\n this.maxDepth =\n typeof opt.maxDepth === 'number' ?\n opt.maxDepth\n : DEFAULT_MAX_DEPTH;\n // mostly just for testing, but useful in some cases.\n // Forcibly trigger a chown on every entry, no matter what\n this.forceChown = opt.forceChown === true;\n // turn ><?| in filenames into 0xf000-higher encoded forms\n this.win32 = !!opt.win32 || isWindows;\n // do not unpack over files that are newer than what's in the archive\n this.newer = !!opt.newer;\n // do not unpack over ANY files\n this.keep = !!opt.keep;\n // do not set mtime/atime of extracted entries\n this.noMtime = !!opt.noMtime;\n // allow .., absolute path entries, and unpacking through symlinks\n // without this, warn and skip .., relativize absolutes, and error\n // on symlinks in extraction path\n this.preservePaths = !!opt.preservePaths;\n // unlink files and links before writing. This breaks existing hard\n // links, and removes symlink directories rather than erroring\n this.unlink = !!opt.unlink;\n this.cwd = normalizeWindowsPath(path.resolve(opt.cwd || process.cwd()));\n this.strip = Number(opt.strip) || 0;\n // if we're not chmodding, then we don't need the process umask\n this.processUmask =\n !this.chmod ? 0\n : typeof opt.processUmask === 'number' ? opt.processUmask\n : process.umask();\n this.umask =\n typeof opt.umask === 'number' ? opt.umask : this.processUmask;\n // default mode for dirs created as parents\n this.dmode = opt.dmode || 0o0777 & ~this.umask;\n this.fmode = opt.fmode || 0o0666 & ~this.umask;\n this.on('entry', entry => this[ONENTRY](entry));\n }\n // a bad or damaged archive is a warning for Parser, but an error\n // when extracting. Mark those errors as unrecoverable, because\n // the Unpack contract cannot be met.\n warn(code, msg, data = {}) {\n if (code === 'TAR_BAD_ARCHIVE' || code === 'TAR_ABORT') {\n data.recoverable = false;\n }\n return super.warn(code, msg, data);\n }\n [MAYBECLOSE]() {\n if (this[ENDED] && this[PENDING] === 0) {\n this.emit('prefinish');\n this.emit('finish');\n this.emit('end');\n }\n }\n [CHECKPATH](entry) {\n const p = normalizeWindowsPath(entry.path);\n const parts = p.split('/');\n if (this.strip) {\n if (parts.length < this.strip) {\n return false;\n }\n if (entry.type === 'Link') {\n const linkparts = normalizeWindowsPath(String(entry.linkpath)).split('/');\n if (linkparts.length >= this.strip) {\n entry.linkpath = linkparts.slice(this.strip).join('/');\n }\n else {\n return false;\n }\n }\n parts.splice(0, this.strip);\n entry.path = parts.join('/');\n }\n if (isFinite(this.maxDepth) && parts.length > this.maxDepth) {\n this.warn('TAR_ENTRY_ERROR', 'path excessively deep', {\n entry,\n path: p,\n depth: parts.length,\n maxDepth: this.maxDepth,\n });\n return false;\n }\n if (!this.preservePaths) {\n if (parts.includes('..') ||\n /* c8 ignore next */\n (isWindows && /^[a-z]:\\.\\.$/i.test(parts[0] ?? ''))) {\n this.warn('TAR_ENTRY_ERROR', `path contains '..'`, {\n entry,\n path: p,\n });\n return false;\n }\n // strip off the root\n const [root, stripped] = stripAbsolutePath(p);\n if (root) {\n entry.path = String(stripped);\n this.warn('TAR_ENTRY_INFO', `stripping ${root} from absolute path`, {\n entry,\n path: p,\n });\n }\n }\n if (path.isAbsolute(entry.path)) {\n entry.absolute = normalizeWindowsPath(path.resolve(entry.path));\n }\n else {\n entry.absolute = normalizeWindowsPath(path.resolve(this.cwd, entry.path));\n }\n // if we somehow ended up with a path that escapes the cwd, and we are\n // not in preservePaths mode, then something is fishy! This should have\n // been prevented above, so ignore this for coverage.\n /* c8 ignore start - defense in depth */\n if (!this.preservePaths &&\n typeof entry.absolute === 'string' &&\n entry.absolute.indexOf(this.cwd + '/') !== 0 &&\n entry.absolute !== this.cwd) {\n this.warn('TAR_ENTRY_ERROR', 'path escaped extraction target', {\n entry,\n path: normalizeWindowsPath(entry.path),\n resolvedPath: entry.absolute,\n cwd: this.cwd,\n });\n return false;\n }\n /* c8 ignore stop */\n // an archive can set properties on the extraction directory, but it\n // may not replace the cwd with a different kind of thing entirely.\n if (entry.absolute === this.cwd &&\n entry.type !== 'Directory' &&\n entry.type !== 'GNUDumpDir') {\n return false;\n }\n // only encode : chars that aren't drive letter indicators\n if (this.win32) {\n const { root: aRoot } = path.win32.parse(String(entry.absolute));\n entry.absolute =\n aRoot + wc.encode(String(entry.absolute).slice(aRoot.length));\n const { root: pRoot } = path.win32.parse(entry.path);\n entry.path = pRoot + wc.encode(entry.path.slice(pRoot.length));\n }\n return true;\n }\n [ONENTRY](entry) {\n if (!this[CHECKPATH](entry)) {\n return entry.resume();\n }\n assert.equal(typeof entry.absolute, 'string');\n switch (entry.type) {\n case 'Directory':\n case 'GNUDumpDir':\n if (entry.mode) {\n entry.mode = entry.mode | 0o700;\n }\n // eslint-disable-next-line no-fallthrough\n case 'File':\n case 'OldFile':\n case 'ContiguousFile':\n case 'Link':\n case 'SymbolicLink':\n return this[CHECKFS](entry);\n case 'CharacterDevice':\n case 'BlockDevice':\n case 'FIFO':\n default:\n return this[UNSUPPORTED](entry);\n }\n }\n [ONERROR](er, entry) {\n // Cwd has to exist, or else nothing works. That's serious.\n // Other errors are warnings, which raise the error in strict\n // mode, but otherwise continue on.\n if (er.name === 'CwdError') {\n this.emit('error', er);\n }\n else {\n this.warn('TAR_ENTRY_ERROR', er, { entry });\n this[UNPEND]();\n entry.resume();\n }\n }\n [MKDIR](dir, mode, cb) {\n mkdir(normalizeWindowsPath(dir), {\n uid: this.uid,\n gid: this.gid,\n processUid: this.processUid,\n processGid: this.processGid,\n umask: this.processUmask,\n preserve: this.preservePaths,\n unlink: this.unlink,\n cwd: this.cwd,\n mode: mode,\n }, cb);\n }\n [DOCHOWN](entry) {\n // in preserve owner mode, chown if the entry doesn't match process\n // in set owner mode, chown if setting doesn't match process\n return (this.forceChown ||\n (this.preserveOwner &&\n ((typeof entry.uid === 'number' &&\n entry.uid !== this.processUid) ||\n (typeof entry.gid === 'number' &&\n entry.gid !== this.processGid))) ||\n (typeof this.uid === 'number' &&\n this.uid !== this.processUid) ||\n (typeof this.gid === 'number' && this.gid !== this.processGid));\n }\n [UID](entry) {\n return uint32(this.uid, entry.uid, this.processUid);\n }\n [GID](entry) {\n return uint32(this.gid, entry.gid, this.processGid);\n }\n [FILE](entry, fullyDone) {\n const mode = typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.fmode;\n const stream = new fsm.WriteStream(String(entry.absolute), {\n // slight lie, but it can be numeric flags\n flags: getWriteFlag(entry.size),\n mode: mode,\n autoClose: false,\n });\n stream.on('error', (er) => {\n if (stream.fd) {\n fs.close(stream.fd, () => { });\n }\n // flush all the data out so that we aren't left hanging\n // if the error wasn't actually fatal. otherwise the parse\n // is blocked, and we never proceed.\n stream.write = () => true;\n this[ONERROR](er, entry);\n fullyDone();\n });\n let actions = 1;\n const done = (er) => {\n if (er) {\n /* c8 ignore start - we should always have a fd by now */\n if (stream.fd) {\n fs.close(stream.fd, () => { });\n }\n /* c8 ignore stop */\n this[ONERROR](er, entry);\n fullyDone();\n return;\n }\n if (--actions === 0) {\n if (stream.fd !== undefined) {\n fs.close(stream.fd, er => {\n if (er) {\n this[ONERROR](er, entry);\n }\n else {\n this[UNPEND]();\n }\n fullyDone();\n });\n }\n }\n };\n stream.on('finish', () => {\n // if futimes fails, try utimes\n // if utimes fails, fail with the original error\n // same for fchown/chown\n const abs = String(entry.absolute);\n const fd = stream.fd;\n if (typeof fd === 'number' && entry.mtime && !this.noMtime) {\n actions++;\n const atime = entry.atime || new Date();\n const mtime = entry.mtime;\n fs.futimes(fd, atime, mtime, er => er ?\n fs.utimes(abs, atime, mtime, er2 => done(er2 && er))\n : done());\n }\n if (typeof fd === 'number' && this[DOCHOWN](entry)) {\n actions++;\n const uid = this[UID](entry);\n const gid = this[GID](entry);\n if (typeof uid === 'number' && typeof gid === 'number') {\n fs.fchown(fd, uid, gid, er => er ?\n fs.chown(abs, uid, gid, er2 => done(er2 && er))\n : done());\n }\n }\n done();\n });\n const tx = this.transform ? this.transform(entry) || entry : entry;\n if (tx !== entry) {\n tx.on('error', (er) => {\n this[ONERROR](er, entry);\n fullyDone();\n });\n entry.pipe(tx);\n }\n tx.pipe(stream);\n }\n [DIRECTORY](entry, fullyDone) {\n const mode = typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.dmode;\n this[MKDIR](String(entry.absolute), mode, er => {\n if (er) {\n this[ONERROR](er, entry);\n fullyDone();\n return;\n }\n let actions = 1;\n const done = () => {\n if (--actions === 0) {\n fullyDone();\n this[UNPEND]();\n entry.resume();\n }\n };\n if (entry.mtime && !this.noMtime) {\n actions++;\n fs.utimes(String(entry.absolute), entry.atime || new Date(), entry.mtime, done);\n }\n if (this[DOCHOWN](entry)) {\n actions++;\n fs.chown(String(entry.absolute), Number(this[UID](entry)), Number(this[GID](entry)), done);\n }\n done();\n });\n }\n [UNSUPPORTED](entry) {\n entry.unsupported = true;\n this.warn('TAR_ENTRY_UNSUPPORTED', `unsupported entry type: ${entry.type}`, { entry });\n entry.resume();\n }\n [SYMLINK](entry, done) {\n this[LINK](entry, String(entry.linkpath), 'symlink', done);\n }\n [HARDLINK](entry, done) {\n const linkpath = normalizeWindowsPath(path.resolve(this.cwd, String(entry.linkpath)));\n this[LINK](entry, linkpath, 'link', done);\n }\n [PEND]() {\n this[PENDING]++;\n }\n [UNPEND]() {\n this[PENDING]--;\n this[MAYBECLOSE]();\n }\n [SKIP](entry) {\n this[UNPEND]();\n entry.resume();\n }\n // Check if we can reuse an existing filesystem entry safely and\n // overwrite it, rather than unlinking and recreating\n // Windows doesn't report a useful nlink, so we just never reuse entries\n [ISREUSABLE](entry, st) {\n return (entry.type === 'File' &&\n !this.unlink &&\n st.isFile() &&\n st.nlink <= 1 &&\n !isWindows);\n }\n // check if a thing is there, and if so, try to clobber it\n [CHECKFS](entry) {\n this[PEND]();\n const paths = [entry.path];\n if (entry.linkpath) {\n paths.push(entry.linkpath);\n }\n this.reservations.reserve(paths, done => this[CHECKFS2](entry, done));\n }\n [CHECKFS2](entry, fullyDone) {\n const done = (er) => {\n fullyDone(er);\n };\n const checkCwd = () => {\n this[MKDIR](this.cwd, this.dmode, er => {\n if (er) {\n this[ONERROR](er, entry);\n done();\n return;\n }\n this[CHECKED_CWD] = true;\n start();\n });\n };\n const start = () => {\n if (entry.absolute !== this.cwd) {\n const parent = normalizeWindowsPath(path.dirname(String(entry.absolute)));\n if (parent !== this.cwd) {\n return this[MKDIR](parent, this.dmode, er => {\n if (er) {\n this[ONERROR](er, entry);\n done();\n return;\n }\n afterMakeParent();\n });\n }\n }\n afterMakeParent();\n };\n const afterMakeParent = () => {\n fs.lstat(String(entry.absolute), (lstatEr, st) => {\n if (st &&\n (this.keep ||\n /* c8 ignore next */\n (this.newer && st.mtime > (entry.mtime ?? st.mtime)))) {\n this[SKIP](entry);\n done();\n return;\n }\n if (lstatEr || this[ISREUSABLE](entry, st)) {\n return this[MAKEFS](null, entry, done);\n }\n if (st.isDirectory()) {\n if (entry.type === 'Directory') {\n const needChmod = this.chmod &&\n entry.mode &&\n (st.mode & 0o7777) !== entry.mode;\n const afterChmod = (er) => this[MAKEFS](er ?? null, entry, done);\n if (!needChmod) {\n return afterChmod();\n }\n return fs.chmod(String(entry.absolute), Number(entry.mode), afterChmod);\n }\n // Not a dir entry, have to remove it.\n // NB: the only way to end up with an entry that is the cwd\n // itself, in such a way that == does not detect, is a\n // tricky windows absolute path with UNC or 8.3 parts (and\n // preservePaths:true, or else it will have been stripped).\n // In that case, the user has opted out of path protections\n // explicitly, so if they blow away the cwd, c'est la vie.\n if (entry.absolute !== this.cwd) {\n return fs.rmdir(String(entry.absolute), (er) => this[MAKEFS](er ?? null, entry, done));\n }\n }\n // not a dir, and not reusable\n // don't remove if the cwd, we want that error\n if (entry.absolute === this.cwd) {\n return this[MAKEFS](null, entry, done);\n }\n unlinkFile(String(entry.absolute), er => this[MAKEFS](er ?? null, entry, done));\n });\n };\n if (this[CHECKED_CWD]) {\n start();\n }\n else {\n checkCwd();\n }\n }\n [MAKEFS](er, entry, done) {\n if (er) {\n this[ONERROR](er, entry);\n done();\n return;\n }\n switch (entry.type) {\n case 'File':\n case 'OldFile':\n case 'ContiguousFile':\n return this[FILE](entry, done);\n case 'Link':\n return this[HARDLINK](entry, done);\n case 'SymbolicLink':\n return this[SYMLINK](entry, done);\n case 'Directory':\n case 'GNUDumpDir':\n return this[DIRECTORY](entry, done);\n }\n }\n [LINK](entry, linkpath, link, done) {\n // XXX: get the type ('symlink' or 'junction') for windows\n fs[link](linkpath, String(entry.absolute), er => {\n if (er) {\n this[ONERROR](er, entry);\n }\n else {\n this[UNPEND]();\n entry.resume();\n }\n done();\n });\n }\n}\nconst callSync = (fn) => {\n try {\n return [null, fn()];\n }\n catch (er) {\n return [er, null];\n }\n};\nexport class UnpackSync extends Unpack {\n sync = true;\n [MAKEFS](er, entry) {\n return super[MAKEFS](er, entry, () => { });\n }\n [CHECKFS](entry) {\n if (!this[CHECKED_CWD]) {\n const er = this[MKDIR](this.cwd, this.dmode);\n if (er) {\n return this[ONERROR](er, entry);\n }\n this[CHECKED_CWD] = true;\n }\n // don't bother to make the parent if the current entry is the cwd,\n // we've already checked it.\n if (entry.absolute !== this.cwd) {\n const parent = normalizeWindowsPath(path.dirname(String(entry.absolute)));\n if (parent !== this.cwd) {\n const mkParent = this[MKDIR](parent, this.dmode);\n if (mkParent) {\n return this[ONERROR](mkParent, entry);\n }\n }\n }\n const [lstatEr, st] = callSync(() => fs.lstatSync(String(entry.absolute)));\n if (st &&\n (this.keep ||\n /* c8 ignore next */\n (this.newer && st.mtime > (entry.mtime ?? st.mtime)))) {\n return this[SKIP](entry);\n }\n if (lstatEr || this[ISREUSABLE](entry, st)) {\n return this[MAKEFS](null, entry);\n }\n if (st.isDirectory()) {\n if (entry.type === 'Directory') {\n const needChmod = this.chmod &&\n entry.mode &&\n (st.mode & 0o7777) !== entry.mode;\n const [er] = needChmod ?\n callSync(() => {\n fs.chmodSync(String(entry.absolute), Number(entry.mode));\n })\n : [];\n return this[MAKEFS](er, entry);\n }\n // not a dir entry, have to remove it\n const [er] = callSync(() => fs.rmdirSync(String(entry.absolute)));\n this[MAKEFS](er, entry);\n }\n // not a dir, and not reusable.\n // don't remove if it's the cwd, since we want that error.\n const [er] = entry.absolute === this.cwd ?\n []\n : callSync(() => unlinkFileSync(String(entry.absolute)));\n this[MAKEFS](er, entry);\n }\n [FILE](entry, done) {\n const mode = typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.fmode;\n const oner = (er) => {\n let closeError;\n try {\n fs.closeSync(fd);\n }\n catch (e) {\n closeError = e;\n }\n if (er || closeError) {\n this[ONERROR](er || closeError, entry);\n }\n done();\n };\n let fd;\n try {\n fd = fs.openSync(String(entry.absolute), getWriteFlag(entry.size), mode);\n /* c8 ignore start - This is only a problem if the file was successfully\n * statted, BUT failed to open. Testing this is annoying, and we\n * already have ample testint for other uses of oner() methods.\n */\n }\n catch (er) {\n return oner(er);\n }\n /* c8 ignore stop */\n const tx = this.transform ? this.transform(entry) || entry : entry;\n if (tx !== entry) {\n tx.on('error', (er) => this[ONERROR](er, entry));\n entry.pipe(tx);\n }\n tx.on('data', (chunk) => {\n try {\n fs.writeSync(fd, chunk, 0, chunk.length);\n }\n catch (er) {\n oner(er);\n }\n });\n tx.on('end', () => {\n let er = null;\n // try both, falling futimes back to utimes\n // if either fails, handle the first error\n if (entry.mtime && !this.noMtime) {\n const atime = entry.atime || new Date();\n const mtime = entry.mtime;\n try {\n fs.futimesSync(fd, atime, mtime);\n }\n catch (futimeser) {\n try {\n fs.utimesSync(String(entry.absolute), atime, mtime);\n }\n catch (utimeser) {\n er = futimeser;\n }\n }\n }\n if (this[DOCHOWN](entry)) {\n const uid = this[UID](entry);\n const gid = this[GID](entry);\n try {\n fs.fchownSync(fd, Number(uid), Number(gid));\n }\n catch (fchowner) {\n try {\n fs.chownSync(String(entry.absolute), Number(uid), Number(gid));\n }\n catch (chowner) {\n er = er || fchowner;\n }\n }\n }\n oner(er);\n });\n }\n [DIRECTORY](entry, done) {\n const mode = typeof entry.mode === 'number' ?\n entry.mode & 0o7777\n : this.dmode;\n const er = this[MKDIR](String(entry.absolute), mode);\n if (er) {\n this[ONERROR](er, entry);\n done();\n return;\n }\n if (entry.mtime && !this.noMtime) {\n try {\n fs.utimesSync(String(entry.absolute), entry.atime || new Date(), entry.mtime);\n /* c8 ignore next */\n }\n catch (er) { }\n }\n if (this[DOCHOWN](entry)) {\n try {\n fs.chownSync(String(entry.absolute), Number(this[UID](entry)), Number(this[GID](entry)));\n }\n catch (er) { }\n }\n done();\n entry.resume();\n }\n [MKDIR](dir, mode) {\n try {\n return mkdirSync(normalizeWindowsPath(dir), {\n uid: this.uid,\n gid: this.gid,\n processUid: this.processUid,\n processGid: this.processGid,\n umask: this.processUmask,\n preserve: this.preservePaths,\n unlink: this.unlink,\n cwd: this.cwd,\n mode: mode,\n });\n }\n catch (er) {\n return er;\n }\n }\n [LINK](entry, linkpath, link, done) {\n const ls = `${link}Sync`;\n try {\n fs[ls](linkpath, String(entry.absolute));\n done();\n entry.resume();\n }\n catch (er) {\n return this[ONERROR](er, entry);\n }\n }\n}\n//# sourceMappingURL=unpack.js.map","// tar -x\nimport * as fsm from '@isaacs/fs-minipass';\nimport fs from 'node:fs';\nimport { filesFilter } from './list.js';\nimport { makeCommand } from './make-command.js';\nimport { Unpack, UnpackSync } from './unpack.js';\nconst extractFileSync = (opt) => {\n const u = new UnpackSync(opt);\n const file = opt.file;\n const stat = fs.statSync(file);\n // This trades a zero-byte read() syscall for a stat\n // However, it will usually result in less memory allocation\n const readSize = opt.maxReadSize || 16 * 1024 * 1024;\n const stream = new fsm.ReadStreamSync(file, {\n readSize: readSize,\n size: stat.size,\n });\n stream.pipe(u);\n};\nconst extractFile = (opt, _) => {\n const u = new Unpack(opt);\n const readSize = opt.maxReadSize || 16 * 1024 * 1024;\n const file = opt.file;\n const p = new Promise((resolve, reject) => {\n u.on('error', reject);\n u.on('close', resolve);\n // This trades a zero-byte read() syscall for a stat\n // However, it will usually result in less memory allocation\n fs.stat(file, (er, stat) => {\n if (er) {\n reject(er);\n }\n else {\n const stream = new fsm.ReadStream(file, {\n readSize: readSize,\n size: stat.size,\n });\n stream.on('error', reject);\n stream.pipe(u);\n }\n });\n });\n return p;\n};\nexport const extract = makeCommand(extractFileSync, extractFile, opt => new UnpackSync(opt), opt => new Unpack(opt), (opt, files) => {\n if (files?.length)\n filesFilter(opt, files);\n});\n//# sourceMappingURL=extract.js.map","// tar -r\nimport { WriteStream, WriteStreamSync } from '@isaacs/fs-minipass';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { Header } from './header.js';\nimport { list } from './list.js';\nimport { makeCommand } from './make-command.js';\nimport { isFile, } from './options.js';\nimport { Pack, PackSync } from './pack.js';\n// starting at the head of the file, read a Header\n// If the checksum is invalid, that's our position to start writing\n// If it is, jump forward by the specified size (round up to 512)\n// and try again.\n// Write the new Pack stream starting there.\nconst replaceSync = (opt, files) => {\n const p = new PackSync(opt);\n let threw = true;\n let fd;\n let position;\n try {\n try {\n fd = fs.openSync(opt.file, 'r+');\n }\n catch (er) {\n if (er?.code === 'ENOENT') {\n fd = fs.openSync(opt.file, 'w+');\n }\n else {\n throw er;\n }\n }\n const st = fs.fstatSync(fd);\n const headBuf = Buffer.alloc(512);\n POSITION: for (position = 0; position < st.size; position += 512) {\n for (let bufPos = 0, bytes = 0; bufPos < 512; bufPos += bytes) {\n bytes = fs.readSync(fd, headBuf, bufPos, headBuf.length - bufPos, position + bufPos);\n if (position === 0 &&\n headBuf[0] === 0x1f &&\n headBuf[1] === 0x8b) {\n throw new Error('cannot append to compressed archives');\n }\n if (!bytes) {\n break POSITION;\n }\n }\n const h = new Header(headBuf);\n if (!h.cksumValid) {\n break;\n }\n const entryBlockSize = 512 * Math.ceil((h.size || 0) / 512);\n if (position + entryBlockSize + 512 > st.size) {\n break;\n }\n // the 512 for the header we just parsed will be added as well\n // also jump ahead all the blocks for the body\n position += entryBlockSize;\n if (opt.mtimeCache && h.mtime) {\n opt.mtimeCache.set(String(h.path), h.mtime);\n }\n }\n threw = false;\n streamSync(opt, p, position, fd, files);\n }\n finally {\n if (threw) {\n try {\n fs.closeSync(fd);\n }\n catch (er) { }\n }\n }\n};\nconst streamSync = (opt, p, position, fd, files) => {\n const stream = new WriteStreamSync(opt.file, {\n fd: fd,\n start: position,\n });\n p.pipe(stream);\n addFilesSync(p, files);\n};\nconst replaceAsync = (opt, files) => {\n files = Array.from(files);\n const p = new Pack(opt);\n const getPos = (fd, size, cb_) => {\n const cb = (er, pos) => {\n if (er) {\n fs.close(fd, _ => cb_(er));\n }\n else {\n cb_(null, pos);\n }\n };\n let position = 0;\n if (size === 0) {\n return cb(null, 0);\n }\n let bufPos = 0;\n const headBuf = Buffer.alloc(512);\n const onread = (er, bytes) => {\n if (er || typeof bytes === 'undefined') {\n return cb(er);\n }\n bufPos += bytes;\n if (bufPos < 512 && bytes) {\n return fs.read(fd, headBuf, bufPos, headBuf.length - bufPos, position + bufPos, onread);\n }\n if (position === 0 &&\n headBuf[0] === 0x1f &&\n headBuf[1] === 0x8b) {\n return cb(new Error('cannot append to compressed archives'));\n }\n // truncated header\n if (bufPos < 512) {\n return cb(null, position);\n }\n const h = new Header(headBuf);\n if (!h.cksumValid) {\n return cb(null, position);\n }\n /* c8 ignore next */\n const entryBlockSize = 512 * Math.ceil((h.size ?? 0) / 512);\n if (position + entryBlockSize + 512 > size) {\n return cb(null, position);\n }\n position += entryBlockSize + 512;\n if (position >= size) {\n return cb(null, position);\n }\n if (opt.mtimeCache && h.mtime) {\n opt.mtimeCache.set(String(h.path), h.mtime);\n }\n bufPos = 0;\n fs.read(fd, headBuf, 0, 512, position, onread);\n };\n fs.read(fd, headBuf, 0, 512, position, onread);\n };\n const promise = new Promise((resolve, reject) => {\n p.on('error', reject);\n let flag = 'r+';\n const onopen = (er, fd) => {\n if (er && er.code === 'ENOENT' && flag === 'r+') {\n flag = 'w+';\n return fs.open(opt.file, flag, onopen);\n }\n if (er || !fd) {\n return reject(er);\n }\n fs.fstat(fd, (er, st) => {\n if (er) {\n return fs.close(fd, () => reject(er));\n }\n getPos(fd, st.size, (er, position) => {\n if (er) {\n return reject(er);\n }\n const stream = new WriteStream(opt.file, {\n fd: fd,\n start: position,\n });\n p.pipe(stream);\n stream.on('error', reject);\n stream.on('close', resolve);\n addFilesAsync(p, files);\n });\n });\n };\n fs.open(opt.file, flag, onopen);\n });\n return promise;\n};\nconst addFilesSync = (p, files) => {\n files.forEach(file => {\n if (file.charAt(0) === '@') {\n list({\n file: path.resolve(p.cwd, file.slice(1)),\n sync: true,\n noResume: true,\n onReadEntry: entry => p.add(entry),\n });\n }\n else {\n p.add(file);\n }\n });\n p.end();\n};\nconst addFilesAsync = async (p, files) => {\n for (let i = 0; i < files.length; i++) {\n const file = String(files[i]);\n if (file.charAt(0) === '@') {\n await list({\n file: path.resolve(String(p.cwd), file.slice(1)),\n noResume: true,\n onReadEntry: entry => p.add(entry),\n });\n }\n else {\n p.add(file);\n }\n }\n p.end();\n};\nexport const replace = makeCommand(replaceSync, replaceAsync, \n/* c8 ignore start */\n() => {\n throw new TypeError('file is required');\n}, () => {\n throw new TypeError('file is required');\n}, \n/* c8 ignore stop */\n(opt, entries) => {\n if (!isFile(opt)) {\n throw new TypeError('file is required');\n }\n if (opt.gzip ||\n opt.brotli ||\n opt.zstd ||\n opt.file.endsWith('.br') ||\n opt.file.endsWith('.tbr')) {\n throw new TypeError('cannot append to compressed archives');\n }\n if (!entries?.length) {\n throw new TypeError('no paths specified to add/replace');\n }\n});\n//# sourceMappingURL=replace.js.map","// tar -u\nimport { makeCommand } from './make-command.js';\nimport { replace as r } from './replace.js';\n// just call tar.r with the filter and mtimeCache\nexport const update = makeCommand(r.syncFile, r.asyncFile, r.syncNoFile, r.asyncNoFile, (opt, entries = []) => {\n r.validate?.(opt, entries);\n mtimeFilter(opt);\n});\nconst mtimeFilter = (opt) => {\n const filter = opt.filter;\n if (!opt.mtimeCache) {\n opt.mtimeCache = new Map();\n }\n opt.filter =\n filter ?\n (path, stat) => filter(path, stat) &&\n !(\n /* c8 ignore start */\n ((opt.mtimeCache?.get(path) ?? stat.mtime ?? 0) >\n (stat.mtime ?? 0))\n /* c8 ignore stop */\n )\n : (path, stat) => !(\n /* c8 ignore start */\n ((opt.mtimeCache?.get(path) ?? stat.mtime ?? 0) >\n (stat.mtime ?? 0))\n /* c8 ignore stop */\n );\n};\n//# sourceMappingURL=update.js.map","export const biomeJson = `\n{\n \"$schema\": \"https://biomejs.dev/schemas/latest/schema.json\",\n \"vcs\": {\n \"enabled\": true,\n \"clientKind\": \"git\"\n },\n \"files\": {\n \"ignoreUnknown\": true,\n \"includes\": [\"**\", \"!node_modules\", \"!dist\"]\n },\n \"formatter\": {\n \"enabled\": true,\n \"indentStyle\": \"space\"\n },\n \"linter\": {\n \"enabled\": true,\n \"rules\": {\n \"recommended\": true\n },\n \"domains\": {\n \"react\": \"recommended\"\n }\n },\n \"assist\": {\n \"actions\": {\n \"source\": {\n \"organizeImports\": \"on\"\n }\n }\n }\n}\n`.trim()\n","export const tsconfigJson = `\n{\n \"extends\": \"alepha/tsconfig\"\n}\n`.trim();\n","export const viteConfigTs = (\n serverEntry?: string,\n) => `\nimport { viteAlepha } from \"alepha/vite\";\n\nexport default {\n plugins: [\n viteAlepha(${serverEntry ? `{ serverEntry: \"${serverEntry}\" }` : \"\"}),\n ],\n test: {\n globals: true,\n },\n};\n`.trim()\n","import { readFileSync } from \"node:fs\";\n\nconst packageJson = JSON.parse(\n readFileSync(new URL(\"../../package.json\", import.meta.url), \"utf-8\"),\n);\n\nexport const version = packageJson.version;\n","export const indexHtml = (\n browserEntry: string = \"/src/main.tsx\",\n) => `\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <title>App</title>\n</head>\n<body>\n<script type=\"module\" src=\"${browserEntry}\"></script>\n</body>\n</html>\n`.trim()\n","import { access, readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport { pipeline } from \"node:stream/promises\";\nimport { $inject, Alepha, AlephaError } from \"alepha\";\nimport { FileSystemProvider } from \"alepha/file\";\nimport { $logger } from \"alepha/logger\";\nimport type { RepositoryProvider } from \"alepha/orm\";\nimport { boot } from \"alepha/vite\";\nimport * as tar from \"tar\";\nimport { tsImport } from \"tsx/esm/api\";\nimport { biomeJson } from \"../assets/biomeJson.ts\";\nimport { tsconfigJson } from \"../assets/tsconfigJson.ts\";\nimport { viteConfigTs } from \"../assets/viteConfigTs.ts\";\nimport { version } from \"../version.ts\";\nimport { ProcessRunner } from \"./ProcessRunner.ts\";\nimport { indexHtml } from \"../assets/indexHtml.ts\";\n\n/**\n * Utility service for common project operations used by CLI commands.\n *\n * This service provides helper methods for:\n * - Project configuration file management (tsconfig.json, package.json, etc.)\n * - Package manager setup (Yarn, npm, pnpm)\n * - Sample project downloading\n * - Drizzle ORM/Kit utilities\n * - Alepha instance loading\n */\nexport class ProjectUtils {\n protected readonly log = $logger();\n protected readonly runner = $inject(ProcessRunner);\n protected readonly fs = $inject(FileSystemProvider);\n\n // ===================================================================================================================\n // Package Manager & Project Setup\n // ===================================================================================================================\n\n /**\n * Ensure Yarn is configured in the project directory.\n *\n * Creates a .yarnrc.yml file with node-modules linker if it doesn't exist.\n *\n * @param root - The root directory of the project\n */\n public async ensureYarn(root: string): Promise<void> {\n const yarnrcPath = join(root, \".yarnrc.yml\");\n try {\n await access(yarnrcPath);\n } catch {\n await writeFile(yarnrcPath, \"nodeLinker: node-modules\");\n }\n\n // remove lock files from other package managers\n const npmLockPath = join(root, \"package-lock.json\");\n const pnpmLockPath = join(root, \"pnpm-lock.yaml\");\n await this.fs.rm(npmLockPath, { force: true });\n await this.fs.rm(pnpmLockPath, { force: true });\n }\n\n /**\n * Generate package.json content with Alepha dependencies.\n *\n * @param modes - Configuration for which dependencies to include\n * @returns Package.json partial with dependencies, devDependencies, and scripts\n */\n public generatePackageJsonContent(modes: DependencyModes): {\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n scripts: Record<string, string>;\n type: \"module\";\n } {\n const dependencies: Record<string, string> = {\n alepha: `^${version}`,\n };\n\n const devDependencies: Record<string, string> = {};\n\n if (modes.react) {\n dependencies[\"@alepha/react\"] = `^${version}`;\n dependencies.react = \"^19.2.0\";\n devDependencies[\"@types/react\"] = \"^19.2.0\";\n }\n\n return {\n type: \"module\",\n dependencies,\n devDependencies,\n scripts: {\n dev: \"alepha dev\",\n build: \"alepha build\",\n },\n };\n }\n\n /**\n * Ensure package.json exists and has correct configuration.\n *\n * Creates a new package.json if none exists, or updates an existing one to:\n * - Set \"type\": \"module\"\n * - Add Alepha dependencies\n * - Add standard scripts\n *\n * @param root - The root directory of the project\n * @param modes - Configuration for which dependencies to include\n */\n public async ensurePackageJson(\n root: string,\n modes: DependencyModes,\n ): Promise<void> {\n const packageJsonPath = join(root, \"package.json\");\n try {\n await access(packageJsonPath);\n } catch (error) {\n await writeFile(\n packageJsonPath,\n JSON.stringify(this.generatePackageJsonContent(modes), null, 2),\n );\n return;\n }\n\n const content = await readFile(packageJsonPath, \"utf8\");\n const packageJson = JSON.parse(content);\n\n const newPackageJson = this.generatePackageJsonContent(modes);\n\n packageJson.type = \"module\";\n packageJson.dependencies ??= {};\n packageJson.devDependencies ??= {};\n packageJson.scripts ??= {};\n\n Object.assign(packageJson.dependencies, newPackageJson.dependencies);\n Object.assign(packageJson.devDependencies, newPackageJson.devDependencies);\n Object.assign(packageJson.scripts, newPackageJson.scripts);\n\n await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));\n }\n\n /**\n * Ensure package.json exists and is configured as ES module.\n *\n * Similar to ensurePackageJson but only validates/sets the \"type\": \"module\" field.\n * Throws an error if no package.json exists.\n *\n * @param root - The root directory of the project\n * @throws {AlephaError} If no package.json is found\n */\n public async ensurePackageJsonModule(root: string): Promise<void> {\n const packageJsonPath = join(root, \"package.json\");\n try {\n await access(packageJsonPath);\n } catch (error) {\n throw new AlephaError(\n \"No package.json found in project root. Run 'npx alepha init' to create one.\",\n );\n }\n\n const content = await readFile(packageJsonPath, \"utf8\");\n const packageJson = JSON.parse(content);\n if (!packageJson.type || packageJson.type !== \"module\") {\n packageJson.type = \"module\";\n await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));\n }\n }\n\n /**\n * Ensure tsconfig.json exists in the project.\n *\n * Creates a standard Alepha tsconfig.json if none exists.\n *\n * @param root - The root directory of the project\n */\n public async ensureTsConfig(root: string): Promise<void> {\n const tsconfigPath = join(root, \"tsconfig.json\");\n try {\n await access(tsconfigPath);\n } catch {\n await writeFile(tsconfigPath, tsconfigJson);\n }\n }\n\n /**\n * Download Alepha starter project from GitHub.\n *\n * Downloads and extracts the apps/starter directory from the main Alepha repository.\n *\n * @param targetDir - The directory where the project should be extracted\n * @throws {AlephaError} If the download fails\n */\n public async downloadSampleProject(targetDir: string): Promise<void> {\n const url = \"https://api.github.com/repos/feunard/alepha/tarball/main\";\n const response = await fetch(url, {\n headers: {\n \"User-Agent\": \"Alepha-CLI\", // GitHub API requires User-Agent\n },\n });\n\n if (!response.ok) {\n throw new AlephaError(`Failed to download: ${response.statusText}`);\n }\n\n const tarStream = Readable.fromWeb(response.body as any);\n await pipeline(\n tarStream,\n tar.extract({\n cwd: targetDir, // Extract to target directory\n strip: 3, // Remove feunard-alepha-<hash>/apps/starter prefix\n filter: (path) => {\n // Only extract files from apps/starter/\n const parts = path.split(\"/\");\n return (\n parts.length >= 3 && parts[1] === \"apps\" && parts[2] === \"starter\"\n );\n },\n }),\n );\n }\n\n // ===================================================================================================================\n // Biome Configuration\n // ===================================================================================================================\n\n /**\n * Get the path to Biome configuration file.\n *\n * Looks for an existing biome.json in the project root, or creates one if it doesn't exist.\n *\n * @param maybePath - Optional custom path to biome config\n * @returns Absolute path to the biome.json config file\n */\n public async getBiomeConfigPath(maybePath?: string): Promise<string> {\n const root = process.cwd();\n if (maybePath) {\n try {\n const path = join(root, maybePath);\n await access(path);\n return path;\n } catch {}\n }\n\n try {\n const path = join(root, \"biome.json\");\n await access(path);\n return path;\n } catch {\n return await this.runner.writeConfigFile(\"biome.json\", biomeJson);\n }\n }\n\n // ===================================================================================================================\n // Vite Configuration\n // ===================================================================================================================\n\n /**\n * Get the path to Vite configuration file.\n *\n * Looks for an existing vite.config.ts in the project root, or creates one if it doesn't exist.\n *\n * @param root - The root directory of the project (defaults to process.cwd())\n * @param serverEntry - Optional path to the server entry file to include in the config\n * @returns Absolute path to the vite.config.ts file\n */\n public async getViteConfigPath(\n root: string,\n serverEntry?: string,\n ): Promise<string> {\n try {\n const viteConfigPath = join(root, \"vite.config.ts\");\n await access(viteConfigPath);\n return viteConfigPath;\n } catch {\n return this.runner.writeConfigFile(\n \"vite.config.ts\",\n viteConfigTs(serverEntry),\n );\n }\n }\n\n // ===================================================================================================================\n // Drizzle ORM & Kit Utilities\n // ===================================================================================================================\n\n /**\n * Load Alepha instance from a server entry file.\n *\n * Dynamically imports the server entry file and extracts the Alepha instance.\n * Skips the automatic start process.\n *\n * @param rootDir - The root directory of the project\n * @param explicitEntry - Optional explicit path to the entry file\n * @returns Object containing the Alepha instance and the entry file path\n * @throws {AlephaError} If the Alepha instance cannot be found\n */\n public async loadAlephaFromServerEntryFile(\n rootDir?: string,\n explicitEntry?: string,\n ): Promise<{\n alepha: Alepha;\n entry: string;\n }> {\n process.env.ALEPHA_SKIP_START = \"true\";\n\n const entry = await boot.getServerEntry(rootDir, explicitEntry);\n const mod = await tsImport(entry, {\n parentURL: import.meta.url,\n });\n\n this.log.debug(`Load entry: ${entry}`);\n\n // check if alepha is correctly exported\n if (mod.default instanceof Alepha) {\n return {\n alepha: mod.default,\n entry,\n };\n }\n\n // else, try with global variable\n const g: any = global;\n if (g.__alepha) {\n return {\n alepha: g.__alepha,\n entry,\n };\n }\n\n throw new AlephaError(\n `Could not find Alepha instance in entry file: ${entry}`,\n );\n }\n\n /**\n * Get DrizzleKitProvider from an Alepha instance.\n *\n * Searches the Alepha registry for the DrizzleKitProvider instance.\n *\n * @param alepha - The Alepha instance to search\n * @returns The DrizzleKitProvider instance\n */\n public getKitFromAlepha(alepha: Alepha): any {\n // biome-ignore lint/complexity/useLiteralKeys: private key\n return alepha[\"registry\"]\n .values()\n .find((it: any) => it.instance.constructor.name === \"DrizzleKitProvider\")\n ?.instance;\n }\n\n /**\n * Generate JavaScript code for Drizzle entities export.\n *\n * Creates a temporary entities.js file that imports from the entry file\n * and exports database models for Drizzle Kit to process.\n *\n * @param entry - Path to the server entry file\n * @param provider - Name of the database provider\n * @param models - Array of model names to export\n * @returns JavaScript code as a string\n */\n public generateEntitiesJs(\n entry: string,\n provider: string,\n models: string[] = [],\n ): string {\n return `\nimport \"${entry}\";\nimport { DrizzleKitProvider, Repository } from \"alepha/orm\";\n\nconst alepha = globalThis.__alepha;\nconst kit = alepha.inject(DrizzleKitProvider);\nconst provider = alepha.services(Repository).find((it) => it.provider.name === \"${provider}\").provider;\nconst models = kit.getModels(provider);\n\n${models.map((it: string) => `export const ${it} = models[\"${it}\"];`).join(\"\\n\")}\n\n`.trim();\n }\n\n /**\n * Prepare Drizzle configuration files for a database provider.\n *\n * Creates temporary entities.js and drizzle.config.js files needed\n * for Drizzle Kit commands to run properly.\n *\n * @param options - Configuration options including kit, provider info, and paths\n * @returns Path to the generated drizzle.config.js file\n */\n public async prepareDrizzleConfig(options: {\n kit: any;\n provider: any;\n providerName: string;\n providerUrl: string;\n dialect: string;\n entry: string;\n rootDir: string;\n }): Promise<string> {\n const models = Object.keys(options.kit.getModels(options.provider));\n const entitiesJs = this.generateEntitiesJs(\n options.entry,\n options.providerName,\n models,\n );\n\n const entitiesJsPath = await this.runner.writeConfigFile(\n \"entities.js\",\n entitiesJs,\n options.rootDir,\n );\n\n const config: Record<string, any> = {\n schema: entitiesJsPath,\n out: `./migrations/${options.providerName}`,\n dialect: options.dialect,\n dbCredentials: {\n url: options.providerUrl,\n },\n };\n\n if (options.providerName === \"pglite\") {\n config.driver = \"pglite\";\n }\n\n const drizzleConfigJs = `export default ${JSON.stringify(config, null, 2)}`;\n\n return await this.runner.writeConfigFile(\n \"drizzle.config.js\",\n drizzleConfigJs,\n options.rootDir,\n );\n }\n\n /**\n * Run a drizzle-kit command for all database providers in an Alepha instance.\n *\n * Iterates through all repository providers, prepares Drizzle config for each,\n * and executes the specified drizzle-kit command.\n *\n * @param options - Configuration including command to run, flags, and logging\n */\n public async runDrizzleKitCommand(options: {\n root: string;\n args?: string;\n command: string;\n logMessage: (providerName: string, dialect: string) => string;\n }): Promise<void> {\n const rootDir = options.root;\n this.log.debug(`Using project root: ${rootDir}`);\n\n const { alepha, entry } = await this.loadAlephaFromServerEntryFile(\n rootDir,\n options.args,\n );\n\n const kit = this.getKitFromAlepha(alepha);\n const repositoryProvider =\n alepha.inject<RepositoryProvider>(\"RepositoryProvider\");\n const accepted = new Set<string>([]);\n\n for (const descriptor of repositoryProvider.getRepositories()) {\n const provider = descriptor.provider;\n const providerName = provider.name;\n const dialect = provider.dialect;\n\n if (accepted.has(providerName)) {\n continue;\n }\n accepted.add(providerName);\n\n this.log.info(\"\");\n this.log.info(options.logMessage(providerName, dialect));\n\n const drizzleConfigJsPath = await this.prepareDrizzleConfig({\n kit,\n provider,\n providerName,\n providerUrl: provider.url,\n dialect,\n entry,\n rootDir,\n });\n\n await this.runner.exec(\n `drizzle-kit ${options.command} --config=${drizzleConfigJsPath}`,\n );\n }\n }\n\n public async getPackageManager(root: string): Promise<\"yarn\" | \"pnpm\" | \"npm\"> {\n if (await this.fs.exists(join(root, \"yarn.lock\"))) {\n return \"yarn\";\n } else if (await this.fs.exists(join(root, \"pnpm-lock.yaml\"))) {\n return \"pnpm\";\n } else {\n return \"npm\";\n }\n }\n\n public async ensureIndexHtml(\n root: string,\n ) {\n if (await this.fs.exists(join(root, \"index.html\"))) {\n return;\n }\n\n const entry = await boot.getServerEntry(root).catch(() => null);\n await this.fs.writeFile(\n join(root, \"index.html\"), indexHtml(entry ? entry.replace(root, \"\") : undefined)\n )\n }\n}\n\nexport interface DependencyModes {\n react?: boolean;\n // testing?: boolean;\n // ui?: boolean;\n}\n","import { $inject, t } from \"alepha\";\nimport { $command } from \"alepha/command\";\nimport { $logger } from \"alepha/logger\";\nimport { ProcessRunner } from \"../services/ProcessRunner.ts\";\nimport { ProjectUtils } from \"../services/ProjectUtils.ts\";\n\nexport class BiomeCommands {\n protected readonly log = $logger();\n protected readonly runner = $inject(ProcessRunner);\n protected readonly utils = $inject(ProjectUtils);\n\n protected readonly biomeFlags = t.object({\n config: t.optional(\n t.text({\n aliases: [\"c\"],\n }),\n ),\n });\n\n public readonly format = $command({\n name: \"format\",\n description: \"Format the codebase using Biome\",\n flags: this.biomeFlags,\n handler: async ({ flags }) => {\n const configPath = await this.utils.getBiomeConfigPath(flags.config);\n await this.runner.exec(`biome format --fix --config-path=${configPath}`);\n },\n });\n\n public readonly lint = $command({\n name: \"lint\",\n description: \"Run linter across the codebase using Biome\",\n flags: this.biomeFlags,\n handler: async ({ flags }) => {\n const configPath = await this.utils.getBiomeConfigPath(flags.config);\n await this.runner.exec(\n `biome check --formatter-enabled=false --fix --config-path=${configPath}`,\n );\n },\n });\n}\n","import { access, mkdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { $inject, t } from \"alepha\";\nimport { $command, CliProvider } from \"alepha/command\";\nimport { $logger } from \"alepha/logger\";\nimport { ProjectUtils } from \"../services/ProjectUtils.ts\";\nimport { version } from \"../version.ts\";\n\nexport class CoreCommands {\n protected readonly log = $logger();\n protected readonly cli = $inject(CliProvider);\n protected readonly utils = $inject(ProjectUtils);\n\n /**\n * Called when no command is provided\n */\n public readonly root = $command({\n root: true,\n flags: t.object({\n version: t.optional(\n t.boolean({\n description: \"Show Alepha CLI version\",\n aliases: [\"v\"],\n }),\n ),\n }),\n handler: async ({ flags }) => {\n if (flags.version) {\n this.log.info(version);\n return;\n }\n\n this.cli.printHelp();\n },\n });\n\n /**\n * Create a new Alepha project based on one of the sample projects (for now, only one sample project is available)\n */\n public readonly create = $command({\n name: \"create\",\n description: \"Create a new Alepha project\",\n aliases: [\"new\"],\n args: t.text({\n title: \"name\",\n }),\n flags: t.object({\n yarn: t.optional(t.boolean({ description: \"Use Yarn package manager\" })),\n pnpm: t.optional(t.boolean({ description: \"Use pnpm package manager\" })),\n }),\n summary: false,\n handler: async ({ run, args, flags, root }) => {\n const name = args;\n const dest = join(root, name);\n\n try {\n await access(dest);\n this.log.error(\n `Directory \"${name}\" already exists. Please choose a different project name.`,\n );\n return;\n } catch {\n // Directory does not exist, proceed\n }\n\n let installCmd = \"npm install\";\n let execCmd = \"npx\";\n if (flags.yarn) {\n installCmd = \"yarn\";\n execCmd = \"yarn\";\n } else if (flags.pnpm) {\n installCmd = \"pnpm install\";\n execCmd = \"pnpm\";\n }\n\n await mkdir(dest, { recursive: true }).catch(() => null);\n\n await run(\"Downloading sample project\", () =>\n this.utils.downloadSampleProject(dest),\n );\n\n if (flags.yarn) {\n await this.utils.ensureYarn(dest);\n await run(`cd ${name} && yarn set version stable`, {\n alias: \"Setting Yarn to stable version\",\n });\n }\n\n await run(`cd ${name} && ${installCmd}`, {\n alias: \"Installing dependencies\",\n });\n\n await run(`cd ${name} && npx alepha lint`, {\n alias: \"Linting code\",\n });\n\n await run(`cd ${name} && npx alepha typecheck`, {\n alias: \"Type checking\",\n });\n\n await run(`cd ${name} && npx alepha test`, {\n alias: \"Running tests\",\n });\n\n await run(`cd ${name} && npx alepha build`, {\n alias: \"Building project\",\n });\n\n this.log.info(\"\");\n this.log.info(`$ cd ${name} && ${execCmd} alepha dev`.trim());\n this.log.info(\"\");\n },\n });\n\n /**\n * Clean the project, removing the \"dist\" directory\n */\n public readonly clean = $command({\n name: \"clean\",\n description: \"Clean the project\",\n handler: async ({ run }) => {\n await run.rm(\"./dist\");\n },\n });\n\n /**\n * Ensure the project has the necessary Alepha configuration files.\n * Add the correct dependencies to package.json and install them.\n */\n public readonly init = $command({\n name: \"init\",\n description: \"Add missing Alepha configuration files to the project\",\n flags: t.object({\n // TODO:\n // force: t.boolean({\n // description: \"If true, all config files will be overwritten\",\n // }),\n // choose package manager\n yarn: t.optional(t.boolean({ description: \"Use Yarn package manager\" })),\n // choose which dependencies to add\n api: t.optional(\n t.boolean({ description: \"Include Alepha Server dependencies\" }),\n ),\n react: t.optional(\n t.boolean({ description: \"Include Alepha React dependencies\" }),\n ),\n orm: t.optional(\n t.boolean({ description: \"Include Alepha ORM dependencies\" }),\n ),\n }),\n handler: async ({ run, flags, root }) => {\n await run(\"Ensuring Alepha configuration files\", async () => {\n await this.utils.ensureTsConfig(root);\n await this.utils.ensurePackageJson(root, flags);\n });\n\n if (flags.react) {\n // if index.html does not exist, create it\n await run(\"Ensuring index.html file\", async () => {\n await this.utils.ensureIndexHtml(root);\n });\n }\n\n // TODO: check if all alepha dependencies are same version\n\n const guessedPm = await this.utils.getPackageManager(root);\n\n if (flags.yarn || guessedPm === \"yarn\") {\n await this.utils.ensureYarn(root);\n await run(\"yarn install\", {\n alias: \"Installing dependencies with Yarn\",\n });\n } else {\n await run(\"npm install\", {\n alias: \"Installing dependencies with npm\",\n });\n }\n },\n });\n}\n","import { readFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { join } from \"node:path\";\nimport { $inject, AlephaError, t } from \"alepha\";\nimport { $command } from \"alepha/command\";\nimport { $logger } from \"alepha/logger\";\nimport { ProcessRunner } from \"../services/ProcessRunner.ts\";\nimport { ProjectUtils } from \"../services/ProjectUtils.ts\";\n\nexport class DrizzleCommands {\n log = $logger();\n runner = $inject(ProcessRunner);\n utils = $inject(ProjectUtils);\n\n /**\n * Check if database migrations are up to date\n *\n * - Loads the Alepha instance from the specified entry file.\n * - Retrieves all repository descriptors to gather database models.\n * - Reads the last migration snapshot from the migration journal.\n * - Generates the current database schema representation.\n * - Compares the current schema with the last snapshot to detect changes.\n * - If changes are detected, prompts the user to run the migration generation command!\n */\n check = $command({\n name: \"db:check-migrations\",\n description: \"Verify database migration files are up to date\",\n args: t.optional(\n t.text({\n title: \"path\",\n description: \"Path to the Alepha server entry file\",\n }),\n ),\n handler: async ({ args, root }) => {\n const rootDir = root;\n this.log.debug(`Using project root: ${rootDir}`);\n const { alepha } = await this.utils.loadAlephaFromServerEntryFile(\n rootDir,\n args,\n );\n\n const models: any[] = [];\n const repositories = alepha.descriptors(\"repository\") as any[];\n const kit = createRequire(import.meta.url)(\"drizzle-kit/api\");\n const migrationDir = join(rootDir, \"migrations\");\n\n const journalFile = await readFile(\n `${migrationDir}/meta/_journal.json`,\n \"utf-8\",\n ).catch(() => null);\n\n if (!journalFile) {\n this.log.info(`No migration journal found.`);\n return;\n }\n\n const journal = JSON.parse(journalFile);\n\n const lastMigration = journal.entries[journal.entries.length - 1];\n\n const lastSnapshot = JSON.parse(\n await readFile(\n `${migrationDir}/meta/${String(lastMigration.idx).padStart(4, \"0\")}_snapshot.json`,\n \"utf-8\",\n ),\n );\n\n for (const repository of repositories) {\n if (!models.includes(repository.table)) {\n models.push(repository.table);\n }\n }\n\n const now = kit.generateDrizzleJson(models, lastSnapshot.id);\n\n const migrationStatements = await new Promise<Array<any>>((resolve) => {\n (async () => {\n const timer = setTimeout(() => {\n resolve([{ message: \"Migration generation timed out.\" }]);\n }, 5000);\n const statements = await kit.generateMigration(lastSnapshot, now);\n clearTimeout(timer);\n resolve(statements);\n })();\n });\n\n if (migrationStatements.length === 0) {\n this.log.info(\"No changes detected.\");\n return;\n }\n\n this.log.info(\"\");\n this.log.info(\"Detected migration statements:\");\n this.log.info(\"\");\n for (const stmt of migrationStatements) {\n this.log.info(stmt);\n }\n this.log.info(\"\");\n\n this.log.info(\n `At least ${migrationStatements.length} change(s) detected.`,\n );\n this.log.info(\n \"Please, run 'alepha db:generate' to update the migration files.\",\n );\n this.log.info(\"\");\n\n throw new AlephaError(\"Database migrations are not up to date.\");\n },\n });\n\n /**\n * Generate database migration files\n *\n * - Loads the Alepha instance from the specified entry file.\n * - Retrieves all repository descriptors to gather database models.\n * - Creates temporary entity definitions based on the current database schema.\n * - Writes these definitions to a temporary schema file. (node_modules/.db/entities.ts)\n * - Invokes Drizzle Kit's CLI to generate migration files based on the current schema.\n */\n generate = $command({\n name: \"db:generate\",\n description: \"Generate migration files based on current database schema\",\n summary: false,\n args: t.optional(\n t.text({\n title: \"path\",\n description: \"Path to the Alepha server entry file\",\n }),\n ),\n handler: async ({ args, root }) => {\n await this.utils.runDrizzleKitCommand({\n root,\n args,\n command: \"generate\",\n logMessage: (providerName, dialect) =>\n `Generate '${providerName}' migrations (${dialect}) ...`,\n });\n },\n });\n\n /**\n * Push database schema changes directly to the database\n *\n * - Loads the Alepha instance from the specified entry file.\n * - Retrieves all repository descriptors to gather database models.\n * - Creates temporary entity definitions and Drizzle config.\n * - Invokes Drizzle Kit's push command to apply schema changes directly.\n */\n push = $command({\n name: \"db:push\",\n description: \"Push database schema changes directly to the database\",\n summary: false,\n args: t.optional(\n t.text({\n title: \"path\",\n description: \"Path to the Alepha server entry file\",\n }),\n ),\n handler: async ({ root, args }) => {\n await this.utils.runDrizzleKitCommand({\n root,\n args,\n command: \"push\",\n logMessage: (providerName, dialect) =>\n `Push '${providerName}' schema (${dialect}) ...`,\n });\n },\n });\n\n /**\n * Apply pending database migrations\n *\n * - Loads the Alepha instance from the specified entry file.\n * - Retrieves all repository descriptors to gather database models.\n * - Creates temporary entity definitions and Drizzle config.\n * - Invokes Drizzle Kit's migrate command to apply pending migrations.\n */\n migrate = $command({\n name: \"db:migrate\",\n description: \"Apply pending database migrations\",\n summary: false,\n args: t.optional(\n t.text({\n title: \"path\",\n description: \"Path to the Alepha server entry file\",\n }),\n ),\n handler: async ({ root, args }) => {\n await this.utils.runDrizzleKitCommand({\n root,\n args,\n command: \"migrate\",\n logMessage: (providerName, dialect) =>\n `Migrate '${providerName}' database (${dialect}) ...`,\n });\n },\n });\n\n /**\n * Launch Drizzle Studio database browser\n *\n * - Loads the Alepha instance from the specified entry file.\n * - Retrieves all repository descriptors to gather database models.\n * - Creates temporary entity definitions and Drizzle config.\n * - Invokes Drizzle Kit's studio command to launch the web-based database browser.\n */\n studio = $command({\n name: \"db:studio\",\n description: \"Launch Drizzle Studio database browser\",\n summary: false,\n args: t.optional(\n t.text({\n title: \"path\",\n description: \"Path to the Alepha server entry file\",\n }),\n ),\n handler: async ({ root, args }) => {\n await this.utils.runDrizzleKitCommand({\n root,\n args,\n command: \"studio\",\n logMessage: (providerName, dialect) =>\n `Launch Studio for '${providerName}' (${dialect}) ...`,\n });\n },\n });\n}\n","import { $inject } from \"alepha\";\nimport { $command } from \"alepha/command\";\nimport { ProcessRunner } from \"../services/ProcessRunner.ts\";\n\nexport class VerifyCommands {\n protected readonly processRunner = $inject(ProcessRunner);\n\n /**\n * Run a series of verification commands to ensure code quality and correctness.\n *\n * This command runs the following checks in order:\n * 1. Clean the project\n * 2. Format the code\n * 3. Lint the code\n * 4. Run tests\n * 5. Type check the code\n * 8. Build the project\n * 9. Clean the project again\n */\n public readonly verify = $command({\n name: \"verify\",\n description: \"Verify the Alepha project\",\n handler: async ({ run }) => {\n await run(\"alepha clean\");\n await run(\"alepha format\");\n await run(\"alepha lint\");\n await run(\"alepha test\");\n await run(\"alepha typecheck\");\n await run(\"alepha build\");\n await run(\"alepha clean\");\n },\n });\n\n /**\n * Run TypeScript type checking across the codebase with no emit.\n */\n public readonly typecheck = $command({\n name: \"typecheck\",\n description: \"Check TypeScript types across the codebase\",\n handler: async () => {\n await this.processRunner.exec(\"tsc --noEmit\");\n },\n });\n}\n","import { access, rm } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { $inject, t } from \"alepha\";\nimport { $command } from \"alepha/command\";\nimport { $logger } from \"alepha/logger\";\nimport { boot } from \"alepha/vite\";\nimport { ProcessRunner } from \"../services/ProcessRunner.ts\";\nimport { ProjectUtils } from \"../services/ProjectUtils.ts\";\n\nexport class ViteCommands {\n protected readonly log = $logger();\n protected readonly runner = $inject(ProcessRunner);\n protected readonly utils = $inject(ProjectUtils);\n\n public readonly run = $command({\n name: \"run\",\n description: \"Run a TypeScript file directly\",\n flags: t.object({\n watch: t.optional(\n t.boolean({ description: \"Watch file for changes\", alias: \"w\" }),\n ),\n }),\n summary: false,\n args: t.text({ title: \"path\", description: \"Filepath to run\" }),\n handler: async ({ args, flags, root }) => {\n await this.utils.ensureTsConfig(root);\n await this.runner.exec(`tsx ${flags.watch ? \"watch \" : \"\"}${args}`);\n },\n });\n\n /**\n * Will run the project in watch mode.\n *\n * - If an index.html file is found in the project root, it will run Vite in dev mode.\n * - Otherwise, it will look for a server entry file and run it with tsx in watch mode.\n */\n public readonly dev = $command({\n name: \"dev\",\n description: \"Run the project in development mode\",\n args: t.optional(t.text({ title: \"path\", description: \"Filepath to run\" })),\n handler: async ({ args, root }) => {\n await this.utils.ensureTsConfig(root);\n await this.utils.ensurePackageJsonModule(root);\n const entry = await boot.getServerEntry(root, args);\n this.log.trace(\"Entry file found\", { entry });\n\n try {\n await access(join(root, \"index.html\"));\n } catch {\n this.log.trace(\"No index.html found, running entry file with tsx\");\n await this.runner.exec(`tsx watch ${entry}`);\n return;\n }\n\n const configPath = await this.utils.getViteConfigPath(\n root,\n args ? entry : undefined,\n );\n this.log.trace(\"Vite config found\", { configPath });\n await this.runner.exec(`vite -c=${configPath}`);\n },\n });\n\n public readonly build = $command({\n name: \"build\",\n description: \"Build the project for production\",\n args: t.optional(\n t.text({ title: \"path\", description: \"Filepath to build\" }),\n ),\n flags: t.object({\n config: t.optional(\n t.text({ aliases: [\"c\"], description: \"Path to config file\" }),\n ),\n stats: t.optional(\n t.boolean({\n description: \"Generate build stats report\",\n }),\n ),\n }),\n handler: async ({ flags, args }) => {\n const root = process.cwd();\n await this.utils.ensureTsConfig(root);\n await this.utils.ensurePackageJsonModule(root);\n const entry = await boot.getServerEntry(root, args);\n this.log.trace(\"Entry file found\", { entry });\n\n await rm(\"dist\", { recursive: true, force: true });\n\n // DISABLED FOR NOW (waiting for vite-rolldown)\n // if (flags.lib) {\n // await this.runner.exec(\n // `tsdown${flags.config ? ` -c=${flags.config}` : \"\"}`,\n // );\n // return;\n // }\n\n const configPath = await this.utils.getViteConfigPath(\n root,\n args ? entry : undefined,\n );\n\n const env: Record<string, string> = {};\n if (flags.stats) {\n env.ALEPHA_BUILD_STATS = \"true\";\n }\n\n await this.runner.exec(`vite build -c=${configPath}`, env);\n },\n });\n\n public readonly test = $command({\n name: \"test\",\n description: \"Run tests using Vitest\",\n handler: async ({ root }) => {\n await this.utils.ensureTsConfig(root);\n const configPath = await this.utils.getViteConfigPath(root);\n await this.runner.exec(`vitest run -c=${configPath}`);\n },\n });\n}\n","import { access, readdir, readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { $inject } from \"alepha\";\nimport { $command } from \"alepha/command\";\nimport { FileSystemProvider } from \"alepha/file\";\nimport type { InlineConfig } from \"tsdown\";\nimport * as os from \"node:os\";\n\ninterface Module {\n name: string;\n dependencies: string[];\n browser?: boolean;\n node?: boolean;\n}\n\nexport class PackageBuilderCli {\n src = \"src\";\n dist = \"dist\";\n fs = $inject(FileSystemProvider);\n\n make = $command({\n root: true,\n handler: async ({ run, root }) => {\n const modules: Array<Module> = [];\n\n\n const pkg = await readFile(\"package.json\", \"utf-8\");\n const pkgData = JSON.parse(pkg);\n const packageName = pkgData.name as string;\n\n await run(\"analyze modules\", async () => {\n modules.push(...(await analyzeModules(join(root, this.src), packageName)));\n });\n\n pkgData.exports = {};\n for (const item of modules) {\n const path =\n item.name === \"core\" ? \".\" : `./${item.name.replace(\"-\", \"/\")}`;\n pkgData.exports[path] = {};\n // order is important here for compatibility\n pkgData.exports[path].types = `./src/${item.name}/index.ts`;\n if (item.browser) {\n pkgData.exports[path].browser = `./src/${item.name}/index.browser.ts`;\n }\n pkgData.exports[path].import = `./src/${item.name}/index.ts`;\n pkgData.exports[path].require = `./src/${item.name}/index.ts`;\n }\n if (packageName === \"alepha\") {\n pkgData.exports[\"./tsconfig\"] = \"./tsconfig.base.json\";\n pkgData.exports[\"./package.json\"] = \"./package.json\";\n }\n await this.fs.writeFile(\"package.json\", JSON.stringify(pkgData, null, 2));\n\n const tmpDir = join(root, \"node_modules/.alepha\");\n await this.fs.mkdir(tmpDir, { recursive: true }).catch(() => {});\n\n await this.fs.writeFile(\n join(tmpDir, \"module-dependencies.json\"),\n JSON.stringify(modules, null, 2),\n );\n\n const external = [\n \"alepha\",\n ...modules.map((item) => `alepha/${item.name}`),\n ];\n\n await run.rm(this.dist);\n\n const build = async (item: Module) => {\n const entries: InlineConfig[] = [];\n const src = join(root, this.src, item.name);\n const dest = join(root, this.dist, item.name);\n\n entries.push({\n entry: join(src, \"index.ts\"),\n outDir: dest,\n format: [\"esm\", \"cjs\"],\n sourcemap: true,\n fixedExtension: false,\n platform: \"node\", // TODO: node must be enabled only if index.node.ts exists\n external,\n });\n\n if (item.browser) {\n entries.push({\n entry: join(src, \"index.browser.ts\"),\n outDir: dest,\n platform: \"browser\",\n sourcemap: true,\n dts: false,\n external,\n });\n }\n\n const config = join(tmpDir, `tsdown-${item.name}.config.js`);\n await this.fs.writeFile(\n config,\n `export default ${JSON.stringify(entries, null, 2)};`,\n );\n await run(`npx tsdown -c=${config}`);\n await this.fs.rm(config);\n };\n\n\n const concurrency = Math.ceil(os.cpus().length / 2);\n const queue = modules.slice();\n const workers: Promise<void>[] = [];\n for (let i = 0; i < concurrency; i++) {\n const worker = (async () => {\n while (queue.length > 0) {\n const item = queue.shift();\n if (item) {\n await build(item);\n } else {\n await new Promise((r) => setTimeout(r, 100));\n }\n }\n })();\n workers.push(worker);\n }\n await Promise.all(workers);\n },\n });\n}\n\nasync function getAllFiles(dir: string): Promise<string[]> {\n const files: string[] = [];\n\n async function scan(currentDir: string) {\n const entries = await readdir(currentDir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = join(currentDir, entry.name);\n\n if (entry.isDirectory()) {\n await scan(fullPath);\n } else if (entry.isFile() && /\\.(ts|tsx)$/.test(entry.name)) {\n files.push(fullPath);\n }\n }\n }\n\n await scan(dir);\n return files;\n}\n\nfunction removeComments(content: string): string {\n // Remove single-line comments\n let cleaned = content.replace(/\\/\\/.*$/gm, \"\");\n\n // Remove multi-line comments\n cleaned = cleaned.replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\");\n\n return cleaned;\n}\n\nfunction extractAlephaDependencies(content: string, packageName: string, moduleName:string): string[] {\n const deps = new Set<string>();\n const cleanedContent = removeComments(content);\n\n // Match: from \"alepha/xxx\" or from 'alepha/xxx'\n const importRegex = new RegExp(`from \"${packageName}/([a-zA-Z0-9_/]+)\";`, \"g\");\n\n const matches = cleanedContent.matchAll(importRegex);\n for (const match of matches) {\n deps.add(match[1]);\n }\n\n return Array.from(deps);\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction detectCircularDependencies(modules: Module[]): void {\n const moduleMap = new Map(modules.map((m) => [m.name, m.dependencies]));\n\n function hasCycle(\n moduleName: string,\n visited: Set<string> = new Set(),\n path: string[] = [],\n ): string[] | null {\n if (visited.has(moduleName)) {\n // Found a cycle, return the path\n const cycleStart = path.indexOf(moduleName);\n return [...path.slice(cycleStart), moduleName];\n }\n\n const deps = moduleMap.get(moduleName);\n if (!deps) return null;\n\n visited.add(moduleName);\n path.push(moduleName);\n\n for (const dep of deps) {\n const cycle = hasCycle(dep, new Set(visited), [...path]);\n if (cycle) return cycle;\n }\n\n return null;\n }\n\n for (const module of modules) {\n const cycle = hasCycle(module.name);\n if (cycle) {\n throw new Error(`Circular dependency detected: ${cycle.join(\" -> \")}`);\n }\n }\n}\n\nexport async function analyzeModules(srcDir: string, packageName: string): Promise<Module[]> {\n const modules: Module[] = [];\n const entries = await readdir(srcDir, { withFileTypes: true });\n\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const moduleName = entry.name;\n const modulePath = join(srcDir, moduleName);\n const dependencies = new Set<string>();\n\n // Check for browser/node entry points\n const hasBrowser = await fileExists(join(modulePath, \"index.browser.ts\"));\n const hasNode = await fileExists(join(modulePath, \"index.node.ts\"));\n\n // Get all .ts/.tsx files in this module\n const files = await getAllFiles(modulePath);\n\n for (const file of files) {\n const content = await readFile(file, \"utf-8\");\n const deps = extractAlephaDependencies(content, packageName, moduleName);\n for (const dep of deps) {\n if (dep.endsWith(\".ts\")) {\n throw new Error(\n `Invalid dependency '${dep}' in module '${moduleName}'. Do not include file extensions in Alepha module imports.`,\n );\n }\n if (dep.includes(\"-\")) {\n throw new Error(\n `Invalid dependency '${dep}' in module '${moduleName}'. Use '/' instead of '-' in Alepha module imports.`,\n );\n }\n dependencies.add(dep);\n }\n }\n\n const module: Module = {\n name: moduleName,\n dependencies: Array.from(dependencies),\n };\n\n if (hasBrowser) module.browser = true;\n if (hasNode) module.node = true;\n\n modules.push(module);\n }\n }\n\n // Check for circular dependencies\n detectCircularDependencies(modules);\n\n return modules;\n}\n","import { $module } from \"alepha\";\nimport { BiomeCommands } from \"./commands/BiomeCommands.ts\";\nimport { CoreCommands } from \"./commands/CoreCommands.ts\";\nimport { DrizzleCommands } from \"./commands/DrizzleCommands.ts\";\nimport { VerifyCommands } from \"./commands/VerifyCommands.ts\";\nimport { ViteCommands } from \"./commands/ViteCommands.ts\";\nimport { ProcessRunner } from \"./services/ProcessRunner.ts\";\n\nexport * from \"./packageBuilderCli.ts\";\nexport * from \"./version.ts\";\n\nexport const AlephaCli = $module({\n name: \"alepha.cli\",\n services: [\n ProcessRunner,\n CoreCommands,\n DrizzleCommands,\n VerifyCommands,\n ViteCommands,\n BiomeCommands,\n ],\n});\n"],"x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"mappings":"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"}