From 35cec990c639c4f03b0b28ff71e968bdb117471d Mon Sep 17 00:00:00 2001 From: xion Date: Thu, 21 Nov 2024 02:08:35 +0800 Subject: [PATCH] feat: add pack module --- package.json | 8 +- pnpm-lock.yaml | 272 ++++++++++++++++++++++++++++++++++++++++- src/command/deploy.ts | 2 +- src/command/publish.ts | 225 ++++++++++++++++++++++++++++++++++ src/index.ts | 1 + src/module/pino.ts | 0 6 files changed, 499 insertions(+), 9 deletions(-) create mode 100644 src/command/publish.ts create mode 100644 src/module/pino.ts diff --git a/package.json b/package.json index 816a7be..55fca4a 100644 --- a/package.json +++ b/package.json @@ -24,21 +24,25 @@ "author": "abearxiong", "devDependencies": { "@kevisual/query": "0.0.7-alpha.3", + "@rollup/plugin-alias": "^5.1.1", "@rollup/plugin-commonjs": "^28.0.1", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^15.3.0", "@rollup/plugin-typescript": "^12.1.1", - "@rollup/plugin-alias": "^5.1.1", - "rollup-plugin-esbuild": "^6.1.1", "@types/node": "^22.8.6", "chalk": "^5.3.0", "commander": "^12.1.0", + "fast-glob": "^3.3.2", + "filesize": "^10.1.6", "form-data": "^4.0.1", "glob": "^11.0.0", + "ignore": "^6.0.2", "inquirer": "^12.0.1", "rimraf": "^6.0.1", "rollup": "^4.24.3", "rollup-plugin-dts": "^6.1.1", + "rollup-plugin-esbuild": "^6.1.1", + "tar": "^7.4.3", "tslib": "^2.8.1", "typescript": "^5.6.3" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a8faf4b..a489980 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,15 +14,9 @@ importers: '@kevisual/router': specifier: ^0.0.3 version: 0.0.3 - '@rollup/plugin-alias': - specifier: ^5.1.1 - version: 5.1.1(rollup@4.24.3) pg-hstore: specifier: ^2.3.4 version: 2.3.4 - rollup-plugin-esbuild: - specifier: ^6.1.1 - version: 6.1.1(esbuild@0.21.5)(rollup@4.24.3) sequelize: specifier: ^6.37.5 version: 6.37.5(pg-hstore@2.3.4)(sqlite3@5.1.7) @@ -36,6 +30,9 @@ importers: '@kevisual/query': specifier: 0.0.7-alpha.3 version: 0.0.7-alpha.3 + '@rollup/plugin-alias': + specifier: ^5.1.1 + version: 5.1.1(rollup@4.24.3) '@rollup/plugin-commonjs': specifier: ^28.0.1 version: 28.0.1(rollup@4.24.3) @@ -57,12 +54,21 @@ importers: commander: specifier: ^12.1.0 version: 12.1.0 + fast-glob: + specifier: ^3.3.2 + version: 3.3.2 + filesize: + specifier: ^10.1.6 + version: 10.1.6 form-data: specifier: ^4.0.1 version: 4.0.1 glob: specifier: ^11.0.0 version: 11.0.0 + ignore: + specifier: ^6.0.2 + version: 6.0.2 inquirer: specifier: ^12.0.1 version: 12.0.1(@types/node@22.8.6) @@ -75,6 +81,12 @@ importers: rollup-plugin-dts: specifier: ^6.1.1 version: 6.1.1(rollup@4.24.3)(typescript@5.6.3) + rollup-plugin-esbuild: + specifier: ^6.1.1 + version: 6.1.1(esbuild@0.21.5)(rollup@4.24.3) + tar: + specifier: ^7.4.3 + version: 7.4.3 tslib: specifier: ^2.8.1 version: 2.8.1 @@ -317,6 +329,10 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} @@ -326,6 +342,18 @@ packages: '@kevisual/router@0.0.3': resolution: {integrity: sha512-azWjrcto8ngTK/Jq9LiFcIFnop9Oi7jJzH+tqNXvjwMA3Ex3lLRslhsRZrJLGSx8VFaHRf9+7LN7ceMJfozyhw==} + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + '@npmcli/fs@1.1.1': resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} @@ -334,6 +362,10 @@ packages: engines: {node: '>=10'} deprecated: This functionality has been moved to @npmcli/fs + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} engines: {node: '>=14.0.0'} @@ -577,6 +609,10 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} @@ -598,6 +634,10 @@ packages: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -714,6 +754,13 @@ packages: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fdir@6.4.0: resolution: {integrity: sha512-3oB133prH1o4j/L5lLW7uOCF1PlD+/It2L0eL/iAqWMB91RBbqTewABqxhj0ibBd90EEmWZq7ntIWzVaWcXTGQ==} peerDependencies: @@ -725,6 +772,14 @@ packages: file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + filesize@10.1.6: + resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==} + engines: {node: '>= 10.4.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + foreground-child@3.3.0: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} @@ -762,6 +817,14 @@ packages: github-from-package@0.0.0: resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + glob@11.0.0: resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==} engines: {node: 20 || >=22} @@ -806,6 +869,10 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@6.0.2: + resolution: {integrity: sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==} + engines: {node: '>= 4'} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -845,22 +912,37 @@ packages: resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + is-lambda@1.0.1: resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jackspeak@4.0.2: resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==} engines: {node: 20 || >=22} @@ -874,6 +956,9 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.0.1: resolution: {integrity: sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==} engines: {node: 20 || >=22} @@ -889,6 +974,14 @@ packages: resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} engines: {node: '>= 10'} + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -908,6 +1001,10 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -947,6 +1044,10 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} + minizlib@3.0.1: + resolution: {integrity: sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==} + engines: {node: '>= 18'} + mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} @@ -955,6 +1056,11 @@ packages: engines: {node: '>=10'} hasBin: true + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + moment-timezone@0.5.46: resolution: {integrity: sha512-ZXm9b36esbe7OmdABqIWJuBBiLLwAjrN7CE+7sYdCCx82Nabt1wHDj8TVseS59QIlfFPbOoiBPm6ca9BioG4hw==} @@ -1027,6 +1133,10 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.0: resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} engines: {node: 20 || >=22} @@ -1069,6 +1179,9 @@ packages: pump@3.0.2: resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -1091,11 +1204,19 @@ packages: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + rimraf@5.0.10: + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} + hasBin: true + rimraf@6.0.1: resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} engines: {node: 20 || >=22} @@ -1124,6 +1245,9 @@ packages: resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} engines: {node: '>=0.12.0'} + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} @@ -1263,10 +1387,18 @@ packages: resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} engines: {node: '>=10'} + tar@7.4.3: + resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + engines: {node: '>=18'} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + toposort-class@1.0.1: resolution: {integrity: sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==} @@ -1380,6 +1512,10 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + yoctocolors-cjs@2.1.2: resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} engines: {node: '>=18'} @@ -1583,6 +1719,10 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + '@jridgewell/sourcemap-codec@1.5.0': {} '@kevisual/query@0.0.7-alpha.3': {} @@ -1594,6 +1734,18 @@ snapshots: - bufferutil - utf-8-validate + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + '@npmcli/fs@1.1.1': dependencies: '@gar/promisify': 1.1.3 @@ -1606,6 +1758,9 @@ snapshots: rimraf: 3.0.2 optional: true + '@pkgjs/parseargs@0.11.0': + optional: true + '@rollup/plugin-alias@5.1.1(rollup@4.24.3)': optionalDependencies: rollup: 4.24.3 @@ -1798,6 +1953,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + buffer@5.7.1: dependencies: base64-js: 1.5.1 @@ -1835,6 +1994,8 @@ snapshots: chownr@2.0.0: {} + chownr@3.0.0: {} + clean-stack@2.2.0: optional: true @@ -1949,12 +2110,30 @@ snapshots: iconv-lite: 0.4.24 tmp: 0.0.33 + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + fdir@6.4.0(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 file-uri-to-path@1.0.0: {} + filesize@10.1.6: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 @@ -1998,6 +2177,19 @@ snapshots: github-from-package@0.0.0: {} + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + glob@11.0.0: dependencies: foreground-child: 3.3.0 @@ -2063,6 +2255,8 @@ snapshots: ieee754@1.2.1: {} + ignore@6.0.2: {} + imurmurhash@0.1.4: optional: true @@ -2105,19 +2299,33 @@ snapshots: dependencies: hasown: 2.0.2 + is-extglob@2.1.1: {} + is-fullwidth-code-point@3.0.0: {} + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + is-lambda@1.0.1: optional: true is-module@1.0.0: {} + is-number@7.0.0: {} + is-reference@1.2.1: dependencies: '@types/estree': 1.0.6 isexe@2.0.0: {} + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + jackspeak@4.0.2: dependencies: '@isaacs/cliui': 8.0.2 @@ -2130,6 +2338,8 @@ snapshots: lodash@4.17.21: {} + lru-cache@10.4.3: {} + lru-cache@11.0.1: {} lru-cache@6.0.0: @@ -2164,6 +2374,13 @@ snapshots: - supports-color optional: true + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 4.0.2 + mime-db@1.52.0: {} mime-types@2.1.35: @@ -2181,6 +2398,10 @@ snapshots: brace-expansion: 1.1.11 optional: true + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + minimist@1.2.8: {} minipass-collect@1.0.2: @@ -2225,10 +2446,17 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 + minizlib@3.0.1: + dependencies: + minipass: 7.1.2 + rimraf: 5.0.10 + mkdirp-classic@0.5.3: {} mkdirp@1.0.4: {} + mkdirp@3.0.1: {} + moment-timezone@0.5.46: dependencies: moment: 2.30.1 @@ -2302,6 +2530,11 @@ snapshots: path-parse@1.0.7: {} + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + path-scurry@2.0.0: dependencies: lru-cache: 11.0.1 @@ -2352,6 +2585,8 @@ snapshots: end-of-stream: 1.4.4 once: 1.4.0 + queue-microtask@1.2.3: {} + rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -2378,11 +2613,17 @@ snapshots: retry@0.12.0: optional: true + reusify@1.0.4: {} + rimraf@3.0.2: dependencies: glob: 7.2.3 optional: true + rimraf@5.0.10: + dependencies: + glob: 10.4.5 + rimraf@6.0.1: dependencies: glob: 11.0.0 @@ -2433,6 +2674,10 @@ snapshots: run-async@3.0.0: {} + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + rxjs@7.8.1: dependencies: tslib: 2.8.1 @@ -2583,10 +2828,23 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 + tar@7.4.3: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.0.1 + mkdirp: 3.0.1 + yallist: 5.0.0 + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + toposort-class@1.0.1: {} tslib@2.8.1: {} @@ -2665,4 +2923,6 @@ snapshots: yallist@4.0.0: {} + yallist@5.0.0: {} + yoctocolors-cjs@2.1.2: {} diff --git a/src/command/deploy.ts b/src/command/deploy.ts index a73106d..6816d73 100644 --- a/src/command/deploy.ts +++ b/src/command/deploy.ts @@ -8,7 +8,7 @@ import { getConfig } from '@/module/index.ts'; import inquirer from 'inquirer'; const command = new Command('deploy') - .description('deploy to server') + .description('把前端文件传到服务器') .argument('', 'Path to the file to be uploaded') // 定义文件路径参数 .option('-v, --version ', 'verbose') .option('-k, --key ', 'key') diff --git a/src/command/publish.ts b/src/command/publish.ts new file mode 100644 index 0000000..92b25c5 --- /dev/null +++ b/src/command/publish.ts @@ -0,0 +1,225 @@ +import fs from 'fs/promises'; +import path from 'path'; +import * as tar from 'tar'; +import glob from 'fast-glob'; +import { program, Command } from '@/program.ts'; +import { getConfig } from '@/module/index.ts'; +import { fileIsExist } from '@/uitls/file.ts'; +import ignore from 'ignore'; + +// 查找文件(忽略大小写) +async function findFileInsensitive(targetFile: string): Promise { + const files = await fs.readdir('.'); + const matchedFile = files.find((file) => file.toLowerCase() === targetFile.toLowerCase()); + return matchedFile || null; +} + +// 递归收集文件信息 +async function collectFileInfo(filePath: string, baseDir = '.'): Promise { + const stats = await fs.stat(filePath); + const relativePath = path.relative(baseDir, filePath); + + if (stats.isFile()) { + return [{ path: relativePath, size: stats.size }]; + } + + if (stats.isDirectory()) { + const files = await fs.readdir(filePath); + const results = await Promise.all(files.map((file) => collectFileInfo(path.join(filePath, file), baseDir))); + return results.flat(); + } + + return []; +} +// 解析 .npmignore 文件 +async function loadNpmIgnore(cwd: string): Promise { + const npmIgnorePath = path.join(cwd, '.npmignore'); + const ig = ignore.default(); + + try { + const content = await fs.readFile(npmIgnorePath, 'utf-8'); + ig.add(content); + } catch (err) { + console.warn('.npmignore not found, using default ignore rules'); + // 如果没有 .npmignore 文件,使用默认规则 + ig.add(['node_modules', '.git']); + } + + return ig; +} +// 获取文件列表,兼容 .npmignore +async function getFiles(cwd: string, patterns: string[]): Promise { + const ig = await loadNpmIgnore(cwd); + + // 使用 fast-glob 匹配文件 + const allFiles = await glob(patterns, { + cwd, + dot: true, // 包括隐藏文件 + onlyFiles: false, // 包括目录 + followSymbolicLinks: true, + }); + + // 过滤忽略的文件 + const filteredFiles = allFiles.filter((file) => !ig.ignores(file)); + return filteredFiles; +} + +const pack = async () => { + const cwd = process.cwd(); + const collection: Record = {}; + const packageJsonPath = path.join(cwd, 'package.json'); + if (!(await fileIsExist(packageJsonPath))) { + console.error('package.json not found'); + return; + } + + let packageJson; + try { + const packageContent = await fs.readFile(packageJsonPath, 'utf-8'); + packageJson = JSON.parse(packageContent); + } catch (error) { + console.error('Invalid package.json:', error); + return; + } + + let outputFileName = `${packageJson.name}-${packageJson.version}.tgz` + .replace('@', '') // 替换特殊字符 @ + .replace(/[\/\\:*?"<>|]/g, '-'); // 替换特殊字符 + + const outputFilePath = path.join(cwd, outputFileName); + + // 从 package.json 的 files 字段收集文件 + const filesToInclude = packageJson.files + ? await glob(packageJson.files, { + cwd: cwd, + dot: true, // 包括隐藏文件 + onlyFiles: false, // 包括目录 + followSymbolicLinks: true, // 处理符号链接 + }) + : []; + // 确保 README.md 和 dist 存在(忽略大小写检测 README.md) + const readmeFile = await findFileInsensitive('README.md'); + if (readmeFile && !filesToInclude.includes(readmeFile)) { + filesToInclude.push(readmeFile); + } + const packageFile = await findFileInsensitive('package.json'); + if (packageFile && !filesToInclude.includes(packageFile)) { + filesToInclude.push(packageFile); + } + const allFiles = (await Promise.all(filesToInclude.map((file) => collectFileInfo(file)))).flat(); + + // 输出文件详细信息 + console.log('Tarball Contents:'); + allFiles.forEach((file) => { + console.log(`${file.size}B ${file.path}`); + }); + const totalSize = allFiles.reduce((sum, file) => sum + file.size, 0); + const packageSize = (totalSize / 1024).toFixed(2) + ' kB'; + + collection.files = allFiles; + collection.packageJson = packageJson; + collection.totalSize = totalSize; + + console.log('\nTarball Details'); + console.log(`name: ${packageJson.name}`); + console.log(`version: ${packageJson.version}`); + console.log(`filename: ${outputFileName}`); + console.log(`package size: ${packageSize}`); + console.log(`total files: ${allFiles.length}`); + console.log(`Created package: ${outputFileName}`); + try { + await tar.c( + { + gzip: true, + file: outputFilePath, + cwd: cwd, + }, + filesToInclude, + ); + } catch (error) { + console.error('Error creating tarball:', error); + } + return { collection, outputFilePath }; +}; +const packByIgnore = async () => { + let collection: Record = {}; + const cwd = process.cwd(); + const patterns = ['**/*']; // 匹配所有文件 + const packageJsonPath = path.join(cwd, 'package.json'); + let packageJson; + try { + const packageContent = await fs.readFile(packageJsonPath, 'utf-8'); + packageJson = JSON.parse(packageContent); + } catch (error) { + console.error('Invalid package.json:', error); + return; + } + + let outputFileName = `${packageJson.name}-${packageJson.version}.tgz` + .replace('@', '') // 替换特殊字符 @ + .replace(/[\/\\:*?"<>|]/g, '-'); // 替换特殊字符 + + const outputFilePath = path.join(cwd, outputFileName); + + // 获取符合条件的文件列表 + const files = await getFiles(cwd, patterns); + + console.log('Files to include in the package:'); + // files 获取 size 和 path + const filesInfo = await Promise.all(files.map((file) => collectFileInfo(file))); + const allFiles = filesInfo.flat(); + allFiles.forEach((file) => { + console.log(`${file.size}B ${file.path}`); + }); + + const totalSize = allFiles.reduce((sum, file) => sum + file.size, 0); + const packageSize = (totalSize / 1024).toFixed(2) + ' kB'; + + collection.files = allFiles; + collection.packageJson = packageJson; + collection.totalSize = totalSize; + + console.log('\nTarball Details'); + console.log(`package size: ${packageSize}`); + console.log(`total files: ${allFiles.length}`); + const filesToInclude = files.map((file) => path.relative(cwd, file)); + try { + await tar.c( + { + gzip: true, + file: outputFilePath, + cwd: cwd, + }, + filesToInclude, + ); + } catch (error) { + console.error('Error creating tarball:', error); + } + return { collection, outputFilePath }; +}; +const publishCommand = new Command('publish') + .description('发布应用') + .option('-k, --key ', '应用 key') + .option('-v, --version ', '应用版本') + .action(async (options) => { + const { key, version } = options; + const config = await getConfig(); + const form = new FormData(); + console.log('发布逻辑实现', { key, version, config }); + }); + +const packCommand = new Command('pack') + .description('打包应用, 默认使用 package.json 中的 files 字段') + .option('-i, --ignore', '使用 .npmignore 文件模式去忽略文件进行打包, 不需要package.json中的files字段') + .action(async (opts) => { + let value: { collection: Record; outputFilePath: string }; + if (opts.ignore) { + value = await packByIgnore(); + } else { + value = await pack(); + } + // + }); + +program.addCommand(publishCommand); +program.addCommand(packCommand); diff --git a/src/index.ts b/src/index.ts index b4b48b2..9d41260 100644 --- a/src/index.ts +++ b/src/index.ts @@ -9,6 +9,7 @@ import './command/config.ts'; import './command/web.ts'; import './command/router.ts'; import './command/npm.ts'; +import './command/publish.ts'; // program.parse(process.argv); diff --git a/src/module/pino.ts b/src/module/pino.ts new file mode 100644 index 0000000..e69de29