diff --git a/package.json b/package.json index bb277925..d77af9d2 100644 --- a/package.json +++ b/package.json @@ -83,6 +83,7 @@ "json5": "^2.2.3", "linkedom": "^0.15.1", "minimatch": "^9.0.3", + "ora": "^7.0.1", "picocolors": "^1.0.0", "prompts": "^2.4.2", "rollup-plugin-visualizer": "^5.9.2", @@ -103,7 +104,6 @@ "lint-staged": "^14.0.0", "lodash.merge": "^4.6.2", "npm-run-all": "^4.1.5", - "ora": "^7.0.1", "prettier": "^3.0.1", "simple-git-hooks": "^2.9.0", "ts-morph": "^19.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e7360181..5915bec3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -62,6 +62,9 @@ importers: minimatch: specifier: ^9.0.3 version: 9.0.3 + ora: + specifier: ^7.0.1 + version: 7.0.1 picocolors: specifier: ^1.0.0 version: 1.0.0 @@ -117,9 +120,6 @@ importers: npm-run-all: specifier: ^4.1.5 version: 4.1.5 - ora: - specifier: ^7.0.1 - version: 7.0.1 prettier: specifier: ^3.0.1 version: 3.0.3 @@ -1421,7 +1421,7 @@ packages: /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true + dev: false /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} @@ -1433,7 +1433,7 @@ packages: buffer: 6.0.3 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true + dev: false /bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} @@ -1482,7 +1482,7 @@ packages: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true + dev: false /bundle-require@4.0.1(esbuild@0.18.11): resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} @@ -1633,12 +1633,11 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: restore-cursor: 4.0.0 - dev: true /cli-spinners@2.9.0: resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==} engines: {node: '>=6'} - dev: true + dev: false /cli-truncate@3.1.0: resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} @@ -1935,7 +1934,7 @@ packages: /emoji-regex@10.2.1: resolution: {integrity: sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==} - dev: true + dev: false /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2515,7 +2514,7 @@ packages: /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true + dev: false /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} @@ -2677,7 +2676,7 @@ packages: /is-interactive@2.0.0: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} - dev: true + dev: false /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} @@ -2771,7 +2770,7 @@ packages: /is-unicode-supported@1.3.0: resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} engines: {node: '>=12'} - dev: true + dev: false /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} @@ -3020,7 +3019,7 @@ packages: dependencies: chalk: 5.3.0 is-unicode-supported: 1.3.0 - dev: true + dev: false /log-update@5.0.1: resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} @@ -3105,7 +3104,6 @@ packages: /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - dev: true /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} @@ -3383,7 +3381,6 @@ packages: engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - dev: true /onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} @@ -3414,7 +3411,7 @@ packages: stdin-discarder: 0.1.0 string-width: 6.1.0 strip-ansi: 7.1.0 - dev: true + dev: false /os-shim@0.1.3: resolution: {integrity: sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==} @@ -3688,7 +3685,7 @@ packages: inherits: 2.0.4 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: true + dev: false /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} @@ -3763,7 +3760,6 @@ packages: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} @@ -3826,6 +3822,7 @@ packages: /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: false /safe-json-stringify@1.2.0: resolution: {integrity: sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==} @@ -4040,7 +4037,7 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: bl: 5.1.0 - dev: true + dev: false /string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} @@ -4071,7 +4068,7 @@ packages: eastasianwidth: 0.2.0 emoji-regex: 10.2.1 strip-ansi: 7.1.0 - dev: true + dev: false /string.prototype.padend@3.1.4: resolution: {integrity: sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==} @@ -4111,6 +4108,7 @@ packages: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 + dev: false /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} @@ -4470,6 +4468,7 @@ packages: /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: false /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} diff --git a/src/cli/commands/init.ts b/src/cli/commands/init.ts index dfb75aa6..97d2a49f 100644 --- a/src/cli/commands/init.ts +++ b/src/cli/commands/init.ts @@ -1,6 +1,5 @@ import { defineCommand } from '../utils/defineCommand'; import prompts from 'prompts'; -import ora from 'ora'; import { consola } from 'consola'; import { downloadTemplate } from 'giget'; import fs from 'fs-extra'; @@ -133,6 +132,7 @@ async function cloneProject({ template: Template; packageManager: string; }) { + const { default: ora } = await import('ora'); const spinner = ora('Downloading template').start(); try { // 1. Clone repo diff --git a/src/core/build.ts b/src/core/build.ts index d606be43..4c1b0e4f 100644 --- a/src/core/build.ts +++ b/src/core/build.ts @@ -81,6 +81,9 @@ export async function rebuild( publicAssets: [], }, ): Promise<{ output: BuildOutput; manifest: Manifest.WebExtensionManifest }> { + const { default: ora } = await import('ora'); + const spinner = ora(`Preparing...`).start(); + // Update types directory with new files and types const allEntrypoints = await findEntrypoints(config); await generateTypesDir(allEntrypoints, config).catch((err) => { @@ -90,7 +93,7 @@ export async function rebuild( }); // Build and merge the outputs - const newOutput = await buildEntrypoints(entrypointGroups, config); + const newOutput = await buildEntrypoints(entrypointGroups, config, spinner); const mergedOutput: Omit = { steps: [...existingOutput.steps, ...newOutput.steps], publicAssets: [...existingOutput.publicAssets, ...newOutput.publicAssets], @@ -109,6 +112,9 @@ export async function rebuild( // Write manifest await writeManifest(newManifest, finalOutput, config); + // Stop the spinner and remove it from the CLI output + spinner.clear().stop(); + return { output: { manifest: newManifest, diff --git a/src/core/build/buildEntrypoints.ts b/src/core/build/buildEntrypoints.ts index 8cef2b3b..fe63b463 100644 --- a/src/core/build/buildEntrypoints.ts +++ b/src/core/build/buildEntrypoints.ts @@ -13,13 +13,25 @@ import fs from 'fs-extra'; import { dirname, resolve } from 'path'; import { getPublicFiles } from '../utils/public'; import { getEntrypointGlobals } from '../utils/globals'; +import type { Ora } from 'ora'; +import pc from 'picocolors'; export async function buildEntrypoints( groups: EntrypointGroup[], config: InternalConfig, + spinner: Ora, ): Promise> { const steps: BuildStepOutput[] = []; - for (const group of groups) { + for (let i = 0; i < groups.length; i++) { + const group = groups[i]; + + spinner.text = + pc.dim(`[${i + 1}/${groups.length}]`) + + ` ${[group] + .flat() + .map((e) => e.name) + .join(pc.dim(', '))}`; + const step = Array.isArray(group) ? await buildMultipleEntrypoints(group, config) : await buildSingleEntrypoint(group, config);