{"_id":"p-api-orm","_rev":"44-28ae6ff7520eec2f160ad636123f2ae6","name":"p-api-orm","dist-tags":{"latest":"1.2.24"},"versions":{"1.0.1":{"name":"p-api-orm","version":"1.0.1","author":"","license":"ISC","_id":"p-api-orm@1.0.1","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"33a5045434e998354683c014d84e3b6f1e955c73","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.0.1.tgz","fileCount":3,"integrity":"sha512-YRyPTkFGyd8K8RPJ87Kvf4PywSexGXm3Y2NJ4jTgEa6jZ0ZThAsOdZHftJBBVMBUZLS3b7fVtRMCVylBbm31ow==","signatures":[{"sig":"MEUCIQCyV3pnZP8lRxx+/ZFe/Rcq63Yb4KWhYK5xo0cnEb3fpwIgOTLe6OP+zxLOe6Bu3WRo1hA9kfa1WyXxs2igH6A91y4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50239},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"12f5893f584fd699c946fd53fb6231c93d51d2aa","scripts":{"build":"tsc && node scripts/obfuscate.js","publish":"npm version patch && npm publish"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"joi":"17.13.3","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.0.1_1744251807020_0.7664802438448339","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"p-api-orm","version":"1.0.2","author":"","license":"ISC","_id":"p-api-orm@1.0.2","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"aee549d14f0d5bfde9a3219095186b1f1892c789","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.0.2.tgz","fileCount":3,"integrity":"sha512-PlkJP9UGRcP3Gt/9KUlT33hCJdTjSEUqnhU8tej7vBUFjQauz+oVcCLBD2+LEs/x3l8kMuCd3iEKwLBrr7RQWg==","signatures":[{"sig":"MEUCIQC2oLe1QwW4UkWvZ1Oq52h8vcWD7tCOj3MbgJcu3NrfygIgM1DlYh1z4HRiutg3RTDqr00BmEq2fyUdfhoO3mpm7KY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50239},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"12f5893f584fd699c946fd53fb6231c93d51d2aa","scripts":{"build":"tsc && node scripts/obfuscate.js","publish":"npm version patch && npm publish"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"joi":"17.13.3","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.0.2_1744251812873_0.74301848900494","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"p-api-orm","version":"1.0.3","author":"","license":"ISC","_id":"p-api-orm@1.0.3","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"a73fccf1f2f9d8946512c2cc4c796c2f169a1c65","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.0.3.tgz","fileCount":3,"integrity":"sha512-3fFEJUjk6buCeuB8yewef5pyG3g4KAx9vTlmSNUKEL6N3g0u1mpYGoVuBJ7fzbWvaq3KWeUc0tI9rooqKVXlyg==","signatures":[{"sig":"MEYCIQDMemdoyxWlsCLzg1fHgi1tYm3o3G+xQLFAReYtvxP0IgIhAL7kOmXvFgu+3oAW1lF+nnX7CEFJOVUXPaDIfTU9jiw3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50239},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"12f5893f584fd699c946fd53fb6231c93d51d2aa","scripts":{"build":"tsc && node scripts/obfuscate.js","publish":"npm version patch && npm publish"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"joi":"17.13.3","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.0.3_1744251816378_0.36775035714596416","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"p-api-orm","version":"1.0.4","author":"","license":"ISC","_id":"p-api-orm@1.0.4","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"7675d4b423293d8e64e51ddf1e3f7f09e0361902","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.0.4.tgz","fileCount":3,"integrity":"sha512-f9D7/Jj//p/68Yjcpa0h1FFnsXvM0pXGZGUQkCe/kYkw/9ZH+rfve3t+S56IJ8BBxMwr6IfW9jQEp3rNevEhrA==","signatures":[{"sig":"MEYCIQD5+T9l/TcOHuwfTkNfpHh91VsjHUHQTKmCs4L/xkfdvQIhAOInNi5brkUCiBGRY6vGNHP2UK8oT2k/LzikdDLMsZAc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50239},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"12f5893f584fd699c946fd53fb6231c93d51d2aa","scripts":{"build":"tsc && node scripts/obfuscate.js","publish":"npm version patch && npm publish"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"joi":"17.13.3","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.0.4_1744251819983_0.5599941603660206","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"p-api-orm","version":"1.0.5","author":"","license":"ISC","_id":"p-api-orm@1.0.5","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"da6de65677ef40ab72098c97a337ceccb5e54df7","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.0.5.tgz","fileCount":3,"integrity":"sha512-PLmgQiFyOvhGDMiI+1VjgViszkxCzMynCEdqFxMkmWcWu9kLdXMYvOQaWAtTdMDmDsCQxKAoIubNPkMj2NzUUQ==","signatures":[{"sig":"MEQCIEChxDq+nD3TbnvgjLWBRGE5MoEqZkJjq1cDaHH6iPvfAiANp/k9wDMaLtiQN6T5IMFu6+pkELxPQ/MywTh6+SoPSg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26792},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"4c8ce3d7abd618a4492482e943028e6713b05156","scripts":{"build":"tsc"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"joi":"17.13.3","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.0.5_1744252581531_0.12542326859906772","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"p-api-orm","version":"1.0.7","author":"","license":"ISC","_id":"p-api-orm@1.0.7","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"a51ecc494599bb0a98be20699a3c9bd033b6fa6a","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.0.7.tgz","fileCount":3,"integrity":"sha512-4pUANLeh0WpvhLkPgB5ru/Y6xkEQNM5U1C+HQeYiU7ti2zUSMOQLbGbbg60V/BYc9UopO5BSs+Bl4QPoGSmeOA==","signatures":[{"sig":"MEUCIQDK7LRbvsK3T92FLz5ffTgErh3lqzEesVGsDp9SZe6YcgIgdp5AqzVufaNW02gZ0jpMvt1ahdVjNi3v0VoMrxJSD/o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26811},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","gitHead":"4c8ce3d7abd618a4492482e943028e6713b05156","scripts":{"build":"tsc"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"joi":"17.13.3","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.0.7_1744254580250_0.8826450761083962","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"p-api-orm","version":"1.0.8","author":"","license":"ISC","_id":"p-api-orm@1.0.8","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"0ae547f24502b3fae87f538ac1539b06d32faf53","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.0.8.tgz","fileCount":5,"integrity":"sha512-gaZnVM2+Jw4lx5MLZEkj47roJXpWq97uoxM/EByhtRtXYtYnnqFJwJIFFUfJiuqrXvx4PjY6D9vII+oZoDs6WQ==","signatures":[{"sig":"MEQCIGt2HH1xAKUJxrwC1S/sk7OO1qsABkyDQ+wma61SOzhaAiBPiJvRPVfXW3KEPcQfdW/40LgHBFwmbf2GFL+m5oT4sg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42031},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"4c8ce3d7abd618a4492482e943028e6713b05156","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"joi":"17.13.3","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.0.8_1744255542196_0.023135548753001167","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"p-api-orm","version":"1.0.9","author":"","license":"ISC","_id":"p-api-orm@1.0.9","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"556ceed159ad96ce95ff7d945b05a2cc51ac1ead","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.0.9.tgz","fileCount":5,"integrity":"sha512-ozABqpCUMXqs+Rx3u/wcRJ4VjKHdFUx9tuKR8P3yFgzlnAm0lW464r/bUI/2VJdwLvJ/hD5YV1rjyM2nzPka6g==","signatures":[{"sig":"MEUCIGLGlUXBcI3ITp0zFF3E7gRuoLDbnp/gvuskEN6LGBXfAiEAgNwBIZ/7pAccddQ27jBPZJFnylTDpJ0hM94rhuxX+dU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42033},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"b9d5d3104a00be354f8fb09c23f300e4d8b106ee","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"joi":"17.13.3","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.0.9_1744256088191_0.19589112901756423","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"p-api-orm","version":"1.0.10","author":"","license":"ISC","_id":"p-api-orm@1.0.10","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"6a1f3a8fb12877006856a3f561e525aefe12cd44","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.0.10.tgz","fileCount":5,"integrity":"sha512-IXkDOQynIZyXWTn7jwfhuEF/vXjNBFrzogNelutugzuwtkdkQX8NK1znxjN9OEgAx0gurxDU91FqSENR5/B8DA==","signatures":[{"sig":"MEQCIGF7YOlwKa8QqTI0EEYpK8hLdl1J50WrnnR3+ilR0KNvAiBzM+IOemwhcxSvgGjLTbgjuNRXw8Ydn9/h3ZDMP4ttpQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42034},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"b9d5d3104a00be354f8fb09c23f300e4d8b106ee","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"joi":"17.13.3","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.0.10_1744256188153_0.7673232222113309","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"p-api-orm","version":"1.1.0","author":"","license":"ISC","_id":"p-api-orm@1.1.0","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"54542735fea7cc2b6d71819da47c3390ce2bb4ec","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.1.0.tgz","fileCount":5,"integrity":"sha512-jSxZbRJRu4uwzji5Ljhu6FI7JoVNOT9KA4iMCtS4Hemg5vRk1+lHS8+GF0cJl+XLo21vgFjMsBaqenkXnPGT/w==","signatures":[{"sig":"MEUCIQDI9WWzI9JCkH4DUBuw1FOTSkD29sl7KgP/dCU7EJJRlAIgYz3Shbox0qN++olbhNF+9241blfLGYrtacaUOakKXgY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42033},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"b9d5d3104a00be354f8fb09c23f300e4d8b106ee","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"joi":"17.13.3","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.1.0_1744256355573_0.4761328579558912","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"p-api-orm","version":"1.1.1","author":"","license":"ISC","_id":"p-api-orm@1.1.1","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"c3b94c1c5129d6611761d7f536d0ae961754e22b","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.1.1.tgz","fileCount":5,"integrity":"sha512-H2kwG0ZKJvmlSkc0XxrHfut15kda6QD9dN7o6FJxLUF8bu3yQ8dZFhWBtfCxcmGGmq61BNsfs9oilXvWOBCSVw==","signatures":[{"sig":"MEUCIQDHU4mocH6Vsds2Mg3pCH9cc6l3EXFzUkpZ3gi4Dc52AQIgCD8N6pPTd1gdzOtKFYrbUh2AQa/bReQfGpmPuTKhY6k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42334},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"b9d5d3104a00be354f8fb09c23f300e4d8b106ee","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"joi":"17.13.3","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.1.1_1744265438212_0.8912331428750668","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"p-api-orm","version":"1.1.2","author":"","license":"ISC","_id":"p-api-orm@1.1.2","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"599694142cb27a32e86ea8e21462bcf98db33be9","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.1.2.tgz","fileCount":5,"integrity":"sha512-XddmW/1S5sji0VyK8QacTdbm8lg29LdcBE1xyydf3wD0gJhAwOHuUPlCgnXS7uC+/sawTNRNzxs48tWyLSh4Bw==","signatures":[{"sig":"MEYCIQCgdcFZIJWZqBeHpem4FBwlYQKpMoAGAjO2SJpr0VcR5wIhAM24BXZoi6yVCYUzVIy6abrzs6/qSrx35akcH7rEFE0u","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43264},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"b9d5d3104a00be354f8fb09c23f300e4d8b106ee","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"joi":"17.13.3","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.1.2_1745510764586_0.29297897053773747","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"p-api-orm","version":"1.1.3","author":"","license":"ISC","_id":"p-api-orm@1.1.3","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"b829edf8b5b3d24489129d6c320ae6fcf87ace7b","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.1.3.tgz","fileCount":5,"integrity":"sha512-MjdKuro6x1QKUnW5XPIQjfRI6CfsLtoQXlxykEqL7AHajxdncXDUcui/HrvHRfXO2zTQTDB7F4rtWOGmDl5Q/g==","signatures":[{"sig":"MEYCIQCtPPi8gCgbDbP6ymMYc8UeWTG4+HxhiUui7LTby56hgQIhAPakHIpfft85omFiSxifclbq64TxTl6vTDhtYZlWFyGe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43264},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"b9d5d3104a00be354f8fb09c23f300e4d8b106ee","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"joi":"17.13.3","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.1.3_1745511022828_0.09600496227764421","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"p-api-orm","version":"1.1.4","author":"","license":"ISC","_id":"p-api-orm@1.1.4","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"866d1a7e34c797411d10f738af235d8a9902dc79","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.1.4.tgz","fileCount":5,"integrity":"sha512-R99Fna4BSobAFV5R/xZGgTMTX1WaG9HELQ3XMWX64WAEJ5TY2hoGsvUWFDDXtUPdd0v/RDjdVV1rzSs44/uYYQ==","signatures":[{"sig":"MEUCIC/4+A289jHEealCu2wOus/s9/Tx18BLv/WJXk6HQxBeAiEA0tmdneTNpgVPr7EL9PrdvR3vs4bDpRmqJJMiEVPuh0w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45344},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"584e05fcb01fe576cd44440b223cb3df5862b87f","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"joi":"17.13.3","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.1.4_1747039275967_0.5176106645037897","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"p-api-orm","version":"1.1.5","author":"","license":"ISC","_id":"p-api-orm@1.1.5","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"2ee9c3d47c72567ca50930408b305751e836b513","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.1.5.tgz","fileCount":5,"integrity":"sha512-goQSmfFx4MquvNZoovZ7un9b3T/LaNzqcxuQya8PcB/+Au8UH1pAG0ZBWrgGj4zwVHQZJO7GKbZrKuxYYDECcA==","signatures":[{"sig":"MEYCIQDRdQuHI5Izr6RpTACxoAeGZ+4xS39i+oyxWcy6x8BpxAIhAOgzXMw1BqTSVmv+MA+I1WcIzhy7gzNCJlUmEHBXRH6N","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55538},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"75e1d357d2c7ad2ea9ba90f18c9d2615ad6b68e0","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"joi":"17.13.3","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.1.5_1747296636770_0.15395147472828952","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"p-api-orm","version":"1.1.6","author":"","license":"ISC","_id":"p-api-orm@1.1.6","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"8382015fa05757d630932c0ea5d605481bfda702","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.1.6.tgz","fileCount":5,"integrity":"sha512-yOYzJY/W4k0nYdc4zJ86ePBey2ONA2rly4zLZ2bBnEtMMPNuNJCRzymSDOCUSCEL8ZoVAAPtlLSzwGSSJs4wqw==","signatures":[{"sig":"MEQCIHAVnZ4/2rz+pA3aJw59RMkXB1Zb2nveKBQFkgaZShR9AiAIPGJBw41O5ZdX07xiLXatqnJXNCFfHKSrx3/YtDsrKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55548},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"262e32598e4344edc1f369b0a34234ea4ce53a2a","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"joi":"17.13.3","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.1.6_1747303093994_0.663393884335892","host":"s3://npm-registry-packages-npm-production"}},"1.1.7":{"name":"p-api-orm","version":"1.1.7","author":"","license":"ISC","_id":"p-api-orm@1.1.7","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"e2225ff58f7fe37c58f2ebfb5efbc05500f9adb5","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.1.7.tgz","fileCount":5,"integrity":"sha512-CuvvIfDpuoU/QqFUwvSTZMYupnzJwLSYrSjNfkmAIBjv1qOoS4mNEU0HsyTUPvBhvlVfEccTM7ZNKghZEkvOPA==","signatures":[{"sig":"MEYCIQD6Fj8ZUSbSh+3EnNTOBWxi5rUihl8OQgisVchPSEfAsgIhAItCaHtIixJXY9Gx9EdIVPJsqwLRBjIup+hfzzlObzVp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56058},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"262e32598e4344edc1f369b0a34234ea4ce53a2a","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"joi":"17.13.3","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.1.7_1747819264799_0.948866434683346","host":"s3://npm-registry-packages-npm-production"}},"1.1.8":{"name":"p-api-orm","version":"1.1.8","author":"","license":"ISC","_id":"p-api-orm@1.1.8","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"67354a22c4b8e8ca79eefcad0f17d28a2814b640","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.1.8.tgz","fileCount":5,"integrity":"sha512-GG3AxYGhfkwREo68QgbsG0BeoIabyyQLgNxqtAcsKXzpX0OR8Gto6fdaZ+7ZZHzc76wyy0+v/wQ2kMJ/Jmm/jg==","signatures":[{"sig":"MEUCIQDAGgK0tVb6bGeSBi6JxtN5A38XDXvq+NCknLWPfatJhQIgL2yNmHIER47yVXHi10aJDpJZFfGqfL6ckBrpHe3mRns=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56289},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"fc695b0e4fe3fcdcfcf23d1ed5c9f4cc436cea06","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.1.8_1748915632041_0.9125025780990863","host":"s3://npm-registry-packages-npm-production"}},"1.1.9":{"name":"p-api-orm","version":"1.1.9","author":"","license":"ISC","_id":"p-api-orm@1.1.9","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"a4f184a8d5f4b50af92d9733ff54e0dcf50e05bb","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.1.9.tgz","fileCount":5,"integrity":"sha512-G+Z9awOjtE0rN+Vy8PDsTlNlcP1QixFWFdFegmduUGN1hO93gBaxNpR9EV9TFNp3/P2fV0JsQIg2bbSbYlwlvQ==","signatures":[{"sig":"MEYCIQCTBwsDZZ+gg8wShIij+9L/LK88VWhHW0fc5y2W3wch3QIhAOYk5L/8zFN/qMI5zZwM+92ZrIayQIBJeXiyA21adfnW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54919},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"e3143d2136dd2fd4f13cdaf4739810d0e52c3aec","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","actor":{"name":"peibaba","type":"user","email":"1431011536@qq.com"},"email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.1.9_1751963263205_0.11755856785928454","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"p-api-orm","version":"1.2.0","author":"","license":"ISC","_id":"p-api-orm@1.2.0","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"1d1f49b05ff87f8547e30163a73dc91bad81d1ff","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.0.tgz","fileCount":5,"integrity":"sha512-t+OGxAXEn3DNX1rgGVaxLD6r4T24ihUq3421LSdL1/LQpoXWbaeGB52HWIuUQZ2gfklIcI1vd6rVitbiSybR0Q==","signatures":[{"sig":"MEYCIQD9ZjhF1ITotTfbVmSWHeZvhhZNeRL1kTwdNbFvlhr7KQIhAO5CFJEEeX8DIQMq8Qog9tJX6Q6nSk1mnpzpeTu+k+2V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55627},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"e3143d2136dd2fd4f13cdaf4739810d0e52c3aec","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.0_1755487293983_0.0854393049931943","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"p-api-orm","version":"1.2.1","author":"","license":"ISC","_id":"p-api-orm@1.2.1","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"f3741d7edaf371bef2f5f693b026e3da2fa2ea75","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.1.tgz","fileCount":5,"integrity":"sha512-3KZSRN1oi5JKWbHi/ZCQEhlFxN74Cm664gD+lCAzflwbYl5wQ+kYXgU627wRoedmepx0HtRB0XD1uiXWdrgsFw==","signatures":[{"sig":"MEYCIQDHwmaiLB9/eqZsIij/FL08+/vG486C10Adebf/eSqgIQIhAMP9CjIkzm2JVMA7cN2bF8iA5Y2opX32n6czKuLj/Vn2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55645},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"79a0d0bdfc55037cb493a0a68c3f0e01160d7db6","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.1_1755681963217_0.2285528191293158","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"p-api-orm","version":"1.2.2","author":"","license":"ISC","_id":"p-api-orm@1.2.2","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"56aaabacdfd59683941dd36eb204daaf98dbc728","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.2.tgz","fileCount":5,"integrity":"sha512-g68pVGPQWLJe67iuKlCYzf8ZH3goLVIWw8OwUf+z2tjP5+t5COWsL1SFC4kQTRARh8yiXi6z29ezbUEbO0f4AA==","signatures":[{"sig":"MEUCIAbf6af5BNgGkd8HC2Uz/niJbBqzikLhGjm3UrWRU2+pAiEAmS1MmLtKOLlX0IjXuGdUal/kQi9+qkLDPiTezC0l5SI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56921},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"79a0d0bdfc55037cb493a0a68c3f0e01160d7db6","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.2_1757262788690_0.434786258551481","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"p-api-orm","version":"1.2.3","author":"","license":"ISC","_id":"p-api-orm@1.2.3","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"2fd706eea61e3997b690bd2c92813c1e6608e1af","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.3.tgz","fileCount":5,"integrity":"sha512-SUaR7FBeXVb9e2xkk8kMMOkmNu+16n4h6oZCmDYKgk0VSgWggVgqVFHXr7nQb9wfrilTn97GC1PP2uOrjAhp/g==","signatures":[{"sig":"MEUCIF/zD2BpNz354tHa3bv5CJi2qvvIpRr5989msfobqXdnAiEA/8SCxTvEYMj2LeXd7DWxjahv4oXY45wo5U8pfQ/QctA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57399},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"8fcabc496856021185c974abda1ea02dcc3fb18d","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.3_1757428955927_0.012943771987439234","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"p-api-orm","version":"1.2.4","author":"","license":"ISC","_id":"p-api-orm@1.2.4","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"70abb726d01ddfb5b81fcbc03e2b3c7964edb6cd","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.4.tgz","fileCount":5,"integrity":"sha512-B/1k9I/+ZGa4RSCCChIQXISc70XCJ4fKXSoZIP2aBDvF30tTvRvH6HQbSrgH7emERKSfZXEFfuY/avkKtAhYgA==","signatures":[{"sig":"MEQCIDmFcJ8iRi6SM8e1IpB74dFOVxvyHDNb1Ae8HdQVB1/4AiB/OXJMxo/gk6ch04dJgvKqnr2ZLAOPtklrQzFZmlfULg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57495},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"248acfd94298b9a174cd2d78f0d29cffd80a8296","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.4_1757915669654_0.22290331388640627","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"p-api-orm","version":"1.2.5","author":"","license":"ISC","_id":"p-api-orm@1.2.5","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"25b6fa0535f420c9c6ad33bb1a6aa30e8c3a35cd","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.5.tgz","fileCount":5,"integrity":"sha512-Tb8fLBrwdINbHMu2mAX+3agObTpm51wScei5MWsTl6h04e3V5fIF9IxIiNyoO/jCOGuz0Piv1zIsxOUhrXVTZA==","signatures":[{"sig":"MEYCIQCmpM5sXd6QweFNsk4+78fT30mKZxtT35vbiu5UfpBFMgIhAP6B9lznyYOLQApQhMe+6v6Q4CYcKfzyrqjvvJcdrgib","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57495},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"248acfd94298b9a174cd2d78f0d29cffd80a8296","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.5_1758187222494_0.8325213727186263","host":"s3://npm-registry-packages-npm-production"}},"1.2.6":{"name":"p-api-orm","version":"1.2.6","author":"","license":"ISC","_id":"p-api-orm@1.2.6","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"d780c471f14f44af47b43db31c2cfe5fa8742b72","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.6.tgz","fileCount":5,"integrity":"sha512-EPJBaedBhy+M0yblIeI0PvHSx9wIMWR1dXL7W+8Aua5VudoQreF97bgmf6025xIvA/tefFxqHcV2gq6njFEkTg==","signatures":[{"sig":"MEUCID1c4Cc/SJB89wkAy2UQfT4Qw3Q58LkPmh3zdhffr48SAiEAvK/V9TnXmaPhtGzu3FNSF0+PBcNyDpP4VZC04F6u/9E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57675},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"0b04558a0dd64b6250c0a13285097f62ad5ac32d","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.6_1762608237333_0.7131800565464017","host":"s3://npm-registry-packages-npm-production"}},"1.2.7":{"name":"p-api-orm","version":"1.2.7","author":"","license":"ISC","_id":"p-api-orm@1.2.7","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"e741b7c22b0cd846487419c0c304af124ba425ce","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.7.tgz","fileCount":5,"integrity":"sha512-x78xXt7s82b+dfM6oXHkmylM4uphzzWSCKhnfdtEtK7bOyAYrHvNnyHLw+cnN+6ccnYe77OKlNuL05ivF7s3cA==","signatures":[{"sig":"MEUCIQDB6mpsM04/rX0T1kxZ3lOfLMZQ47Z2xoBijVyhPMAq1gIgT1N7y5bvAiyqrgoo6R1xc550YTid57J6kJmZL3mmqSo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57683},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"0b04558a0dd64b6250c0a13285097f62ad5ac32d","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.7_1765802746885_0.3940480615825839","host":"s3://npm-registry-packages-npm-production"}},"1.2.8":{"name":"p-api-orm","version":"1.2.8","author":"","license":"ISC","_id":"p-api-orm@1.2.8","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"057f9cea85841bbef23066502306943e52fec482","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.8.tgz","fileCount":5,"integrity":"sha512-RSLeD6WB7ltBw4HefiHt8Wsd9pvx28cIf+8SCPdcmIJxjpvveoMKULWVjSZetcv1AsuqSgI8aDYviuYSPKnKfA==","signatures":[{"sig":"MEQCIHUNzZHC2RkBznjs37kwTm5MdgL+L9EWAaYhlVEQAazWAiAt4Db8hYyEzNosq5TcVK4qMw7g0iL4H5/AHrTww1+nvQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57683},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"6aad84e3c4033400a70016cd28da2c5e0a15ed43","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.8_1765865017419_0.18230719128314687","host":"s3://npm-registry-packages-npm-production"}},"1.2.9":{"name":"p-api-orm","version":"1.2.9","author":"","license":"ISC","_id":"p-api-orm@1.2.9","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"3d264558a621a32f20539417c616903115fa34c7","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.9.tgz","fileCount":5,"integrity":"sha512-Fg8nm/pmEENXU9SJlqEAFjwBX4Ys1EBMrQs454hX40LLJ1/aIijQm8fXpYUwu6ON/W+X0RIML8+DYr9SZXVLKg==","signatures":[{"sig":"MEUCIQCTFhUMDzvdc+sWoFtkrFwlrt4qCxDU4IDlIwl1boGn5AIgE53DBRFcZWgR3UvbzJvKJudvU7ukzfsC5VGTx+tQu1E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58087},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"6aad84e3c4033400a70016cd28da2c5e0a15ed43","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.9_1766046125668_0.9026886240407466","host":"s3://npm-registry-packages-npm-production"}},"1.2.10":{"name":"p-api-orm","version":"1.2.10","author":"","license":"ISC","_id":"p-api-orm@1.2.10","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"e2dabc848c97796446a29476b3d9b1afcdf98c80","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.10.tgz","fileCount":5,"integrity":"sha512-LHPD9jex7QNvOkQ0sQRuH9Niq2G36kuVFxEb3G0CYVyjL4nt1Me36PikegMWHnMunkNUynPJCxTY1jxGToUj1g==","signatures":[{"sig":"MEYCIQDU6GS6dynEudX0m6nSzMC/wRuasa9QEpwQTDRmDOojnQIhAJkhvHdLMvgi44RUtGKfP9WvItR3WyMoR7hiXdNcIxVs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58088},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"6aad84e3c4033400a70016cd28da2c5e0a15ed43","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.10_1773455868741_0.09803675825580349","host":"s3://npm-registry-packages-npm-production"}},"1.2.11":{"name":"p-api-orm","version":"1.2.11","author":"","license":"ISC","_id":"p-api-orm@1.2.11","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"96c9059c95e221e865c261f2fbb79757b2fe0514","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.11.tgz","fileCount":5,"integrity":"sha512-imODYj+E3Hjor5XRxAzV670efICgbaRIhRZvQUHbujyZxsOWSLMBI4U3kgTKQOfKaK74TM70G9jheDX0+hKrUw==","signatures":[{"sig":"MEUCIQCZJPF49j2EK6xLWrLxCila/LBVQboFCKLABPp9T0uVBwIgUUmZiP/m9QHdQJ4c8OJ2RqnEdP15hMrg5cOA0wbDrlU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58086},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"811c3e8f732a0fbad8ad1b67b79772e0e3205aeb","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"^3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"^4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.11_1774328170299_0.8021425513386558","host":"s3://npm-registry-packages-npm-production"}},"1.2.12":{"name":"p-api-orm","version":"1.2.12","author":"","license":"ISC","_id":"p-api-orm@1.2.12","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"8f5f9e8e0a5331e211c74ff7ee192c864755ded6","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.12.tgz","fileCount":6,"integrity":"sha512-qfmGsMdQFQVxgZHhkCvlrn0Z0KatQgl6pEpuurisy3TPWHSQMxpl2E7VlCCbzm8twysqqBZZJ+PSnHvE82DikA==","signatures":[{"sig":"MEUCICWFR6OuUTnOjs3kd+/QWhwPml1wZzo8JcAGCMMTohetAiEA2bGYRN/C9kq4zi74foJvL8LpjZMmI2P7Csgx6ZxSgMc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75367},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"9e6b885302506459cf0b28951a29b3e28ffdb921","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","description":"基于 [Knex](https://knexjs.org/) + [Zod](https://zod.dev/) 的 TypeScript ORM 封装库，提供表模型（`Model`）、视图模型（`ViewModel`）以及 Zod 扩展（`Zod`）三个核心模块。","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.4.0","ts-node":"10.9.2","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.12_1775790143343_0.720506074178177","host":"s3://npm-registry-packages-npm-production"}},"1.2.13":{"name":"p-api-orm","version":"1.2.13","author":"","license":"ISC","_id":"p-api-orm@1.2.13","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"2cb8d1493320518e24a9213c4bdf21e7b0f5d704","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.13.tgz","fileCount":6,"integrity":"sha512-9eXJSuebE/MTVnGQkZIqKKtyzAQ3pibrqfmjMq20I15jyk0DYKOXHaalhNOdkdHZvwmjNyurfiOpllMElPAtog==","signatures":[{"sig":"MEQCIHriWNJdR19iaZUELlPIUjaKDlWJx38gv+n1nKURRL5+AiAI/nf8Oad7lg+cxJNTaqdkKUP0UUZ5Dd32q9OPrga+xA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75451},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"b396a329b9e1d6dac20f6fdd72117081f7c0398b","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","description":"基于 [Knex](https://knexjs.org/) + [Zod](https://zod.dev/) 的 TypeScript ORM 封装库，提供表模型（`Model`）、视图模型（`ViewModel`）以及 Zod 扩展（`Zod`）三个核心模块。","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.4.0","ts-node":"10.9.2","typescript":"5.8.3","@types/lodash":"4.17.16","javascript-obfuscator":"4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.13_1775790613818_0.8217910506132908","host":"s3://npm-registry-packages-npm-production"}},"1.2.14":{"name":"p-api-orm","version":"1.2.14","author":"","license":"ISC","_id":"p-api-orm@1.2.14","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"8d19f14b76386ddb2ea30fc25bd953368d7b2134","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.14.tgz","fileCount":6,"integrity":"sha512-m/VbAFPL6cOj+puDrm5sTmSpnTttvTVYfTZlrEXOieqpFMCu0gRaMw0PGLTAYdln9AIv1YfSE9vd5T+aMvzZXw==","signatures":[{"sig":"MEUCIGObpT6/6kDgCeUBDxNepxjidC0S55Lp1jKXpRVcjnhxAiEAw8pqB/heWa7+TNfHJMy9wYEzGrJbCCzmDYUEbchxEo4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79761},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"a68dde066b4a6e533c0beb0df1a41769816fcb31","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","description":"基于 [Knex](https://knexjs.org/) + [Zod](https://zod.dev/) 的 TypeScript ORM 封装库，提供表模型（`Model`）、视图模型（`ViewModel`）以及 Zod 扩展（`Zod`）三个核心模块。","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.4.0","ts-node":"10.9.2","typescript":"5.8.3","@types/node":"^25.6.0","@types/lodash":"4.17.16","javascript-obfuscator":"4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.14_1776326559267_0.7109369896916542","host":"s3://npm-registry-packages-npm-production"}},"1.2.15":{"name":"p-api-orm","version":"1.2.15","author":"","license":"ISC","_id":"p-api-orm@1.2.15","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"371715a5814353f5934c98d49a14812c1c3ce301","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.15.tgz","fileCount":6,"integrity":"sha512-3CPV6K5AQ9S9Zgv3lvSFAo/wOQcAAtLht/+U6OglcGSQq3HrIfOd7d3TjTHHYP+JUSFdERhYyoMcJ3yshBwxSQ==","signatures":[{"sig":"MEUCIGFuoGZhhWNDxwiAwOJkCb8QiqkKDpjAZR85IADoqj0tAiEA7fOWN9iDfBAABAhvQ16SGo76V/G8TNeeLl7xY6HWpHE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79755},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"a68dde066b4a6e533c0beb0df1a41769816fcb31","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","description":"基于 [Knex](https://knexjs.org/) + [Zod](https://zod.dev/) 的 TypeScript ORM 封装库，提供表模型（`Model`）、视图模型（`ViewModel`）以及 Zod 扩展（`Zod`）三个核心模块。","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.4.0","ts-node":"10.9.2","typescript":"5.8.3","@types/node":"^25.6.0","@types/lodash":"4.17.16","javascript-obfuscator":"4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.15_1776401831322_0.9648388243823471","host":"s3://npm-registry-packages-npm-production"}},"1.2.16":{"name":"p-api-orm","version":"1.2.16","author":"","license":"ISC","_id":"p-api-orm@1.2.16","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"f2317728264e72c8958482c3de38f340607b88f5","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.16.tgz","fileCount":6,"integrity":"sha512-Tl9i2tJx5qbJ7zu4XJQugB42U6VGwdVbbz1DVwf+44OCqw2ojz3JYm8/IWYNgPC471ihH/VIslgVpkZV1ZpN/w==","signatures":[{"sig":"MEUCIQDrU8zX2mQ16KqVgULPqS1lPcMsBe3IZSivfHkB1iHGgwIgShKBWFZ62kq26tHyUDCa8Y5xd7viXR15ky/SLWKtLG0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82753},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"1882d0b0ea0e30a20dd60c37b3f8612a76eb4981","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","description":"基于 [Knex](https://knexjs.org/) + [Zod](https://zod.dev/) 的 TypeScript ORM 封装库，提供表模型（`Model`）、视图模型（`ViewModel`）以及 Zod 扩展（`Zod`）三个核心模块。","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.4.0","ts-node":"10.9.2","typescript":"5.8.3","@types/node":"25.6.0","@types/lodash":"4.17.16","javascript-obfuscator":"4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.16_1777365482783_0.13296619106125185","host":"s3://npm-registry-packages-npm-production"}},"1.2.17":{"name":"p-api-orm","version":"1.2.17","author":"","license":"ISC","_id":"p-api-orm@1.2.17","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"9f287b559b8ec33dc6a8810b121bb4db18f8e162","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.17.tgz","fileCount":6,"integrity":"sha512-+xgxiIeDzeV6myOmuhuJc/+gT8krzsuS5Vec/8cKDWFAN14YcRLOHkduYSDupPWBDlSwzPbA8kpQwyvprSrYYA==","signatures":[{"sig":"MEYCIQC0WcNOtL5auHl16+yV+mpAzit9x/RtB5HD9O0m9LHQfAIhAPCNageb0oLphe+RFaCtZPyXTytTzH0S6Gbb/whxWcGJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84844},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"03b885adafb1db7c3979c24937ab4ffa5fce9f1b","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","description":"基于 [Knex](https://knexjs.org/) + [Zod](https://zod.dev/) 的 TypeScript ORM 封装库，提供表模型（`Model`）、视图模型（`ViewModel`）以及 Zod 扩展（`Zod`）三个核心模块。","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.4.0","ts-node":"10.9.2","typescript":"5.8.3","@types/node":"25.6.0","@types/lodash":"4.17.16","javascript-obfuscator":"4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.17_1777366296766_0.7946131010844459","host":"s3://npm-registry-packages-npm-production"}},"1.2.18":{"name":"p-api-orm","version":"1.2.18","author":"","license":"ISC","_id":"p-api-orm@1.2.18","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"bc5639f28a02fd2e169314b0628a51d2693dfdc6","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.18.tgz","fileCount":6,"integrity":"sha512-nn0gGpyM32KQPNQXk8HwFbWObuaTjCjwrSQVPo/XV/skAz35VwEae/TPb5OrTg2m+rJWE5AYa2Wksv3Xmlduig==","signatures":[{"sig":"MEQCIEkHAaTIqKHGBRdj8xsobMwzwmOCsyjB8Eo4Ztws7gmqAiBmJ5V2BVn1D5UtXzjd7wmHTY3TsNmdhWMQIM4cK15+1A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83355},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"03b885adafb1db7c3979c24937ab4ffa5fce9f1b","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","description":"基于 [Knex](https://knexjs.org/) + [Zod](https://zod.dev/) 的 TypeScript ORM 封装库，提供表模型（`Model`）、视图模型（`ViewModel`）以及 Zod 扩展（`Zod`）三个核心模块。","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.4.0","ts-node":"10.9.2","typescript":"5.8.3","@types/node":"25.6.0","@types/lodash":"4.17.16","javascript-obfuscator":"4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.18_1777366669428_0.7542158507791121","host":"s3://npm-registry-packages-npm-production"}},"1.2.19":{"name":"p-api-orm","version":"1.2.19","author":"","license":"ISC","_id":"p-api-orm@1.2.19","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"2e5ec3d9efe94a638ee82133735b42ff29012987","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.19.tgz","fileCount":6,"integrity":"sha512-5ibx1WZrSc9y8yNHrfjRFcZsxzLmAC2lVFzb2PyLy3YUkHdbG7Fqe6rYDHeX81JGzZi7csYYSSikUTZwXX5twQ==","signatures":[{"sig":"MEUCIQCKA/j7REoBghE5j4rKyfhlgUAncGuwC9zhWyYDfQy/aQIgE6cQvWGE9TUmpLcBI/QJeEu9445WijoKb5n1Z91+mLQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83359},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"14664b5cd55a4fb5a7fe21f4c5ba64457a205851","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"10.8.2","description":"基于 [Knex](https://knexjs.org/) + [Zod](https://zod.dev/) 的 TypeScript ORM 封装库，提供表模型（`Model`）、视图模型（`ViewModel`）以及 Zod 扩展（`Zod`）三个核心模块。","directories":{},"_nodeVersion":"20.18.1","dependencies":{"zod":"3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.4.0","ts-node":"10.9.2","typescript":"5.8.3","@types/node":"25.6.0","@types/lodash":"4.17.16","javascript-obfuscator":"4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.19_1777372587572_0.5219837135134944","host":"s3://npm-registry-packages-npm-production"}},"1.2.20":{"name":"p-api-orm","version":"1.2.20","author":"","license":"ISC","_id":"p-api-orm@1.2.20","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"90e42ee4c1fa5e1bc33a6cabeb4b1edab92d4231","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.20.tgz","fileCount":6,"integrity":"sha512-k+nPEKt0L+9epYBbnzgTPmRHgi7+oySEf7Pp2HFsNHIsPFuE8MtRYUDK5Rp1knv3o/JvwqQ9kjNtP2jUN+a1ig==","signatures":[{"sig":"MEUCIQDtX8fAvM8LZCPEFKxkZlTiPanRKR2imnqmkAEg7u6YogIgKmuBnJd9v4/KfTHOR8qW+k/sZYWr0n44YCnxRu4W0Wk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100830},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"01b400b9e0197efc0c1ea9b3e60f446e10c6ee1c","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"11.9.0","description":"`p-api-orm` 是一个基于 Knex 和 Zod 的轻量 TypeScript ORM 封装。它不负责创建数据库连接，也不负责迁移表结构；调用方需要自己初始化 Knex，并把 Knex 实例传给 `Model` 或 `ViewModel` 的方法。","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.4.0","vitest":"^4.1.7","ts-node":"10.9.2","typescript":"5.8.3","@types/node":"25.6.0","@types/lodash":"4.17.16","javascript-obfuscator":"4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.20_1783927819537_0.35544850956309104","host":"s3://npm-registry-packages-npm-production"}},"1.2.21":{"name":"p-api-orm","version":"1.2.21","author":"","license":"ISC","_id":"p-api-orm@1.2.21","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"8f3b41cc5ba0e9a0f66d381bf43a7359a93cbe6d","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.21.tgz","fileCount":7,"integrity":"sha512-2Ggunb6MZcT4rv67HdqY95N4d7bBc9JfvQGdrNh8/dWwlzARU2PBxLtlg9xguHsPdHxIdzV6968xyrUv5ELsrA==","signatures":[{"sig":"MEUCIDzMZswTpSc3FPooMtITHpnCVPiTQY2/aWnFAD/oGHrNAiEAsfk7OFsxHAkXaG+S6SD4z+bCUSdM0RD6A+5GCyPxuOg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104088},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"01b400b9e0197efc0c1ea9b3e60f446e10c6ee1c","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"11.9.0","description":"`p-api-orm` 是一个基于 Knex 和 Zod 的轻量 TypeScript ORM 封装。它不负责创建数据库连接，也不负责迁移表结构；调用方需要自己初始化 Knex，并把 Knex 实例传给 `Model` 或 `ViewModel` 的方法。","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.4.0","vitest":"^4.1.7","ts-node":"10.9.2","typescript":"5.8.3","@types/node":"25.6.0","@types/lodash":"4.17.16","javascript-obfuscator":"4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.21_1783927966311_0.7004718837773856","host":"s3://npm-registry-packages-npm-production"}},"1.2.22":{"name":"p-api-orm","version":"1.2.22","author":"","license":"ISC","_id":"p-api-orm@1.2.22","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"fa126c89b820495bfd5ae8f66ea8a80c4352faff","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.22.tgz","fileCount":7,"integrity":"sha512-6RlWtPFYmUibZCvDtY+5VPMysST4OLCU7Py+RXyirlMkM1kvO1SfW+geBHIOm81nyCkVd2BNEWxYawg8XdhaPQ==","signatures":[{"sig":"MEUCIA9/PINcRsOEB84DaoOYMmgcuZMk0S/yzDN0ICFgzTmTAiEAxGHtFG+Bd2VPSnJxL6IXIZ69fYWFeANLWhCMwe9WCuc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105678},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"036f5e5abaafb24ab70b18d8d9b5ce1af6e1e9e8","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"11.9.0","description":"`p-api-orm` 是一个基于 Knex 和 Zod 的轻量 TypeScript ORM 封装。它不负责创建数据库连接，也不负责迁移表结构；调用方需要自己初始化 Knex，并把 Knex 实例传给 `Model` 或 `ViewModel` 的方法。","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.4.0","vitest":"^4.1.7","ts-node":"10.9.2","typescript":"5.8.3","@types/node":"25.6.0","@types/lodash":"4.17.16","javascript-obfuscator":"4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.22_1784857250831_0.09606297729349089","host":"s3://npm-registry-packages-npm-production"}},"1.2.23":{"name":"p-api-orm","version":"1.2.23","author":"","license":"ISC","_id":"p-api-orm@1.2.23","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"dist":{"shasum":"7b76209e859a0b4774b20f892b2ce87fa7f31a2d","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.23.tgz","fileCount":7,"integrity":"sha512-cEMiohakIcaNDhtVqsVNWenmxgeu4gThQwVT+sK1s05q6QOVbzbPrhvZ9V3uorXO6ywMzaABgol9d0UnDmN7/g==","signatures":[{"sig":"MEUCIQClXv63p983VmgLe3hEucUnRepicfLWfSJ3V3I1AsZerQIgRYgDvjLdlPdMy9I3xg9UTWzuW2zqYK7VtXVb0QWvGPc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":106571},"main":"./dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"gitHead":"036f5e5abaafb24ab70b18d8d9b5ce1af6e1e9e8","scripts":{"build":"tsup"},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"_npmVersion":"11.9.0","description":"`p-api-orm` 是一个基于 Knex 和 Zod 的轻量 TypeScript ORM 封装。它不负责创建数据库连接，也不负责迁移表结构；调用方需要自己初始化 Knex，并把 Knex 实例传给 `Model` 或 `ViewModel` 的方法。","directories":{},"_nodeVersion":"24.14.0","dependencies":{"zod":"3.25.42","knex":"3.1.0","lodash":"4.17.21"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"8.4.0","vitest":"^4.1.7","ts-node":"10.9.2","typescript":"5.8.3","@types/node":"25.6.0","@types/lodash":"4.17.16","javascript-obfuscator":"4.1.1"},"_npmOperationalInternal":{"tmp":"tmp/p-api-orm_1.2.23_1784857856189_0.8169003718026389","host":"s3://npm-registry-packages-npm-production"}},"1.2.24":{"name":"p-api-orm","version":"1.2.24","main":"./dist/index.cjs","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"}},"types":"dist/index.d.ts","scripts":{"build":"tsup"},"author":"","license":"ISC","description":"`p-api-orm` 是一个基于 Knex 和 Zod 的轻量 TypeScript ORM 封装。它不负责创建数据库连接，也不负责迁移表结构；调用方需要自己初始化 Knex，并把 Knex 实例传给 `Model` 或 `ViewModel` 的方法。","devDependencies":{"@types/lodash":"4.17.16","@types/node":"25.6.0","javascript-obfuscator":"4.1.1","ts-node":"10.9.2","tsup":"8.4.0","typescript":"5.8.3","vitest":"^4.1.7"},"dependencies":{"knex":"3.1.0","lodash":"4.17.21","zod":"3.25.42"},"type":"module","gitHead":"c92614fc67cef778b683bf4880c914f67392c077","_id":"p-api-orm@1.2.24","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-T2IJV1h4TMjpOIWJvPyOVJKygMKyliVRnkSgWCKjgFgS5qyadV5/IbYsJWo9cJr8abm2MmtdAORuYcHl9S8aZg==","shasum":"faea659bc176723bcaabf5850b514d2957603dfd","tarball":"https://registry.npmjs.org/p-api-orm/-/p-api-orm-1.2.24.tgz","fileCount":7,"unpackedSize":105927,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC6oPYHgtb5MBVtD0SloOzAaDIqBIBlvIcPKcvgbpRQ3AIhAO2IMLJztlJapVg1L62PWuBY1UBVUpWw+3faFy6K/X44"}]},"_npmUser":{"name":"peibaba","email":"1431011536@qq.com"},"directories":{},"maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/p-api-orm_1.2.24_1788483541427_0.8871399036144623"},"_hasShrinkwrap":false}},"time":{"created":"2025-04-10T02:23:27.019Z","modified":"2026-09-04T00:59:01.805Z","1.0.1":"2025-04-10T02:23:27.180Z","1.0.2":"2025-04-10T02:23:33.058Z","1.0.3":"2025-04-10T02:23:36.568Z","1.0.4":"2025-04-10T02:23:40.186Z","1.0.5":"2025-04-10T02:36:21.716Z","1.0.7":"2025-04-10T03:09:40.424Z","1.0.8":"2025-04-10T03:25:42.382Z","1.0.9":"2025-04-10T03:34:48.363Z","1.0.10":"2025-04-10T03:36:28.365Z","1.1.0":"2025-04-10T03:39:15.743Z","1.1.1":"2025-04-10T06:10:38.496Z","1.1.2":"2025-04-24T16:06:04.763Z","1.1.3":"2025-04-24T16:10:22.991Z","1.1.4":"2025-05-12T08:41:16.166Z","1.1.5":"2025-05-15T08:10:36.935Z","1.1.6":"2025-05-15T09:58:14.164Z","1.1.7":"2025-05-21T09:21:04.987Z","1.1.8":"2025-06-03T01:53:52.213Z","1.1.9":"2025-07-08T08:27:43.365Z","1.2.0":"2025-08-18T03:21:34.139Z","1.2.1":"2025-08-20T09:26:03.408Z","1.2.2":"2025-09-07T16:33:08.906Z","1.2.3":"2025-09-09T14:42:36.115Z","1.2.4":"2025-09-15T05:54:29.833Z","1.2.5":"2025-09-18T09:20:22.678Z","1.2.6":"2025-11-08T13:23:57.517Z","1.2.7":"2025-12-15T12:45:47.025Z","1.2.8":"2025-12-16T06:03:37.564Z","1.2.9":"2025-12-18T08:22:05.811Z","1.2.10":"2026-03-14T02:37:48.899Z","1.2.11":"2026-03-24T04:56:10.452Z","1.2.12":"2026-04-10T03:02:23.485Z","1.2.13":"2026-04-10T03:10:13.964Z","1.2.14":"2026-04-16T08:02:39.424Z","1.2.15":"2026-04-17T04:57:11.443Z","1.2.16":"2026-04-28T08:38:02.953Z","1.2.17":"2026-04-28T08:51:36.893Z","1.2.18":"2026-04-28T08:57:49.574Z","1.2.19":"2026-04-28T10:36:27.715Z","1.2.20":"2026-07-13T07:30:19.697Z","1.2.21":"2026-07-13T07:32:46.423Z","1.2.22":"2026-07-24T01:40:50.976Z","1.2.23":"2026-07-24T01:50:56.338Z","1.2.24":"2026-09-04T00:59:01.628Z"},"license":"ISC","description":"`p-api-orm` 是一个基于 Knex 和 Zod 的轻量 TypeScript ORM 封装。它不负责创建数据库连接，也不负责迁移表结构；调用方需要自己初始化 Knex，并把 Knex 实例传给 `Model` 或 `ViewModel` 的方法。","maintainers":[{"name":"peibaba","email":"1431011536@qq.com"}],"readme":"# p-api-orm 使用文档\n\n`p-api-orm` 是一个基于 Knex 和 Zod 的轻量 TypeScript ORM 封装。它不负责创建数据库连接，也不负责迁移表结构；调用方需要自己初始化 Knex，并把 Knex 实例传给 `Model` 或 `ViewModel` 的方法。\n\n库的公开入口为：\n\n```ts\nimport { Model, ViewModel, Zod } from 'p-api-orm';\n```\n\n## 安装\n\n```bash\nnpm install p-api-orm knex zod lodash\n```\n\n还需要安装目标数据库对应的 Knex driver，例如 MySQL：\n\n```bash\nnpm install mysql2\n```\n\nPostgreSQL：\n\n```bash\nnpm install pg\n```\n\n## 快速开始\n\n```ts\nimport knex from 'knex';\nimport { Model, Zod } from 'p-api-orm';\n\nconst db = knex({\n  client: 'mysql2',\n  connection: {\n    host: '127.0.0.1',\n    user: 'root',\n    password: '',\n    database: 'demo',\n  },\n});\n\nconst UserSchema = Zod.object({\n  id: Zod.string().label('用户ID'),\n  name: Zod.string().label('姓名'),\n  age: Zod.number().label('年龄'),\n  is_delete: Zod.number().label('删除标记'),\n  create_time: Zod.date().label('创建时间').optional(),\n  update_time: Zod.date().label('更新时间').optional(),\n});\n\nconst UserModel = new Model(\n  '用户',\n  'users',\n  UserSchema,\n  {},\n  {},\n);\n\nawait UserModel.create(db, {\n  id: 'u_1',\n  name: '张三',\n  age: 18,\n  is_delete: 0,\n});\n\nconst users = await UserModel.get(db, {\n  lik_name: '张',\n  min_age: 18,\n  od: '-age',\n  rt: ['id', 'name', 'age'],\n});\n```\n\n## 核心概念\n\n### Knex 实例\n\n所有数据库操作都通过调用方传入的 `db` 完成：\n\n```ts\nawait UserModel.get(db, { id: 'u_1' });\nawait UserModel.update_by_ids(db, 'u_1', { name: '李四' });\n```\n\n如果需要事务，直接传 Knex transaction 对象：\n\n```ts\nawait db.transaction(async trx => {\n  const user = await UserModel.get_by_ids(trx, 'u_1', true);\n  await UserModel.update_field_number(trx, user.id, { age: 1 });\n});\n```\n\n### Schema\n\nSchema 使用导出的 `Zod` 定义。`label()` 会影响校验失败时的中文错误信息：\n\n```ts\nconst ProjectSchema = Zod.object({\n  id: Zod.string().label('项目ID'),\n  version: Zod.string().regex(/^\\d+\\.\\d+\\.\\d+$/, '格式错误').label('版本号'),\n  amount: Zod.decimal(10, 2).label('金额'),\n  description: Zod.text().optional().label('描述'),\n  is_delete: Zod.number().label('删除标记'),\n  create_time: Zod.date().label('创建时间').optional(),\n  update_time: Zod.date().label('更新时间').optional(),\n});\n```\n\n`Model` 初始化时要求 Schema 必须声明 `is_delete` 和 `create_time`。`create()` 和 `create_or_update()` 会按完整 Schema 校验。`update_by_ids()` 和 `update_by_query()` 只校验传入的字段。如果 Schema 声明了 `update_time`，所有更新方法都会自动将其更新为当前时间。\n\n## Model\n\n`Model` 用于单表 CRUD、分页、聚合和参数校验。\n\n### 构造函数\n\n```ts\nconst model = new Model(TABLE_NAME, TABLE, SCHEMA, MAPS, ENUM);\n```\n\n| 参数 | 说明 |\n| --- | --- |\n| `TABLE_NAME` | 业务展示名称，主要用于代码侧语义表达 |\n| `TABLE` | 数据库真实表名 |\n| `SCHEMA` | Zod object schema |\n| `MAPS` | 映射对象，会挂到实例上，库内部不主动使用 |\n| `ENUM` | 枚举对象，会挂到实例上，库内部不主动使用 |\n\n构造时，库会给每个 schema 字段补充 `table` 和 `field` 信息，便于视图或元数据场景使用。\n\n### 实例属性\n\n```ts\nUserModel.JSON_FIELDS = ['profile', 'tags'];\nUserModel.after = row => ({ ...row, display_name: `${row.name}` });\n```\n\n| 属性 | 说明 |\n| --- | --- |\n| `JSON_FIELDS` | 写入时对指定字段执行 `JSON.stringify` |\n| `after` | 部分读取方法的结果后处理函数 |\n| `before` | 当前源码中声明了该属性，但没有被调用 |\n\n所有读取方法都直接使用 mysql2 返回的 JSON 值，不再额外执行 `JSON.parse`。`get_by_ids()` 和 `Model.cursor_pages()` 仍会执行 `after`，`get()` 和 `pages()` 不会执行。\n\n## 写入方法\n\n### create\n\n插入一条或多条数据。写入前会校验完整 Schema，并默认补充 `is_delete: 0`。\n\n```ts\nawait UserModel.create(db, {\n  id: 'u_1',\n  name: '张三',\n  age: 18,\n  is_delete: 0,\n});\n\nawait UserModel.create(db, [\n  { id: 'u_2', name: '李四', age: 20, is_delete: 0 },\n  { id: 'u_3', name: '王五', age: 22, is_delete: 0 },\n]);\n```\n\n### create_or_update\n\n基于唯一键执行 upsert，底层使用 Knex 的 `onConflict(uniq_key).merge()`。\n\n```ts\nawait UserModel.create_or_update(db, 'id', {\n  id: 'u_1',\n  name: '张三',\n  age: 19,\n  is_delete: 0,\n});\n```\n\n## 查询方法\n\n### get\n\n查询列表。默认会追加 `is_delete: 0` 条件。\n\n```ts\nconst rows = await UserModel.get(db, {\n  min_age: 18,\n  pc: 10,\n  p: 1,\n  od: ['-age', 'name'],\n});\n```\n\n### pages\n\n分页查询。默认值为 `p: 1`、`pc: 20`、`is_delete: 0`。\n\n```ts\nconst page = await UserModel.pages(db, {\n  p: 1,\n  pc: 20,\n  lik_name: '张',\n});\n\n// {\n//   data: [...],\n//   count: 100,\n//   pages: { total: 5, now: 1 }\n// }\n```\n\n`p <= 0` 时会抛出 `\"页码请从第一页开始\"`。\n\n### cursor_pages\n\n游标分页，适合深翻页。默认游标字段为 `id`，内部使用 `cursor_field > decodedCursor` 和升序排序。\n\n```ts\nconst first = await UserModel.cursor_pages(db, {\n  pc: 20,\n}, 'id');\n\nconst next = await UserModel.cursor_pages(db, {\n  pc: 20,\n  cursor: first.next_cursor,\n}, 'id');\n```\n\n返回结构：\n\n```ts\n{\n  data: [],\n  next_cursor: string | null,\n  has_more: boolean,\n}\n```\n\n### get_by_ids\n\n按 `id` 查询。传单个 id 返回单条记录，传数组返回列表。\n\n```ts\nconst user = await UserModel.get_by_ids(db, 'u_1');\nconst users = await UserModel.get_by_ids(db, ['u_1', 'u_2']);\n```\n\n第三个参数为 `true` 时会追加 `for update`：\n\n```ts\nawait db.transaction(async trx => {\n  const user = await UserModel.get_by_ids(trx, 'u_1', true);\n});\n```\n\n### is_exist\n\n查询第一条匹配记录。不存在且传入错误信息时抛出该错误。\n\n```ts\nconst user = await UserModel.is_exist(db, { id: 'u_1' }, '用户不存在');\n```\n\n### check_repeat\n\n检查重复。若存在匹配记录，则抛出传入的错误信息。\n\n```ts\nawait UserModel.check_repeat(db, { name: '张三' }, '用户名已存在');\n```\n\n### lock\n\n按 id 加锁查询，可配合事务使用。\n\n```ts\nawait db.transaction(async trx => {\n  const rows = await UserModel.lock(trx, ['u_1', 'u_2'], {\n    rt: ['id', 'age'],\n  });\n});\n```\n\n## 更新和删除\n\n### update_by_ids\n\n按 id 更新，支持单个 id 或 id 数组。只校验传入字段。\n\n```ts\nawait UserModel.update_by_ids(db, 'u_1', { name: '新名字' });\nawait UserModel.update_by_ids(db, ['u_1', 'u_2'], { age: 30 });\n```\n\n### update_by_query\n\n按条件批量更新。只校验传入字段。\n\n```ts\nawait UserModel.update_by_query(db, {\n  min_age: 18,\n}, {\n  age: 20,\n});\n```\n\n这是批量更新接口，条件过宽时会影响大量数据，业务代码中应明确限制条件。\n\n### update_field_number\n\n对数值字段做原子自增或自减。\n\n```ts\nawait UserModel.update_field_number(db, 'u_1', { age: 1 });\nawait UserModel.update_field_number(db, 'u_1', { age: -1 });\n```\n\n### update_field_offset\n\n设置 `field = base_field + offset`。\n\n```ts\nawait UserModel.update_field_offset(db, 'u_1', 'balance', 'frozen_balance', 100);\n```\n\n如果 `field` 和 `base_field` 不同，业务并发场景下建议放到事务和锁内处理。\n\n### delete_by_ids\n\n物理删除。\n\n```ts\nawait UserModel.delete_by_ids(db, 'u_1');\nawait UserModel.delete_by_ids(db, ['u_1', 'u_2']);\n```\n\n### delete_by_query\n\n按条件物理删除。\n\n```ts\nawait UserModel.delete_by_query(db, { max_age: 10 });\n```\n\n## 聚合方法\n\n```ts\nconst count = await UserModel.count(db, { is_delete: 0 });\nconst total = await UserModel.sum(db, 'amount', { is_delete: 0 });\nconst avg = await UserModel.avg(db, 'amount', { is_delete: 0 });\nconst max = await UserModel.max(db, 'amount', { is_delete: 0 });\nconst min = await UserModel.min(db, 'amount', { is_delete: 0 });\n```\n\n分组聚合：\n\n```ts\nconst sumByStatus = await UserModel.group_sum(db, 'amount', ['status'], {\n  is_delete: 0,\n});\n\nconst countByStatus = await UserModel.group_count(db, ['status'], {\n  is_delete: 0,\n});\n\nconst avgByStatus = await UserModel.group_avg(db, 'amount', ['status'], {\n  is_delete: 0,\n});\n```\n\n## 查询参数语法\n\n查询方法的 `query` 参数会被转换为 Knex 条件。保留字段包括 `p`、`pc`、`od`、`rt`、`nrt`、`sub`、`cursor`。\n\n### 普通条件\n\n```ts\nawait UserModel.get(db, {\n  id: 'u_1',\n  status: 'enabled',\n});\n```\n\n等价于：\n\n```sql\nwhere id = 'u_1' and status = 'enabled'\n```\n\n### 字段选择\n\n```ts\nawait UserModel.get(db, {\n  rt: ['id', 'name'],\n});\n\nawait UserModel.get(db, {\n  nrt: ['password'],\n});\n```\n\n`rt` 只返回指定字段，`nrt` 排除指定字段。两者都支持数组或逗号字符串。\n\nJSON 子字段可用点号提取，返回别名会把点号替换为双下划线：\n\n```ts\nawait UserModel.get(db, {\n  rt: ['profile.city'],\n});\n\n// 返回字段别名：profile__city\n```\n\n### 排序\n\n```ts\nawait UserModel.get(db, {\n  od: '-created_at,name',\n});\n\nawait UserModel.get(db, {\n  od: ['-created_at', 'name'],\n});\n```\n\n字段名前加 `-` 表示降序，否则为升序。\n\n### OR 条件组\n\n`sub` 用来表达一组 OR 条件：\n\n```ts\nawait UserModel.get(db, {\n  status: 'enabled',\n  sub: [\n    { name: '张三' },\n    { name: '李四' },\n  ],\n});\n```\n\n大致等价于：\n\n```sql\nwhere status = 'enabled' and (name = '张三' or name = '李四')\n```\n\n### 查询前缀\n\n| 前缀 | 示例 | 含义 |\n| --- | --- | --- |\n| 无前缀 | `{ name: '张三' }` | `name = '张三'` |\n| `lik_` | `{ lik_name: '张' }` | `name like '%张%'` |\n| `inc_` | `{ inc_id: ['u_1', 'u_2'] }` | `id in (...)` |\n| `nin_` | `{ nin_id: 'u_1,u_2' }` | `id not in (...)` |\n| `gt_` | `{ gt_age: 18 }` | `age > 18` |\n| `lt_` | `{ lt_age: 60 }` | `age < 60` |\n| `min_` | `{ min_age: 18 }` | `age >= 18` |\n| `max_` | `{ max_age: 60 }` | `age <= 60` |\n| `bet_` | `{ bet_age: [18, 60] }` | `age between 18 and 60` |\n| `non_` | `{ non_deleted_at: true }` | `deleted_at is null` |\n| `ntn_` | `{ ntn_deleted_at: true }` | `deleted_at is not null` |\n| `jlik_` | `{ 'jlik_profile.city': '北' }` | JSON 子字段 like |\n| `jbet_` | `{ 'jbet_profile.score': [60, 100] }` | JSON 子字段范围 |\n| `jlt_` | `{ 'jlt_profile.score': 60 }` | JSON 子字段小于 |\n| `jgt_` | `{ 'jgt_profile.score': 60 }` | JSON 子字段大于 |\n| `jnin_` | `{ 'jnin_profile.type': ['a', 'b'] }` | JSON 子字段 not in |\n| `has_` | `{ has_tags: 'vue' }` | JSON 文档或数组中搜索单个值 |\n| `hsm_` | `{ hsm_tags: ['vue', 'react'] }` | JSON 文档或数组中搜索多个值，OR 关系 |\n| `mls_` | `{ mls_tags: 2 }` | JSON 长度大于等于指定值 |\n| `ftl_` | `{ ftl_content: '关键词' }` | MySQL fulltext 自然语言模式 |\n| `ftb_` | `{ ftb_content: '+关键词' }` | MySQL fulltext 布尔模式 |\n| `emb_` | `{ emb_vector: [0.1, 0.2] }` | pgvector 相似度排序，并追加 `distance` 字段 |\n\n`inc_`、`nin_`、`bet_`、`jnin_` 既支持数组，也支持逗号字符串：\n\n```ts\nawait UserModel.get(db, { inc_id: 'u_1,u_2' });\nawait UserModel.get(db, { bet_age: '18,60' });\n```\n\nJSON 精确匹配也可以直接使用点号：\n\n```ts\nawait UserModel.get(db, {\n  'profile.city': '北京',\n});\n```\n\n## 参数校验工具\n\n### valid_param_type\n\n校验必填字段，并返回只包含指定字段的对象。\n\n```ts\nconst body = {\n  version: '1.0.0',\n  age: 18,\n};\n\nconst params = UserModel.valid_param_type(body, ['version', 'age']);\n```\n\n若字段不存在或值为 `undefined`，会抛出 `${label}为必填项`。字段类型错误会使用 Zod 校验规则和 `label()` 报错。\n\n### valid_update_param_type\n\n从 body 中挑选允许更新的字段并校验。默认只校验实际传入的允许字段，忽略 `null`、`undefined` 和未列入白名单的字段，但保留 `0`。\n\n```ts\nconst update = UserModel.valid_update_param_type(body, [\n  'name',\n  'age',\n]);\n```\n\n第三个参数传 `true` 时，所有允许字段都会变成必填：\n\n```ts\nconst update = UserModel.valid_update_param_type(body, [\n  'name',\n  'age',\n], true);\n```\n\n## ViewModel\n\n`ViewModel` 用于多表 JOIN 查询。它通过 `RELATION` 生成基础 join SQL，再把该 SQL 包成子查询 `base`，后续查询条件都作用在子查询字段别名上。\n\n### 定义 View Schema\n\n`ViewModel` 要求 schema 字段上存在 `table` 和 `field` 信息。可以直接给字段对象挂属性：\n\n```ts\nconst ViewSchema = Zod.object({\n  user_id: Zod.string().label('用户ID'),\n  user_name: Zod.string().label('用户名'),\n  role_name: Zod.string().label('角色名'),\n});\n\nViewSchema.shape.user_id['table'] = 'users';\nViewSchema.shape.user_id['field'] = 'id';\nViewSchema.shape.user_name['table'] = 'users';\nViewSchema.shape.user_name['field'] = 'name';\nViewSchema.shape.role_name['table'] = 'roles';\nViewSchema.shape.role_name['field'] = 'name';\n```\n\n如果字段来自某个 `Model` 的 schema，`Model` 构造函数会自动补充这些信息。\n\n### 创建 ViewModel\n\n```ts\nconst UserRoleView = new ViewModel(ViewSchema, {\n  form: 'users',\n  joins: [\n    {\n      type: 'left',\n      table: 'roles',\n      on: [\n        { table: 'users', field: 'role_id' },\n        { table: 'roles', field: 'id' },\n      ],\n    },\n  ],\n});\n```\n\n支持的 join 类型：`left`、`right`、`inner`。\n\n### ViewModel 方法\n\n`ViewModel` 支持以下读取和聚合方法：\n\n```ts\nawait UserRoleView.get(db, { lik_user_name: '张' });\nawait UserRoleView.pages(db, { p: 1, pc: 20 });\nawait UserRoleView.cursor_pages(db, { pc: 20 }, 'user_id');\nawait UserRoleView.count(db, {});\nawait UserRoleView.sum(db, 'amount', {});\nawait UserRoleView.avg(db, 'amount', {});\nawait UserRoleView.max(db, 'amount', {});\nawait UserRoleView.min(db, 'amount', {});\nawait UserRoleView.group_sum(db, 'amount', ['role_name'], {});\nawait UserRoleView.group_count(db, ['role_name'], {});\nawait UserRoleView.group_avg(db, 'amount', ['role_name'], {});\nawait UserRoleView.stats(db, 'amount', {});\nawait UserRoleView.is_exist(db, { user_id: 'u_1' }, '记录不存在');\nawait UserRoleView.check_repeat(db, { user_id: 'u_1' }, '记录已存在');\n```\n\n`ViewModel` 不提供写入、更新、删除方法。\n\n## Zod 扩展\n\n库导出的 `Zod` 是对 `zod` 的增强版本。\n\n### label\n\n设置字段中文标签，供错误信息使用。\n\n```ts\nZod.string().label('邮箱').email('邮箱格式错误');\n```\n\n### valid\n\n从对象 key 生成枚举。\n\n```ts\nconst MAP = {\n  NONE: '无',\n  NORMAL: '正常',\n} as const;\n\nconst schema = Zod.object({\n  status: Zod.string().valid(MAP).label('状态'),\n});\n```\n\n注意：`valid(obj)` 使用的是对象的 key，而不是 value。上例允许值为 `'NONE' | 'NORMAL'`。\n\n### meta\n\n给 Zod 字段写入 `_def._meta`。\n\n```ts\nZod.string().meta({ index: true });\n```\n\n当前支持的 meta：\n\n```ts\n{\n  index?: true,\n  string_type?: 'char' | 'varchar' | 'text' | 'mediumtext' | 'longtext',\n  decimal?: {\n    precision: number,\n    scale: number,\n  },\n  vector?: true,\n}\n```\n\n这些元信息目前主要是供外部代码读取，`Model` 本身不会自动建表或创建索引。\n\n### 字段类型快捷方法\n\n```ts\nZod.char(32);          // string().length(32)，meta string_type=char\nZod.varchar(255);      // string().max(255)，meta string_type=varchar\nZod.text();            // string().max(20000)，meta string_type=text\nZod.mediumtext();      // string()，meta string_type=mediumtext\nZod.longtext();        // string()，meta string_type=longtext\nZod.decimal(10, 2);    // number()，meta decimal={ precision: 10, scale: 2 }\nZod.vector(1536);      // number array，长度固定为 1536，meta vector=true\n```\n\n类型声明里还声明了原型方法 `char()`、`varchar()`、`text()`、`medium_text()`、`long_text()`、`decimal()`、`vector()`，但当前源码只实现了 `Zod.char()` 这类静态方法，没有实现这些原型方法。\n\n## 错误处理\n\nSchema 校验失败时会直接抛出字符串，而不是 `Error` 实例：\n\n```ts\ntry {\n  await UserModel.create(db, {\n    id: 'u_1',\n    name: 123,\n    age: 18,\n    is_delete: 0,\n  });\n} catch (err) {\n  // 例如：\"姓名类型错误\"\n  console.error(err);\n}\n```\n\n内置错误映射：\n\n| Zod 错误 | 报错格式 |\n| --- | --- |\n| `invalid_type` | `${label}为必填项` 或 `${label}类型错误` |\n| `too_small` | `${label}长度或数值太小` |\n| `too_big` | `${label}长度或数值太大` |\n| `invalid_enum_value` | `${label}不是允许的枚举值` |\n\n其他 Zod 错误会拼接为 `${label}${message}`。\n\n## 软删除约定\n\n`get()`、`pages()`、`cursor_pages()`、`is_exist()`、`check_repeat()` 默认会带上 `is_delete: 0`。`create()` 和 `create_or_update()` 默认会补充 `is_delete: 0`。\n\n因此，业务表的 Schema 必须声明 `is_delete` 和 `create_time` 字段：\n\n```ts\nis_delete: Zod.number().label('删除标记'),\ncreate_time: Zod.date().label('创建时间').optional()\n```\n\n## JSON 字段\n\n设置 `JSON_FIELDS` 后，写入和更新会对指定字段执行 `JSON.stringify`：\n\n```ts\nconst ArticleModel = new Model('文章', 'articles', ArticleSchema, {}, {});\nArticleModel.JSON_FIELDS = ['tags'];\n\nawait ArticleModel.create(db, {\n  id: 'a_1',\n  title: 'Hello',\n  tags: ['ts', 'node'],\n  is_delete: 0,\n});\n```\n\n读取 MySQL 原生 `JSON` 列时，mysql2 默认已将其解析为 JavaScript 值，因此所有读取方法都不再手动执行 `JSON.parse`。\n\n如果 mysql2 连接显式设置了 `jsonStrings: true`，或者数据库列是保存 JSON 文本的 `TEXT`/`VARCHAR`，需要由业务层统一解析。\n\n## 向量搜索\n\n查询参数支持 `emb_字段名`，用于 PostgreSQL pgvector 相似度排序：\n\n```ts\nconst rows = await EmbeddingModel.get(db, {\n  pc: 10,\n  emb_vector: [0.1, 0.2, 0.3],\n});\n```\n\n内部会追加：\n\n```sql\nvector <=> '[0.1,0.2,0.3]' as distance\norder by vector <=> '[0.1,0.2,0.3]'\n```\n\n实际使用前需要确保数据库已安装 pgvector，字段类型和索引也由业务项目自行维护。\n\n## 建议实践\n\n1. 每张业务表都显式声明 `id` 和 `is_delete` 字段，匹配库默认行为。\n2. 对外部请求参数先使用 `valid_param_type()` 或 `valid_update_param_type()` 白名单过滤，再调用写入方法。\n3. 批量更新和批量删除必须设置明确条件，避免空对象或过宽条件影响全表。\n4. 事务内需要锁行时，传入 transaction 对象，并使用 `get_by_ids(..., true)` 或 `lock()`。\n5. JSON、全文索引、pgvector 查询依赖具体数据库能力，跨数据库使用时需要验证生成 SQL。\n","readmeFilename":"README.md"}