{"_id":"shape","_rev":"26-1ea5dee0553f6f267389fe19567229d7","name":"shape","dist-tags":{"latest":"11.4.1"},"versions":{"0.0.1":{"name":"shape","version":"0.0.1","keywords":["2d","shape","geometry","canvas"],"author":{"name":"Damon Oehlman","email":"damon.oehlman@gmail.com"},"license":"MIT","_id":"shape@0.0.1","maintainers":[{"name":"damonoehlman","email":"damon.oehlman@gmail.com"}],"bugs":{"url":"https://github.com/DamonOehlman/shape/issues"},"dist":{"shasum":"88105ee11c02f900a01a05e1cbcdb365465e4f4d","tarball":"https://registry.npmjs.org/shape/-/shape-0.0.1.tgz","integrity":"sha512-k21i+3im36PDdEFdL9yMX/fAGg0ieFeUCBEyvQ/WyybkiOCSGlJwNSrXfl9SVTf+L/nWeNJriLPTZHS/6yUorg==","signatures":[{"sig":"MEQCIG8Mlk60mzIxGxqsIVAxJnljrGNlqgbYzW9ljEFKRCHnAiA//n0aSILGjjG9HuLQjG+FmYetoO9iK5omtR95VtfkVg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","scripts":{"test":"echo \"Error: no test specified\" && exit 1","gendocs":"gendocs > README.md"},"_npmUser":{"name":"damonoehlman","email":"damon.oehlman@gmail.com"},"repository":{"url":"https://github.com/DamonOehlman/shape.git","type":"git"},"_npmVersion":"1.3.8","description":"Simple 2D shape generators","directories":{},"readmeFilename":"README.md"},"10.0.1":{"name":"shape","version":"10.0.1","keywords":["shape","schema","validation"],"author":{"url":"http://richardrodger.com","name":"Richard Rodger"},"license":"MIT","_id":"shape@10.0.1","maintainers":[{"name":"rjrodger","email":"richard.rodger@voxgig.com"},{"name":"damonoehlman","email":"damon.oehlman@gmail.com"}],"homepage":"https://github.com/rjrodger/shape","bugs":{"url":"https://github.com/rjrodger/shape/issues"},"dist":{"shasum":"5f5567cd3a54e144d329b1cd080f8d01da35d6bf","tarball":"https://registry.npmjs.org/shape/-/shape-10.0.1.tgz","fileCount":10,"integrity":"sha512-QS8kzZgnntvzzHmkZXKEnjpA0x7nCK1q7YmfM0NHpUm/oh53mvMPfRiLa4zEDKFQsDDG3T7spjbmXwGI16reAw==","signatures":[{"sig":"MEQCIEeOzvHDtRq8Y2nlU3l9xAZiVQVKY0wof+5GDLCoUO1DAiAYsLhDLJbWfq/GSeKSnTLdvMXNE0EaOvguauQh+IXE/w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":409685},"main":"dist/shape.js","type":"commonjs","types":"dist/shape.d.ts","browser":"dist/shape.min.js","engines":{"node":">=24"},"gitHead":"82eaf7fa74dd91b59000cbed7efdbddd2a07977f","scripts":{"test":"node --enable-source-maps --test dist-test/**/*.test.js","build":"npm run version && tsc --build src test","clean":"rm -rf node_modules yarn.lock package-lock.json dist dist-test","reset":"npm run clean && npm i && npm run build && npm test","watch":"npm run version && tsc --build src test -w","version":"node -r fs -e \"v=require('./package.json').version;s=fs.readFileSync('./src/shape.ts').toString();if(!s.includes('VERSION = \\''+v+'\\'')){s=s.replace(/VERSION = '.*?'/,'VERSION = \\''+v+'\\'');fs.writeFileSync('./src/shape.ts',s)}\"","repo-tag":"REPO_VERSION=`node -e \"console.log(require('./package').version)\"` && echo TAG: v$REPO_VERSION && git commit -a -m v$REPO_VERSION && git push && git tag v$REPO_VERSION && git push --tags;","test-some":"node --enable-source-maps --test --test-name-pattern","repo-publish":"npm run clean && npm i && npm run repo-publish-quick","repo-publish-quick":"npm run build && npm run test && npm run repo-tag && npm publish --access public --registry https://registry.npmjs.org "},"_npmUser":{"name":"rjrodger","email":"richard.rodger@voxgig.com"},"repository":{"url":"git://github.com/rjrodger/shape.git","type":"git"},"_npmVersion":"11.6.2","description":"An object shape validation utility.","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.2","@types/node":"^25.5.0"},"_npmOperationalInternal":{"tmp":"tmp/shape_10.0.1_1774376885267_0.8157383297247409","host":"s3://npm-registry-packages-npm-production"}},"10.1.0":{"name":"shape","version":"10.1.0","keywords":["shape","schema","validation"],"author":{"url":"http://richardrodger.com","name":"Richard Rodger"},"license":"MIT","_id":"shape@10.1.0","maintainers":[{"name":"rjrodger","email":"richard.rodger@voxgig.com"},{"name":"damonoehlman","email":"damon.oehlman@gmail.com"}],"homepage":"https://github.com/rjrodger/shape","bugs":{"url":"https://github.com/rjrodger/shape/issues"},"dist":{"shasum":"a50cb6854555a785ab9fab5bbb56393f844ec198","tarball":"https://registry.npmjs.org/shape/-/shape-10.1.0.tgz","fileCount":10,"integrity":"sha512-93HaTlhmXL7o1yB2F/8SXntPMG4gjLI2Jx4rP40Sbx0jYJLsYfZxXCzYkJmtfjn1LFAZNZizsFuU0PMdZYraJQ==","signatures":[{"sig":"MEUCIGZElG/EGA3pd7e2ow63wD83CEQISRc/x9M6nyX8Qc/WAiEAmlN/SrRuKyDu+M06XgpDLwBb2jgieFHWFugCXW/IPKg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":407106},"main":"dist/shape.js","type":"commonjs","types":"dist/shape.d.ts","browser":"dist/shape.min.js","engines":{"node":">=24"},"gitHead":"2e61302b0593770ed08173fa17384fd97aecbb73","scripts":{"test":"node --enable-source-maps --test dist-test/**/*.test.js","build":"npm run version && tsc --build src test","clean":"rm -rf node_modules yarn.lock package-lock.json dist dist-test","reset":"npm run clean && npm i && npm run build && npm test","watch":"npm run version && tsc --build src test -w","version":"node -r fs -e \"v=require('./package.json').version;s=fs.readFileSync('./src/shape.ts').toString();if(!s.includes('VERSION = \\''+v+'\\'')){s=s.replace(/VERSION = '.*?'/,'VERSION = \\''+v+'\\'');fs.writeFileSync('./src/shape.ts',s)}\"","repo-tag":"REPO_VERSION=`node -e \"console.log(require('./package').version)\"` && echo TAG: v$REPO_VERSION && git commit -a -m v$REPO_VERSION && git push && git tag v$REPO_VERSION && git push --tags;","test-some":"node --enable-source-maps --test --test-name-pattern","repo-publish":"npm run clean && npm i && npm run repo-publish-quick","repo-publish-quick":"npm run build && npm run test && npm run repo-tag && npm publish --access public --registry https://registry.npmjs.org "},"_npmUser":{"name":"rjrodger","email":"richard.rodger@voxgig.com"},"repository":{"url":"git://github.com/rjrodger/shape.git","type":"git"},"_npmVersion":"11.6.2","description":"An object shape validation utility.","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"6.0.3","@types/node":"25.6.0"},"_npmOperationalInternal":{"tmp":"tmp/shape_10.1.0_1777416715797_0.44601679299343","host":"s3://npm-registry-packages-npm-production"}},"10.1.1":{"name":"shape","version":"10.1.1","keywords":["shape","schema","validation"],"author":{"url":"http://richardrodger.com","name":"Richard Rodger"},"license":"MIT","_id":"shape@10.1.1","maintainers":[{"name":"rjrodger","email":"richard.rodger@voxgig.com"},{"name":"damonoehlman","email":"damon.oehlman@gmail.com"}],"homepage":"https://github.com/rjrodger/shape","bugs":{"url":"https://github.com/rjrodger/shape/issues"},"dist":{"shasum":"96a0087be18fa2c22e141a0d462dff6b289bb01b","tarball":"https://registry.npmjs.org/shape/-/shape-10.1.1.tgz","fileCount":9,"integrity":"sha512-bpXJ18hshbkYtdwThTRzYpPe0/Bj+hzEScblzhdIG1LOok1c7LCKX+TJ5g6QDTwNEwHEQZGSJtMzsr/uBaiPtA==","signatures":[{"sig":"MEYCIQCq1troFPI9RmskzpKbE/05+soHC5KY/vMraNec4xPp1gIhAPyM/402IVZgDKzCy5EKgXpNYMzS8S8ZfHimHhCrfK+h","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":319443},"main":"dist/shape.js","type":"commonjs","types":"dist/shape.d.ts","browser":"dist/shape.min.js","engines":{"node":">=24"},"gitHead":"5171a15e11ad6cc1e9311361c956715d8b90019d","scripts":{"test":"node --enable-source-maps --test dist-test/**/*.test.js","build":"npm run version && tsc --build src test","clean":"rm -rf node_modules yarn.lock package-lock.json dist dist-test","reset":"npm run clean && npm i && npm run build && npm test","watch":"npm run version && tsc --build src test -w","version":"node -r fs -e \"v=require('./package.json').version;s=fs.readFileSync('./src/shape.ts').toString();if(!s.includes('VERSION = \\''+v+'\\'')){s=s.replace(/VERSION = '.*?'/,'VERSION = \\''+v+'\\'');fs.writeFileSync('./src/shape.ts',s)}\"","repo-tag":"REPO_VERSION=`node -e \"console.log(require('./package').version)\"` && echo TAG: v$REPO_VERSION && git commit -a -m v$REPO_VERSION && git push && git tag v$REPO_VERSION && git push --tags;","test-some":"node --enable-source-maps --test --test-name-pattern","repo-publish":"npm run clean && npm i && npm run repo-publish-quick","repo-publish-quick":"npm run build && npm run test && npm run repo-tag && npm publish --access public --registry https://registry.npmjs.org "},"_npmUser":{"name":"rjrodger","email":"richard.rodger@voxgig.com"},"repository":{"url":"git://github.com/rjrodger/shape.git","type":"git"},"_npmVersion":"11.6.2","description":"An object shape validation utility.","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"7.0.2","@types/node":"26.1.1"},"_npmOperationalInternal":{"tmp":"tmp/shape_10.1.1_1784563295910_0.6293651543630423","host":"s3://npm-registry-packages-npm-production"}},"10.1.2":{"name":"shape","version":"10.1.2","keywords":["shape","schema","validation"],"author":{"url":"http://richardrodger.com","name":"Richard Rodger"},"license":"MIT","_id":"shape@10.1.2","maintainers":[{"name":"rjrodger","email":"richard.rodger@voxgig.com"},{"name":"damonoehlman","email":"damon.oehlman@gmail.com"}],"homepage":"https://github.com/rjrodger/shape","bugs":{"url":"https://github.com/rjrodger/shape/issues"},"dist":{"shasum":"5c9d2a51bf2c92ddcd5a94f18894e0d1cd91211b","tarball":"https://registry.npmjs.org/shape/-/shape-10.1.2.tgz","fileCount":9,"integrity":"sha512-3XkFo00GF57PPgT4ogjlEf0J4UOgkTDsQr7HNnva7QpfopsiJ9b+1j6yo+Peiy3aX/JIWbWij4Tbj7pITZKXNQ==","signatures":[{"sig":"MEUCIQCrYjmgVh1clUVJxikbcpiA9wKRQy8h3WGYyGuDJjVOigIgP5uVcj9KgU7CJSJHer+Duavx7uzAZPOxDnjRubpbICY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":319443},"main":"dist/shape.js","type":"commonjs","types":"dist/shape.d.ts","browser":"dist/shape.min.js","engines":{"node":">=24"},"gitHead":"cb76af0476972359845cc79f3a97dd65d4eff849","scripts":{"test":"node --enable-source-maps --test dist-test/**/*.test.js","build":"npm run version && tsc --build src test","clean":"rm -rf node_modules yarn.lock package-lock.json dist dist-test","reset":"npm run clean && npm i && npm run build && npm test","watch":"npm run version && tsc --build src test -w","version":"node -r fs -e \"v=require('./package.json').version;s=fs.readFileSync('./src/shape.ts').toString();if(!s.includes('VERSION = \\''+v+'\\'')){s=s.replace(/VERSION = '.*?'/,'VERSION = \\''+v+'\\'');fs.writeFileSync('./src/shape.ts',s)}\"","repo-tag":"REPO_VERSION=`node -e \"console.log(require('./package').version)\"` && echo TAG: v$REPO_VERSION && git commit -a -m v$REPO_VERSION && git push && git tag v$REPO_VERSION && git push --tags;","test-some":"node --enable-source-maps --test --test-name-pattern","repo-publish":"npm run clean && npm i && npm run repo-publish-quick","repo-publish-quick":"npm run build && npm run test && npm run repo-tag && npm publish --access public --registry https://registry.npmjs.org "},"_npmUser":{"name":"rjrodger","email":"richard.rodger@voxgig.com"},"repository":{"url":"git://github.com/rjrodger/shape.git","type":"git"},"_npmVersion":"11.6.2","description":"An object shape validation utility.","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"7.0.2","@types/node":"26.1.1"},"_npmOperationalInternal":{"tmp":"tmp/shape_10.1.2_1784630597304_0.09200404623212455","host":"s3://npm-registry-packages-npm-production"}},"10.1.3":{"name":"shape","version":"10.1.3","keywords":["shape","schema","validation"],"author":{"url":"http://richardrodger.com","name":"Richard Rodger"},"license":"MIT","_id":"shape@10.1.3","maintainers":[{"name":"rjrodger","email":"richard.rodger@voxgig.com"},{"name":"damonoehlman","email":"damon.oehlman@gmail.com"}],"homepage":"https://github.com/rjrodger/shape","bugs":{"url":"https://github.com/rjrodger/shape/issues"},"dist":{"shasum":"de2a217296475189dd9f0563bbff38e413b05238","tarball":"https://registry.npmjs.org/shape/-/shape-10.1.3.tgz","fileCount":9,"integrity":"sha512-m94jXjZC1wQDsW0kE+pPrTIldjLd5xAiXEqRrDNH+5+k+wlDNUJKXxm7RmA03JZv4+J3KhDLZ31bHwXjE85Mig==","signatures":[{"sig":"MEUCIDoi4YRvm1D69vZ7huoqTXVL5jpPSP57Bmqj83sev1XvAiEA3nDNCPs6SPLAAArk1x0tlZkaPq/TvcILcKKuM5s+W2o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":326443},"main":"dist/shape.js","type":"commonjs","types":"dist/shape.d.ts","browser":"dist/shape.min.js","engines":{"node":">=24"},"gitHead":"0702403e04242e3ded8f259d226d028fdf3b1482","scripts":{"test":"node --enable-source-maps --test dist-test/**/*.test.js","build":"npm run version && tsc --build src test","clean":"rm -rf node_modules yarn.lock package-lock.json dist dist-test","reset":"npm run clean && npm i && npm run build && npm test","watch":"npm run version && tsc --build src test -w","version":"node -r fs -e \"v=require('./package.json').version;s=fs.readFileSync('./src/shape.ts').toString();if(!s.includes('VERSION = \\''+v+'\\'')){s=s.replace(/VERSION = '.*?'/,'VERSION = \\''+v+'\\'');fs.writeFileSync('./src/shape.ts',s)}\"","repo-tag":"REPO_VERSION=`node -e \"console.log(require('./package').version)\"` && echo TAG: v$REPO_VERSION && git commit -a -m v$REPO_VERSION && git push && git tag v$REPO_VERSION && git push --tags;","test-some":"node --enable-source-maps --test --test-name-pattern","repo-publish":"npm run clean && npm i && npm run repo-publish-quick","repo-publish-quick":"npm run build && npm run test && npm run repo-tag && npm publish --access public --registry https://registry.npmjs.org "},"_npmUser":{"name":"rjrodger","email":"richard.rodger@voxgig.com"},"repository":{"url":"git://github.com/rjrodger/shape.git","type":"git"},"_npmVersion":"11.6.2","description":"An object shape validation utility.","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"7.0.2","@types/node":"26.1.1"},"_npmOperationalInternal":{"tmp":"tmp/shape_10.1.3_1784630816529_0.27366150933483446","host":"s3://npm-registry-packages-npm-production"}},"11.0.0":{"name":"shape","version":"11.0.0","keywords":["shape","schema","validation"],"author":{"url":"http://richardrodger.com","name":"Richard Rodger"},"license":"MIT","_id":"shape@11.0.0","maintainers":[{"name":"rjrodger","email":"richard.rodger@voxgig.com"}],"homepage":"https://github.com/rjrodger/shape","bugs":{"url":"https://github.com/rjrodger/shape/issues"},"dist":{"shasum":"32d527e52270fac33515d34b156faecf4ad1fda0","tarball":"https://registry.npmjs.org/shape/-/shape-11.0.0.tgz","fileCount":10,"integrity":"sha512-YvymCWOTyeq4BQSvZiPnTY1T8MpXySVmyqGNuBaQlCdB/unGgx9FnWIkKeJtlJlVrs1V2PrMEqAbP1VD1EUdvA==","signatures":[{"sig":"MEUCIQClOSrpIxZvue6eDe6oXpPHZcQvhfIiMuwIutb5luS+WgIgED2xyz82dyrDDsH03LBTw0Z9oJsqZ5WLq9F9bHOzzvY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shape@11.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":444481},"main":"dist/shape.js","type":"commonjs","types":"dist/shape.d.ts","browser":"dist/shape.min.js","engines":{"node":">=24"},"gitHead":"f8b4c3219c4aeb081054fb4ac696b75b4500e810","scripts":{"test":"node --enable-source-maps --test dist-test/**/*.test.js","build":"npm run version && tsc --build src test","clean":"rm -rf node_modules yarn.lock package-lock.json dist dist-test","reset":"npm run clean && npm i && npm run build && npm test","watch":"npm run version && tsc --build src test -w","version":"node -r fs -e \"v=require('./package.json').version;s=fs.readFileSync('./src/shape.ts').toString();if(!s.includes('VERSION = \\''+v+'\\'')){s=s.replace(/VERSION = '.*?'/,'VERSION = \\''+v+'\\'');fs.writeFileSync('./src/shape.ts',s)}\"","repo-tag":"REPO_VERSION=`node -e \"console.log(require('./package').version)\"` && echo TAG: v$REPO_VERSION && git commit -a -m v$REPO_VERSION && git push && git tag v$REPO_VERSION && git push --tags;","test-some":"node --enable-source-maps --test --test-name-pattern","repo-publish":"npm run clean && npm i && npm run repo-publish-quick","repo-publish-quick":"npm run build && npm run test && npm run repo-tag && npm publish --access public --registry https://registry.npmjs.org "},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3e5c41c6-5ee6-4fc5-9207-73f99f46919c"}},"repository":{"url":"git://github.com/rjrodger/shape.git","type":"git"},"_npmVersion":"12.0.2","description":"An object shape validation utility.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"7.0.2","@types/node":"26.1.1"},"_npmOperationalInternal":{"tmp":"tmp/shape_11.0.0_1788300860667_0.8792238779502524","host":"s3://npm-registry-packages-npm-production"}},"11.0.1":{"name":"shape","version":"11.0.1","keywords":["shape","schema","validation"],"author":{"url":"http://richardrodger.com","name":"Richard Rodger"},"license":"MIT","_id":"shape@11.0.1","maintainers":[{"name":"rjrodger","email":"richard.rodger@voxgig.com"}],"homepage":"https://github.com/rjrodger/shape","bugs":{"url":"https://github.com/rjrodger/shape/issues"},"dist":{"shasum":"0f1b269565873691d0aa95cf11e7cc88c74feb6a","tarball":"https://registry.npmjs.org/shape/-/shape-11.0.1.tgz","fileCount":12,"integrity":"sha512-J14qfXk1jH249bdHnPUlU41ffiK+vwkMmACxiXjtYWejkFsjKAMNuTQa8Wj/xW20ftr/TaBSr/W0URK4gVyB7w==","signatures":[{"sig":"MEUCIGpHCsvVd/cAiQx9LApq8gnZbqrI1IdXtPjVM8riwqUfAiEA1PZKePNrO4vlcDR2b3L/c9YurM6c6T5veSDFp5uZziE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shape@11.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":491940},"main":"dist/shape.js","type":"commonjs","types":"dist/shape.d.ts","browser":{"util":"./src/web/util.js"},"engines":{"node":">=24"},"gitHead":"387bda8450f175fb500be57d27805a72caefafd6","scripts":{"test":"node --enable-source-maps --test dist-test/**/*.test.js","build":"npm run version && tsc --build src test && npm run build-web","clean":"rm -rf node_modules yarn.lock package-lock.json dist dist-test","reset":"npm run clean && npm i && npm run build && npm test","watch":"npm run version && tsc --build src test -w","version":"node -r fs -e \"v=require('./package.json').version;s=fs.readFileSync('./src/shape.ts').toString();if(!s.includes('VERSION = \\''+v+'\\'')){s=s.replace(/VERSION = '.*?'/,'VERSION = \\''+v+'\\'');fs.writeFileSync('./src/shape.ts',s)}\"","repo-tag":"REPO_VERSION=`node -e \"console.log(require('./package').version)\"` && echo TAG: v$REPO_VERSION && git commit -a -m v$REPO_VERSION && git push && git tag v$REPO_VERSION && git push --tags;","build-web":"esbuild src/shape.web.js --bundle --minify --keep-names --format=iife --global-name=Shape --platform=browser --alias:util=./src/web/util.js --footer:js=\"if(typeof module!=='undefined'&&module.exports)module.exports=Shape;\" --outfile=dist/shape.min.js --log-level=warning","test-some":"node --enable-source-maps --test --test-name-pattern","repo-publish":"npm run clean && npm i && npm run repo-publish-quick","repo-publish-quick":"npm run build && npm run test && npm run repo-tag && npm publish --access public --registry https://registry.npmjs.org "},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3e5c41c6-5ee6-4fc5-9207-73f99f46919c"}},"repository":{"url":"git://github.com/rjrodger/shape.git","type":"git"},"_npmVersion":"12.0.2","description":"An object shape validation utility.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"7.0.2","@types/node":"26.1.1"},"_npmOperationalInternal":{"tmp":"tmp/shape_11.0.1_1788301852049_0.40339108768445864","host":"s3://npm-registry-packages-npm-production"}},"11.1.0":{"name":"shape","version":"11.1.0","keywords":["shape","schema","validation"],"author":{"url":"http://richardrodger.com","name":"Richard Rodger"},"license":"MIT","_id":"shape@11.1.0","maintainers":[{"name":"rjrodger","email":"richard.rodger@voxgig.com"}],"homepage":"https://github.com/rjrodger/shape","bugs":{"url":"https://github.com/rjrodger/shape/issues"},"dist":{"shasum":"8c7d20ba6fc32efa2d6fb34f0717ad157a4f377c","tarball":"https://registry.npmjs.org/shape/-/shape-11.1.0.tgz","fileCount":12,"integrity":"sha512-mgEeqFj8TpK+DfeWlTGA85NkaWdkKtLqX95/vFkH5jQATC1RH4cXZbK5zY1qvRkRoCpnLRzljNBKTZ5kurSBWA==","signatures":[{"sig":"MEUCIFXNAS2QyhOrHYu4Xi4m+BdZMtfZ2tmtp4wYghI7S0JoAiEAsjihrlNPh5BA5YnkRs9XmXIUrn6kjc5Y2zugYLzU0zY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shape@11.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":553290},"main":"dist/shape.js","type":"commonjs","types":"dist/shape.d.ts","browser":{"util":"./src/web/util.js"},"engines":{"node":">=24"},"gitHead":"73ae1b178a0a9f526d7c160a310ea4c9dc9ddb7a","scripts":{"test":"node --enable-source-maps --test dist-test/**/*.test.js","build":"npm run version && tsc --build src test && npm run build-web","clean":"rm -rf node_modules yarn.lock package-lock.json dist dist-test","reset":"npm run clean && npm i && npm run build && npm test","watch":"npm run version && tsc --build src test -w","version":"node -r fs -e \"v=require('./package.json').version;s=fs.readFileSync('./src/shape.ts').toString();if(!s.includes('VERSION = \\''+v+'\\'')){s=s.replace(/VERSION = '.*?'/,'VERSION = \\''+v+'\\'');fs.writeFileSync('./src/shape.ts',s)}\"","repo-tag":"REPO_VERSION=`node -e \"console.log(require('./package').version)\"` && echo TAG: v$REPO_VERSION && git commit -a -m v$REPO_VERSION && git push && git tag v$REPO_VERSION && git push --tags;","build-web":"esbuild src/shape.web.js --bundle --minify --keep-names --format=iife --global-name=Shape --platform=browser --alias:util=./src/web/util.js --footer:js=\"if(typeof module!=='undefined'&&module.exports)module.exports=Shape;\" --outfile=dist/shape.min.js --log-level=warning","test-some":"node --enable-source-maps --test --test-name-pattern","repo-publish":"npm run clean && npm i && npm run repo-publish-quick","repo-publish-quick":"npm run build && npm run test && npm run repo-tag && npm publish --access public --registry https://registry.npmjs.org "},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3e5c41c6-5ee6-4fc5-9207-73f99f46919c"}},"repository":{"url":"git://github.com/rjrodger/shape.git","type":"git"},"_npmVersion":"12.0.2","description":"An object shape validation utility.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"7.0.2","@types/node":"26.1.1"},"_npmOperationalInternal":{"tmp":"tmp/shape_11.1.0_1788337290997_0.2595059348049473","host":"s3://npm-registry-packages-npm-production"}},"11.2.0":{"name":"shape","version":"11.2.0","keywords":["shape","schema","validation"],"author":{"url":"http://richardrodger.com","name":"Richard Rodger"},"license":"MIT","_id":"shape@11.2.0","maintainers":[{"name":"rjrodger","email":"richard.rodger@voxgig.com"}],"homepage":"https://github.com/rjrodger/shape","bugs":{"url":"https://github.com/rjrodger/shape/issues"},"dist":{"shasum":"a06e25738abe41733920255a5906c4d35f5a3a2f","tarball":"https://registry.npmjs.org/shape/-/shape-11.2.0.tgz","fileCount":12,"integrity":"sha512-/R5ndID6nzaDQ8Thh1rqP56C1M1tYXN/o8ScsF8E+jRJWncbmMivooMob6C+fJKeu225aepWlW2wqwn6CAyNaQ==","signatures":[{"sig":"MEUCIQCMYSFwCUOMmYGzAoPFITp3meEXyDp0h9qfou60qbZEPQIgRONGUJoMt+FpWTqkNRx2fiH7hibQKAnPya39lY1//x0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shape@11.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":572542},"main":"dist/shape.js","type":"commonjs","types":"dist/shape.d.ts","browser":{"util":"./src/web/util.js"},"engines":{"node":">=24"},"gitHead":"174af21d8eba760023b7bc56bf77a8a345f19698","scripts":{"test":"node --enable-source-maps --test dist-test/**/*.test.js","build":"npm run version && tsc --build src test && npm run build-web","clean":"rm -rf node_modules yarn.lock package-lock.json dist dist-test","reset":"npm run clean && npm i && npm run build && npm test","watch":"npm run version && tsc --build src test -w","version":"node -r fs -e \"v=require('./package.json').version;s=fs.readFileSync('./src/shape.ts').toString();if(!s.includes('VERSION = \\''+v+'\\'')){s=s.replace(/VERSION = '.*?'/,'VERSION = \\''+v+'\\'');fs.writeFileSync('./src/shape.ts',s)}\"","repo-tag":"REPO_VERSION=`node -e \"console.log(require('./package').version)\"` && echo TAG: v$REPO_VERSION && git commit -a -m v$REPO_VERSION && git push && git tag v$REPO_VERSION && git push --tags;","build-web":"esbuild src/shape.web.js --bundle --minify --keep-names --format=iife --global-name=Shape --platform=browser --alias:util=./src/web/util.js --footer:js=\"if(typeof module!=='undefined'&&module.exports)module.exports=Shape;\" --outfile=dist/shape.min.js --log-level=warning","test-some":"node --enable-source-maps --test --test-name-pattern","repo-publish":"npm run clean && npm i && npm run repo-publish-quick","repo-publish-quick":"npm run build && npm run test && npm run repo-tag && npm publish --access public --registry https://registry.npmjs.org "},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3e5c41c6-5ee6-4fc5-9207-73f99f46919c"}},"repository":{"url":"git://github.com/rjrodger/shape.git","type":"git"},"_npmVersion":"12.0.2","description":"An object shape validation utility.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"7.0.2","@types/node":"26.1.1"},"_npmOperationalInternal":{"tmp":"tmp/shape_11.2.0_1788363346039_0.3841159817738249","host":"s3://npm-registry-packages-npm-production"}},"11.3.0":{"name":"shape","version":"11.3.0","keywords":["shape","schema","validation"],"author":{"url":"http://richardrodger.com","name":"Richard Rodger"},"license":"MIT","_id":"shape@11.3.0","maintainers":[{"name":"rjrodger","email":"richard.rodger@voxgig.com"}],"homepage":"https://github.com/rjrodger/shape","bugs":{"url":"https://github.com/rjrodger/shape/issues"},"dist":{"shasum":"afe96df759e76438634be995e3baf2675f875e12","tarball":"https://registry.npmjs.org/shape/-/shape-11.3.0.tgz","fileCount":12,"integrity":"sha512-cvxrCd/1R5xPZB0NQ1LrKq+66X8pX9sJduEkxbGav12UU2PrdcY8FDScVH9eY2ZM6axe3kW2PToBYlZsY+rHZQ==","signatures":[{"sig":"MEYCIQCGuHTtMPK//1x9z0pbDrzrHwvH4Vr2nZIWaftFOVmdvgIhANa2emHtpCKruKwBdq/i5cVKdAHBehBFfB708zGkpBRR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shape@11.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":583253},"main":"dist/shape.js","type":"commonjs","types":"dist/shape.d.ts","browser":{"util":"./src/web/util.js"},"engines":{"node":">=24"},"gitHead":"5dbca740d94b3c6373d053649ea2cf187aa1198e","scripts":{"test":"node --enable-source-maps --test dist-test/**/*.test.js","build":"npm run version && tsc --build src test && npm run build-web","clean":"rm -rf node_modules yarn.lock package-lock.json dist dist-test","reset":"npm run clean && npm i && npm run build && npm test","watch":"npm run version && tsc --build src test -w","version":"node -r fs -e \"v=require('./package.json').version;s=fs.readFileSync('./src/shape.ts').toString();if(!s.includes('VERSION = \\''+v+'\\'')){s=s.replace(/VERSION = '.*?'/,'VERSION = \\''+v+'\\'');fs.writeFileSync('./src/shape.ts',s)}\"","repo-tag":"REPO_VERSION=`node -e \"console.log(require('./package').version)\"` && echo TAG: v$REPO_VERSION && git commit -a -m v$REPO_VERSION && git push && git tag v$REPO_VERSION && git push --tags;","build-web":"esbuild src/shape.web.js --bundle --minify --keep-names --format=iife --global-name=Shape --platform=browser --alias:util=./src/web/util.js --footer:js=\"if(typeof module!=='undefined'&&module.exports)module.exports=Shape;\" --outfile=dist/shape.min.js --log-level=warning","test-some":"node --enable-source-maps --test --test-name-pattern","repo-publish":"npm run clean && npm i && npm run repo-publish-quick","repo-publish-quick":"npm run build && npm run test && npm run repo-tag && npm publish --access public --registry https://registry.npmjs.org "},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3e5c41c6-5ee6-4fc5-9207-73f99f46919c"}},"repository":{"url":"git://github.com/rjrodger/shape.git","type":"git"},"_npmVersion":"12.0.2","description":"An object shape validation utility.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"7.0.2","@types/node":"26.1.1"},"_npmOperationalInternal":{"tmp":"tmp/shape_11.3.0_1788366474214_0.879118430091345","host":"s3://npm-registry-packages-npm-production"}},"11.3.1":{"name":"shape","version":"11.3.1","keywords":["shape","schema","validation"],"author":{"url":"http://richardrodger.com","name":"Richard Rodger"},"license":"MIT","_id":"shape@11.3.1","maintainers":[{"name":"rjrodger","email":"richard.rodger@voxgig.com"}],"homepage":"https://github.com/rjrodger/shape","bugs":{"url":"https://github.com/rjrodger/shape/issues"},"dist":{"shasum":"10f726226d05477dbc5571ece05909842f7bd99e","tarball":"https://registry.npmjs.org/shape/-/shape-11.3.1.tgz","fileCount":12,"integrity":"sha512-xtUJTQJHERW0YWBHSOcu9v7g0xo99F29+5UvgEARWIXX+c+Gfb7JICUtiaXJsEede8D/Zu0iLceP5ZSQMwubfw==","signatures":[{"sig":"MEYCIQCe+bAy+mGYjLlF6YaAu3PqPrIYjSnU7cPBcjE2NdqV6AIhAMOmt4kTIc9lv2NXkxbx0u+Sq+kP/X6sdocwjxFvX/ic","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shape@11.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":697759},"main":"dist/shape.js","type":"commonjs","types":"dist/shape.d.ts","browser":{"util":"./src/web/util.js"},"engines":{"node":">=24"},"gitHead":"97d095931c36fdb493ff182b6339d3aebc3862b1","scripts":{"test":"node --enable-source-maps --test dist-test/**/*.test.js","build":"npm run version && tsc --build src test && npm run build-web","clean":"rm -rf node_modules yarn.lock package-lock.json dist dist-test","reset":"npm run clean && npm i && npm run build && npm test","watch":"npm run version && tsc --build src test -w","version":"node -r fs -e \"v=require('./package.json').version;s=fs.readFileSync('./src/shape.ts').toString();if(!s.includes('VERSION = \\''+v+'\\'')){s=s.replace(/VERSION = '.*?'/,'VERSION = \\''+v+'\\'');fs.writeFileSync('./src/shape.ts',s)}\"","repo-tag":"REPO_VERSION=`node -e \"console.log(require('./package').version)\"` && echo TAG: v$REPO_VERSION && git commit -a -m v$REPO_VERSION && git push && git tag v$REPO_VERSION && git push --tags;","build-web":"esbuild src/shape.web.js --bundle --minify --keep-names --format=iife --global-name=Shape --platform=browser --alias:util=./src/web/util.js --footer:js=\"if(typeof module!=='undefined'&&module.exports)module.exports=Shape;\" --outfile=dist/shape.min.js --log-level=warning","test-some":"node --enable-source-maps --test --test-name-pattern","repo-publish":"npm run clean && npm i && npm run repo-publish-quick","repo-publish-quick":"npm run build && npm run test && npm run repo-tag && npm publish --access public --registry https://registry.npmjs.org "},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3e5c41c6-5ee6-4fc5-9207-73f99f46919c"}},"repository":{"url":"git://github.com/rjrodger/shape.git","type":"git"},"_npmVersion":"12.0.2","description":"An object shape validation utility.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"7.0.2","@types/node":"26.1.1"},"_npmOperationalInternal":{"tmp":"tmp/shape_11.3.1_1788429048790_0.9766140052228622","host":"s3://npm-registry-packages-npm-production"}},"11.3.2":{"name":"shape","version":"11.3.2","keywords":["shape","schema","validation"],"author":{"url":"http://richardrodger.com","name":"Richard Rodger"},"license":"MIT","_id":"shape@11.3.2","maintainers":[{"name":"rjrodger","email":"richard.rodger@voxgig.com"}],"homepage":"https://github.com/rjrodger/shape","bugs":{"url":"https://github.com/rjrodger/shape/issues"},"dist":{"shasum":"74f775386a5fb48b73d72d8060bf288753b5c1df","tarball":"https://registry.npmjs.org/shape/-/shape-11.3.2.tgz","fileCount":12,"integrity":"sha512-Farw3YQ6K1chobYzkPqloZ2hxXU3viZpkjf9oWP4zRwE1DlWSC/X5POZlY4gB9QDx/74jE5OKmpRimkBOI8ytQ==","signatures":[{"sig":"MEUCIQC6wboOBs5bYYSuNbArOg0GNCV/aTXAOYo0kzC8ET4L0QIgSwjk8dOepbv0jHAo/rtw63eF7ShfHCE4Dvo5aAaXmcQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shape@11.3.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":708999},"main":"dist/shape.js","type":"commonjs","types":"dist/shape.d.ts","browser":{"util":"./src/web/util.js"},"engines":{"node":">=24"},"gitHead":"76b7f6cf7972ae6124a6917f823f4afc4133ffe9","scripts":{"test":"node --enable-source-maps --test dist-test/**/*.test.js","build":"npm run version && tsc --build src test && npm run build-web","clean":"rm -rf node_modules yarn.lock package-lock.json dist dist-test","reset":"npm run clean && npm i && npm run build && npm test","watch":"npm run version && tsc --build src test -w","version":"node -r fs -e \"v=require('./package.json').version;s=fs.readFileSync('./src/shape.ts').toString();if(!s.includes('VERSION = \\''+v+'\\'')){s=s.replace(/VERSION = '.*?'/,'VERSION = \\''+v+'\\'');fs.writeFileSync('./src/shape.ts',s)}\"","repo-tag":"REPO_VERSION=`node -e \"console.log(require('./package').version)\"` && echo TAG: v$REPO_VERSION && git commit -a -m v$REPO_VERSION && git push && git tag v$REPO_VERSION && git push --tags;","build-web":"esbuild src/shape.web.js --bundle --minify --keep-names --format=iife --global-name=Shape --platform=browser --alias:util=./src/web/util.js --footer:js=\"if(typeof module!=='undefined'&&module.exports)module.exports=Shape;\" --outfile=dist/shape.min.js --log-level=warning","test-some":"node --enable-source-maps --test --test-name-pattern","repo-publish":"npm run clean && npm i && npm run repo-publish-quick","repo-publish-quick":"npm run build && npm run test && npm run repo-tag && npm publish --access public --registry https://registry.npmjs.org "},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3e5c41c6-5ee6-4fc5-9207-73f99f46919c"}},"repository":{"url":"git://github.com/rjrodger/shape.git","type":"git"},"_npmVersion":"12.0.2","description":"An object shape validation utility.","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"7.0.2","@types/node":"26.1.1"},"_npmOperationalInternal":{"tmp":"tmp/shape_11.3.2_1788450298755_0.5215887089791915","host":"s3://npm-registry-packages-npm-production"}},"11.4.0":{"name":"shape","version":"11.4.0","keywords":["shape","schema","validation"],"author":{"url":"http://richardrodger.com","name":"Richard Rodger"},"license":"MIT","_id":"shape@11.4.0","maintainers":[{"name":"rjrodger","email":"richard.rodger@voxgig.com"}],"homepage":"https://github.com/rjrodger/shape","bugs":{"url":"https://github.com/rjrodger/shape/issues"},"dist":{"shasum":"8d7c951ce3f90e2969f8e094fbddd215a3187148","tarball":"https://registry.npmjs.org/shape/-/shape-11.4.0.tgz","fileCount":12,"integrity":"sha512-rVrERHKAsMFIVuGImD2RB1042EzyrmwFTJ8XRaktA4acq9UYQavUQ9LPfMjK8WP0f41XtKECaMuMcM0+G+U5Xg==","signatures":[{"sig":"MEYCIQCUVyug7v3W8sgyFs9J339rPLB4Lknfh0gU3SclpMi9yAIhAISK9D4abhjIfHX7OsnF+7NtkMmUlkb0X99abkB34IRg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shape@11.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":708973},"main":"dist/shape.js","type":"commonjs","types":"dist/shape.d.ts","browser":{"util":"./src/web/util.js"},"engines":{"node":">=20"},"gitHead":"00f835e12eb1a12cb8a8cd08c08d06aa88518aaf","scripts":{"test":"node test/run.js","build":"npm run version && tsc --build src test && npm run build-web","clean":"rm -rf node_modules yarn.lock package-lock.json dist dist-test","reset":"npm run clean && npm i && npm run build && npm test","watch":"npm run version && tsc --build src test -w","version":"node -r fs -e \"v=require('./package.json').version;s=fs.readFileSync('./src/shape.ts').toString();if(!s.includes('VERSION = \\''+v+'\\'')){s=s.replace(/VERSION = '.*?'/,'VERSION = \\''+v+'\\'');fs.writeFileSync('./src/shape.ts',s)}\"","repo-tag":"REPO_VERSION=`node -e \"console.log(require('./package').version)\"` && echo TAG: v$REPO_VERSION && git commit -a -m v$REPO_VERSION && git push && git tag v$REPO_VERSION && git push --tags;","build-web":"esbuild src/shape.web.js --bundle --minify --keep-names --format=iife --global-name=Shape --platform=browser --alias:util=./src/web/util.js --footer:js=\"if(typeof module!=='undefined'&&module.exports)module.exports=Shape;\" --outfile=dist/shape.min.js --log-level=warning","test-some":"node test/run.js --test-name-pattern","repo-publish":"npm run clean && npm i && npm run repo-publish-quick","repo-publish-quick":"npm run build && npm run test && npm run repo-tag && npm publish --access public --registry https://registry.npmjs.org "},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3e5c41c6-5ee6-4fc5-9207-73f99f46919c"}},"repository":{"url":"git://github.com/rjrodger/shape.git","type":"git"},"_npmVersion":"12.0.2","description":"An object shape validation utility.","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.2","typescript":"7.0.2","@types/node":"26.1.1"},"_npmOperationalInternal":{"tmp":"tmp/shape_11.4.0_1788508844374_0.8071299121256024","host":"s3://npm-registry-packages-npm-production"}},"11.4.1":{"name":"shape","version":"11.4.1","description":"An object shape validation utility.","main":"dist/shape.js","browser":{"util":"./src/web/util.js"},"type":"commonjs","types":"dist/shape.d.ts","homepage":"https://github.com/rjrodger/shape","keywords":["shape","schema","validation"],"author":{"name":"Richard Rodger","url":"http://richardrodger.com"},"repository":{"type":"git","url":"git://github.com/rjrodger/shape.git"},"scripts":{"test":"node test/run.js","test-some":"node test/run.js --test-name-pattern","build":"npm run version && tsc --build src test && npm run build-web","build-web":"esbuild src/shape.web.js --bundle --minify --keep-names --format=iife --global-name=Shape --platform=browser --alias:util=./src/web/util.js --footer:js=\"if(typeof module!=='undefined'&&module.exports)module.exports=Shape;\" --outfile=dist/shape.min.js --log-level=warning","watch":"npm run version && tsc --build src test -w","version":"node -r fs -e \"v=require('./package.json').version;s=fs.readFileSync('./src/shape.ts').toString();if(!s.includes('VERSION = \\''+v+'\\'')){s=s.replace(/VERSION = '.*?'/,'VERSION = \\''+v+'\\'');fs.writeFileSync('./src/shape.ts',s)}\"","clean":"rm -rf node_modules yarn.lock package-lock.json dist dist-test","reset":"npm run clean && npm i && npm run build && npm test","repo-tag":"REPO_VERSION=`node -e \"console.log(require('./package').version)\"` && echo TAG: v$REPO_VERSION && git commit -a -m v$REPO_VERSION && git push && git tag v$REPO_VERSION && git push --tags;","repo-publish":"npm run clean && npm i && npm run repo-publish-quick","repo-publish-quick":"npm run build && npm run test && npm run repo-tag && npm publish --access public --registry https://registry.npmjs.org "},"license":"MIT","engines":{"node":">=20"},"devDependencies":{"@types/node":"26.1.1","esbuild":"^0.28.2","typescript":"7.0.2"},"gitHead":"25a5f68f519c4e8bd2fcafcfaa5f850562ad30a3","_id":"shape@11.4.1","bugs":{"url":"https://github.com/rjrodger/shape/issues"},"_nodeVersion":"24.20.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-olYMCQ7cMr71QAlPEnao4sko6ST6YnUG20pojhBua7mgCpPjIlqaDf7+4sal3eq8zsk0O5vAkV2/tAeybe+fgA==","shasum":"dbeb336dcc68ce05638bd327d021e9efdf5d1fd0","tarball":"https://registry.npmjs.org/shape/-/shape-11.4.1.tgz","fileCount":12,"unpackedSize":708973,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/shape@11.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFaaV6KCtWwlJy1PD/uueaD4B4UIo4VD8ah77N5uOeCJAiAjT/oER1boNu5TpLaLy8rCghl8m01V8VSZtlJfc6nTyA=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:3e5c41c6-5ee6-4fc5-9207-73f99f46919c"}},"directories":{},"maintainers":[{"name":"rjrodger","email":"richard.rodger@voxgig.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/shape_11.4.1_1788514781818_0.46946373427963506"},"_hasShrinkwrap":false}},"time":{"created":"2013-09-27T12:36:24.760Z","modified":"2026-09-04T09:39:42.257Z","0.0.1":"2013-09-27T12:36:31.093Z","0.0.2":"2013-09-27T12:47:58.557Z","10.0.1":"2026-03-24T18:28:05.505Z","10.1.0":"2026-04-28T22:51:55.945Z","10.1.1":"2026-07-20T16:01:36.046Z","10.1.2":"2026-07-21T10:43:17.453Z","10.1.3":"2026-07-21T10:46:56.658Z","11.0.0":"2026-09-01T22:14:20.816Z","11.0.1":"2026-09-01T22:30:52.198Z","11.1.0":"2026-09-02T08:21:31.179Z","11.2.0":"2026-09-02T15:35:46.232Z","11.3.0":"2026-09-02T16:27:54.406Z","11.3.1":"2026-09-03T09:50:48.934Z","11.3.2":"2026-09-03T15:44:58.890Z","11.4.0":"2026-09-04T08:00:44.555Z","11.4.1":"2026-09-04T09:39:41.962Z"},"bugs":{"url":"https://github.com/rjrodger/shape/issues"},"author":{"name":"Richard Rodger","url":"http://richardrodger.com"},"license":"MIT","homepage":"https://github.com/rjrodger/shape","keywords":["shape","schema","validation"],"repository":{"type":"git","url":"git://github.com/rjrodger/shape.git"},"description":"An object shape validation utility.","maintainers":[{"name":"rjrodger","email":"richard.rodger@voxgig.com"}],"readme":"# shape (TypeScript / JavaScript)\n\nThe canonical implementation of [`shape`](https://github.com/rjrodger/shape), a\nschema-by-example validator: your schema looks (almost) exactly like your data.\n\n```js\nconst { Shape } = require('shape')\n\nconst shape = Shape({\n  port: 8080,        // optional, defaults to 8080, must be a number\n  host: 'localhost', // optional, defaults to 'localhost', must be a string\n  debug: Boolean,    // required, must be a boolean\n})\n\nshape({ debug: true })\n// → { debug: true, port: 8080, host: 'localhost' }\n\nshape({ debug: 'yes' })\n// throws ShapeError: Validation failed for property \"debug\" with string \"yes\"\n//   because the string is not of type boolean.\n```\n\nLiteral values are **optional with a default**; the wrapper constructors\n(`String`, `Number`, `Boolean`, `Object`, `Array`, `Function`, `Date`) are\n**required** type markers. Objects and arrays fill out and validate to any\ndepth. There are no dependencies.\n\nThis package defines the behaviour; the [Go port](../go/README.md) and the\n[Rust port](../rs/README.md) match it exactly, held there by a\n[shared conformance corpus](../test/README.md) and a\n[differential harness](../test/differential/README.md). The full documentation\nis in [`../docs`](../docs/README.md); this file is the TypeScript surface in\none place.\n\n## Install\n\n```sh\nnpm install shape\n```\n\n```js\nconst { Shape, Min, Optional } = require('shape')   // CommonJS\nimport { Shape, Min, Optional } from 'shape'         // ESM / TypeScript\n```\n\nNode 20+. Type declarations ship with the package. Bundlers pick up\nthe CommonJS build, with Node's `util` swapped for a stub by the `browser`\nfield; a minified standalone bundle, `dist/shape.min.js`, exposes a global\n`Shape` for a plain script tag. See\n[the browser how-to](../docs/how-to/use-shape-in-the-browser.md).\n\n## Using a shape\n\n```js\nconst shape = Shape(spec, options?)\n\nshape(value, ctx?)         // the produced value, with defaults injected; throws on failure\nshape.match(value)         // boolean, no mutation\nshape.valid(value)         // boolean (a type guard in TypeScript)\nshape.error(value)         // the issues, [{ path, why, text, … }] (empty when valid)\nshape.spec()               // a JSON-friendly description of the compiled shape\nshape.node()               // the compiled root node\nshape.stringify()          // the shape as DSL-ish text\nshape.json()               // the shape as declarative JSON\nShape.build(shape.json())  // and back: the same shape again\nshape.jsonSchema()         // a JSON Schema (draft 2020-12) for the values accepted\nShape(fromJsonSchema(doc)) // and back: a spec built from a JSON Schema\nshape['~standard']         // a Standard Schema V1 validator\n```\n\nShape **mutates** the input to inject defaults; pass a fresh object if you need\nthe original kept. Pass `{ err: [] }` as `ctx` to collect errors instead of\nthrowing. See [the Shape API](../docs/reference/shape-api.md) and\n[errors](../docs/reference/errors.md).\n\n## Builders\n\nEvery builder is a named export, a property of `Shape`, and—except `One`,\n`Some`, `All`, `Exact` and `Discriminated`—a chainable method on a node.\n`G`-prefixed aliases (`GMin`, `GPick`, …) avoid clashes with local names.\n\n```js\nconst { Shape, Required, Optional, Min, Max, Email, Exact, Coerce, One, Open } = require('shape')\n\nShape({\n  name:  Min(1, String),                 // required, at least one character\n  age:   Coerce(Min(0, Max(120, Number))),  // \"42\" is accepted as 42\n  email: Email,                          // a required email address\n  role:  Exact('admin', 'user'),         // one of these\n  tags:  Optional([String]),             // an optional array of strings\n  id:    One(Number, String),            // either kind\n  addr:  Open({ city: String }),         // other keys allowed\n})\n\nRequired(Number).Min(2)                  // the same builders, chained\n```\n\n| Group | Builders |\n| ----- | -------- |\n| Required / optional / defaults | `Required` `Optional` `Default` `Skip` `Ignore` `Empty` `Nullable` `Fault` |\n| Type / equality | `Type` `Integer` `Date` `Exact` `Never` `Func` `Any` |\n| Coercion | `Coerce`—a decimal string to a number, `\"true\"`/`\"1\"` to a boolean, a number or boolean to a string, an ISO 8601 string or millisecond count to a `Date` |\n| String formats | `Email` `Url` `Uuid` `DateTime` `Ip` `Ipv4` `Ipv6` |\n| Bounds | `Min` `Max` `Above` `Below` `Len`—value for numbers, length for strings, arrays and objects |\n| Custom checks | `Check` (a function or a `RegExp`) `Before` `After` |\n| Isolation | `Catch(fallback, …)` `Transform(fn, …)` `Describe(text, …)` |\n| Composition | `One` `Some` `All` `Discriminated(tag, { … })` |\n| Objects / arrays | `Open` `Closed` `Child` `Rest` |\n| Object algebra | `Pick` `Omit` `Partial` `Extend`—each builds a new object shape out of another |\n| References | `Define` `Refer` `Rename` |\n| Misc | `Key` |\n\nThe [builder reference](../docs/reference/builders.md) has the semantics of each.\n\n## Key expressions and the string DSL\n\nA property key of the form `\"name: <expression>\"` applies builders to the value,\nwhich is the example the expression works on:\n\n```js\nShape({\n  'name: Min(1)':          String,\n  'port: Optional(Number)': 8080,\n  'user: Pick([\"id\"])':    { id: Number, name: String },\n})\n```\n\n`expr(source)` compiles one expression into a node, and `build(value)` compiles\na JSON structure whose string leaves are expressions, returning the shape:\n\n```js\nconst { Shape, expr, build } = require('shape')\n\nShape(expr('String.Min(2).Max(10)'))\nbuild({ name: 'Min(1,String)', tags: ['String'] })   // a compiled shape\n```\n\nSee [key and value expressions](../docs/how-to/use-key-and-value-expressions.md)\nand [the string DSL](../docs/how-to/use-the-string-dsl.md).\n\n## TypeScript\n\n`Shape(spec)` infers the produced type from the spec, through every builder:\n`Min(1, String)` is `string`, `Exact('a', 'b')` is `'a' | 'b'`, `Skip(Number)`\nis `number | undefined`, a discriminated union is a union of its branches, and\na key expression `'port: Max(9)'` is the property `port`. The exported types\nare `Node`, `Context`, `Update`, `State`, `Validate`, `Builder`, `ShapeShape`\nand `StandardSchemaV1`. See\n[TypeScript types](../docs/reference/typescript-types.md).\n\n## Development\n\n```sh\nnpm install\nnpm run build      # tsc: src → dist, test → dist-test (both git-ignored), then the browser bundle\nnpm run build-web  # esbuild: src/shape.web.js → dist/shape.min.js (a global Shape)\nnpm test           # node --test over dist-test\nnode --test --experimental-test-coverage dist-test/*.test.js   # the coverage gate, Node 22+\n```\n\n`src/shape.ts` is the whole library. The suite is held at **100% line\ncoverage** of `dist/shape.js`; a genuinely non-exercisable branch may carry a\n`/* node:coverage disable */` pragma with a one-line reason. `npm test` also\nruns the shared corpus in `../test/*.tsv`, whose expected columns are generated\nfrom this build:\n\n```sh\nnpm run build && node ../test/gen-compat.js    # regenerate the corpus\nmake -C .. test                                # all three languages must pass it\nmake -C .. diff                                # the differential harness\n```\n\nA behaviour change starts here and is then mirrored in Go and Rust—see\n[`../AGENTS.md`](../AGENTS.md).\n\n## License\n\nCopyright (c) 2021-2024 Richard Rodger and other contributors.\nLicensed under [MIT](./LICENSE).\n","readmeFilename":"README.md"}