screw-up 1.13.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analyzer.d.ts +2 -2
- package/dist/cli-internal.d.ts +3 -3
- package/dist/cli-internal.d.ts.map +1 -1
- package/dist/cli.d.ts +2 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/fast-tags.d.ts +2 -2
- package/dist/generated/packageMetadata.d.ts +4 -4
- package/dist/git-operations.d.ts +2 -2
- package/dist/index.cjs +3 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.js +3 -3
- package/dist/internal.d.ts +3 -3
- package/dist/internal.d.ts.map +1 -1
- package/dist/main.cjs +183 -9
- package/dist/main.cjs.map +1 -1
- package/dist/main.d.ts +2 -2
- package/dist/main.js +184 -10
- package/dist/main.js.map +1 -1
- package/dist/{packageMetadata-B-SWvYlj.cjs → packageMetadata-BP1lkMwy.cjs} +28 -8
- package/dist/packageMetadata-BP1lkMwy.cjs.map +1 -0
- package/dist/{packageMetadata-CbtDrpYF.js → packageMetadata-DFL693kZ.js} +28 -8
- package/dist/packageMetadata-DFL693kZ.js.map +1 -0
- package/dist/types.d.ts +2 -2
- package/dist/vite-plugin.d.ts +2 -2
- package/package.json +6 -6
- package/dist/packageMetadata-B-SWvYlj.cjs.map +0 -1
- package/dist/packageMetadata-CbtDrpYF.js.map +0 -1
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sources":["../node_modules/tar-vern/dist/index.js","../src/cli-internal.ts","../src/cli.ts","../src/main.ts"],"sourcesContent":["/*!\n * name: tar-vern\n * version: 1.3.0\n * description: Tape archiver library for Typescript\n * author: Kouji Matsui (@kekyo@mi.kekyo.net)\n * license: MIT\n * repository.url: https://github.com/kekyo/tar-vern.git\n * git.commit.hash: 7ac8b1f258e17c93767650ef047a2db9f0ffd417\n */\nimport { Readable } from \"stream\";\nimport { createGzip, createGunzip } from \"zlib\";\nimport { createReadStream, createWriteStream } from \"fs\";\nimport { stat, mkdir, writeFile, readdir } from \"fs/promises\";\nimport { pipeline } from \"stream/promises\";\nimport { join, dirname } from \"path\";\nconst MAX_NAME = 100;\nconst MAX_PREFIX = 155;\nconst getUName = (candidateName, candidateId, reflectStat) => {\n return candidateName ?? (reflectStat === \"all\" ? candidateId.toString() : \"root\");\n};\nconst getBuffer = (data) => {\n return Buffer.isBuffer(data) ? data : Buffer.from(data, \"utf8\");\n};\nconst createDirectoryItem = async (path, reflectStat, options, signal) => {\n const rs = reflectStat ?? \"none\";\n if (rs !== \"none\" && options?.directoryPath) {\n signal?.throwIfAborted();\n const stats = await stat(options.directoryPath);\n const mode = options?.mode ?? stats.mode;\n const uid = options?.uid ?? stats.uid;\n const gid = options?.gid ?? stats.gid;\n const date = options?.date ?? stats.mtime;\n const uname = getUName(options?.uname, stats.uid, rs);\n const gname = getUName(options?.gname, stats.gid, rs);\n return {\n kind: \"directory\",\n path,\n mode,\n uname,\n gname,\n uid,\n gid,\n date\n };\n } else {\n const mode = options?.mode ?? 493;\n const uid = options?.uid ?? 0;\n const gid = options?.gid ?? 0;\n const date = options?.date ?? /* @__PURE__ */ new Date();\n const uname = getUName(options?.uname, void 0, rs);\n const gname = getUName(options?.gname, void 0, rs);\n return {\n kind: \"directory\",\n path,\n mode,\n uname,\n gname,\n uid,\n gid,\n date\n };\n }\n};\nconst createFileItem = async (path, content, options, signal) => {\n signal?.throwIfAborted();\n const mode = options?.mode ?? 420;\n const uid = options?.uid ?? 0;\n const gid = options?.gid ?? 0;\n const date = options?.date ?? /* @__PURE__ */ new Date();\n const uname = options?.uname ?? \"root\";\n const gname = options?.gname ?? \"root\";\n return {\n kind: \"file\",\n path,\n mode,\n uname,\n gname,\n uid,\n gid,\n date,\n content\n };\n};\nconst createReadableFileItem = async (path, readable, options, signal) => {\n const mode = options?.mode ?? 420;\n const uid = options?.uid ?? 0;\n const gid = options?.gid ?? 0;\n const date = options?.date ?? /* @__PURE__ */ new Date();\n const uname = options?.uname ?? \"root\";\n const gname = options?.gname ?? \"root\";\n let length = options?.length;\n if (!length) {\n const chunks = [];\n length = 0;\n for await (const chunk of readable) {\n signal?.throwIfAborted();\n const buffer = getBuffer(chunk);\n chunks.push(buffer);\n length += buffer.length;\n }\n return {\n kind: \"file\",\n path,\n mode,\n uname,\n gname,\n uid,\n gid,\n date,\n content: {\n kind: \"readable\",\n length,\n readable: Readable.from(chunks, { signal })\n }\n };\n } else {\n return {\n kind: \"file\",\n path,\n mode,\n uname,\n gname,\n uid,\n gid,\n date,\n content: {\n kind: \"readable\",\n length,\n readable\n }\n };\n }\n};\nconst createGeneratorFileItem = async (path, generator, options, signal) => {\n const mode = options?.mode ?? 420;\n const uid = options?.uid ?? 0;\n const gid = options?.gid ?? 0;\n const date = options?.date ?? /* @__PURE__ */ new Date();\n const uname = options?.uname ?? \"root\";\n const gname = options?.gname ?? \"root\";\n let length = options?.length;\n if (!length) {\n const chunks = [];\n length = 0;\n for await (const chunk of generator) {\n signal?.throwIfAborted();\n const buffer = getBuffer(chunk);\n chunks.push(buffer);\n length += buffer.length;\n }\n return {\n kind: \"file\",\n path,\n mode,\n uname,\n gname,\n uid,\n gid,\n date,\n content: {\n kind: \"readable\",\n length,\n readable: Readable.from(chunks, { signal })\n }\n };\n } else {\n return {\n kind: \"file\",\n path,\n mode,\n uname,\n gname,\n uid,\n gid,\n date,\n content: {\n kind: \"generator\",\n length,\n generator\n }\n };\n }\n};\nconst createReadFileItem = async (path, filePath, reflectStat, options, signal) => {\n const rs = reflectStat ?? \"exceptName\";\n signal?.throwIfAborted();\n const stats = await stat(filePath);\n const reader = createReadStream(filePath, { signal });\n const mode = options?.mode ?? (rs !== \"none\" ? stats.mode : void 0);\n const uid = options?.uid ?? (rs !== \"none\" ? stats.uid : void 0);\n const gid = options?.gid ?? (rs !== \"none\" ? stats.gid : void 0);\n const date = options?.date ?? (rs !== \"none\" ? stats.mtime : void 0);\n const uname = getUName(options?.uname, stats.uid, rs);\n const gname = getUName(options?.gname, stats.gid, rs);\n return await createReadableFileItem(path, reader, {\n length: stats.size,\n mode,\n uname,\n gname,\n uid,\n gid,\n date\n }, signal);\n};\nconst storeReaderToFile = async (reader, path, signal) => {\n const writer = createWriteStream(path, { signal });\n await pipeline(reader, writer, { signal });\n};\nconst getAllFilesInDirectory = async (baseDir, signal) => {\n const collectFiles = async (currentDir, relativePath) => {\n signal?.throwIfAborted();\n try {\n const entries = await readdir(currentDir, { withFileTypes: true });\n const result = [];\n const tasks = entries.map(async (entry) => {\n signal?.throwIfAborted();\n const entryRelativePath = join(relativePath, entry.name);\n if (entry.isDirectory()) {\n const entryFullPath = join(currentDir, entry.name);\n const directoryContents = await collectFiles(entryFullPath, entryRelativePath);\n return [entryRelativePath, ...directoryContents];\n } else {\n return [entryRelativePath];\n }\n });\n const allResults = await Promise.all(tasks);\n for (const entryResults of allResults) {\n result.push(...entryResults);\n }\n return result;\n } catch (error) {\n console.warn(`Warning: Could not read directory ${currentDir}:`, error);\n return [];\n }\n };\n return await collectFiles(baseDir, \"\");\n};\nconst createEntryItemGenerator = async function* (baseDir, relativePaths, includeDirectory, reflectStat, signal) {\n const rs = reflectStat ?? \"exceptName\";\n const includeDir = includeDirectory ?? true;\n const pathsToProcess = relativePaths ?? await getAllFilesInDirectory(baseDir, signal);\n for (const relativePath of pathsToProcess) {\n signal?.throwIfAborted();\n const fsPath = join(baseDir, relativePath);\n try {\n signal?.throwIfAborted();\n const stats = await stat(fsPath);\n if (includeDir && stats.isDirectory()) {\n yield await createDirectoryItem(relativePath, rs, {\n directoryPath: fsPath\n }, signal);\n } else if (stats.isFile()) {\n yield await createReadFileItem(relativePath, fsPath, rs, void 0, signal);\n }\n } catch (error) {\n console.warn(`Warning: Could not access ${fsPath}:`, error);\n continue;\n }\n }\n};\nconst extractTo = async (iterator, basePath, signal) => {\n for await (const entry of iterator) {\n signal?.throwIfAborted();\n const targetPath = join(basePath, entry.path);\n if (entry.kind === \"directory\") {\n try {\n signal?.throwIfAborted();\n await mkdir(targetPath, { recursive: true, mode: entry.mode });\n } catch (error) {\n if (error.code !== \"EEXIST\") {\n throw error;\n }\n }\n } else if (entry.kind === \"file\") {\n const parentDir = dirname(targetPath);\n signal?.throwIfAborted();\n await mkdir(parentDir, { recursive: true });\n const fileEntry = entry;\n const content = await fileEntry.getContent(\"buffer\");\n await writeFile(targetPath, content, { mode: entry.mode, signal });\n }\n }\n};\nconst utf8ByteLength = (str) => {\n return Buffer.byteLength(str, \"utf8\");\n};\nconst truncateUtf8Safe = (str, maxBytes) => {\n let total = 0;\n let i = 0;\n while (i < str.length) {\n const codePoint = str.codePointAt(i);\n const char = String.fromCodePoint(codePoint);\n const charBytes = Buffer.byteLength(char, \"utf8\");\n if (total + charBytes > maxBytes) break;\n total += charBytes;\n i += char.length;\n }\n return str.slice(0, i);\n};\nconst splitPath = (path) => {\n if (utf8ByteLength(path) <= MAX_NAME) {\n return { prefix: \"\", name: path };\n }\n const parts = path.split(\"/\");\n let name = parts.pop() ?? \"\";\n let prefix = parts.join(\"/\");\n if (utf8ByteLength(name) > MAX_NAME) {\n name = truncateUtf8Safe(name, MAX_NAME);\n }\n while (utf8ByteLength(prefix) > MAX_PREFIX) {\n prefix = truncateUtf8Safe(prefix, MAX_PREFIX);\n }\n return { prefix, name };\n};\nconst getOctalBytes = (value, length) => {\n const str = value.toString(8).padStart(length - 1, \"0\") + \"\\0\";\n return Buffer.from(str, \"ascii\");\n};\nconst getPaddedBytes = (buffer) => {\n const extra = buffer.length % 512;\n if (extra === 0) {\n return buffer;\n } else {\n return Buffer.concat([buffer, Buffer.alloc(512 - extra, 0)]);\n }\n};\nconst terminatorBytes = Buffer.alloc(1024, 0);\nconst createTarHeader = (type, path, size, mode, uname, gname, uid, gid, date) => {\n const buffer = Buffer.alloc(512, 0);\n const { name, prefix } = splitPath(path);\n buffer.write(name, 0, 100, \"utf8\");\n getOctalBytes(mode & 4095, 8).copy(buffer, 100);\n getOctalBytes(uid, 8).copy(buffer, 108);\n getOctalBytes(gid, 8).copy(buffer, 116);\n getOctalBytes(size, 12).copy(buffer, 124);\n getOctalBytes(Math.floor(date.getTime() / 1e3), 12).copy(buffer, 136);\n Buffer.from(\" \", \"ascii\").copy(buffer, 148);\n if (type === \"file\") {\n buffer.write(\"0\", 156, 1, \"ascii\");\n } else {\n buffer.write(\"5\", 156, 1, \"ascii\");\n }\n buffer.write(\"ustar\\0\", 257, 6, \"ascii\");\n buffer.write(\"00\", 263, 2, \"ascii\");\n buffer.write(uname, 265, 32, \"utf8\");\n buffer.write(gname, 297, 32, \"utf8\");\n buffer.write(prefix, 345, 155, \"utf8\");\n let sum = 0;\n for (let i = 0; i < 512; i++) {\n sum += buffer[i];\n }\n getOctalBytes(sum, 8).copy(buffer, 148);\n return buffer;\n};\nconst createTarPacker = (entryItemGenerator, compressionType, signal) => {\n const entryItemIterator = async function* () {\n for await (const entryItem of entryItemGenerator) {\n signal?.throwIfAborted();\n switch (entryItem.kind) {\n // Entry is a file\n case \"file\": {\n const entryItemContent = entryItem.content;\n if (typeof entryItemContent === \"string\" || Buffer.isBuffer(entryItemContent)) {\n const contentBytes = getBuffer(entryItemContent);\n const tarHeaderBytes = createTarHeader(\n \"file\",\n entryItem.path,\n contentBytes.length,\n entryItem.mode,\n entryItem.uname,\n entryItem.gname,\n entryItem.uid,\n entryItem.gid,\n entryItem.date\n );\n yield tarHeaderBytes;\n const totalPaddedContentBytes = getPaddedBytes(contentBytes);\n yield totalPaddedContentBytes;\n } else {\n const content = entryItemContent;\n const tarHeaderBytes = createTarHeader(\n \"file\",\n entryItem.path,\n content.length,\n entryItem.mode,\n entryItem.uname,\n entryItem.gname,\n entryItem.uid,\n entryItem.gid,\n entryItem.date\n );\n yield tarHeaderBytes;\n let position = 0;\n switch (content.kind) {\n // Content is a generator\n case \"generator\": {\n for await (const contentBytes of content.generator) {\n signal?.throwIfAborted();\n yield contentBytes;\n position += contentBytes.length;\n }\n break;\n }\n // Content is a readable stream\n case \"readable\": {\n for await (const chunk of content.readable) {\n signal?.throwIfAborted();\n const contentBytes = getBuffer(chunk);\n yield contentBytes;\n position += contentBytes.length;\n }\n break;\n }\n }\n if (position % 512 !== 0) {\n signal?.throwIfAborted();\n yield Buffer.alloc(512 - position % 512, 0);\n }\n }\n break;\n }\n // Entry is a directory\n case \"directory\": {\n const tarHeaderBytes = createTarHeader(\n \"directory\",\n entryItem.path,\n 0,\n entryItem.mode,\n entryItem.uname,\n entryItem.gname,\n entryItem.uid,\n entryItem.gid,\n entryItem.date\n );\n yield tarHeaderBytes;\n break;\n }\n }\n }\n yield terminatorBytes;\n };\n const ct = compressionType ?? \"none\";\n switch (ct) {\n // No compression\n case \"none\": {\n return Readable.from(entryItemIterator(), { signal });\n }\n // Gzip compression\n case \"gzip\": {\n const gzipStream = createGzip({ level: 9 });\n const entryItemStream = Readable.from(entryItemIterator(), { signal });\n entryItemStream.pipe(gzipStream);\n return gzipStream;\n }\n }\n};\nconst parseOctalBytes = (buffer, offset, length) => {\n const str = buffer.subarray(offset, offset + length).toString(\"ascii\").replace(/\\0/g, \"\").trim();\n return str ? parseInt(str, 8) : 0;\n};\nconst parseString = (buffer, offset, length) => {\n return buffer.subarray(offset, offset + length).toString(\"utf8\").replace(/\\0/g, \"\").trim();\n};\nconst readExactBytes = async (iterator, size, signal) => {\n const chunks = [];\n let totalRead = 0;\n while (totalRead < size) {\n signal?.throwIfAborted();\n const { value, done } = await iterator.next();\n if (done) {\n if (totalRead === 0) {\n return void 0;\n } else {\n throw new Error(`Unexpected end of stream: expected ${size} bytes, got ${totalRead} bytes`);\n }\n }\n const chunk = getBuffer(value);\n const needed = size - totalRead;\n if (chunk.length <= needed) {\n chunks.push(chunk);\n totalRead += chunk.length;\n } else {\n chunks.push(chunk.subarray(0, needed));\n await iterator.return?.(chunk.subarray(needed));\n totalRead = size;\n }\n }\n return Buffer.concat(chunks, size);\n};\nconst skipExactBytes = async (iterator, size, signal) => {\n let totalSkipped = 0;\n while (totalSkipped < size) {\n signal?.throwIfAborted();\n const { value, done } = await iterator.next();\n if (done) {\n throw new Error(`Unexpected end of stream: expected to skip ${size} bytes, skipped ${totalSkipped} bytes`);\n }\n const chunk = getBuffer(value);\n const needed = size - totalSkipped;\n if (chunk.length <= needed) {\n totalSkipped += chunk.length;\n } else {\n await iterator.return?.(chunk.subarray(needed));\n totalSkipped = size;\n }\n }\n};\nconst skipPaddingBytesTo512Boundary = async (iterator, contentSize, signal) => {\n const padding = (512 - contentSize % 512) % 512;\n if (padding > 0) {\n await skipExactBytes(iterator, padding, signal);\n }\n};\nconst parseTarHeader = (buffer) => {\n if (buffer.every((b) => b === 0)) {\n return void 0;\n }\n const name = parseString(buffer, 0, 100);\n const mode = parseOctalBytes(buffer, 100, 8);\n const uid = parseOctalBytes(buffer, 108, 8);\n const gid = parseOctalBytes(buffer, 116, 8);\n const size = parseOctalBytes(buffer, 124, 12);\n const mtime = new Date(parseOctalBytes(buffer, 136, 12) * 1e3);\n const checksum = parseOctalBytes(buffer, 148, 8);\n const typeflag = parseString(buffer, 156, 1);\n const magic = parseString(buffer, 257, 6);\n const uname = parseString(buffer, 265, 32);\n const gname = parseString(buffer, 297, 32);\n const prefix = parseString(buffer, 345, 155);\n if (magic !== \"ustar\") {\n throw new Error(`Invalid tar format: magic=\"${magic}\"`);\n }\n let calculatedSum = 0;\n for (let i = 0; i < 512; i++) {\n if (i >= 148 && i < 156) {\n calculatedSum += 32;\n } else {\n calculatedSum += buffer[i];\n }\n }\n if (calculatedSum !== checksum) {\n throw new Error(`Invalid checksum: expected ${checksum}, got ${calculatedSum}`);\n }\n let path = prefix ? `${prefix}/${name}` : name;\n if (path.endsWith(\"/\")) {\n path = path.slice(0, -1);\n }\n const kind = typeflag === \"5\" ? \"directory\" : \"file\";\n return {\n kind,\n path,\n size,\n mode,\n uid,\n gid,\n mtime,\n uname: uname || uid.toString(),\n gname: gname || gid.toString(),\n checksum,\n consumed: false\n };\n};\nconst createBufferedAsyncIterator = (iterable, signal) => {\n const buffer = [];\n const iterator = iterable[Symbol.asyncIterator]();\n return {\n next: async () => {\n signal?.throwIfAborted();\n if (buffer.length > 0) {\n return { value: buffer.shift(), done: false };\n }\n return iterator.next();\n },\n return: async (value) => {\n if (value !== void 0) {\n buffer.unshift(value);\n }\n return { value: void 0, done: false };\n }\n };\n};\nconst createReadableFromIterator = (iterator, size, signal, consumedRef) => {\n const generator = async function* () {\n let remainingBytes = size;\n while (remainingBytes > 0) {\n signal?.throwIfAborted();\n const { value, done } = await iterator.next();\n if (done) {\n throw new Error(`Unexpected end of stream: expected ${size} bytes, remaining ${remainingBytes} bytes`);\n }\n const chunk = getBuffer(value);\n if (chunk.length <= remainingBytes) {\n remainingBytes -= chunk.length;\n yield chunk;\n } else {\n const needed = chunk.subarray(0, remainingBytes);\n const excess = chunk.subarray(remainingBytes);\n remainingBytes = 0;\n await iterator.return?.(excess);\n yield needed;\n break;\n }\n }\n await skipPaddingBytesTo512Boundary(iterator, size, signal);\n consumedRef.consumed = true;\n };\n return Readable.from(generator(), { signal });\n};\nconst createTarExtractor = async function* (readable, compressionType, signal) {\n const ct = compressionType ?? \"none\";\n let inputStream;\n switch (ct) {\n case \"gzip\":\n const gunzip = createGunzip();\n readable.pipe(gunzip);\n inputStream = gunzip;\n break;\n case \"none\":\n default:\n inputStream = readable;\n break;\n }\n const iterator = createBufferedAsyncIterator(inputStream, signal);\n let header;\n while (true) {\n signal?.throwIfAborted();\n if (header?.kind === \"file\" && !header.consumed) {\n await skipExactBytes(iterator, header.size, signal);\n await skipPaddingBytesTo512Boundary(iterator, header.size, signal);\n header.consumed = true;\n }\n let headerBuffer;\n try {\n headerBuffer = await readExactBytes(iterator, 512, signal);\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"Unexpected end of stream\")) {\n throw new Error(\"Invalid tar format: incomplete header\");\n }\n throw error;\n }\n if (headerBuffer === void 0) {\n break;\n }\n header = parseTarHeader(headerBuffer);\n if (!header) {\n const secondBlock = await readExactBytes(iterator, 512, signal);\n if (secondBlock === void 0 || secondBlock.every((b) => b === 0)) {\n break;\n }\n throw new Error(\"Invalid tar format: expected terminator block\");\n }\n if (header.kind === \"directory\") {\n yield {\n kind: \"directory\",\n path: header.path,\n mode: header.mode,\n uid: header.uid,\n gid: header.gid,\n uname: header.uname,\n gname: header.gname,\n date: header.mtime\n };\n } else {\n const currentHeader = header;\n yield {\n kind: \"file\",\n path: currentHeader.path,\n mode: currentHeader.mode,\n uid: currentHeader.uid,\n gid: currentHeader.gid,\n uname: currentHeader.uname,\n gname: currentHeader.gname,\n date: currentHeader.mtime,\n getContent: async (type) => {\n if (currentHeader.consumed) {\n throw new Error(\"Content has already been consumed. Multiple calls to getContent are not supported.\");\n }\n switch (type) {\n // For string\n case \"string\": {\n const dataBuffer = await readExactBytes(iterator, currentHeader.size, signal);\n if (dataBuffer === void 0) {\n throw new Error(`Unexpected end of stream while reading file data for ${currentHeader.path}`);\n }\n await skipPaddingBytesTo512Boundary(iterator, currentHeader.size, signal);\n currentHeader.consumed = true;\n return dataBuffer.toString(\"utf8\");\n }\n // For buffer\n case \"buffer\": {\n const dataBuffer = await readExactBytes(iterator, currentHeader.size, signal);\n if (dataBuffer === void 0) {\n throw new Error(`Unexpected end of stream while reading file data for ${currentHeader.path}`);\n }\n await skipPaddingBytesTo512Boundary(iterator, currentHeader.size, signal);\n currentHeader.consumed = true;\n return dataBuffer;\n }\n // For Readble stream\n case \"readable\": {\n const readable2 = createReadableFromIterator(iterator, currentHeader.size, signal, currentHeader);\n return readable2;\n }\n default:\n throw new Error(`Unsupported content type: ${type}`);\n }\n }\n };\n }\n }\n};\nexport {\n createDirectoryItem,\n createEntryItemGenerator,\n createFileItem,\n createGeneratorFileItem,\n createReadFileItem,\n createReadableFileItem,\n createTarExtractor,\n createTarPacker,\n extractTo,\n storeReaderToFile\n};\n//# sourceMappingURL=index.js.map\n","// screw-up - Easy package metadata inserter on Vite plugin\n// Copyright (c) Kouji Matsui (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/screw-up/\n\nimport { join } from 'path';\nimport { createReadStream, existsSync } from 'fs';\nimport { mkdir, mkdtemp, writeFile, copyFile, rm } from 'fs/promises';\nimport {\n createTarPacker,\n storeReaderToFile,\n extractTo,\n createTarExtractor,\n createEntryItemGenerator,\n} from 'tar-vern';\nimport { spawn } from 'child_process';\nimport { tmpdir } from 'os';\nimport {\n resolveRawPackageJsonObject,\n findWorkspaceRoot,\n collectWorkspaceSiblings,\n replacePeerDependenciesWildcards,\n Logger,\n} from './internal';\nimport { getFetchGitMetadata } from './analyzer';\n\n// We use async I/O except 'existsSync', because 'exists' will throw an error if the file does not exist.\n\n//////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Execute npm pack and return the generated tarball path\n * @param targetDir - Target directory to pack\n * @param packDestDir - Directory to store the generated tarball (must exist)\n * @returns Path to generated tarball\n */\nconst runNpmPack = async (\n targetDir: string,\n packDestDir: string\n): Promise<string> => {\n return new Promise((res, rej) => {\n const npmProcess = spawn(\n 'npm',\n ['pack', '--pack-destination', packDestDir],\n {\n cwd: targetDir,\n stdio: ['ignore', 'pipe', 'pipe'],\n }\n );\n\n let stdout = '';\n let stderr = '';\n\n npmProcess.stdout.on('data', (data) => {\n stdout += data.toString();\n });\n\n npmProcess.stderr.on('data', (data) => {\n stderr += data.toString();\n });\n\n npmProcess.on('close', (code) => {\n if (code === 0) {\n // npm pack outputs the filename on stdout (last line or line ending with .tgz)\n const lines = stdout.trim().split('\\n');\n // Find the line that ends with .tgz (actual filename) or use the last line\n const filename =\n lines.find((line) => line.trim().endsWith('.tgz')) ||\n lines[lines.length - 1];\n if (filename && filename.trim().endsWith('.tgz')) {\n const fullPath = join(packDestDir, filename.trim());\n res(fullPath);\n } else {\n rej(new Error('npm pack did not output a valid .tgz filename'));\n }\n } else {\n const errorMessage = `npm pack failed with exit code ${code}`;\n const fullError = stderr\n ? `${errorMessage}\\nstderr: ${stderr}`\n : errorMessage;\n if (stdout) {\n rej(new Error(`${fullError}\\nstdout: ${stdout}`));\n } else {\n rej(new Error(fullError));\n }\n }\n });\n\n npmProcess.on('error', (error) => {\n rej(new Error(`Failed to spawn npm pack: ${error.message}`));\n });\n });\n};\n\n//////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Packed result\n */\nexport interface PackedResult {\n readonly packageFileName: string;\n readonly metadata: any;\n}\n\n/**\n * Pack assets using npm pack delegation method\n * @param targetDir - Target directory to pack\n * @param outputDir - Output directory to write the tarball\n * @param checkWorkingDirectoryStatus - Check working directory status\n * @param inheritableFields - Package metadata fields that should be inherited from parent\n * @param readmeReplacementPath - Optional path to replacement README file\n * @param replacePeerDepsWildcards - Replace \"*\" in peerDependencies with actual versions\n * @param peerDepsVersionPrefix - Version prefix for replaced peerDependencies\n * @param alwaysOverrideVersionFromGit - Always override version from Git (default: true)\n * @returns Package metadata (package.json) or undefined if failed\n */\nexport const packAssets = async (\n targetDir: string,\n outputDir: string,\n checkWorkingDirectoryStatus: boolean,\n alwaysOverrideVersionFromGit: boolean,\n inheritableFields: Set<string>,\n readmeReplacementPath: string | undefined,\n replacePeerDepsWildcards: boolean,\n peerDepsVersionPrefix: string,\n logger: Logger\n): Promise<PackedResult | undefined> => {\n // Check if target directory exists\n if (!existsSync(targetDir)) {\n throw new Error(`Target directory is not found: ${targetDir}`);\n }\n\n let readmeReplacementCandidatePath = readmeReplacementPath;\n if (\n readmeReplacementCandidatePath &&\n !existsSync(readmeReplacementCandidatePath)\n ) {\n throw new Error(\n `README replacement file is not found: ${readmeReplacementCandidatePath}`\n );\n }\n\n // Get Git metadata fetcher function\n const fetchGitMetadata = getFetchGitMetadata(\n targetDir,\n checkWorkingDirectoryStatus,\n logger\n );\n\n // Resolve package metadata with source tracking\n const result = await resolveRawPackageJsonObject(\n targetDir,\n fetchGitMetadata,\n alwaysOverrideVersionFromGit,\n inheritableFields,\n logger\n );\n\n let resolvedPackageJson = result.metadata;\n\n // Check if package is private\n if (resolvedPackageJson?.private) {\n return undefined;\n }\n\n // Extract README replacement directive on package.json\n const packageJsonReadme = resolvedPackageJson.readme;\n if (packageJsonReadme) {\n // When does not override by parameter (CLI)\n if (!readmeReplacementCandidatePath) {\n const packageJsonReadmeDir = result.sourceMap.get('readme');\n const packageJsonReadmePath = join(\n packageJsonReadmeDir,\n packageJsonReadme\n );\n if (!existsSync(packageJsonReadmePath)) {\n throw new Error(\n `README replacement file is not found: ${packageJsonReadmePath}`\n );\n }\n readmeReplacementCandidatePath = packageJsonReadmePath;\n }\n // Always remove it.\n delete resolvedPackageJson.readme;\n }\n\n // Replace peerDependencies wildcards if enabled and in workspace\n if (replacePeerDepsWildcards) {\n const workspaceRoot = await findWorkspaceRoot(targetDir, logger);\n if (workspaceRoot) {\n const siblings = await collectWorkspaceSiblings(\n workspaceRoot,\n fetchGitMetadata,\n alwaysOverrideVersionFromGit,\n inheritableFields,\n logger\n );\n if (siblings.size > 0) {\n resolvedPackageJson = replacePeerDependenciesWildcards(\n resolvedPackageJson,\n siblings,\n peerDepsVersionPrefix\n );\n }\n }\n }\n\n // Create temporary directory for npm pack\n const baseTempDir = await mkdtemp(join(tmpdir(), 'screw-up-npm-pack-'));\n await mkdir(baseTempDir, { recursive: true });\n\n try {\n // Step 1: Execute npm pack to generate initial tarball\n const npmTarballPath = await runNpmPack(targetDir, baseTempDir);\n\n // Step 2: Extract the npm-generated tarball into staging directory\n const stagingDir = join(baseTempDir, 'staging');\n await mkdir(stagingDir, { recursive: true });\n\n const stream = createReadStream(npmTarballPath);\n await extractTo(createTarExtractor(stream, 'gzip'), stagingDir);\n\n // Step 3: Process extracted files (package.json/README replacement)\n // Replace package.json with our processed version\n const packageJsonPath = join(stagingDir, 'package', 'package.json');\n if (existsSync(packageJsonPath)) {\n await writeFile(\n packageJsonPath,\n JSON.stringify(resolvedPackageJson, null, 2)\n );\n }\n\n // Replace README.md\n if (readmeReplacementCandidatePath) {\n const readmeDestPath = join(stagingDir, 'package', 'README.md');\n await copyFile(readmeReplacementCandidatePath, readmeDestPath);\n }\n\n // Step 4: Re-create tarball with modified files\n const outputFileName = `${resolvedPackageJson?.name?.replace('/', '-') ?? 'package'}-${resolvedPackageJson?.version ?? '0.0.0'}.tgz`;\n await mkdir(outputDir, { recursive: true });\n const outputFile = join(outputDir, outputFileName);\n\n // Re-packing final tar file from the modified staging directory\n const itemGenerator = createEntryItemGenerator(stagingDir);\n const packer = createTarPacker(itemGenerator, 'gzip');\n await storeReaderToFile(packer, outputFile);\n\n // PackedResult\n return {\n packageFileName: outputFileName,\n metadata: resolvedPackageJson,\n };\n } finally {\n // Clean up temporary directory\n await rm(baseTempDir, { recursive: true, force: true });\n }\n};\n\n/**\n * Get computed package.json object\n * @param targetDir - Target directory to resolve package metadata\n * @param fetchGitMetadata - Git metadata fetcher\n * @param inheritableFields - Package metadata fields that should be inherited from parent\n * @returns Computed package.json object or undefined if failed\n */\nexport const getComputedPackageJsonObject = async (\n targetDir: string,\n fetchGitMetadata: () => Promise<any>,\n alwaysOverrideVersionFromGit: boolean,\n inheritableFields: Set<string>,\n logger: Logger\n): Promise<any> => {\n // Check if target directory exists\n if (!existsSync(targetDir)) {\n return undefined;\n }\n\n // Resolve package metadata\n const result = await resolveRawPackageJsonObject(\n targetDir,\n fetchGitMetadata,\n alwaysOverrideVersionFromGit,\n inheritableFields,\n logger\n );\n return result.metadata;\n};\n\n//////////////////////////////////////////////////////////////////////////////////\n\nexport interface ParsedArgs {\n readonly argv: string[];\n readonly command?: string;\n readonly positional: string[];\n readonly options: Record<string, string | boolean>;\n}\n\n/**\n * Parse command line arguments\n * @param args - Command line arguments\n * @param argOptionMap - Map of command options to their argument options\n * @returns Parsed arguments\n */\nexport const parseArgs = (\n args: string[],\n argOptionMap: Map<string, Set<string>>\n): ParsedArgs => {\n const result: any = {\n argv: args,\n positional: [],\n options: {},\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg.startsWith('--')) {\n const optionName = arg.slice(2);\n // Found option bedore command\n if (!result.command) {\n // Always flag option\n result.options[optionName] = true;\n } else {\n // Detect an argument option in the command\n const argOptions = argOptionMap.get(result.command);\n if (argOptions.has(optionName)) {\n // Option has an argument\n i++;\n result.options[optionName] = args[i];\n } else {\n // Option is flag\n result.options[optionName] = true;\n }\n }\n // Sigle hyphen option is always flag\n } else if (arg.startsWith('-')) {\n const optionName = arg.slice(1);\n if (optionName.length == 1) {\n result.options[optionName] = true;\n }\n } else if (!result.command) {\n result.command = arg;\n } else {\n result.positional.push(arg);\n }\n }\n\n return result;\n};\n","// screw-up - Easy package metadata inserter on Vite plugin\n// Copyright (c) Kouji Matsui (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/screw-up/\n\nimport { join, resolve } from 'path';\nimport { existsSync } from 'fs';\nimport { mkdtemp, rm, stat } from 'fs/promises';\nimport { spawn } from 'child_process';\nimport { tmpdir } from 'os';\nimport {\n packAssets,\n parseArgs,\n ParsedArgs,\n getComputedPackageJsonObject,\n} from './cli-internal';\nimport { getFetchGitMetadata } from './analyzer';\nimport { Logger } from './internal';\n\n// We use async I/O except 'existsSync', because 'exists' will throw an error if the file does not exist.\n\n//////////////////////////////////////////////////////////////////////////////////\n\n// Package metadata fields that should be inherited from parent\nconst defaultInheritableFields = new Set([\n 'version',\n 'description',\n 'author',\n 'license',\n 'repository',\n 'keywords',\n 'homepage',\n 'bugs',\n 'readme',\n]);\n\n// Parse inheritable fields from CLI option string\nconst parseInheritableFields = (\n inheritableFieldsOption: string | boolean | undefined\n): Set<string> => {\n if (typeof inheritableFieldsOption !== 'string') {\n return defaultInheritableFields;\n }\n if (!inheritableFieldsOption.trim()) {\n return new Set(); // Empty set for empty string (no inheritance)\n }\n return new Set(\n inheritableFieldsOption\n .split(',')\n .map((field) => field.trim())\n .filter((field) => field.length > 0)\n );\n};\n\n//////////////////////////////////////////////////////////////////////////////////\n\nconst showDumpHelp = () => {\n console.info(`Usage: screw-up dump [options] [directory]\n\nDump computed package.json as JSON\n\nArguments:\n directory Directory to dump package.json from (default: current directory)\n\nOptions:\n --inheritable-fields <list> Comma-separated list of fields to inherit from parent\n --no-wds Do not check working directory status to increase version\n --no-git-version-override Do not override version from Git (use package.json version)\n -h, --help Show help for dump command\n`);\n};\n\nconst dumpCommand = async (args: ParsedArgs, logger: Logger) => {\n if (args.options.help || args.options.h) {\n showDumpHelp();\n return 1;\n }\n\n const directory = args.positional[0];\n const inheritableFieldsOption = args.options['inheritable-fields'] as string;\n const alwaysOverrideVersionFromGit = !args.options['no-git-version-override'];\n const checkWorkingDirectoryStatus = args.options['no-wds'] ? false : true;\n\n // Parse inheritable fields from CLI option or use defaults\n const inheritableFields = parseInheritableFields(inheritableFieldsOption);\n\n const targetDir = resolve(directory ?? process.cwd());\n\n // The dump command needs clean output, so ignore debug/info/warn outputs.\n const _logger: Logger = {\n debug: (msg) => {},\n info: (msg) => {},\n warn: (msg) => {},\n error: logger.error,\n };\n\n try {\n // Get Git metadata fetcher function\n const fetchGitMetadata = getFetchGitMetadata(\n targetDir,\n checkWorkingDirectoryStatus,\n _logger\n );\n\n // Resolve package metadata\n const computedPackageJson = await getComputedPackageJsonObject(\n targetDir,\n fetchGitMetadata,\n alwaysOverrideVersionFromGit,\n inheritableFields,\n _logger\n );\n\n if (computedPackageJson) {\n // Output console directly\n console.info(JSON.stringify(computedPackageJson, null, 2));\n } else {\n _logger.error(`dump: Unable to read package.json from: ${targetDir}`);\n return 1;\n }\n } catch (error) {\n _logger.error(`dump: Failed to dump package.json: ${error}`);\n return 1;\n }\n return 0;\n};\n\n//////////////////////////////////////////////////////////////////////////////////\n\nconst showPackHelp = () => {\n console.info(`Usage: screw-up pack [options] [directory]\n\nPack the project into a tar archive\n\nArguments:\n directory Directory to pack (default: current directory)\n\nOptions:\n --pack-destination <path> Directory to write the tarball\n --readme <path> Replace README.md with specified file\n --inheritable-fields <list> Comma-separated list of fields to inherit from parent\n --no-wds Do not check working directory status to increase version\n --no-git-version-override Do not override version from Git (use package.json version)\n --no-replace-peer-deps Disable replacing \"*\" in peerDependencies with actual versions\n --peer-deps-prefix <prefix> Version prefix for replaced peerDependencies (default: \"^\")\n --verbose Print verbose log\n -h, --help Show help for pack command\n`);\n};\n\nconst packCommand = async (args: ParsedArgs, logger: Logger) => {\n if (args.options.help || args.options.h) {\n showPackHelp();\n return 1;\n }\n\n const directory = args.positional[0];\n const packDestination = args.options['pack-destination'] as string;\n const readmeOption = args.options['readme'] as string;\n const inheritableFieldsOption = args.options['inheritable-fields'] as string;\n const checkWorkingDirectoryStatus = args.options['no-wds'] ? false : true;\n const alwaysOverrideVersionFromGit = !args.options['no-git-version-override'];\n const replacePeerDepsWildcards = !args.options['no-replace-peer-deps'];\n const peerDepsVersionPrefix =\n (args.options['peer-deps-prefix'] as string) ?? '^';\n const verbose = args.options['verbose'] ? true : false;\n\n const targetDir = resolve(directory ?? process.cwd());\n const outputDir = packDestination ? resolve(packDestination) : process.cwd();\n const readmeReplacementPath = readmeOption\n ? resolve(readmeOption)\n : undefined;\n\n // Parse inheritable fields from CLI option or use defaults\n const inheritableFields = parseInheritableFields(inheritableFieldsOption);\n\n if (verbose) {\n logger.info(`pack: Creating archive of ${targetDir}...`);\n }\n\n try {\n const result = await packAssets(\n targetDir,\n outputDir,\n checkWorkingDirectoryStatus,\n alwaysOverrideVersionFromGit,\n inheritableFields,\n readmeReplacementPath,\n replacePeerDepsWildcards,\n peerDepsVersionPrefix,\n logger\n );\n if (result) {\n if (verbose) {\n logger.info(\n `pack: Archive created successfully: ${result.packageFileName}`\n );\n } else {\n logger.info(result.packageFileName);\n }\n } else {\n logger.error(`pack: Unable to find any files to pack: ${targetDir}`);\n return 1;\n }\n } catch (error) {\n logger.error(`pack: Failed to create archive: ${error}`);\n return 1;\n }\n return 0;\n};\n\n//////////////////////////////////////////////////////////////////////////////////\n\nconst showPublishHelp = () => {\n console.info(`Usage: screw-up publish [options] [directory|package.tgz]\n\nPublish the project\n\nArguments:\n directory|package.tgz Directory to pack and publish, or existing tarball to publish\n\nOptions:\n All npm publish options are supported, including:\n --dry-run Perform a dry run\n --tag <tag> Tag for the published version\n --access <access> Access level (public or restricted)\n --registry <registry> Registry URL\n -h, --help Show help for publish command\n\nExamples:\n screw-up publish # Publish current directory\n screw-up publish ./my-project # Publish specific directory\n screw-up publish package.tgz # Publish existing tarball\n screw-up publish --dry-run --tag beta # Publish with options\n`);\n};\n\nconst runNpmPublish = async (\n tarballPath: string,\n npmOptions: string[],\n verbose: boolean,\n logger: Logger\n) => {\n if (verbose) {\n logger.info(`publish: Publishing ${tarballPath} to npm...`);\n }\n\n const publishArgs = ['publish', tarballPath, ...npmOptions];\n\n // For testing: log the command that would be executed\n if (process.env.SCREW_UP_TEST_MODE === 'true') {\n logger.info(`TEST_MODE: Would execute: npm ${publishArgs.join(' ')}`);\n logger.info(`TEST_MODE: Tarball path: ${tarballPath}`);\n logger.info(`TEST_MODE: Options: ${npmOptions.join(' ')}`);\n logger.info(`publish: Successfully published ${tarballPath}`);\n return 0;\n }\n\n const npmProcess = spawn('npm', publishArgs, { stdio: 'inherit' });\n\n return new Promise<number>((resolve, reject) => {\n npmProcess.on('close', (code) => {\n if (code === 0) {\n if (verbose) {\n logger.info(`publish: Successfully published ${tarballPath}`);\n }\n resolve(code);\n } else {\n logger.error(`publish: npm publish failed: ${tarballPath}`);\n resolve(code);\n }\n });\n npmProcess.on('error', reject);\n });\n};\n\nconst publishCommand = async (args: ParsedArgs, logger: Logger) => {\n if (args.options.help || args.options.h) {\n showPublishHelp();\n return 1;\n }\n\n const path = args.positional[0];\n const readmeOption = args.options['readme'] as string;\n const inheritableFieldsOption = args.options['inheritable-fields'] as string;\n const checkWorkingDirectoryStatus = args.options['no-wds'] ? false : true;\n const alwaysOverrideVersionFromGit = !args.options['no-git-version-override'];\n const replacePeerDepsWildcards = !args.options['no-replace-peer-deps'];\n const peerDepsVersionPrefix =\n (args.options['peer-deps-prefix'] as string) ?? '^';\n const verbose = args.options['verbose'] ? true : false;\n\n // Parse inheritable fields from CLI option or use defaults\n const inheritableFields = parseInheritableFields(inheritableFieldsOption);\n const readmeReplacementPath = readmeOption\n ? resolve(readmeOption)\n : undefined;\n\n // Aggregate npm options, except screw-up options.\n const npmOptions: string[] = [];\n for (let i = 0; i < args.argv.length; i++) {\n const arg = args.argv[i];\n if (arg === 'publish') {\n // Skip the command itself\n } else if (\n arg === '--help' ||\n arg === '--verbose' ||\n arg === '-h' ||\n arg === '--no-wds' ||\n arg === '--no-git-version-override' ||\n arg === '--no-replace-peer-deps'\n ) {\n } else if (\n arg === '--readme' ||\n arg === '--inheritable-fields' ||\n arg === '--peer-deps-prefix'\n ) {\n i++;\n } else {\n npmOptions.push(arg);\n }\n }\n\n try {\n if (!path) {\n // No argument provided - generate tarball from current directory and publish\n const targetDir = process.cwd();\n const outputDir = await mkdtemp(join(tmpdir(), 'screw-up-publish-'));\n\n if (verbose) {\n logger.info(`publish: Creating archive of ${targetDir}...`);\n }\n\n try {\n const result = await packAssets(\n targetDir,\n outputDir,\n checkWorkingDirectoryStatus,\n alwaysOverrideVersionFromGit,\n inheritableFields,\n readmeReplacementPath,\n replacePeerDepsWildcards,\n peerDepsVersionPrefix,\n logger\n );\n if (result?.metadata) {\n if (verbose) {\n logger.info(\n `publish: Archive created successfully: ${result.packageFileName}`\n );\n }\n const archivePath = join(outputDir, result.packageFileName);\n return await runNpmPublish(archivePath, npmOptions, verbose, logger);\n } else {\n logger.error(\n `publish: Unable to find any files to pack: ${targetDir}`\n );\n return 1;\n }\n } finally {\n await rm(outputDir, { recursive: true, force: true });\n }\n } else if (existsSync(path)) {\n const pathStat = await stat(path);\n\n if (\n pathStat.isFile() &&\n (path.endsWith('.tgz') || path.endsWith('.tar.gz'))\n ) {\n // Argument is a tarball file - publish directly\n return await runNpmPublish(resolve(path), npmOptions, verbose, logger);\n } else if (pathStat.isDirectory()) {\n // Argument is a directory - generate tarball from directory and publish\n const targetDir = resolve(path);\n const outputDir = await mkdtemp(join(tmpdir(), 'screw-up-publish-'));\n\n if (verbose) {\n logger.info(`publish: Creating archive of ${targetDir}...`);\n }\n\n try {\n const result = await packAssets(\n targetDir,\n outputDir,\n checkWorkingDirectoryStatus,\n alwaysOverrideVersionFromGit,\n inheritableFields,\n readmeReplacementPath,\n replacePeerDepsWildcards,\n peerDepsVersionPrefix,\n logger\n );\n if (result?.metadata) {\n if (verbose) {\n logger.info(\n `publish: Archive created successfully: ${result.packageFileName}`\n );\n }\n const archivePath = join(outputDir, result.packageFileName);\n return await runNpmPublish(\n archivePath,\n npmOptions,\n verbose,\n logger\n );\n } else {\n logger.error(\n `publish: Unable to find any files to pack: ${targetDir}`\n );\n return 1;\n }\n } finally {\n await rm(outputDir, { recursive: true, force: true });\n }\n } else {\n logger.error(\n `publish: Invalid path - must be a directory or .tgz/.tar.gz file: ${path}`\n );\n return 1;\n }\n } else {\n logger.error(`publish: Path does not exist: ${path}`);\n return 1;\n }\n } catch (error) {\n logger.error(`publish: Failed to publish: ${error}`);\n return 1;\n }\n};\n\n//////////////////////////////////////////////////////////////////////////////////\n\nconst showHelp = async () => {\n const { author, license, repository_url, version, git_commit_hash } =\n await import('./generated/packageMetadata.js');\n console.info(`screw-up [${version}-${git_commit_hash}]\nEasy package metadata inserter CLI\nCopyright (c) ${author}\nRepository: ${repository_url}\nLicense: ${license}\n\nUsage: screw-up <command> [options]\n\nCommands:\n dump [directory] Dump computed package.json as JSON\n pack [directory] Pack the project into a tar archive\n publish [directory|package.tgz] Publish the project\n\nOptions:\n -h, --help Show help\n\nExamples:\n screw-up dump # Dump computed package.json as JSON\n screw-up pack # Pack current directory\n screw-up pack --pack-destination ./dist # Pack to specific output directory\n screw-up publish # Publish current directory\n screw-up publish package.tgz # Publish existing tarball\n`);\n};\n\nconst argOptionMap = new Map([\n ['dump', new Set(['inheritable-fields'])],\n [\n 'pack',\n new Set([\n 'pack-destination',\n 'readme',\n 'inheritable-fields',\n 'peer-deps-prefix',\n ]),\n ],\n ['publish', new Set(['inheritable-fields', 'peer-deps-prefix'])],\n]);\n\nexport const cliMain = async (\n args: string[],\n logger: Logger\n): Promise<number> => {\n const parsedArgs = parseArgs(args, argOptionMap);\n\n // Handle global help or when no command is provided\n if (\n !parsedArgs.command &&\n (parsedArgs.options.help || parsedArgs.options.h)\n ) {\n await showHelp();\n return 1;\n }\n\n switch (parsedArgs.command) {\n case 'dump':\n return await dumpCommand(parsedArgs, logger);\n case 'pack':\n return await packCommand(parsedArgs, logger);\n case 'publish':\n return await publishCommand(parsedArgs, logger);\n default:\n if (parsedArgs.command) {\n logger.error(`Unknown command: ${parsedArgs.command}`);\n } else {\n logger.error(`Unknown command`);\n }\n logger.error('Run \"screw-up --help\" for usage information.');\n return 1;\n }\n};\n","#!/usr/bin/env node\n\n// screw-up - Easy package metadata inserter on Vite plugin\n// Copyright (c) Kouji Matsui (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/screw-up/\n\nimport { cliMain } from './cli';\nimport { createConsoleLogger } from './internal';\nimport { name, version } from './generated/packageMetadata';\n\n// We use async I/O except 'existsSync', because 'exists' will throw an error if the file does not exist.\n\n//////////////////////////////////////////////////////////////////////////////////\n\nconst loggerPrefix = `${name}-cli`;\nconst logger = createConsoleLogger(loggerPrefix);\n\ncliMain(\n process.argv.slice(2), // Remove 'node' and script path\n logger\n)\n .then((code) => process.exit(code))\n .catch((error) => {\n logger.error(`CLI error: ${error}`);\n process.exit(1);\n });\n"],"names":["name","logger","argOptionMap","resolve"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"main.js","sources":["../node_modules/tar-vern/dist/index.js","../src/cli-internal.ts","../src/cli.ts","../src/main.ts"],"sourcesContent":["/*!\n * name: tar-vern\n * version: 1.3.0\n * description: Tape archiver library for Typescript\n * author: Kouji Matsui (@kekyo@mi.kekyo.net)\n * license: MIT\n * repository.url: https://github.com/kekyo/tar-vern.git\n * git.commit.hash: 7ac8b1f258e17c93767650ef047a2db9f0ffd417\n */\nimport { Readable } from \"stream\";\nimport { createGzip, createGunzip } from \"zlib\";\nimport { createReadStream, createWriteStream } from \"fs\";\nimport { stat, mkdir, writeFile, readdir } from \"fs/promises\";\nimport { pipeline } from \"stream/promises\";\nimport { join, dirname } from \"path\";\nconst MAX_NAME = 100;\nconst MAX_PREFIX = 155;\nconst getUName = (candidateName, candidateId, reflectStat) => {\n return candidateName ?? (reflectStat === \"all\" ? candidateId.toString() : \"root\");\n};\nconst getBuffer = (data) => {\n return Buffer.isBuffer(data) ? data : Buffer.from(data, \"utf8\");\n};\nconst createDirectoryItem = async (path, reflectStat, options, signal) => {\n const rs = reflectStat ?? \"none\";\n if (rs !== \"none\" && options?.directoryPath) {\n signal?.throwIfAborted();\n const stats = await stat(options.directoryPath);\n const mode = options?.mode ?? stats.mode;\n const uid = options?.uid ?? stats.uid;\n const gid = options?.gid ?? stats.gid;\n const date = options?.date ?? stats.mtime;\n const uname = getUName(options?.uname, stats.uid, rs);\n const gname = getUName(options?.gname, stats.gid, rs);\n return {\n kind: \"directory\",\n path,\n mode,\n uname,\n gname,\n uid,\n gid,\n date\n };\n } else {\n const mode = options?.mode ?? 493;\n const uid = options?.uid ?? 0;\n const gid = options?.gid ?? 0;\n const date = options?.date ?? /* @__PURE__ */ new Date();\n const uname = getUName(options?.uname, void 0, rs);\n const gname = getUName(options?.gname, void 0, rs);\n return {\n kind: \"directory\",\n path,\n mode,\n uname,\n gname,\n uid,\n gid,\n date\n };\n }\n};\nconst createFileItem = async (path, content, options, signal) => {\n signal?.throwIfAborted();\n const mode = options?.mode ?? 420;\n const uid = options?.uid ?? 0;\n const gid = options?.gid ?? 0;\n const date = options?.date ?? /* @__PURE__ */ new Date();\n const uname = options?.uname ?? \"root\";\n const gname = options?.gname ?? \"root\";\n return {\n kind: \"file\",\n path,\n mode,\n uname,\n gname,\n uid,\n gid,\n date,\n content\n };\n};\nconst createReadableFileItem = async (path, readable, options, signal) => {\n const mode = options?.mode ?? 420;\n const uid = options?.uid ?? 0;\n const gid = options?.gid ?? 0;\n const date = options?.date ?? /* @__PURE__ */ new Date();\n const uname = options?.uname ?? \"root\";\n const gname = options?.gname ?? \"root\";\n let length = options?.length;\n if (!length) {\n const chunks = [];\n length = 0;\n for await (const chunk of readable) {\n signal?.throwIfAborted();\n const buffer = getBuffer(chunk);\n chunks.push(buffer);\n length += buffer.length;\n }\n return {\n kind: \"file\",\n path,\n mode,\n uname,\n gname,\n uid,\n gid,\n date,\n content: {\n kind: \"readable\",\n length,\n readable: Readable.from(chunks, { signal })\n }\n };\n } else {\n return {\n kind: \"file\",\n path,\n mode,\n uname,\n gname,\n uid,\n gid,\n date,\n content: {\n kind: \"readable\",\n length,\n readable\n }\n };\n }\n};\nconst createGeneratorFileItem = async (path, generator, options, signal) => {\n const mode = options?.mode ?? 420;\n const uid = options?.uid ?? 0;\n const gid = options?.gid ?? 0;\n const date = options?.date ?? /* @__PURE__ */ new Date();\n const uname = options?.uname ?? \"root\";\n const gname = options?.gname ?? \"root\";\n let length = options?.length;\n if (!length) {\n const chunks = [];\n length = 0;\n for await (const chunk of generator) {\n signal?.throwIfAborted();\n const buffer = getBuffer(chunk);\n chunks.push(buffer);\n length += buffer.length;\n }\n return {\n kind: \"file\",\n path,\n mode,\n uname,\n gname,\n uid,\n gid,\n date,\n content: {\n kind: \"readable\",\n length,\n readable: Readable.from(chunks, { signal })\n }\n };\n } else {\n return {\n kind: \"file\",\n path,\n mode,\n uname,\n gname,\n uid,\n gid,\n date,\n content: {\n kind: \"generator\",\n length,\n generator\n }\n };\n }\n};\nconst createReadFileItem = async (path, filePath, reflectStat, options, signal) => {\n const rs = reflectStat ?? \"exceptName\";\n signal?.throwIfAborted();\n const stats = await stat(filePath);\n const reader = createReadStream(filePath, { signal });\n const mode = options?.mode ?? (rs !== \"none\" ? stats.mode : void 0);\n const uid = options?.uid ?? (rs !== \"none\" ? stats.uid : void 0);\n const gid = options?.gid ?? (rs !== \"none\" ? stats.gid : void 0);\n const date = options?.date ?? (rs !== \"none\" ? stats.mtime : void 0);\n const uname = getUName(options?.uname, stats.uid, rs);\n const gname = getUName(options?.gname, stats.gid, rs);\n return await createReadableFileItem(path, reader, {\n length: stats.size,\n mode,\n uname,\n gname,\n uid,\n gid,\n date\n }, signal);\n};\nconst storeReaderToFile = async (reader, path, signal) => {\n const writer = createWriteStream(path, { signal });\n await pipeline(reader, writer, { signal });\n};\nconst getAllFilesInDirectory = async (baseDir, signal) => {\n const collectFiles = async (currentDir, relativePath) => {\n signal?.throwIfAborted();\n try {\n const entries = await readdir(currentDir, { withFileTypes: true });\n const result = [];\n const tasks = entries.map(async (entry) => {\n signal?.throwIfAborted();\n const entryRelativePath = join(relativePath, entry.name);\n if (entry.isDirectory()) {\n const entryFullPath = join(currentDir, entry.name);\n const directoryContents = await collectFiles(entryFullPath, entryRelativePath);\n return [entryRelativePath, ...directoryContents];\n } else {\n return [entryRelativePath];\n }\n });\n const allResults = await Promise.all(tasks);\n for (const entryResults of allResults) {\n result.push(...entryResults);\n }\n return result;\n } catch (error) {\n console.warn(`Warning: Could not read directory ${currentDir}:`, error);\n return [];\n }\n };\n return await collectFiles(baseDir, \"\");\n};\nconst createEntryItemGenerator = async function* (baseDir, relativePaths, includeDirectory, reflectStat, signal) {\n const rs = reflectStat ?? \"exceptName\";\n const includeDir = includeDirectory ?? true;\n const pathsToProcess = relativePaths ?? await getAllFilesInDirectory(baseDir, signal);\n for (const relativePath of pathsToProcess) {\n signal?.throwIfAborted();\n const fsPath = join(baseDir, relativePath);\n try {\n signal?.throwIfAborted();\n const stats = await stat(fsPath);\n if (includeDir && stats.isDirectory()) {\n yield await createDirectoryItem(relativePath, rs, {\n directoryPath: fsPath\n }, signal);\n } else if (stats.isFile()) {\n yield await createReadFileItem(relativePath, fsPath, rs, void 0, signal);\n }\n } catch (error) {\n console.warn(`Warning: Could not access ${fsPath}:`, error);\n continue;\n }\n }\n};\nconst extractTo = async (iterator, basePath, signal) => {\n for await (const entry of iterator) {\n signal?.throwIfAborted();\n const targetPath = join(basePath, entry.path);\n if (entry.kind === \"directory\") {\n try {\n signal?.throwIfAborted();\n await mkdir(targetPath, { recursive: true, mode: entry.mode });\n } catch (error) {\n if (error.code !== \"EEXIST\") {\n throw error;\n }\n }\n } else if (entry.kind === \"file\") {\n const parentDir = dirname(targetPath);\n signal?.throwIfAborted();\n await mkdir(parentDir, { recursive: true });\n const fileEntry = entry;\n const content = await fileEntry.getContent(\"buffer\");\n await writeFile(targetPath, content, { mode: entry.mode, signal });\n }\n }\n};\nconst utf8ByteLength = (str) => {\n return Buffer.byteLength(str, \"utf8\");\n};\nconst truncateUtf8Safe = (str, maxBytes) => {\n let total = 0;\n let i = 0;\n while (i < str.length) {\n const codePoint = str.codePointAt(i);\n const char = String.fromCodePoint(codePoint);\n const charBytes = Buffer.byteLength(char, \"utf8\");\n if (total + charBytes > maxBytes) break;\n total += charBytes;\n i += char.length;\n }\n return str.slice(0, i);\n};\nconst splitPath = (path) => {\n if (utf8ByteLength(path) <= MAX_NAME) {\n return { prefix: \"\", name: path };\n }\n const parts = path.split(\"/\");\n let name = parts.pop() ?? \"\";\n let prefix = parts.join(\"/\");\n if (utf8ByteLength(name) > MAX_NAME) {\n name = truncateUtf8Safe(name, MAX_NAME);\n }\n while (utf8ByteLength(prefix) > MAX_PREFIX) {\n prefix = truncateUtf8Safe(prefix, MAX_PREFIX);\n }\n return { prefix, name };\n};\nconst getOctalBytes = (value, length) => {\n const str = value.toString(8).padStart(length - 1, \"0\") + \"\\0\";\n return Buffer.from(str, \"ascii\");\n};\nconst getPaddedBytes = (buffer) => {\n const extra = buffer.length % 512;\n if (extra === 0) {\n return buffer;\n } else {\n return Buffer.concat([buffer, Buffer.alloc(512 - extra, 0)]);\n }\n};\nconst terminatorBytes = Buffer.alloc(1024, 0);\nconst createTarHeader = (type, path, size, mode, uname, gname, uid, gid, date) => {\n const buffer = Buffer.alloc(512, 0);\n const { name, prefix } = splitPath(path);\n buffer.write(name, 0, 100, \"utf8\");\n getOctalBytes(mode & 4095, 8).copy(buffer, 100);\n getOctalBytes(uid, 8).copy(buffer, 108);\n getOctalBytes(gid, 8).copy(buffer, 116);\n getOctalBytes(size, 12).copy(buffer, 124);\n getOctalBytes(Math.floor(date.getTime() / 1e3), 12).copy(buffer, 136);\n Buffer.from(\" \", \"ascii\").copy(buffer, 148);\n if (type === \"file\") {\n buffer.write(\"0\", 156, 1, \"ascii\");\n } else {\n buffer.write(\"5\", 156, 1, \"ascii\");\n }\n buffer.write(\"ustar\\0\", 257, 6, \"ascii\");\n buffer.write(\"00\", 263, 2, \"ascii\");\n buffer.write(uname, 265, 32, \"utf8\");\n buffer.write(gname, 297, 32, \"utf8\");\n buffer.write(prefix, 345, 155, \"utf8\");\n let sum = 0;\n for (let i = 0; i < 512; i++) {\n sum += buffer[i];\n }\n getOctalBytes(sum, 8).copy(buffer, 148);\n return buffer;\n};\nconst createTarPacker = (entryItemGenerator, compressionType, signal) => {\n const entryItemIterator = async function* () {\n for await (const entryItem of entryItemGenerator) {\n signal?.throwIfAborted();\n switch (entryItem.kind) {\n // Entry is a file\n case \"file\": {\n const entryItemContent = entryItem.content;\n if (typeof entryItemContent === \"string\" || Buffer.isBuffer(entryItemContent)) {\n const contentBytes = getBuffer(entryItemContent);\n const tarHeaderBytes = createTarHeader(\n \"file\",\n entryItem.path,\n contentBytes.length,\n entryItem.mode,\n entryItem.uname,\n entryItem.gname,\n entryItem.uid,\n entryItem.gid,\n entryItem.date\n );\n yield tarHeaderBytes;\n const totalPaddedContentBytes = getPaddedBytes(contentBytes);\n yield totalPaddedContentBytes;\n } else {\n const content = entryItemContent;\n const tarHeaderBytes = createTarHeader(\n \"file\",\n entryItem.path,\n content.length,\n entryItem.mode,\n entryItem.uname,\n entryItem.gname,\n entryItem.uid,\n entryItem.gid,\n entryItem.date\n );\n yield tarHeaderBytes;\n let position = 0;\n switch (content.kind) {\n // Content is a generator\n case \"generator\": {\n for await (const contentBytes of content.generator) {\n signal?.throwIfAborted();\n yield contentBytes;\n position += contentBytes.length;\n }\n break;\n }\n // Content is a readable stream\n case \"readable\": {\n for await (const chunk of content.readable) {\n signal?.throwIfAborted();\n const contentBytes = getBuffer(chunk);\n yield contentBytes;\n position += contentBytes.length;\n }\n break;\n }\n }\n if (position % 512 !== 0) {\n signal?.throwIfAborted();\n yield Buffer.alloc(512 - position % 512, 0);\n }\n }\n break;\n }\n // Entry is a directory\n case \"directory\": {\n const tarHeaderBytes = createTarHeader(\n \"directory\",\n entryItem.path,\n 0,\n entryItem.mode,\n entryItem.uname,\n entryItem.gname,\n entryItem.uid,\n entryItem.gid,\n entryItem.date\n );\n yield tarHeaderBytes;\n break;\n }\n }\n }\n yield terminatorBytes;\n };\n const ct = compressionType ?? \"none\";\n switch (ct) {\n // No compression\n case \"none\": {\n return Readable.from(entryItemIterator(), { signal });\n }\n // Gzip compression\n case \"gzip\": {\n const gzipStream = createGzip({ level: 9 });\n const entryItemStream = Readable.from(entryItemIterator(), { signal });\n entryItemStream.pipe(gzipStream);\n return gzipStream;\n }\n }\n};\nconst parseOctalBytes = (buffer, offset, length) => {\n const str = buffer.subarray(offset, offset + length).toString(\"ascii\").replace(/\\0/g, \"\").trim();\n return str ? parseInt(str, 8) : 0;\n};\nconst parseString = (buffer, offset, length) => {\n return buffer.subarray(offset, offset + length).toString(\"utf8\").replace(/\\0/g, \"\").trim();\n};\nconst readExactBytes = async (iterator, size, signal) => {\n const chunks = [];\n let totalRead = 0;\n while (totalRead < size) {\n signal?.throwIfAborted();\n const { value, done } = await iterator.next();\n if (done) {\n if (totalRead === 0) {\n return void 0;\n } else {\n throw new Error(`Unexpected end of stream: expected ${size} bytes, got ${totalRead} bytes`);\n }\n }\n const chunk = getBuffer(value);\n const needed = size - totalRead;\n if (chunk.length <= needed) {\n chunks.push(chunk);\n totalRead += chunk.length;\n } else {\n chunks.push(chunk.subarray(0, needed));\n await iterator.return?.(chunk.subarray(needed));\n totalRead = size;\n }\n }\n return Buffer.concat(chunks, size);\n};\nconst skipExactBytes = async (iterator, size, signal) => {\n let totalSkipped = 0;\n while (totalSkipped < size) {\n signal?.throwIfAborted();\n const { value, done } = await iterator.next();\n if (done) {\n throw new Error(`Unexpected end of stream: expected to skip ${size} bytes, skipped ${totalSkipped} bytes`);\n }\n const chunk = getBuffer(value);\n const needed = size - totalSkipped;\n if (chunk.length <= needed) {\n totalSkipped += chunk.length;\n } else {\n await iterator.return?.(chunk.subarray(needed));\n totalSkipped = size;\n }\n }\n};\nconst skipPaddingBytesTo512Boundary = async (iterator, contentSize, signal) => {\n const padding = (512 - contentSize % 512) % 512;\n if (padding > 0) {\n await skipExactBytes(iterator, padding, signal);\n }\n};\nconst parseTarHeader = (buffer) => {\n if (buffer.every((b) => b === 0)) {\n return void 0;\n }\n const name = parseString(buffer, 0, 100);\n const mode = parseOctalBytes(buffer, 100, 8);\n const uid = parseOctalBytes(buffer, 108, 8);\n const gid = parseOctalBytes(buffer, 116, 8);\n const size = parseOctalBytes(buffer, 124, 12);\n const mtime = new Date(parseOctalBytes(buffer, 136, 12) * 1e3);\n const checksum = parseOctalBytes(buffer, 148, 8);\n const typeflag = parseString(buffer, 156, 1);\n const magic = parseString(buffer, 257, 6);\n const uname = parseString(buffer, 265, 32);\n const gname = parseString(buffer, 297, 32);\n const prefix = parseString(buffer, 345, 155);\n if (magic !== \"ustar\") {\n throw new Error(`Invalid tar format: magic=\"${magic}\"`);\n }\n let calculatedSum = 0;\n for (let i = 0; i < 512; i++) {\n if (i >= 148 && i < 156) {\n calculatedSum += 32;\n } else {\n calculatedSum += buffer[i];\n }\n }\n if (calculatedSum !== checksum) {\n throw new Error(`Invalid checksum: expected ${checksum}, got ${calculatedSum}`);\n }\n let path = prefix ? `${prefix}/${name}` : name;\n if (path.endsWith(\"/\")) {\n path = path.slice(0, -1);\n }\n const kind = typeflag === \"5\" ? \"directory\" : \"file\";\n return {\n kind,\n path,\n size,\n mode,\n uid,\n gid,\n mtime,\n uname: uname || uid.toString(),\n gname: gname || gid.toString(),\n checksum,\n consumed: false\n };\n};\nconst createBufferedAsyncIterator = (iterable, signal) => {\n const buffer = [];\n const iterator = iterable[Symbol.asyncIterator]();\n return {\n next: async () => {\n signal?.throwIfAborted();\n if (buffer.length > 0) {\n return { value: buffer.shift(), done: false };\n }\n return iterator.next();\n },\n return: async (value) => {\n if (value !== void 0) {\n buffer.unshift(value);\n }\n return { value: void 0, done: false };\n }\n };\n};\nconst createReadableFromIterator = (iterator, size, signal, consumedRef) => {\n const generator = async function* () {\n let remainingBytes = size;\n while (remainingBytes > 0) {\n signal?.throwIfAborted();\n const { value, done } = await iterator.next();\n if (done) {\n throw new Error(`Unexpected end of stream: expected ${size} bytes, remaining ${remainingBytes} bytes`);\n }\n const chunk = getBuffer(value);\n if (chunk.length <= remainingBytes) {\n remainingBytes -= chunk.length;\n yield chunk;\n } else {\n const needed = chunk.subarray(0, remainingBytes);\n const excess = chunk.subarray(remainingBytes);\n remainingBytes = 0;\n await iterator.return?.(excess);\n yield needed;\n break;\n }\n }\n await skipPaddingBytesTo512Boundary(iterator, size, signal);\n consumedRef.consumed = true;\n };\n return Readable.from(generator(), { signal });\n};\nconst createTarExtractor = async function* (readable, compressionType, signal) {\n const ct = compressionType ?? \"none\";\n let inputStream;\n switch (ct) {\n case \"gzip\":\n const gunzip = createGunzip();\n readable.pipe(gunzip);\n inputStream = gunzip;\n break;\n case \"none\":\n default:\n inputStream = readable;\n break;\n }\n const iterator = createBufferedAsyncIterator(inputStream, signal);\n let header;\n while (true) {\n signal?.throwIfAborted();\n if (header?.kind === \"file\" && !header.consumed) {\n await skipExactBytes(iterator, header.size, signal);\n await skipPaddingBytesTo512Boundary(iterator, header.size, signal);\n header.consumed = true;\n }\n let headerBuffer;\n try {\n headerBuffer = await readExactBytes(iterator, 512, signal);\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"Unexpected end of stream\")) {\n throw new Error(\"Invalid tar format: incomplete header\");\n }\n throw error;\n }\n if (headerBuffer === void 0) {\n break;\n }\n header = parseTarHeader(headerBuffer);\n if (!header) {\n const secondBlock = await readExactBytes(iterator, 512, signal);\n if (secondBlock === void 0 || secondBlock.every((b) => b === 0)) {\n break;\n }\n throw new Error(\"Invalid tar format: expected terminator block\");\n }\n if (header.kind === \"directory\") {\n yield {\n kind: \"directory\",\n path: header.path,\n mode: header.mode,\n uid: header.uid,\n gid: header.gid,\n uname: header.uname,\n gname: header.gname,\n date: header.mtime\n };\n } else {\n const currentHeader = header;\n yield {\n kind: \"file\",\n path: currentHeader.path,\n mode: currentHeader.mode,\n uid: currentHeader.uid,\n gid: currentHeader.gid,\n uname: currentHeader.uname,\n gname: currentHeader.gname,\n date: currentHeader.mtime,\n getContent: async (type) => {\n if (currentHeader.consumed) {\n throw new Error(\"Content has already been consumed. Multiple calls to getContent are not supported.\");\n }\n switch (type) {\n // For string\n case \"string\": {\n const dataBuffer = await readExactBytes(iterator, currentHeader.size, signal);\n if (dataBuffer === void 0) {\n throw new Error(`Unexpected end of stream while reading file data for ${currentHeader.path}`);\n }\n await skipPaddingBytesTo512Boundary(iterator, currentHeader.size, signal);\n currentHeader.consumed = true;\n return dataBuffer.toString(\"utf8\");\n }\n // For buffer\n case \"buffer\": {\n const dataBuffer = await readExactBytes(iterator, currentHeader.size, signal);\n if (dataBuffer === void 0) {\n throw new Error(`Unexpected end of stream while reading file data for ${currentHeader.path}`);\n }\n await skipPaddingBytesTo512Boundary(iterator, currentHeader.size, signal);\n currentHeader.consumed = true;\n return dataBuffer;\n }\n // For Readble stream\n case \"readable\": {\n const readable2 = createReadableFromIterator(iterator, currentHeader.size, signal, currentHeader);\n return readable2;\n }\n default:\n throw new Error(`Unsupported content type: ${type}`);\n }\n }\n };\n }\n }\n};\nexport {\n createDirectoryItem,\n createEntryItemGenerator,\n createFileItem,\n createGeneratorFileItem,\n createReadFileItem,\n createReadableFileItem,\n createTarExtractor,\n createTarPacker,\n extractTo,\n storeReaderToFile\n};\n//# sourceMappingURL=index.js.map\n","// screw-up - Easy package metadata inserter on Vite plugin\n// Copyright (c) Kouji Matsui (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/screw-up/\n\nimport { join } from 'path';\nimport { createReadStream, existsSync } from 'fs';\nimport { mkdir, mkdtemp, writeFile, copyFile, rm } from 'fs/promises';\nimport {\n createTarPacker,\n storeReaderToFile,\n extractTo,\n createTarExtractor,\n createEntryItemGenerator,\n} from 'tar-vern';\nimport { spawn } from 'child_process';\nimport { tmpdir } from 'os';\nimport {\n resolveRawPackageJsonObject,\n findWorkspaceRoot,\n collectWorkspaceSiblings,\n replacePeerDependenciesWildcards,\n Logger,\n} from './internal';\nimport { getFetchGitMetadata } from './analyzer';\n\n// We use async I/O except 'existsSync', because 'exists' will throw an error if the file does not exist.\n\n//////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Execute npm pack and return the generated tarball path\n * @param targetDir - Target directory to pack\n * @param packDestDir - Directory to store the generated tarball (must exist)\n * @returns Path to generated tarball\n */\nconst runNpmPack = async (\n targetDir: string,\n packDestDir: string\n): Promise<string> => {\n return new Promise((res, rej) => {\n const npmProcess = spawn(\n 'npm',\n ['pack', '--pack-destination', packDestDir],\n {\n cwd: targetDir,\n stdio: ['ignore', 'pipe', 'pipe'],\n }\n );\n\n let stdout = '';\n let stderr = '';\n\n npmProcess.stdout.on('data', (data) => {\n stdout += data.toString();\n });\n\n npmProcess.stderr.on('data', (data) => {\n stderr += data.toString();\n });\n\n npmProcess.on('close', (code) => {\n if (code === 0) {\n // npm pack outputs the filename on stdout (last line or line ending with .tgz)\n const lines = stdout.trim().split('\\n');\n // Find the line that ends with .tgz (actual filename) or use the last line\n const filename =\n lines.find((line) => line.trim().endsWith('.tgz')) ||\n lines[lines.length - 1];\n if (filename && filename.trim().endsWith('.tgz')) {\n const fullPath = join(packDestDir, filename.trim());\n res(fullPath);\n } else {\n rej(new Error('npm pack did not output a valid .tgz filename'));\n }\n } else {\n const errorMessage = `npm pack failed with exit code ${code}`;\n const fullError = stderr\n ? `${errorMessage}\\nstderr: ${stderr}`\n : errorMessage;\n if (stdout) {\n rej(new Error(`${fullError}\\nstdout: ${stdout}`));\n } else {\n rej(new Error(fullError));\n }\n }\n });\n\n npmProcess.on('error', (error) => {\n rej(new Error(`Failed to spawn npm pack: ${error.message}`));\n });\n });\n};\n\n//////////////////////////////////////////////////////////////////////////////////\n\n/**\n * Packed result\n */\nexport interface PackedResult {\n readonly packageFileName: string;\n readonly metadata: any;\n}\n\n/**\n * Pack assets using npm pack delegation method\n * @param targetDir - Target directory to pack\n * @param outputDir - Output directory to write the tarball\n * @param checkWorkingDirectoryStatus - Check working directory status\n * @param inheritableFields - Package metadata fields that should be inherited from parent\n * @param readmeReplacementPath - Optional path to replacement README file\n * @param replacePeerDepsWildcards - Replace \"*\" in peerDependencies with actual versions\n * @param peerDepsVersionPrefix - Version prefix for replaced peerDependencies\n * @param alwaysOverrideVersionFromGit - Always override version from Git (default: true)\n * @returns Package metadata (package.json) or undefined if failed\n */\nexport const packAssets = async (\n targetDir: string,\n outputDir: string,\n checkWorkingDirectoryStatus: boolean,\n alwaysOverrideVersionFromGit: boolean,\n inheritableFields: Set<string>,\n readmeReplacementPath: string | undefined,\n replacePeerDepsWildcards: boolean,\n peerDepsVersionPrefix: string,\n logger: Logger\n): Promise<PackedResult | undefined> => {\n // Check if target directory exists\n if (!existsSync(targetDir)) {\n throw new Error(`Target directory is not found: ${targetDir}`);\n }\n\n let readmeReplacementCandidatePath = readmeReplacementPath;\n if (\n readmeReplacementCandidatePath &&\n !existsSync(readmeReplacementCandidatePath)\n ) {\n throw new Error(\n `README replacement file is not found: ${readmeReplacementCandidatePath}`\n );\n }\n\n // Get Git metadata fetcher function\n const fetchGitMetadata = getFetchGitMetadata(\n targetDir,\n checkWorkingDirectoryStatus,\n logger\n );\n\n // Resolve package metadata with source tracking\n const result = await resolveRawPackageJsonObject(\n targetDir,\n fetchGitMetadata,\n alwaysOverrideVersionFromGit,\n inheritableFields,\n logger\n );\n\n let resolvedPackageJson = result.metadata;\n\n // Check if package is private\n if (resolvedPackageJson?.private) {\n return undefined;\n }\n\n // Extract README replacement directive on package.json\n const packageJsonReadme = resolvedPackageJson.readme;\n if (packageJsonReadme) {\n // When does not override by parameter (CLI)\n if (!readmeReplacementCandidatePath) {\n const packageJsonReadmeDir = result.sourceMap.get('readme');\n const packageJsonReadmePath = join(\n packageJsonReadmeDir,\n packageJsonReadme\n );\n if (!existsSync(packageJsonReadmePath)) {\n throw new Error(\n `README replacement file is not found: ${packageJsonReadmePath}`\n );\n }\n readmeReplacementCandidatePath = packageJsonReadmePath;\n }\n // Always remove it.\n delete resolvedPackageJson.readme;\n }\n\n // Replace peerDependencies wildcards if enabled and in workspace\n if (replacePeerDepsWildcards) {\n const workspaceRoot = await findWorkspaceRoot(targetDir, logger);\n if (workspaceRoot) {\n const siblings = await collectWorkspaceSiblings(\n workspaceRoot,\n fetchGitMetadata,\n alwaysOverrideVersionFromGit,\n inheritableFields,\n logger\n );\n if (siblings.size > 0) {\n resolvedPackageJson = replacePeerDependenciesWildcards(\n resolvedPackageJson,\n siblings,\n peerDepsVersionPrefix\n );\n }\n }\n }\n\n // Create temporary directory for npm pack\n const baseTempDir = await mkdtemp(join(tmpdir(), 'screw-up-npm-pack-'));\n await mkdir(baseTempDir, { recursive: true });\n\n try {\n // Step 1: Execute npm pack to generate initial tarball\n const npmTarballPath = await runNpmPack(targetDir, baseTempDir);\n\n // Step 2: Extract the npm-generated tarball into staging directory\n const stagingDir = join(baseTempDir, 'staging');\n await mkdir(stagingDir, { recursive: true });\n\n const stream = createReadStream(npmTarballPath);\n await extractTo(createTarExtractor(stream, 'gzip'), stagingDir);\n\n // Step 3: Process extracted files (package.json/README replacement)\n // Replace package.json with our processed version\n const packageJsonPath = join(stagingDir, 'package', 'package.json');\n if (existsSync(packageJsonPath)) {\n await writeFile(\n packageJsonPath,\n JSON.stringify(resolvedPackageJson, null, 2)\n );\n }\n\n // Replace README.md\n if (readmeReplacementCandidatePath) {\n const readmeDestPath = join(stagingDir, 'package', 'README.md');\n await copyFile(readmeReplacementCandidatePath, readmeDestPath);\n }\n\n // Step 4: Re-create tarball with modified files\n const outputFileName = `${resolvedPackageJson?.name?.replace('/', '-') ?? 'package'}-${resolvedPackageJson?.version ?? '0.0.0'}.tgz`;\n await mkdir(outputDir, { recursive: true });\n const outputFile = join(outputDir, outputFileName);\n\n // Re-packing final tar file from the modified staging directory\n const itemGenerator = createEntryItemGenerator(stagingDir);\n const packer = createTarPacker(itemGenerator, 'gzip');\n await storeReaderToFile(packer, outputFile);\n\n // PackedResult\n return {\n packageFileName: outputFileName,\n metadata: resolvedPackageJson,\n };\n } finally {\n // Clean up temporary directory\n await rm(baseTempDir, { recursive: true, force: true });\n }\n};\n\n/**\n * Get computed package.json object\n * @param targetDir - Target directory to resolve package metadata\n * @param fetchGitMetadata - Git metadata fetcher\n * @param inheritableFields - Package metadata fields that should be inherited from parent\n * @returns Computed package.json object or undefined if failed\n */\nexport const getComputedPackageJsonObject = async (\n targetDir: string,\n fetchGitMetadata: () => Promise<any>,\n alwaysOverrideVersionFromGit: boolean,\n inheritableFields: Set<string>,\n logger: Logger,\n ignoreNotExist: boolean = false\n): Promise<any> => {\n // Check if target directory exists\n if (!existsSync(targetDir)) {\n return undefined;\n }\n\n // Resolve package metadata\n const result = await resolveRawPackageJsonObject(\n targetDir,\n fetchGitMetadata,\n alwaysOverrideVersionFromGit,\n inheritableFields,\n logger,\n ignoreNotExist\n );\n return result.metadata;\n};\n\n//////////////////////////////////////////////////////////////////////////////////\n\nexport interface ParsedArgs {\n readonly argv: string[];\n readonly command?: string;\n readonly positional: string[];\n readonly options: Record<string, string | boolean>;\n}\n\n/**\n * Parse command line arguments\n * @param args - Command line arguments\n * @param argOptionMap - Map of command options to their argument options\n * @returns Parsed arguments\n */\nexport const parseArgs = (\n args: string[],\n argOptionMap: Map<string, Set<string>>\n): ParsedArgs => {\n const result: any = {\n argv: args,\n positional: [],\n options: {},\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg.startsWith('--')) {\n const optionName = arg.slice(2);\n // Found option bedore command\n if (!result.command) {\n // Always flag option\n result.options[optionName] = true;\n } else {\n // Detect an argument option in the command\n const argOptions = argOptionMap.get(result.command);\n if (argOptions?.has(optionName)) {\n // Option has an argument\n i++;\n result.options[optionName] = args[i];\n } else {\n // Option is flag\n result.options[optionName] = true;\n }\n }\n // Single hyphen option is flag unless configured with an argument\n } else if (arg.startsWith('-')) {\n const optionName = arg.slice(1);\n if (optionName.length == 1) {\n const argOptions = result.command\n ? argOptionMap.get(result.command)\n : undefined;\n if (argOptions?.has(optionName)) {\n i++;\n result.options[optionName] = args[i];\n } else {\n result.options[optionName] = true;\n }\n }\n } else if (!result.command) {\n result.command = arg;\n } else {\n result.positional.push(arg);\n }\n }\n\n return result;\n};\n","// screw-up - Easy package metadata inserter on Vite plugin\n// Copyright (c) Kouji Matsui (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/screw-up/\n\nimport { join, resolve } from 'path';\nimport { existsSync } from 'fs';\nimport { mkdtemp, readFile, rm, stat, writeFile } from 'fs/promises';\nimport { spawn } from 'child_process';\nimport { tmpdir } from 'os';\nimport {\n packAssets,\n parseArgs,\n ParsedArgs,\n getComputedPackageJsonObject,\n} from './cli-internal';\nimport { getFetchGitMetadata } from './analyzer';\nimport { Logger } from './internal';\n\n// We use async I/O except 'existsSync', because 'exists' will throw an error if the file does not exist.\n\n//////////////////////////////////////////////////////////////////////////////////\n\n// Package metadata fields that should be inherited from parent\nconst defaultInheritableFields = new Set([\n 'version',\n 'description',\n 'author',\n 'license',\n 'repository',\n 'keywords',\n 'homepage',\n 'bugs',\n 'readme',\n]);\n\n// Parse inheritable fields from CLI option string\nconst parseInheritableFields = (\n inheritableFieldsOption: string | boolean | undefined\n): Set<string> => {\n if (typeof inheritableFieldsOption !== 'string') {\n return defaultInheritableFields;\n }\n if (!inheritableFieldsOption.trim()) {\n return new Set(); // Empty set for empty string (no inheritance)\n }\n return new Set(\n inheritableFieldsOption\n .split(',')\n .map((field) => field.trim())\n .filter((field) => field.length > 0)\n );\n};\n\n//////////////////////////////////////////////////////////////////////////////////\n\nconst readInputText = async (inputPath?: string): Promise<string> => {\n if (inputPath) {\n const resolvedPath = resolve(inputPath);\n return await readFile(resolvedPath, 'utf-8');\n }\n\n return await new Promise<string>((resolvePromise, rejectPromise) => {\n let data = '';\n process.stdin.setEncoding('utf-8');\n process.stdin.on('data', (chunk) => {\n data += chunk;\n });\n process.stdin.on('end', () => resolvePromise(data));\n process.stdin.on('error', (err) => rejectPromise(err));\n });\n};\n\nconst escapeRegExp = (value: string): string =>\n value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\nconst getValueByPath = (source: any, path: string): any => {\n return path.split('.').reduce<any>((current, key) => {\n if (current === undefined || current === null) {\n return undefined;\n }\n if (typeof current !== 'object' && !Array.isArray(current)) {\n return undefined;\n }\n return (current as any)[key];\n }, source);\n};\n\nconst stringifyValue = (value: any): string | undefined => {\n if (value === undefined) {\n return undefined;\n }\n if (value === null) {\n return 'null';\n }\n if (typeof value === 'object') {\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n }\n return String(value);\n};\n\nconst replacePlaceholders = (\n text: string,\n values: any,\n openBracket: string,\n closeBracket: string\n): string => {\n const pattern = new RegExp(\n `${escapeRegExp(openBracket)}(.*?)${escapeRegExp(closeBracket)}`,\n 'g'\n );\n return text.replace(pattern, (match, key) => {\n const trimmedKey = String(key).trim();\n const resolvedValue = stringifyValue(getValueByPath(values, trimmedKey));\n return resolvedValue !== undefined ? resolvedValue : match;\n });\n};\n\n//////////////////////////////////////////////////////////////////////////////////\n\nconst showFormatHelp = () => {\n console.info(`Usage: screw-up format [options] [output]\n\nFormat input text by replacing placeholders with package metadata\n\nArguments:\n output Optional output file path (default: stdout)\n\nOptions:\n -i, --input <path> Input template file (default: stdin)\n -b, --bracket <open,close> Placeholder brackets (default: {,})\n --inheritable-fields <list> Comma-separated list of fields to inherit from parent\n --no-wds Do not check working directory status to increase version\n --no-git-version-override Do not override version from Git (use package.json version)\n -f, --force Allow formatting even if package.json does not exist\n -h, --help Show help for format command\n`);\n};\n\nconst parseBracketOption = (\n bracketOption: string | undefined\n): { openBracket: string; closeBracket: string } | undefined => {\n if (!bracketOption) {\n return { openBracket: '{', closeBracket: '}' };\n }\n\n const delimiterIndex = bracketOption.indexOf(',');\n if (delimiterIndex === -1) {\n return undefined;\n }\n\n const openBracket = bracketOption.slice(0, delimiterIndex);\n const closeBracket = bracketOption.slice(delimiterIndex + 1);\n\n if (!openBracket || !closeBracket) {\n return undefined;\n }\n\n return { openBracket, closeBracket };\n};\n\nconst formatCommand = async (args: ParsedArgs, logger: Logger) => {\n if (args.options.help || args.options.h) {\n showFormatHelp();\n return 1;\n }\n\n const outputPath = args.positional[0];\n const inputPathOption =\n (args.options['input'] as string) ?? (args.options['i'] as string);\n const bracketOption =\n (args.options['bracket'] as string) ?? (args.options['b'] as string);\n const inheritableFieldsOption = args.options['inheritable-fields'] as string;\n const alwaysOverrideVersionFromGit = !args.options['no-git-version-override'];\n const checkWorkingDirectoryStatus = args.options['no-wds'] ? false : true;\n const ignorePackageJsonNotExist =\n args.options['force'] || args.options['f'] ? true : false;\n\n const bracket = parseBracketOption(\n typeof bracketOption === 'string' ? bracketOption : undefined\n );\n if (!bracket) {\n logger.error(\n 'format: Invalid bracket option, expected \"open,close\" pattern.'\n );\n return 1;\n }\n\n const { openBracket, closeBracket } = bracket;\n\n const targetDir = resolve(process.cwd());\n\n // Parse inheritable fields from CLI option or use defaults\n const inheritableFields = parseInheritableFields(inheritableFieldsOption);\n\n // The format command needs clean output, so ignore debug/info/warn outputs.\n const _logger: Logger = {\n debug: (msg) => {},\n info: (msg) => {},\n warn: (msg) => {},\n error: logger.error,\n };\n\n try {\n // Get Git metadata fetcher function\n const fetchGitMetadata = getFetchGitMetadata(\n targetDir,\n checkWorkingDirectoryStatus,\n _logger\n );\n\n // Resolve package metadata\n const computedPackageJson = await getComputedPackageJsonObject(\n targetDir,\n fetchGitMetadata,\n alwaysOverrideVersionFromGit,\n inheritableFields,\n _logger,\n ignorePackageJsonNotExist\n );\n\n if (!computedPackageJson) {\n _logger.error(`format: Unable to read package.json from: ${targetDir}`);\n return 1;\n }\n\n const inputText = await readInputText(\n typeof inputPathOption === 'string' ? inputPathOption : undefined\n );\n\n const formattedText = replacePlaceholders(\n inputText,\n computedPackageJson,\n openBracket,\n closeBracket\n );\n\n if (outputPath) {\n const resolvedOutputPath = resolve(outputPath);\n await writeFile(resolvedOutputPath, formattedText);\n }\n\n process.stdout.write(formattedText);\n } catch (error) {\n _logger.error(`format: Failed to format text: ${error}`);\n return 1;\n }\n\n return 0;\n};\n\n//////////////////////////////////////////////////////////////////////////////////\n\nconst showDumpHelp = () => {\n console.info(`Usage: screw-up dump [options] [directory]\n\nDump computed package.json as JSON\n\nArguments:\n directory Directory to dump package.json from (default: current directory)\n\nOptions:\n --inheritable-fields <list> Comma-separated list of fields to inherit from parent\n --no-wds Do not check working directory status to increase version\n --no-git-version-override Do not override version from Git (use package.json version)\n -f, --force Allow dumping even if package.json does not exist\n -h, --help Show help for dump command\n`);\n};\n\nconst dumpCommand = async (args: ParsedArgs, logger: Logger) => {\n if (args.options.help || args.options.h) {\n showDumpHelp();\n return 1;\n }\n\n const directory = args.positional[0];\n const inheritableFieldsOption = args.options['inheritable-fields'] as string;\n const alwaysOverrideVersionFromGit = !args.options['no-git-version-override'];\n const checkWorkingDirectoryStatus = args.options['no-wds'] ? false : true;\n const ignorePackageJsonNotExist =\n args.options['force'] || args.options['f'] ? true : false;\n\n // Parse inheritable fields from CLI option or use defaults\n const inheritableFields = parseInheritableFields(inheritableFieldsOption);\n\n const targetDir = resolve(directory ?? process.cwd());\n\n // The dump command needs clean output, so ignore debug/info/warn outputs.\n const _logger: Logger = {\n debug: (msg) => {},\n info: (msg) => {},\n warn: (msg) => {},\n error: logger.error,\n };\n\n try {\n // Get Git metadata fetcher function\n const fetchGitMetadata = getFetchGitMetadata(\n targetDir,\n checkWorkingDirectoryStatus,\n _logger\n );\n\n // Resolve package metadata\n const computedPackageJson = await getComputedPackageJsonObject(\n targetDir,\n fetchGitMetadata,\n alwaysOverrideVersionFromGit,\n inheritableFields,\n _logger,\n ignorePackageJsonNotExist\n );\n\n if (computedPackageJson) {\n // Output console directly\n console.info(JSON.stringify(computedPackageJson, null, 2));\n } else {\n _logger.error(`dump: Unable to read package.json from: ${targetDir}`);\n return 1;\n }\n } catch (error) {\n _logger.error(`dump: Failed to dump package.json: ${error}`);\n return 1;\n }\n return 0;\n};\n\n//////////////////////////////////////////////////////////////////////////////////\n\nconst showPackHelp = () => {\n console.info(`Usage: screw-up pack [options] [directory]\n\nPack the project into a tar archive\n\nArguments:\n directory Directory to pack (default: current directory)\n\nOptions:\n --pack-destination <path> Directory to write the tarball\n --readme <path> Replace README.md with specified file\n --inheritable-fields <list> Comma-separated list of fields to inherit from parent\n --no-wds Do not check working directory status to increase version\n --no-git-version-override Do not override version from Git (use package.json version)\n --no-replace-peer-deps Disable replacing \"*\" in peerDependencies with actual versions\n --peer-deps-prefix <prefix> Version prefix for replaced peerDependencies (default: \"^\")\n --verbose Print verbose log\n -h, --help Show help for pack command\n`);\n};\n\nconst packCommand = async (args: ParsedArgs, logger: Logger) => {\n if (args.options.help || args.options.h) {\n showPackHelp();\n return 1;\n }\n\n const directory = args.positional[0];\n const packDestination = args.options['pack-destination'] as string;\n const readmeOption = args.options['readme'] as string;\n const inheritableFieldsOption = args.options['inheritable-fields'] as string;\n const checkWorkingDirectoryStatus = args.options['no-wds'] ? false : true;\n const alwaysOverrideVersionFromGit = !args.options['no-git-version-override'];\n const replacePeerDepsWildcards = !args.options['no-replace-peer-deps'];\n const peerDepsVersionPrefix =\n (args.options['peer-deps-prefix'] as string) ?? '^';\n const verbose = args.options['verbose'] ? true : false;\n\n const targetDir = resolve(directory ?? process.cwd());\n const outputDir = packDestination ? resolve(packDestination) : process.cwd();\n const readmeReplacementPath = readmeOption\n ? resolve(readmeOption)\n : undefined;\n\n // Parse inheritable fields from CLI option or use defaults\n const inheritableFields = parseInheritableFields(inheritableFieldsOption);\n\n if (verbose) {\n logger.info(`pack: Creating archive of ${targetDir}...`);\n }\n\n try {\n const result = await packAssets(\n targetDir,\n outputDir,\n checkWorkingDirectoryStatus,\n alwaysOverrideVersionFromGit,\n inheritableFields,\n readmeReplacementPath,\n replacePeerDepsWildcards,\n peerDepsVersionPrefix,\n logger\n );\n if (result) {\n if (verbose) {\n logger.info(\n `pack: Archive created successfully: ${result.packageFileName}`\n );\n } else {\n logger.info(result.packageFileName);\n }\n } else {\n logger.error(`pack: Unable to find any files to pack: ${targetDir}`);\n return 1;\n }\n } catch (error) {\n logger.error(`pack: Failed to create archive: ${error}`);\n return 1;\n }\n return 0;\n};\n\n//////////////////////////////////////////////////////////////////////////////////\n\nconst showPublishHelp = () => {\n console.info(`Usage: screw-up publish [options] [directory|package.tgz]\n\nPublish the project\n\nArguments:\n directory|package.tgz Directory to pack and publish, or existing tarball to publish\n\nOptions:\n All npm publish options are supported, including:\n --dry-run Perform a dry run\n --tag <tag> Tag for the published version\n --access <access> Access level (public or restricted)\n --registry <registry> Registry URL\n -h, --help Show help for publish command\n\nExamples:\n screw-up publish # Publish current directory\n screw-up publish ./my-project # Publish specific directory\n screw-up publish package.tgz # Publish existing tarball\n screw-up publish --dry-run --tag beta # Publish with options\n`);\n};\n\nconst runNpmPublish = async (\n tarballPath: string,\n npmOptions: string[],\n verbose: boolean,\n logger: Logger\n) => {\n if (verbose) {\n logger.info(`publish: Publishing ${tarballPath} to npm...`);\n }\n\n const publishArgs = ['publish', tarballPath, ...npmOptions];\n\n // For testing: log the command that would be executed\n if (process.env.SCREW_UP_TEST_MODE === 'true') {\n logger.info(`TEST_MODE: Would execute: npm ${publishArgs.join(' ')}`);\n logger.info(`TEST_MODE: Tarball path: ${tarballPath}`);\n logger.info(`TEST_MODE: Options: ${npmOptions.join(' ')}`);\n logger.info(`publish: Successfully published ${tarballPath}`);\n return 0;\n }\n\n const npmProcess = spawn('npm', publishArgs, { stdio: 'inherit' });\n\n return new Promise<number>((resolve, reject) => {\n npmProcess.on('close', (code) => {\n if (code === 0) {\n if (verbose) {\n logger.info(`publish: Successfully published ${tarballPath}`);\n }\n resolve(code);\n } else {\n logger.error(`publish: npm publish failed: ${tarballPath}`);\n resolve(code);\n }\n });\n npmProcess.on('error', reject);\n });\n};\n\nconst publishCommand = async (args: ParsedArgs, logger: Logger) => {\n if (args.options.help || args.options.h) {\n showPublishHelp();\n return 1;\n }\n\n const path = args.positional[0];\n const readmeOption = args.options['readme'] as string;\n const inheritableFieldsOption = args.options['inheritable-fields'] as string;\n const checkWorkingDirectoryStatus = args.options['no-wds'] ? false : true;\n const alwaysOverrideVersionFromGit = !args.options['no-git-version-override'];\n const replacePeerDepsWildcards = !args.options['no-replace-peer-deps'];\n const peerDepsVersionPrefix =\n (args.options['peer-deps-prefix'] as string) ?? '^';\n const verbose = args.options['verbose'] ? true : false;\n\n // Parse inheritable fields from CLI option or use defaults\n const inheritableFields = parseInheritableFields(inheritableFieldsOption);\n const readmeReplacementPath = readmeOption\n ? resolve(readmeOption)\n : undefined;\n\n // Aggregate npm options, except screw-up options.\n const npmOptions: string[] = [];\n for (let i = 0; i < args.argv.length; i++) {\n const arg = args.argv[i];\n if (arg === 'publish') {\n // Skip the command itself\n } else if (\n arg === '--help' ||\n arg === '--verbose' ||\n arg === '-h' ||\n arg === '--no-wds' ||\n arg === '--no-git-version-override' ||\n arg === '--no-replace-peer-deps'\n ) {\n } else if (\n arg === '--readme' ||\n arg === '--inheritable-fields' ||\n arg === '--peer-deps-prefix'\n ) {\n i++;\n } else {\n npmOptions.push(arg);\n }\n }\n\n try {\n if (!path) {\n // No argument provided - generate tarball from current directory and publish\n const targetDir = process.cwd();\n const outputDir = await mkdtemp(join(tmpdir(), 'screw-up-publish-'));\n\n if (verbose) {\n logger.info(`publish: Creating archive of ${targetDir}...`);\n }\n\n try {\n const result = await packAssets(\n targetDir,\n outputDir,\n checkWorkingDirectoryStatus,\n alwaysOverrideVersionFromGit,\n inheritableFields,\n readmeReplacementPath,\n replacePeerDepsWildcards,\n peerDepsVersionPrefix,\n logger\n );\n if (result?.metadata) {\n if (verbose) {\n logger.info(\n `publish: Archive created successfully: ${result.packageFileName}`\n );\n }\n const archivePath = join(outputDir, result.packageFileName);\n return await runNpmPublish(archivePath, npmOptions, verbose, logger);\n } else {\n logger.error(\n `publish: Unable to find any files to pack: ${targetDir}`\n );\n return 1;\n }\n } finally {\n await rm(outputDir, { recursive: true, force: true });\n }\n } else if (existsSync(path)) {\n const pathStat = await stat(path);\n\n if (\n pathStat.isFile() &&\n (path.endsWith('.tgz') || path.endsWith('.tar.gz'))\n ) {\n // Argument is a tarball file - publish directly\n return await runNpmPublish(resolve(path), npmOptions, verbose, logger);\n } else if (pathStat.isDirectory()) {\n // Argument is a directory - generate tarball from directory and publish\n const targetDir = resolve(path);\n const outputDir = await mkdtemp(join(tmpdir(), 'screw-up-publish-'));\n\n if (verbose) {\n logger.info(`publish: Creating archive of ${targetDir}...`);\n }\n\n try {\n const result = await packAssets(\n targetDir,\n outputDir,\n checkWorkingDirectoryStatus,\n alwaysOverrideVersionFromGit,\n inheritableFields,\n readmeReplacementPath,\n replacePeerDepsWildcards,\n peerDepsVersionPrefix,\n logger\n );\n if (result?.metadata) {\n if (verbose) {\n logger.info(\n `publish: Archive created successfully: ${result.packageFileName}`\n );\n }\n const archivePath = join(outputDir, result.packageFileName);\n return await runNpmPublish(\n archivePath,\n npmOptions,\n verbose,\n logger\n );\n } else {\n logger.error(\n `publish: Unable to find any files to pack: ${targetDir}`\n );\n return 1;\n }\n } finally {\n await rm(outputDir, { recursive: true, force: true });\n }\n } else {\n logger.error(\n `publish: Invalid path - must be a directory or .tgz/.tar.gz file: ${path}`\n );\n return 1;\n }\n } else {\n logger.error(`publish: Path does not exist: ${path}`);\n return 1;\n }\n } catch (error) {\n logger.error(`publish: Failed to publish: ${error}`);\n return 1;\n }\n};\n\n//////////////////////////////////////////////////////////////////////////////////\n\nconst showHelp = async () => {\n const { author, license, repository_url, version, git_commit_hash } =\n await import('./generated/packageMetadata.js');\n console.info(`screw-up [${version}-${git_commit_hash}]\nEasy package metadata inserter CLI\nCopyright (c) ${author}\nRepository: ${repository_url}\nLicense: ${license}\n\nUsage: screw-up <command> [options]\n\nCommands:\n format [output] Format text by replacing metadata placeholders\n dump [directory] Dump computed package.json as JSON\n pack [directory] Pack the project into a tar archive\n publish [directory|package.tgz] Publish the project\n\nOptions:\n -h, --help Show help\n\nExamples:\n screw-up format output.txt # Format stdin template and write to file\n screw-up dump # Dump computed package.json as JSON\n screw-up pack # Pack current directory\n screw-up pack --pack-destination ./dist # Pack to specific output directory\n screw-up publish # Publish current directory\n screw-up publish package.tgz # Publish existing tarball\n`);\n};\n\nconst argOptionMap = new Map([\n ['dump', new Set(['inheritable-fields'])],\n [\n 'pack',\n new Set([\n 'pack-destination',\n 'readme',\n 'inheritable-fields',\n 'peer-deps-prefix',\n ]),\n ],\n ['format', new Set(['input', 'i', 'bracket', 'b', 'inheritable-fields'])],\n ['publish', new Set(['inheritable-fields', 'peer-deps-prefix'])],\n]);\n\nexport const cliMain = async (\n args: string[],\n logger: Logger\n): Promise<number> => {\n const parsedArgs = parseArgs(args, argOptionMap);\n\n // Handle global help or when no command is provided\n if (\n !parsedArgs.command &&\n (parsedArgs.options.help || parsedArgs.options.h)\n ) {\n await showHelp();\n return 1;\n }\n\n switch (parsedArgs.command) {\n case 'format':\n return await formatCommand(parsedArgs, logger);\n case 'dump':\n return await dumpCommand(parsedArgs, logger);\n case 'pack':\n return await packCommand(parsedArgs, logger);\n case 'publish':\n return await publishCommand(parsedArgs, logger);\n default:\n if (parsedArgs.command) {\n logger.error(`Unknown command: ${parsedArgs.command}`);\n } else {\n logger.error(`Unknown command`);\n }\n logger.error('Run \"screw-up --help\" for usage information.');\n return 1;\n }\n};\n","#!/usr/bin/env node\n\n// screw-up - Easy package metadata inserter on Vite plugin\n// Copyright (c) Kouji Matsui (@kekyo@mi.kekyo.net)\n// Under MIT.\n// https://github.com/kekyo/screw-up/\n\nimport { cliMain } from './cli';\nimport { createConsoleLogger } from './internal';\nimport { name, version } from './generated/packageMetadata';\n\n// We use async I/O except 'existsSync', because 'exists' will throw an error if the file does not exist.\n\n//////////////////////////////////////////////////////////////////////////////////\n\nconst loggerPrefix = `${name}-cli`;\nconst logger = createConsoleLogger(loggerPrefix);\n\ncliMain(\n process.argv.slice(2), // Remove 'node' and script path\n logger\n)\n .then((code) => process.exit(code))\n .catch((error) => {\n logger.error(`CLI error: ${error}`);\n process.exit(1);\n });\n"],"names":["name","logger","argOptionMap","resolve"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*!
|
|
3
3
|
* name: screw-up
|
|
4
|
-
* version: 1.
|
|
4
|
+
* version: 1.15.0
|
|
5
5
|
* description: Simply package metadata inserter on Vite plugin
|
|
6
6
|
* author: Kouji Matsui (@kekyo@mi.kekyo.net)
|
|
7
7
|
* license: MIT
|
|
8
8
|
* repository.url: https://github.com/kekyo/screw-up.git
|
|
9
|
-
* git.commit.hash:
|
|
9
|
+
* git.commit.hash: 6342e8bf692322743d3cdc8d8815c1ae45b7162d
|
|
10
10
|
*/
|
|
11
11
|
const fs = require("fs");
|
|
12
12
|
const fs$1 = require("fs/promises");
|
|
@@ -1262,6 +1262,7 @@ const mergePackageMetadata = async (fetchGitMetadata, alwaysOverrideVersionFromG
|
|
|
1262
1262
|
return merged;
|
|
1263
1263
|
};
|
|
1264
1264
|
const mergeRawPackageJson = async (fetchGitMetadata, alwaysOverrideVersionFromGit, inheritableFields, sourceMap, parentMetadata, childMetadata, parentSourceDir, childSourceDir, repositoryPath) => {
|
|
1265
|
+
var _a, _b, _c, _d;
|
|
1265
1266
|
const gitMetadata = await fetchGitMetadata();
|
|
1266
1267
|
const merged = { ...gitMetadata };
|
|
1267
1268
|
for (const key2 in parentMetadata) {
|
|
@@ -1284,6 +1285,18 @@ const mergeRawPackageJson = async (fetchGitMetadata, alwaysOverrideVersionFromGi
|
|
|
1284
1285
|
merged.version = gitMetadata.version;
|
|
1285
1286
|
sourceMap.set("version", repositoryPath);
|
|
1286
1287
|
}
|
|
1288
|
+
if (!merged.version) {
|
|
1289
|
+
merged.version = "0.0.1";
|
|
1290
|
+
const gitInfo = typeof merged.git === "object" && merged.git !== null ? merged.git : {};
|
|
1291
|
+
gitInfo.version = (_a = gitInfo.version) != null ? _a : merged.version;
|
|
1292
|
+
gitInfo.commit = (_b = gitInfo.commit) != null ? _b : {
|
|
1293
|
+
hash: "unknown",
|
|
1294
|
+
shortHash: "unknown"
|
|
1295
|
+
};
|
|
1296
|
+
gitInfo.tags = (_c = gitInfo.tags) != null ? _c : [];
|
|
1297
|
+
gitInfo.branches = (_d = gitInfo.branches) != null ? _d : [];
|
|
1298
|
+
merged.git = gitInfo;
|
|
1299
|
+
}
|
|
1287
1300
|
return merged;
|
|
1288
1301
|
};
|
|
1289
1302
|
const resolvePackageMetadataT = async (projectRoot, logger, readPackageMetadataFn, mergePackageMetadataFn) => {
|
|
@@ -1353,21 +1366,28 @@ const resolvePackageMetadata = async (projectRoot, fetchGitMetadata, alwaysOverr
|
|
|
1353
1366
|
sourceMap
|
|
1354
1367
|
};
|
|
1355
1368
|
};
|
|
1356
|
-
const readRawPackageJson = async (logger, packagePath) => {
|
|
1369
|
+
const readRawPackageJson = async (logger, packagePath, ignoreNotExist = false) => {
|
|
1370
|
+
if (ignoreNotExist && !fs.existsSync(packagePath)) {
|
|
1371
|
+
return {};
|
|
1372
|
+
}
|
|
1357
1373
|
try {
|
|
1358
1374
|
const content = await fs$1.readFile(packagePath, "utf-8");
|
|
1359
1375
|
return lib.parse(content);
|
|
1360
1376
|
} catch (error) {
|
|
1377
|
+
if (ignoreNotExist && (error == null ? void 0 : error.code) === "ENOENT") {
|
|
1378
|
+
return {};
|
|
1379
|
+
}
|
|
1361
1380
|
logger.error(`Failed to read package.json from ${packagePath}: ${error}`);
|
|
1362
1381
|
throw error;
|
|
1363
1382
|
}
|
|
1364
1383
|
};
|
|
1365
|
-
const resolveRawPackageJsonObject = async (projectRoot, fetchGitMetadata, alwaysOverrideVersionFromGit, inheritableFields, logger) => {
|
|
1384
|
+
const resolveRawPackageJsonObject = async (projectRoot, fetchGitMetadata, alwaysOverrideVersionFromGit, inheritableFields, logger, ignoreNotExist = false) => {
|
|
1366
1385
|
const sourceMap = /* @__PURE__ */ new Map();
|
|
1386
|
+
const readRawPackageJsonFn = async (packagePath) => readRawPackageJson(logger, packagePath, ignoreNotExist);
|
|
1367
1387
|
const packageJson = await resolvePackageMetadataT(
|
|
1368
1388
|
projectRoot,
|
|
1369
1389
|
logger,
|
|
1370
|
-
|
|
1390
|
+
readRawPackageJsonFn,
|
|
1371
1391
|
mergeRawPackageJson.bind(
|
|
1372
1392
|
void 0,
|
|
1373
1393
|
fetchGitMetadata,
|
|
@@ -2173,11 +2193,11 @@ const getFetchGitMetadata = (targetDir, checkWorkingDirectoryStatus, logger) =>
|
|
|
2173
2193
|
};
|
|
2174
2194
|
};
|
|
2175
2195
|
const name = "screw-up";
|
|
2176
|
-
const version = "1.
|
|
2196
|
+
const version = "1.15.0";
|
|
2177
2197
|
const author = "Kouji Matsui (@kekyo@mi.kekyo.net)";
|
|
2178
2198
|
const license = "MIT";
|
|
2179
2199
|
const repository_url = "https://github.com/kekyo/screw-up.git";
|
|
2180
|
-
const git_commit_hash = "
|
|
2200
|
+
const git_commit_hash = "6342e8bf692322743d3cdc8d8815c1ae45b7162d";
|
|
2181
2201
|
const packageMetadata = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
2182
2202
|
__proto__: null,
|
|
2183
2203
|
author,
|
|
@@ -2198,4 +2218,4 @@ exports.replacePeerDependenciesWildcards = replacePeerDependenciesWildcards;
|
|
|
2198
2218
|
exports.resolvePackageMetadata = resolvePackageMetadata;
|
|
2199
2219
|
exports.resolveRawPackageJsonObject = resolveRawPackageJsonObject;
|
|
2200
2220
|
exports.version = version;
|
|
2201
|
-
//# sourceMappingURL=packageMetadata-
|
|
2221
|
+
//# sourceMappingURL=packageMetadata-BP1lkMwy.cjs.map
|