{"_id":"@xiangnanscu/model","_rev":"30-b9413d83c7d3097194e7e929047d5867","name":"@xiangnanscu/model","dist-tags":{"latest":"0.36.0"},"versions":{"0.1.0":{"name":"@xiangnanscu/model","version":"0.1.0","author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.1.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"70b17cdb83b078a921390d0f936a42bdccf25028","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.1.0.tgz","fileCount":5,"integrity":"sha512-vQs/raKZjomDeIS9FAcsFIrtwfAZrqWkE+XVTIewIfe1IUwwUfb8Q/HHyzGoVvi07gmbrwwDvzs1BLnGrpeGSg==","signatures":[{"sig":"MEUCIQDb3ZhgEeWuzJnVQLub4W7ZjxoOvJZKU9pI7Nvqva2csQIgLoUaCxMJjPdLVzpH/TSQS9uRnG/fv1l+KshFPQCJngE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":32969,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi0vvWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrx+BAAj8C9MoUML5UAUPYQANbxER+dgT24c9oJSmYzWDo42oxaEUsM\r\nnO9VbgKt5NWPqnrSYMDrY4rua+pjs5M9+Z6ZDF7EIWwCkdjFqUcw846/owZ0\r\nmbOFzXRCcwXm/SBm6i2rVMaPpI7dLn8F3wCe6wPpiXGUmvI5BPnU4Kbf/+EG\r\nO2mqrraC6yd4FUep5vCeCSovPYa9hQD3Ld8mulaewe7HGa0Uy4GE1W81KygE\r\n45TGnnxd5kub0mRbBdQeBw5XSDXeP3Tb9Wp5jqiHDfflFj6wvuYC+kT88waD\r\nJYcE4VGses/cKirPJpJMxfxieFjR6FSui2+SfLYqb/7mdZ6HKNwj0+N8g7KQ\r\n0kpH8zvgYrgBfPszMdxZll22J6npQ894+XF8ooJJ1x3odf6Ww4sIohGOoZoZ\r\n1sRWOg1tjmhl0KPquR2gy/nPsruZxaJ9hyrNGlrWHwXpHAywRi9E6nJpJlOF\r\n1WOQc/vQcvn9ct+PpIQ1qFlCL1Y64CvwAOffFnERfFkpfbTXrMbpmNiktIhL\r\noSNEY7yCFwIPnRowFCr3EeL9Ic/ugWHdopitywO0METii53pP4Rj7fOY1at4\r\n2v60amEzYvwAZslRW/8H9sWv+5sBo5IqYAPw/UfcJVJ9XNfI6z/d3d9e2itk\r\nHugd7ZCzE3gM5q8tjuz8FttKH1v6+X0Zx9s=\r\n=pVZM\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.m?[jt]sx?$","transform":{}},"main":"src/model.mjs","gitHead":"aebced7c28be8e0b2cf0cee2a276dc4a2af81a24","scripts":{"rr":"npm run rename && npm run replace","dev":"vite","push":"git add . && git commit -am \"${msg:-push}\" && git push --push-option=${push_option:-nothing}","test":"yarn node --experimental-vm-modules $(yarn bin jest)","build":"vite build","rename":"rename s/sql/model/g src/*","preview":"vite preview","release":"push_option=release npm run push","replace":"find .  -type d \\( -name .git -o -name node_modules \\) -prune -o  -type f  -exec  sed -i s/model/model/g {} \\;","prerelease":"npm --no-git-tag-version version minor"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"8.11.0","description":"model","directories":{},"_nodeVersion":"16.16.0","dependencies":{"@xiangnanscu/sql":"^0.3.0","@xiangnanscu/field":"^0.5.0","@xiangnanscu/modelsql":"^0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.2.25","jest":"^28.1.2","vite":"^2.9.9","@vitejs/plugin-vue":"^2.3.3"},"_npmOperationalInternal":{"tmp":"tmp/model_0.1.0_1657994197899_0.7020282593916582","host":"s3://npm-registry-packages"}},"0.5.0":{"name":"@xiangnanscu/model","version":"0.5.0","author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.5.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"a6065face67f214b8f17d6d157e978d61ca60a05","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.5.0.tgz","fileCount":6,"integrity":"sha512-kdFs9DAk7nGbsTUSr/+Jqmat0Fy7EN3pUjkDnOnMkOKcqQJg417/nAoSkJ15rGESTtGX+jw0+SG5dvskTzvuUg==","signatures":[{"sig":"MEQCIF54Q2h4HzkfyFoBeS/pjNEwKQIm+3y2zjm9+jR7fj6bAiBN/XbNfXUu0FS5bKg6wO1Jgw+w4jtxd9US1QRQuo2LDA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":34303,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi1ibFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqIMw/+PITZweL6RyQSOgSK3EFaDomsM1hEmwEFd2sQD2LIruBP4ODN\r\nItHvH1PxexczPFIBGGp1BupLk37cj315SVJaeX0hwXMHvmKi4kqBrC3bEnZw\r\npTlKxb6s7BCxOWclRl0khX2RjAAzjkD0qAdTD2OoQd1+umfb0R3hBuubDN3M\r\nHZUz0isL7hKRjaVTsznXJhwh1KDqT8iY7CgoXmzRueY66qzOQAFdZEBKUwqH\r\nCRUE90Z2+fXWl9Iqu4dtvjBIRwGnMLBsXueABWj0OSgHT/iiWbTgH68zoTMi\r\nV07VYd16CK/xCaF4q+ZH1Jguzxved0naBxQ/3PEBh6B3MbRbZRRgLO8o/9/c\r\ntwAKH3Fq+uCv8jpdhbwVkRvi6AzVH9VddC4Lngw8F3Vqm7irTu3nXY5EfVPy\r\n5s/nxEN+R7TJntw3piHeSU7xr6T/kGjSpUL6xUvk+YjodxkL87m1DIZjkW8h\r\nS43DfW30EzYy+cFTIFXQiBRkKFxkDoh6PLBEJHCgU/uZeIFJTpwHyEzdjcfW\r\njyUR7mJjbKXBpiXlooZNVN7iA4e6KEcQqa9ktEIXUf9/zMYLLH86UD8FPbvH\r\negjuYMErdIetbJNdB+TR50VFOU8IGWr5FNhBXYFCnPz29679JxVz5CfrMikb\r\nCT5OPgrlKh1RBBED12Wo/7HB/xtHg1fmPi8=\r\n=AqIJ\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.m?[jt]sx?$","transform":{}},"main":"src/model.mjs","gitHead":"11f4a66605f2088c99431af6472e07b8fe745496","scripts":{"rr":"npm run rename && npm run replace","dev":"vite","push":"git add . && git commit -am \"${msg:-push}\" && git push --push-option=${push_option:-nothing}","test":"yarn node --experimental-vm-modules $(yarn bin jest)","build":"vite build","rename":"rename s/sql/model/g src/*","preview":"vite preview","release":"push_option=release npm run push","replace":"find .  -type d \\( -name .git -o -name node_modules \\) -prune -o  -type f  -exec  sed -i s/model/model/g {} \\;","prerelease":"npm --no-git-tag-version version minor"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"8.11.0","description":"model","directories":{},"_nodeVersion":"16.16.0","dependencies":{"postgres":"^3.2.4","@xiangnanscu/sql":"latest","@xiangnanscu/field":"latest","@xiangnanscu/modelsql":"latest"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.2.37","jest":"^28.1.3","vite":"^3.0.2","@vitejs/plugin-vue":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/model_0.5.0_1658201797400_0.36699948296550033","host":"s3://npm-registry-packages"}},"0.6.0":{"name":"@xiangnanscu/model","version":"0.6.0","author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.6.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"72855ce6c26677f5abf6f7bf8415c5c8b13ab8fa","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.6.0.tgz","fileCount":5,"integrity":"sha512-kPdZS5aFlmW1/RthHiKhG+CDHXB/qFnxaP2v03V7yp+7IGlElZjLKfheOGmTZXfp4mD+JR5BaCG5XHwCczrdcQ==","signatures":[{"sig":"MEUCIQCXOAICr9dDgsgm6Rs93thuRqC0uDKW/fiVJcRU0lCssAIgfQ42eCEv5x/kjuuOwYCADx9LBAL+Y85TMbxuf7mORUY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31987,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi12GVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoYqhAAjr8kidb9G71T7iN90nGEoRsZ07KLYQy2thAnNTITOZdPE3nE\r\nuVj5jOveoUTD/rjM69tEQUTSCkQn9/7UG9c1u4rB8q1bPuktGt0590FeGgU7\r\nbevjj29OOsigLajn2l2/pm2Ss0v5UamMjodtd+ff/LAErm6ZFFBIFnhROd5P\r\nVxyLjm4ZPv2UtC/+cbHAmeEx7s63qLU41+7rQ90wC8yc2kEj9Y+GSXOQVwP7\r\nrNMNeuCe5udSCg5TDj2eq1chy0UwKb4RiDnKOuAB1IVbxAtGZO0hAovBysKJ\r\n4d/PflfBT67GMuP4inh2DkBr2yAZ46r4R8qV32fsVceKEDCMRTX/I5+zshVi\r\nPxt7jTG2g8kdwepiL1bdJU1bOnR0l0Hj79bwrj+kKHc4Qn17e7jE/+Oj+AeP\r\nLM0mb53awXLC/fRamF9JA1O5QFZbf0qhvF+UhyJsLXULbdsiJImndMxDTC37\r\nZ9jVNhcEF1pQ1uNGOeb9rrFOW5hlyBYQKIoBjmqgMvr4dFmcg0mtEHmeN28o\r\nuvRq55LtvmsgYNay1ciXkgbsFf5AVHeXhPiOJWbE+i80bupAUcWh8fbEhnFB\r\nIvU3S+/uFwHSYL/NPYP8wc68o0hmtnN7iPijwXDJTnP3yefUvx/qJk3qcR5K\r\naGHt/C33yxv8qsx5hOBifFPdqII0Jhq2PaM=\r\n=BgEf\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.m?[jt]sx?$","transform":{}},"main":"src/model.mjs","gitHead":"1ad6faa9af153e3e5b4ea1e42badca6f07766157","scripts":{"u":"ncu -u && npm install","rr":"npm run rename && npm run replace","dev":"vite","push":"git add . && git commit -am \"${msg:-push}\" && git push --push-option=${push_option:-nothing}","test":"yarn node --experimental-vm-modules $(yarn bin jest)","build":"vite build","rename":"rename s/sql/model/g src/*","preview":"vite preview","release":"push_option=release npm run push","replace":"find .  -type d \\( -name .git -o -name node_modules \\) -prune -o  -type f  -exec  sed -i s/model/model/g {} \\;","prerelease":"npm --no-git-tag-version version minor"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"8.11.0","description":"model","directories":{},"_nodeVersion":"16.16.0","dependencies":{"postgres":"^3.2.4","@xiangnanscu/sql":"^0.6.0","@xiangnanscu/field":"^0.7.0","@xiangnanscu/modelsql":"^0.11.0"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.2.37","jest":"^28.1.3","vite":"^3.0.2","@vitejs/plugin-vue":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/model_0.6.0_1658282389070_0.8060636991203196","host":"s3://npm-registry-packages"}},"0.7.0":{"name":"@xiangnanscu/model","version":"0.7.0","author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.7.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"9092b81e2757c0b0a24650ba4111d81962e5dd97","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.7.0.tgz","fileCount":5,"integrity":"sha512-F9KzcoW1a/X5vbS+jvewjMdDGpNHQfw+IlhRM0n/n3NnFD9MwK58+pZb5L1yC5G8+b6VDp/y+Jav6FzYpd2ejw==","signatures":[{"sig":"MEUCIQDImPQN1TvG2PsDiENYcqeAjNwRMg0g/P8vO/k4zAKU+QIgL02keEiPI76V0Sv5C5nXWstjbDPImjHYMMTezWFcXIw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":35466,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2ApLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp3nRAAm2pJMSPp5eH26ofSYWHlCXItV9bNlQO3KnLD4O8/D3a0reys\r\n0fskDrUUjOhqeCda1VgZssWbaNMhGs/WPMzA9ZMv0ZNVTkoBtEQYoukdkcw6\r\nmYlIp1DcW+4i5cPqL/A3fMVzhOUmKI5T1S+W50oHg3yb4pmtKh7L/87GprUV\r\n9/ueUlTZFLl5xAmw8eVTx1gvdsspDGbsN42fKRYN8JgFt4kcIr+TiBxC8rb0\r\nGPEU49hyKaoFm1LRHk63+wL3xacuAw2X2crImiM8Hr5gAQJYW4bYq3oXwGSE\r\nSx8gc1qCwhE5iaSAduvBQC6VFIKhKzXD8vOFfkQihMt59cgGWllfvQCgLpBD\r\n0jcubsjliDMpPm0KDebpxt/Rl8jIf6rCO8X99rBHpF3fxbhVGiFDD60yREWx\r\nGApyfxGxxyAJv/1IcMAv9e9pLsg+lBQmQ2Rrihhbw/xrdCHv5e6PRWcFJe35\r\nqvNG5vk1PyZjiTCOH0uPf+45AwXzb6YHQHLZgdJlQ0OMivQqpeTu0495RhZB\r\nC6W5B5Wz37BuWXs+BoUACuMax4hlEa93jpgIElDWCFWW7+I+nWwHV9knWxLu\r\nByvTZvhqtGuMkCUC41tEv/xHr+untFFdC0L6Ua8PCwivTy96V8fWYXg2BT79\r\nCCzQ4IiqLqfoRMr4XcHpOsnkWs6ey6kQlHI=\r\n=+K7c\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.m?[jt]sx?$","transform":{}},"main":"src/model.mjs","gitHead":"e57f8b51dbc1e94ba50552d22f89c7a02d0d3042","scripts":{"u":"ncu -u && npm install","rr":"npm run rename && npm run replace","dev":"vite","push":"git add . && git commit -am \"${msg:-push}\" && git push --push-option=${push_option:-nothing}","test":"yarn node --experimental-vm-modules $(yarn bin jest)","build":"vite build","rename":"rename s/model/model/g src/*","preview":"vite preview","release":"push_option=release npm run push","replace":"find .  -type d \\( -name .git -o -name node_modules \\) -prune -o  -type f  -exec  sed -i s/model/model/g {} \\;","prerelease":"npm run u && npm --no-git-tag-version version minor"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"8.11.0","description":"model","directories":{},"_nodeVersion":"16.16.0","dependencies":{"postgres":"^3.2.4","@xiangnanscu/sql":"^0.6.0","@xiangnanscu/field":"^0.8.0","@xiangnanscu/modelsql":"^0.11.0"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.2.37","jest":"^28.1.3","vite":"^3.0.2","@vitejs/plugin-vue":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/model_0.7.0_1658325579228_0.7328245477783704","host":"s3://npm-registry-packages"}},"0.8.0":{"name":"@xiangnanscu/model","version":"0.8.0","author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.8.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"8b85a6b41bf061423add09581bbc5174b6f0a50f","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.8.0.tgz","fileCount":5,"integrity":"sha512-qca4DR4H86FZOHBYroesUWARNwtDMS8Jyg7PWBzVtYwl4rFTkGZX5Hf7Js8TpmRzibCmu3T6hI7JXT2lHao2WQ==","signatures":[{"sig":"MEUCIQD9Veid9Ov+abNYA9E5Nc1svLkoW/N0DqJ917zlYeHryAIgHWiYLNXlpZ5N/IeodS84GyGpHTIcqlLjndmTQp8RWH0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36155,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2CwVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqHpg/8Dr+XY/WLnbkBK1TPf1A74Td2Xo/PsbLJwsVxIrZlWmktAGtH\r\n6SUe5tRDB959wwwTrhW2+Y9S3V5aWSz89bmyfE48czCeoqcB8Tv6CUdzqye+\r\npV8qmLbY+wQnFigKE44FwMwwhYBAsFxIGcSKhvUCUpH37+tQFILFIEvxscpZ\r\ndyUGBjhOmC+9/5R8fnv+RiAoosVqzTYmF5Pdo02I8tqAb/lfPMbp4ViGd/fb\r\nEecZJnSLXOxNw4WvqfNQZuko2o++d1Bmm5DvX4jnRb4FXS/2sTyz3mYcMg7A\r\n8YUasMGfnVWLAwV0wL0U63zoumlAuBe9Gd5IY3UW45e1evUwaVaz6jEAyfGx\r\nOgzPbICgEx8fB6FK4SMRHiccc1IbyTNR1iyExhM+NDtFFFIwNhBcn60cAtc4\r\nf41y1b/cdgtsNevkIOfsqR7Hcw2eAfXnPAt2NxkixUWCcC2xmd+ZCuBaoB66\r\nwq6O76jzgo7SJo+kBNaN9MUsKbMC0fvDSjdEb9Lq3KuOUAWpURDey4QK1iiO\r\nLlM/HgHQTW1c8/1JDXXrybtrzYO6AkXmsOXOPBN02xn9oaertl/cFmRmlktp\r\ntzCeXLHkD0VPduq+ngr3aaeRT7D60cRLFkzpBj+tVRgQ0HmOvDfcoxQatAM1\r\nt79x6DKUkGwQi41dI1bE4VM4FeU4/iFVzhA=\r\n=yVrw\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.m?[jt]sx?$","transform":{}},"main":"src/model.mjs","gitHead":"b2f063a34f163091f533e62dcb6b5bf7d748f675","scripts":{"u":"ncu -u && npm install","rr":"npm run rename && npm run replace","dev":"vite","push":"git add . && git commit -am \"${msg:-push}\" && git push --push-option=${push_option:-nothing}","test":"yarn node --experimental-vm-modules $(yarn bin jest)","build":"vite build","rename":"rename s/model/model/g src/*","preview":"vite preview","release":"push_option=release npm run push","replace":"find .  -type d \\( -name .git -o -name node_modules \\) -prune -o  -type f  -exec  sed -i s/model/model/g {} \\;","prerelease":"npm run u && npm --no-git-tag-version version minor"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"8.11.0","description":"model","directories":{},"_nodeVersion":"16.16.0","dependencies":{"postgres":"^3.2.4","@xiangnanscu/sql":"^0.6.0","@xiangnanscu/field":"^0.8.0","@xiangnanscu/modelsql":"^0.11.0"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.2.37","jest":"^28.1.3","vite":"^3.0.2","@vitejs/plugin-vue":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/model_0.8.0_1658334229076_0.6913976580511185","host":"s3://npm-registry-packages"}},"0.9.0":{"name":"@xiangnanscu/model","version":"0.9.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.9.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"ab06440cd3c2ade246db07ac2572d8ec6e7de59f","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.9.0.tgz","fileCount":5,"integrity":"sha512-r5YcHUE0W40EzDLiNOWrF9qx5UFGgB5Czel/qQbv1eNCUHADFxxH5BbBx412q49CVfUdu1EpAJSWM6ZFDO6QFA==","signatures":[{"sig":"MEQCIFzp3EKaKv6mSufOTTHOLrZbS/mQyiDsT/LHiQmihem5AiAzRjfLxsvcyneiqU4XEwFGASoe226gCqGN3+5H1qH3NA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2K8SACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqbJg/8Cs1UCYSxlV54qxIrUdRGejhfpOSPXTqsONymQZDU/C3Kbsk7\r\ny2GxkA5NM+mZhIGdM3VxZ4AutfdBVbcOQLCVMmSI7RiCsQ0ctS6+i9zaiuqV\r\n+Q4gdaLZbKSySqtZ+mzJ0TrDzMOq1Jf8u3kJ2hzmnZ9tV1ODBDatt1Re4CdF\r\n6vDXawYDVSh435OaF57Nen8eJeNF9Zbt4T+Yr2gESuC+x4J/pldkRZS0IELz\r\nP8ipyepu7VKH9BN9U7Zryrqri3cGd9J8opzfdjlhJkPt/SXj2cRcZZX9RDHt\r\nhLxy9hK88zxaDunjl0RpAkXHbtROPbOjUu8e1toKXXgdK0pJa/UotStwrXRM\r\nVZr2IPdi6ke0xSk129s7/a+wdaEziOpYOwOPlS6cfHURn2mDwNyFCkUJxX37\r\nW1NG0Mr5SggffgvFLtqJgXmF3Ge5sVPGq6bupW8WOEiFElqUiNDcGSCEpplo\r\nrVxcwbAgBYWsogCwuRwZwF7GaX3fTeMFybRjk34d8ERdcX9axzFKfW8vkS3E\r\n69M78yyqaOgyJf8lgxRn4If4bhyZZFuleK59Jg1kEjdkggPJZ142LnGncO8b\r\nsZGPTIIFHab5tYT8cBA6u9aQQ8w04PwitZ+Y68n8ER6qMOz0wiNyqqxtl457\r\n4ON56aUPBw/zDEKcdBm5Zbwf6GQ15xYiI/s=\r\n=aYWy\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.m?[jt]sx?$","transform":{}},"main":"src/model.mjs","gitHead":"aa3da2208f464eadcb5855cba0ffe171895fc445","scripts":{"u":"ncu -u && npm install","rr":"npm run rename && npm run replace","dev":"vite","push":"git add . && git commit -am \"${msg:-push}\" && git push --push-option=${push_option:-nothing}","test":"yarn node --experimental-vm-modules $(yarn bin jest)","build":"vite build","rename":"rename s/model/model/g src/*","preview":"vite preview","release":"push_option=release npm run push","replace":"find .  -type d \\( -name .git -o -name node_modules \\) -prune -o  -type f  -exec  sed -i s/model/model/g {} \\;","prerelease":"npm run u && npm --no-git-tag-version version minor"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"8.11.0","description":"model","directories":{},"_nodeVersion":"16.16.0","dependencies":{"postgres":"^3.2.4","@xiangnanscu/sql":"^0.6.0","@xiangnanscu/field":"^0.8.0","@xiangnanscu/modelsql":"^0.11.0"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.2.37","jest":"^28.1.3","vite":"^3.0.2","@vitejs/plugin-vue":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/model_0.9.0_1658367761887_0.9621501593015191","host":"s3://npm-registry-packages"}},"0.10.0":{"name":"@xiangnanscu/model","version":"0.10.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.10.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"37916a92a25f21b34883022a6b9edbcd385b2ea8","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.10.0.tgz","fileCount":5,"integrity":"sha512-GniOX/JXKl64W5tdiaORAzvKNQkYzjvmBYMWbyrQUnHpQdj1CO4e77HV5tTXfbFLbX3wxTjsfrLe9XpVtYlmmg==","signatures":[{"sig":"MEUCIQCJbnhBAAZWqHr2+35fHEp1RmsbuRCopi63zFczVPH9+gIgPCPzoTDmyuXdXOIL4b/ezPqOEbY46peCxdRUw8loLp4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36468,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2QK+ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo++Q/7BeU8B+eKsPtYklwIcS8/oZR5HxexNvyOUCX+gJSLjT16lZDR\r\nKDYhoEe5Ol/+dM1Wq2R4yNk5UAGKwuw7wsi+NOLOMPPUY8/v6Ps3RAP5N3N+\r\n0IHFB6fu2d1URfySUCzDrJMA5MLAnWQ6hDxUgLdvExF1BvO/8VNOCl4sXbsF\r\nrlARP+ohEBdu30v3DiSBTFkfi+XqfKw3ZllD/auI7YqoHynRHVn+gfZHV7Y6\r\nWPP+MBf6ZaqbKaBz2wc8s3rBXLOIxegQeyF7yXMqgdeY3cfQdZ33giTDxtC9\r\ng/fm+lggN42RcNSxn4mxZi4F6vnaVP47DmzsZXXc99PFR9GwrSXhfKj0IOsB\r\n1675J8r+ERiJANiYtxnm73B+Hen1mDBP5LgIT462DSSxXFiBn8NHxcP7PoMU\r\nhG1P3OkS1JWuQ+Oc7Ozjrsy9ldz3mUuxFwdv4CK1j0R0gnulGH55Ny03on5Y\r\nULhakksD4hgzCcfzLgNGAntTvA68dJKlHYCZECm3pHRMslhdR9/CQnxDfhjP\r\nr1yfxNWVoOffiaGNhhwRY2+PVKBecUvW8YQWeixgld1vuCRtffQUzlJa6ZuI\r\niCpih5YQAvJ4ZmFYmfT4jmrM0hzlulpcDn4LG3FITjQv6y7+Laxc8d5TYpKv\r\nJggUu8zDv0B6+h42VzxMBR//pzO/HlU+Igw=\r\n=xyE6\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.m?[jt]sx?$","transform":{}},"main":"src/model.mjs","gitHead":"cef386b34ed29e5be2a44574c71d6a3bf8e1d84a","scripts":{"u":"ncu -u && npm install","rr":"npm run rename && npm run replace","dev":"vite","push":"git add . && git commit -am \"${msg:-push}\" && git push --push-option=${push_option:-nothing}","test":"yarn node --experimental-vm-modules $(yarn bin jest)","build":"vite build","rename":"rename s/model/model/g src/*","preview":"vite preview","release":"push_option=release npm run push","replace":"find .  -type d \\( -name .git -o -name node_modules \\) -prune -o  -type f  -exec  sed -i s/model/model/g {} \\;","prerelease":"npm run u && npm --no-git-tag-version version minor"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"8.11.0","description":"model","directories":{},"_nodeVersion":"16.16.0","dependencies":{"postgres":"^3.2.4","@xiangnanscu/sql":"^0.6.0","@xiangnanscu/field":"^0.8.0","@xiangnanscu/modelsql":"^0.15.0"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.2.37","jest":"^28.1.3","vite":"^3.0.2","@vitejs/plugin-vue":"^3.0.1"},"_npmOperationalInternal":{"tmp":"tmp/model_0.10.0_1658389182307_0.8372150293084915","host":"s3://npm-registry-packages"}},"0.12.0":{"name":"@xiangnanscu/model","version":"0.12.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.12.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"d6203261b98f85c0c327ce65ee31f1b87d9fa3cb","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.12.0.tgz","fileCount":7,"integrity":"sha512-Fz9/0pMJ9Gg3OsZhQqvrTpikuuFZKH64AyStF0Rcgr1E4o6iPbp33acEbzd33scGWQWkUgCsHUmPuQ4E4WArNw==","signatures":[{"sig":"MEUCIQCBpdcVxv2Wx7fnEspvtuIrVVfmSNVl3Hnld348Vc299QIgNPMyt+TwXlfsR9lHh1BntYKCUqBHD50hQLo7odG69is=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":95565,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjf3MZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp5eBAAna/FFv5CwCPNjz2HurcZ+DJqTjaeTvT1GVePyR7bv7Busuy4\r\ng9xvLC/8Qcg4V5C9JgvtDIv4m/mI/QFLG7DXlaKcbUTyme8kbfeDCSimy1yD\r\nzbnAGkgR1U6YjJT42od+HohwN/CGLFCNk72g4ptoBI4xgJFQiRSGGsjHTO9N\r\nYaPyvQMieJ/iE6iNXlHQYgOD7KJjpz+ZgKkbkgmIAglOv363m7PkQNyaMpoG\r\nZ9ing8uICFPxDJCBDcIrM1LLcFAPB4SSG3cy+3Zim+4yauIlmguMfwuosO8n\r\n9vUmQ0vAPoS8UTdmmP0zAKpB5Bf6J7kzu+a0p+alX6SFfocsffm0/CPLnkk7\r\naXcXbMvE8A+H/qO1PH00hcHJMn+Uu3bi0wxpiZUQ9xDhP4xMyNw2uEMCZfCL\r\noU/ZNyL/toD/i1BHNrEtGsYVXgxqbNu4Gv8zHe9htikOm+TSRcY2060WGDSP\r\noOJdmD6u+7ZB/Cqq/B15n8uk+ejafokuh6nsdofVQTjWf7P78vh1lOnOmK+R\r\nzl5PY2c0llMdzYm66U3p86atibg3yx4B3dtVojqkJiqU4nUzuQELISe/QAUc\r\nMrNPHo7qOxNR/QWQID08c03uV+B+fB7LBG1PhdR34t2luf84+zzjlhQVcWED\r\nh/uiTdAn0JkWJNSRVHkwynJauuYXWoYlpRs=\r\n=XTZ3\r\n-----END PGP SIGNATURE-----\r\n"},"jest":{"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.m?[jt]sx?$","transform":{}},"main":"src/model.mjs","gitHead":"0acca6865150341656fd6d85ba1a5302c58a0045","scripts":{"rr":"npm run rename && npm run replace","dev":"vite","push":"git add . && git commit -am \"${msg:-push}\" && git push --push-option=${push_option:-nothing}","test":"yarn node --experimental-vm-modules $(yarn bin jest)","build":"vite build","commit":"git add . && git commit -am \"${msg-message: } $(date +%Y-%m-%d_%H:%M:%S)\"","rename":"rename s/model/model/g src/*","preview":"vite preview","release":"push_option=release npm run push","replace":"find .  -type d \\( -name .git -o -name node_modules \\) -prune -o  -type f  -exec  sed -i s/model/model/g {} \\;","reset:npm":"rm -rf node_modules && rm package-lock.json && npm install","prerelease":"npm --no-git-tag-version version minor"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"8.19.2","description":"model","directories":{},"_nodeVersion":"16.18.1","dependencies":{"postgres":"^3.2.4","@xiangnanscu/field":"^0.10.0"},"_hasShrinkwrap":false,"devDependencies":{"vue":"^3.2.37","jest":"^28.1.3","vite":"^3.1.8","eslint":"^8.22.0","vue-tsc":"^1.0.8","prettier":"^2.7.1","typescript":"~4.7.4","@types/node":"^16.11.68","npm-run-all":"^4.1.5","@vue/tsconfig":"^0.1.3","ant-design-vue":"^3.2.15","eslint-plugin-vue":"^9.3.0","@vitejs/plugin-vue":"^3.1.2","@vitejs/plugin-vue-jsx":"^2.0.1","@rushstack/eslint-patch":"^1.1.4","@vue/eslint-config-prettier":"^7.0.0","@vue/eslint-config-typescript":"^11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/model_0.12.0_1669296921354_0.9244629212239448","host":"s3://npm-registry-packages"}},"0.15.0":{"name":"@xiangnanscu/model","version":"0.15.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.15.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"3a49abe8a6531a30dcc87c7aa82e8fc09e27a40e","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.15.0.tgz","fileCount":7,"integrity":"sha512-/4UF2hHER27r8nHQ+Im7EmXz/CGB7IvmrBu9MpY4hWNUw34qK573Dm+wJ9IlXsFH/LvSqfiKroLmQtsPvVvWug==","signatures":[{"sig":"MEUCIQDkULb2g4Dh0ZwSaV8NVODcgPEIBmDxCfP4TsxS0Xtt1wIgA/zQPAcGvh5vUm74OupswLO/lONxoTScJguJtR5CH6E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":137716},"jest":{"testRegex":"(/__tests__/.*|(\\.|/)(test|spec))\\.m?[jt]sx?$","transform":{}},"main":"src/model.mjs","gitHead":"cb037dd5b4fa881dc190003167fc67b81765c402","scripts":{"rr":"npm run rename && npm run replace","dev":"vite","push":"git add . && git commit -am \"${msg:-push}\" && git push --push-option=${push_option:-nothing}","test":"yarn node --experimental-vm-modules $(yarn bin jest)","build":"vite build","commit":"git add . && git commit -am \"${msg:-} $(date +%Y-%m-%d_%H:%M:%S)\"","rename":"rename s/model/model/g src/*","preview":"vite preview","release":"push_option=release npm run push","replace":"find .  -type d \\( -name .git -o -name node_modules \\) -prune -o  -type f  -exec  sed -i s/model/model/g {} \\;","reset:npm":"rm -rf node_modules && rm package-lock.json && npm install","prerelease":"npm --no-git-tag-version version minor"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"8.19.4","description":"model","directories":{},"_nodeVersion":"16.20.2","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.2.37","jest":"^28.1.3","vite":"^4.4.9","eslint":"^8.22.0","vue-tsc":"^1.0.8","postgres":"^3.2.4","prettier":"^2.7.1","typescript":"~4.7.4","@types/node":"^16.11.68","npm-run-all":"^4.1.5","@vue/tsconfig":"^0.1.3","ant-design-vue":"^3.2.15","eslint-plugin-vue":"^9.3.0","vue-eslint-parser":"^9.1.0","@vitejs/plugin-vue":"^4.3.3","@vitejs/plugin-vue-jsx":"^3.0.2","@rushstack/eslint-patch":"^1.1.4","@typescript-eslint/parser":"^5.44.0","@vue/eslint-config-prettier":"^7.0.0","@vue/eslint-config-typescript":"^11.0.0"},"_npmOperationalInternal":{"tmp":"tmp/model_0.15.0_1693157023217_0.1187336290219092","host":"s3://npm-registry-packages"}},"0.16.0":{"name":"@xiangnanscu/model","version":"0.16.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.16.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"3954d8638f647c16635a8e9074f011387ea701c1","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.16.0.tgz","fileCount":3,"integrity":"sha512-6nrS7CVV+IIMa82N0IcDkCKLykHWkVQ+Tggl88yrpWIogDMX7p5Pm2S1DAl7j86e8zrzQolnljNyVjK2oq5RzQ==","signatures":[{"sig":"MEQCIBdeeCTdAS2Z6+97P4DWqEBF1FlJbArQlVqzD9u0HveNAiBS6D/KSUyuDAHiIqI7kIRlTqnlts+16HdQQRESiXmG4A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4425},"main":"lib/model/index.mjs","type":"module","gitHead":"77bd2d54a968b7af86cad847d9c948395dc51318","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"This template should help get you started developing with Vue 3 in Vite.","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/model_0.16.0_1721295202561_0.48949182143411174","host":"s3://npm-registry-packages"}},"0.17.0":{"name":"@xiangnanscu/model","version":"0.17.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.17.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"dc759b11f43cdd22c4343a2c7e22f15757153076","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.17.0.tgz","fileCount":3,"integrity":"sha512-LzWdB4stPeJnNELzVyVFTAsgmgULevgUOUHbHiNjpkRHGbr4463gsjQhHvjOVCGQSNx9wM06Oh2t0HCpfXHPMA==","signatures":[{"sig":"MEUCIQDBk25Px8b9gdyOIZdXt/2OB+LyTricXsXzOS5Fat9UqQIgRoeGtRB1viOepvxz/1je8bTwvPzzqJR7G91v0OcSWGE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":4425},"main":"lib/model/index.mjs","type":"module","gitHead":"30af083bb1bee002850593a0f49109e32fa51513","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"This template should help get you started developing with Vue 3 in Vite.","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/model_0.17.0_1721296404556_0.8708674402721521","host":"s3://npm-registry-packages"}},"0.18.0":{"name":"@xiangnanscu/model","version":"0.18.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.18.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"9b2ec9d43bce9194940a30f8136f374c4d45aab3","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.18.0.tgz","fileCount":7,"integrity":"sha512-Xo2HAhf6hClGUVxM1BT60inxduiaLXT8BFUV59JJqKAQgxbEsFFRiEDCAgEzneV37OtXm3ni6eirhUfkjyC0yw==","signatures":[{"sig":"MEUCIFdpFrGI89+ybM9XrUx9exZl2sKmIfFpR1bbS4GqpGHxAiEA99K/0mnu6+AEZuyIEJVD8VkgbB1A8k3WRARlpEXQHWY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":150478},"main":"lib/model/index.mjs","type":"module","gitHead":"3112613302b9b26913f6d9b90b142c18d6dbaac2","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"This template should help get you started developing with Vue 3 in Vite.","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/model_0.18.0_1721298027396_0.35274465711727565","host":"s3://npm-registry-packages"}},"0.19.0":{"name":"@xiangnanscu/model","version":"0.19.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.19.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"8a94fa50104d32e5f1b8b06ad31930c74a6ce3eb","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.19.0.tgz","fileCount":7,"integrity":"sha512-satcBY/FjGl7Mdq//wHuNB2peS1WHj4b2OIKlM8cGOe0ewQ0K17t0yv5MKuSd77x230kSGagF0U2Ev2xfU+ohg==","signatures":[{"sig":"MEQCIC+4NTCKYCEJNNLIQCgFIwTJQNLrC+ixUpkY1kS4pWIoAiAZlTlDsclvZcLd3k2ZaFkX2Wm0oe7Uok/4gaGHC3T6LA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":150594},"main":"lib/index.mjs","type":"module","gitHead":"e4bba359f9c274b98f9639863f0694d559547778","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"[@xiangnanscu/model](https://xiangnanscu.github.io/model/) straight forward and powerful orm library for postgresql.","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/model_0.19.0_1721362156923_0.6201050357078015","host":"s3://npm-registry-packages"}},"0.20.0":{"name":"@xiangnanscu/model","version":"0.20.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.20.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"86da71a5ea24eb44c310bbb5d745c52dfbe261f8","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.20.0.tgz","fileCount":7,"integrity":"sha512-hi3g5/IOG9QDWk3YXpod4hkMHpCdDRkM2R/LWlGH4EohS26YYAtPoYWUjfCDbNx4Klbho9MWAL5PmGKU+iCYyQ==","signatures":[{"sig":"MEUCIA7U2UhwRD/K3uQbe/8oaDhtiPrefA1/GKrCZxo8B+MEAiEAhZIfN5XNPTQPWdI8hoKzLeT3Sfy5yhqMlSmYzKwR4TY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":151088},"main":"lib/index.mjs","type":"module","gitHead":"9131145c8f084a538e3f0d5308b840bb1790a73b","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"[@xiangnanscu/model](https://xiangnanscu.github.io/model/) straight forward and powerful orm library for postgresql.","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/model_0.20.0_1721404096065_0.136511461840211","host":"s3://npm-registry-packages"}},"0.21.0":{"name":"@xiangnanscu/model","version":"0.21.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.21.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"4d894f8d9f89db2525c87297c8ddccb8d5aa058e","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.21.0.tgz","fileCount":7,"integrity":"sha512-GVV0a6BjaUCOc+pfKQ6yLRMnoobiGy7aY/gqEutIZ/kZfzAdtv6GI4TqPWq5Efcqhqq9qqfRs5eTv2ycJ5HNqg==","signatures":[{"sig":"MEUCIQCnEi5muGxFsQkXj7gyVwJrXREbqPXMUy+bi80USMHxogIgYvCVlMZ0dYMEcbGq3W7KbQ5V1f5edpCjSCpM5hMbwt0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":151544},"main":"lib/index.mjs","type":"module","gitHead":"cf45fec67f22179c83c74f840155dd7e9352796c","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"[@xiangnanscu/model](https://xiangnanscu.github.io/model/) straight forward and powerful orm library for postgresql.","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/model_0.21.0_1721575901472_0.3479890392676175","host":"s3://npm-registry-packages"}},"0.22.0":{"name":"@xiangnanscu/model","version":"0.22.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.22.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"73a7e0785267e9b97c4d6f8271ac56b76e916544","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.22.0.tgz","fileCount":7,"integrity":"sha512-3W9hgGNYZGpqhadaFBvMU8t4XH8EWUa1VJOJAnmPuASz0mumUoRBbsxuAWacaxL5fK4FgX7mkXlboGbUy6ThfA==","signatures":[{"sig":"MEUCIQCCE6ShUu2u8zuXLzZsfsDuSnF4o4h8r9hRY84CKaNgigIgYM7M1gHvRehtHI0UTiDYMrWsd6wsMpur0c9CiJubSXk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":151550},"main":"lib/index.mjs","type":"module","gitHead":"c8882e52a47b185e0e82f83163095dba3163f0dd","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"[@xiangnanscu/model](https://xiangnanscu.github.io/model/) straight forward and powerful orm library for postgresql.","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/model_0.22.0_1721688347178_0.8222852450338345","host":"s3://npm-registry-packages"}},"0.23.0":{"name":"@xiangnanscu/model","version":"0.23.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.23.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"038c993544c15e4108156fab8fd7a2eef3961613","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.23.0.tgz","fileCount":7,"integrity":"sha512-mvqtykj15a4O7duqvjdB+2OMm0MwMH/0E6WtxxMifl2trY678SFXr+zXJQmcfW+tjpDL+sc8HDrR6Ma3EV2Jsg==","signatures":[{"sig":"MEYCIQCT5a9zxVgJQqlYjltQh9Ne6tPgRgsAr0ctGScer+qU9wIhAMIg3P2ngzX/JGzF+mc8iNruSiWUvIyFao3YyCew4BzB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":152139},"main":"lib/index.mjs","type":"module","gitHead":"b7c93b03c3488cd1d73ab9d7b49bc7350ff0bdb3","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"[@xiangnanscu/model](https://xiangnanscu.github.io/model/) straight forward and powerful orm library for postgresql.","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/model_0.23.0_1721722985482_0.906833861998251","host":"s3://npm-registry-packages"}},"0.24.0":{"name":"@xiangnanscu/model","version":"0.24.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.24.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"572126e85c3e76a5866b78d39f4133cf926ae8d8","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.24.0.tgz","fileCount":7,"integrity":"sha512-L/8jnWwfS6AAstm3EEMGvgxA78Uc9GLn8rT+LPkMQakwaJAgpPGndHTrOdkPdlc+r+62L7yxYMtp1OtPkKHVJA==","signatures":[{"sig":"MEUCIQChEJRQRZewWJCmdbxUsbwE1jV4ywq17HZBgxMLArexRgIgfKG5+4Cj2/0nod6P9K7gJxqDxOrtffKBMWK+N0eYXhQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":152139},"main":"lib/index.mjs","type":"module","gitHead":"260230f7b356dcc4743410d485392477d56869f6","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"[@xiangnanscu/model](https://xiangnanscu.github.io/model/) straight forward and powerful orm library for postgresql.","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/model_0.24.0_1729467337340_0.16826775029237462","host":"s3://npm-registry-packages"}},"0.25.0":{"name":"@xiangnanscu/model","version":"0.25.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.25.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"3bae7e60e330b501eaee0d969188018459f797fd","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.25.0.tgz","fileCount":7,"integrity":"sha512-Y5SMViqHREos17v5WNvc7o5L7FVCf3++LRyfqDk0gKJ8HhDqOnoVqIYqCqhERiURXCKi34XCAE9sxXtdLv9gyg==","signatures":[{"sig":"MEQCID+s8/88Q9wqFhd5S0/yTTdYtCPvZNJT6Bvb3/JnRIfaAiBAVDnKIpjK9pwBibyhPjzxFSA2yEUqEgVI1kmFKMN2zQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":156817},"main":"lib/index.mjs","type":"module","gitHead":"d524154f0e5ca7c074de90a1abba9a4b10754a89","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"[@xiangnanscu/model](https://xiangnanscu.github.io/model/) straight forward and powerful orm library for postgresql.","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/model_0.25.0_1735895614819_0.32677837258358866","host":"s3://npm-registry-packages-npm-production"}},"0.26.0":{"name":"@xiangnanscu/model","version":"0.26.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.26.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"2cfdf0fd44660814f6b14c94a2eb87d49ecf9d13","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.26.0.tgz","fileCount":7,"integrity":"sha512-MnfrpR4tlN9XJBBCEGT/umSrKa9eWQ3R64mYLBI/99yt2HOSSISlz3U9Sd20lId71WAlZiPYA9ETv8wGrF92RQ==","signatures":[{"sig":"MEUCICNR+MV02gohFnt7vmBqnPLWj+OBObgKsmU8KDtSVZPaAiEAnRcHNHqSVZsL1qb9i/14US36VpWuTuCqphKR+LIiE0k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":156902},"main":"lib/index.mjs","type":"module","gitHead":"0a1cbb311bafed4f04622408dd97edfcadfa5cda","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"[@xiangnanscu/model](https://xiangnanscu.github.io/model/) straight forward and powerful orm library for postgresql.","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/model_0.26.0_1736478172503_0.3182729920817975","host":"s3://npm-registry-packages-npm-production"}},"0.27.0":{"name":"@xiangnanscu/model","version":"0.27.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.27.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"cb3948b9d10d52c10b579083f82b2853f0a81675","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.27.0.tgz","fileCount":14,"integrity":"sha512-rYz/lVK9xfqK1MYHnFTEm0vBN/TpG+n+CjYI7WCB6Le4ziZ6GV72/j3ECo0Nx2MNUJri+IjWQjv+T+YYg/JNaA==","signatures":[{"sig":"MEUCIQD/8Us7YVxLV+Dtl1PaA7LGg3B8hl3q91QbeLi+vPks1gIgKKZHve27r68WWfy8mGwC9XHoEMKDaLwlSTW0xLdR2i0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":227587},"main":"lib/index.mjs","type":"module","gitHead":"ae38627cab6aa4c288aee530d42398205a2a963d","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"[English](README.md) | [中文](README.zh-CN.md)","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/model_0.27.0_1748241127436_0.28989804185848667","host":"s3://npm-registry-packages-npm-production"}},"0.28.0":{"name":"@xiangnanscu/model","version":"0.28.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.28.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"8e774202fd513b5848f091a6aae3984fca215e67","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.28.0.tgz","fileCount":14,"integrity":"sha512-REly//bIbWQP8tk7cWm3T7OiK7XJxScOs/RA5Ile2KdTRHjppgRffIyvFzo2zLpMT/IR9B0xltWbBTbadHYYGQ==","signatures":[{"sig":"MEQCIFXb4DW94FNEj0lt5tgzKGMFb3+8aneiIVTVYWoHzj1+AiAvbOFuOY0yGH6wSQn6/drPVOQdgPayupj8faQcB6rjJw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":227498},"main":"lib/index.mjs","type":"module","gitHead":"37f928b5acc29e8fd678a8f27f2116b11c4d5562","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"[English](README.md) | [中文](README.zh-CN.md)","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/model_0.28.0_1748242733589_0.5369245654230099","host":"s3://npm-registry-packages-npm-production"}},"0.29.0":{"name":"@xiangnanscu/model","version":"0.29.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.29.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"9a17f38a1f5d5c14a5f8fad334433199c7b01307","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.29.0.tgz","fileCount":15,"integrity":"sha512-5fQ/bq/TGsmGF9ZdSwjHkC0MFRMAC+IMga93ep+6pM9BVpXCQorSy00+gk2i8+WZ3LsJzRdPj/ds6E4bOvzing==","signatures":[{"sig":"MEQCIGgvzfeeXqWblE7nTjoKa/NXobLAOnIH/rlAoPOS7TQOAiBgZo4hWVN5CzVJvPvkPaUhP8Tc27KOSe3KxFaWBntgAQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232794},"main":"lib/index.mjs","type":"module","gitHead":"881a78ed7505a78432405ca1567b8f1d62d12583","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"[English](README.md) | [中文](README.zh-CN.md)","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/model_0.29.0_1748260085157_0.6172751904669009","host":"s3://npm-registry-packages-npm-production"}},"0.30.0":{"name":"@xiangnanscu/model","version":"0.30.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.30.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"b7cb5f438c89714301929394e989adb9adc614f5","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.30.0.tgz","fileCount":15,"integrity":"sha512-RF1fGfO+M+NOWHvlBMTUly9uztg7AA/e1plTk7GejifjfEGUqe1QpPdWUV44cFpzdLfEaAolRUKD9Wro51I54Q==","signatures":[{"sig":"MEUCIQDH6w59G4022fiWq0NDkrqOEUa2QBzaulXp06e1TaoXswIgKYiDGqEcTIeKX23j6PZ4eLZFahdgjdHuDIhgaq76jQE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":233029},"main":"lib/index.mjs","type":"module","gitHead":"4b630994e870ae71b170f23201d287693588c957","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"[English](README.md) | [中文](README.zh-CN.md)","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/model_0.30.0_1748297124811_0.43440167847508393","host":"s3://npm-registry-packages-npm-production"}},"0.31.0":{"name":"@xiangnanscu/model","version":"0.31.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.31.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"8de59c62c8278aac89973059fa0a3924f1939ccb","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.31.0.tgz","fileCount":15,"integrity":"sha512-/IwV/DjJNenILed5fkRBn0ErIW0tVlBXhIjxI0yVe8mERBxNQTOuqPwdEpVXd6KCuMC9ugVYRMTcwcedgrc0Lw==","signatures":[{"sig":"MEQCIG6w1qu93tpKs1eNVtvIORgxuIjHqBl3jWpRf67EUG8RAiAfhoG+E/cKd0M+Dlf5oVIGCMgPb5LaOfMOE0JLm8Mp4A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":233094},"main":"lib/index.mjs","type":"module","gitHead":"cbbd52a6c376f726d5240f582d5f09d1686db4c1","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"A declarative, intuitive, and powerful PostgreSQL ORM library.","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"_npmOperationalInternal":{"tmp":"tmp/model_0.31.0_1748298079675_0.9881090966110964","host":"s3://npm-registry-packages-npm-production"}},"0.32.0":{"name":"@xiangnanscu/model","version":"0.32.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.32.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"0eaaf23d9d3759ad554f4c72fdb087af5993dd7b","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.32.0.tgz","fileCount":15,"integrity":"sha512-aeBr2j4cIkxc+HQurx9NxVgVJYsNP+4i8zKJxar8WZ/hQWv+Nq7/HLQwyt0XDjtFCH4xeaFsLDyIMJ/R/aT3Jw==","signatures":[{"sig":"MEUCIAjl+TDvuxAYdt7UG+bQGXwQe0ftKy+B1IRAxFPP/liaAiEA98pmE+o140prrjgJTAy9SquMkShmNW0HER5q8jewdBU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":233148},"main":"lib/index.mjs","type":"module","gitHead":"a2ecb0350296ad546941b4bc708b2bd0e4f28fc5","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"A declarative, intuitive, and powerful PostgreSQL ORM library.","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"peerDependencies":{"postgres":"^3.4.4"},"_npmOperationalInternal":{"tmp":"tmp/model_0.32.0_1748316374899_0.5128948856416014","host":"s3://npm-registry-packages-npm-production"}},"0.33.0":{"name":"@xiangnanscu/model","version":"0.33.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.33.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"b9230c6b14696b9f9c11280edadec9021bccd8b9","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.33.0.tgz","fileCount":15,"integrity":"sha512-yY93HmfVUNF7ghaORp0TRa9q5QtjotS/QB5W9fwuje3Vc6QM6ucA1OfVJwuEgWQ44hrUazy8drp1gtemQyALYA==","signatures":[{"sig":"MEUCIQCx2JPBlh/qDdnjU2XK3aDOJgRaxpeIbc0WSFXNTTkh+QIgPfgWFVnITFOaU0Cog7CnStvs0sm9Xcvj7cBXmTUHDKE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":268826},"main":"lib/index.mjs","type":"module","gitHead":"74888a802581752f963d5cdc4385aeb3bd210dba","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"A declarative, intuitive, and powerful PostgreSQL ORM library.","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"peerDependencies":{"postgres":"^3.4.4"},"_npmOperationalInternal":{"tmp":"tmp/model_0.33.0_1748354450537_0.8106543573027487","host":"s3://npm-registry-packages-npm-production"}},"0.34.0":{"name":"@xiangnanscu/model","version":"0.34.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.34.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"290881d29d39b8b60fa34abc56b32d86ac45cba5","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.34.0.tgz","fileCount":15,"integrity":"sha512-/D8pXe5Aq5n2WLN3jX82fS8vmc1tYF6K3tKdlHXB7ybwvUcSaCt8K6VSvs2oz5hdURauh98dahGTBUd2PLqJTA==","signatures":[{"sig":"MEUCIQCwRd3qz95HyZbwu6qhadk/BObfcNHMuGohL1dQ+bRkrgIgY1RiISBwXIHvfs3mDnfBNQuxGqJ8gwv24j97EuwpXzY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":268876},"main":"lib/index.mjs","type":"module","gitHead":"a2c17e78ec3b4c8d14bd31ea8e3e007f24710ce2","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"A declarative, intuitive, and powerful PostgreSQL ORM library.","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"peerDependencies":{"postgres":"^3.4.4"},"_npmOperationalInternal":{"tmp":"tmp/model_0.34.0_1748356158596_0.070057741859757","host":"s3://npm-registry-packages-npm-production"}},"0.35.0":{"name":"@xiangnanscu/model","version":"0.35.0","keywords":["model","sql","mvc","postgres","pg","postgresql"],"author":{"name":"Nan Xiang"},"license":"MIT","_id":"@xiangnanscu/model@0.35.0","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"homepage":"https://github.com/xiangnanscu/model#readme","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"dist":{"shasum":"04a1f8eedebc24fefab699c8dd258187f28c0018","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.35.0.tgz","fileCount":15,"integrity":"sha512-wCgShEhZH+zTGNgenJ4xfs6DrHBdpomKzIq9VQL+jksainVlMUlDkk91ON6ShVfMgiv5VDo4JQsS+1XLiFezrQ==","signatures":[{"sig":"MEQCICjMAHM76GcrDHNj4ZV5mL3UgFMsMRoXngvizfwSrlQmAiBoKZyoF+x0uLZKcQ9huqk1xy56QvQnYlBfd8dQm9C8zA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":262483},"main":"lib/index.mjs","type":"module","gitHead":"1f16ce23e7a91bb02c6303f2d4b35d5ac990f9b0","scripts":{"c":"npm run commit","g":"npm run commit","rc":"npm run push","dev":"vite","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done","push":"npm run commit","test":"vitest","_pull":"git pull origin","_push":"git push origin","build":"vite build","postg":"npm run postpush","prerc":"npm --no-git-tag-version version minor","commit":"git add . && git commit -am ","preview":"vite preview","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","build-only":"vite build","type-check":"vue-tsc --build --force"},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"repository":{"url":"git+https://github.com/xiangnanscu/model.git","type":"git"},"_npmVersion":"10.2.4","description":"A declarative, intuitive, and powerful PostgreSQL ORM library.","directories":{},"_nodeVersion":"20.11.0","_hasShrinkwrap":false,"devDependencies":{"vue":"^3.4.15","vite":"^5.0.11","jsdom":"^24.0.0","dotenv":"^16.4.5","eslint":"^8.49.0","vitest":"^1.2.2","vue-tsc":"^1.8.27","postgres":"^3.4.4","prettier":"^3.0.3","typescript":"~5.3.0","vue-router":"^4.2.5","@types/node":"^20.11.10","@types/jsdom":"^21.1.6","@vueuse/core":"^10.11.0","highlight.js":"^11.10.0","npm-run-all2":"^6.1.1","@vue/tsconfig":"^0.5.1","sql-formatter":"^15.3.2","@vue/test-utils":"^2.4.4","@tsconfig/node20":"^20.1.2","universal-cookie":"^6","eslint-plugin-vue":"^9.17.0","@vitejs/plugin-vue":"^5.0.3","unplugin-vue-router":"^0.10.0","@vueuse/integrations":"^10.11.0","unplugin-auto-import":"^0.17.6","@vitejs/plugin-vue-jsx":"^3.1.0","@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","unplugin-vue-components":"^0.27.0","vite-plugin-node-polyfills":"^0.22.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0"},"peerDependencies":{"postgres":"^3.4.4"},"_npmOperationalInternal":{"tmp":"tmp/model_0.35.0_1748364950366_0.7518358491287822","host":"s3://npm-registry-packages-npm-production"}},"0.36.0":{"name":"@xiangnanscu/model","version":"0.36.0","type":"module","main":"lib/index.mjs","description":"A declarative, intuitive, and powerful PostgreSQL ORM library.","keywords":["model","sql","mvc","postgres","pg","postgresql"],"scripts":{"dev":"vite","build":"vite build","preview":"vite preview","test":"vitest","build-only":"vite build","type-check":"vue-tsc --build --force","lint":"eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore","prerc":"npm --no-git-tag-version version minor","rc":"npm run push","commit":"git add . && git commit -am ","c":"npm run commit","g":"npm run commit","postg":"npm run postpush","push":"npm run commit","_push":"git push origin","_pull":"git pull origin","postpush":"uname -s | grep -q Darwin && npm run _push || while true; do timeout 15 npm run _push && break; done","pull":"uname -s | grep -q Darwin && npm run _pull || while true; do timeout 15 npm run _pull && break; done"},"repository":{"type":"git","url":"git+https://github.com/xiangnanscu/model.git"},"author":{"name":"Nan Xiang"},"license":"MIT","bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"homepage":"https://github.com/xiangnanscu/model#readme","peerDependencies":{"postgres":"^3.4.4"},"devDependencies":{"@highlightjs/vue-plugin":"^2.1.0","@rushstack/eslint-patch":"^1.3.3","@tsconfig/node20":"^20.1.2","@types/jsdom":"^21.1.6","@types/node":"^20.11.10","@vitejs/plugin-vue":"^5.0.3","@vitejs/plugin-vue-jsx":"^3.1.0","@vue/eslint-config-prettier":"^8.0.0","@vue/eslint-config-typescript":"^12.0.0","@vue/test-utils":"^2.4.4","@vue/tsconfig":"^0.5.1","@vueuse/core":"^10.11.0","@vueuse/integrations":"^10.11.0","dotenv":"^16.4.5","eslint":"^8.49.0","eslint-plugin-vue":"^9.17.0","highlight.js":"^11.10.0","jsdom":"^24.0.0","npm-run-all2":"^6.1.1","postgres":"^3.4.4","prettier":"^3.0.3","sql-formatter":"^15.3.2","typescript":"~5.3.0","universal-cookie":"^6","unplugin-auto-import":"^0.17.6","unplugin-vue-components":"^0.27.0","unplugin-vue-router":"^0.10.0","vite":"^5.0.11","vite-plugin-node-polyfills":"^0.22.0","vitest":"^1.2.2","vue":"^3.4.15","vue-router":"^4.2.5","vue-tsc":"^1.8.27"},"_id":"@xiangnanscu/model@0.36.0","gitHead":"c4a115f7d8c5481702c18863f99ef3a18f1df879","_nodeVersion":"20.11.0","_npmVersion":"10.2.4","dist":{"integrity":"sha512-X5Ph87723MbxjGoXudMpHhPU1GTNAgqcbBK9Di6h1vRv1IxU80isWLWCY4WN359vDqP2qSvedCWDDmffuKZ4CQ==","shasum":"14764c2f4e819c6b1aa59047ca5a5432c703fe8f","tarball":"https://registry.npmjs.org/@xiangnanscu/model/-/model-0.36.0.tgz","fileCount":15,"unpackedSize":262712,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDNiDSN/wce5/vZxplu3T9Js7tbrukjCgNkjv+TMI5gDwIhAPs7bMwkqNFNlVdovCvHtyphJZkUhVFCIXe3SzodJE5n"}]},"_npmUser":{"name":"xiangnanscu","email":"280145668@qq.com"},"directories":{},"maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/model_0.36.0_1748654330881_0.07022949173150073"},"_hasShrinkwrap":false}},"time":{"created":"2022-07-16T17:56:37.826Z","modified":"2025-05-31T01:18:51.258Z","0.1.0":"2022-07-16T17:56:38.161Z","0.5.0":"2022-07-19T03:36:37.632Z","0.6.0":"2022-07-20T01:59:49.230Z","0.7.0":"2022-07-20T13:59:39.425Z","0.8.0":"2022-07-20T16:23:49.284Z","0.9.0":"2022-07-21T01:42:42.054Z","0.10.0":"2022-07-21T07:39:42.444Z","0.12.0":"2022-11-24T13:35:21.524Z","0.15.0":"2023-08-27T17:23:43.468Z","0.16.0":"2024-07-18T09:33:22.687Z","0.17.0":"2024-07-18T09:53:24.687Z","0.18.0":"2024-07-18T10:20:27.612Z","0.19.0":"2024-07-19T04:09:17.104Z","0.20.0":"2024-07-19T15:48:16.220Z","0.21.0":"2024-07-21T15:31:41.695Z","0.22.0":"2024-07-22T22:45:47.360Z","0.23.0":"2024-07-23T08:23:05.617Z","0.24.0":"2024-10-20T23:35:37.507Z","0.25.0":"2025-01-03T09:13:35.241Z","0.26.0":"2025-01-10T03:02:52.754Z","0.27.0":"2025-05-26T06:32:07.650Z","0.28.0":"2025-05-26T06:58:53.769Z","0.29.0":"2025-05-26T11:48:05.361Z","0.30.0":"2025-05-26T22:05:25.059Z","0.31.0":"2025-05-26T22:21:20.011Z","0.32.0":"2025-05-27T03:26:15.110Z","0.33.0":"2025-05-27T14:00:50.726Z","0.34.0":"2025-05-27T14:29:18.786Z","0.35.0":"2025-05-27T16:55:50.564Z","0.36.0":"2025-05-31T01:18:51.061Z"},"bugs":{"url":"https://github.com/xiangnanscu/model/issues"},"author":{"name":"Nan Xiang"},"license":"MIT","homepage":"https://github.com/xiangnanscu/model#readme","keywords":["model","sql","mvc","postgres","pg","postgresql"],"repository":{"type":"git","url":"git+https://github.com/xiangnanscu/model.git"},"description":"A declarative, intuitive, and powerful PostgreSQL ORM library.","maintainers":[{"name":"xiangnanscu","email":"280145668@qq.com"}],"readme":"# @xiangnanscu/model\n\n[@xiangnanscu/model](https://xiangnanscu.github.io/model/) 一个声明式的、直观且强大的PostgreSQL ORM库。\n\n[English](./README.md) | 简体中文\n\n## 特性\n\n- **声明式模型定义**: 使用简单的JavaScript对象定义数据库模型\n- **自动迁移生成**: 从模型变更生成SQL迁移脚本\n- **类型安全**: 完整的TypeScript支持和类型推断\n- **查询构建器**: 直观的链式查询构建\n- **关系管理**: 支持外键和复杂关系\n- **模式验证**: 内置字段验证和约束\n\n## 安装\n\n```sh\nnpm install @xiangnanscu/model\n```\n\n## 快速开始\n\n```js\nimport { Model, Q, F, Sum, Avg, Max, Min, Count, create_table_sql } from \"@xiangnanscu/model\";\n\n// 配置数据库连接\nModel.db_config = {\n  host: \"localhost\",\n  port: \"5432\",\n  user: \"postgres\",\n  password: \"postgres\",\n  database: \"test\",\n  max: 20,\n  idle_timeout: 20,\n  connect_timeout: 3,\n};\n\n// 模型定义\nconst User = Model({\n  table_name: \"user\",\n  fields: {\n    username: { type: \"string\", maxlength: 20, minlength: 2, unique: true },\n    password: { type: \"text\" },\n  },\n});\n\nconst Blog = Model({\n  table_name: \"blog\",\n  fields: {\n    name: { type: \"string\", maxlength: 20, minlength: 2, unique: true },\n    tagline: { type: \"text\", default: \"default tagline\" },\n  },\n});\n\nconst BlogBin = Model({\n  table_name: \"blog_bin\",\n  mixins: [Blog],\n  fields: {\n    name: { type: \"string\", unique: false },\n    note: { type: \"text\", default: \"\" },\n  },\n});\n\nconst Resume = Model({\n  auto_primary_key: false,\n  table_name: \"resume\",\n  unique_together: [\"start_date\", \"end_date\", \"company\", \"position\"],\n  fields: {\n    start_date: { type: \"date\" },\n    end_date: { type: \"date\" },\n    company: { type: \"string\", maxlength: 20 },\n    position: { type: \"string\", maxlength: 20 },\n    description: { type: \"string\", maxlength: 200 },\n  },\n});\n\nconst Author = Model({\n  table_name: \"author\",\n  fields: {\n    name: { label: \"姓名\", type: \"string\", maxlength: 200, unique: true },\n    email: { type: \"email\" },\n    age: { type: \"integer\", max: 100, min: 10 },\n    resume: { type: \"table\", model: Resume },\n  },\n});\n\nconst Entry = Model({\n  table_name: \"entry\",\n  fields: {\n    blog_id: { type: \"foreignkey\", reference: Blog, related_query_name: \"entry\" },\n    reposted_blog_id: { type: \"foreignkey\", reference: Blog, related_query_name: \"reposted_entry\" },\n    headline: { type: \"string\", maxlength: 255, compact: false },\n    body_text: { type: \"text\" },\n    pub_date: { type: \"date\" },\n    mod_date: { type: \"date\" },\n    number_of_comments: { type: \"integer\", default: 0 },\n    number_of_pingbacks: { type: \"integer\", default: 0 },\n    rating: { type: \"integer\" },\n  },\n});\n\nconst ViewLog = Model({\n  table_name: \"view_log\",\n  fields: {\n    entry_id: { type: \"foreignkey\", reference: Entry },\n    ctime: { type: \"datetime\" },\n  },\n});\n\nconst Publisher = Model({\n  table_name: \"publisher\",\n  fields: {\n    name: { type: \"string\", maxlength: 300 },\n  },\n});\n\nconst Book = Model({\n  table_name: \"book\",\n  fields: {\n    name: { type: \"string\", maxlength: 300, compact: false },\n    pages: { type: \"integer\" },\n    price: { type: \"float\" },\n    rating: { type: \"float\" },\n    author: { type: \"foreignkey\", reference: Author },\n    publisher_id: { type: \"foreignkey\", reference: Publisher },\n    pubdate: { type: \"date\" },\n  },\n});\n\nconst Store = Model({\n  table_name: \"store\",\n  fields: {\n    name: { type: \"string\", maxlength: 300 },\n  },\n});\n\nconst model_list = [User, Blog, BlogBin, Author, Entry, ViewLog, Publisher, Book, Store];\n\n// 从模型定义创建表\nfor (const model of model_list) {\n  const createSQL = create_table_sql(model);\n  await Model.query(createSQL);\n}\n```\n\n## 查询操作\n\n```js\n// 获取辅助函数\nconst Q = Model.Q;\nconst F = Model.F;\nconst Sum = Model.Sum;\nconst Avg = Model.Avg;\nconst Max = Model.Max;\nconst Min = Model.Min;\nconst Count = Model.Count;\n```\n### 基础查询\n\n```js\n// 查询所有记录\nconst blogs = await Blog.exec();\n```\n\n```sql\nSELECT * FROM blog T\n```\n\n---\n\n```js\n// 条件查询\nconst blog = await Blog.where({ id: 1 }).get();\n```\n\n```sql\nSELECT * FROM blog T\nWHERE T.id = 1\n```\n\n---\n\n```js\nconst blogs = await Blog.where({ name: \"First Blog\" }).exec();\n```\n\n```sql\nSELECT * FROM blog T\nWHERE T.name = 'First Blog'\n```\n\n---\n\n```js\n// 字符串条件查询\nconst result = await Blog.where(\"name\", \"First Blog\").exec();\n```\n\n```sql\nSELECT * FROM blog T\nWHERE T.name = 'First Blog'\n```\n\n### 字段选择\n\n```js\n// 选择单个字段\nconst result = await Blog.select(\"name\").where({ id: 1 }).exec();\n// 结果: [{ name: \"First Blog\" }]\n```\n\n```sql\nSELECT T.name\nFROM blog T\nWHERE T.id = 1\n```\n\n---\n\n```js\n// 选择多个字段\nconst result = await Blog.select(\"name\", \"tagline\").where({ id: 1 }).exec();\n// 或者使用数组形式\nconst result = await Blog.select([\"name\", \"tagline\"]).where({ id: 1 }).exec();\n```\n\n```sql\nSELECT T.name, T.tagline\nFROM blog T\nWHERE T.id = 1\n```\n\n---\n\n```js\n// 字段别名\nconst result = await Blog.select_as({\n  name: \"blog_name\",\n  tagline: \"blog_tagline\"\n}).where({ id: 1 }).exec();\n```\n\n```sql\nSELECT T.name AS blog_name, T.tagline AS blog_tagline\nFROM blog T\nWHERE T.id = 1\n```\n\n---\n\n```js\n// 字面量选择\nconst result = await Blog.select_literal(\"Hello World\")\n  .select(\"name\")\n  .where({ id: 1 })\n  .exec();\n```\n\n```sql\nSELECT 'Hello World' AS \"?column?\", T.name\nFROM blog T\nWHERE T.id = 1\n```\n\n---\n\n```js\n// 字面量别名\nconst result = await Blog.select_literal_as({\n  \"Hello World\": \"greeting\"\n}).select(\"id\").where({ id: 1 }).exec();\n```\n\n```sql\nSELECT 'Hello World' AS greeting, T.id\nFROM blog T\nWHERE T.id = 1\n```\n\n### 外键查询\n\n```js\n// 查询外键字段\nconst result = await Book.select(\"name\", \"author__name\").where({ id: 1 }).exec();\n```\n\n```sql\nSELECT T.name, T1.name AS author__name\nFROM book T\nINNER JOIN author T1 ON (T.author = T1.id)\nWHERE T.id = 1\n```\n\n---\n\n```js\n// 嵌套外键查询\nconst result = await ViewLog.select(\"entry_id__blog_id__name\").where({ id: 1 }).exec();\n```\n\n```sql\nSELECT T2.name AS entry_id__blog_id__name\nFROM view_log T\nINNER JOIN entry T1 ON (T.entry_id = T1.id)\nINNER JOIN blog T2 ON (T1.blog_id = T2.id)\nWHERE T.id = 1\n```\n\n---\n\n```js\n// 反向外键查询\nconst result = await Blog.select(\"id\", \"name\", \"entry__rating\")\n  .where({ name: \"Second Blog\" })\n  .exec();\n```\n\n```sql\nSELECT T.id, T.name, T1.rating AS entry__rating\nFROM blog T\nINNER JOIN entry T1 ON (T.id = T1.blog_id)\nWHERE T.name = 'Second Blog'\n```\n\n### 条件查询\n\n```js\n// 基础条件\nconst result = await Book.where({ price: 100 }).exec();\n```\n\n```sql\nSELECT * FROM book T\nWHERE T.price = 100\n```\n\n---\n\n```js\n// 比较操作符\nconst result = await Book.where({ price__gt: 100 }).exec(); // 大于\n```\n\n```sql\nSELECT * FROM book T\nWHERE T.price > 100\n```\n\n---\n\n```js\nconst result = await Book.where({ price__lt: 100 }).exec(); // 小于\n```\n\n```sql\nSELECT * FROM book T\nWHERE T.price < 100\n```\n\n---\n\n```js\nconst result = await Book.where({ price__gte: 100 }).exec(); // 大于等于\n```\n\n```sql\nSELECT * FROM book T\nWHERE T.price >= 100\n```\n\n---\n\n```js\nconst result = await Book.where({ price__lte: 100 }).exec(); // 小于等于\n```\n\n```sql\nSELECT * FROM book T\nWHERE T.price <= 100\n```\n\n---\n\n```js\n// 字符串操作\nconst result = await Blog.where({ name__contains: \"blog\" }).exec(); // 包含\n```\n\n```sql\nSELECT * FROM blog T\nWHERE T.name LIKE '%blog%'\n```\n\n---\n\n```js\nconst result = await Blog.where({ name__startswith: \"First\" }).exec(); // 开始于\n```\n\n```sql\nSELECT * FROM blog T\nWHERE T.name LIKE 'First%'\n```\n\n---\n\n```js\nconst result = await Blog.where({ name__endswith: \"Blog\" }).exec(); // 结束于\n```\n\n```sql\nSELECT * FROM blog T\nWHERE T.name LIKE '%Blog'\n```\n\n---\n\n```js\n// 列表操作\nconst result = await Blog.where({ id__in: [1, 2, 3] }).exec(); // 在列表中\n```\n\n```sql\nSELECT * FROM blog T\nWHERE T.id IN (1, 2, 3)\n```\n\n---\n\n```js\nconst result = await Blog.where({ id__notin: [1, 2, 3] }).exec(); // 不在列表中\n```\n\n```sql\nSELECT * FROM blog T\nWHERE T.id NOT IN (1, 2, 3)\n```\n\n---\n\n```js\n// 空值检查\nconst result = await Blog.where({ tagline__isnull: true }).exec(); // 为空\n```\n\n```sql\nSELECT * FROM blog T\nWHERE T.tagline IS NULL\n```\n\n---\n\n```js\nconst result = await Blog.where({ tagline__notnull: true }).exec(); // 不为空\n```\n\n```sql\nSELECT * FROM blog T\nWHERE T.tagline IS NOT NULL\n```\n\n### 复杂条件查询\n\n```js\n// 使用 Q 对象进行复杂查询\nconst result = await Book.where(\n  Q({ price__gt: 100 }).or(Q({ price__lt: 200 }))\n).exec();\n```\n\n```sql\nSELECT * FROM book T\nWHERE (T.price > 100) OR (T.price < 200)\n```\n\n---\n\n```js\n// 否定条件\nconst result = await Book.where(Q({ price__gt: 100 }).not()).exec();\n```\n\n```sql\nSELECT * FROM book T\nWHERE NOT (T.price > 100)\n```\n\n---\n\n```js\n// 组合条件\nconst result = await Book.where(\n  Q({ id: 1 }).and(Q({ price__gt: 100 }).or(Q({ price__lt: 200 })))\n).exec();\n```\n\n```sql\nSELECT * FROM book T\nWHERE (T.id = 1) AND ((T.price > 100) OR (T.price < 200))\n```\n\n### 外键条件查询\n\n```js\n// 外键等值查询\nconst result = await Entry.where({ blog_id: 1 }).exec();\nconst result = await Entry.where({ blog_id__id: 1 }).exec(); // 等效\n```\n\n```sql\nSELECT * FROM entry T\nWHERE T.blog_id = 1\n```\n\n---\n\n```js\n// 外键字段查询\nconst result = await Entry.where({ blog_id__name: \"my blog name\" }).exec();\n```\n\n```sql\nSELECT * FROM entry T\nINNER JOIN blog T1 ON (T.blog_id = T1.id)\nWHERE T1.name = 'my blog name'\n```\n\n---\n\n```js\n// 嵌套外键查询\nconst result = await ViewLog.where({ entry_id__blog_id__name: \"my blog name\" }).exec();\n```\n\n```sql\nSELECT * FROM view_log T\nINNER JOIN entry T1 ON (T.entry_id = T1.id)\nINNER JOIN blog T2 ON (T1.blog_id = T2.id)\nWHERE T2.name = 'my blog name'\n```\n\n---\n\n```js\n// 反向外键查询\nconst result = await Blog.where({ entry__rating: 1 }).exec();\n```\n\n```sql\nSELECT * FROM blog T\nINNER JOIN entry T1 ON (T.id = T1.blog_id)\nWHERE T1.rating = 1\n```\n\n### JSON 字段查询\n\n```js\n// JSON 键存在检查\nconst result = await Author.where({ resume__has_key: \"start_date\" }).exec();\n```\n\n```sql\nSELECT * FROM author T\nWHERE (T.resume) ? 'start_date'\n```\n\n---\n\n```js\n// JSON 多键存在检查\nconst result = await Author.where({ resume__0__has_keys: [\"a\", \"b\"] }).exec();\n```\n\n```sql\nSELECT * FROM author T\nWHERE (T.resume #> ARRAY['0']) ?& ARRAY['a', 'b']\n```\n\n---\n\n```js\n// JSON 任意键存在检查\nconst result = await Author.where({ resume__has_any_keys: [\"a\", \"b\"] }).exec();\n```\n\n```sql\nSELECT * FROM author T\nWHERE (T.resume) ?| ARRAY['a', 'b']\n```\n\n---\n\n```js\n// JSON 路径访问\nconst result = await Author.where({ resume__start_date__time: \"12:00:00\" }).exec();\n```\n\n```sql\nSELECT * FROM author T\nWHERE (T.resume #> ARRAY['start_date', 'time']) = '\"12:00:00\"'\n```\n\n---\n\n```js\n// JSON 包含检查\nconst result = await Author.where({\n  resume__contains: { start_date: \"2025-01-01\" }\n}).exec();\n```\n\n```sql\nSELECT * FROM author T\nWHERE (T.resume) @> '{\"start_date\":\"2025-01-01\"}'\n```\n\n---\n\n```js\n// JSON 被包含检查\nconst result = await Author.where({\n  resume__contained_by: { start_date: \"2025-01-01\" }\n}).exec();\n```\n\n```sql\nSELECT * FROM author T\nWHERE (T.resume) <@ '{\"start_date\":\"2025-01-01\"}'\n```\n\n### 日期查询\n\n```js\n// 年份查询\nconst result = await ViewLog.where({ ctime__year: 2025 }).exec();\n```\n\n```sql\nSELECT * FROM view_log T\nWHERE T.ctime BETWEEN '2025-01-01' AND '2025-12-31'\n```\n\n---\n\n```js\n// 月份查询\nconst result = await ViewLog.where({ ctime__month: 1 }).exec();\n```\n\n```sql\nSELECT * FROM view_log T\nWHERE EXTRACT(MONTH FROM T.ctime) = 1\n```\n\n---\n\n```js\n// 日期查询\nconst result = await ViewLog.where({ ctime__day: 15 }).exec();\n```\n\n```sql\nSELECT * FROM view_log T\nWHERE EXTRACT(DAY FROM T.ctime) = 15\n```\n\n### 排序\n\n```js\n// 单字段排序\nconst result = await Blog.order_by(\"name\").exec();\n```\n\n```sql\nSELECT * FROM blog T\nORDER BY T.name\n```\n\n---\n\n```js\n// 降序排序\nconst result = await Blog.order_by(\"-name\").exec();\n```\n\n```sql\nSELECT * FROM blog T\nORDER BY T.name DESC\n```\n\n---\n\n```js\n// 多字段排序\nconst result = await Blog.order_by(\"name\", \"-id\").exec();\n```\n\n```sql\nSELECT * FROM blog T\nORDER BY T.name, T.id DESC\n```\n\n---\n\n```js\n// 外键字段排序\nconst result = await Entry.order_by(\"blog_id__name\").exec();\n```\n\n```sql\nSELECT * FROM entry T\nINNER JOIN blog T1 ON (T.blog_id = T1.id)\nORDER BY T1.name\n```\n\n### 聚合查询\n\n```js\n// 分组查询\nconst result = await Book.group_by(\"name\")\n  .annotate({ price_total: Sum(\"price\") })\n  .exec();\n```\n\n```sql\nSELECT T.name, SUM(T.price) AS price_total\nFROM book T\nGROUP BY T.name\n```\n\n---\n\n```js\n// 聚合函数\nconst result = await Book.annotate({ price_total: Sum(\"price\") }).exec();\n```\n\n```sql\nSELECT SUM(T.price) AS price_total\nFROM book T\n```\n\n---\n\n```js\nconst result = await Book.annotate([Sum(\"price\")]).exec(); // 自动别名为 price_sum\n```\n\n```sql\nSELECT SUM(T.price) AS price_sum\nFROM book T\n```\n\n---\n\n```js\n// 多种聚合\nconst result = await Book.annotate({\n  price_sum: Sum(\"price\"),\n  price_avg: Avg(\"price\"),\n  price_max: Max(\"price\"),\n  price_min: Min(\"price\"),\n  book_count: Count(\"id\")\n}).exec();\n```\n\n```sql\nSELECT\n  SUM(T.price) AS price_sum,\n  AVG(T.price) AS price_avg,\n  MAX(T.price) AS price_max,\n  MIN(T.price) AS price_min,\n  COUNT(T.id) AS book_count\nFROM book T\n```\n\n---\n\n```js\n// HAVING 子句\nconst result = await Book.group_by(\"name\")\n  .annotate([Sum(\"price\")])\n  .having({ price_sum__gt: 100 })\n  .exec();\n```\n\n```sql\nSELECT T.name, SUM(T.price) AS price_sum\nFROM book T\nGROUP BY T.name\nHAVING SUM(T.price) > 100\n```\n\n---\n\n```js\n// 复杂 HAVING 条件\nconst result = await Book.group_by(\"name\")\n  .annotate([Sum(\"price\")])\n  .having(Q({ price_sum__lt: 100 }).or(Q({ price_sum__gt: 200 })))\n  .exec();\n```\n\n```sql\nSELECT T.name, SUM(T.price) AS price_sum\nFROM book T\nGROUP BY T.name\nHAVING (SUM(T.price) < 100) OR (SUM(T.price) > 200)\n```\n\n### 字段表达式\n\n```js\n// 字段运算\nconst result = await Book.annotate({\n  double_price: F(\"price\").mul(2)\n}).exec();\n```\n\n```sql\nSELECT (T.price * 2) AS double_price\nFROM book T\n```\n\n---\n\n```js\n// 字段间运算\nconst result = await Book.annotate({\n  price_per_page: F(\"price\").div(F(\"pages\"))\n}).exec();\n```\n\n```sql\nSELECT (T.price / T.pages) AS price_per_page\nFROM book T\n```\n\n```js\n// 字符串连接\nconst result = await Entry.update({\n  headline: F(\"headline\") + \" suffix by function\"\n}).where({ id: 1 }).exec();\n```\n\n```sql\nUPDATE entry T\nSET headline = (T.headline || ' suffix by function')\nWHERE T.id = 1\n```\n\n### 关联查询计数\n\n```js\n// 左连接计数\nconst result = await Blog.annotate({\n  entry_count: Count(\"entry\")\n}).exec();\n```\n\n```sql\nSELECT COUNT(T1.id) AS entry_count\nFROM blog T\nLEFT JOIN entry T1 ON (T.id = T1.blog_id)\n```\n\n## 插入操作\n\n### 基础插入\n\n```js\n// 插入单条记录\nconst result = await Blog.insert({\n  name: \"New Blog\",\n  tagline: \"New blog tagline\"\n}).exec();\n```\n\n```sql\nINSERT INTO blog (name, tagline)\nVALUES ('New Blog', 'New blog tagline')\n```\n\n---\n\n```js\n// 插入并返回指定字段\nconst result = await Blog.insert({\n  name: \"Return Test Blog\",\n  tagline: \"Return test tagline\"\n}).returning(\"id\", \"name\").exec();\n```\n\n```sql\nINSERT INTO blog (name, tagline)\nVALUES ('Return Test Blog', 'Return test tagline')\nRETURNING id, name\n```\n\n---\n\n```js\n// 返回所有字段\nconst result = await Blog.insert({\n  name: \"All Fields Blog\"\n}).returning(\"*\").exec();\n```\n\n```sql\nINSERT INTO blog (name)\nVALUES ('All Fields Blog')\nRETURNING *\n```\n\n### 批量插入\n\n```js\n// 批量插入\nconst result = await Blog.insert([\n  { name: \"bulk insert 1\", tagline: \"bulk insert 1\" },\n  { name: \"bulk insert 2\", tagline: \"bulk insert 2\" }\n]).exec();\n```\n\n```sql\nINSERT INTO blog (name, tagline)\nVALUES\n  ('bulk insert 1', 'bulk insert 1'),\n  ('bulk insert 2', 'bulk insert 2')\n```\n\n---\n\n```js\n// 批量插入并返回\nconst result = await Blog.insert([\n  { name: \"bulk return 1\", tagline: \"bulk return 1\" },\n  { name: \"bulk return 2\", tagline: \"bulk return 2\" }\n]).returning(\"*\").exec();\n```\n\n```sql\nINSERT INTO blog (name, tagline)\nVALUES\n  ('bulk return 1', 'bulk return 1'),\n  ('bulk return 2', 'bulk return 2')\nRETURNING *\n```\n\n### 从子查询插入\n\n```js\n// 从 SELECT 子查询插入\nconst result = await BlogBin.insert(\n  Blog.where({ name: \"Second Blog\" }).select(\"name\", \"tagline\")\n).exec();\n```\n\n```sql\nINSERT INTO blog_bin (name, tagline)\nSELECT T.name, T.tagline\nFROM blog T\nWHERE T.name = 'Second Blog'\n```\n\n---\n\n```js\n// 指定列名插入\nconst result = await BlogBin.insert(\n  Blog.where({ name: \"First Blog\" })\n    .select(\"name\", \"tagline\")\n    .select_literal(\"select from another blog\"),\n  [\"name\", \"tagline\", \"note\"]\n).exec();\n```\n\n```sql\nINSERT INTO blog_bin (name, tagline, note)\nSELECT T.name, T.tagline, 'select from another blog'\nFROM blog T\nWHERE T.name = 'First Blog'\n```\n\n---\n\n```js\n// 从 UPDATE RETURNING 插入\nconst result = await BlogBin.insert(\n  Blog.update({ name: \"update returning 2\" })\n    .where({ name: \"update returning\" })\n    .returning(\"name\", \"tagline\")\n    .returning_literal(\"'update from another blog'\"),\n  [\"name\", \"tagline\", \"note\"]\n).returning(\"name\", \"tagline\", \"note\").exec();\n```\n\n```sql\nINSERT INTO blog_bin (name, tagline, note)\nWITH updated AS (\n  UPDATE blog T\n  SET name = 'update returning 2'\n  WHERE T.name = 'update returning'\n  RETURNING T.name, T.tagline, 'update from another blog' AS note\n)\nSELECT * FROM updated\nRETURNING name, tagline, note\n```\n\n---\n\n```js\n// 从 DELETE RETURNING 插入\nconst result = await BlogBin.insert(\n  Blog.delete({ name: \"delete returning\" })\n    .returning(\"name\", \"tagline\")\n    .returning_literal(\"'deleted from another blog'\"),\n  [\"name\", \"tagline\", \"note\"]\n).returning(\"name\", \"tagline\", \"note\").exec();\n```\n\n```sql\nINSERT INTO blog_bin (name, tagline, note)\nWITH deleted AS (\n  DELETE FROM blog T\n  WHERE T.name = 'delete returning'\n  RETURNING T.name, T.tagline, 'deleted from another blog' AS note\n)\nSELECT * FROM deleted\nRETURNING name, tagline, note\n```\n\n### 指定列插入\n\n```js\n// 只插入指定列\nconst result = await BlogBin.insert(\n  {\n    name: \"Column Test Blog\",\n    tagline: \"Column test tagline\",\n    note: \"should not be inserted\"\n  },\n  [\"name\", \"tagline\"] // 只插入这两列\n).returning(\"name\", \"tagline\", \"note\").exec();\n```\n\n```sql\nINSERT INTO blog_bin (name, tagline)\nVALUES ('Column Test Blog', 'Column test tagline')\nRETURNING name, tagline, note\n```\n\n## 更新操作\n\n### 基础更新\n\n```js\n// 基础更新\nconst result = await Blog.where({ name: \"First Blog\" })\n  .update({ tagline: \"changed tagline\" })\n  .returning(\"*\")\n  .exec();\n```\n\n```sql\nUPDATE blog T\nSET tagline = 'changed tagline'\nWHERE T.name = 'First Blog'\nRETURNING *\n```\n\n---\n\n```js\n// 使用字段表达式更新\nconst result = await Entry.update({ headline: F(\"blog_id__name\") })\n  .where({ id: 1 })\n  .returning(\"headline\")\n  .exec();\n```\n\n```sql\nUPDATE entry T\nSET headline = T1.name\nFROM blog T1\nWHERE T.blog_id = T1.id AND T.id = 1\nRETURNING T.headline\n```\n\n---\n\n```js\n// 字段运算更新\nconst result = await Entry.update({\n  headline: F(\"headline\") + \" suffix by function\"\n}).where({ id: 1 }).returning(\"headline\").exec();\n```\n\n```sql\nUPDATE entry T\nSET headline = (T.headline || ' suffix by function')\nWHERE T.id = 1\nRETURNING T.headline\n```\n\n### 字段递增\n\n```js\n// 单字段递增\nconst result = await Entry.increase({ rating: 1 })\n  .where({ id: 1 })\n  .returning(\"rating\")\n  .exec();\n```\n\n```sql\nUPDATE entry T\nSET rating = (T.rating + 1)\nWHERE T.id = 1\nRETURNING T.rating\n```\n\n---\n\n```js\n// 多字段递增\nconst result = await Entry.increase({\n  number_of_comments: 1,\n  number_of_pingbacks: 2\n}).where({ id: 1 }).returning(\"*\").exec();\n```\n\n```sql\nUPDATE entry T\nSET\n  number_of_comments = (T.number_of_comments + 1),\n  number_of_pingbacks = (T.number_of_pingbacks + 2)\nWHERE T.id = 1\nRETURNING *\n```\n\n---\n\n```js\n// 字符串参数递增\nconst result = await Entry.increase(\"rating\", 2)\n  .where({ id: 1 })\n  .returning(\"rating\")\n  .exec();\n```\n\n```sql\nUPDATE entry T\nSET rating = (T.rating + 2)\nWHERE T.id = 1\nRETURNING T.rating\n```\n\n### 带连接的更新\n\n```js\n// 带外键条件的更新\nconst result = await Entry.update({\n  headline: F(\"headline\") + \" from first blog\"\n}).where({\n  blog_id__name: \"First Blog\"\n}).returning(\"id\", \"headline\").exec();\n```\n\n```sql\nUPDATE entry T\nSET headline = (T.headline || ' from first blog')\nFROM blog T1\nWHERE T.blog_id = T1.id AND T1.name = 'First Blog'\nRETURNING T.id, T.headline\n```\n\n## 高级操作\n\n### MERGE 操作\n\n```js\n// 基础 merge（存在则更新，不存在则插入）\nconst result = await Blog.merge([\n  { name: \"First Blog\", tagline: \"updated by merge\" },\n  { name: \"Blog added by merge\", tagline: \"inserted by merge\" }\n]).exec();\n```\n\n```sql\nINSERT INTO blog (name, tagline)\nVALUES\n  ('First Blog', 'updated by merge'),\n  ('Blog added by merge', 'inserted by merge')\nON CONFLICT (name)\nDO UPDATE SET tagline = EXCLUDED.tagline\n```\n\n---\n\n```js\n// 只插入不存在的记录\nconst result = await Blog.merge([\n  { name: \"First Blog\" }, // 存在，不更新\n  { name: \"Blog added by merge\" } // 不存在，插入\n]).exec();\n```\n\n```sql\nINSERT INTO blog (name)\nVALUES ('First Blog'), ('Blog added by merge')\nON CONFLICT (name) DO NOTHING\n```\n\n### UPSERT 操作\n\n```js\n// UPSERT（存在则更新，不存在则插入，都返回）\nconst result = await Blog.upsert([\n  { name: \"First Blog\", tagline: \"updated by upsert\" },\n  { name: \"Blog added by upsert\", tagline: \"inserted by upsert\" }\n]).exec();\n```\n\n```sql\nINSERT INTO blog (name, tagline)\nVALUES\n  ('First Blog', 'updated by upsert'),\n  ('Blog added by upsert', 'inserted by upsert')\nON CONFLICT (name)\nDO UPDATE SET tagline = EXCLUDED.tagline\nRETURNING *\n```\n\n---\n\n```js\n// 从子查询 UPSERT\nconst result = await Blog.upsert(\n  BlogBin.update({ tagline: \"updated by upsert returning\" })\n    .returning(\"name\", \"tagline\")\n).returning(\"id\", \"name\", \"tagline\").exec();\n```\n\n```sql\nWITH source AS (\n  UPDATE blog_bin T\n  SET tagline = 'updated by upsert returning'\n  RETURNING T.name, T.tagline\n)\nINSERT INTO blog (name, tagline)\nSELECT name, tagline FROM source\nON CONFLICT (name)\nDO UPDATE SET tagline = EXCLUDED.tagline\nRETURNING id, name, tagline\n```\n\n---\n\n```js\n// 从 SELECT 子查询 UPSERT\nconst result = await Blog.upsert(\n  BlogBin.where({\n    name__notin: Blog.select(\"name\").distinct()\n  }).select(\"name\", \"tagline\").distinct(\"name\")\n).returning(\"id\", \"name\", \"tagline\").exec();\n```\n\n```sql\nINSERT INTO blog (name, tagline)\nSELECT DISTINCT T.name, T.tagline\nFROM blog_bin T\nWHERE T.name NOT IN (\n  SELECT DISTINCT T.name FROM blog T\n)\nON CONFLICT (name)\nDO UPDATE SET tagline = EXCLUDED.tagline\nRETURNING id, name, tagline\n```\n\n### UPDATES 操作\n\n```js\n// 批量更新（只更新存在的记录）\nconst result = await Blog.updates([\n  { name: \"Third Blog\", tagline: \"Updated by updates\" },\n  { name: \"Fourth Blog\", tagline: \"wont update\" } // 不存在，不更新\n]).exec();\n```\n\n```sql\nWITH V(name, tagline) AS (\n  VALUES\n    ('Third Blog', 'Updated by updates'),\n    ('Fourth Blog', 'wont update')\n)\nUPDATE blog T\nSET tagline = V.tagline\nFROM V\nWHERE V.name = T.name\n```\n\n---\n\n```js\n// 从 SELECT 子查询批量更新\nconst result = await BlogBin.updates(\n  Blog.where({ name: \"Second Blog\" }).select(\"name\", \"tagline\"),\n  \"name\" // 匹配字段\n).returning(\"*\").exec();\n```\n\n```sql\nWITH V(name, tagline) AS (\n  SELECT T.name, T.tagline\n  FROM blog T\n  WHERE T.name = 'Second Blog'\n)\nUPDATE blog_bin T\nSET tagline = V.tagline\nFROM V\nWHERE V.name = T.name\nRETURNING *\n```\n\n---\n\n```js\n// 从 UPDATE 子查询批量更新\nconst result = await BlogBin.updates(\n  Blog.where({ name: \"Third Blog\" })\n    .update({ tagline: \"XXX\" })\n    .returning(\"name\", \"tagline\"),\n  \"name\"\n).exec();\n```\n\n```sql\nWITH V(name, tagline) AS (\n  UPDATE blog T\n  SET tagline = 'XXX'\n  WHERE T.name = 'Third Blog'\n  RETURNING T.name, T.tagline\n)\nUPDATE blog_bin T\nSET tagline = V.tagline\nFROM V\nWHERE V.name = T.name\n```\n\n### MERGE_GETS 操作\n\n```js\n// 先 merge 再查询\nconst result = await Blog.select(\"name\")\n  .merge_gets([\n    { id: 1, name: \"Merged First Blog\" },\n    { id: 2, name: \"Merged Second Blog\" }\n  ], \"id\")\n  .exec();\n```\n\n```sql\nWITH V(id, name) AS (\n  VALUES (1, 'Merged First Blog'), (2, 'Merged Second Blog')\n)\nINSERT INTO blog (id, name)\nSELECT * FROM V\nON CONFLICT (id)\nDO UPDATE SET name = EXCLUDED.name;\n\nSELECT T.name\nFROM blog T\nWHERE T.id IN (1, 2)\n```\n\n---\n\n```js\n// 先 merge 再查询（查询在后）\nconst result = await Blog.merge_gets([\n  { id: 1, name: \"Merged First Blog\" },\n  { id: 2, name: \"Merged Second Blog\" }\n], \"id\")\n.select(\"name\")\n.exec();\n```\n\n```sql\nWITH V(id, name) AS (\n  VALUES (1, 'Merged First Blog'), (2, 'Merged Second Blog')\n)\nINSERT INTO blog (id, name)\nSELECT * FROM V\nON CONFLICT (id)\nDO UPDATE SET name = EXCLUDED.name;\n\nSELECT T.name\nFROM blog T\nWHERE T.id IN (1, 2)\n```\n\n## 删除操作\n\n```js\n// 基础删除\nconst result = await Blog.delete({ name: \"Blog to delete\" }).exec();\n```\n\n```sql\nDELETE FROM blog T\nWHERE T.name = 'Blog to delete'\n```\n\n---\n\n```js\n// 带返回的删除\nconst result = await Blog.delete({ name: \"Blog to delete\" })\n  .returning(\"*\")\n  .exec();\n```\n\n```sql\nDELETE FROM blog T\nWHERE T.name = 'Blog to delete'\nRETURNING *\n```\n\n---\n\n```js\n// 条件删除\nconst result = await Blog.delete({ name__startswith: \"temp\" }).exec();\n```\n\n```sql\nDELETE FROM blog T\nWHERE T.name LIKE 'temp%'\n```\n\n---\n\n```js\n// 删除所有记录\nconst result = await Blog.delete().exec();\n```\n\n```sql\nDELETE FROM blog T\n```\n\n## 便捷方法\n\n### 创建记录\n\n```js\n// 创建单条记录并返回完整对象\nconst blog = await Blog.create({\n  name: \"Created Blog\",\n  tagline: \"Created tagline\"\n});\n```\n\n```sql\nINSERT INTO blog (name, tagline)\nVALUES ('Created Blog', 'Created tagline')\nRETURNING *\n```\n\n---\n\n```js\n// 等效于\nconst result = await Blog.insert({\n  name: \"Created Blog\",\n  tagline: \"Created tagline\"\n}).returning(\"*\").exec();\nconst blog = result[0];\n```\n\n### 获取单条记录\n\n```js\n// 获取单条记录\nconst blog = await Blog.where({ id: 1 }).get();\n```\n\n```sql\nSELECT * FROM blog T\nWHERE T.id = 1\nLIMIT 1\n```\n\n---\n\n```js\n// 获取单条记录的特定字段\nconst blog = await Blog.where({ id: 1 }).select(\"name\").get();\n```\n\n```sql\nSELECT T.name\nFROM blog T\nWHERE T.id = 1\nLIMIT 1\n```\n\n### 扁平化结果\n\n```js\n// 获取单列值的数组\nconst names = await Blog.flat(\"name\");\n```\n\n```sql\nSELECT T.name\nFROM blog T\n```\n\n---\n\n```js\n// 带条件的扁平化\nconst names = await Blog.where({ tagline__contains: \"blog\" })\n  .order_by(\"name\")\n  .flat(\"name\");\n```\n\n```sql\nSELECT T.name\nFROM blog T\nWHERE T.tagline LIKE '%blog%'\nORDER BY T.name\n```\n\n## 原生查询\n\n```js\n// 执行原生 SQL\nconst result = await Blog.query(\"SELECT * FROM blog WHERE id = $1\", [1]);\n```\n\n```sql\n-- 执行原生 SQL（参数化查询）\nSELECT * FROM blog WHERE id = $1\n-- 参数: [1]\n```\n\n---\n\n```js\n// 获取 SQL 语句（不执行）\nconst sql = Blog.where({ id: 1 }).statement();\nconsole.log(sql); // \"SELECT * FROM blog T WHERE T.id = 1\"\n```\n\n## 字段类型\n\n### 基础类型\n\n```js\nconst Model = Model({\n  table_name: \"example\",\n  fields: {\n    // 字符串类型\n    name: { type: \"string\", maxlength: 100, minlength: 2 },\n    title: { maxlength: 200 }, // 默认为 string 类型\n\n    // 文本类型\n    content: { type: \"text\" },\n\n    // 整数类型\n    age: { type: \"integer\", min: 0, max: 150 },\n\n    // 浮点数类型\n    price: { type: \"float\" },\n\n    // 布尔类型\n    is_active: { type: \"boolean\", default: true },\n\n    // 日期类型\n    birth_date: { type: \"date\" },\n\n    // 日期时间类型\n    created_at: { type: \"datetime\" },\n\n    // 邮箱类型\n    email: { type: \"email\" },\n\n    // JSON 类型\n    metadata: { type: \"json\" },\n\n    // 外键引用\n    user_id: { reference: User },\n\n    // 复合字段\n    profile: { model: Profile }\n  }\n});\n```\n\n### 字段约束\n\n```js\nconst Model = Model({\n  table_name: \"example\",\n  fields: {\n    // 唯一约束\n    username: { unique: true },\n\n    // 非空约束\n    email: { null: false },\n\n    // 默认值\n    status: { default: \"active\" },\n\n    // 标签（用于表单显示等）\n    name: { label: \"姓名\" },\n\n    // 压缩存储（用于长文本）\n    content: { compact: false }\n  }\n});\n```\n\n### 模型选项\n\n```js\nconst Model = Model({\n  // 表名\n  table_name: \"my_table\",\n\n  // 是否自动创建主键\n  auto_primary_key: true, // 默认 true\n\n  // 联合唯一约束\n  unique_together: [\"field1\", \"field2\"],\n\n  // 模型继承\n  mixins: [BaseModel],\n\n  // 字段定义\n  fields: {\n    // ...\n  }\n});\n```\n\n## 错误处理\n\n```js\ntry {\n  // 违反唯一约束\n  await Blog.insert({ name: \"First Blog\" }).exec();\n} catch (error) {\n  console.error(\"插入失败:\", error.message);\n}\n\ntry {\n  // 字段长度超限\n  await Blog.insert({\n    name: \"This name is way too long and exceeds the maximum length\"\n  }).exec();\n} catch (error) {\n  console.error(\"字段验证失败:\", error.message);\n}\n\ntry {\n  // 年龄超出范围\n  await Author.insert({ name: \"Tom\", age: 101 }).exec();\n} catch (error) {\n  console.error(\"年龄验证失败:\", error.message);\n}\n```\n\n## 调试\n\n```js\n// 获取 SQL 语句而不执行\nconst sql = Blog.where({ id: 1 }).statement();\nconsole.log(sql);\n\n// 启用完整 SQL 匹配（用于测试）\nprocess.env.SQL_WHOLE_MATCH = true;\n```\n\n## 最佳实践\n\n1. **模型定义**: 将相关模型定义在同一个文件中，便于管理外键关系\n2. **字段验证**: 充分利用字段约束进行数据验证\n3. **查询优化**: 使用 `select()` 只查询需要的字段\n4. **事务处理**: 对于复杂操作，考虑使用数据库事务\n5. **错误处理**: 始终包装数据库操作在 try-catch 中\n6. **索引优化**: 为经常查询的字段添加数据库索引\n\n这个 ORM 提供了丰富的查询接口和灵活的数据操作方法，能够满足大多数 PostgreSQL 应用的需求。\n\n## 数据库迁移工具\n\n该库包含一个强大的数据库迁移工具，可以通过比较模型定义来生成SQL迁移脚本。\n\n### 使用方法\n\n```javascript\nimport { generate_migration_sql, create_table_sql } from './lib/migrate.mjs';\n\n// 定义你的模型\nconst user_model = {\n  table_name: \"users\",\n  field_names: [\"id\", \"name\", \"email\", \"created_at\"],\n  fields: {\n    id: {\n      name: \"id\",\n      type: \"integer\",\n      primary_key: true,\n      serial: true,\n      null: false,\n    },\n    name: {\n      name: \"name\",\n      type: \"string\",\n      maxlength: 100,\n      null: false,\n    },\n    email: {\n      name: \"email\",\n      type: \"email\",\n      maxlength: 255,\n      unique: true,\n      null: false,\n    },\n    created_at: {\n      name: \"created_at\",\n      type: \"datetime\",\n      auto_now_add: true,\n      null: false,\n    },\n  },\n};\n\n// 创建表SQL\nconst create_sql = create_table_sql(user_model);\nconsole.log(create_sql);\n\n// 生成迁移SQL（从旧模型到新模型）\nconst migration_sql = generate_migration_sql(old_model, new_model);\nconsole.log(migration_sql);\n```\n\n### 支持的字段类型\n\n- **string**: 指定长度的VARCHAR\n- **text**: 长内容的TEXT字段\n- **integer**: 整数\n- **float**: 可选精度的浮点数\n- **boolean**: 布尔值true/false\n- **date**: 仅日期（YYYY-MM-DD）\n- **datetime**: 可选时区的时间戳\n- **time**: 可选时区的仅时间\n- **uuid**: 自动生成的UUID\n- **json**: 结构化数据的JSONB\n- **foreignkey**: 外键关系\n- **year/month**: 年/月的整数字段\n- **year_month**: 年-月组合的VARCHAR\n\n### 迁移功能\n\n- **表创建**: 生成CREATE TABLE语句\n- **字段添加/删除**: 添加或删除列\n- **类型更改**: 在兼容的字段类型之间转换\n- **约束管理**: 处理PRIMARY KEY、UNIQUE、NOT NULL约束\n- **索引管理**: 创建和删除索引\n- **外键管理**: 添加、删除和修改外键关系\n- **默认值**: 处理默认值更改\n- **字段重命名**: 自动检测字段重命名\n- **联合唯一**: 管理复合唯一约束\n\n### 迁移输出示例\n\n```sql\n-- 创建新表\nCREATE TABLE users(\n  id SERIAL PRIMARY KEY NOT NULL,\n  name varchar(100) NOT NULL,\n  email varchar(255) NOT NULL UNIQUE,\n  created_at timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP\n);\n\n-- 添加字段\nALTER TABLE users ADD COLUMN phone varchar(20);\n\n-- 修改字段类型\nALTER TABLE users ALTER COLUMN name TYPE text;\n\n-- 添加外键\nALTER TABLE products ADD CONSTRAINT products_category_id_fkey\nFOREIGN KEY (category_id) REFERENCES \"categories\" (\"id\")\nON DELETE CASCADE ON UPDATE CASCADE;\n```\n\n## 测试\n\n运行测试套件：\n\n```bash\nnpm test\n```\n\n专门运行迁移工具测试：\n\n```bash\nnpm test __test__/migrate.test.mjs\n```\n\n## 许可证\n\nMIT\n\n## 贡献\n\n欢迎贡献！请随时提交Pull Request。","readmeFilename":"README.zh-CN.md"}