{"_id":"mtg-crucible","_rev":"37-34d616c08b54be1c0e13b7bd01777a9c","name":"mtg-crucible","dist-tags":{"latest":"0.4.17"},"versions":{"0.2.19":{"name":"mtg-crucible","version":"0.2.19","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.2.19","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"3443dda1d2fa54e5ebd722c4df00ee9d36ac04ff","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.2.19.tgz","fileCount":475,"integrity":"sha512-u0qgrUdAiP0vQqB5a1YtWIuTlVzZ5OBToMf3+t5mmHNCXRuC8CCajp8raAr9JXnSjkkC6GG513zNKsD5fEWC5w==","signatures":[{"sig":"MEQCICN0pjjyvQ3KiaQZ2p93448H6n1iUMohBX2E4/LO8PtkAiAuNqiNYvp70gVRSgXlKU/LidjB0Dj1EaHzhitnPAdzig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184304329},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"c2d9328689764437ba59d3b690fe77f45e370c5d","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.2.19_1775431823678_0.9596009544585804","host":"s3://npm-registry-packages-npm-production"}},"0.2.20":{"name":"mtg-crucible","version":"0.2.20","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.2.20","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"4bbda9201e678659b864187b3d5cd1a9ca2fa7a1","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.2.20.tgz","fileCount":475,"integrity":"sha512-Sai3hy63Wk4uhBj9iB0lW2a+pEh7IjJd0KfuZP9r03JPB+UhXJ6mnEzWP8oAxW6HMy43Nw24Q4fmm6U/zn9OWA==","signatures":[{"sig":"MEYCIQDHjgM74egdydI2esQl1NMx3YEj14jia0+QcPUZi4bJGQIhANZiuLMJKXqQr/YRu7afrVAkMGRK6qE+ej5a1OOcBUgn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184309661},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"51021d91efdd113e7a0715ea45e7c53670f3452f","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.2.20_1775440171966_0.13045973822381263","host":"s3://npm-registry-packages-npm-production"}},"0.2.21":{"name":"mtg-crucible","version":"0.2.21","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.2.21","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"7c2e42aba82acf1ff9ffa58618cd5048c88a375e","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.2.21.tgz","fileCount":475,"integrity":"sha512-pkqFy+j2qqCi1MiCYSS5bs+ImyRK0jR85YD6fg0OoMir13/758KorLFa8kUb1soUPCJJVNZGGNdlUGeHWSJv6Q==","signatures":[{"sig":"MEQCIBJRzNW4MJnNTzBaNXXrkUbFJZg6M6RI8Nsa30UH1VUYAiAqvRNNgw1/X7EXAZ41jGg4nrG+0vlF/7TGWna5YGYRoQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184309255},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"11b6dfbe24c34deb1ac5420234a3f976fc91d393","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.2.21_1775440351162_0.48926863561606826","host":"s3://npm-registry-packages-npm-production"}},"0.2.23":{"name":"mtg-crucible","version":"0.2.23","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.2.23","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"f09e66e9302e9140d7cd299185eb9b89a61173e8","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.2.23.tgz","fileCount":475,"integrity":"sha512-+37qpbhwpD+tpA6PgefCxOhOc+vgE6xskkUmpzXjyo9m+XUoXZDQtzPdsefZjEFYCrcPrOZ1AokGZfRG9GfKlg==","signatures":[{"sig":"MEUCIQDng/PeDBOaqc2vMxnXBj+mdhyE8huW6YO4nwsBdQy5xwIgU1WN6YzbUt2neN8JIMIzM9Hqbfc1RWE82Tjzxy5/xNs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184315868},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"9eb6aae4b8deca2ec55e6c8bcadd5ace9adbef3b","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.2.23_1775517246291_0.06416437029604061","host":"s3://npm-registry-packages-npm-production"}},"0.2.24":{"name":"mtg-crucible","version":"0.2.24","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.2.24","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"2262d584a038916916f8e4790ed0a87f42ff3866","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.2.24.tgz","fileCount":475,"integrity":"sha512-ghRvs2erbWJHR01sCwKpfRp57d7mkreVwGwFoHQW6dMx6YmNrmXsy5NGnqcmvQGZ90pqej48NGSctb/vE1embg==","signatures":[{"sig":"MEYCIQCMT/zyTAJue73Ba2epmzULze4Jz4gYc8jFL7JiUKjLUgIhAOXaD88LCYAVxsfcrrzoyHgicvklXAu/jfrFOwkfyW0m","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184316535},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"317382d3399f30dd87956aa2e4151ceb620b7454","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.2.24_1775522017294_0.003421962750155938","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"mtg-crucible","version":"0.3.0","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.3.0","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"4b40374c5c3ac8ae19ceaa42d4a1cb4f4b73c41d","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.3.0.tgz","fileCount":475,"integrity":"sha512-ZCPpsPxZP4I3Nj1TeX1vnshWsn19oxhlYudXUEdgL1q0zDqOUsSau6k6M6JIeTi02TIX4vJdsRY7krzUqh/EOQ==","signatures":[{"sig":"MEQCIAukroHFKY9cNm3GsBx5ZO4Yd5yxmdzX0CdplMy5TasMAiAahKptuzwM+kHKhn+T4OvlDUvqcVdjQpbSjZuWVZLkZA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184318419},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"4945034e4e16aabc606f5c4a2d997d4116848562","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.3.0_1775611282346_0.10254064268596497","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"mtg-crucible","version":"0.3.1","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.3.1","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"469a8ff7f07586a7bdb3a274a09004caf85db498","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.3.1.tgz","fileCount":475,"integrity":"sha512-X7Lk57OPZ3+9Vstn/+ctzvN3dLOB//0RlCxwQvdEQLJqaF1D0ulCj/iGda26dnwNs3RHE91VgnNosV3lRxRUwQ==","signatures":[{"sig":"MEUCIGtJQjx6mgEPGMU7/2H8Y40wnlr78Sk2AUdw1upF2WNLAiEAtkgDbD0ZE4EBX7Ef136fK/MP7MHAZlldj6h+ug0kQpw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184327875},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"c8df0363f960ab1a3c5a713ad4d47b27e33ae9f8","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.3.1_1776291610245_0.46840639456881505","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"mtg-crucible","version":"0.3.2","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.3.2","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"85ac559b08a23fcd730d8f80d92d2f76c79a3105","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.3.2.tgz","fileCount":511,"integrity":"sha512-GeRKYaUNFW1P3EjvqNy/yx9haJCOHJqTjFLr8thxRm7ebSd3z/skDcZmJUYy31f2Tkf//wVCtAU2D6wp//BE1A==","signatures":[{"sig":"MEYCIQDEwBtUmZfILPlW6qD4dAmlNHvrDIzRsp64NlvTGB3VYgIhALSbU0PT400IZ3OE5uA/07pY9nKoQvyjjNeIDOFdtNlx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204567909},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"bdc939b2fb17cd8bcefd3d56e7e7c6b32c2b1b2b","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.3.2_1776767603299_0.7342155289406491","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"mtg-crucible","version":"0.3.3","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.3.3","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"d1e3bc8ecc4848af7cc016bacebe1e38f4fd6b70","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.3.3.tgz","fileCount":515,"integrity":"sha512-s92mH/4D8DiWQJ7qtg0HHVNKzzhCgiSWz2bXfuXs82j84IM8cvjY20Y7SfL51oxmDhVQJvSX7v9yr1lvVJagKQ==","signatures":[{"sig":"MEUCIQDzhpo59oq7hi+IirmdNzayaPbC5A40ZeNJqIN9Y9n5kgIgTii4lFDVqrsJpJa+hkLzOd/o38sSVcAr6/t7Lh9WcJs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204590537},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"1b1da959c47765ad9956107045d7787a80970f36","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.3.3_1776768438223_0.2557734467996424","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"mtg-crucible","version":"0.3.5","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.3.5","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"f1358d1e42b3265a5e50c99b662899fb413b8405","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.3.5.tgz","fileCount":541,"integrity":"sha512-9heCDbAU+0Tg0EGJ8tn44AaPILQMBho0ZZgPAjNA0JLDgp8cjYYDy9b2Wd+kJnVSZZ/C2vn5dD8YAyaQutW+BQ==","signatures":[{"sig":"MEUCIQC2vECcy/tH0bGaUN9jpUlUtURTri4YGjVSK/yYMOWrmQIgWCVLS5MHa/Hbo95OIAWc299Azq3Tb8SKILRim458pa8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204556662},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"41e82f6c428c9a93affa627764dbfc88ea42ee47","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.3.5_1777760236097_0.17577332695716796","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"mtg-crucible","version":"0.3.6","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.3.6","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"4f28fb0ad13ae03eea8b137bf20d539dd90f26db","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.3.6.tgz","fileCount":541,"integrity":"sha512-hFlC6f6twOAmClBdw6po9H7flpCZMKnT/1HMe5zUQ9zS88EAV0MwQegFC1ADjXid6EarYMEpmTkMdJp5a15+Dg==","signatures":[{"sig":"MEQCICBlON7fIPdMK5HCBUuuh+InE7saP9I5Snds9Ixwp1xbAiBqiRtuc7r2AuWODEjmZEQMqLqCoidm2yhkM2/Y4J5x0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204570696},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"060f4a27346080ff980ab3154429e77e61275c29","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.3.6_1778459227096_0.6960940097466934","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"mtg-crucible","version":"0.3.7","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.3.7","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"e34da00a969b1771ce44a0221ccc4e91f49f98d0","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.3.7.tgz","fileCount":541,"integrity":"sha512-e3ndGPO+KwnlKJWX3XQZvextpc+7fzqWl4LjSNI7wMvPvIBV70ELddzQCCpWX2qBKJKe/1VQjosNj16ICrR1yA==","signatures":[{"sig":"MEYCIQDgg7KUNT9K/e+ylZ5Cfz4KXfHKnsHL4HRdxIPmjg6iMgIhAM58Vs8p0UwOgRIk78qH0vVXHnglgCxLh1BdAUtUa7T+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204570696},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"85b081ff05eef1fb24a85cec4b2408bf1671093f","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.3.7_1778460250414_0.5993151089234665","host":"s3://npm-registry-packages-npm-production"}},"0.3.8":{"name":"mtg-crucible","version":"0.3.8","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.3.8","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"169c28db524bea1fb94e4e8fe843e4e9fe67c683","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.3.8.tgz","fileCount":549,"integrity":"sha512-s0orbyEKKnC+1YWEPz0LMNqIEpRzkr8KtwaEDHAezBGyH2ok/+Gs2AwafQfOi4ImeD0L4B4GZel0K7+w/cwgRw==","signatures":[{"sig":"MEUCIQDKROj63Vw1EKEc5VwCzUQuGkuc95mBHIycqoUGmkMSUwIgUGVkhG/cbLWKdsn2xfhQ2J5qvb7A8qme1vn2C0hmlDU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205121731},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"67fe040bbff8af3c4309ceeb34480630a8611e72","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.3.8_1778986628488_0.19132184612839764","host":"s3://npm-registry-packages-npm-production"}},"0.3.9":{"name":"mtg-crucible","version":"0.3.9","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.3.9","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"e9a0647f451c72f6abd41b762fb143c81122b39a","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.3.9.tgz","fileCount":549,"integrity":"sha512-zxdS6F07NKIVx9K3qkddJuHVnrSSYXD494CnIC2rNStXo3QmJ1TFU0eXUiLaDd/Cc5c/dUctipl5aySLrv1pyg==","signatures":[{"sig":"MEUCIQDFm6B3PzcGjM0NZFx/lyH0W2UhPCq0rhF4P99/CK/7UQIgOfMCSpQ7uXeB4SqY8NccY31aPWv/j3HtB4q2UBScdac=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205121731},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"5d8059a9340b8b1d67bf6324eb6a493bbd2a3e6f","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.3.9_1778986801223_0.37976162520509527","host":"s3://npm-registry-packages-npm-production"}},"0.3.10":{"name":"mtg-crucible","version":"0.3.10","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.3.10","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"a7a001b092b6ec6eba8efbbdf0adc733723ce4c5","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.3.10.tgz","fileCount":549,"integrity":"sha512-hHVl1YRfNjhS8kWbaRxxNg3L/sgLhe2X+RAugHww8f1f78R04skfS/Q1tNOAdZS56/hdXpg2fJpztIZCCmJWHg==","signatures":[{"sig":"MEYCIQDbHWJn+kwLpJs4zDTREW5WqwBlG0d0SSjVUM2GkJM6NQIhALe4rLvrS5gU2rw5Cp3d72gZrfBeeATO1KZdPew9i3n2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205125564},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"c8a201600d47a84bfe141bdb91e8c3d32629be12","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.3.10_1779755955871_0.2908599969414183","host":"s3://npm-registry-packages-npm-production"}},"0.3.11":{"name":"mtg-crucible","version":"0.3.11","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.3.11","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"d45ae9158fddabf83a76a13665722ca81816611c","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.3.11.tgz","fileCount":549,"integrity":"sha512-EuNcUcvhlAvlpCaMn3TLLHN8NXqovdaWUYdA4giZWYLog4bHn0Ka0P3rfAQt5/dW3+wWcGOtkbkifn0vWEfhLg==","signatures":[{"sig":"MEUCIQCduhDvcRGzicUElE9701LD0c0rQ+gtpBD8CN7qX0c1TwIgOjGmMAEyKsVj6m7v1JB95HVmXt0Kek8k1n071eT70to=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205127271},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"1067ba5cceb545d2b6080c60b631586c69f6a6b8","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.3.11_1780363448748_0.5401058807464443","host":"s3://npm-registry-packages-npm-production"}},"0.3.12":{"name":"mtg-crucible","version":"0.3.12","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.3.12","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"7c98d721a3b795f994a1fb09cb4967018198eb0e","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.3.12.tgz","fileCount":549,"integrity":"sha512-kLI1CBgSlOsop+BGkVsojONXuWQcbCCO4ntuhbuAR/Xc0fODEDKQrYTcL1N5re+Gjq/Rk7ECaXGjvnl2CttnRQ==","signatures":[{"sig":"MEUCIQCEZj2Vmi3oXP3F66B+f0IWxpWAbQu9DZha2YilaFUgwQIgRqx8izG+VUAHtTBfElFZloGCkALz222+zmRLObXnZJo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205118798},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"7506aee584510aeb5ca26247fba3964c325fe275","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","prepublishOnly":"npm run build","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.3.12_1781809725771_0.6018932499108531","host":"s3://npm-registry-packages-npm-production"}},"0.3.13":{"name":"mtg-crucible","version":"0.3.13","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.3.13","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"44f3e0a2668c2c981793bb0f069286040e50fcf7","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.3.13.tgz","fileCount":549,"integrity":"sha512-8AlYXTJM4Vyv5TmeyrjdK9tZCNIBnuOoDgqo85oSjWoqhGRwfNh95BwJFAegbmXhZZxGp1NA0vWRSqp4FzbAfg==","signatures":[{"sig":"MEUCIE3tUh1i5Qa2vbYC2BEYBUPKheAMflkGUJHfVMqNt1bkAiEAvi+OUEj0o9w5lnDDLHX88FHHbKS0rqptl6lgONVUXWk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205119183},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"60dad7c55a0bf1ac0f537e4672570ee68647e424","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","prepublishOnly":"npm run build","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.3.13_1781863253473_0.4127633223963858","host":"s3://npm-registry-packages-npm-production"}},"0.3.14":{"name":"mtg-crucible","version":"0.3.14","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.3.14","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"0e96c0addebff693d00c0802610e33597b4825ee","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.3.14.tgz","fileCount":549,"integrity":"sha512-iGlSZZWxj0YX0X4qc+3HWmKXRKbw/53vMwILDGGxJS+efq96xbOrOfC1zYVCRL8FTfyBZ0HfwRkRFiP4Bf4LXg==","signatures":[{"sig":"MEUCIQDcox1TSAfH9fD+5+ceVGden8YgaGXmSZtxN2iAepM7vwIgFH0wFRmCMB5WCvHP5REx+g/88cA/Fjdm51/HhXsxafk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205121151},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"2b729d01786ffc73b6e4fa1cbd25647d9e757837","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","prepublishOnly":"npm run build","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.3.14_1781866726166_0.08712580063687625","host":"s3://npm-registry-packages-npm-production"}},"0.3.15":{"name":"mtg-crucible","version":"0.3.15","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.3.15","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"bd86fb19b000ee4bc1a36597bcac006c500ef8e3","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.3.15.tgz","fileCount":549,"integrity":"sha512-ioSbJplTDkoP0uYEX6WrGMzcxNAXN0YPlrmgwKlHonG12OHSC+XEOFdTkjqQwYWljwNBF5GZEPDavJPrhcI3MQ==","signatures":[{"sig":"MEYCIQDlsXHvdaxFaJbCAvoYxMCob2OeuXFPbScafN84OZk2rwIhAKk+rFjGGUQomev/XY9kupvAz+VcrcLvcZmE5EXqKO4D","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205121500},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"df9170796502c1881e7610120456a6d69c8c2e88","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","prepublishOnly":"npm run build","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.3.15_1781895584983_0.25138381855343894","host":"s3://npm-registry-packages-npm-production"}},"0.3.16":{"name":"mtg-crucible","version":"0.3.16","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.3.16","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"08a9ea6eb258b7bda293c53f1bcfd0b20d458a5c","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.3.16.tgz","fileCount":550,"integrity":"sha512-08KHGYL2VoD5Y2qB8C8ixeb6fbRoGW2n0kULIBCwKQNQk29ZinDDTKBjnruaIEFLHUswGooJv66AhTZZLJlD+A==","signatures":[{"sig":"MEUCIQCci10qlf/urinGksB6niO55/WIOXgtt2xjrSAuaWPKMAIgd9FHMTh1sdoE0I01ozKCzjAQrb9cU8OdPp5QER8ka2c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205159348},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"5284d8abc1863759a05004aa99170e73a10ad310","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","test":"vitest","build":"rm -rf dist && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","prepublishOnly":"npm run build","generate-assets":"npx tsx logo/generate-assets.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images as PNGs","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.3.16_1782067706667_0.3492935932412493","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"mtg-crucible","version":"0.4.1","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.4.1","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"9278a16109e3c139841f192b331367da4b7b0f16","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.4.1.tgz","fileCount":582,"integrity":"sha512-Hk+uyG7+CghZPejoCGmRcDCCubMx/JgIf9NKJGtrDx0QfsW2OdTrqJFx6VZxDT2K6vlnNAA6FAptDrOZJOt3cw==","signatures":[{"sig":"MEYCIQCCtUIHpFoZUqaeRZsW8oznRLxy2zbHcEsbpxWaJuGtGgIhAIxIlh2ElKGRvwI9+liuKQm6CUu3Wx2cKQM2viu8z8Oc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205174225},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","browser":"dist/index.browser.js","exports":{".":{"node":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"browser":{"types":"./dist/index.browser.d.ts","default":"./dist/index.browser.js"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"0f98090b0a3f38836bd64ddb4a19510883db0c50","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","gen":"tsx scripts/gen-version.ts && tsx scripts/gen-symbol-manifest.ts","test":"vitest","build":"rm -rf dist && npx tsx scripts/gen-version.ts && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","prepublishOnly":"npm run build","example:browser":"esbuild examples/browser/main.ts --bundle --format=esm --outfile=examples/browser/main.js --platform=browser && npx tsx examples/browser/serve.ts","generate-assets":"npx tsx logo/generate-assets.ts","build:check-browser":"npx tsx scripts/verify-browser-build.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images, in Node and the browser","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.4.1_1782175607577_0.5496374657374319","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"mtg-crucible","version":"0.4.3","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.4.3","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"98978fe82492681d59a7a48d957c8963b7e7bff6","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.4.3.tgz","fileCount":582,"integrity":"sha512-a5d11oLadQJ9A2FXDFVx38/U8ly5tlXU3YNrnoL8RGgzrjsMuIqZwjd4u1X5jTCZX4TSiqnn1RKt1m8+vhT8aw==","signatures":[{"sig":"MEUCIGFMriErLxNFlxj23tQB/SFfQSH7xeyuhCZKAa2yZjBxAiEA9t+JX829UNeBaVLKhiSqdaWMXXwMa6WqVr3xpkaMWQQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205181491},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","browser":"dist/index.browser.js","exports":{".":{"node":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"browser":{"types":"./dist/index.browser.d.ts","default":"./dist/index.browser.js"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"e30b3c9eb58f7bb20aa6328d50943d543caacf21","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","gen":"tsx scripts/gen-version.ts && tsx scripts/gen-symbol-manifest.ts","test":"vitest","build":"rm -rf dist && npx tsx scripts/gen-version.ts && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","prepublishOnly":"npm run build","example:browser":"esbuild examples/browser/main.ts --bundle --format=esm --outfile=examples/browser/main.js --platform=browser && npx tsx examples/browser/serve.ts","generate-assets":"npx tsx logo/generate-assets.ts","build:check-browser":"npx tsx scripts/verify-browser-build.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images, in Node and the browser","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.4.3_1782180345190_0.3645164881960814","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"mtg-crucible","version":"0.4.4","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.4.4","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"73ef28f20ae31425180d7bf81099cdb2b0dfde86","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.4.4.tgz","fileCount":582,"integrity":"sha512-x5pc1Lbhn6J5TWJH8hqQdMBZ8qrhaMzz3HSmeDss+YwWBj4/4rO7DwHVQ8jZPvtF8nfVXKzbX/dqY/B/+hiCng==","signatures":[{"sig":"MEUCIQCBM1pXttGDXmMr/wJtx7qLazrjverOrc0TL8TUSBiyJAIgIKuVCBFb5FE2TqraT7foKjKSFztEU5qKBUHGCxYaU+Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205183051},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","browser":"dist/index.browser.js","exports":{".":{"node":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"browser":{"types":"./dist/index.browser.d.ts","default":"./dist/index.browser.js"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"eb0640341f2782eb0bbc4130aa4cb9905bb86395","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","gen":"tsx scripts/gen-version.ts && tsx scripts/gen-symbol-manifest.ts","test":"vitest","build":"rm -rf dist && npx tsx scripts/gen-version.ts && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","prepublishOnly":"npm run build","example:browser":"npx tsx scripts/gen-version.ts && esbuild examples/browser/main.ts --bundle --format=esm --outfile=examples/browser/main.js --platform=browser && npx tsx examples/browser/serve.ts","generate-assets":"npx tsx logo/generate-assets.ts","build:check-browser":"npx tsx scripts/verify-browser-build.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images, in Node and the browser","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.4.4_1782182324617_0.72225830591483","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"name":"mtg-crucible","version":"0.4.5","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.4.5","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"7bc00f093e910ad93aafe9a406b77e2061851bf5","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.4.5.tgz","fileCount":585,"integrity":"sha512-JxQIHFjZ5Q37/dS0G1hJwLTHINZ5HMKwMq1OWquZo0ICTEckh4feHTI7b0OErFQ1rbm+5GICPJIzRU5qaXpkYQ==","signatures":[{"sig":"MEUCIQCBoDJhdeAq9//wW/2NIvZV0dvQx8QqXrjvduPRMq+7AgIgNqJ47K2cVQ+ht4JM7HVPsXhLvsNLrfwKHI84dPga6vY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205201164},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","browser":"dist/index.browser.js","exports":{".":{"node":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"browser":{"types":"./dist/index.browser.d.ts","default":"./dist/index.browser.js"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"9695ae9d12934eac78c2318e0396050208270329","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","gen":"tsx scripts/gen-version.ts && tsx scripts/gen-symbol-manifest.ts","test":"vitest","build":"rm -rf dist && npx tsx scripts/gen-version.ts && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","prepublishOnly":"npm run build","example:browser":"npx tsx scripts/gen-version.ts && esbuild examples/browser/main.ts --bundle --format=esm --outfile=examples/browser/main.js --platform=browser && npx tsx examples/browser/serve.ts","generate-assets":"npx tsx logo/generate-assets.ts","build:check-browser":"npx tsx scripts/verify-browser-build.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images, in Node and the browser","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.4.5_1782522492251_0.5306287501817051","host":"s3://npm-registry-packages-npm-production"}},"0.4.6":{"name":"mtg-crucible","version":"0.4.6","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.4.6","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"24bbcceaf4944e5e6d801117e1d4ad958fbf51a0","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.4.6.tgz","fileCount":586,"integrity":"sha512-kWOCyoRb4j3WH7VU5lagiqJhNf9tJ04/aeEMoJgSlD9YFKnD/QLSxld3qv1pFdDyobCAj1dymlwOOZNkyH8IcA==","signatures":[{"sig":"MEQCICcX81U+Q/tKhMCge0RrmpKPIx4xvw2TeINqtfqSmbU6AiBTSzV6edPiwHUW5jYsfcfYr/Y4J6ivS7BnG88GreWBtA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205224243},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","browser":"dist/index.browser.js","exports":{".":{"node":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"browser":{"types":"./dist/index.browser.d.ts","default":"./dist/index.browser.js"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"62342d2fe372c5faf32fbdca6a0b7797a8e513d6","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","gen":"tsx scripts/gen-version.ts && tsx scripts/gen-symbol-manifest.ts","test":"vitest","build":"rm -rf dist && npx tsx scripts/gen-version.ts && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","prepublishOnly":"npm run build","example:browser":"npx tsx scripts/gen-version.ts && esbuild examples/browser/main.ts --bundle --format=esm --outfile=examples/browser/main.js --platform=browser && npx tsx examples/browser/serve.ts","generate-assets":"npx tsx logo/generate-assets.ts","build:check-browser":"npx tsx scripts/verify-browser-build.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images, in Node and the browser","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.4.6_1782526058394_0.9171516070485048","host":"s3://npm-registry-packages-npm-production"}},"0.4.7":{"name":"mtg-crucible","version":"0.4.7","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.4.7","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"1d8108d8f52e5e7ad8b36135056c4ce3b8e72cef","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.4.7.tgz","fileCount":591,"integrity":"sha512-nWMrPlvlrB8Svzl1KsCpF89dGhc4kHM/PeI03RVFGTWo5h6kVRvPp5VQBGPUDO6G5MpVNkuXY1B2b6XOB4cXQw==","signatures":[{"sig":"MEUCIQDwKMAYPoref3jKMAt3ngsnqwsKH5wOjvgq9W5NRVT7mwIgCQz5IFifu4zT32UyXd914piUtwqvGv108B/UpfInPNQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205227167},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","browser":"dist/index.browser.js","exports":{".":{"node":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"browser":{"types":"./dist/index.browser.d.ts","default":"./dist/index.browser.js"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"e56f855230155b4112ffbf74f5e0252a86fe1ffc","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","gen":"tsx scripts/gen-version.ts && tsx scripts/gen-symbol-manifest.ts","test":"vitest","build":"rm -rf dist && npx tsx scripts/gen-version.ts && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","deploy:assets":"npx wrangler pages deploy assets --project-name mtg-crucible-assets-v1 --branch main --commit-dirty=true","prepublishOnly":"npm run build","example:browser":"npx tsx scripts/gen-version.ts && esbuild examples/browser/main.ts --bundle --format=esm --outfile=examples/browser/main.js --platform=browser && npx tsx examples/browser/serve.ts","generate-assets":"npx tsx logo/generate-assets.ts","build:check-browser":"npx tsx scripts/verify-browser-build.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images, in Node and the browser","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.4.7_1782605893738_0.6072057339041246","host":"s3://npm-registry-packages-npm-production"}},"0.4.8":{"name":"mtg-crucible","version":"0.4.8","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.4.8","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"dc24a30a27c69b16edb4de714dbd752aa7119775","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.4.8.tgz","fileCount":591,"integrity":"sha512-R5xRhRC9zUIcpLdBfRYzI/nZHFTcB778WMnchbZa0wrJ04GcFKM3KM8g7ogQx4cj6oQrM9eAc7F77pSfJTukMQ==","signatures":[{"sig":"MEYCIQCISIb4n46C1gQ68JNIRk4cD1W022hFgjXJ7FTDWw8hsAIhAIFSjiLo91hIidG7SWfD1QLYS4YtWtS4zOG3jMu25BQ0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14558180},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","browser":"dist/index.browser.js","exports":{".":{"node":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"browser":{"types":"./dist/index.browser.d.ts","default":"./dist/index.browser.js"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"0d15ce470f6246879a1e022c212141303c9a6692","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","gen":"tsx scripts/gen-version.ts && tsx scripts/gen-symbol-manifest.ts","test":"vitest","build":"rm -rf dist && npx tsx scripts/gen-version.ts && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","deploy:assets":"npx wrangler pages deploy assets --project-name mtg-crucible-assets-v1 --branch main --commit-dirty=true","prepublishOnly":"npm run build","example:browser":"npx tsx scripts/gen-version.ts && esbuild examples/browser/main.ts --bundle --format=esm --outfile=examples/browser/main.js --platform=browser && npx tsx examples/browser/serve.ts","generate-assets":"npx tsx logo/generate-assets.ts","build:check-browser":"npx tsx scripts/verify-browser-build.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images, in Node and the browser","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.4.8_1782691838903_0.10593054877786834","host":"s3://npm-registry-packages-npm-production"}},"0.4.9":{"name":"mtg-crucible","version":"0.4.9","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.4.9","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"31d97d942012a29f455904fe4b516419abd46e03","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.4.9.tgz","fileCount":591,"integrity":"sha512-bhBYM+5K0I/ehZcl37yVMUQb8aElSIeVvIKu23ZGfAsTBdIHIqc7U63hNgwDCyWVoC/kGcUEe9ASRKANMJi4RA==","signatures":[{"sig":"MEUCIQDhWaxSnu2J0g3DaN4ToBLGyV58YB03k21O6dxTxcIx+AIgcjfHD/P2baPYwf/VlnQ4KuqZfjlJjkhxGf9yQN2bx8w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14560947},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","browser":"dist/index.browser.js","exports":{".":{"node":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"browser":{"types":"./dist/index.browser.d.ts","default":"./dist/index.browser.js"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"8d1674eb96372c2a75e0a3e7516d35d66cbcd730","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","gen":"tsx scripts/gen-version.ts && tsx scripts/gen-symbol-manifest.ts","test":"vitest","build":"rm -rf dist && npx tsx scripts/gen-version.ts && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","deploy:assets":"npx wrangler pages deploy assets --project-name mtg-crucible-assets-v1 --branch main --commit-dirty=true","prepublishOnly":"npm run build","example:browser":"npx tsx scripts/gen-version.ts && esbuild examples/browser/main.ts --bundle --format=esm --outfile=examples/browser/main.js --platform=browser && npx tsx examples/browser/serve.ts","generate-assets":"npx tsx logo/generate-assets.ts","build:check-browser":"npx tsx scripts/verify-browser-build.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images, in Node and the browser","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.4.9_1782780393552_0.6887580197201957","host":"s3://npm-registry-packages-npm-production"}},"0.4.10":{"name":"mtg-crucible","version":"0.4.10","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.4.10","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"c224aee6c1d585e783a22b7e08e852541a35f8fd","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.4.10.tgz","fileCount":591,"integrity":"sha512-shQeRELFLqr7UjeESDCGDTJVQsemi7xAU4cQR+dIswQAeloPFFifSpAeeyYnCJKbv2O5FkyMDXezsEj3sWKJ7g==","signatures":[{"sig":"MEUCIEQItukFHAViTAz7vLdqJjsfz5o8O1wWCPXP5U6A3WDUAiEApfbkBjGHjPNtdOcvmE0GPHwPkqJwTCBheSnalAnRssc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14561496},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","browser":"dist/index.browser.js","exports":{".":{"node":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"browser":{"types":"./dist/index.browser.d.ts","default":"./dist/index.browser.js"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"74f94fb3d9243db5e1db46277fad271bc6282822","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","gen":"tsx scripts/gen-version.ts && tsx scripts/gen-symbol-manifest.ts","test":"vitest","build":"rm -rf dist && npx tsx scripts/gen-version.ts && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","deploy:assets":"npx wrangler pages deploy assets --project-name mtg-crucible-assets-v1 --branch main --commit-dirty=true","prepublishOnly":"npm run build","example:browser":"npx tsx scripts/gen-version.ts && esbuild examples/browser/main.ts --bundle --format=esm --outfile=examples/browser/main.js --platform=browser && npx tsx examples/browser/serve.ts","generate-assets":"npx tsx logo/generate-assets.ts","build:check-browser":"npx tsx scripts/verify-browser-build.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images, in Node and the browser","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.4.10_1782958253452_0.007237246536391018","host":"s3://npm-registry-packages-npm-production"}},"0.4.11":{"name":"mtg-crucible","version":"0.4.11","keywords":["mtg","magic-the-gathering","card-renderer","card-image","custom-cards"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.4.11","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://github.com/domainellipticlanguage/mtg-crucible#readme","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"d2b0a1ea842811bdf2b271760c85a3d1c42c6e22","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.4.11.tgz","fileCount":591,"integrity":"sha512-ltxzifcDDMxuI0sTMTmF1K6T2t8RkX7H6GcA5m9EH9OPaWBCFaVFHoIHI/v8tyLWif8t7tqEoVE9EaxXsilIoA==","signatures":[{"sig":"MEQCIE+EwjLzyPITUMqhcLd6DpNxo7YaOqpJ4+ZtXcw10tVzAiB6BSEVKUApeI5zyLsoLHe/ChJDT5r3vAR2fd6/1zHi+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14561145},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","browser":"dist/index.browser.js","exports":{".":{"node":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"browser":{"types":"./dist/index.browser.d.ts","default":"./dist/index.browser.js"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"d6ad84f0c954694628de31bac90cdd6fb0d0eee6","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","gen":"tsx scripts/gen-version.ts && tsx scripts/gen-symbol-manifest.ts","test":"vitest","build":"rm -rf dist && npx tsx scripts/gen-version.ts && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","deploy:assets":"npx wrangler pages deploy assets --project-name mtg-crucible-assets-v1 --branch main --commit-dirty=true","prepublishOnly":"npm run build","example:browser":"npx tsx scripts/gen-version.ts && esbuild examples/browser/main.ts --bundle --format=esm --outfile=examples/browser/main.js --platform=browser && npx tsx examples/browser/serve.ts","generate-assets":"npx tsx logo/generate-assets.ts","build:check-browser":"npx tsx scripts/verify-browser-build.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"TypeScript library for rendering custom Magic: The Gathering card images, in Node and the browser","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.4.11_1782958863476_0.9431143435497322","host":"s3://npm-registry-packages-npm-production"}},"0.4.12":{"name":"mtg-crucible","version":"0.4.12","keywords":["mtg","magic-the-gathering","magic-the-gathering-card","card-renderer","card-image","card-generator","custom-cards","proxy","tcg","scryfall","planeswalker","canvas","image-generation","typescript","react"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.4.12","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://domainellipticlanguage.com/project/mtg-crucible-playground/","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"d651d30a98e7977e8c308855da075a0c7e90793a","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.4.12.tgz","fileCount":591,"integrity":"sha512-sI4O3DXo27ugXNhc2w3RSFrheAuGdFjFizJ0WhfcMh8IosQ88PDCgNYSWtBPKOesm7sKt/sNPfeGqvX89VN9hA==","signatures":[{"sig":"MEQCIG+KzaY8LA0CXwAqC9xhm8yYih9KLN/UueKoqqZvFUWMAiA1e6O/e1QNFAHHdatbYl73WbEZRn8zYNIoruOS94TRDQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14563205},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","browser":"dist/index.browser.js","exports":{".":{"node":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"browser":{"types":"./dist/index.browser.d.ts","default":"./dist/index.browser.js"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"b8c97e8f8f10deae7ed63dd56f852ea4f1038529","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","gen":"tsx scripts/gen-version.ts && tsx scripts/gen-symbol-manifest.ts","test":"vitest","build":"rm -rf dist && npx tsx scripts/gen-version.ts && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","deploy:assets":"npx wrangler pages deploy assets --project-name mtg-crucible-assets-v1 --branch main --commit-dirty=true","prepublishOnly":"npm run build","example:browser":"npx tsx scripts/gen-version.ts && esbuild examples/browser/main.ts --bundle --format=esm --outfile=examples/browser/main.js --platform=browser && npx tsx examples/browser/serve.ts","generate-assets":"npx tsx logo/generate-assets.ts","build:check-browser":"npx tsx scripts/verify-browser-build.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"Render custom Magic: The Gathering card images from plain text or structured data — planeswalkers, sagas, transform, split, and more. Runs in Node and the browser.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"sst":"^4.0.6","tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.4.12_1783386052270_0.8758926619231937","host":"s3://npm-registry-packages-npm-production"}},"0.4.13":{"name":"mtg-crucible","version":"0.4.13","keywords":["mtg","magic-the-gathering","magic-the-gathering-card","card-renderer","card-image","card-generator","custom-cards","proxy","tcg","scryfall","planeswalker","canvas","image-generation","typescript","react"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.4.13","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://domainellipticlanguage.com/project/mtg-crucible-playground/","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"06c6c9dc1b4d0aabc1404cd35a4e0119ee09d9e0","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.4.13.tgz","fileCount":591,"integrity":"sha512-Bk9gB8zhQRQErEFWeb7ZokrvOAKehy1HiGSXog/VWPveLaPnjXpUx3VthlcVvniTbhtCHsBuk55WjS1H+DBH1Q==","signatures":[{"sig":"MEUCIHULhtW9NUpGRGbVFBYFFvHVJYcT0lCss8nWe3sPAHpbAiEA7hryfkZmze+aIsjEAaDY7HR+g00h8Sn8AIJN7SV1ESY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14563373},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","browser":"dist/index.browser.js","exports":{".":{"node":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"browser":{"types":"./dist/index.browser.d.ts","default":"./dist/index.browser.js"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"f14c5c5e2f1d285fd225b71994360c3b02e1748a","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","gen":"tsx scripts/gen-version.ts && tsx scripts/gen-symbol-manifest.ts","test":"vitest","build":"rm -rf dist && npx tsx scripts/gen-version.ts && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","deploy:assets":"npx wrangler pages deploy assets --project-name mtg-crucible-assets-v1 --branch main --commit-dirty=true","prepublishOnly":"npm run build","example:browser":"npx tsx scripts/gen-version.ts && esbuild examples/browser/main.ts --bundle --format=esm --outfile=examples/browser/main.js --platform=browser && npx tsx examples/browser/serve.ts","generate-assets":"npx tsx logo/generate-assets.ts","build:check-browser":"npx tsx scripts/verify-browser-build.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"Render custom Magic: The Gathering card images from plain text or structured data — planeswalkers, sagas, transform, split, and more. Runs in Node and the browser.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.4.13_1784654994971_0.3154188422039417","host":"s3://npm-registry-packages-npm-production"}},"0.4.14":{"name":"mtg-crucible","version":"0.4.14","keywords":["mtg","magic-the-gathering","magic-the-gathering-card","card-renderer","card-image","card-generator","custom-cards","proxy","tcg","scryfall","planeswalker","canvas","image-generation","typescript","react"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.4.14","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://domainellipticlanguage.com/project/mtg-crucible-playground/","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"b195a24e5cb1bc71cd78442c41015fb7328e8698","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.4.14.tgz","fileCount":591,"integrity":"sha512-5XEz1I70VzlV7b5pa+FKUgNCvC0oiCyQs3+UeLpcL6QMUJ/260TBOWlN4qArFY8tEZ5TlutyTTz3flnFScbIFA==","signatures":[{"sig":"MEUCIBuXtNDyXA2YPYQka3pT009e+v4sAG4A4uHjdPvOpDi9AiEAq8N76caZJCPz41wuJeR/uW9PzyUYrJU9bpcMXAbwOIU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14563373},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","browser":"dist/index.browser.js","exports":{".":{"node":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"browser":{"types":"./dist/index.browser.d.ts","default":"./dist/index.browser.js"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"7fda13db62fb7ac16f48a4b353ad123536b35310","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","gen":"tsx scripts/gen-version.ts && tsx scripts/gen-symbol-manifest.ts","test":"vitest","build":"rm -rf dist && npx tsx scripts/gen-version.ts && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","deploy:assets":"npx wrangler pages deploy assets --project-name mtg-crucible-assets-v1 --branch main --commit-dirty=true","prepublishOnly":"npm run build","example:browser":"npx tsx scripts/gen-version.ts && esbuild examples/browser/main.ts --bundle --format=esm --outfile=examples/browser/main.js --platform=browser && npx tsx examples/browser/serve.ts","generate-assets":"npx tsx logo/generate-assets.ts","build:check-browser":"npx tsx scripts/verify-browser-build.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"Render custom Magic: The Gathering card images from plain text or structured data — planeswalkers, sagas, transform, split, and more. Runs in Node and the browser.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.4.14_1784655104888_0.4334852338887507","host":"s3://npm-registry-packages-npm-production"}},"0.4.15":{"name":"mtg-crucible","version":"0.4.15","keywords":["mtg","magic-the-gathering","magic-the-gathering-card","card-renderer","card-image","card-generator","custom-cards","proxy","tcg","scryfall","planeswalker","canvas","image-generation","typescript","react"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.4.15","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://domainellipticlanguage.com/project/mtg-crucible-playground/","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"650155b9a3c6b4029b10df9d71b316da76d11d5a","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.4.15.tgz","fileCount":591,"integrity":"sha512-nz6qS2jsWrJuIY7h97z6YlifM5CWGTBFgT1igcAGqJkRrpHCDDoKeOj3taWmRTlOTOKuti79zAETnluA8/SKTg==","signatures":[{"sig":"MEYCIQCRlEcRfeJ6frycxM62559Y7epoOZ75SINVBXrJV+Gh9AIhAOBoGzlaqeGNNmYyDKMYs2D08Zv5I2yIF8c7WvGejcay","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14563915},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","browser":"dist/index.browser.js","exports":{".":{"node":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"browser":{"types":"./dist/index.browser.d.ts","default":"./dist/index.browser.js"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"c8d6f5ca46ce42fe4223d6e2d7e7a4d16fd4c658","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","gen":"tsx scripts/gen-version.ts && tsx scripts/gen-symbol-manifest.ts","test":"vitest","build":"rm -rf dist && npx tsx scripts/gen-version.ts && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","deploy:assets":"npx wrangler pages deploy assets --project-name mtg-crucible-assets-v1 --branch main --commit-dirty=true","prepublishOnly":"npm run build","example:browser":"npx tsx scripts/gen-version.ts && esbuild examples/browser/main.ts --bundle --format=esm --outfile=examples/browser/main.js --platform=browser && npx tsx examples/browser/serve.ts","generate-assets":"npx tsx logo/generate-assets.ts","build:check-browser":"npx tsx scripts/verify-browser-build.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"Render custom Magic: The Gathering card images from plain text or structured data — planeswalkers, sagas, transform, split, and more. Runs in Node and the browser.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.4.15_1784965080797_0.7532035108742363","host":"s3://npm-registry-packages-npm-production"}},"0.4.16":{"name":"mtg-crucible","version":"0.4.16","keywords":["mtg","magic-the-gathering","magic-the-gathering-card","card-renderer","card-image","card-generator","custom-cards","proxy","tcg","scryfall","planeswalker","canvas","image-generation","typescript","react"],"author":{"name":"domainellipticlanguage"},"license":"ISC","_id":"mtg-crucible@0.4.16","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"homepage":"https://domainellipticlanguage.com/project/mtg-crucible-playground/","bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"dist":{"shasum":"5dee9704f3d35c652e2f0be3578a80000aff7f38","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.4.16.tgz","fileCount":591,"integrity":"sha512-LGVD/woBZK0sywzIFPGz0wfTLOCn8qCiv385GZ80c4Im1IqRmE17WVtu0PZJXbcyklZ08/wVzlem7xNYqOr9iA==","signatures":[{"sig":"MEUCIDk2hdzV1krbhWSNS6C+zBTLHAl06c32ujcI2sL0AiKOAiEA9Ih4d1w4i/3CPF0zL1f8gLxURz1F0IHcO3mFVZMQB1U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14564318},"main":"dist/index.js","type":"commonjs","types":"dist/index.d.ts","browser":"dist/index.browser.js","exports":{".":{"node":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"browser":{"types":"./dist/index.browser.d.ts","default":"./dist/index.browser.js"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"}},"gitHead":"7abbb7a6c6d58afd67f9fa89736cb78a70efa385","scripts":{"dev":"npx tsx watch scripts/dev-server.ts","gen":"tsx scripts/gen-version.ts && tsx scripts/gen-symbol-manifest.ts","test":"vitest","build":"rm -rf dist && npx tsx scripts/gen-version.ts && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","spike":"npx tsx scripts/spike.ts","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","build:parser":"tsc -p tsconfig.parser.json","deploy:assets":"npx wrangler pages deploy assets --project-name mtg-crucible-assets-v1 --branch main --commit-dirty=true","prepublishOnly":"npm run build","example:browser":"npx tsx scripts/gen-version.ts && esbuild examples/browser/main.ts --bundle --format=esm --outfile=examples/browser/main.js --platform=browser && npx tsx examples/browser/serve.ts","generate-assets":"npx tsx logo/generate-assets.ts","build:check-browser":"npx tsx scripts/verify-browser-build.ts"},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"repository":{"url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git","type":"git"},"_npmVersion":"11.4.2","description":"Render custom Magic: The Gathering card images from plain text or structured data — planeswalkers, sagas, transform, split, and more. Runs in Node and the browser.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"ipaddr.js":"^2.3.0","@napi-rs/canvas":"^0.1.92"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","react":"^19.2.4","vitest":"^4.0.18","esbuild":"^0.27.4","react-dom":"^19.2.4","typescript":"^5.9.3","@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mtg-crucible_0.4.16_1785770038563_0.9378838779228507","host":"s3://npm-registry-packages-npm-production"}},"0.4.17":{"name":"mtg-crucible","version":"0.4.17","description":"Render custom Magic: The Gathering card images from plain text or structured data — planeswalkers, sagas, transform, split, and more. Runs in Node and the browser.","homepage":"https://domainellipticlanguage.com/project/mtg-crucible-playground/","repository":{"type":"git","url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git"},"bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"main":"dist/index.js","browser":"dist/index.browser.js","types":"dist/index.d.ts","exports":{".":{"browser":{"types":"./dist/index.browser.d.ts","default":"./dist/index.browser.js"},"node":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"default":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./parser":{"types":"./dist/parser/index.d.ts","default":"./dist/parser/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./assets/*":"./assets/*"},"scripts":{"test":"vitest","gen":"tsx scripts/gen-version.ts && tsx scripts/gen-symbol-manifest.ts","build":"rm -rf dist && npx tsx scripts/gen-version.ts && tsc && tsc -p tsconfig.parser.json && tsc -p tsconfig.react.json","build:check-browser":"npx tsx scripts/verify-browser-build.ts","example:browser":"npx tsx scripts/gen-version.ts && esbuild examples/browser/main.ts --bundle --format=esm --outfile=examples/browser/main.js --platform=browser && npx tsx examples/browser/serve.ts","build:parser":"tsc -p tsconfig.parser.json","build:core":"tsc","build:react":"tsc -p tsconfig.react.json","dev":"npx tsx watch scripts/dev-server.ts","spike":"npx tsx scripts/spike.ts","generate-assets":"npx tsx logo/generate-assets.ts","deploy:assets":"npx wrangler pages deploy assets --project-name mtg-crucible-assets-v1 --branch main --commit-dirty=true","prepublishOnly":"npm run build","release":"npm run build && npm login && npm version patch && npm publish && git push --follow-tags"},"keywords":["mtg","magic-the-gathering","magic-the-gathering-card","card-renderer","card-image","card-generator","custom-cards","proxy","tcg","scryfall","planeswalker","canvas","image-generation","typescript","react"],"author":{"name":"domainellipticlanguage"},"license":"ISC","type":"commonjs","dependencies":{"@napi-rs/canvas":"^0.1.92","ipaddr.js":"^2.3.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0"},"peerDependenciesMeta":{"react":{"optional":true}},"devDependencies":{"@types/node":"^25.2.3","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","esbuild":"^0.27.4","react":"^19.2.4","react-dom":"^19.2.4","tsx":"^4.21.0","typescript":"^5.9.3","vitest":"^4.0.18"},"_id":"mtg-crucible@0.4.17","gitHead":"ffddd6d32fb5e124d472373f001d38e569f3fab3","_nodeVersion":"24.3.0","_npmVersion":"11.4.2","dist":{"integrity":"sha512-ISE987qnzeLwXG0t/lD/sM9TP69o6O8fawMCAXG65oM1z+qNG9zJo+7x+effg587k/12NocXqW+FJElJkYVpvA==","shasum":"fc958c383422ac10204b080287005d59bfe89165","tarball":"https://registry.npmjs.org/mtg-crucible/-/mtg-crucible-0.4.17.tgz","fileCount":591,"unpackedSize":14568747,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICTJ0/UnScpBfFRrmvTh16LlATrf0/4JutOA/brc8BSHAiAqSS5XUoKSACC2NoL/IoxnhUZBucLj+DGzHXrNx00egQ=="}]},"_npmUser":{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"},"directories":{},"maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mtg-crucible_0.4.17_1785808351109_0.2582777241047103"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-05T23:30:23.677Z","modified":"2026-08-04T01:52:31.610Z","0.2.19":"2026-04-05T23:30:27.947Z","0.2.20":"2026-04-06T01:49:36.303Z","0.2.21":"2026-04-06T01:52:35.311Z","0.2.23":"2026-04-06T23:14:10.857Z","0.2.24":"2026-04-07T00:33:42.077Z","0.3.0":"2026-04-08T01:21:27.345Z","0.3.1":"2026-04-15T22:20:18.438Z","0.3.2":"2026-04-21T10:33:27.977Z","0.3.3":"2026-04-21T10:47:23.385Z","0.3.5":"2026-05-02T22:17:21.298Z","0.3.6":"2026-05-11T00:27:11.851Z","0.3.7":"2026-05-11T00:44:15.241Z","0.3.8":"2026-05-17T02:57:13.122Z","0.3.9":"2026-05-17T03:00:05.960Z","0.3.10":"2026-05-26T00:39:18.388Z","0.3.11":"2026-06-02T01:24:11.727Z","0.3.12":"2026-06-18T19:08:48.623Z","0.3.13":"2026-06-19T10:00:56.692Z","0.3.14":"2026-06-19T10:58:48.732Z","0.3.15":"2026-06-19T18:59:48.049Z","0.3.16":"2026-06-21T18:48:29.242Z","0.4.1":"2026-06-23T00:46:50.005Z","0.4.3":"2026-06-23T02:05:47.656Z","0.4.4":"2026-06-23T02:38:47.104Z","0.4.5":"2026-06-27T01:08:14.731Z","0.4.6":"2026-06-27T02:07:40.900Z","0.4.7":"2026-06-28T00:18:16.199Z","0.4.8":"2026-06-29T00:10:39.306Z","0.4.9":"2026-06-30T00:46:33.878Z","0.4.10":"2026-07-02T02:10:53.802Z","0.4.11":"2026-07-02T02:21:03.882Z","0.4.12":"2026-07-07T01:00:52.614Z","0.4.13":"2026-07-21T17:29:55.410Z","0.4.14":"2026-07-21T17:31:45.190Z","0.4.15":"2026-07-25T07:38:01.108Z","0.4.16":"2026-08-03T15:13:59.108Z","0.4.17":"2026-08-04T01:52:31.463Z"},"bugs":{"url":"https://github.com/domainellipticlanguage/mtg-crucible/issues"},"author":{"name":"domainellipticlanguage"},"license":"ISC","homepage":"https://domainellipticlanguage.com/project/mtg-crucible-playground/","keywords":["mtg","magic-the-gathering","magic-the-gathering-card","card-renderer","card-image","card-generator","custom-cards","proxy","tcg","scryfall","planeswalker","canvas","image-generation","typescript","react"],"repository":{"type":"git","url":"git+https://github.com/domainellipticlanguage/mtg-crucible.git"},"description":"Render custom Magic: The Gathering card images from plain text or structured data — planeswalkers, sagas, transform, split, and more. Runs in Node and the browser.","maintainers":[{"name":"domainellipticlanguage","email":"nathanfdunn@gmail.com"}],"readme":"<img src=\"https://raw.githubusercontent.com/domainellipticlanguage/mtg-crucible/main/logo/og-image.png\" alt=\"MTG Crucible — render custom Magic: The Gathering card images\" width=\"100%\">\n\n# <img src=\"https://raw.githubusercontent.com/domainellipticlanguage/mtg-crucible/main/logo/logo-256.png\" height=\"40\"> MTG Crucible\n\n[![npm version](https://img.shields.io/npm/v/mtg-crucible.svg)](https://www.npmjs.com/package/mtg-crucible)\n[![npm downloads](https://img.shields.io/npm/dm/mtg-crucible.svg)](https://www.npmjs.com/package/mtg-crucible)\n[![license](https://img.shields.io/npm/l/mtg-crucible.svg)](https://github.com/domainellipticlanguage/mtg-crucible/blob/main/README.md)\n\nA TypeScript library for rendering custom Magic: The Gathering card images. Runs in **both Node and the browser** from a single package — the right build is selected automatically via conditional `exports`.\n\nIncludes a react component for rendering resulting card images, complete with card rotations for double-faced cards, etc.\n\n**▶ Try it in your browser:** the [MTG Crucible Playground](https://domainellipticlanguage.com/project/mtg-crucible-playground/) renders cards live — edit via a structured UI, the plaintext format, or raw JSON.\n\n## Installation\n\n```bash\nnpm install mtg-crucible\n```\n\n## Quick Start\n\n### From text\n\n```typescript\nimport { renderCard } from 'mtg-crucible';\nimport { writeFileSync } from 'fs';\n\nconst result = await renderCard(`\nCrucible of Legends {3}\nLegendary Artifact\nWhenever a legendary creature you control dies, return it to your hand at the beginning of your next upkeep.\nFlavor Text: Every great story begins with fire.\nRarity: Mythic Rare\nArt URL: https://raw.githubusercontent.com/domainellipticlanguage/mtg-crucible/refs/heads/main/examples/crucible-art.png\n`);\n\nwriteFileSync('crucible-of-legends.png', result.frontFace);\n```\n\n### From structured data\n\n```typescript\nimport { renderCard } from 'mtg-crucible';\nimport { writeFileSync } from 'fs';\n\nconst result = await renderCard({\n  name: 'Crucible of Legends',\n  manaCost: '{3}',\n  typeLine: 'Legendary Artifact',\n  abilities: 'Whenever a legendary creature you control dies, return it to your hand at the beginning of your next upkeep.',\n  flavorText: 'Every great story begins with fire.',\n  rarity: 'mythic',\n  artUrl: 'https://raw.githubusercontent.com/domainellipticlanguage/mtg-crucible/refs/heads/main/examples/crucible-art.png',\n});\n\nwriteFileSync('crucible-of-legends.png', result.frontFace);\n```\n\n<img src=\"https://raw.githubusercontent.com/domainellipticlanguage/mtg-crucible/main/examples/crucible-of-legends.png\" alt=\"Crucible of Legends\" width=\"300\">\n\n## Supported Templates\n\n- Standard (including colorless/Eldrazi full-bleed art)\n- Planeswalker (3 and 4 ability variants)\n- Saga\n- Class\n- Battle\n- Adventure\n- Transform (front and back)\n- MDFC / Modal DFC (front and back)\n- Split\n- Fuse\n- Flip (Kamigawa-style)\n- Aftermath\n- Mutate\n- Prototype\n- Leveler\n\nAlso supports Snow, Devoid, and Nyx borders, although currently only for Standard cards.\n\n## API\n\n### `renderCard(input: CardData | string, options?: RenderOptions): Promise<RenderedCard>`\n\nParse and render a card. Accepts either a text-format string or a `CardData` object. Returns a `RenderedCard` with `frontFace` (raw image bytes as a `Uint8Array`), optional `backFace` (also a `Uint8Array`), `format` (the image type), orientation info, and rotation data for multi-face cards. The same call works in Node and the browser.\n\nOptions:\n- `quality` — `'high'` (2010x2814, default), `'medium'` (745x1040), or `'low'` (350x490)\n- `format` — `'png'` (default, lossless with transparency), `'jpeg'` (smaller, no transparency, white corners), or `'webp'` (smallest, with transparency)\n- `allowUnsafeArtUrls` — defaults to `false`. See [Security](#security) below.\n- `suppressAttribution` — defaults to `false`. When `true`, omits the small \"Powered by mtg-crucible\" credit from the footer.\n\n### `toBlob(data: Uint8Array, format?: RenderFormat): Blob`\n\nConvenience for the browser: wrap render bytes in a `Blob` with the right MIME type (e.g. for `URL.createObjectURL` or a `fetch` upload body). `format` defaults to `'png'`; pass `result.format` to match the render.\n\n#### Output sizes\n\nFront-face image size for the Crucible of Legends card above (regenerate with\n`npx tsx scripts/measure-sizes.ts`):\n\n| quality | png | jpeg | webp |\n|---------|-----|------|------|\n| low (350×490) | 285 KB | 30 KB | 23 KB |\n| medium (745×1040) | 1007 KB | 115 KB | 71 KB |\n| high (2010×2814) | 4224 KB | 592 KB | 301 KB |\n\nJPEG and WebP both use lossy quality 60/70/80 for low/medium/high — a `medium`\nJPEG and a `medium` WebP are compressed alike, they just differ in how much\nquality each format buys at that setting. PNG is lossless and ignores it.\n\n### `parseCard(text: string): CardData`\n\nParse a text-format card definition into a `CardData` object.\n\n### `formatCard(card: CardData): string`\n\nConvert a `CardData` object back to text format (round-trips with `parseCard`).\n\n### `normalizeCard(card: CardData): NormalizedCardData`\n\nNormalize a `CardData` into `NormalizedCardData` with all fields resolved (frame colors derived, abilities parsed, defaults filled in).\n\n### `getArtDimensions(card: CardData): { primaryArtDimensions: { width, height }; secondaryArtDimensions?: { width, height } }`\n\nGet the expected art image dimensions for a card. Returns primary dimensions, and secondary dimensions if the card has a linked card (e.g. transform, split, aftermath).\n\n## Text Format\n\nFor convenience, cards can be defined in a plain text format, which is a superset of Scryfall's copy-pasteable text format. \n\nAdditional metadata fields can appear on any line (order doesn't matter):\n\n- `Rarity: Mythic Rare`\n- `Flavor Text: Every great story begins with fire.`\n- `Art URL: https://example.com/art.png`\n- `Art Description: A fiery landscape`\n- `Artist: Chris Rahn`\n- `Set: MH3`\n- `Language: EN`\n- `Collector Number: 205`\n- `Designer: Mark Rosewater`\n- `Frame Color: Red and Blue`\n- `Frame Effect: Nyx`\n- `Accent Color: Green`\n- `Name Line Color: Blue and Red`\n- `Type Line Color: White`\n- `PT Box Color: Black`\n\nThese fields can be used to create flavorful card styles. For example:\n\n### Combine Snow and Nyx borders\n```\nConduit of Fire and Ice {2}{U/R}\nArtifact\nWhenever you cast an instant or sorcery spell, choose one —\n- Fire — Conduit of Fire and Ice deals 1 damage to each opponent.\n- Ice — Scry 1.\nArt URL: https://raw.githubusercontent.com/domainellipticlanguage/mtg-crucible/refs/heads/main/examples/conduit-art.png\nFrame Effect: Nyx, Snow\nFrame Color: Red, Blue\nAccent Color: Red, Blue\n```\n<img src=\"https://raw.githubusercontent.com/domainellipticlanguage/mtg-crucible/main/examples/conduit-of-fire-and-ice.png\" alt=\"Crucible of Legends\" width=\"300\">\n\n\n### Multi-color border\n```\nThe Candy Striper {2}{R}{W}\nLegendary Creature — Nightmare Spirit\nHaste, lifelink\nWhenever the Candy Striper attacks, each opponent loses 1 life and you gain 1 life for each enchantment you control.\n3/3\nArt URL: https://raw.githubusercontent.com/domainellipticlanguage/mtg-crucible/refs/heads/main/examples/candy-striper-art.png\nFrame Color: Red, White, Red, White, Red, White, Red, and White\nAccent: Red, White, Red, White, Red, White, Red, and White\nName Line Color: Red, White, Red, White, Red, White, Red, and White\nType Line Color: Red, White, Red, White, Red, White, Red, and White\nPT Box Color: Red, White, Red, White, Red, White, Red, and White\n```\n\n<img src=\"https://raw.githubusercontent.com/domainellipticlanguage/mtg-crucible/main/examples/the-candy-striper.png\" alt=\"The Candy Striper\" width=\"300\">\n\n### Composite cards\nTo define a composite card (split, modal double-faced, etc.) use the `----` separator between card parts.\n\n```\nWine {1}{G}\nInstant\nPut a +1/+1 counter on each of up to two target creatures.\nArt URL: https://raw.githubusercontent.com/domainellipticlanguage/mtg-crucible/refs/heads/main/examples/wine-art.png\nRarity: Uncommon\n----\nDine {3}{B}\nInstant\nDestroy target creature. Create a Food token. (It's an artifact with \"{2}, {T}, Sacrifice this token: You gain 3 life.\")\nArt URL: https://raw.githubusercontent.com/domainellipticlanguage/mtg-crucible/refs/heads/main/examples/dine-art.png\n```\n\n<img src=\"examples/wine-dine.png\" alt=\"Wine // Dine\" height=\"300\">\n\nCrucible will infer the link type from the card parts, but if you want to be explicit, you can use the link type in the card definition:\n\nInstead of `----`, you can use one of `--transform--`, `--mdfc--`, `--split--`, `--fuse--`, `--flip--`, `--adventure--`, or `--aftermath--`.\n\n## React Component\nCrucible provides a React component for rendering cards.\n\n```tsx\nimport { renderCard, toDisplayCard } from 'mtg-crucible';\nimport { MtgCard } from 'mtg-crucible/react';\n\nconst result = await renderCard(...);\nconst renderedCardDisplay = toDisplayCard(result);\n\n<MtgCard\n  card={renderedCardDisplay}\n  cardText={renderedCardDisplay.scryfallText}   // invisible overlay, searchable with Ctrl+F\n/>\n```\n\nThe component supports:\n- Rotations for non-standard cards (battles, flip, aftermath, etc.)\n- Right-click context menu: download, copy image, copy text formats\n  (`hideMenuItems` hides built-ins, `extraMenuItems` appends your own; the\n  menu closes itself after any item runs, and copy items only appear when\n  their text field is present in the display data)\n- Invisible searchable text overlay for Ctrl+F\n\nHosts that drive display data from their own sources (instead of\n`toDisplayCard`) can build `MtgCardDisplayData` by hand — the text fields are\noptional — and use `rotationShowsBackFace(rotation)` (exported from every\nentry point) to know which face a pinned rotation state presents.\n\nStyling hooks — set CSS custom properties on any ancestor instead of fighting\nthe inline styles:\n\n```css\n.my-small-cards { --mtg-card-radius: 6px; --mtg-card-face-shadow: none; }\n```\n\n![React Component Demo](https://raw.githubusercontent.com/domainellipticlanguage/mtg-crucible/main/examples/react-component.gif)\n\n## In the Wild\n\nProjects built with Crucible:\n\n- **[This Magic Card Does Not Exist](https://thismagiccarddoesnotexist.com/)** — A website for creating custom cards with AI.\n- **[Playmat](https://playmat.domainellipticlanguage.com)** — a shared virtual table for paper-style Magic; every card face is `MtgCard`, custom tokens are crucible-rendered in each player's browser, and `computeRotations` drives flip/transform/battle orientation.\n- **[Obsidian Custom MTG](https://github.com/domainellipticlanguage/obsidian-custom-mtg)** — an [Obsidian](https://obsidian.md) plugin for creating custom cards in plaintext in your vault.\n- **[Command Tower MCP](https://github.com/domainellipticlanguage/command-tower-mcp)** — an MCP server for vibe-brewing Magic: The Gathering decks on Archidekt, with support for custom card creation.\n- **[mtg-export](https://github.com/domainellipticlanguage/mtg-export)** — a CLI that turns a deck list into a printable PDF proxy sheet; its `--modernize` flag uses Crucible to redraw pre-M15 cards in modern frames with current oracle text.\n\nBuilt something with Crucible? Open a PR to add it here.\n\n\n## Browser usage\n\n### Install\n\nSame package, same install — there's nothing browser-specific to add:\n\n```bash\nnpm install mtg-crucible\n```\n\nBundlers (Vite, webpack, esbuild, Rollup, Parcel, Next.js, …) automatically pick the browser build via the package's `\"browser\"` export condition. If you'd rather not run a bundler at all, you can load it straight from an ESM CDN in a plain `<script type=\"module\">`:\n\n```html\n<script type=\"module\">\n  import { renderCard, toDisplayCard } from 'https://esm.sh/mtg-crucible';\n  // …\n</script>\n```\n\n### Render\n\n```typescript\nimport { renderCard, toDisplayCard } from 'mtg-crucible';\n\nconst result = await renderCard({...});\n\n// To display a card, use toDisplayCard — a ready-to-render data URL (also works with <MtgCard>):\ndocument.querySelector('img')!.src = toDisplayCard(result).frontFaceImageUrl;\n```\n\n`result.frontFace` is the raw bytes (`Uint8Array`). Reach for those when an API wants binary rather than a string — uploading (`fetch(url, { body })`, `FormData`), downloading (`<a download>`), or the clipboard. Wrap them in a `Blob` with `toBlob`:\n\n```typescript\nimport { toBlob } from 'mtg-crucible';\n\nconst blob = toBlob(result.frontFace, result.format);\nawait fetch('/upload', { method: 'POST', body: blob });\n```\n\n### Assets (`assetBaseUrl`)\n\nThe browser build does **not** bundle the ~14 MB of frame assets. Frames, masks, symbols, and fonts are fetched **on demand** — only the ones a given card needs — and cached by the browser's HTTP cache. By default they come from a Cloudflare Pages CDN, versioned by *asset* major version (decoupled from the package version, so consumers across package versions share one warm cache):\n\n```\nhttps://mtg-crucible-assets-v<N>.pages.dev/\n```\n\nAssets are served with permissive CORS and a one-year `immutable` cache, so each file is fetched at most once and reused across renders, sessions, and every site on the CDN.\n\nTo self-host the assets (the `assets/` folder is included in the npm package), override the base URL **before** your first `renderCard`:\n\n```typescript\nimport { setAssetBaseUrl } from 'mtg-crucible';\n\nsetAssetBaseUrl('https://your-cdn.example.com/mtg-crucible/assets/');\n```\n\nNotes:\n- On the first render, the symbols a card uses are fetched on demand (a card-specific set, not the whole symbol manifest) and cached for subsequent renders.\n- Fonts are loaded with `FontFace` and awaited before any text is drawn.\n- Non-Chromium browsers may rasterize text slightly differently than the Node (`@napi-rs/canvas`) output; this is expected and acceptable.\n\nIndividual assets are also importable straight from the package (the\n`./assets/*` subpath is exported), so a bundler can fingerprint and serve\nthem like any local asset — no CDN, no hand-vendoring:\n\n```typescript\nimport wUrl from 'mtg-crucible/assets/symbols/mana/w.svg?url'; // vite\n```\n\n\n\n## Development\n\n```bash\nnpm test          # run tests (vitest)\nnpm run build     # compile TypeScript\nnpm run dev       # start local dev server with hot reload\n```\n\n## Security\n\nWhen rendering card data from untrusted users (e.g. on a public web server), leave `allowUnsafeArtUrls` off (the default). This blocks art URLs that point to:\n\n- Local files (`/path`, `./path`, `file://`)\n- Loopback addresses (`127.0.0.1`, `localhost`)\n- Private network ranges (`10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`)\n- Link-local addresses (`169.254.0.0/16`, including cloud metadata services like `169.254.169.254`)\n\nSafe to enable in single-user, CLI, or build-script contexts where the card data comes from you, not from untrusted users.\n\nPublic URLs like `https://i.imgur.com/abc.png` always work fine — only \"local\" or \"internal\" URLs are affected by `allowUnsafeArtUrls`. This prevents [SSRF](https://owasp.org/www-community/attacks/Server_Side_Request_Forgery) and local file disclosure attacks.\n\nNote: protection is best-effort. There is a small DNS-rebinding race window between hostname resolution and connection. For stronger guarantees, enforce egress rules at the network level.\n\n## Acknowledgements\n\nCard frame assets are derived from [Card Conjurer](https://github.com/Investigamer/cardconjurer), an open-source MTG card creation tool.\n\nMagic: The Gathering is a trademark of Wizards of the Coast, LLC. This project is not affiliated with, endorsed by, or sponsored by Wizards of the Coast or Hasbro.\n","readmeFilename":"README.md"}