{"_id":"@davidlevyelias/luapack","_rev":"7-de96a965be3884a200788e5052a0f4b0","name":"@davidlevyelias/luapack","dist-tags":{"latest":"2.1.2"},"versions":{"1.0.0":{"name":"@davidlevyelias/luapack","version":"1.0.0","keywords":["lua","packer","bundler","obfuscator"],"author":{"name":"David Levy Elias"},"license":"MIT","_id":"@davidlevyelias/luapack@1.0.0","maintainers":[{"name":"davidlevyelias","email":"ld.davidlevy@gmail.com"}],"homepage":"https://github.com/davidlevyelias/LuaPack#readme","bugs":{"url":"https://github.com/davidlevyelias/LuaPack/issues"},"bin":{"luapack":"index.js"},"dist":{"shasum":"02ab4d29bf883670b983d680260176547f4a0122","tarball":"https://registry.npmjs.org/@davidlevyelias/luapack/-/luapack-1.0.0.tgz","fileCount":35,"integrity":"sha512-H7unm5ZDPxtwmoZbMA3yyl3YqwPrwABJEBN9c2gARzLLZJQB8e77PPHK4rtCzbJnK/0dOM7oNjYnqVX7abn4qg==","signatures":[{"sig":"MEUCIEwxSsiJPoFAKX+Ibx1D9DMUaJJ621zZZXLxcFrLv1zXAiEAop6A8xlhhHsonVwPv4c+yGYYOT6gIP4O2okxIyDH1uM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davidlevyelias%2fluapack@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":109356},"main":"index.js","engines":{"node":">=18"},"gitHead":"18b2068620c16a5e03e3fb6e166f11d1d7ff3193","scripts":{"test":"jest --config jest.config.cjs","typecheck":"tsc --noEmit","pack:example":"node index.js --config examples/demo/basic.luapack.config.json && lua dist/demo_basic_bundle.lua","prepublishOnly":"npm run typecheck && npm test"},"_npmUser":{"name":"davidlevyelias","email":"ld.davidlevy@gmail.com"},"repository":{"url":"git+https://github.com/davidlevyelias/LuaPack.git","type":"git"},"_npmVersion":"10.9.4","description":"A modern Lua packer tool.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"ajv":"^8.17.1","ts-node":"^10.9.2","commander":"^14.0.2","lua-format":"^1.5.3-c","ansi-colors":"^4.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.3.4","prettier":"^3.6.2","typescript":"^5.5.4","@types/jest":"^29.5.12","@types/node":"^20.15.5"},"_npmOperationalInternal":{"tmp":"tmp/luapack_1.0.0_1762976242994_0.11963574321149961","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@davidlevyelias/luapack","version":"1.1.0","keywords":["lua","packer","bundler","obfuscator"],"author":{"name":"David Levy Elias"},"license":"MIT","_id":"@davidlevyelias/luapack@1.1.0","maintainers":[{"name":"davidlevyelias","email":"ld.davidlevy@gmail.com"}],"homepage":"https://github.com/davidlevyelias/LuaPack#readme","bugs":{"url":"https://github.com/davidlevyelias/LuaPack/issues"},"bin":{"luapack":"index.js"},"dist":{"shasum":"e0d28142a276bccb14108f2baf40ede087a0bc7c","tarball":"https://registry.npmjs.org/@davidlevyelias/luapack/-/luapack-1.1.0.tgz","fileCount":35,"integrity":"sha512-r61Y4nIlnSD/Qqz3ECz33UOG9H8jeQKHrXZfWNd9ddH3h3OUna+MJ17lFiLORRoDb+7D/8Scyn8F5A5fruXSgg==","signatures":[{"sig":"MEQCIBYOR+bu3/DKxilFStKlhwIGO+GPKASxLvKP/ensLGOlAiAQM9EK+Ih/kw6pMMOkEeKxqwqIoRaHUe/ZpjqDbh2DpQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davidlevyelias%2fluapack@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":109854},"main":"index.js","engines":{"node":">=18"},"gitHead":"5b4f512e4cc22a5f481eb56d89368b288bb727ee","scripts":{"test":"jest --config jest.config.cjs","typecheck":"tsc --noEmit","pack:example":"node index.js --config examples/demo/basic.luapack.config.json && lua dist/demo_basic_bundle.lua","prepublishOnly":"npm run typecheck && npm test"},"_npmUser":{"name":"davidlevyelias","email":"ld.davidlevy@gmail.com"},"repository":{"url":"git+https://github.com/davidlevyelias/LuaPack.git","type":"git"},"_npmVersion":"10.9.4","description":"A modern Lua packer tool.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"ajv":"^8.17.1","ts-node":"^10.9.2","commander":"^14.0.2","lua-format":"^1.5.3-c","ansi-colors":"^4.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.3.4","prettier":"^3.6.2","typescript":"^5.5.4","@types/jest":"^29.5.12","@types/node":"^20.15.5"},"_npmOperationalInternal":{"tmp":"tmp/luapack_1.1.0_1762979289275_0.6789103315781242","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@davidlevyelias/luapack","version":"1.1.1","keywords":["lua","packer","bundler","obfuscator"],"author":{"name":"David Levy Elias"},"license":"MIT","_id":"@davidlevyelias/luapack@1.1.1","maintainers":[{"name":"davidlevyelias","email":"ld.davidlevy@gmail.com"}],"homepage":"https://github.com/davidlevyelias/LuaPack#readme","bugs":{"url":"https://github.com/davidlevyelias/LuaPack/issues"},"bin":{"luapack":"build/index.js"},"dist":{"shasum":"ade14f18971183870846e39e1f26b0eb4646c9ee","tarball":"https://registry.npmjs.org/@davidlevyelias/luapack/-/luapack-1.1.1.tgz","fileCount":32,"integrity":"sha512-9dCn19XgDGha2oXagvfuolQIqPf/WP/rC9hL7Ejnvi+HxFHEGSoJweMorjJ0r8IliABKszn54lI45FHXKIP/7w==","signatures":[{"sig":"MEUCIQCSWwdkI3OLjE0+erjsmJP0DJa3eQnYqkUqHB/+YlkS9AIgPURxIfsJBpQn0Aw3djYv7G0NfjTvxr0K3fIYzb6NPkM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davidlevyelias%2fluapack@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":108815},"main":"build/index.js","engines":{"node":">=18"},"gitHead":"b8aceac41eaa47219a4bdc99784b3f7c955c7066","scripts":{"test":"jest --config jest.config.cjs","build":"tsc -p tsconfig.json","typecheck":"tsc --noEmit","pack:example":"npm run build && node build/index.js --verbose --config examples/demo/basic.luapack.config.json && lua dist/demo_basic_bundle.lua","prepublishOnly":"npm run build && npm run typecheck && npm test"},"_npmUser":{"name":"davidlevyelias","email":"ld.davidlevy@gmail.com"},"repository":{"url":"git+https://github.com/davidlevyelias/LuaPack.git","type":"git"},"_npmVersion":"10.9.4","description":"A modern Lua packer tool.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"ajv":"^8.17.1","ts-node":"^10.9.2","commander":"^14.0.2","lua-format":"^1.5.3-c","ansi-colors":"^4.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.3.4","prettier":"^3.6.2","typescript":"^5.5.4","@types/jest":"^29.5.12","@types/node":"^20.15.5"},"_npmOperationalInternal":{"tmp":"tmp/luapack_1.1.1_1762981812147_0.8416322646707233","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@davidlevyelias/luapack","version":"2.0.0","keywords":["lua","packer","bundler","analysis"],"author":{"name":"David Levy Elias"},"license":"MIT","_id":"@davidlevyelias/luapack@2.0.0","maintainers":[{"name":"davidlevyelias","email":"ld.davidlevy@gmail.com"}],"homepage":"https://github.com/davidlevyelias/LuaPack#readme","bugs":{"url":"https://github.com/davidlevyelias/LuaPack/issues"},"bin":{"luapack":"build/index.js"},"dist":{"shasum":"7bccf94b83d6c7ad1e6c25bc07c80f3a7ce2f28a","tarball":"https://registry.npmjs.org/@davidlevyelias/luapack/-/luapack-2.0.0.tgz","fileCount":78,"integrity":"sha512-U6N8AcgK5kTLQTk0c1G7CIld+uZMI8yQYEa4KqHkCEFm4j2Novz6CRELMjkVfpT1/FYfKBp0CWGCGFX+UXAKJw==","signatures":[{"sig":"MEUCIQDZwxY4944NBLxtX498dUG0JSHzp8kOTSawSkLZ69XWRwIgXWOqIUI6E+zQaxjUbymmi1hqgLg88vOSJPNkRgMples=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davidlevyelias%2fluapack@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":201533},"main":"build/index.js","engines":{"node":">=20.12.0"},"gitHead":"c900fcb8af7e47369240a2ffa1c1b015dc7ad5e0","scripts":{"test":"jest --config jest.config.cjs","build":"node -e \"require('fs').rmSync('build',{recursive:true,force:true})\" && tsc -p tsconfig.json","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test && npm run build","example:demo:bundle":"npm run build && node build/index.js bundle --config examples/demo/basic.luapack.config.json","example:simple:bundle":"npm run build && node build/index.js bundle --config examples/simple/basic.luapack.config.json","example:simple:analyze":"npm run build && node build/index.js analyze --config examples/simple/basic.luapack.config.json --verbose","example:simple:missing":"npm run build && node build/index.js analyze --config examples/simple/missing-warn.luapack.config.json --verbose"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:091aa3fe-3fd1-44da-afd4-102d0f6f53b9"}},"repository":{"url":"git+https://github.com/davidlevyelias/LuaPack.git","type":"git"},"_npmVersion":"11.12.1","description":"A modern Lua bundler and analyzer.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ajv":"^8.18.0","luaparse":"^0.3.1","commander":"^14.0.3","ansi-colors":"^4.1.3","@inquirer/prompts":"^8.4.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","ts-jest":"^29.4.9","prettier":"^3.8.1","typescript":"^6.0.2","@types/jest":"^30.0.0","@types/node":"^25.5.0","@types/luaparse":"^0.2.13"},"_npmOperationalInternal":{"tmp":"tmp/luapack_2.0.0_1776057658417_0.77277529154432","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@davidlevyelias/luapack","version":"2.1.0","keywords":["lua","packer","bundler","analysis"],"author":{"name":"David Levy Elias"},"license":"MIT","_id":"@davidlevyelias/luapack@2.1.0","maintainers":[{"name":"davidlevyelias","email":"ld.davidlevy@gmail.com"}],"homepage":"https://github.com/davidlevyelias/LuaPack#readme","bugs":{"url":"https://github.com/davidlevyelias/LuaPack/issues"},"bin":{"luapack":"build/index.js"},"dist":{"shasum":"b3d1dc8f1fad28f37dbe1343e8452648e2786555","tarball":"https://registry.npmjs.org/@davidlevyelias/luapack/-/luapack-2.1.0.tgz","fileCount":78,"integrity":"sha512-TBSSFxcyzu12z3cRAjoqo7/qlRA4Ep7lIQpO78/jeqRN9ZuHj3Ogy+jxuU9G1cETVwm4kkldnFBgBgyiqGNrag==","signatures":[{"sig":"MEUCIQDcs0uOX7Z2rr52IdGc9yL55Em1nNz+gmehT9vTLPESbgIgH8Sd3RdMtDSPZ+4eUIUoAGOzdWD3j33XLeXzwq2cpOw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davidlevyelias%2fluapack@2.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":206177},"main":"build/index.js","engines":{"node":">=20.12.0"},"gitHead":"75af916d548563d654be52a0dcada9344229dc28","scripts":{"test":"jest --config jest.config.cjs","build":"node -e \"require('fs').rmSync('build',{recursive:true,force:true})\" && tsc -p tsconfig.json","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test && npm run build","example:demo:bundle":"npm run build && node build/index.js bundle --config examples/demo/basic.luapack.config.json","example:simple:bundle":"npm run build && node build/index.js bundle --config examples/simple/basic.luapack.config.json","example:simple:analyze":"npm run build && node build/index.js analyze --config examples/simple/basic.luapack.config.json --verbose","example:simple:missing":"npm run build && node build/index.js analyze --config examples/simple/missing-warn.luapack.config.json --verbose"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:091aa3fe-3fd1-44da-afd4-102d0f6f53b9"}},"repository":{"url":"git+https://github.com/davidlevyelias/LuaPack.git","type":"git"},"_npmVersion":"11.12.1","description":"A modern Lua bundler and analyzer.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ajv":"^8.18.0","luaparse":"^0.3.1","commander":"^14.0.3","ansi-colors":"^4.1.3","@inquirer/prompts":"^8.4.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","ts-jest":"^29.4.9","prettier":"^3.8.1","typescript":"^6.0.2","@types/jest":"^30.0.0","@types/node":"^25.5.0","@types/luaparse":"^0.2.13"},"_npmOperationalInternal":{"tmp":"tmp/luapack_2.1.0_1776211446571_0.5249555971378366","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@davidlevyelias/luapack","version":"2.1.1","keywords":["lua","packer","bundler","analysis"],"author":{"name":"David Levy Elias"},"license":"MIT","_id":"@davidlevyelias/luapack@2.1.1","maintainers":[{"name":"davidlevyelias","email":"ld.davidlevy@gmail.com"}],"homepage":"https://github.com/davidlevyelias/LuaPack#readme","bugs":{"url":"https://github.com/davidlevyelias/LuaPack/issues"},"bin":{"luapack":"build/index.js"},"dist":{"shasum":"80551943754efb5d62f4b1f15af3d789965d3d4e","tarball":"https://registry.npmjs.org/@davidlevyelias/luapack/-/luapack-2.1.1.tgz","fileCount":78,"integrity":"sha512-puyTtECkW/zC224Pa/0ZsKD+n1IrauIV6GmiGE7xHfZ/qDIlJMdgxjRXO2jVbl+rBkbV1EpZpoSxI76ohAMCbg==","signatures":[{"sig":"MEUCIClEQQAjUHLrVJ6rbw/bRnFbhj6a+0/C7XNHYhUgmU7dAiEAh2Jx2TavhI/cYBPSIXbSGdN5TtIhgKsLpIXHlRs62CE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davidlevyelias%2fluapack@2.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":210242},"main":"build/index.js","engines":{"node":">=20.12.0"},"gitHead":"6db2a0fb45251b269a50fe81a5fdb5bcc0612338","scripts":{"test":"jest --config jest.config.cjs","build":"node -e \"require('fs').rmSync('build',{recursive:true,force:true})\" && tsc -p tsconfig.json","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm test && npm run build","example:demo:bundle":"npm run build && node build/index.js bundle --config examples/demo/basic.luapack.config.json","example:simple:bundle":"npm run build && node build/index.js bundle --config examples/simple/basic.luapack.config.json","example:simple:analyze":"npm run build && node build/index.js analyze --config examples/simple/basic.luapack.config.json --verbose","example:simple:missing":"npm run build && node build/index.js analyze --config examples/simple/missing-warn.luapack.config.json --verbose"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:091aa3fe-3fd1-44da-afd4-102d0f6f53b9"}},"repository":{"url":"git+https://github.com/davidlevyelias/LuaPack.git","type":"git"},"_npmVersion":"11.15.0","description":"A modern Lua bundler and analyzer.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"ajv":"^8.18.0","luaparse":"^0.3.1","commander":"^14.0.3","ansi-colors":"^4.1.3","@inquirer/prompts":"^8.4.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.3.0","ts-jest":"^29.4.9","prettier":"^3.8.1","typescript":"^6.0.2","@types/jest":"^30.0.0","@types/node":"^25.5.0","@types/luaparse":"^0.2.13"},"_npmOperationalInternal":{"tmp":"tmp/luapack_2.1.1_1779835427523_0.14339382934978318","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"@davidlevyelias/luapack","author":{"name":"David Levy Elias"},"version":"2.1.2","description":"A modern Lua bundler and analyzer.","main":"build/index.js","bin":{"luapack":"build/index.js"},"publishConfig":{"access":"public"},"scripts":{"test":"jest --config jest.config.cjs","typecheck":"tsc --noEmit","build":"node -e \"require('fs').rmSync('build',{recursive:true,force:true})\" && tsc -p tsconfig.json","example:simple:bundle":"npm run build && node build/index.js bundle --config examples/simple/basic.luapack.config.json","example:simple:analyze":"npm run build && node build/index.js analyze --config examples/simple/basic.luapack.config.json --verbose","example:simple:missing":"npm run build && node build/index.js analyze --config examples/simple/missing-warn.luapack.config.json --verbose","example:demo:bundle":"npm run build && node build/index.js bundle --config examples/demo/basic.luapack.config.json","prepublishOnly":"npm run typecheck && npm test && npm run build"},"keywords":["lua","packer","bundler","analysis"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/davidlevyelias/LuaPack.git"},"homepage":"https://github.com/davidlevyelias/LuaPack#readme","bugs":{"url":"https://github.com/davidlevyelias/LuaPack/issues"},"dependencies":{"@inquirer/prompts":"^7.10.1","ajv":"^8.20.0","ansi-colors":"^4.1.3","commander":"^14.0.3","luaparse":"^0.3.1"},"devDependencies":{"@types/jest":"^30.0.0","@types/luaparse":"^0.2.13","@types/node":"^20.19.41","jest":"^30.4.2","prettier":"^3.8.3","ts-jest":"^29.4.11","typescript":"^6.0.3"},"engines":{"node":">=20.12.0"},"gitHead":"5eaed6a15ad583877bac04d5caefdcf588fd9afb","_id":"@davidlevyelias/luapack@2.1.2","_nodeVersion":"24.16.0","_npmVersion":"11.15.0","dist":{"integrity":"sha512-PHdqTxYqBIaHgJylOLpFjtjPpG0w0R/wBnudd0Wb5vTQ+Z64VtobtGJ8jtQbKtsO20WhYFDS2FENOXxXCd1stQ==","shasum":"8b14f0d52aa3824610fd71deb2a05eef7a3d3aa6","tarball":"https://registry.npmjs.org/@davidlevyelias/luapack/-/luapack-2.1.2.tgz","fileCount":78,"unpackedSize":210246,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davidlevyelias%2fluapack@2.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIE5xiHlOJkS8oyxGZMWsXdjFfwp/49skFNqpXqeekeYLAiEAnFOQ9eWfsHtni3q2D3AFilXBOoGMdvw2W9cKqa06MTg="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:091aa3fe-3fd1-44da-afd4-102d0f6f53b9"}},"directories":{},"maintainers":[{"name":"davidlevyelias","email":"ld.davidlevy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/luapack_2.1.2_1779836527068_0.856975770814181"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-12T19:37:22.870Z","modified":"2026-05-26T23:02:07.543Z","1.0.0":"2025-11-12T19:37:23.173Z","1.1.0":"2025-11-12T20:28:09.461Z","1.1.1":"2025-11-12T21:10:12.370Z","2.0.0":"2026-04-13T05:20:58.598Z","2.1.0":"2026-04-15T00:04:06.711Z","2.1.1":"2026-05-26T22:43:47.671Z","2.1.2":"2026-05-26T23:02:07.219Z"},"bugs":{"url":"https://github.com/davidlevyelias/LuaPack/issues"},"author":{"name":"David Levy Elias"},"license":"MIT","homepage":"https://github.com/davidlevyelias/LuaPack#readme","keywords":["lua","packer","bundler","analysis"],"repository":{"type":"git","url":"git+https://github.com/davidlevyelias/LuaPack.git"},"description":"A modern Lua bundler and analyzer.","maintainers":[{"name":"davidlevyelias","email":"ld.davidlevy@gmail.com"}],"readme":"# LuaPack\n\nLuaPack is a Node.js command-line tool for analyzing Lua dependency graphs and producing a single distributable runtime bundle. It follows explicit `require` statements, resolves modules through declared package roots and local rules, and emits a self-contained runtime artifact.\n\n## Features\n\n- Resolves static `require` statements starting from an entry Lua file.\n- Builds dependency analysis output in text or JSON form.\n- Generates self-contained runtime bundles with controlled fallback behavior.\n- Supports package-scoped dependency policies and local module rules.\n- Supports configurable Lua grammar/runtime targets: `5.1`, `5.2`, `5.3`, and `LuaJIT`.\n- Validates configuration against the canonical v2 schema before execution.\n\n## Installation\n\nLuaPack currently requires Node.js 20.12.0 or newer.\n\n```bash\nnpm install @davidlevyelias/luapack\n```\n\n## CLI Usage\n\nThe CLI is exposed through the `luapack` binary.\n\n```bash\nluapack <command> [entry] [options]\n```\n\nAvailable commands:\n\n- `luapack bundle [entry]`: Analyze the dependency graph and emit a bundle.\n- `luapack analyze [entry]`: Analyze the dependency graph and print or write a report.\n- `luapack init`: Generate a `luapack.config.json` file interactively.\n\nCommon options:\n\n- `-c, --config <file>`: Point to a `luapack.config.json` file.\n- `-o, --output <file>`: Override the bundle path or report path.\n- `--root <path>`: Override the default package root for the current run.\n- `--lua-version <version>`: Override the Lua version used for parsing and runtime targeting: `5.1`, `5.2`, `5.3`, or `LuaJIT`.\n- `--missing <policy>`: Missing-module policy: `error` or `warn`.\n- `--fallback <policy>`: Runtime fallback policy: `never`, `external-only`, or `always`.\n- `--print-config`: Print the effective normalized v2 config and exit.\n- `--no-color`: Disable ANSI color output.\n- `--quiet`: Suppress informational CLI output.\n- `--verbose`: Include verbose dependency details in report output.\n- `--format <format>`: Visual output format: `text` or `json`.\n- `--report <file>` (bundle): Write bundle analysis report to a file.\n- `--report-format <format>` (bundle): File report format: `text` or `json`.\n- `--log-level <level>`: Adjust logger verbosity (`error`, `warn`, `info`, `debug`).\n\nExamples:\n\n```bash\n# Generate a config file interactively\nluapack init\n\n# Build a small runtime bundle from config\nluapack bundle --config examples/simple/basic.luapack.config.json\n\n# Inspect a small missing-module report\nluapack analyze --config examples/simple/missing-warn.luapack.config.json --verbose\n\n# Inspect the effective normalized config without running analysis or bundling\nluapack bundle --config examples/simple/basic.luapack.config.json --print-config\n```\n\nDisplay full help with:\n\n```bash\nluapack --help\n```\n\nWhen `--format json` is used, command-line usage failures are emitted as a machine-readable JSON payload instead of mixed help text. This applies to parse-time issues such as invalid option values.\n\n## Configuration (`luapack.config.json`)\n\nLuaPack now accepts only the canonical v2 configuration format. Every config file must declare `schemaVersion: 2`. The loader validates the file against `config.schema.json`, then applies supported CLI overrides.\n\nMinimal example:\n\n```json\n{\n\t\"$schema\": \"https://raw.githubusercontent.com/davidlevyelias/LuaPack/v2.1.0/config.schema.json\",\n\t\"schemaVersion\": 2,\n\t\"entry\": \"./src/main.lua\",\n\t\"output\": \"./dist/app.bundle.lua\",\n\t\"luaVersion\": \"5.3\",\n\t\"packages\": {\n\t\t\"default\": {\n\t\t\t\"root\": \"./src\"\n\t\t}\n\t}\n}\n```\n\n- `$schema`: Optional JSON Schema URL for editor integration. `luapack init` writes a versioned schema URL so generated configs stay pinned to the installed LuaPack release instead of following the mutable `main` branch.\n- `schemaVersion`: Must be `2`.\n- `entry`: Entry Lua file.\n- `output`: Optional output path. Defaults to `<entry-name>_packed.lua` alongside the entry file.\n- `luaVersion`: Optional Lua version used for both dependency parsing and the runtime target. Supported values are `5.1`, `5.2`, `5.3`, and `LuaJIT`. Defaults to `5.3`.\n- `missing`: Optional global missing-module policy.\n- `packages.default.root`: Root directory for the default package. If omitted, LuaPack uses the entry file directory.\n\nLua 5.4 is not currently supported because the active parser backend does not support it.\n\n### `packages`\n\n```json\n{\n\t\"missing\": \"warn\",\n\t\"packages\": {\n\t\t\"default\": {\n\t\t\t\"root\": \"./src\",\n\t\t\t\"dependencies\": {\n\t\t\t\t\"sdk\": {\n\t\t\t\t\t\"mode\": \"external\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"rules\": {\n\t\t\t\t\"socket.core\": {\n\t\t\t\t\t\"mode\": \"ignore\"\n\t\t\t\t},\n\t\t\t\t\"dkjson\": {\n\t\t\t\t\t\"mode\": \"bundle\",\n\t\t\t\t\t\"path\": \"./vendor/dkjson.lua\",\n\t\t\t\t\t\"recursive\": false\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"sdk\": {\n\t\t\t\"root\": \"./external_modules/sdk\"\n\t\t\t}\n\t\t}\n\t}\n}\n```\n\n- `missing`: Global missing-module policy.\n- `packages`: Declared package scopes keyed by Lua require prefix.\n- `dependencies`: Per-package dependency policy for other declared packages.\n- `rules`: Local-module policy keyed by module identifier inside the package.\n\nEach dependency supports:\n\n- `mode: \"bundle\"`: Include modules from that package in the bundle.\n- `mode: \"external\"`: Treat that package as runtime-provided through host `require`.\n- `mode: \"ignore\"`: Reject requests for that package at bundle runtime.\n- `recursive: false`: Resolve the package entry module but skip dependency traversal below it.\n\nEach local rule supports:\n\n- `mode: \"bundle\"`: Include the module in the bundle.\n- `mode: \"external\"`: Treat the module as runtime-provided through host `require`.\n- `mode: \"ignore\"`: Reject requests for the module at bundle runtime.\n- `path`: Override the resolved module path.\n- `recursive: false`: Resolve the module but skip dependency traversal below it.\n\n### `bundle`\n\n```json\n{\n\t\"bundle\": {\n\t\t\"fallback\": \"never\"\n\t}\n}\n```\n\n- `fallback`: `never`, `external-only`, or `always`. Explicit `external` policies\n  always use host `require`; explicit `ignore` policies never fall back.\n\n\n## Breaking Change\n\nLuaPack v1 configuration is no longer supported. Legacy fields such as `sourceRoot`, `modules.external`, `modules.overrides`, `modules.ignoreMissing`, `--sourceroot`, and `--ignore-missing` have been removed from the active config and CLI surface. Public v2 configs should now use top-level `missing` and `packages` instead of a `modules` block.\n\n\n\n## Development\n\n- **Format code**: `npx prettier --write .`\n- **Run simple example build**: `npm run example:simple:bundle`\n- **Run simple example analysis**: `npm run example:simple:analyze`\n- **Run tests**: `npm test`\n\nThe test suite covers the configuration loader, dependency analysis pipeline, bundle generator, CLI workflows, and report generation.\n\n\n\n## License\n\nMIT\n","readmeFilename":"README.md"}