From 68ab34a6bfa07b45b43f7ef6827458f1b115fb4b Mon Sep 17 00:00:00 2001 From: paulcoding810 <41385034+longnghia@users.noreply.github.com> Date: Sun, 16 Feb 2025 09:16:01 +0700 Subject: [PATCH 1/2] mv contents to template dir --- .github/workflows/build.yml | 3 ++ README.md | 45 ------------------ index.js | 0 .editorconfig => template/.editorconfig | 0 template/.github/workflows/build.yml | 34 +++++++++++++ .../.github}/workflows/release.yml | 0 .gitignore => template/.gitignore | 0 .npmignore => template/.npmignore | 0 .prettierignore => template/.prettierignore | 0 .prettierrc => template/.prettierrc | 0 CHANGELOG.md => template/CHANGELOG.md | 0 LICENSE => template/LICENSE | 0 template/README.md | 45 ++++++++++++++++++ devtools.html => template/devtools.html | 0 eslint.config.js => template/eslint.config.js | 0 jsconfig.json => template/jsconfig.json | 0 newtab.html => template/newtab.html | 0 options.html => template/options.html | 0 package.json => template/package.json | 0 popup.html => template/popup.html | 0 {public => template/public}/icons/logo.ico | Bin {public => template/public}/icons/logo.svg | 0 {public => template/public}/img/logo-128.png | Bin {public => template/public}/img/logo-16.png | Bin {public => template/public}/img/logo-34.png | Bin {public => template/public}/img/logo-48.png | Bin sidepanel.html => template/sidepanel.html | 0 {src => template/src}/assets/logo.png | Bin {src => template/src}/background/index.js | 0 {src => template/src}/contentScript/index.js | 0 {src => template/src}/convert.js | 0 {src => template/src}/devtools/DevTools.css | 0 {src => template/src}/devtools/DevTools.jsx | 0 {src => template/src}/devtools/index.css | 0 {src => template/src}/devtools/index.jsx | 0 {src => template/src}/helper/IDB.js | 0 {src => template/src}/helper/Storage.js | 0 {src => template/src}/manifest.js | 0 {src => template/src}/newtab/NewTab.css | 0 {src => template/src}/newtab/NewTab.jsx | 0 {src => template/src}/newtab/index.css | 0 {src => template/src}/newtab/index.jsx | 0 {src => template/src}/options/Options.css | 0 {src => template/src}/options/Options.jsx | 0 {src => template/src}/options/index.css | 0 {src => template/src}/options/index.jsx | 0 {src => template/src}/popup/Popup.css | 0 {src => template/src}/popup/Popup.jsx | 0 {src => template/src}/popup/index.css | 0 {src => template/src}/popup/index.jsx | 0 {src => template/src}/sidepanel/SidePanel.css | 0 {src => template/src}/sidepanel/SidePanel.jsx | 0 {src => template/src}/sidepanel/index.css | 0 {src => template/src}/sidepanel/index.jsx | 0 {src => template/src}/zip.js | 0 .../tailwind.config.js | 0 vite.config.js => template/vite.config.js | 0 yarn.lock => template/yarn.lock | 0 58 files changed, 82 insertions(+), 45 deletions(-) create mode 100644 index.js rename .editorconfig => template/.editorconfig (100%) create mode 100644 template/.github/workflows/build.yml rename {.github => template/.github}/workflows/release.yml (100%) rename .gitignore => template/.gitignore (100%) rename .npmignore => template/.npmignore (100%) rename .prettierignore => template/.prettierignore (100%) rename .prettierrc => template/.prettierrc (100%) rename CHANGELOG.md => template/CHANGELOG.md (100%) rename LICENSE => template/LICENSE (100%) create mode 100644 template/README.md rename devtools.html => template/devtools.html (100%) rename eslint.config.js => template/eslint.config.js (100%) rename jsconfig.json => template/jsconfig.json (100%) rename newtab.html => template/newtab.html (100%) rename options.html => template/options.html (100%) rename package.json => template/package.json (100%) rename popup.html => template/popup.html (100%) rename {public => template/public}/icons/logo.ico (100%) rename {public => template/public}/icons/logo.svg (100%) rename {public => template/public}/img/logo-128.png (100%) rename {public => template/public}/img/logo-16.png (100%) rename {public => template/public}/img/logo-34.png (100%) rename {public => template/public}/img/logo-48.png (100%) rename sidepanel.html => template/sidepanel.html (100%) rename {src => template/src}/assets/logo.png (100%) rename {src => template/src}/background/index.js (100%) rename {src => template/src}/contentScript/index.js (100%) rename {src => template/src}/convert.js (100%) rename {src => template/src}/devtools/DevTools.css (100%) rename {src => template/src}/devtools/DevTools.jsx (100%) rename {src => template/src}/devtools/index.css (100%) rename {src => template/src}/devtools/index.jsx (100%) rename {src => template/src}/helper/IDB.js (100%) rename {src => template/src}/helper/Storage.js (100%) rename {src => template/src}/manifest.js (100%) rename {src => template/src}/newtab/NewTab.css (100%) rename {src => template/src}/newtab/NewTab.jsx (100%) rename {src => template/src}/newtab/index.css (100%) rename {src => template/src}/newtab/index.jsx (100%) rename {src => template/src}/options/Options.css (100%) rename {src => template/src}/options/Options.jsx (100%) rename {src => template/src}/options/index.css (100%) rename {src => template/src}/options/index.jsx (100%) rename {src => template/src}/popup/Popup.css (100%) rename {src => template/src}/popup/Popup.jsx (100%) rename {src => template/src}/popup/index.css (100%) rename {src => template/src}/popup/index.jsx (100%) rename {src => template/src}/sidepanel/SidePanel.css (100%) rename {src => template/src}/sidepanel/SidePanel.jsx (100%) rename {src => template/src}/sidepanel/index.css (100%) rename {src => template/src}/sidepanel/index.jsx (100%) rename {src => template/src}/zip.js (100%) rename tailwind.config.js => template/tailwind.config.js (100%) rename vite.config.js => template/vite.config.js (100%) rename yarn.lock => template/yarn.lock (100%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5e70b83..8a9403b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,6 +12,9 @@ jobs: build: name: Create artifacts runs-on: ubuntu-latest + defaults: + run: + working-directory: ./template steps: - uses: actions/checkout@v4 - uses: actions/cache@v4 diff --git a/README.md b/README.md index d4b18b4..e69de29 100644 --- a/README.md +++ b/README.md @@ -1,45 +0,0 @@ -# my-crx-app - -> a chrome/firefox extension tools built with Vite + React-js, and Manifest v3 - -## Installing - -1. Check if your `Node.js` version is >= **14**. -2. Change or configurate the name of your extension on `src/manifest`. -3. Run `yarn` to install the dependencies. - -## Developing - -run the command - -```shell -$ cd my-crx-app - -$ yarn dev -``` - -### Chrome Extension Developer Mode - -1. set your Chrome browser 'Developer mode' up -2. click 'Load unpacked', and select `my-crx-app/build` folder - -### Firefox Extension Developer Mode - -1. Build your project firstly by running `yarn build:firefox` -2. Open Firefox and go to `about:debugging#/runtime/this-firefox` -3. Click on 'Load Temporary Add-on' and select `my-crx-app/build` folder - - -## Packing - -After the development of your extension run the command - -```shell -$ yarn zip # for chrome -or -$ yarn zip:firefox # for firefox -``` - ---- - -Generated by [create-chrome-ext](https://github.com/guocaoyi/create-chrome-ext) diff --git a/index.js b/index.js new file mode 100644 index 0000000..e69de29 diff --git a/.editorconfig b/template/.editorconfig similarity index 100% rename from .editorconfig rename to template/.editorconfig diff --git a/template/.github/workflows/build.yml b/template/.github/workflows/build.yml new file mode 100644 index 0000000..5e70b83 --- /dev/null +++ b/template/.github/workflows/build.yml @@ -0,0 +1,34 @@ +name: Build + +on: + pull_request: + branches: + - '*' + push: + branches: + - main + +jobs: + build: + name: Create artifacts + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/cache@v4 + with: + path: '**/node_modules' + key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }} + - uses: actions/setup-node@v3 + with: + node-version: '21' + - name: install dependency + run: yarn + - name: Create chrome artifacts + run: yarn zip + - name: Create Firefox artifacts + run: yarn zip:firefox + - uses: actions/upload-artifact@v4 + with: + name: extensions + path: | + package/* diff --git a/.github/workflows/release.yml b/template/.github/workflows/release.yml similarity index 100% rename from .github/workflows/release.yml rename to template/.github/workflows/release.yml diff --git a/.gitignore b/template/.gitignore similarity index 100% rename from .gitignore rename to template/.gitignore diff --git a/.npmignore b/template/.npmignore similarity index 100% rename from .npmignore rename to template/.npmignore diff --git a/.prettierignore b/template/.prettierignore similarity index 100% rename from .prettierignore rename to template/.prettierignore diff --git a/.prettierrc b/template/.prettierrc similarity index 100% rename from .prettierrc rename to template/.prettierrc diff --git a/CHANGELOG.md b/template/CHANGELOG.md similarity index 100% rename from CHANGELOG.md rename to template/CHANGELOG.md diff --git a/LICENSE b/template/LICENSE similarity index 100% rename from LICENSE rename to template/LICENSE diff --git a/template/README.md b/template/README.md new file mode 100644 index 0000000..d4b18b4 --- /dev/null +++ b/template/README.md @@ -0,0 +1,45 @@ +# my-crx-app + +> a chrome/firefox extension tools built with Vite + React-js, and Manifest v3 + +## Installing + +1. Check if your `Node.js` version is >= **14**. +2. Change or configurate the name of your extension on `src/manifest`. +3. Run `yarn` to install the dependencies. + +## Developing + +run the command + +```shell +$ cd my-crx-app + +$ yarn dev +``` + +### Chrome Extension Developer Mode + +1. set your Chrome browser 'Developer mode' up +2. click 'Load unpacked', and select `my-crx-app/build` folder + +### Firefox Extension Developer Mode + +1. Build your project firstly by running `yarn build:firefox` +2. Open Firefox and go to `about:debugging#/runtime/this-firefox` +3. Click on 'Load Temporary Add-on' and select `my-crx-app/build` folder + + +## Packing + +After the development of your extension run the command + +```shell +$ yarn zip # for chrome +or +$ yarn zip:firefox # for firefox +``` + +--- + +Generated by [create-chrome-ext](https://github.com/guocaoyi/create-chrome-ext) diff --git a/devtools.html b/template/devtools.html similarity index 100% rename from devtools.html rename to template/devtools.html diff --git a/eslint.config.js b/template/eslint.config.js similarity index 100% rename from eslint.config.js rename to template/eslint.config.js diff --git a/jsconfig.json b/template/jsconfig.json similarity index 100% rename from jsconfig.json rename to template/jsconfig.json diff --git a/newtab.html b/template/newtab.html similarity index 100% rename from newtab.html rename to template/newtab.html diff --git a/options.html b/template/options.html similarity index 100% rename from options.html rename to template/options.html diff --git a/package.json b/template/package.json similarity index 100% rename from package.json rename to template/package.json diff --git a/popup.html b/template/popup.html similarity index 100% rename from popup.html rename to template/popup.html diff --git a/public/icons/logo.ico b/template/public/icons/logo.ico similarity index 100% rename from public/icons/logo.ico rename to template/public/icons/logo.ico diff --git a/public/icons/logo.svg b/template/public/icons/logo.svg similarity index 100% rename from public/icons/logo.svg rename to template/public/icons/logo.svg diff --git a/public/img/logo-128.png b/template/public/img/logo-128.png similarity index 100% rename from public/img/logo-128.png rename to template/public/img/logo-128.png diff --git a/public/img/logo-16.png b/template/public/img/logo-16.png similarity index 100% rename from public/img/logo-16.png rename to template/public/img/logo-16.png diff --git a/public/img/logo-34.png b/template/public/img/logo-34.png similarity index 100% rename from public/img/logo-34.png rename to template/public/img/logo-34.png diff --git a/public/img/logo-48.png b/template/public/img/logo-48.png similarity index 100% rename from public/img/logo-48.png rename to template/public/img/logo-48.png diff --git a/sidepanel.html b/template/sidepanel.html similarity index 100% rename from sidepanel.html rename to template/sidepanel.html diff --git a/src/assets/logo.png b/template/src/assets/logo.png similarity index 100% rename from src/assets/logo.png rename to template/src/assets/logo.png diff --git a/src/background/index.js b/template/src/background/index.js similarity index 100% rename from src/background/index.js rename to template/src/background/index.js diff --git a/src/contentScript/index.js b/template/src/contentScript/index.js similarity index 100% rename from src/contentScript/index.js rename to template/src/contentScript/index.js diff --git a/src/convert.js b/template/src/convert.js similarity index 100% rename from src/convert.js rename to template/src/convert.js diff --git a/src/devtools/DevTools.css b/template/src/devtools/DevTools.css similarity index 100% rename from src/devtools/DevTools.css rename to template/src/devtools/DevTools.css diff --git a/src/devtools/DevTools.jsx b/template/src/devtools/DevTools.jsx similarity index 100% rename from src/devtools/DevTools.jsx rename to template/src/devtools/DevTools.jsx diff --git a/src/devtools/index.css b/template/src/devtools/index.css similarity index 100% rename from src/devtools/index.css rename to template/src/devtools/index.css diff --git a/src/devtools/index.jsx b/template/src/devtools/index.jsx similarity index 100% rename from src/devtools/index.jsx rename to template/src/devtools/index.jsx diff --git a/src/helper/IDB.js b/template/src/helper/IDB.js similarity index 100% rename from src/helper/IDB.js rename to template/src/helper/IDB.js diff --git a/src/helper/Storage.js b/template/src/helper/Storage.js similarity index 100% rename from src/helper/Storage.js rename to template/src/helper/Storage.js diff --git a/src/manifest.js b/template/src/manifest.js similarity index 100% rename from src/manifest.js rename to template/src/manifest.js diff --git a/src/newtab/NewTab.css b/template/src/newtab/NewTab.css similarity index 100% rename from src/newtab/NewTab.css rename to template/src/newtab/NewTab.css diff --git a/src/newtab/NewTab.jsx b/template/src/newtab/NewTab.jsx similarity index 100% rename from src/newtab/NewTab.jsx rename to template/src/newtab/NewTab.jsx diff --git a/src/newtab/index.css b/template/src/newtab/index.css similarity index 100% rename from src/newtab/index.css rename to template/src/newtab/index.css diff --git a/src/newtab/index.jsx b/template/src/newtab/index.jsx similarity index 100% rename from src/newtab/index.jsx rename to template/src/newtab/index.jsx diff --git a/src/options/Options.css b/template/src/options/Options.css similarity index 100% rename from src/options/Options.css rename to template/src/options/Options.css diff --git a/src/options/Options.jsx b/template/src/options/Options.jsx similarity index 100% rename from src/options/Options.jsx rename to template/src/options/Options.jsx diff --git a/src/options/index.css b/template/src/options/index.css similarity index 100% rename from src/options/index.css rename to template/src/options/index.css diff --git a/src/options/index.jsx b/template/src/options/index.jsx similarity index 100% rename from src/options/index.jsx rename to template/src/options/index.jsx diff --git a/src/popup/Popup.css b/template/src/popup/Popup.css similarity index 100% rename from src/popup/Popup.css rename to template/src/popup/Popup.css diff --git a/src/popup/Popup.jsx b/template/src/popup/Popup.jsx similarity index 100% rename from src/popup/Popup.jsx rename to template/src/popup/Popup.jsx diff --git a/src/popup/index.css b/template/src/popup/index.css similarity index 100% rename from src/popup/index.css rename to template/src/popup/index.css diff --git a/src/popup/index.jsx b/template/src/popup/index.jsx similarity index 100% rename from src/popup/index.jsx rename to template/src/popup/index.jsx diff --git a/src/sidepanel/SidePanel.css b/template/src/sidepanel/SidePanel.css similarity index 100% rename from src/sidepanel/SidePanel.css rename to template/src/sidepanel/SidePanel.css diff --git a/src/sidepanel/SidePanel.jsx b/template/src/sidepanel/SidePanel.jsx similarity index 100% rename from src/sidepanel/SidePanel.jsx rename to template/src/sidepanel/SidePanel.jsx diff --git a/src/sidepanel/index.css b/template/src/sidepanel/index.css similarity index 100% rename from src/sidepanel/index.css rename to template/src/sidepanel/index.css diff --git a/src/sidepanel/index.jsx b/template/src/sidepanel/index.jsx similarity index 100% rename from src/sidepanel/index.jsx rename to template/src/sidepanel/index.jsx diff --git a/src/zip.js b/template/src/zip.js similarity index 100% rename from src/zip.js rename to template/src/zip.js diff --git a/tailwind.config.js b/template/tailwind.config.js similarity index 100% rename from tailwind.config.js rename to template/tailwind.config.js diff --git a/vite.config.js b/template/vite.config.js similarity index 100% rename from vite.config.js rename to template/vite.config.js diff --git a/yarn.lock b/template/yarn.lock similarity index 100% rename from yarn.lock rename to template/yarn.lock From af90a89b3ef01592201b9682a1031a34583d0349 Mon Sep 17 00:00:00 2001 From: paulcoding810 <41385034+longnghia@users.noreply.github.com> Date: Sun, 16 Feb 2025 09:16:11 +0700 Subject: [PATCH 2/2] add generate script --- .github/workflows/release.yml | 25 +++ .gitignore | 1 + generate.js | 74 ++++++++ package.json | 15 ++ yarn.lock | 327 ++++++++++++++++++++++++++++++++++ 5 files changed, 442 insertions(+) create mode 100644 .github/workflows/release.yml create mode 100644 .gitignore create mode 100755 generate.js create mode 100644 package.json create mode 100644 yarn.lock diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..94ddeee --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,25 @@ +name: Release +on: + workflow_dispatch: + push: + tags: + - 'v*.*' + +jobs: + release: + if: startsWith(github.ref, 'refs/tags/v') + runs-on: ubuntu-latest + steps: + - name: Build Changelog + id: github_release + uses: mikepenz/release-changelog-builder-action@v5 + with: + mode: 'COMMIT' + - name: Create Release + uses: softprops/action-gh-release@v2 + with: + draft: true + body: ${{steps.github_release.outputs.changelog}} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/generate.js b/generate.js new file mode 100755 index 0000000..f9d6cd6 --- /dev/null +++ b/generate.js @@ -0,0 +1,74 @@ +#!/usr/bin/env node + +import fs from "fs-extra"; +import ignore from "ignore"; +import inquirer from "inquirer"; +import { fileURLToPath } from "node:url"; +import path from "path"; + +async function generateProject() { + const answers = await inquirer.prompt([ + { name: "name", message: "Project name:", default: "my-crx-app" }, + { name: "version", message: "Version:", default: "0.0.0" }, + { name: "description", message: "Description:", default: "" }, + { name: "author", message: "Author:", default: "" }, + ]); + + const templateDir = path.resolve( + fileURLToPath(import.meta.url), + "..", + "template" + ); + + const outputDir = path.join(process.cwd(), answers.name); + + // await fs.copy(templateDir, outputDir); + // console.log(`Copied template to ${outputDir}`); + + // Load .gitignore rules + const gitignorePath = path.join(templateDir, ".gitignore"); + let ig = ignore(); + if (fs.existsSync(gitignorePath)) { + const gitignoreContent = fs.readFileSync(gitignorePath, "utf8"); + ig = ignore().add(gitignoreContent); + } + + // Copy template with .gitignore filtering + await fs.copy(templateDir, outputDir, { + filter: (src) => { + const relativePath = path.relative(templateDir, src); + return relativePath === "" || !ig.ignores(relativePath); + }, + }); + + // Update package.json + const packageJsonPath = path.join(outputDir, "package.json"); + let packageJson = await fs.readFile(packageJsonPath, "utf-8"); + + const pkg = JSON.parse(packageJson, "utf-8"); + pkg.name = answers.name; + pkg.displayName = answers.name; + pkg.version = answers.version; + pkg.description = answers.description; + pkg.author = answers.author; + + await fs.writeFile(packageJsonPath, JSON.stringify(pkg, null, 2)); + + // Update README.md + const readmePath = path.join(outputDir, "README.md"); + let readmeContent = await fs.readFile(readmePath, "utf8"); + readmeContent = readmeContent.replace(/my-crx-app/g, answers.name); + await fs.writeFile(readmePath, readmeContent); + + console.log(` + Suggest you next step: + 1. cd ${path.relative(process.cwd(), outputDir)} + 2. Run yarn install + 3. Open chrome://extensions/ in your browser + 4. Check the box for Developer mode in the top right. + 5. Click the Load unpacked extension button. + 6. Select the build/ directory that was created. + `); +} + +generateProject().catch(console.error); diff --git a/package.json b/package.json new file mode 100644 index 0000000..ffa3959 --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "browser-extension-template", + "version": "1.0.0", + "main": "generate.js", + "license": "MIT", + "bin": { + "gen-ext": "./generate.js" + }, + "type": "module", + "dependencies": { + "fs-extra": "^11.3.0", + "ignore": "^7.0.3", + "inquirer": "^12.4.2" + } +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..28f0753 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,327 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@inquirer/checkbox@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.1.2.tgz#a12079f6aff68253392a1955d1a202eb9ac2e207" + integrity sha512-PL9ixC5YsPXzXhAZFUPmkXGxfgjkdfZdPEPPmt4kFwQ4LBMDG9n/nHXYRGGZSKZJs+d1sGKWgS2GiPzVRKUdtQ== + dependencies: + "@inquirer/core" "^10.1.7" + "@inquirer/figures" "^1.0.10" + "@inquirer/type" "^3.0.4" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/confirm@^5.1.6": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.6.tgz#e5a959676716860c26560b33997b38bd65bf96ad" + integrity sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw== + dependencies: + "@inquirer/core" "^10.1.7" + "@inquirer/type" "^3.0.4" + +"@inquirer/core@^10.1.7": + version "10.1.7" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.1.7.tgz#04260b59e0343e86f76da0a4e1fbe4975aca03ca" + integrity sha512-AA9CQhlrt6ZgiSy6qoAigiA1izOa751ugX6ioSjqgJ+/Gd+tEN/TORk5sUYNjXuHWfW0r1n/a6ak4u/NqHHrtA== + dependencies: + "@inquirer/figures" "^1.0.10" + "@inquirer/type" "^3.0.4" + ansi-escapes "^4.3.2" + cli-width "^4.1.0" + mute-stream "^2.0.0" + signal-exit "^4.1.0" + wrap-ansi "^6.2.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/editor@^4.2.7": + version "4.2.7" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.7.tgz#61cb58486b125a9cbfc88a9424bf1681bb7dbd2d" + integrity sha512-gktCSQtnSZHaBytkJKMKEuswSk2cDBuXX5rxGFv306mwHfBPjg5UAldw9zWGoEyvA9KpRDkeM4jfrx0rXn0GyA== + dependencies: + "@inquirer/core" "^10.1.7" + "@inquirer/type" "^3.0.4" + external-editor "^3.1.0" + +"@inquirer/expand@^4.0.9": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.9.tgz#935947192dad0d07a537664ba6a527b9ced44be2" + integrity sha512-Xxt6nhomWTAmuSX61kVgglLjMEFGa+7+F6UUtdEUeg7fg4r9vaFttUUKrtkViYYrQBA5Ia1tkOJj2koP9BuLig== + dependencies: + "@inquirer/core" "^10.1.7" + "@inquirer/type" "^3.0.4" + yoctocolors-cjs "^2.1.2" + +"@inquirer/figures@^1.0.10": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.10.tgz#e3676a51c9c51aaabcd6ba18a28e82b98417db37" + integrity sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw== + +"@inquirer/input@^4.1.6": + version "4.1.6" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.1.6.tgz#329700fd5a2d2f37be63768b09afd0a44edf3c67" + integrity sha512-1f5AIsZuVjPT4ecA8AwaxDFNHny/tSershP/cTvTDxLdiIGTeILNcKozB0LaYt6mojJLUbOYhpIxicaYf7UKIQ== + dependencies: + "@inquirer/core" "^10.1.7" + "@inquirer/type" "^3.0.4" + +"@inquirer/number@^3.0.9": + version "3.0.9" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.9.tgz#23dae9e31de368e18c4ec2543a9f006e4bb4a98d" + integrity sha512-iN2xZvH3tyIYXLXBvlVh0npk1q/aVuKXZo5hj+K3W3D4ngAEq/DkLpofRzx6oebTUhBvOgryZ+rMV0yImKnG3w== + dependencies: + "@inquirer/core" "^10.1.7" + "@inquirer/type" "^3.0.4" + +"@inquirer/password@^4.0.9": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.9.tgz#1a7d14a14bd2e54294d7fa5cc9fa6da99315149c" + integrity sha512-xBEoOw1XKb0rIN208YU7wM7oJEHhIYkfG7LpTJAEW913GZeaoQerzf5U/LSHI45EVvjAdgNXmXgH51cUXKZcJQ== + dependencies: + "@inquirer/core" "^10.1.7" + "@inquirer/type" "^3.0.4" + ansi-escapes "^4.3.2" + +"@inquirer/prompts@^7.3.2": + version "7.3.2" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.3.2.tgz#ad0879eb3bc783c19b78c420e5eeb18a09fc9b47" + integrity sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ== + dependencies: + "@inquirer/checkbox" "^4.1.2" + "@inquirer/confirm" "^5.1.6" + "@inquirer/editor" "^4.2.7" + "@inquirer/expand" "^4.0.9" + "@inquirer/input" "^4.1.6" + "@inquirer/number" "^3.0.9" + "@inquirer/password" "^4.0.9" + "@inquirer/rawlist" "^4.0.9" + "@inquirer/search" "^3.0.9" + "@inquirer/select" "^4.0.9" + +"@inquirer/rawlist@^4.0.9": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.0.9.tgz#c5f8253c87ad48713e0e8b34274fdd1aa8b08d2c" + integrity sha512-+5t6ebehKqgoxV8fXwE49HkSF2Rc9ijNiVGEQZwvbMI61/Q5RcD+jWD6Gs1tKdz5lkI8GRBL31iO0HjGK1bv+A== + dependencies: + "@inquirer/core" "^10.1.7" + "@inquirer/type" "^3.0.4" + yoctocolors-cjs "^2.1.2" + +"@inquirer/search@^3.0.9": + version "3.0.9" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.0.9.tgz#00848c93ce86dcd24989a72dabfd8aeb34d2829b" + integrity sha512-DWmKztkYo9CvldGBaRMr0ETUHgR86zE6sPDVOHsqz4ISe9o1LuiWfgJk+2r75acFclA93J/lqzhT0dTjCzHuoA== + dependencies: + "@inquirer/core" "^10.1.7" + "@inquirer/figures" "^1.0.10" + "@inquirer/type" "^3.0.4" + yoctocolors-cjs "^2.1.2" + +"@inquirer/select@^4.0.9": + version "4.0.9" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.0.9.tgz#28a4c7b9a406798a9ea365d67dbad5e427c3febe" + integrity sha512-BpJyJe7Dkhv2kz7yG7bPSbJLQuu/rqyNlF1CfiiFeFwouegfH+zh13KDyt6+d9DwucKo7hqM3wKLLyJxZMO+Xg== + dependencies: + "@inquirer/core" "^10.1.7" + "@inquirer/figures" "^1.0.10" + "@inquirer/type" "^3.0.4" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/type@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.4.tgz#fa5f9e91a0abf3c9e93d3e1990ecb891d8195cf2" + integrity sha512-2MNFrDY8jkFYc9Il9DgLsHhMzuHnOYM1+CUYVWbzu9oT0hC7V7EcYvdCKeoll/Fcci04A+ERZ9wcc7cQ8lTkIA== + +ansi-escapes@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +external-editor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +fs-extra@^11.3.0: + version "11.3.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" + integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.3.tgz#397ef9315dfe0595671eefe8b633fec6943ab733" + integrity sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA== + +inquirer@^12.4.2: + version "12.4.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-12.4.2.tgz#0944de8b4ea41a27182fe5db61755485bee78ab6" + integrity sha512-reyjHcwyK2LObXgTJH4T1Dpfhwu88LNPTZmg/KenmTsy3T8lN/kZT8Oo7UwwkB9q8+ss2qjjN7GV8oFAfyz9Xg== + dependencies: + "@inquirer/core" "^10.1.7" + "@inquirer/prompts" "^7.3.2" + "@inquirer/type" "^3.0.4" + ansi-escapes "^4.3.2" + mute-stream "^2.0.0" + run-async "^3.0.0" + rxjs "^7.8.1" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +mute-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" + integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +run-async@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-3.0.0.tgz#42a432f6d76c689522058984384df28be379daad" + integrity sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== + +rxjs@^7.8.1: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== + dependencies: + tslib "^2.1.0" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +string-width@^4.1.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tslib@^2.1.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +yoctocolors-cjs@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242" + integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==