diff --git a/.DS_Store b/.DS_Store index b977b84..14db30e 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.commitlintrc.cjs b/.commitlintrc.cjs index dfddad2..7a834c0 100644 --- a/.commitlintrc.cjs +++ b/.commitlintrc.cjs @@ -24,16 +24,18 @@ module.exports = { }, prompt: { messages: { - type: '请选择提交类型:', - subject: '请输入变更描述:\n', - footer: '列举关联的 issue (可选) 例如: #31, #I3244:\n', - confirmCommit: '是否提交?', + type: '请选择提交类型', + subject: '请输入变更描述', + breaking: '列举非兼容性重大的变更,如果有多行,使用 "|" 换行(选填项)\n', + footer: '列举关联的 issue,例如:#31,#I3244(选填项)\n', + confirmCommit: '是否提交', }, types: metas.map((meta) => ({ value: meta.type, name: `${`${meta.type}:`.padEnd(10, ' ')}${meta.section}`, })), - skipQuestions: ['scope', 'body', 'breaking', 'footerPrefix'], + allowBreakingChanges: ['feat', 'fix'], + skipQuestions: ['scope', 'body', 'footerPrefix'], formatMessageCB: (commit) => `${commit?.defaultMessage}\n\nCo-authored-by: ${readGitUser( 'name', diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4b685c1..88955f8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,7 +33,7 @@ jobs: run: pnpm lint - name: Build - run: pnpm build + run: pnpm build -a - name: Test run: pnpm test diff --git a/global.d.ts b/global.d.ts index fd00ad5..984dd3b 100644 --- a/global.d.ts +++ b/global.d.ts @@ -8,4 +8,4 @@ declare const qh: unknown; declare const ks: unknown; declare const dd: unknown; -declare type AnyObject = Record; +type AnyObject = Record; diff --git a/package.json b/package.json index 894256c..5b6a53a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "axios-miniprogram", "type": "module", - "version": "2.0.0.alpha.0", + "version": "2.0.0-alpha.0", "description": "基于 Promise 的 HTTP 请求库,适用于各大小程序平台。", "main": "dist/axios-miniprogram.esm.js", "module": "dist/axios-miniprogram.cjs.js", @@ -31,6 +31,7 @@ "scripts": { "cz": "czg", "build": "esno scripts/build.ts", + "build:zip": "esno scripts/build-zip.ts", "release": "esno scripts/release.ts", "test": "vitest run", "lint": "eslint --cache .", @@ -45,13 +46,15 @@ "@types/node": "^18.15.5", "@typescript-eslint/eslint-plugin": "^5.55.0", "@typescript-eslint/parser": "^5.55.0", - "archiver": "^5.3.1", + "chalk": "^5.2.0", "consola": "^2.15.3", "cz-git": "1.3.8", "czg": "1.3.8", "enquirer": "^2.3.6", "eslint": "^8.36.0", "esno": "^0.16.3", + "fast-glob": "^3.2.12", + "jszip": "^3.10.1", "lint-staged": "13.2.0", "minimist": "^1.2.8", "prettier": "2.8.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ef942d6..f4aa0c8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,13 +8,15 @@ specifiers: '@types/node': ^18.15.5 '@typescript-eslint/eslint-plugin': ^5.55.0 '@typescript-eslint/parser': ^5.55.0 - archiver: ^5.3.1 + chalk: ^5.2.0 consola: ^2.15.3 cz-git: 1.3.8 czg: 1.3.8 enquirer: ^2.3.6 eslint: ^8.36.0 esno: ^0.16.3 + fast-glob: ^3.2.12 + jszip: ^3.10.1 lint-staged: 13.2.0 minimist: ^1.2.8 prettier: 2.8.5 @@ -36,13 +38,15 @@ devDependencies: '@types/node': 18.15.5 '@typescript-eslint/eslint-plugin': 5.56.0_2hcjazgfnbtq42tcc73br2vup4 '@typescript-eslint/parser': 5.56.0_j4766f7ecgqbon3u7zlxn5zszu - archiver: 5.3.1 + chalk: 5.2.0 consola: 2.15.3 cz-git: 1.3.8 czg: 1.3.8 enquirer: 2.3.6 eslint: 8.36.0 esno: 0.16.3 + fast-glob: 3.2.12 + jszip: 3.10.1 lint-staged: 13.2.0_enquirer@2.3.6 minimist: 1.2.8 prettier: 2.8.5 @@ -1279,35 +1283,6 @@ packages: engines: {node: '>=12'} dev: true - /archiver-utils/2.1.0: - resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} - engines: {node: '>= 6'} - dependencies: - glob: 7.2.3 - graceful-fs: 4.2.11 - lazystream: 1.0.1 - lodash.defaults: 4.2.0 - lodash.difference: 4.5.0 - lodash.flatten: 4.4.0 - lodash.isplainobject: 4.0.6 - lodash.union: 4.6.0 - normalize-path: 3.0.0 - readable-stream: 2.3.8 - dev: true - - /archiver/5.3.1: - resolution: {integrity: sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==} - engines: {node: '>= 10'} - dependencies: - archiver-utils: 2.1.0 - async: 3.2.4 - buffer-crc32: 0.2.13 - readable-stream: 3.6.2 - readdir-glob: 1.1.2 - tar-stream: 2.2.0 - zip-stream: 4.1.0 - dev: true - /arg/4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true @@ -1339,26 +1314,10 @@ packages: engines: {node: '>=8'} dev: true - /async/3.2.4: - resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} - dev: true - /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /base64-js/1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true - - /bl/4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - dev: true - /body-scroll-lock/4.0.0-beta.0: resolution: {integrity: sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==} dev: true @@ -1383,21 +1342,10 @@ packages: fill-range: 7.0.1 dev: true - /buffer-crc32/0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - dev: true - /buffer-from/1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /buffer/5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true - /cac/6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -1540,16 +1488,6 @@ packages: dot-prop: 5.3.0 dev: true - /compress-commons/4.1.1: - resolution: {integrity: sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==} - engines: {node: '>= 10'} - dependencies: - buffer-crc32: 0.2.13 - crc32-stream: 4.0.2 - normalize-path: 3.0.0 - readable-stream: 3.6.2 - dev: true - /concat-map/0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true @@ -1617,20 +1555,6 @@ packages: path-type: 4.0.0 dev: true - /crc-32/1.2.2: - resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} - engines: {node: '>=0.8'} - hasBin: true - dev: true - - /crc32-stream/4.0.2: - resolution: {integrity: sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==} - engines: {node: '>= 10'} - dependencies: - crc-32: 1.2.2 - readable-stream: 3.6.2 - dev: true - /create-require/1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true @@ -1746,12 +1670,6 @@ packages: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true - /end-of-stream/1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - dependencies: - once: 1.4.0 - dev: true - /enquirer/2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} @@ -2050,10 +1968,6 @@ packages: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true - /fs-constants/1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - dev: true - /fs-extra/11.1.1: resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} engines: {node: '>=14.14'} @@ -2221,15 +2135,15 @@ packages: engines: {node: '>=14.18.0'} dev: true - /ieee754/1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true - /ignore/5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} dev: true + /immediate/3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + dev: true + /import-fresh/3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -2445,18 +2359,20 @@ packages: engines: {'0': node >= 0.2.0} dev: true + /jszip/3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + dev: true + /kind-of/6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} dev: true - /lazystream/1.0.1: - resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} - engines: {node: '>= 0.6.3'} - dependencies: - readable-stream: 2.3.8 - dev: true - /levn/0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -2465,6 +2381,12 @@ packages: type-check: 0.4.0 dev: true + /lie/3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + dependencies: + immediate: 3.0.6 + dev: true + /lilconfig/2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -2540,18 +2462,6 @@ packages: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true - /lodash.defaults/4.2.0: - resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} - dev: true - - /lodash.difference/4.5.0: - resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} - dev: true - - /lodash.flatten/4.4.0: - resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} - dev: true - /lodash.isfunction/3.0.9: resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} dev: true @@ -2580,10 +2490,6 @@ packages: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} dev: true - /lodash.union/4.6.0: - resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} - dev: true - /lodash.uniq/4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} dev: true @@ -2706,13 +2612,6 @@ packages: brace-expansion: 1.1.11 dev: true - /minimatch/5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimatch/7.4.3: resolution: {integrity: sha512-5UB4yYusDtkRPbRiy1cqZ1IpGNcJCGlEMG17RKzPddpyiPKoCdwohbED8g4QXT0ewCt8LTkQXuljsUfQ3FKM4A==} engines: {node: '>=10'} @@ -2886,6 +2785,10 @@ packages: engines: {node: '>=6'} dev: true + /pako/1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + dev: true + /parent-module/1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -3084,12 +2987,6 @@ packages: util-deprecate: 1.0.2 dev: true - /readdir-glob/1.1.2: - resolution: {integrity: sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA==} - dependencies: - minimatch: 5.1.6 - dev: true - /redent/3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -3238,6 +3135,10 @@ packages: lru-cache: 6.0.0 dev: true + /setimmediate/1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + dev: true + /shebang-command/2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -3465,17 +3366,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /tar-stream/2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.4 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - dev: true - /text-extensions/1.9.0: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} engines: {node: '>=0.10'} @@ -3930,12 +3820,3 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} dev: true - - /zip-stream/4.1.0: - resolution: {integrity: sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==} - engines: {node: '>= 10'} - dependencies: - archiver-utils: 2.1.0 - compress-commons: 4.1.1 - readable-stream: 3.6.2 - dev: true diff --git a/rollup.config.js b/rollup.config.js index 3c51acb..c8389f1 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,11 +1,12 @@ import path from 'node:path'; -import esbuild from 'rollup-plugin-esbuild'; +import esbuildPlugin from 'rollup-plugin-esbuild'; import dtsPlugin from 'rollup-plugin-dts'; -import { __dirname, getPkgJSON } from './scripts/utils.js'; +import { __dirname, distPath, getPkgJSON } from './scripts/utils.js'; +import { readFileSync } from 'node:fs'; const pkg = getPkgJSON(); const inputPath = path.resolve(__dirname, 'src/index.ts'); -const outputPath = path.resolve(__dirname, 'dist'); + const sourceMap = process.env.SOURCE_MAP === 'true'; const dts = process.env.DTS === 'true'; @@ -19,6 +20,11 @@ function main() { return configs; } +/** + * + * @param {*} format + * @returns {import('rollup').InputOptions} + */ function buildConfig(format) { const isDts = format === 'dts'; const output = { @@ -35,11 +41,14 @@ function buildConfig(format) { output, plugins: [ isDts - ? dtsPlugin({ - tsconfig: path.resolve(__dirname, 'tsconfig.build.json'), - }) - : esbuild({ - tsconfig: path.resolve(__dirname, 'tsconfig.build.json'), + ? [ + dtsPlugin({ + tsconfig: path.resolve(__dirname, 'tsconfig.json'), + }), + compleTypePlugin([path.resolve(__dirname, 'global.d.ts')]), + ] + : esbuildPlugin({ + tsconfig: path.resolve(__dirname, 'tsconfig.json'), sourceMap: output.sourcemap, minify: true, }), @@ -49,7 +58,22 @@ function buildConfig(format) { function resolvePath(format, isDts) { return path.resolve( - outputPath, + distPath, `${pkg.name}${isDts ? '.d.ts' : `.${format}.js`}`, ); } + +function compleTypePlugin(files) { + return { + name: 'comple-type', + renderChunk: (code) => + `${files + .map( + (file) => + `// ${file.replace(__dirname, '')}\n${readFileSync( + file, + ).toString()}\n// ${file.replace(__dirname, '')} end\n`, + ) + .join('')}\n${code}`, + }; +} diff --git a/scripts/build-zip.ts b/scripts/build-zip.ts new file mode 100644 index 0000000..0bfe792 --- /dev/null +++ b/scripts/build-zip.ts @@ -0,0 +1,50 @@ +import fs from 'node:fs'; +import fg from 'fast-glob'; +import JSZip from 'jszip'; +import consola from 'consola'; +import chalk from 'chalk'; +import { distPath, exec } from './utils'; + +main(); + +async function main() { + exec('pnpm build'); + + consola.info('Generate zip\n'); + for (const filePath of await fg(`${distPath}/**.js`)) { + await generateZip(filePath, filePath.replace(/\.js$/, '.zip')); + } +} + +function generateZip(inputPath: string, outputPath: string) { + return new Promise((resolve, reject) => { + const inputName = getFileName(inputPath); + const outputName = getFileName(outputPath); + + console.log(chalk.cyanBright.bold(`${inputPath} → dist/${outputName}...`)); + + const start = Date.now(); + JSZip() + .file(inputName, fs.createReadStream(inputPath)) + .generateNodeStream({ type: 'nodebuffer', streamFiles: true }) + .pipe(fs.createWriteStream(outputPath)) + .on('finish', (result) => { + console.log( + `${chalk.green('created')} ${chalk.greenBright.bold( + `dist/${outputName} in ${Date.now() - start}ms\n`, + )}`, + ); + exec(`rimraf ${inputPath}`); + resolve(result); + }) + .on('error', reject); + }); +} + +function getFileName(filePath: string) { + const result = filePath.match(/\/([^/]*)$/); + if (!result) { + throw new Error(`无效的文件路径 ${filePath}`); + } + return result[1]; +} diff --git a/scripts/build.ts b/scripts/build.ts index ac823c0..ddc8455 100644 --- a/scripts/build.ts +++ b/scripts/build.ts @@ -3,20 +3,22 @@ import consola from 'consola'; import { exec } from './utils'; const args = minimist(process.argv.slice(2)); -const watching = Boolean(args.watch || args.w); -const release = Boolean(args.release || args.r); -const sourceMap = release || Boolean(args.sourceMap || args.s); -const dts = release || Boolean(args.dts || args.d); +const watch = Boolean(args.watch || args.w); +const all = Boolean(args.all || args.a); +const sourceMap = all || Boolean(args.sourceMap || args.s); +const dts = all || Boolean(args.dts || args.d); build(); function build() { exec('rimraf dist'); - consola.info('构建产物'); + consola.info('Rollup'); exec( `rollup -c ${ - watching ? '-w' : '' + watch ? '-w' : '' } --environment SOURCE_MAP:${sourceMap},DTS:${dts}`, ); + + console.info('\n'); } diff --git a/scripts/publish.ts b/scripts/publish.ts new file mode 100644 index 0000000..e69de29 diff --git a/scripts/release.ts b/scripts/release.ts index 3d1eb44..5fb7b5d 100644 --- a/scripts/release.ts +++ b/scripts/release.ts @@ -7,10 +7,7 @@ import { exec, pkgPath, getPkgJSON } from './utils'; const pkg = getPkgJSON(); const { version: currentVersion } = pkg; -main().catch((err) => { - updateVersion(currentVersion); - console.error(err); -}); +main().catch((err) => exit(err.message)); async function main() { checkBranch(); @@ -36,11 +33,12 @@ function checkBranch() { const releaseBranch = 'main'; const currentBranch = exec('git branch --show-current', { stdio: 'pipe', - }).toString(); + }) + .toString() + .trim(); if (currentBranch !== releaseBranch) { - consola.warn(`请切回 ${releaseBranch} 分支进行发版!`); - process.exit(); + exit(`请切回 ${releaseBranch} 分支进行发版!`); } } @@ -73,8 +71,7 @@ async function inputVersion() { !semver.valid(targetVersion) || !semver.lt(currentVersion, targetVersion) ) { - consola.error(`无效的版本号: ${targetVersion}`); - process.exit(); + exit(`无效的版本号: ${targetVersion}`); } const { yes: confirmRelease } = await enquirer.prompt<{ yes: boolean }>({ @@ -84,8 +81,7 @@ async function inputVersion() { }); if (!confirmRelease) { - consola.error(`取消发布: v${targetVersion}`); - process.exit(); + exit(`取消发布: v${targetVersion}`); } return targetVersion; @@ -108,6 +104,12 @@ function createReleases() { return releases; } +function exit(msg: string) { + updateVersion(currentVersion); + consola.error(msg || '已退出'); + process.exit(); +} + function updateVersion(version: string) { pkg.version = version; fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n'); diff --git a/scripts/utils.js b/scripts/utils.js index b27ae03..db835c5 100644 --- a/scripts/utils.js +++ b/scripts/utils.js @@ -5,7 +5,10 @@ import { execSync } from 'node:child_process'; export const __dirname = fileURLToPath(new URL('../', import.meta.url)); export const require = createRequire(import.meta.url); +export const pkgPath = path.resolve(__dirname, 'package.json'); +export const distPath = path.resolve(__dirname, 'dist'); + export const exec = (command, options) => execSync(command, { stdio: 'inherit', ...(options ?? {}) }); -export const pkgPath = path.resolve(__dirname, 'package.json'); + export const getPkgJSON = () => require(pkgPath); diff --git a/scripts/zip.ts b/scripts/zip.ts deleted file mode 100644 index 8d9272a..0000000 --- a/scripts/zip.ts +++ /dev/null @@ -1,37 +0,0 @@ -// import fs from 'node:fs'; -// import path from 'node:path'; -// import archiver from 'archiver'; -// import { getPkgJSON } from './utils'; - -// const pkg = getPkgJSON(); - -// const zip = archiver.create('zip', {}); -// const distPath = path.resolve(__dirname, '..', 'dist'); -// const distZipName = `download/${pkg.version}.zip`; -// const distZipPath = path.resolve(__dirname, '..', distZipName); - -// function main() { -// const outputStream = fs.createWriteStream(distZipPath); -// const startTime = +new Date(); - -// zip.glob() -// zip.on('error', (error) => { -// throw error; -// }); -// zip.on('finish', () => { -// const endTime = +new Date(); -// const ss = ((endTime - startTime) / 1000).toFixed(1); - -// }); -// zip.pipe(outputStream); -// zip.directory(distPath, pkg.name); -// zip.finalize(); -// } - -// function getFilePaths(){ - -// } - -// function createZipName(){ -// return -// } diff --git a/src/helpers/is.ts b/src/helpers/is.ts index 5af0880..299ebce 100644 --- a/src/helpers/is.ts +++ b/src/helpers/is.ts @@ -24,7 +24,7 @@ export function isNull(value: any): value is null { return value === null; } -export function isPlainObject(value: any): value is object { +export function isPlainObject(value: any): value is object & AnyObject { return _toString.call(value) === '[object Object]'; } diff --git a/tsconfig.json b/tsconfig.json index d46a75b..cf59f9d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,6 +8,6 @@ "strict": true, "noEmit": true }, - "include": ["src", "test", "global.d.ts"], + "include": ["./src", "./test", "./global.d.ts"], "exclude": ["node_modules"] }