{"_id":"node-tiny","_rev":"17-4d6259238ceeab5336a15f17a076d56a","name":"node-tiny","dist-tags":{"latest":"1.1.18"},"versions":{"1.1.1":{"name":"node-tiny","version":"1.1.1","author":{"name":"jnxey"},"license":"ISC","_id":"node-tiny@1.1.1","maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"homepage":"https://github.com/jnxey/tiny#readme","bugs":{"url":"https://github.com/jnxey/tiny/issues"},"dist":{"shasum":"c945a2fa787c61f26b1713f772c7e624c878ff79","tarball":"https://registry.npmjs.org/node-tiny/-/node-tiny-1.1.1.tgz","fileCount":6,"integrity":"sha512-ZUXK4SjS+OIsJq69zEn5GUgulM9+Tu9R5x6KJpNd8kok2+++RSk2uamBZ4kI+hzUpyZk/FeWbYBdVwMVNexS2A==","signatures":[{"sig":"MEQCIHF4u3/uAQlQaHqOF5Rxl+ASFxa/f4OVaWaropX41nISAiBTgU//6+rMHZABWlqYIIEaZ3ePmvnyH0Ny06IrCNXe2g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":121604},"main":"./lib/tiny.js","type":"module","types":"./lib/tiny.d.ts","module":"./lib/tiny.js","exports":{".":"./lib/tiny.js"},"gitHead":"57e307ca3a3c49050ac0d83ed28e2b2144b64aff","scripts":{"test":"npm run test:bundle && node --experimental-vm-modules node_modules/jest/bin/jest.js lib/tiny.test.js","build":"npm run types && npm run build:bundle && npm run build:types","types":"tsc --declaration --emitDeclarationOnly --outDir types","build:types":"rollup -c scripts/types.js","test:bundle":"rollup -c scripts/test.js --environment NODE_ENV:production","build:bundle":"rollup -c scripts/build.js --environment NODE_ENV:production"},"_npmUser":{"name":"jacklee00084","email":"JackLee00084@outlook.com"},"repository":{"url":"git+https://github.com/jnxey/tiny.git","type":"git"},"_npmVersion":"9.6.7","description":"A simple node service framework","directories":{},"_nodeVersion":"18.17.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","axios":"^1.7.9","tslib":"^2.6.2","rollup":"^4.28.1","ts-node":"^10.9.2","prettier":"^3.2.5","formidable":"^3.5.2","typescript":"^5.4.5","@types/jest":"^29.5.14","@babel/preset-env":"^7.26.0","rollup-plugin-dts":"^6.1.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-alias":"^5.1.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.1","rollup-plugin-visualizer":"^5.12.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.3.0","@babel/plugin-proposal-decorators":"^7.25.9"},"_npmOperationalInternal":{"tmp":"tmp/node-tiny_1.1.1_1734356575390_0.5042846421533382","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"node-tiny","version":"1.1.2","author":{"name":"jnxey"},"license":"ISC","_id":"node-tiny@1.1.2","maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"homepage":"https://github.com/jnxey/tiny#readme","bugs":{"url":"https://github.com/jnxey/tiny/issues"},"dist":{"shasum":"a88b3957ffd4549b3a3189128e4251f7ae34a410","tarball":"https://registry.npmjs.org/node-tiny/-/node-tiny-1.1.2.tgz","fileCount":6,"integrity":"sha512-UOIe+ZzefCFdjRjmYxAVbLwDPCelx2U37GPg+CvQrBTOuHLmcO+MbwAPHndAJ/csDqflUOf2OmDloW+SG41fzw==","signatures":[{"sig":"MEYCIQDMUI3QqhucHTyQyi219aXJEjYN2+Ufn2LR94MFDUJQFgIhANb4fRqgD3/P3iGv9rI1AV/eXfCUc+n7akBVs1IWrees","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":125269},"main":"./lib/tiny.js","type":"module","types":"./lib/tiny.d.ts","module":"./lib/tiny.js","exports":{".":"./lib/tiny.js"},"gitHead":"1a383af197967d05dc9011fa2dd3620625b7f6f5","scripts":{"test":"npm run test:bundle && node --experimental-vm-modules node_modules/jest/bin/jest.js lib/tiny.test.js","build":"npm run types && npm run build:bundle && npm run build:types","types":"tsc --declaration --emitDeclarationOnly --outDir types","build:types":"rollup -c scripts/types.js","test:bundle":"rollup -c scripts/test.js --environment NODE_ENV:production","build:bundle":"rollup -c scripts/build.js --environment NODE_ENV:production"},"_npmUser":{"name":"jacklee00084","email":"JackLee00084@outlook.com"},"repository":{"url":"git+https://github.com/jnxey/tiny.git","type":"git"},"_npmVersion":"9.6.7","description":"A simple node service framework","directories":{},"_nodeVersion":"18.17.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","axios":"^1.7.9","tslib":"^2.6.2","rollup":"^4.28.1","ts-node":"^10.9.2","prettier":"^3.2.5","formidable":"^3.5.2","typescript":"^5.4.5","@types/jest":"^29.5.14","@babel/preset-env":"^7.26.0","rollup-plugin-dts":"^6.1.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-alias":"^5.1.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.1","rollup-plugin-visualizer":"^5.12.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.3.0","@babel/plugin-proposal-decorators":"^7.25.9"},"_npmOperationalInternal":{"tmp":"tmp/node-tiny_1.1.2_1734368944289_0.9015859971896152","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"node-tiny","version":"1.1.3","author":{"name":"jnxey"},"license":"ISC","_id":"node-tiny@1.1.3","maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"homepage":"https://github.com/jnxey/tiny#readme","bugs":{"url":"https://github.com/jnxey/tiny/issues"},"dist":{"shasum":"4304e16706c625953d93dc745ea0e4ecb2d5656d","tarball":"https://registry.npmjs.org/node-tiny/-/node-tiny-1.1.3.tgz","fileCount":6,"integrity":"sha512-M2vArNrgY9vyUT6/6CMmuD+XY4dS7TVVt9nrber9A4dNoGPvPcKqP09neEuocMTlFF/9T3BxHa7A11maISdBBQ==","signatures":[{"sig":"MEUCIQDRl2HvwSnLkE5GvuIA+ntu53+JoxJx8K6d8K3UpwgX6AIgQJEIcxDbgDFys7O+xHSxNAQOOVOSQB3KSL2U5YyLOY8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":125014},"main":"./lib/tiny.js","type":"module","types":"./lib/tiny.d.ts","module":"./lib/tiny.js","exports":{".":"./lib/tiny.js"},"gitHead":"a6b0290797bfda95274ecb1274bb122c1d62d45e","scripts":{"test":"npm run test:bundle && node --experimental-vm-modules node_modules/jest/bin/jest.js lib/tiny.test.js","build":"npm run types && npm run build:bundle && npm run build:types","types":"tsc --declaration --emitDeclarationOnly --outDir types","build:types":"rollup -c scripts/types.js","test:bundle":"rollup -c scripts/test.js --environment NODE_ENV:production","build:bundle":"rollup -c scripts/build.js --environment NODE_ENV:production"},"_npmUser":{"name":"jacklee00084","email":"JackLee00084@outlook.com"},"repository":{"url":"git+https://github.com/jnxey/tiny.git","type":"git"},"_npmVersion":"9.6.7","description":"A simple node service framework","directories":{},"_nodeVersion":"18.17.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","axios":"^1.7.9","tslib":"^2.6.2","rollup":"^4.28.1","ts-node":"^10.9.2","prettier":"^3.2.5","formidable":"^3.5.2","typescript":"^5.4.5","@types/jest":"^29.5.14","@babel/preset-env":"^7.26.0","rollup-plugin-dts":"^6.1.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-alias":"^5.1.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.1","rollup-plugin-visualizer":"^5.12.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.3.0","@babel/plugin-proposal-decorators":"^7.25.9"},"_npmOperationalInternal":{"tmp":"tmp/node-tiny_1.1.3_1734441632852_0.7542566091660172","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"node-tiny","version":"1.1.4","author":{"name":"jnxey"},"license":"ISC","_id":"node-tiny@1.1.4","maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"homepage":"https://github.com/jnxey/tiny#readme","bugs":{"url":"https://github.com/jnxey/tiny/issues"},"dist":{"shasum":"feb0947533c51a29f993ef4b5e3dcf22f52686e3","tarball":"https://registry.npmjs.org/node-tiny/-/node-tiny-1.1.4.tgz","fileCount":6,"integrity":"sha512-xToUmmuJlDmoZBfaFCaP8DhPsrSHFZR8CeB2Hoq8OmB0dSXWqsrvpOJI8+brcujyr7mqaf5p8KS3a/IM/dtAWw==","signatures":[{"sig":"MEYCIQCAycuPoR1nD/mcQHb+XrDT/M5QAZq2+04g6w5Y5q1FDAIhAJ0QBg0hqc9QdwB6XxbA6BLPY5xMzhd8+ubHRAk4VUpH","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":127627},"main":"./lib/tiny.js","type":"module","types":"./lib/tiny.d.ts","module":"./lib/tiny.js","exports":{".":"./lib/tiny.js"},"gitHead":"8022b3609c997210536b401f981cd59638c1f618","scripts":{"test":"npm run test:bundle && node --experimental-vm-modules node_modules/jest/bin/jest.js lib/tiny.test.js","build":"npm run types && npm run build:bundle && npm run build:types","types":"tsc --declaration --emitDeclarationOnly --outDir types","build:types":"rollup -c scripts/types.js","test:bundle":"rollup -c scripts/test.js --environment NODE_ENV:production","build:bundle":"rollup -c scripts/build.js --environment NODE_ENV:production"},"_npmUser":{"name":"jacklee00084","email":"JackLee00084@outlook.com"},"repository":{"url":"git+https://github.com/jnxey/tiny.git","type":"git"},"_npmVersion":"9.6.7","description":"A simple node service framework","directories":{},"_nodeVersion":"18.17.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","axios":"^1.7.9","tslib":"^2.6.2","rollup":"^4.28.1","ts-node":"^10.9.2","prettier":"^3.2.5","formidable":"^3.5.2","typescript":"^5.4.5","@types/jest":"^29.5.14","@babel/preset-env":"^7.26.0","rollup-plugin-dts":"^6.1.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-alias":"^5.1.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.1","rollup-plugin-visualizer":"^5.12.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.3.0","@babel/plugin-proposal-decorators":"^7.25.9"},"_npmOperationalInternal":{"tmp":"tmp/node-tiny_1.1.4_1734446216067_0.30281506695877747","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"node-tiny","version":"1.1.5","author":{"name":"jnxey"},"license":"ISC","_id":"node-tiny@1.1.5","maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"homepage":"https://github.com/jnxey/tiny#readme","bugs":{"url":"https://github.com/jnxey/tiny/issues"},"dist":{"shasum":"91839b37ad2c81a83c5b889af0ef650f6ff63163","tarball":"https://registry.npmjs.org/node-tiny/-/node-tiny-1.1.5.tgz","fileCount":6,"integrity":"sha512-RFgYdqqDCPInNKPJe3F8nyEXbgSL52Y5YLQRTwFwkRLOtmVwRPg8Xj62AVssqVaCodhxnjXqP7sIx1sMFWOfSw==","signatures":[{"sig":"MEUCIH9dWWCu3cIe9LYSxungVQrdA/SFTfI3+pBhcnjEp/kTAiEA8wKg8+Pn7v+ucKrQcRMJE6FrC8KrezeftmK+O3nMSsA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":127689},"main":"./lib/tiny.js","type":"module","types":"./lib/tiny.d.ts","module":"./lib/tiny.js","exports":{".":"./lib/tiny.js"},"gitHead":"26177216ecb2580eef311b5a8de3052b7d0ffd1b","scripts":{"test":"npm run test:bundle && node --experimental-vm-modules node_modules/jest/bin/jest.js lib/tiny.test.js","build":"npm run types && npm run build:bundle && npm run build:types","types":"tsc --declaration --emitDeclarationOnly --outDir types","build:types":"rollup -c scripts/types.js","test:bundle":"rollup -c scripts/test.js --environment NODE_ENV:production","build:bundle":"rollup -c scripts/build.js --environment NODE_ENV:production"},"_npmUser":{"name":"jacklee00084","email":"JackLee00084@outlook.com"},"repository":{"url":"git+https://github.com/jnxey/tiny.git","type":"git"},"_npmVersion":"9.6.7","description":"A simple node service framework","directories":{},"_nodeVersion":"18.17.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","axios":"^1.7.9","tslib":"^2.6.2","rollup":"^4.28.1","ts-node":"^10.9.2","prettier":"^3.2.5","formidable":"^3.5.2","typescript":"^5.4.5","@types/jest":"^29.5.14","@babel/preset-env":"^7.26.0","rollup-plugin-dts":"^6.1.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-alias":"^5.1.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.1","rollup-plugin-visualizer":"^5.12.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.3.0","@babel/plugin-proposal-decorators":"^7.25.9"},"_npmOperationalInternal":{"tmp":"tmp/node-tiny_1.1.5_1734706063852_0.4855658369287905","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"node-tiny","version":"1.1.6","author":{"name":"jnxey"},"license":"ISC","_id":"node-tiny@1.1.6","maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"homepage":"https://github.com/jnxey/tiny#readme","bugs":{"url":"https://github.com/jnxey/tiny/issues"},"dist":{"shasum":"eb2d7da812e96654bf424d967d578c0dfd71d5d8","tarball":"https://registry.npmjs.org/node-tiny/-/node-tiny-1.1.6.tgz","fileCount":6,"integrity":"sha512-Gz80opcWxaF2e4oN8r6SBwTeqO9ShU+3AiwB5CCLUpgYyYwcgw59Qw4xBFG4zuZAqZA6TQgRKzQjqTxqLvDEbw==","signatures":[{"sig":"MEYCIQDCT6aCvx93nkg5GYpBhxDRPWbqg0hMbQnHnrjsSp0EGAIhAL0dqvjhrimej6KGXtkATLCgY1hCtbF010Kq2Q5tCDbO","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":127898},"main":"./lib/tiny.js","type":"module","types":"./lib/tiny.d.ts","module":"./lib/tiny.js","exports":{".":"./lib/tiny.js"},"gitHead":"8353b9c1fd84107daa46f42867aef66b72859320","scripts":{"test":"npm run test:bundle && node --experimental-vm-modules node_modules/jest/bin/jest.js lib/tiny.test.js","build":"npm run types && npm run build:bundle && npm run build:types","types":"tsc --declaration --emitDeclarationOnly --outDir types","build:types":"rollup -c scripts/types.js","test:bundle":"rollup -c scripts/test.js --environment NODE_ENV:production","build:bundle":"rollup -c scripts/build.js --environment NODE_ENV:production"},"_npmUser":{"name":"jacklee00084","email":"JackLee00084@outlook.com"},"repository":{"url":"git+https://github.com/jnxey/tiny.git","type":"git"},"_npmVersion":"9.6.7","description":"A simple node service framework","directories":{},"_nodeVersion":"18.17.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","axios":"^1.7.9","tslib":"^2.6.2","rollup":"^4.28.1","ts-node":"^10.9.2","prettier":"^3.2.5","formidable":"^3.5.2","typescript":"^5.4.5","@types/jest":"^29.5.14","@babel/preset-env":"^7.26.0","rollup-plugin-dts":"^6.1.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-alias":"^5.1.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.1","rollup-plugin-visualizer":"^5.12.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.3.0","@babel/plugin-proposal-decorators":"^7.25.9"},"_npmOperationalInternal":{"tmp":"tmp/node-tiny_1.1.6_1734706342599_0.4888506882695214","host":"s3://npm-registry-packages-npm-production"}},"1.1.7":{"name":"node-tiny","version":"1.1.7","author":{"name":"jnxey"},"license":"ISC","_id":"node-tiny@1.1.7","maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"homepage":"https://github.com/jnxey/tiny#readme","bugs":{"url":"https://github.com/jnxey/tiny/issues"},"dist":{"shasum":"ddb2537cb7cea056ea2e5047f291c8f9c6da9504","tarball":"https://registry.npmjs.org/node-tiny/-/node-tiny-1.1.7.tgz","fileCount":6,"integrity":"sha512-z0gzQABQ+LSRR3U+ZRdmjEUOyQ3heMTpCIP/cx/j3F75G8Umg4GBYAZcsPRQGRh3W7Tn8TKe6Iy73eSmvnSWQw==","signatures":[{"sig":"MEYCIQDniKNXtU3I9GoNyxyX8m/sr+MOQAh8/p7Brqelgcgj8QIhAIIU5zUrkhXqNVKY6Y9mBNqH1N5/UxN8nj5cQpW325ar","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":127910},"main":"./lib/tiny.js","type":"module","types":"./lib/tiny.d.ts","module":"./lib/tiny.js","exports":{".":"./lib/tiny.js"},"gitHead":"a86d458fae5959b5f9d304a6e7f0caaa7c161e48","scripts":{"test":"npm run test:bundle && node --experimental-vm-modules node_modules/jest/bin/jest.js lib/tiny.test.js","build":"npm run types && npm run build:bundle && npm run build:types","types":"tsc --declaration --emitDeclarationOnly --outDir types","build:types":"rollup -c scripts/types.js","test:bundle":"rollup -c scripts/test.js --environment NODE_ENV:production","build:bundle":"rollup -c scripts/build.js --environment NODE_ENV:production"},"_npmUser":{"name":"jacklee00084","email":"JackLee00084@outlook.com"},"repository":{"url":"git+https://github.com/jnxey/tiny.git","type":"git"},"_npmVersion":"9.6.7","description":"A simple node service framework","directories":{},"_nodeVersion":"18.17.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","axios":"^1.7.9","tslib":"^2.6.2","rollup":"^4.28.1","ts-node":"^10.9.2","prettier":"^3.2.5","formidable":"^3.5.2","typescript":"^5.4.5","@types/jest":"^29.5.14","@babel/preset-env":"^7.26.0","rollup-plugin-dts":"^6.1.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-alias":"^5.1.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.1","rollup-plugin-visualizer":"^5.12.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.3.0","@babel/plugin-proposal-decorators":"^7.25.9"},"_npmOperationalInternal":{"tmp":"tmp/node-tiny_1.1.7_1734706660613_0.010197354029206629","host":"s3://npm-registry-packages-npm-production"}},"1.1.8":{"name":"node-tiny","version":"1.1.8","author":{"name":"jnxey"},"license":"ISC","_id":"node-tiny@1.1.8","maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"homepage":"https://github.com/jnxey/tiny#readme","bugs":{"url":"https://github.com/jnxey/tiny/issues"},"dist":{"shasum":"cf4e8be225e721aed1fd12243867fe310d2dc8ae","tarball":"https://registry.npmjs.org/node-tiny/-/node-tiny-1.1.8.tgz","fileCount":6,"integrity":"sha512-ccXBvZqFdaDbbuEdYiyhYIraMK1VuDn5EfN3kYiirB0TD84aZNWAqGoRW7hKkdLpQtZ4Kr3pxwMV2Cqre6gJ3g==","signatures":[{"sig":"MEUCIQCOnAqJXfS15R5FwEYGx6gAnER+MQVKWoPNgp306arDlQIgG9tnmhiP0I7BaE0ryze/0MVoIJwB8l3U3dW4lKAA0Mg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":127915},"main":"./lib/tiny.js","type":"module","types":"./lib/tiny.d.ts","module":"./lib/tiny.js","exports":{".":"./lib/tiny.js"},"gitHead":"301c945dcdad811607c4e4d945e485f0014ddf4e","scripts":{"test":"npm run test:bundle && node --experimental-vm-modules node_modules/jest/bin/jest.js lib/tiny.test.js","build":"npm run types && npm run build:bundle && npm run build:types","types":"tsc --declaration --emitDeclarationOnly --outDir types","build:types":"rollup -c scripts/types.js","test:bundle":"rollup -c scripts/test.js --environment NODE_ENV:production","build:bundle":"rollup -c scripts/build.js --environment NODE_ENV:production"},"_npmUser":{"name":"jacklee00084","email":"JackLee00084@outlook.com"},"repository":{"url":"git+https://github.com/jnxey/tiny.git","type":"git"},"_npmVersion":"9.6.7","description":"A simple node service framework","directories":{},"_nodeVersion":"18.17.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","axios":"^1.7.9","tslib":"^2.6.2","rollup":"^4.28.1","ts-node":"^10.9.2","prettier":"^3.2.5","formidable":"^3.5.2","typescript":"^5.4.5","@types/jest":"^29.5.14","@babel/preset-env":"^7.26.0","rollup-plugin-dts":"^6.1.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-alias":"^5.1.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.1","rollup-plugin-visualizer":"^5.12.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.3.0","@babel/plugin-proposal-decorators":"^7.25.9"},"_npmOperationalInternal":{"tmp":"tmp/node-tiny_1.1.8_1734707020875_0.0330098604803406","host":"s3://npm-registry-packages-npm-production"}},"1.1.9":{"name":"node-tiny","version":"1.1.9","author":{"name":"jnxey"},"license":"ISC","_id":"node-tiny@1.1.9","maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"homepage":"https://github.com/jnxey/tiny#readme","bugs":{"url":"https://github.com/jnxey/tiny/issues"},"dist":{"shasum":"c5db66f8e1c74694cb6d2c1c65ec5677fce95305","tarball":"https://registry.npmjs.org/node-tiny/-/node-tiny-1.1.9.tgz","fileCount":6,"integrity":"sha512-Kp6FZlebbwdu4yJSMa3gTevY1oBU8ieltrdl6OGivyca1E1vAx8fWektD2m2ItZqbXY4vXN/IJHmlONvTQqwNA==","signatures":[{"sig":"MEUCIQDM6xoSw3avkgTQLDdF2YRmVQa/ly5hkEiS6FGFXjpi3AIgXIDe5t1CpmPYwaRbukNqB80NXzOjDlK1WWyFz2A+rHA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":127993},"main":"./lib/tiny.js","type":"module","types":"./lib/tiny.d.ts","module":"./lib/tiny.js","exports":{".":"./lib/tiny.js"},"gitHead":"5f8a76aa478ad5de3dfcf73ae1c950e884feb656","scripts":{"test":"npm run test:bundle && node --experimental-vm-modules node_modules/jest/bin/jest.js lib/tiny.test.js","build":"npm run types && npm run build:bundle && npm run build:types","types":"tsc --declaration --emitDeclarationOnly --outDir types","build:types":"rollup -c scripts/types.js","test:bundle":"rollup -c scripts/test.js --environment NODE_ENV:production","build:bundle":"rollup -c scripts/build.js --environment NODE_ENV:production"},"_npmUser":{"name":"jacklee00084","email":"JackLee00084@outlook.com"},"repository":{"url":"git+https://github.com/jnxey/tiny.git","type":"git"},"_npmVersion":"9.6.7","description":"A simple node service framework","directories":{},"_nodeVersion":"18.17.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","axios":"^1.7.9","tslib":"^2.6.2","rollup":"^4.28.1","ts-node":"^10.9.2","prettier":"^3.2.5","formidable":"^3.5.2","typescript":"^5.4.5","@types/jest":"^29.5.14","@babel/preset-env":"^7.26.0","rollup-plugin-dts":"^6.1.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-alias":"^5.1.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.1","rollup-plugin-visualizer":"^5.12.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.3.0","@babel/plugin-proposal-decorators":"^7.25.9"},"_npmOperationalInternal":{"tmp":"tmp/node-tiny_1.1.9_1734867077872_0.35511617171297516","host":"s3://npm-registry-packages-npm-production"}},"1.1.10":{"name":"node-tiny","version":"1.1.10","author":{"name":"jnxey"},"license":"ISC","_id":"node-tiny@1.1.10","maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"homepage":"https://github.com/jnxey/tiny#readme","bugs":{"url":"https://github.com/jnxey/tiny/issues"},"dist":{"shasum":"5e4508461257cc0d19299707445ad003efb44882","tarball":"https://registry.npmjs.org/node-tiny/-/node-tiny-1.1.10.tgz","fileCount":6,"integrity":"sha512-EOYh3yw+yDG6AqwPvdtIR1qsgHh0QcBymxGVpTg17UQ/g9oym8fNDJ/9i7aJoO8/77QVzcfSGcNKKLy46R6+tQ==","signatures":[{"sig":"MEUCIBoYwAOGX16VQTx0JJhFPQoLlR1fVaxUe8aZJY3ByI+YAiEA48V1Cs6NeozZ3PEJtAnpgY4aVeoYHCsdYKoGHXi0bgY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":128032},"main":"./lib/tiny.js","type":"module","types":"./lib/tiny.d.ts","module":"./lib/tiny.js","exports":{".":"./lib/tiny.js"},"gitHead":"05e07b0200422d236afafa10f6cc6f37e22931f0","scripts":{"test":"npm run test:bundle && node --experimental-vm-modules node_modules/jest/bin/jest.js lib/tiny.test.js","build":"npm run types && npm run build:bundle && npm run build:types","types":"tsc --declaration --emitDeclarationOnly --outDir types","build:types":"rollup -c scripts/types.js","test:bundle":"rollup -c scripts/test.js --environment NODE_ENV:production","build:bundle":"rollup -c scripts/build.js --environment NODE_ENV:production"},"_npmUser":{"name":"jacklee00084","email":"JackLee00084@outlook.com"},"repository":{"url":"git+https://github.com/jnxey/tiny.git","type":"git"},"_npmVersion":"9.6.7","description":"A simple node service framework","directories":{},"_nodeVersion":"18.17.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","axios":"^1.7.9","tslib":"^2.6.2","rollup":"^4.28.1","ts-node":"^10.9.2","prettier":"^3.2.5","formidable":"^3.5.2","typescript":"^5.4.5","@types/jest":"^29.5.14","@babel/preset-env":"^7.26.0","rollup-plugin-dts":"^6.1.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-alias":"^5.1.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.1","rollup-plugin-visualizer":"^5.12.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.3.0","@babel/plugin-proposal-decorators":"^7.25.9"},"_npmOperationalInternal":{"tmp":"tmp/node-tiny_1.1.10_1734867346662_0.02878676753826559","host":"s3://npm-registry-packages-npm-production"}},"1.1.11":{"name":"node-tiny","version":"1.1.11","author":{"name":"jnxey"},"license":"ISC","_id":"node-tiny@1.1.11","maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"homepage":"https://github.com/jnxey/tiny#readme","bugs":{"url":"https://github.com/jnxey/tiny/issues"},"dist":{"shasum":"6c8dabe6812b389da95b4a6e7153ab0adb6da0db","tarball":"https://registry.npmjs.org/node-tiny/-/node-tiny-1.1.11.tgz","fileCount":6,"integrity":"sha512-bv/IjoTxpUEjXoap08iO7VHHQztlkXLoSNJ/OM3oKE6YIlt42kErFYR+E6qSkBRwv7a0GEtEC9ae1sfkzP8BOg==","signatures":[{"sig":"MEYCIQD0rNPbPwzyiiHD7Qx1/F4xG5CFVMetqe/p0FIYmQLApQIhAO9fjbtnuRvukLo2DvG3hAIi9o1lCFVV5uAvEYG0SXQa","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":128032},"main":"./lib/tiny.js","type":"module","types":"./lib/tiny.d.ts","module":"./lib/tiny.js","exports":{".":"./lib/tiny.js"},"gitHead":"bb2047190a78270cbd5393784be558f1635fb874","scripts":{"test":"npm run test:bundle && node --experimental-vm-modules node_modules/jest/bin/jest.js lib/tiny.test.js","build":"npm run types && npm run build:bundle && npm run build:types","types":"tsc --declaration --emitDeclarationOnly --outDir types","build:types":"rollup -c scripts/types.js","test:bundle":"rollup -c scripts/test.js --environment NODE_ENV:production","build:bundle":"rollup -c scripts/build.js --environment NODE_ENV:production"},"_npmUser":{"name":"jacklee00084","email":"JackLee00084@outlook.com"},"repository":{"url":"git+https://github.com/jnxey/tiny.git","type":"git"},"_npmVersion":"9.6.7","description":"A simple node service framework","directories":{},"_nodeVersion":"18.17.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","axios":"^1.7.9","tslib":"^2.6.2","rollup":"^4.28.1","ts-node":"^10.9.2","prettier":"^3.2.5","formidable":"^3.5.2","typescript":"^5.4.5","@types/jest":"^29.5.14","@babel/preset-env":"^7.26.0","rollup-plugin-dts":"^6.1.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-alias":"^5.1.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.1","rollup-plugin-visualizer":"^5.12.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.3.0","@babel/plugin-proposal-decorators":"^7.25.9"},"_npmOperationalInternal":{"tmp":"tmp/node-tiny_1.1.11_1734867690621_0.8359178824617353","host":"s3://npm-registry-packages-npm-production"}},"1.1.12":{"name":"node-tiny","version":"1.1.12","author":{"name":"jnxey"},"license":"ISC","_id":"node-tiny@1.1.12","maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"homepage":"https://github.com/jnxey/tiny#readme","bugs":{"url":"https://github.com/jnxey/tiny/issues"},"dist":{"shasum":"d482b460a50bfb6b4d2775622a527a96326cf8e9","tarball":"https://registry.npmjs.org/node-tiny/-/node-tiny-1.1.12.tgz","fileCount":6,"integrity":"sha512-iA3w3S3o55+NazyodQqeS3xulHcEPrlPeLTNWXhS4nM7N4ANgPDN1oViCFuMksOcmopwlE8oRGQxCehDovZ89w==","signatures":[{"sig":"MEUCIQCTiuxhT5W4m8TCMcp2z10Y/FmpZ/a5cm8CxWQ30LVQ0QIgeC+PGUgS9VwA5YTi4KecHwoFPEwd4jj4lMs2wPski0c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":128242},"main":"./lib/tiny.js","type":"module","types":"./lib/tiny.d.ts","module":"./lib/tiny.js","exports":{".":"./lib/tiny.js"},"gitHead":"56c9a644922d7b4afdd493da8547799c40517b09","scripts":{"test":"npm run test:bundle && node --experimental-vm-modules node_modules/jest/bin/jest.js lib/tiny.test.js","build":"npm run types && npm run build:bundle && npm run build:types","types":"tsc --declaration --emitDeclarationOnly --outDir types","build:types":"rollup -c scripts/types.js","test:bundle":"rollup -c scripts/test.js --environment NODE_ENV:production","build:bundle":"rollup -c scripts/build.js --environment NODE_ENV:production"},"_npmUser":{"name":"jacklee00084","email":"JackLee00084@outlook.com"},"repository":{"url":"git+https://github.com/jnxey/tiny.git","type":"git"},"_npmVersion":"9.6.7","description":"A simple node service framework","directories":{},"_nodeVersion":"18.17.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","axios":"^1.7.9","tslib":"^2.6.2","rollup":"^4.28.1","ts-node":"^10.9.2","prettier":"^3.2.5","formidable":"^3.5.2","typescript":"^5.4.5","@types/jest":"^29.5.14","@babel/preset-env":"^7.26.0","rollup-plugin-dts":"^6.1.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-alias":"^5.1.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.1","rollup-plugin-visualizer":"^5.12.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.3.0","@babel/plugin-proposal-decorators":"^7.25.9"},"_npmOperationalInternal":{"tmp":"tmp/node-tiny_1.1.12_1734867882740_0.8782677705729331","host":"s3://npm-registry-packages-npm-production"}},"1.1.13":{"name":"node-tiny","version":"1.1.13","author":{"name":"jnxey"},"license":"ISC","_id":"node-tiny@1.1.13","maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"homepage":"https://github.com/jnxey/tiny#readme","bugs":{"url":"https://github.com/jnxey/tiny/issues"},"dist":{"shasum":"4d80e23171e7d1dd359fbe7db8685a6b84391c41","tarball":"https://registry.npmjs.org/node-tiny/-/node-tiny-1.1.13.tgz","fileCount":6,"integrity":"sha512-CDQTY4Axps6khn7XzV4mgPTM1Zcm1BkAX/CANKOQA4NUHsQTTtNQn+bDQW5OdQOht0ZkuoC0qs/PGKjWQ9zVQw==","signatures":[{"sig":"MEQCIBffROJTVtmEv3oyXOXky94QqkZqFgSzCev9jSWU98GjAiAsRxmKU+GBNnt7twmGFL+8WapNgwbGlbgBHHqTVs2jKw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":127994},"main":"./lib/tiny.js","type":"module","types":"./lib/tiny.d.ts","module":"./lib/tiny.js","exports":{".":"./lib/tiny.js"},"gitHead":"2889668bfe0e199dd5489c2f2e3514810c3dde35","scripts":{"test":"npm run test:bundle && node --experimental-vm-modules node_modules/jest/bin/jest.js lib/tiny.test.js","build":"npm run types && npm run build:bundle && npm run build:types","types":"tsc --declaration --emitDeclarationOnly --outDir types","build:types":"rollup -c scripts/types.js","test:bundle":"rollup -c scripts/test.js --environment NODE_ENV:production","build:bundle":"rollup -c scripts/build.js --environment NODE_ENV:production"},"_npmUser":{"name":"jacklee00084","email":"JackLee00084@outlook.com"},"repository":{"url":"git+https://github.com/jnxey/tiny.git","type":"git"},"_npmVersion":"9.6.7","description":"A simple node service framework","directories":{},"_nodeVersion":"18.17.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","axios":"^1.7.9","tslib":"^2.6.2","rollup":"^4.28.1","ts-node":"^10.9.2","prettier":"^3.2.5","formidable":"^3.5.2","typescript":"^5.4.5","@types/jest":"^29.5.14","@babel/preset-env":"^7.26.0","rollup-plugin-dts":"^6.1.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-alias":"^5.1.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.1","rollup-plugin-visualizer":"^5.12.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.3.0","@babel/plugin-proposal-decorators":"^7.25.9"},"_npmOperationalInternal":{"tmp":"tmp/node-tiny_1.1.13_1734869446172_0.6802411386280152","host":"s3://npm-registry-packages-npm-production"}},"1.1.14":{"name":"node-tiny","version":"1.1.14","author":{"name":"jnxey"},"license":"ISC","_id":"node-tiny@1.1.14","maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"homepage":"https://github.com/jnxey/tiny#readme","bugs":{"url":"https://github.com/jnxey/tiny/issues"},"dist":{"shasum":"5830428a8bf446872ec1c2b3465b19f2051b4c96","tarball":"https://registry.npmjs.org/node-tiny/-/node-tiny-1.1.14.tgz","fileCount":6,"integrity":"sha512-bXSoJIAogDBVqSqusGklepj5MJ36vi6kZv8trurHcrqonUp84ivSTZTCPyG3nZIV3VSsjqQPsYA+4jryzNU3zw==","signatures":[{"sig":"MEYCIQCE8QrklGUDmx/h8EjPUloy3zSaAFNDLwozO+q8QyEkfQIhAN2e8lrVuEKIyHOhaw1PLIwkKKJyrZlTgtZZhhzYF0SG","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":127955},"main":"./lib/tiny.js","type":"module","types":"./lib/tiny.d.ts","module":"./lib/tiny.js","exports":{".":"./lib/tiny.js"},"gitHead":"d62bebad9303a642bd7c27a3aa9019f177e67a7f","scripts":{"test":"npm run test:bundle && node --experimental-vm-modules node_modules/jest/bin/jest.js lib/tiny.test.js","build":"npm run types && npm run build:bundle && npm run build:types","types":"tsc --declaration --emitDeclarationOnly --outDir types","build:types":"rollup -c scripts/types.js","test:bundle":"rollup -c scripts/test.js --environment NODE_ENV:production","build:bundle":"rollup -c scripts/build.js --environment NODE_ENV:production"},"_npmUser":{"name":"jacklee00084","email":"JackLee00084@outlook.com"},"repository":{"url":"git+https://github.com/jnxey/tiny.git","type":"git"},"_npmVersion":"9.6.7","description":"A simple node service framework","directories":{},"_nodeVersion":"18.17.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","axios":"^1.7.9","tslib":"^2.6.2","rollup":"^4.28.1","ts-node":"^10.9.2","prettier":"^3.2.5","formidable":"^3.5.2","typescript":"^5.4.5","@types/jest":"^29.5.14","@babel/preset-env":"^7.26.0","rollup-plugin-dts":"^6.1.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-alias":"^5.1.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.1","rollup-plugin-visualizer":"^5.12.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.3.0","@babel/plugin-proposal-decorators":"^7.25.9"},"_npmOperationalInternal":{"tmp":"tmp/node-tiny_1.1.14_1734870584827_0.5501778570850935","host":"s3://npm-registry-packages-npm-production"}},"1.1.15":{"name":"node-tiny","version":"1.1.15","author":{"name":"jnxey"},"license":"ISC","_id":"node-tiny@1.1.15","maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"homepage":"https://github.com/jnxey/tiny#readme","bugs":{"url":"https://github.com/jnxey/tiny/issues"},"dist":{"shasum":"04cad40d01204ce1f05d9895432eeb4f275d9a5e","tarball":"https://registry.npmjs.org/node-tiny/-/node-tiny-1.1.15.tgz","fileCount":6,"integrity":"sha512-lwAnXEO3xSDOr4065wJd2D6JqbKMjW19KtSwLi2yrYfEe+DP9C36b9o8n/ZKfvO6xxItlp/JDyAFQbv9fLggSw==","signatures":[{"sig":"MEYCIQDaa2LvmB4v8FYHroJXkpAfHbRSYjYHNLjm2xv5DELQUAIhAKSWPrFEEFUMzwts3/DDIGBlKR87Ci8JB4Ic39QaPjyk","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":127955},"main":"./lib/tiny.js","type":"module","types":"./lib/tiny.d.ts","module":"./lib/tiny.js","exports":{".":"./lib/tiny.js"},"gitHead":"224e7e41bddcff546c523e3b0d093b4b3f3b363c","scripts":{"test":"npm run test:bundle && node --experimental-vm-modules node_modules/jest/bin/jest.js lib/tiny.test.js","build":"npm run types && npm run build:bundle && npm run build:types","types":"tsc --declaration --emitDeclarationOnly --outDir types","build:types":"rollup -c scripts/types.js","test:bundle":"rollup -c scripts/test.js --environment NODE_ENV:production","build:bundle":"rollup -c scripts/build.js --environment NODE_ENV:production"},"_npmUser":{"name":"jacklee00084","email":"JackLee00084@outlook.com"},"repository":{"url":"git+https://github.com/jnxey/tiny.git","type":"git"},"_npmVersion":"9.6.7","description":"A simple node service framework","directories":{},"_nodeVersion":"18.17.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","axios":"^1.7.9","tslib":"^2.6.2","rollup":"^4.28.1","ts-node":"^10.9.2","prettier":"^3.2.5","formidable":"^3.5.2","typescript":"^5.4.5","@types/jest":"^29.5.14","@babel/preset-env":"^7.26.0","rollup-plugin-dts":"^6.1.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-alias":"^5.1.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.1","rollup-plugin-visualizer":"^5.12.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.3.0","@babel/plugin-proposal-decorators":"^7.25.9"},"_npmOperationalInternal":{"tmp":"tmp/node-tiny_1.1.15_1734870741360_0.8791767248918574","host":"s3://npm-registry-packages-npm-production"}},"1.1.16":{"name":"node-tiny","version":"1.1.16","author":{"name":"jnxey"},"license":"ISC","_id":"node-tiny@1.1.16","maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"homepage":"https://github.com/jnxey/tiny#readme","bugs":{"url":"https://github.com/jnxey/tiny/issues"},"dist":{"shasum":"83037991719a364ce6c8cf6c48170db666d333bb","tarball":"https://registry.npmjs.org/node-tiny/-/node-tiny-1.1.16.tgz","fileCount":6,"integrity":"sha512-tmt1XqL+kryd3/ycPS5Xg5K3dW1gl68AKWDc8CHZ8A5A481EsCIPPsDivgIWqYPD4QSghkqN0IZS+4FXCPxiuA==","signatures":[{"sig":"MEUCIQDR0cweCy2MnUJqIfjwpTc5THP2wXMy6EGQBhgzjS7kXQIgbgWy+OpS30Ia4fke9bxbeQLC5uan2YKkhovLwX4EVFY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":127947},"main":"./lib/tiny.js","type":"module","types":"./lib/tiny.d.ts","module":"./lib/tiny.js","exports":{".":"./lib/tiny.js"},"gitHead":"284528e79c3aaf0ec70342b6b2a798cc1adabefe","scripts":{"test":"npm run test:bundle && node --experimental-vm-modules node_modules/jest/bin/jest.js lib/tiny.test.js","build":"npm run types && npm run build:bundle && npm run build:types","types":"tsc --declaration --emitDeclarationOnly --outDir types","build:types":"rollup -c scripts/types.js","test:bundle":"rollup -c scripts/test.js --environment NODE_ENV:production","build:bundle":"rollup -c scripts/build.js --environment NODE_ENV:production"},"_npmUser":{"name":"jacklee00084","email":"JackLee00084@outlook.com"},"repository":{"url":"git+https://github.com/jnxey/tiny.git","type":"git"},"_npmVersion":"9.6.7","description":"A simple node service framework","directories":{},"_nodeVersion":"18.17.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","axios":"^1.7.9","tslib":"^2.6.2","rollup":"^4.28.1","ts-node":"^10.9.2","prettier":"^3.2.5","formidable":"^3.5.2","typescript":"^5.4.5","@types/jest":"^29.5.14","@babel/preset-env":"^7.26.0","rollup-plugin-dts":"^6.1.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-alias":"^5.1.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.1","rollup-plugin-visualizer":"^5.12.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.3.0","@babel/plugin-proposal-decorators":"^7.25.9"},"_npmOperationalInternal":{"tmp":"tmp/node-tiny_1.1.16_1734870900055_0.37700861629811877","host":"s3://npm-registry-packages-npm-production"}},"1.1.17":{"name":"node-tiny","version":"1.1.17","author":{"name":"jnxey"},"license":"ISC","_id":"node-tiny@1.1.17","maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"homepage":"https://github.com/jnxey/tiny#readme","bugs":{"url":"https://github.com/jnxey/tiny/issues"},"dist":{"shasum":"574a1e6ae2a0bd0967f61fda7e291a88a709aac6","tarball":"https://registry.npmjs.org/node-tiny/-/node-tiny-1.1.17.tgz","fileCount":6,"integrity":"sha512-FFzAFLS96fJD4tpB33LLtHhaOEVjtS4SnWAKe2fjxQ9Lh8WSz2mNaSkC7GyYlMxQSUdtOhmD/KAgvwxHIfMDnA==","signatures":[{"sig":"MEUCIQDOrPcN3ypM3GtA6+2Nm1BYORiDLwP2Oi05BFB2EuXWOgIgGK9oQB3W9m7j7HBVsRFCB/LeXKjEq459ShhDCLBonzI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":127406},"main":"./lib/tiny.js","type":"module","types":"./lib/tiny.d.ts","module":"./lib/tiny.js","exports":{".":"./lib/tiny.js"},"gitHead":"73696a5fb68e77917368c896e06f8a931778ec2c","scripts":{"test":"npm run test:bundle && node --experimental-vm-modules node_modules/jest/bin/jest.js lib/tiny.test.js","build":"npm run types && npm run build:bundle && npm run build:types","types":"tsc --declaration --emitDeclarationOnly --outDir types","build:types":"rollup -c scripts/types.js","test:bundle":"rollup -c scripts/test.js --environment NODE_ENV:production","build:bundle":"rollup -c scripts/build.js --environment NODE_ENV:production"},"_npmUser":{"name":"jacklee00084","email":"JackLee00084@outlook.com"},"repository":{"url":"git+https://github.com/jnxey/tiny.git","type":"git"},"_npmVersion":"9.6.7","description":"A simple node service framework","directories":{},"_nodeVersion":"18.17.1","dependencies":{},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","axios":"^1.7.9","tslib":"^2.6.2","rollup":"^4.28.1","ts-node":"^10.9.2","prettier":"^3.2.5","formidable":"^3.5.2","typescript":"^5.4.5","@types/jest":"^29.5.14","@babel/preset-env":"^7.26.0","rollup-plugin-dts":"^6.1.0","@rollup/plugin-json":"^6.1.0","@rollup/plugin-alias":"^5.1.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.1","rollup-plugin-visualizer":"^5.12.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.3.0","@babel/plugin-proposal-decorators":"^7.25.9"},"_npmOperationalInternal":{"tmp":"tmp/node-tiny_1.1.17_1735136054317_0.9718414685782344","host":"s3://npm-registry-packages-npm-production"}},"1.1.18":{"name":"node-tiny","version":"1.1.18","description":"A simple node service framework","main":"./lib/tiny.js","module":"./lib/tiny.js","type":"module","types":"./lib/tiny.d.ts","exports":{".":"./lib/tiny.js"},"scripts":{"types":"tsc --declaration --emitDeclarationOnly --outDir types","build":"npm run types && npm run build:bundle && npm run build:types","build:bundle":"rollup -c scripts/build.js --environment NODE_ENV:production","build:types":"rollup -c scripts/types.js","test:bundle":"rollup -c scripts/test.js --environment NODE_ENV:production","test":"npm run test:bundle && node --experimental-vm-modules node_modules/jest/bin/jest.js lib/tiny.test.js"},"repository":{"type":"git","url":"git+https://github.com/jnxey/tiny.git"},"author":{"name":"jnxey"},"license":"ISC","bugs":{"url":"https://github.com/jnxey/tiny/issues"},"homepage":"https://github.com/jnxey/tiny#readme","devDependencies":{"@babel/plugin-proposal-decorators":"^7.25.9","@babel/preset-env":"^7.26.0","@rollup/plugin-alias":"^5.1.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^28.0.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-node-resolve":"^15.3.0","@rollup/plugin-typescript":"^11.1.6","@types/jest":"^29.5.14","axios":"^1.7.9","formidable":"^3.5.2","jest":"^29.7.0","prettier":"^3.2.5","rollup":"^4.28.1","rollup-plugin-dts":"^6.1.0","rollup-plugin-visualizer":"^5.12.0","ts-node":"^10.9.2","tslib":"^2.6.2","typescript":"^5.4.5"},"dependencies":{},"gitHead":"116bf417d15485fe30bee8b9056921f86aade45c","_id":"node-tiny@1.1.18","_nodeVersion":"18.17.1","_npmVersion":"9.6.7","dist":{"integrity":"sha512-yJWWJJNw27yC7FUehHcdl6Cu/d7jAVimgcIU2WzOuQMimr86nSDkTqMqAq//rrJv16UDHa021ovZwq7pqLgeZg==","shasum":"cefe6aaee75a55e85d993dc68d63d974669be366","tarball":"https://registry.npmjs.org/node-tiny/-/node-tiny-1.1.18.tgz","fileCount":6,"unpackedSize":127274,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB77O3T6wd70s7nlVO2qJZhKu137m2RQMccHn2JIC06CAiEAnMqxXlcgMT4olMcGErZb07TiE1tmg4CXlLCw9UuIU5I="}]},"_npmUser":{"name":"jacklee00084","email":"JackLee00084@outlook.com"},"directories":{},"maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/node-tiny_1.1.18_1735141176526_0.46582190969701043"},"_hasShrinkwrap":false}},"time":{"created":"2024-12-16T13:42:55.389Z","modified":"2024-12-25T15:39:36.976Z","1.1.1":"2024-12-16T13:42:55.603Z","1.1.2":"2024-12-16T17:09:04.466Z","1.1.3":"2024-12-17T13:20:33.010Z","1.1.4":"2024-12-17T14:36:56.270Z","1.1.5":"2024-12-20T14:47:44.044Z","1.1.6":"2024-12-20T14:52:22.828Z","1.1.7":"2024-12-20T14:57:40.847Z","1.1.8":"2024-12-20T15:03:41.121Z","1.1.9":"2024-12-22T11:31:18.062Z","1.1.10":"2024-12-22T11:35:46.866Z","1.1.11":"2024-12-22T11:41:30.814Z","1.1.12":"2024-12-22T11:44:42.931Z","1.1.13":"2024-12-22T12:10:46.433Z","1.1.14":"2024-12-22T12:29:45.016Z","1.1.15":"2024-12-22T12:32:21.541Z","1.1.16":"2024-12-22T12:35:00.262Z","1.1.17":"2024-12-25T14:14:14.565Z","1.1.18":"2024-12-25T15:39:36.765Z"},"bugs":{"url":"https://github.com/jnxey/tiny/issues"},"author":{"name":"jnxey"},"license":"ISC","homepage":"https://github.com/jnxey/tiny#readme","repository":{"type":"git","url":"git+https://github.com/jnxey/tiny.git"},"description":"A simple node service framework","maintainers":[{"name":"jacklee00084","email":"JackLee00084@outlook.com"}],"readme":"# Tiny\n\n## Introduce\n\n* [简体中文](https://github.com/jnxey/tiny/blob/main/README_zh-CN.md)\n\n* Tiny is a simple server-side framework based on `Node+Typescript`. Its core code is very small and provides many interesting classes and decorators to help you save time configuring routes, validating parameters, setting up `Jwt`, writing `API` documentation, and other additional features.\n\n* Tiny was born out of the problem of asynchronous code confusion that is prone to occur during Node development. Unlike other frameworks, it restricts the use of asynchronous middleware. It is usually recommended to only use the `@Middleware` decorator on the controller method for setting. Its advantage is that it will not make the asynchronous code too confusing, but its disadvantage is that it is not flexible enough.\n\n* It is usually recommended to use async only when it comes to `@Middleware`, `@Jwt`, and `tiny.run` execution. Tiny has built-in corresponding error handling. If async is used elsewhere, the errors need to be handled by yourself.\n\n## Environment\n\n![NODE Version][node-image]\n![NPM Version][npm-image]\n\n[node-image]: https://camo.githubusercontent.com/4cef9791aaa5dd6100e2361cd25eeef3beb77b0d879702349fa4ac78211bcb7e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6e6f64652d25323025334525334425323031382d343763323139\n[npm-image]: https://camo.githubusercontent.com/b133c2aa426b98acd72f5aa52d309ba036a825616acf8994f1f2e115dbffe965/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f6d7174742e7376673f6c6f676f3d6e706d\n\n## Directory\n\n- [Introduce](#Introduce)\n- [Environment](#Environment)\n- [Directory](#Directory)\n- [Install](#Install)\n- [Use](#Use)\n- [API Description](#API-Description)\n  - [CreateApp](#CreateApp)\n  - [Context](#Context)\n  - [Controller](#Controller)\n    - [Controller](#Controller)\n    - [Get](#Get)\n    - [Delete](#Delete)\n    - [Post](#Post)\n    - [Put](#Put)\n    - [Patch](#Patch)\n    - [Type](#Type)\n    - [Middleware](#Middleware)\n    - [Mapping](#Mapping)\n    - [Summary](#Summary)\n  - [Router](#Router)\n  - [Model](#Model)\n    - [Model](#Model)\n    - [Declare](#Declare)\n    - [Required](#Required)\n    - [TypeCheck](#TypeCheck)\n    - [ArrayCheck](#ArrayCheck)\n    - [StringLength](#StringLength)\n    - [TypeCustom](#TypeCustom)\n  - [Params](#Params)\n  - [Jwt](#Jwt)\n    - [Jwt](#Jwt)\n    - [Protected](#Protected)\n  - [Dto](#Dto)\n    - [Dto](#Dto)\n  - [Values](#Values)\n    - [MethodType](#MethodType)\n    - [DataType](#DataType)\n    - [ParamsSource](#ParamsSource)\n    - [ParamsType](#ParamsType)\n    - [StatusCode](#StatusCode)\n- [Other](#Other)\n\n## Install\n\n* Before installing, download and install Node.js. Node.js V18.0.0 or later is required.\n\n### Creating a Tiny Application\n\n* To create a Tiny-based project, you can use the project template provided by Tiny. This template sets up a simple project structure for your reference.\n\n```shell\nnpm create node-tiny <project-name>\n```\n\n### Installing Tiny in an existing project\n\n```shell\nnpm install --save node-tiny\n```\n\n### View current API information\n* If you use the Tiny template to build your project, you can visit the `/doc.html` address to view the simplest API information.\n\n## Use\n\n### First-time usage example\n\n* File `index.ts`\n```typescript\nimport Tiny from 'node-tiny';\nimport { Manager } from '@/controller/manager';\n\nconst { CreateApp, Router } = Tiny;\n\nconst tiny = new CreateApp();\nconst router = new Router();\n\nrouter.config({ prefix: '/api' });\nrouter.register(new Manager());\n\ntiny.listen(4000);\n```\n* File `@/controller/manager.ts`\n```typescript\nimport Tiny from 'node-tiny';\nconst { Controller, Summary, Dto, StatusCode, Get } = Tiny;\n\nexport class Manager extends Controller {\n  @Get()\n  @Summary('This is a summary')\n  public async index(context) {\n    context.send(StatusCode.success, new Dto({ code: StatusCode.success, result: 'hello word', msg: 'success' }));\n  }\n}\n```\n\n## API Description\n\n## CreateApp\n\n* Use `Tiny.CreateApp` to create a Tiny application\n```typescript\nconst tiny = new CreateApp();\n```\n* Use `tiny.run` to set the program running content, receiving a request context [Context](#Context) parameter, which is usually configured before `tiny.listen`\n```typescript\ntiny.run = async (context) => {\n  router.work(context);\n}\n```\n\n* Use `tiny.error` to monitor program execution errors, use `context.error` to trigger the execution of `tiny.error`\n```typescript\ntiny.error = (err) => {\n  // ToDo\n}\n```\n* Use `tiny.errorCode` and `tiny.errorMsg` to configure the error message, the default is `500` and `Internal Server Error`\n```typescript\ntiny.errorCode = 500\ntiny.errorMsg = 'Internal Server Error'\n```\n\n## Context\n\n* `Context` stores the context information of the entire request, as well as other customized information. The following is the calling process inside `tiny.listen`\n```typescript\n  function listen(...args): Server {\n    const server = http.createServer(async (req: IncomingMessage, res: ServerResponse) => {\n      try {\n        const context = new Context(req, res);\n        this.run(context);\n      } catch (e: FunctionError) {\n        // ...\n      }\n    });\n    return server.listen(...args);\n  }\n```\n\n* `context.req:IncomingMessage`, Request information\n\n* `context.res:ServerResponse`, Response information\n\n* `context.query:ContextQuery`, Request query parameters and path parameters, which also means that the two parameters cannot have the same name. This has been implemented in `router.work` and can be used directly\n```typescript\ntype ContextQuery = object | null | undefined;\n```\n\n* `context.body:ContextBody`, the parameters saved in the body, Tiny does not have a built-in body parsing, you can use a third-party library to parse it in the `tiny.run` method\n```typescript\ntype ContextBody = object | string | null | undefined;\n```\n\n* `context.params:ContextParams`, the parameters verified by `@Tiny.Param.in` will be automatically filled in and can be used directly\n```typescript\ntype ContextParams = object | null | undefined;\n```\n\n* `context.payload:ContextPayload`, the information verified by `Tiny.Jwt` will be automatically filled in after using the `@Protected` decorator and can be used directly\n```typescript\ntype ContextPayload = object | string | null | undefined;\n```\n\n* `context.payload:ContextFiles`, expandable file information, not set inside `Tiny`, after using the `@Protected` decorator, it will be automatically filled in and can be used directly\n```typescript\ntype ContextFiles = any[] | null | undefined;\n```\n\n* `context.extend:ContextExtend`, other information that can be expanded\n```typescript\ntype ContextExtend = object;\n```\n\n* `context.cookie:CookieManager`, cookie management tool, can be used directly\n```typescript\ninterface CookieManager {\n  // Get a cookie by name\n  get(name: string): string | undefined;\n  // Setting a cookie\n  set(name: string, value: string, options: CookieOptions = {}): void;\n  // Deleting a cookie\n  delete(name: string, options: CookieOptions = {}): void\n}\n```\n\n* `context.error:Function`, Errors during execution can be thrown to `tiny.error` for processing\n\n* `context.send<T = Dto>(code: number, data: T, type?: DataType)`, send request information\n```typescript\ncontext.send(StatusCode.success, new Dto({ code: StatusCode.success, result: 'hello word', msg: 'success' }));\n```\n\n* `context.setQuery(query: ContextQuery)`, set the address parameter information, which has been implemented in router.work and can be used directly\n\n* `context.setBody(body: ContextBody)`, set body parameter information, Tiny does not have built-in body parsing, use a third-party library for parsing in the tiny.run method\n```typescript\ntiny.run = async (context) => {\n  await bodyHandler(context); // Third-party body parsing library\n  router.work(context);\n};\n```\n\n* `context.setParams(params: ContextParams)`, set the validation parameter information, after using the `Params.in` decorator, it will be automatically filled in and can be used directly\n```typescript\nclass Manager extends Controller {\n  @Post()\n  @Type()\n  @Params.in(HomeIndexInput, ParamsSource.body)\n  getParams(context) {\n    context.send(StatusCode.success, new Dto({ code: StatusCode.success, result: context.params, msg: 'success' }));\n  }\n}\n```\n\n* `context.setPayload(payload: ContextPayload)`, set the Jwt verification information, after using the `@Protected` decorator, it will be automatically filled in and can be used directly\n\n```typescript\nclass Manager extends Controller {\n  @Post()\n  @Type()\n  @Protected()\n  jwtVerify(context) {\n    context.send(StatusCode.success, new Dto({code: StatusCode.success, result: context.payload, msg: 'success'}));\n  }\n}\n```\n\n* `context.setFiles(files: ContextFiles)`, set file information\n\n* `context.setExtend<T>(name: string, value: T)`, set extended information\n\n### Controller\n\n#### Controller\n* All controllers should inherit from the `Controller` class\n```typescript\nimport Tiny from 'node-tiny';\nconst { Controller, Summary, Dto, StatusCode, Get } = Tiny;\n\nexport class Manager extends Controller {\n  @Get()\n  @Summary('This is a summary')\n  public async index(context) {\n    context.send(StatusCode.success, new Dto({ code: StatusCode.success, result: 'hello word', msg: 'success' }));\n  }\n}\n```\n\n#### Get\n\n* Use the `@Get()` decorator to declare a Get method\n```typescript\nimport Tiny from 'node-tiny';\nexport class Manager extends Controller {\n  @Tiny.Get()\n  public async index(context) {\n    // ...\n  }\n}\n```\n\n#### Delete\n\n* Use the `@Delete()` decorator to declare a Delete method\n```typescript\nimport Tiny from 'node-tiny';\nexport class Manager extends Controller {\n  @Tiny.Delete()\n  public async index(context) {\n    // ...\n  }\n}\n```\n\n#### Post\n\n* Use the `@Post()` decorator to declare a Post method\n```typescript\nimport Tiny from 'node-tiny';\nexport class Manager extends Controller {\n  @Tiny.Post()\n  public async index(context) {\n    // ...\n  }\n}\n```\n\n#### Put\n\n* Use the `@Put()` decorator to declare a Put method\n```typescript\nimport Tiny from 'node-tiny';\nexport class Manager extends Controller {\n  @Tiny.Put()\n  public async index(context) {\n    // ...\n  }\n}\n```\n\n#### Patch\n\n* Use the `@Patch()` decorator to declare a Patch method\n```typescript\nimport Tiny from 'node-tiny';\nexport class Manager extends Controller {\n  @Tiny.Patch()\n  public async index(context) {\n    // ...\n  }\n}\n```\n\n#### Type\n\n* Use `@Type(requestType?: DataType, responseType?: DataType)` to declare the request/response content type, which defaults to the `DataType.json` type\n\n```typescript\nimport Tiny from 'node-tiny';\n\nexport class Manager extends Controller {\n  @Tiny.Patch()\n  @Tiny.Type(DataType.formData, DataType.formData)\n  public async index(context) {\n    // ...\n  }\n}\n```\n\n#### Middleware\n\n* Use `@Middleware(handler: ContextAsyncHandler)` to set middleware for the controller\n```typescript\nimport Tiny from 'node-tiny';\nfunction execMiddleware(context, next) {\n  if(context.extend.a) {\n    context.send(StatusCode.success, new Dto({ code: StatusCode.success, result: 'middleware', msg: 'success' }));\n  } else {\n    next();\n  }\n}\n\nexport class Manager extends Controller {\n  @Tiny.Patch()\n  @Tiny.Middleware(execMiddleware)\n  public async index(context) {\n    // ...\n  }\n}\n```\n\n#### Mapping\n\n* Use the `@Mapping(path: string)` decorator to reset the routing address\n```typescript\nimport Tiny from 'node-tiny';\nexport class Manager extends Controller {\n  @Tiny.Patch()\n  @Mapping('/manager/test/:id')\n  public async index(context) {\n    // ...\n  }\n}\n```\n\n#### Summary\n\n* Use the `@Summary(summary?: string, describe?: string)` decorator to set the description document for the method\n```typescript\nimport Tiny from 'node-tiny';\nexport class Manager extends Controller {\n  @Tiny.Patch()\n  @Summary('Test Method')\n  public async index(context) {\n    // ...\n  }\n}\n```\n\n## Router\n\n* Use `Router` to create a router instance\n\n```typescript\nconst router = new Router()\n```\n\n* `router.options:ConnectOptions` is the routing configuration item\n```typescript\ntype ConnectOptions = {\n  prefix?: string;\n  format?: boolean;\n};\n```\n\n* `router.apiJSON:RouterApiJson[]` is the api configuration JSON information, which can be used to generate API documentation\n```typescript\ntype RouterApiJson = {\n  module: string;\n  describe?: string;\n  func: string;\n  path: string;\n  method: string;\n  requestType?: string;\n  responseType?: string;\n  summary?: string;\n  paramsModel?: object;\n  resultModel?: object;\n};\n```\n\n* `router.routes:RoutesList` is the configured route list\n```typescript\ntype RouteItem = { path: string; method: MethodType; handler: Function };\ntype RouteValue = {\n  REG: RouteItem[];\n  [path: string]: RouteItem | RouteItem[];\n};\ntype RoutesList = {\n  GET: RouteValue;\n  POST: RouteValue;\n  PUT: RouteValue;\n  PATCH: RouteValue;\n  DELETE: RouteValue;\n};\n```\n\n* `router.config(options: ConnectOptions)`Set routing configuration items\n\n* `router.notFound(context: ContextBase)`The route is not found, triggering a 404 error\n\n* `router.work(context: ContextBase)`Routing starts\n\n* `router.register(controller: Controller)`Registering Routes\n```typescript\nrouter.register(new Manager());\n```\n\n## Model\n\n#### Model\n\n* Use `model<Model>.fill(map: object)` to fill the data model\n```typescript\nclass LoginInput extends Model {\n  @Declare()\n  name!: string;\n\n  @Declare()\n  password!: string;\n}\n\nconst input = new LoginInput();\nconst result: ModelResult = input.fill({...});\nif(result.valid) {\n  // ...\n}\n```\n\n* Use `model<Model>.getConfigCache` to get the current model configuration\n```typescript\nnew LoginInput().getConfigCache();\n```\n\n##### ModelResult\n\n* Use `new ModelResult(valid: boolean, message?: string, value?: any)` to set the model validation result\n\n#### Declare\n\n* Use the `@Declare(description?: string)` decorator to declare parameters. Note: Model parameters must use at least `Declare`\n```typescript\nclass LoginInput extends Model {\n  @Declare()\n  name!: string;\n}\n```\n\n#### Required\n\n* Use the `@Required(message?: string)` decorator to set the property to be required\n```typescript\nclass LoginInput extends Model {\n  @Declare()\n  @Required('The name cannot be empty')\n  name!: string;\n}\n```\n\n#### TypeCheck\n\n* Use the `@TypeCheck(type: ParamsType | T, message?: string)` decorator to set type checking\n```typescript\nclass LoginInput extends Model {\n  @Declare()\n  @TypeCheck(ParamsType.string, 'The name can only be a string')\n  name!: string;\n}\n```\n\n#### ArrayCheck\n\n* Use the `@ArrayCheck(type: ParamsType | T, message?: string, maxLength?: number, maxLengthMessage?: string)` decorator to set array type checking. The precondition is to set `TypeCheck` to `ParamsType.array`\n```typescript\nclass LoginInput extends Model {\n  @Declare()\n  @TypeCheck(ParamsType.array, 'Lists can only be arrays')\n  @ArrayCheck(ParamsType.string, 'The array content can only be strings')\n  list!: string[];\n}\n```\n\n#### StringLength\n\n* Use the `@StringLength(range: number[], message?: string)` decorator to set the string length check. The prerequisite is to set `TypeCheck` to `ParamsType.string`\n```typescript\nclass LoginInput extends Model {\n  @Declare()\n  @TypeCheck(ParamsType.string, 'The name can only be a string')\n  @StringLength([1,50], 'The name length can only be 1-50')\n  name!: string;\n}\n```\n\n#### TypeCustom\n\n* Use the `@TypeCustom<T>(valid: (value: T) => ModelResult)` decorator to set custom validation content and return a `ModelResult`\n```typescript\nclass LoginInput extends Model {\n  @Declare()\n  @TypeCustom((value) => {\n    if(value) {\n      // ...\n    }\n    return new Tiny.ModelResult(true,'', value);\n  })\n  name!: string;\n}\n```\n\n### Params\n\n#### Params\n\n* Use the `@Params.in<T extends Model>(params: { new (): T }, type: ParamsSource, validate: boolean = true)` decorator to set parameter validation\n```typescript\nimport Tiny from 'node-tiny';\nconst { Controller, Post, Params } = Tiny;\n\nclass LoginInput extends Model {\n  @Declare()\n  name!: string;\n\n  @Declare()\n  password!: string;\n}\n\nexport class Manager extends Controller {\n  @Post()\n  @Params.in(LoginInput, ParamsSource.body)\n  public async index(context) {\n    console.log(context.params.name)\n    console.log(context.params.password)\n    // ...\n  }\n}\n```\n* Use the `@Params.out<T extends Model>(result: { new (): T })` decorator to set the output parameter type\n```typescript\nimport Tiny from 'node-tiny';\nconst { Controller, Post, Params, Dto, StatusCode } = Tiny;\n\nclass LoginOut extends Model {\n  @Declare()\n  id!: string;\n\n  @Declare()\n  name!: string;\n}\n\nexport class Manager extends Controller {\n  @Post()\n  @Params.out(LoginOut)\n  public async index(context) {\n    // ...\n    const info = new LoginOut();\n    info.fill({...});\n    // ...\n  }\n}\n```\n\n### Jwt\n\n#### Jwt\n\n* Configure `Jwt.sign = <Payload = object>(context: ContextBase, payload: Payload) => string | null | undefined;`Generate token\n```typescript\nJwt.sign = (context, payload) => {\n  context.cookie.set('token', JSON.stringify(payload));\n  return JSON.stringify(payload);\n};\n```\n* Configure `Jwt.verify = (context: ContextBase, next: () => any) => any;` to verify the token\n```typescript\nJwt.verify = (context, next) => {\n  const token = context.cookie.get('token');\n  if (token) {\n    context.setPayload(getJSON(token));\n    next();\n  } else {\n    Jwt.refuse(context);\n  }\n}\n```\n* Configure `Jwt.refuse = (context: ContextBase) => any;` to handle verification failure. The default is as follows\n```typescript\nJwt.refuse = (context, next) => {\n  context.send(StatusCode.success, new Dto({ code: StatusCode.authError, msg: 'No permission to access temporarily', result: null }));\n}\n```\n\n#### Protected\n\n* Use the `@Protected()` decorator, the configured method will be `Jwt` verified\n```typescript\nimport Tiny  from 'node-tiny';\nconst { Controller, Post, Protected } = Tiny;\n\nexport class Manager extends Controller {\n  @Post()\n  @Protected()\n  public async index(context) {\n    console.log(context.payload)\n    // ...\n  }\n}\n```\n\n### Dto\n\n#### Dto\n\n* Use `new Dto({ code: number | string, result?: any, msg?: string })` to set the Response return code\n\n### Values\n\n#### MethodType\n\n* Method Type\n```typescript\nexport enum MethodType {\n  head = 'HEAD',\n  options = 'OPTIONS',\n  get = 'GET',\n  delete = 'DELETE',\n  post = 'POST',\n  put = 'PUT',\n  patch = 'PATCH'\n}\n```\n\n#### DataType\n\n* The data structure type of body\n```typescript\nexport enum DataType {\n  json = 'application/json',\n  text = 'text/plain',\n  html = 'text/html',\n  xml = 'text/xml',\n  formUrlencoded = 'application/x-www-form-urlencoded',\n  formData = 'multipart/form-data',\n  other = 'other'\n}\n```\n\n#### ParamsSource\n\n* Parameter source\n```typescript\nexport enum ParamsSource {\n  query = 'query',\n  body = 'body'\n}\n```\n\n#### ParamsType\n\n* Parameter Data Type\n```typescript\nexport enum ParamsType {\n  number = 'number',\n  boolean = 'boolean',\n  string = 'string',\n  array = 'array'\n}\n```\n\n#### StatusCode\n\n* Response Status Code\n```typescript\nexport const StatusCode = {\n  success: 200,\n  paramsError: 400,\n  authError: 401,\n  notFound: 404,\n  timeout: 408,\n  serveError: 500\n};\n```\n\n## Other\n\n\n","readmeFilename":"README.md"}