From 709560d54e58a79adb62bb957d4d0179bfcb4660 Mon Sep 17 00:00:00 2001 From: Sergio Carracedo Date: Tue, 18 Feb 2025 15:09:27 +0100 Subject: [PATCH 01/12] chore: development exports --- package.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/package.json b/package.json index 31044c1d1..d741ad4e0 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,24 @@ "tailwind.config.ts", "postcss.config.js" ], + "exports": { + ".": { + "development": "./lib/factorial-one.ts", + "default": "./dist/factorial-one.js" + }, + "./experimental": { + "development": "./lib/experimental/exports.ts", + "default": "./dist/experimental.js" + }, + "./icons/*": { + "development": "./lib/icons/*", + "default": "./icons/*" + }, + "./styles.css": { + "development": "./", + "default": "./dist/styles.scss" + } + }, "sideEffects": [ "**/*.css" ], From f95eb7a178d4634d773dc5604495e71a0008b494 Mon Sep 17 00:00:00 2001 From: Sergio Carracedo Date: Tue, 18 Feb 2025 15:20:07 +0100 Subject: [PATCH 02/12] chore: development exports --- package.json | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/package.json b/package.json index d741ad4e0..31044c1d1 100644 --- a/package.json +++ b/package.json @@ -14,24 +14,6 @@ "tailwind.config.ts", "postcss.config.js" ], - "exports": { - ".": { - "development": "./lib/factorial-one.ts", - "default": "./dist/factorial-one.js" - }, - "./experimental": { - "development": "./lib/experimental/exports.ts", - "default": "./dist/experimental.js" - }, - "./icons/*": { - "development": "./lib/icons/*", - "default": "./icons/*" - }, - "./styles.css": { - "development": "./", - "default": "./dist/styles.scss" - } - }, "sideEffects": [ "**/*.css" ], From 26c1be14d7d385e35a3a72187594ffc3e847e612 Mon Sep 17 00:00:00 2001 From: Sergio Carracedo Date: Tue, 18 Feb 2025 15:22:22 +0100 Subject: [PATCH 03/12] chore: development exports --- package.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/package.json b/package.json index 31044c1d1..d741ad4e0 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,24 @@ "tailwind.config.ts", "postcss.config.js" ], + "exports": { + ".": { + "development": "./lib/factorial-one.ts", + "default": "./dist/factorial-one.js" + }, + "./experimental": { + "development": "./lib/experimental/exports.ts", + "default": "./dist/experimental.js" + }, + "./icons/*": { + "development": "./lib/icons/*", + "default": "./icons/*" + }, + "./styles.css": { + "development": "./", + "default": "./dist/styles.scss" + } + }, "sideEffects": [ "**/*.css" ], From 22c1ad34948a2726e0733ea46ea1274b80f66701 Mon Sep 17 00:00:00 2001 From: Sergio Carracedo Date: Tue, 18 Feb 2025 16:00:00 +0100 Subject: [PATCH 04/12] chore: development exports --- README.md | 61 ++--------------------------------------- docs/development.md | 48 ++++++++++++++++++++++++++++++++ docs/getting-started.md | 24 ++++++++++++++++ docs/index.md | 7 +++++ 4 files changed, 81 insertions(+), 59 deletions(-) create mode 100644 docs/development.md create mode 100644 docs/getting-started.md create mode 100644 docs/index.md diff --git a/README.md b/README.md index 6123ae5fb..3037f1b76 100644 --- a/README.md +++ b/README.md @@ -5,65 +5,8 @@ [one.factorial.dev](https://one.factorial.dev/) -## Usage -In your react project: -```bash -$ npm install git+https://github.com/factorialco/factorial-one#release -``` +Please check the factorial-one's docs for understand the use cases, the architectures, the aggrements, conventions, how to develop in local, etc.. -Then, in your react files: - -```tsx -// In your `main.tsx` file or any top-level component -import "@factorialco/factorial-one/dist/styles.css" - -// If you want to use the shipped fonts -import "@factorialco/factorial-one/dist/fonts.js" - -// In any of your components -import { Button } from "@factorialco/factorial-one" -``` - -And that's it! - -## Development - -### Install nodejs - -The recommended approach is to use the `asdf` dependency manager. On MacOS + -Homebrew: - -```bash -$ brew install asdf -$ echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ${ -``` - -Then open a new terminal: - -```bash -$ asdf plugin add nodejs -``` - -Then, `cd` into the project's directory and: - -```bash -$ asdf install -``` - -This should leave you with a fully working nodejs version. - -### Start the project - -First, install the dependencies: - -```bash -$ npm install -``` - -Then run the storybook server: - -```bash -$ npm start -``` +# [factorial-one docs](docs/index.md) diff --git a/docs/development.md b/docs/development.md new file mode 100644 index 000000000..15bcd4c57 --- /dev/null +++ b/docs/development.md @@ -0,0 +1,48 @@ +# Development + + +## Install nodejs + +The recommended approach is to use the `asdf` dependency manager. On MacOS + +Homebrew: + +```bash +$ brew install asdf +$ echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ${ +``` + +Then open a new terminal: + +```bash +$ asdf plugin add nodejs +``` + +Then, `cd` into the project's directory and: + +```bash +$ asdf install +``` + +This should leave you with a fully working nodejs version. + +### Start the project + +First, install the dependencies: + +```bash +$ npm install +``` + +Then run the storybook server: + +```bash +$ npm start +``` + +## How to use local version of `factorial-one` in your repo (ex. `factorial`'s monorepo) + +- Go to the `factorial-one` folder: `cd factorial-one` +- Run `pnpm link --global` to add the package to the local links +- Go to your package: `cd factorial/frontend` +- Run `pnpm link --global @factorialco/factorial-one` to use the local version of the package +- NOTE: Remember to run `pnpm i` to install the dependencies diff --git a/docs/getting-started.md b/docs/getting-started.md new file mode 100644 index 000000000..b1349da35 --- /dev/null +++ b/docs/getting-started.md @@ -0,0 +1,24 @@ +# Getting started + +## Usage + +In your react project: + +```bash +$ pnpm install git+https://github.com/factorialco/factorial-one#release +``` + +Then, in your react files: + +```tsx +// In your `main.tsx` file or any top-level component +import "@factorialco/factorial-one/styles.css" + +// If you want to use the shipped fonts +import "@factorialco/factorial-one/fonts.js" + +// In any of your components +import { Button } from "@factorialco/factorial-one" +``` + +And that's it! diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 000000000..3dd73da97 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,7 @@ +# factorial-one + +`factorial-one` is a set of component, hooks, utilities used as foundations for the factorial's app + + +- [Getting started](./getting-started.md) +- [Local Development](./development.md) \ No newline at end of file From d7aa1c81abfa4c581c3f39770c5fd456a32b1d9e Mon Sep 17 00:00:00 2001 From: Sergio Carracedo Date: Wed, 19 Feb 2025 14:16:06 +0100 Subject: [PATCH 05/12] fix: Simplify breadcrumb type in Page header --- .../Navigation/Header/PageHeader/index.tsx | 2 +- package.json | 18 ------------------ 2 files changed, 1 insertion(+), 19 deletions(-) diff --git a/lib/experimental/Navigation/Header/PageHeader/index.tsx b/lib/experimental/Navigation/Header/PageHeader/index.tsx index c87cfb271..e46192c1b 100644 --- a/lib/experimental/Navigation/Header/PageHeader/index.tsx +++ b/lib/experimental/Navigation/Header/PageHeader/index.tsx @@ -11,9 +11,9 @@ import { Skeleton } from "@/ui/skeleton" import { AnimatePresence, motion } from "framer-motion" import { ReactElement } from "react" import { Dropdown } from "../../Dropdown" - import Breadcrumbs, { type BreadcrumbItemType } from "../Breadcrumbs" + export type PageAction = { label: string icon: IconType diff --git a/package.json b/package.json index d741ad4e0..31044c1d1 100644 --- a/package.json +++ b/package.json @@ -14,24 +14,6 @@ "tailwind.config.ts", "postcss.config.js" ], - "exports": { - ".": { - "development": "./lib/factorial-one.ts", - "default": "./dist/factorial-one.js" - }, - "./experimental": { - "development": "./lib/experimental/exports.ts", - "default": "./dist/experimental.js" - }, - "./icons/*": { - "development": "./lib/icons/*", - "default": "./icons/*" - }, - "./styles.css": { - "development": "./", - "default": "./dist/styles.scss" - } - }, "sideEffects": [ "**/*.css" ], From 564f3a852db8f09fdedb3708af1272c8b4d36063 Mon Sep 17 00:00:00 2001 From: Sergio Carracedo Date: Mon, 24 Feb 2025 12:04:24 +0100 Subject: [PATCH 06/12] chore: Exports in package.json and coder sync --- docs/{ => development}/development.md | 0 docs/development/images/coder.png | Bin 0 -> 30758 bytes .../development/using-factorial-one-source.md | 63 ++++++++++++++ docs/getting-started.md | 6 +- docs/index.md | 4 +- .../Navigation/Header/PageHeader/index.tsx | 1 - package.json | 49 ++++++++++- pnpm-lock.yaml | 15 ++++ tsconfig-build-icons.json | 2 +- tsconfig.node.json | 5 +- vite.config.ts | 71 ++++++++++++---- vite/build-sync.plugin.ts | 78 ++++++++++++++++++ vitest.setup.ts => vite/vitest.setup.ts | 0 13 files changed, 270 insertions(+), 24 deletions(-) rename docs/{ => development}/development.md (100%) create mode 100644 docs/development/images/coder.png create mode 100644 docs/development/using-factorial-one-source.md create mode 100644 vite/build-sync.plugin.ts rename vitest.setup.ts => vite/vitest.setup.ts (100%) diff --git a/docs/development.md b/docs/development/development.md similarity index 100% rename from docs/development.md rename to docs/development/development.md diff --git a/docs/development/images/coder.png b/docs/development/images/coder.png new file mode 100644 index 0000000000000000000000000000000000000000..d80c96f9957d3ff313924ad8cd42664a108f94c2 GIT binary patch literal 30758 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 IMPORTANT: Remember to remove use an stable version before to merge into `main` or release + +### How to use local version of `factorial-one` in your local repo (ex. `factorial`'s monorepo) {#local} + +This applies when both `factorial-one` and `factorial`'s monorepo are in the local computer + +1. Go to the `factorial-one` folder: `cd factorial-one` +2. Run `pnpm build:watch` to rebuild the project on any change +3. Run `pnpm link --global` to add the package to the local links +4. Go to the factorial app monorepo: `cd factorial/frontend` +5. Run `pnpm link --global @factorialco/factorial-one` to use the local version of the package + +### How to use local version of `factorial-one` in coder {#cder} + +This applies when `factorial-one` is in your local computer and `factorial`'s monorepo is in coder's dev environment + +**Prerequisites:** + +- [rsync](https://linux.die.net/man/1/rsync) in your local computer: `brew install rsync` +- [coder cli](https://coder.com/docs/getting-started/installation) in your local computer + - ![Coder ssh](images/coder.png) +- Create if not exists `.env.local` and add this line `CODER_REMOTE=[YOUR_CODER_SSH_CONNECTION_STRING]`, for example: + `CODER_REMOTE=coder.sergiocarracedo-dev-env` + > This file is in the `.gitignore` file, so it won't be pushed to the repository + +**Steps:** + +1. Go to the `factorial-one` folder: `cd factorial-one` +2. Run `pnpm dev:coder` to rebuild the project on any change and sync that build to coder workspace + +> Now on each change in the `factorial-one`'s source code, the changes will be reflected in the coder workspace and the +> frontend will be reloaded using always the latest `factorial-one`'s code + diff --git a/docs/getting-started.md b/docs/getting-started.md index b1349da35..3bf098ee3 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -18,7 +18,11 @@ import "@factorialco/factorial-one/styles.css" import "@factorialco/factorial-one/fonts.js" // In any of your components -import { Button } from "@factorialco/factorial-one" +import {Button} from "@factorialco/factorial-one" ``` And that's it! + +Related: + +- [Using factorial one source](development/using-factorial-one-source.md) diff --git a/docs/index.md b/docs/index.md index 3dd73da97..6adeef34e 100644 --- a/docs/index.md +++ b/docs/index.md @@ -2,6 +2,6 @@ `factorial-one` is a set of component, hooks, utilities used as foundations for the factorial's app - - [Getting started](./getting-started.md) -- [Local Development](./development.md) \ No newline at end of file +- [Local Development](development/development.md) + - [Using factorial-one without build it](development/using-factorial-one-source.md) \ No newline at end of file diff --git a/lib/experimental/Navigation/Header/PageHeader/index.tsx b/lib/experimental/Navigation/Header/PageHeader/index.tsx index e46192c1b..8cbfad11c 100644 --- a/lib/experimental/Navigation/Header/PageHeader/index.tsx +++ b/lib/experimental/Navigation/Header/PageHeader/index.tsx @@ -13,7 +13,6 @@ import { ReactElement } from "react" import { Dropdown } from "../../Dropdown" import Breadcrumbs, { type BreadcrumbItemType } from "../Breadcrumbs" - export type PageAction = { label: string icon: IconType diff --git a/package.json b/package.json index 31044c1d1..a60e8efff 100644 --- a/package.json +++ b/package.json @@ -8,12 +8,50 @@ "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0", "files": [ "assets", - "icons", "dist", "styles.css", "tailwind.config.ts", "postcss.config.js" ], + "exports": { + ".": { + "types": "./dist/lib/factorial-one.d.ts", + "default": "./dist/lib/factorial-one.js" + }, + "./experimental": { + "types": "./lib/experimental/lib/exports.d.ts", + "default": "./dist/lib/experimental.js" + }, + "./icons/animated": { + "types": "./dist/icons/animated/index.d.ts", + "default": "./dist/icons/animated/index.js" + }, + "./icons/animated/*": { + "types": "./dist/icons/animated/*.d.ts", + "default": "./dist/icons/animated/*.js" + }, + "./icons/app": { + "types": "./dist/icons/app/index.d.ts", + "default": "./dist/icons/app/index.js" + }, + "./icons/app/*": { + "types": "./dist/icons/app/*.d.ts", + "default": "./dist/icons/app/*.js" + }, + "./icons/modules": { + "types": "./dist/icons/modules/index.d.ts", + "default": "./dist/icons/modules/index.js" + }, + "./icons/modules/*": { + "types": "./dist/icons/modules/*.d.ts", + "default": "./dist/icons/modules/*.js" + }, + "./icons/*": { + "types": "./dist/icons/*", + "default": "./dist/icons/*" + }, + "./styles.css": "./dist/styles.css" + }, "sideEffects": [ "**/*.css" ], @@ -21,10 +59,12 @@ "dev": "storybook dev -p 6006", "dev:docs": "DOCS_MODE=true pnpm run dev", "start": "pnpm run dev", - "build": "tsc --project ./tsconfig-build.json && BUILD_TYPES=true vite build && pnpm run build:tailwind && run-p build-icons", + "build": "tsc --project ./tsconfig-build.json && pnpm run build:tailwind && run-p build-icons && BUILD_TYPES=true vite build", "build:tsup": "tsup && pnpm run build:tailwind && run-p build-icons", "build-icons": "tsc --project ./tsconfig-build-icons.json", "build:tailwind": "NODE_ENV=production tailwindcss -i ./styles.css -o ./dist/styles.css --postcss --minify", + "build:watch": "pnpm build --watch", + "dev:coder": "pnpm build --watch -- --buildSync", "lint": "eslint -c eslint.config.mjs . --report-unused-disable-directives --max-warnings 0", "lint-fix": "pnpm run lint -- --fix", "preview": "vite preview", @@ -122,8 +162,10 @@ "@typescript-eslint/parser": "^8.24.1", "@vitejs/plugin-react": "^4.3.4", "autoprefixer": "^10.4.20", + "chalk": "^5.4.1", "axe-playwright": "^2.1.0", "chromatic": "^11.25.2", + "consola": "^3.4.0", "emoji-mart": "^5.6.0", "eslint": "^9.21.0", "eslint-plugin-react": "^7.37.4", @@ -150,7 +192,8 @@ "vite": "^6.1.1", "vite-plugin-dts": "4.3.0", "vite-plugin-lib-inject-css": "^2.2.1", - "vitest": "^3.0.5" + "vitest": "^3.0.5", + "dotenv": "^16.4.7" }, "optionalDependencies": { "@rollup/rollup-linux-x64-gnu": "^4.34" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 45003f6be..7d8584979 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -268,9 +268,18 @@ importers: axe-playwright: specifier: ^2.1.0 version: 2.1.0(playwright@1.50.0) + chalk: + specifier: ^5.4.1 + version: 5.4.1 chromatic: specifier: ^11.25.2 version: 11.25.2 + consola: + specifier: ^3.4.0 + version: 3.4.0 + dotenv: + specifier: ^16.4.7 + version: 16.4.7 emoji-mart: specifier: ^5.6.0 version: 5.6.0 @@ -3273,6 +3282,10 @@ packages: dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -9185,6 +9198,8 @@ snapshots: no-case: 3.0.4 tslib: 2.8.1 + dotenv@16.4.7: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.1 diff --git a/tsconfig-build-icons.json b/tsconfig-build-icons.json index d926e90ba..074326ea6 100644 --- a/tsconfig-build-icons.json +++ b/tsconfig-build-icons.json @@ -12,9 +12,9 @@ // Types should go into this directory. // Removing this would place the .d.ts files // next to the .js files - "outDir": "icons", "jsx": "react-jsx", "noEmit": false, + "outDir": "dist/icons", "allowImportingTsExtensions": false, // go to js file when using IDE functions like // "Go to Definition" in VSCode diff --git a/tsconfig.node.json b/tsconfig.node.json index 97ede7ee6..f946d96e0 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -7,5 +7,8 @@ "allowSyntheticDefaultImports": true, "strict": true }, - "include": ["vite.config.ts"] + "include": [ + "vite.config.ts", + "vite/**/*" + ] } diff --git a/vite.config.ts b/vite.config.ts index a994d46c3..6567ec6ab 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,25 +1,64 @@ /// import react from "@vitejs/plugin-react" +import { consola } from "consola" +import dotenv from "dotenv" import path, { resolve } from "path" -import { defineConfig } from "vite" +import { defineConfig, Plugin } from "vite" import dts from "vite-plugin-dts" import { libInjectCss } from "vite-plugin-lib-inject-css" +import { buildSyncPlugin } from "./vite/build-sync.plugin" + +dotenv.config({ + path: [".env.local", ".env"], +}) + +const extraPlugins: Plugin[] = [] + +/* Build sync */ +const defaultCoderWorkspaceFolder = + "/home/factorial/workspace/factorial/frontend/node_modules/@factorialco/factorial-one" + +const buildSyncArg = process.argv.find((arg) => arg.startsWith("--buildSync")) +const buildSync = !!buildSyncArg +const buildSyncValue = buildSyncArg + ? buildSyncArg.split("=")[1] || process.env.CODER_REMOTE + : null + +if (buildSync) { + if (!buildSyncValue) { + consola.error( + "The buildSync flag must remote target or you can set it in the env variable CODER_REMOTE in the `.env.local` file" + ) + process.exit(1) + } + + const [remote, remoteFolder] = buildSyncValue.split(":") + + const target = [remote, remoteFolder || defaultCoderWorkspaceFolder] + .filter(Boolean) + .join(":") + + extraPlugins.push( + buildSyncPlugin({ + target, + }) + ) +} +/* ------------ Build sync end ------*/ + +if (process.env.BUILD_TYPES) { + extraPlugins.push( + dts({ + include: ["lib", "src"], + exclude: ["**/*.stories.tsx"], + rollupTypes: true, + }) + ) +} // https://vitejs.dev/config/ export default defineConfig({ - plugins: [ - react(), - libInjectCss(), - ...(process.env.BUILD_TYPES - ? [ - dts({ - include: ["lib", "src"], - exclude: ["**/*.stories.tsx"], - rollupTypes: true - }), - ] - : []), - ], + plugins: [react(), libInjectCss(), ...extraPlugins], resolve: { alias: { "@": path.resolve(__dirname, "./lib"), @@ -37,9 +76,11 @@ export default defineConfig({ }, formats: ["es"], }, + outDir: "dist/lib", copyPublicDir: false, rollupOptions: { external: ["react/jsx-runtime", "react", "react-dom"], + maxParallelFileOps: 100, // Workaround to fix rebuild https://github.com/vitejs/vite/issues/19410#issuecomment-2661835482 output: { globals: { react: "React", @@ -49,6 +90,6 @@ export default defineConfig({ }, test: { environment: "jsdom", - setupFiles: ["./vitest.setup.ts"], + setupFiles: ["./vite/vitest.setup.ts"], }, }) diff --git a/vite/build-sync.plugin.ts b/vite/build-sync.plugin.ts new file mode 100644 index 000000000..82760ab7e --- /dev/null +++ b/vite/build-sync.plugin.ts @@ -0,0 +1,78 @@ +import chalk from "chalk" +import { consola } from "consola" +import { readFileSync } from "fs" +import { spawnSync } from "node:child_process" +import { existsSync } from "node:fs" +import { resolve } from "path" +import { UserConfig } from "vite" + +const consolaPrefix = chalk.cyanBright("[Sync plugin]") + +type CoderSyncPluginConfig = { + sources?: string[] + target: string +} + +/** + * @description Sync plugin + * This plugin will syncronize the build files between the local and the remote server (coder) + * The list of the files and folders to sync is defined in the package.json file in the attribute "files" + * The target is the remote server where the files will be copied + */ +export function buildSyncPlugin(pluginConfig: CoderSyncPluginConfig) { + consola.info("Sync plugin") + + let enabled = true + let sources = pluginConfig.sources + // If no sources are defined, use the package.json files attribute + if (!sources) { + consola.info("Using package.json files attribute as source") + const packageJsonPath = resolve(__dirname, "../package.json") + const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8")) + sources = [...packageJson.files, packageJsonPath] + } + + sources = sources.filter((source) => Boolean(source) && existsSync(source)) + + consola.debug(consolaPrefix, sources) + + return { + name: "coder-sync", + description: "Sync files to remote server after build", + config(config: UserConfig, { command }: { command: string }) { + if (command !== "build" && !config.build?.watch) { + console.warn( + 'The buildSync plugin can only be used in "build" mode and "watch". Skipping...' + ) + enabled = false + } + }, + closeBundle: async () => { + if (!enabled) { + return + } + + consola.start( + consolaPrefix, + `Syncing files to ${chalk.whiteBright.bold(pluginConfig.target)}` + ) + try { + const start = Date.now() + spawnSync("rsync", [ + "-avz", + "--delete", + ...sources, + pluginConfig.target, + ]) + consola.success( + consolaPrefix, + "Files synced in ", + Date.now() - start, + "ms" + ) + } catch (error) { + consola.error(consolaPrefix, "Error syncing files", error) + } + }, + } +} diff --git a/vitest.setup.ts b/vite/vitest.setup.ts similarity index 100% rename from vitest.setup.ts rename to vite/vitest.setup.ts From f638b8667a936d321417ea64f89fafd8f830400e Mon Sep 17 00:00:00 2001 From: Sergio Carracedo Date: Tue, 25 Feb 2025 16:57:18 +0100 Subject: [PATCH 07/12] chore: actions to publish stable and alpha Conventional commits Commitlint --- .github/actions/setup-node-pnpm/action.yaml | 33 + .../workflows/build-and-publish-alpha.yaml | 109 +++ .../workflows/build-and-publish-stable.yaml | 45 ++ .husky/commit-msg | 1 + .husky/pre-commit | 0 .npmrc | 1 + commitlint.config.js | 1 + docs/development/release-and-versioning.md | 54 ++ docs/index.md | 6 +- package.json | 16 +- pnpm-lock.yaml | 626 +++++++++++++++--- 11 files changed, 809 insertions(+), 83 deletions(-) create mode 100644 .github/actions/setup-node-pnpm/action.yaml create mode 100644 .github/workflows/build-and-publish-alpha.yaml create mode 100644 .github/workflows/build-and-publish-stable.yaml create mode 100644 .husky/commit-msg create mode 100644 .husky/pre-commit create mode 100644 .npmrc create mode 100644 commitlint.config.js create mode 100644 docs/development/release-and-versioning.md diff --git a/.github/actions/setup-node-pnpm/action.yaml b/.github/actions/setup-node-pnpm/action.yaml new file mode 100644 index 000000000..e58eb276a --- /dev/null +++ b/.github/actions/setup-node-pnpm/action.yaml @@ -0,0 +1,33 @@ +name: 'Setup Node and pnpm' +description: 'Setup Node.js and pnpm, install dependencies and build' +inputs: + node-version: + description: 'Node.js version' + required: false + default: '20.x' + registry: + description: 'Registry URL' + required: false + default: 'https://npm.pkg.github.com' + scope: + description: 'Scope' + required: false + default: '@factorialco' + +runs: + using: "composite" + steps: + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: ${{ inputs.node-version }} + registry-url: ${{ inputs.registry }} + scope: ${{ inputs.scope }} + + - name: Install pnpm + run: npm install -g pnpm + shell: bash + + - name: Install dependencies + run: pnpm install + shell: bash diff --git a/.github/workflows/build-and-publish-alpha.yaml b/.github/workflows/build-and-publish-alpha.yaml new file mode 100644 index 000000000..8f867db28 --- /dev/null +++ b/.github/workflows/build-and-publish-alpha.yaml @@ -0,0 +1,109 @@ +name: Build and publish [ALPHA] + +on: + issue_comment: + types: [ created ] + pull_request: + types: [ opened, synchronize ] + +jobs: + ################## + # Alpha versions # + ################## + publish-alpha: + if: | + (github.event_name == 'issue_comment' && + github.event.issue.pull_request && + contains(github.event.comment.body, 'build')) || + github.event_name == 'pull_request' + runs-on: ubuntu-latest + permissions: + contents: write + packages: write + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ secrets.GITHUB_TOKEN }} + + + - uses: ./.github/actions/setup-node-pnpm + name: Setup Node and pnpm + + - name: Build + run: pnpm build + + - name: Create new version + run: | + # Get lastest version from package.json + CURRENT_VERSION=$(node -p "require('./package.json').version") + PR_NUMBER=${{ github.event.pull_request.number }} + COMMIT_SHA=$(git rev-parse --short ${{ github.sha }}) + + # Create alpha version + ALPHA_VERSION="${CURRENT_VERSION}-alpha.pr-${PR_NUMBER}-$(date +%Y%m%d%H%M%S)-${COMMIT_SHA}" + + # Update package.json version + pnpm version $ALPHA_VERSION --no-git-tag-version + env: + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Publish to registry + run: | + # Publish alpha version + pnpm publish --tag alpha --no-git-checks + env: + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Remove old alpha versions + run: | + # Get the alpha versions and their publish dates + PACKAGE_FULL_NAME=$(node -p "require('./package.json').name") + ALPHA_INFO=$(npm view $PACKAGE_FULL_NAME time --json | jq 'to_entries | map(select(.key | contains("-alpha"))) | map({version: .key, date: .value})') + CURRENT_DATE=$(date +%s) + + REMOVE_DAYS=5 + # days in seconds + #REMOVE_DAYS_IN_SECONDS=$((REMOVE_DAYS * 24 * 60 * 60)) + REMOVE_DAYS_IN_SECONDS=$((60)) + + # Process each alpha version + echo "$ALPHA_INFO" | jq -c '.[]' | while read -r VERSION_DATA; do + VERSION=$(echo "$VERSION_DATA" | jq -r '.version') + + PUBLISH_DATE=$(echo "$VERSION_DATA" | jq -r '.date') + PUBLISH_DATE_SECONDS=$(date -d "$PUBLISH_DATE" +%s) + + DIFF_SECONDS=$((CURRENT_DATE - PUBLISH_DATE_SECONDS)) + + if [ $DIFF_SECONDS -gt $REMOVE_DAYS_IN_SECONDS ]; then + echo "Removing version $VERSION published at $PUBLISH_DATE" + + # Split the string using the '/' character + ORG="${PACKAGE_FULL_NAME#@}" # Remove the '@' from the start + ORG="${ORG%%/*}" # Extract the part before the first '/' + PACKAGE="${PACKAGE_FULL_NAME#*/}" # Remove everything before the first '/' (including the '/') + + # Get the version id from the version name + VERSION_ID=$(curl -s -H "Authorization: Bearer $GITHUB_TOKEN" \ + "https://api.github.com/orgs/$ORG/packages/npm/$PACKAGE/versions" | \ + jq -r ".[] | select(.name == \"$VERSION\") | .id") + + # Delete the version using github api as npm unpublish is not supported in github registry + DELETE_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X DELETE \ + -H "Authorization: Bearer $GITHUB_TOKEN" \ + "https://api.github.com/orgs/$ORG/packages/npm/$PACKAGE/versions/$VERSION_ID") + + # Check for errors based on the HTTP status code + if [ "$DELETE_RESPONSE" -ge 200 ] && [ "$DELETE_RESPONSE" -lt 300 ]; then + echo "Successfully deleted version $VERSION_TO_DELETE" + else + echo "Error deleting version $VERSION_TO_DELETE: HTTP $DELETE_RESPONSE" + exit 1 + fi + fi + done + env: + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/build-and-publish-stable.yaml b/.github/workflows/build-and-publish-stable.yaml new file mode 100644 index 000000000..838e3dee6 --- /dev/null +++ b/.github/workflows/build-and-publish-stable.yaml @@ -0,0 +1,45 @@ +name: Build and publish [STABLE] + +on: + push: + branches: + - main + +jobs: + release-please: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + + steps: + - uses: google-github-actions/release-please-action@v4 + id: release + with: + token: ${{ secrets.GITHUB_TOKEN }} + release-type: node + + publish-npm: + needs: release-please + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + if: ${{ needs.release-please.outputs.release_created }} + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.repository.default_branch }} + + - name: Setup Node and pnpm + uses: ./.github/actions/setup-node-pnpm + + - name: Build + run: pnpm build + + - name: Publish to registry + run: pnpm publish + env: + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 000000000..990bd0b7c --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1 @@ +npx --no -- commitlint --edit "$1" \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 000000000..e69de29bb diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..02c3171b4 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +@factorialco:registry=https://npm.pkg.github.com diff --git a/commitlint.config.js b/commitlint.config.js new file mode 100644 index 000000000..3f5e287f9 --- /dev/null +++ b/commitlint.config.js @@ -0,0 +1 @@ +export default { extends: ['@commitlint/config-conventional'] }; diff --git a/docs/development/release-and-versioning.md b/docs/development/release-and-versioning.md new file mode 100644 index 000000000..aeecb1130 --- /dev/null +++ b/docs/development/release-and-versioning.md @@ -0,0 +1,54 @@ +# Versioning + +This project is following the [Semantic Versioning](https://semver.org/) specification with automatic version bumping +based in [convention commits](https://www.conventionalcommits.org/en/v1.0.0/). + +## Release process + +### Stable versions + +When a PR is merged into the `main` branch, the CI will automatically will check the commit messages, bump the version +in consequence and publish a new version of the package to the github package registry. + +### Experimental (alpha) versions + +When a PR is created any commit into the PR will trigger the build and publish process, but the version will be marked +as +`alpha` and the version will be `x.y.z-alpha.-`. Where the `pr-number` is the number of the PR +and the commit sha is the sha of the commit that triggered the build. + +Those versions are not meant to be used in production, but to be tested and reviewed by the team. + +Those version are ephemeral and will be deleted after the PR is closed of after some time (TBD). + +## Conventional Commits + +The Conventional Commits specification is a lightweight convention on top of commit messages. This convention +dovetails with SemVer, by describing the features, fixes, and breaking changes made in commit messages. + +The commit message should be structured as follows: + +``` +[optional scope]: + +[optional body] + +[optional footer(s)] +``` + +The commit contains the following structural elements, to communicate intent to the consumers of your library: + +- **fix**: a commit of the type fix patches a bug in your codebase (this correlates with PATCH in Semantic Versioning). +- **feat**: a commit of the type feat introduces a new feature to the codebase (this correlates with MINOR in Semantic + Versioning). +- **BREAKING CHANGE**: a commit that has a footer BREAKING CHANGE:, or appends a ! after the type/scope, introduces a + breaking API change (correlating with MAJOR in Semantic Versioning). A BREAKING CHANGE can be part of commits of any + type. +- types other than fix: and feat: are allowed, for example build:, chore:, ci:, docs:, style:, refactor:, perf:, test:, + and others. will not trigger a new version. + +[Read more about Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/#examples) + + + + diff --git a/docs/index.md b/docs/index.md index 6adeef34e..423df7c78 100644 --- a/docs/index.md +++ b/docs/index.md @@ -3,5 +3,7 @@ `factorial-one` is a set of component, hooks, utilities used as foundations for the factorial's app - [Getting started](./getting-started.md) -- [Local Development](development/development.md) - - [Using factorial-one without build it](development/using-factorial-one-source.md) \ No newline at end of file +- Development + - [Local Development](development/development.md) + - [Using factorial-one without build it](development/using-factorial-one-source.md) + - [Release and Versioning](development/release-and-versioning) \ No newline at end of file diff --git a/package.json b/package.json index a60e8efff..6d2ebbc48 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@factorialco/factorial-one", - "version": "0.0.2-3", + "version": "0.0.3", "main": "dist/factorial-one.js", "typings": "dist/factorial-one.d.ts", "private": false, @@ -19,7 +19,7 @@ "default": "./dist/lib/factorial-one.js" }, "./experimental": { - "types": "./lib/experimental/lib/exports.d.ts", + "types": "./dist/experimental/experimental.d.ts", "default": "./dist/lib/experimental.js" }, "./icons/animated": { @@ -79,7 +79,8 @@ "tsc": "tsc --noEmit", "vitest": "vitest run", "vitest:watch": "vitest dev", - "vitest:ci": "vitest run --reporter=dot" + "vitest:ci": "vitest run --reporter=dot", + "prepare": "husky" }, "peerDependencies": { "@hookform/resolvers": "^3.9.0", @@ -125,6 +126,8 @@ }, "devDependencies": { "@chromatic-com/storybook": "^3.2.3", + "@commitlint/cli": "^19.7.1", + "@commitlint/config-conventional": "^19.7.1", "@emoji-mart/data": "^1.2.1", "@emoji-mart/react": "^1.1.1", "@emotion/is-prop-valid": "^1.3.1", @@ -162,10 +165,11 @@ "@typescript-eslint/parser": "^8.24.1", "@vitejs/plugin-react": "^4.3.4", "autoprefixer": "^10.4.20", - "chalk": "^5.4.1", "axe-playwright": "^2.1.0", + "chalk": "^5.4.1", "chromatic": "^11.25.2", "consola": "^3.4.0", + "dotenv": "^16.4.7", "emoji-mart": "^5.6.0", "eslint": "^9.21.0", "eslint-plugin-react": "^7.37.4", @@ -174,6 +178,7 @@ "eslint-plugin-storybook": "^0.11.3", "globals": "^16.0.0", "http-server": "^14.1.1", + "husky": "^9.1.7", "jsdom": "^26.0.0", "lodash": "^4.17.21", "npm-run-all": "^4.1.5", @@ -192,8 +197,7 @@ "vite": "^6.1.1", "vite-plugin-dts": "4.3.0", "vite-plugin-lib-inject-css": "^2.2.1", - "vitest": "^3.0.5", - "dotenv": "^16.4.7" + "vitest": "^3.0.5" }, "optionalDependencies": { "@rollup/rollup-linux-x64-gnu": "^4.34" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7d8584979..42775c01a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -154,6 +154,12 @@ importers: '@chromatic-com/storybook': specifier: ^3.2.3 version: 3.2.4(react@18.3.1)(storybook@8.5.6(prettier@3.5.2)) + '@commitlint/cli': + specifier: ^19.7.1 + version: 19.7.1(@types/node@22.13.4)(typescript@5.7.3) + '@commitlint/config-conventional': + specifier: ^19.7.1 + version: 19.7.1 '@emoji-mart/data': specifier: ^1.2.1 version: 1.2.1 @@ -165,7 +171,7 @@ importers: version: 1.3.1 '@eslint/compat': specifier: ^1.2.7 - version: 1.2.7(eslint@9.21.0(jiti@1.21.7)) + version: 1.2.7(eslint@9.21.0(jiti@2.4.2)) '@eslint/eslintrc': specifier: ^3.3.0 version: 3.3.0 @@ -213,7 +219,7 @@ importers: version: 8.5.6(@storybook/test@8.5.6(storybook@8.5.6(prettier@3.5.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.6(prettier@3.5.2))(typescript@5.7.3) '@storybook/react-vite': specifier: ^8.5.6 - version: 8.5.6(@storybook/test@8.5.6(storybook@8.5.6(prettier@3.5.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.34.8)(storybook@8.5.6(prettier@3.5.2))(typescript@5.7.3)(vite@6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0)) + version: 8.5.6(@storybook/test@8.5.6(storybook@8.5.6(prettier@3.5.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.34.8)(storybook@8.5.6(prettier@3.5.2))(typescript@5.7.3)(vite@6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0)) '@storybook/test': specifier: ^8.5.6 version: 8.5.6(storybook@8.5.6(prettier@3.5.2)) @@ -255,13 +261,13 @@ importers: version: 13.1.4 '@typescript-eslint/eslint-plugin': specifier: ^8.24.1 - version: 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3) + version: 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/parser': specifier: ^8.24.1 - version: 8.24.1(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3) + version: 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0)) + version: 4.3.4(vite@6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0)) autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.5.3) @@ -285,25 +291,28 @@ importers: version: 5.6.0 eslint: specifier: ^9.21.0 - version: 9.21.0(jiti@1.21.7) + version: 9.21.0(jiti@2.4.2) eslint-plugin-react: specifier: ^7.37.4 - version: 7.37.4(eslint@9.21.0(jiti@1.21.7)) + version: 7.37.4(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-react-hooks: specifier: ^5.1.0 - version: 5.1.0(eslint@9.21.0(jiti@1.21.7)) + version: 5.1.0(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-react-refresh: specifier: ^0.4.19 - version: 0.4.19(eslint@9.21.0(jiti@1.21.7)) + version: 0.4.19(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-storybook: specifier: ^0.11.3 - version: 0.11.3(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3) + version: 0.11.3(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) globals: specifier: ^16.0.0 version: 16.0.0 http-server: specifier: ^14.1.1 version: 14.1.1 + husky: + specifier: ^9.1.7 + version: 9.1.7 jsdom: specifier: ^26.0.0 version: 26.0.0 @@ -342,7 +351,7 @@ importers: version: 4.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.6(prettier@3.5.2)) tsup: specifier: ^8.3.5 - version: 8.3.6(@microsoft/api-extractor@7.48.1(@types/node@22.13.4))(@swc/core@1.10.11)(jiti@1.21.7)(postcss@8.5.3)(typescript@5.7.3)(yaml@2.7.0) + version: 8.3.6(@microsoft/api-extractor@7.48.1(@types/node@22.13.4))(@swc/core@1.10.11)(jiti@2.4.2)(postcss@8.5.3)(typescript@5.7.3)(yaml@2.7.0) typescript: specifier: ^5.7.2 version: 5.7.3 @@ -351,16 +360,16 @@ importers: version: 0.4.2 vite: specifier: ^6.1.1 - version: 6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) + version: 6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0) vite-plugin-dts: specifier: 4.3.0 - version: 4.3.0(@types/node@22.13.4)(rollup@4.34.8)(typescript@5.7.3)(vite@6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0)) + version: 4.3.0(@types/node@22.13.4)(rollup@4.34.8)(typescript@5.7.3)(vite@6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0)) vite-plugin-lib-inject-css: specifier: ^2.2.1 - version: 2.2.1(vite@6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0)) + version: 2.2.1(vite@6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0)) vitest: specifier: ^3.0.5 - version: 3.0.5(@types/node@22.13.4)(jiti@1.21.7)(jsdom@26.0.0)(yaml@2.7.0) + version: 3.0.5(@types/node@22.13.4)(jiti@2.4.2)(jsdom@26.0.0)(yaml@2.7.0) packages: @@ -619,6 +628,75 @@ packages: peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@commitlint/cli@19.7.1': + resolution: {integrity: sha512-iObGjR1tE/PfDtDTEfd+tnRkB3/HJzpQqRTyofS2MPPkDn1mp3DBC8SoPDayokfAy+xKhF8+bwRCJO25Nea0YQ==} + engines: {node: '>=v18'} + hasBin: true + + '@commitlint/config-conventional@19.7.1': + resolution: {integrity: sha512-fsEIF8zgiI/FIWSnykdQNj/0JE4av08MudLTyYHm4FlLWemKoQvPNUYU2M/3tktWcCEyq7aOkDDgtjrmgWFbvg==} + engines: {node: '>=v18'} + + '@commitlint/config-validator@19.5.0': + resolution: {integrity: sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw==} + engines: {node: '>=v18'} + + '@commitlint/ensure@19.5.0': + resolution: {integrity: sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg==} + engines: {node: '>=v18'} + + '@commitlint/execute-rule@19.5.0': + resolution: {integrity: sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg==} + engines: {node: '>=v18'} + + '@commitlint/format@19.5.0': + resolution: {integrity: sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A==} + engines: {node: '>=v18'} + + '@commitlint/is-ignored@19.7.1': + resolution: {integrity: sha512-3IaOc6HVg2hAoGleRK3r9vL9zZ3XY0rf1RsUf6jdQLuaD46ZHnXBiOPTyQ004C4IvYjSWqJwlh0/u2P73aIE3g==} + engines: {node: '>=v18'} + + '@commitlint/lint@19.7.1': + resolution: {integrity: sha512-LhcPfVjcOcOZA7LEuBBeO00o3MeZa+tWrX9Xyl1r9PMd5FWsEoZI9IgnGqTKZ0lZt5pO3ZlstgnRyY1CJJc9Xg==} + engines: {node: '>=v18'} + + '@commitlint/load@19.6.1': + resolution: {integrity: sha512-kE4mRKWWNju2QpsCWt428XBvUH55OET2N4QKQ0bF85qS/XbsRGG1MiTByDNlEVpEPceMkDr46LNH95DtRwcsfA==} + engines: {node: '>=v18'} + + '@commitlint/message@19.5.0': + resolution: {integrity: sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ==} + engines: {node: '>=v18'} + + '@commitlint/parse@19.5.0': + resolution: {integrity: sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw==} + engines: {node: '>=v18'} + + '@commitlint/read@19.5.0': + resolution: {integrity: sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ==} + engines: {node: '>=v18'} + + '@commitlint/resolve-extends@19.5.0': + resolution: {integrity: sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA==} + engines: {node: '>=v18'} + + '@commitlint/rules@19.6.0': + resolution: {integrity: sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw==} + engines: {node: '>=v18'} + + '@commitlint/to-lines@19.5.0': + resolution: {integrity: sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ==} + engines: {node: '>=v18'} + + '@commitlint/top-level@19.5.0': + resolution: {integrity: sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng==} + engines: {node: '>=v18'} + + '@commitlint/types@19.5.0': + resolution: {integrity: sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==} + engines: {node: '>=v18'} + '@csstools/color-helpers@5.0.1': resolution: {integrity: sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==} engines: {node: '>=18'} @@ -2297,6 +2375,9 @@ packages: '@types/canvas-confetti@1.9.0': resolution: {integrity: sha512-aBGj/dULrimR1XDZLtG9JwxX1b4HPRF6CX9Yfwh3NvstZEm1ZL7RBnel4keCPSqs1ANRu1u2Aoz9R+VmtjYuTg==} + '@types/conventional-commits-parser@5.0.1': + resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==} + '@types/d3-array@3.2.1': resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==} @@ -2552,6 +2633,10 @@ packages: '@vue/shared@3.5.13': resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -2665,6 +2750,9 @@ packages: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} + array-ify@1.0.0: + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} + array-includes@3.1.8: resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} @@ -2983,6 +3071,9 @@ packages: commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + compare-func@2.0.0: + resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} + compare-versions@6.1.1: resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} @@ -2999,6 +3090,19 @@ packages: resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} engines: {node: ^14.18.0 || >=16.10.0} + conventional-changelog-angular@7.0.0: + resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} + engines: {node: '>=16'} + + conventional-changelog-conventionalcommits@7.0.2: + resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} + engines: {node: '>=16'} + + conventional-commits-parser@5.0.0: + resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} + engines: {node: '>=16'} + hasBin: true + convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} @@ -3009,6 +3113,14 @@ packages: resolution: {integrity: sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ==} engines: {node: '>= 0.4.0'} + cosmiconfig-typescript-loader@6.1.0: + resolution: {integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==} + engines: {node: '>=v18'} + peerDependencies: + '@types/node': '*' + cosmiconfig: '>=9' + typescript: '>=5' + cosmiconfig@8.3.6: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} @@ -3018,6 +3130,15 @@ packages: typescript: optional: true + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + create-jest@29.7.0: resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3121,6 +3242,10 @@ packages: resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} engines: {node: '>=12'} + dargs@8.1.0: + resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} + engines: {node: '>=12'} + dashify@2.0.0: resolution: {integrity: sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A==} engines: {node: '>=4'} @@ -3282,6 +3407,10 @@ packages: dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dot-prop@5.3.0: + resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} + engines: {node: '>=8'} + dotenv@16.4.7: resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} engines: {node: '>=12'} @@ -3343,6 +3472,10 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -3585,6 +3718,10 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -3704,6 +3841,11 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} + git-raw-commits@4.0.0: + resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} + engines: {node: '>=16'} + hasBin: true + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -3725,6 +3867,10 @@ packages: engines: {node: '>=12'} deprecated: Glob versions prior to v9 are no longer supported + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + global-modules@0.2.3: resolution: {integrity: sha512-JeXuCbvYzYXcwE6acL9V2bAOeSIGl4dD+iwLY9iUx2VBJJ80R18HCn+JCwHM9Oegdfya3lEkGCdaRkSyc10hDA==} engines: {node: '>=0.10.0'} @@ -3852,6 +3998,11 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + iconv-lite@0.6.3: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} @@ -3873,6 +4024,9 @@ packages: engines: {node: '>=8'} hasBin: true + import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -3891,6 +4045,10 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -3995,6 +4153,10 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} @@ -4022,6 +4184,10 @@ packages: resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} engines: {node: '>= 0.4'} + is-text-path@2.0.0: + resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} + engines: {node: '>=8'} + is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} @@ -4259,6 +4425,10 @@ packages: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} @@ -4330,6 +4500,10 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -4383,18 +4557,46 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} lodash.flattendeep@4.4.0: resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + lodash.startcase@4.4.0: + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -4472,6 +4674,10 @@ packages: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} + meow@12.1.1: + resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} + engines: {node: '>=16.10'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -4686,6 +4892,10 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -4694,6 +4904,10 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-map@3.0.0: resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} engines: {node: '>=8'} @@ -4738,6 +4952,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -5413,6 +5631,10 @@ packages: spdx-license-ids@3.0.21: resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -5571,6 +5793,10 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} + text-extensions@2.4.0: + resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} + engines: {node: '>=8'} + thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -5578,6 +5804,9 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} @@ -5740,6 +5969,10 @@ packages: undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + union@0.5.0: resolution: {integrity: sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==} engines: {node: '>= 0.8.0'} @@ -6095,6 +6328,10 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + engines: {node: '>=12.20'} + zen-observable-ts@1.1.0: resolution: {integrity: sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA==} @@ -6376,6 +6613,116 @@ snapshots: - '@chromatic-com/playwright' - react + '@commitlint/cli@19.7.1(@types/node@22.13.4)(typescript@5.7.3)': + dependencies: + '@commitlint/format': 19.5.0 + '@commitlint/lint': 19.7.1 + '@commitlint/load': 19.6.1(@types/node@22.13.4)(typescript@5.7.3) + '@commitlint/read': 19.5.0 + '@commitlint/types': 19.5.0 + tinyexec: 0.3.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/config-conventional@19.7.1': + dependencies: + '@commitlint/types': 19.5.0 + conventional-changelog-conventionalcommits: 7.0.2 + + '@commitlint/config-validator@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + ajv: 8.13.0 + + '@commitlint/ensure@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.startcase: 4.4.0 + lodash.upperfirst: 4.3.1 + + '@commitlint/execute-rule@19.5.0': {} + + '@commitlint/format@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + chalk: 5.4.1 + + '@commitlint/is-ignored@19.7.1': + dependencies: + '@commitlint/types': 19.5.0 + semver: 7.7.1 + + '@commitlint/lint@19.7.1': + dependencies: + '@commitlint/is-ignored': 19.7.1 + '@commitlint/parse': 19.5.0 + '@commitlint/rules': 19.6.0 + '@commitlint/types': 19.5.0 + + '@commitlint/load@19.6.1(@types/node@22.13.4)(typescript@5.7.3)': + dependencies: + '@commitlint/config-validator': 19.5.0 + '@commitlint/execute-rule': 19.5.0 + '@commitlint/resolve-extends': 19.5.0 + '@commitlint/types': 19.5.0 + chalk: 5.4.1 + cosmiconfig: 9.0.0(typescript@5.7.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@22.13.4)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3) + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + transitivePeerDependencies: + - '@types/node' + - typescript + + '@commitlint/message@19.5.0': {} + + '@commitlint/parse@19.5.0': + dependencies: + '@commitlint/types': 19.5.0 + conventional-changelog-angular: 7.0.0 + conventional-commits-parser: 5.0.0 + + '@commitlint/read@19.5.0': + dependencies: + '@commitlint/top-level': 19.5.0 + '@commitlint/types': 19.5.0 + git-raw-commits: 4.0.0 + minimist: 1.2.8 + tinyexec: 0.3.2 + + '@commitlint/resolve-extends@19.5.0': + dependencies: + '@commitlint/config-validator': 19.5.0 + '@commitlint/types': 19.5.0 + global-directory: 4.0.1 + import-meta-resolve: 4.1.0 + lodash.mergewith: 4.6.2 + resolve-from: 5.0.0 + + '@commitlint/rules@19.6.0': + dependencies: + '@commitlint/ensure': 19.5.0 + '@commitlint/message': 19.5.0 + '@commitlint/to-lines': 19.5.0 + '@commitlint/types': 19.5.0 + + '@commitlint/to-lines@19.5.0': {} + + '@commitlint/top-level@19.5.0': + dependencies: + find-up: 7.0.0 + + '@commitlint/types@19.5.0': + dependencies: + '@types/conventional-commits-parser': 5.0.1 + chalk: 5.4.1 + '@csstools/color-helpers@5.0.1': {} '@csstools/css-calc@2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': @@ -6484,16 +6831,16 @@ snapshots: '@esbuild/win32-x64@0.24.2': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@9.21.0(jiti@1.21.7))': + '@eslint-community/eslint-utils@4.4.1(eslint@9.21.0(jiti@2.4.2))': dependencies: - eslint: 9.21.0(jiti@1.21.7) + eslint: 9.21.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/compat@1.2.7(eslint@9.21.0(jiti@1.21.7))': + '@eslint/compat@1.2.7(eslint@9.21.0(jiti@2.4.2))': optionalDependencies: - eslint: 9.21.0(jiti@1.21.7) + eslint: 9.21.0(jiti@2.4.2) '@eslint/config-array@0.19.2': dependencies: @@ -6755,12 +7102,12 @@ snapshots: '@types/yargs': 17.0.33 chalk: 4.1.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.7.3)(vite@6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.5.0(typescript@5.7.3)(vite@6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0))': dependencies: glob: 10.4.5 magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.7.3) - vite: 6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0) optionalDependencies: typescript: 5.7.3 @@ -7726,13 +8073,13 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/builder-vite@8.5.6(storybook@8.5.6(prettier@3.5.2))(vite@6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0))': + '@storybook/builder-vite@8.5.6(storybook@8.5.6(prettier@3.5.2))(vite@6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0))': dependencies: '@storybook/csf-plugin': 8.5.6(storybook@8.5.6(prettier@3.5.2)) browser-assert: 1.2.1 storybook: 8.5.6(prettier@3.5.2) ts-dedent: 2.2.0 - vite: 6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0) '@storybook/components@8.5.2(storybook@8.5.6(prettier@3.5.2))': dependencies: @@ -7806,11 +8153,11 @@ snapshots: react-dom: 18.3.1(react@18.3.1) storybook: 8.5.6(prettier@3.5.2) - '@storybook/react-vite@8.5.6(@storybook/test@8.5.6(storybook@8.5.6(prettier@3.5.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.34.8)(storybook@8.5.6(prettier@3.5.2))(typescript@5.7.3)(vite@6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0))': + '@storybook/react-vite@8.5.6(@storybook/test@8.5.6(storybook@8.5.6(prettier@3.5.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.34.8)(storybook@8.5.6(prettier@3.5.2))(typescript@5.7.3)(vite@6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0))': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.7.3)(vite@6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.5.0(typescript@5.7.3)(vite@6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0)) '@rollup/pluginutils': 5.1.4(rollup@4.34.8) - '@storybook/builder-vite': 8.5.6(storybook@8.5.6(prettier@3.5.2))(vite@6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0)) + '@storybook/builder-vite': 8.5.6(storybook@8.5.6(prettier@3.5.2))(vite@6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0)) '@storybook/react': 8.5.6(@storybook/test@8.5.6(storybook@8.5.6(prettier@3.5.2)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.5.6(prettier@3.5.2))(typescript@5.7.3) find-up: 5.0.0 magic-string: 0.30.17 @@ -7820,7 +8167,7 @@ snapshots: resolve: 1.22.10 storybook: 8.5.6(prettier@3.5.2) tsconfig-paths: 4.2.0 - vite: 6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0) optionalDependencies: '@storybook/test': 8.5.6(storybook@8.5.6(prettier@3.5.2)) transitivePeerDependencies: @@ -8132,6 +8479,10 @@ snapshots: '@types/canvas-confetti@1.9.0': {} + '@types/conventional-commits-parser@5.0.1': + dependencies: + '@types/node': 22.13.4 + '@types/d3-array@3.2.1': {} '@types/d3-color@3.1.3': {} @@ -8223,15 +8574,15 @@ snapshots: '@types/zen-observable@0.8.3': {} - '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3))(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/type-utils': 8.24.1(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.24.1 - eslint: 9.21.0(jiti@1.21.7) + eslint: 9.21.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -8240,14 +8591,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3)': + '@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/scope-manager': 8.24.1 '@typescript-eslint/types': 8.24.1 '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.24.1 debug: 4.4.0 - eslint: 9.21.0(jiti@1.21.7) + eslint: 9.21.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -8262,12 +8613,12 @@ snapshots: '@typescript-eslint/types': 8.24.1 '@typescript-eslint/visitor-keys': 8.24.1 - '@typescript-eslint/type-utils@8.24.1(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0 - eslint: 9.21.0(jiti@1.21.7) + eslint: 9.21.0(jiti@2.4.2) ts-api-utils: 2.0.1(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: @@ -8305,24 +8656,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.24.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3)': + '@typescript-eslint/utils@8.24.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.24.0 '@typescript-eslint/types': 8.24.0 '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) - eslint: 9.21.0(jiti@1.21.7) + eslint: 9.21.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.24.1(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3)': + '@typescript-eslint/utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.24.1 '@typescript-eslint/types': 8.24.1 '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) - eslint: 9.21.0(jiti@1.21.7) + eslint: 9.21.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -8337,14 +8688,14 @@ snapshots: '@typescript-eslint/types': 8.24.1 eslint-visitor-keys: 4.2.0 - '@vitejs/plugin-react@4.3.4(vite@6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0))': + '@vitejs/plugin-react@4.3.4(vite@6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0))': dependencies: '@babel/core': 7.26.7 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.7) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.7) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0) transitivePeerDependencies: - supports-color @@ -8362,13 +8713,13 @@ snapshots: chai: 5.1.2 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.5(vite@6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0))': + '@vitest/mocker@3.0.5(vite@6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0))': dependencies: '@vitest/spy': 3.0.5 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0) '@vitest/pretty-format@2.0.5': dependencies: @@ -8465,6 +8816,11 @@ snapshots: '@vue/shared@3.5.13': {} + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: acorn: 8.14.0 @@ -8565,6 +8921,8 @@ snapshots: call-bound: 1.0.3 is-array-buffer: 3.0.5 + array-ify@1.0.0: {} + array-includes@3.1.8: dependencies: call-bind: 1.0.8 @@ -8917,6 +9275,11 @@ snapshots: commondir@1.0.1: {} + compare-func@2.0.0: + dependencies: + array-ify: 1.0.0 + dot-prop: 5.3.0 + compare-versions@6.1.1: {} computeds@0.0.1: {} @@ -8927,12 +9290,34 @@ snapshots: consola@3.4.0: {} + conventional-changelog-angular@7.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-conventionalcommits@7.0.2: + dependencies: + compare-func: 2.0.0 + + conventional-commits-parser@5.0.0: + dependencies: + JSONStream: 1.3.5 + is-text-path: 2.0.0 + meow: 12.1.1 + split2: 4.2.0 + convert-source-map@1.9.0: {} convert-source-map@2.0.0: {} corser@2.0.1: {} + cosmiconfig-typescript-loader@6.1.0(@types/node@22.13.4)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3): + dependencies: + '@types/node': 22.13.4 + cosmiconfig: 9.0.0(typescript@5.7.3) + jiti: 2.4.2 + typescript: 5.7.3 + cosmiconfig@8.3.6(typescript@5.7.3): dependencies: import-fresh: 3.3.1 @@ -8942,6 +9327,15 @@ snapshots: optionalDependencies: typescript: 5.7.3 + cosmiconfig@9.0.0(typescript@5.7.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.7.3 + create-jest@29.7.0(@types/node@22.13.4): dependencies: '@jest/types': 29.6.3 @@ -9055,6 +9449,8 @@ snapshots: d3-timer@3.0.1: {} + dargs@8.1.0: {} + dashify@2.0.0: {} data-urls@5.0.0: @@ -9198,6 +9594,10 @@ snapshots: no-case: 3.0.4 tslib: 2.8.1 + dot-prop@5.3.0: + dependencies: + is-obj: 2.0.0 + dotenv@16.4.7: {} dunder-proto@1.0.1: @@ -9245,6 +9645,8 @@ snapshots: entities@4.5.0: {} + env-paths@2.2.1: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -9394,15 +9796,15 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-plugin-react-hooks@5.1.0(eslint@9.21.0(jiti@1.21.7)): + eslint-plugin-react-hooks@5.1.0(eslint@9.21.0(jiti@2.4.2)): dependencies: - eslint: 9.21.0(jiti@1.21.7) + eslint: 9.21.0(jiti@2.4.2) - eslint-plugin-react-refresh@0.4.19(eslint@9.21.0(jiti@1.21.7)): + eslint-plugin-react-refresh@0.4.19(eslint@9.21.0(jiti@2.4.2)): dependencies: - eslint: 9.21.0(jiti@1.21.7) + eslint: 9.21.0(jiti@2.4.2) - eslint-plugin-react@7.37.4(eslint@9.21.0(jiti@1.21.7)): + eslint-plugin-react@7.37.4(eslint@9.21.0(jiti@2.4.2)): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -9410,7 +9812,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.21.0(jiti@1.21.7) + eslint: 9.21.0(jiti@2.4.2) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -9424,11 +9826,11 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-storybook@0.11.3(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3): + eslint-plugin-storybook@0.11.3(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): dependencies: '@storybook/csf': 0.1.13 - '@typescript-eslint/utils': 8.24.0(eslint@9.21.0(jiti@1.21.7))(typescript@5.7.3) - eslint: 9.21.0(jiti@1.21.7) + '@typescript-eslint/utils': 8.24.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.21.0(jiti@2.4.2) ts-dedent: 2.2.0 typescript: 5.7.3 transitivePeerDependencies: @@ -9443,9 +9845,9 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.21.0(jiti@1.21.7): + eslint@9.21.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.19.2 '@eslint/core': 0.12.0 @@ -9480,7 +9882,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 1.21.7 + jiti: 2.4.2 transitivePeerDependencies: - supports-color @@ -9617,6 +10019,12 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + flat-cache@4.0.1: dependencies: flatted: 3.3.3 @@ -9725,6 +10133,12 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.7 + git-raw-commits@4.0.0: + dependencies: + dargs: 8.1.0 + meow: 12.1.1 + split2: 4.2.0 + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -9759,6 +10173,10 @@ snapshots: minimatch: 5.1.6 once: 1.4.0 + global-directory@4.0.1: + dependencies: + ini: 4.1.1 + global-modules@0.2.3: dependencies: global-prefix: 0.1.5 @@ -9901,6 +10319,8 @@ snapshots: human-signals@2.1.0: {} + husky@9.1.7: {} + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 @@ -9919,6 +10339,8 @@ snapshots: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 + import-meta-resolve@4.1.0: {} + imurmurhash@0.1.4: {} indent-string@4.0.0: {} @@ -9932,6 +10354,8 @@ snapshots: ini@1.3.8: {} + ini@4.1.1: {} + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -10034,6 +10458,8 @@ snapshots: is-number@7.0.0: {} + is-obj@2.0.0: {} + is-potential-custom-element-name@1.0.1: {} is-regex@1.2.1: @@ -10062,6 +10488,10 @@ snapshots: has-symbols: 1.1.0 safe-regex-test: 1.1.0 + is-text-path@2.0.0: + dependencies: + text-extensions: 2.4.0 + is-typed-array@1.1.15: dependencies: which-typed-array: 1.1.18 @@ -10533,6 +10963,8 @@ snapshots: jiti@1.21.7: {} + jiti@2.4.2: {} + jju@1.4.0: {} joi@17.13.3: @@ -10614,6 +11046,8 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonparse@1.3.1: {} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 @@ -10668,14 +11102,34 @@ snapshots: dependencies: p-locate: 5.0.0 + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash.camelcase@4.3.0: {} + lodash.debounce@4.0.8: {} lodash.flattendeep@4.4.0: {} + lodash.isplainobject@4.0.6: {} + + lodash.kebabcase@4.1.1: {} + lodash.merge@4.6.2: {} + lodash.mergewith@4.6.2: {} + + lodash.snakecase@4.1.1: {} + lodash.sortby@4.7.0: {} + lodash.startcase@4.4.0: {} + + lodash.uniq@4.5.0: {} + + lodash.upperfirst@4.3.1: {} + lodash@4.17.21: {} loglevel@1.9.2: {} @@ -10745,6 +11199,8 @@ snapshots: memorystream@0.3.1: {} + meow@12.1.1: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -10985,6 +11441,10 @@ snapshots: dependencies: yocto-queue: 0.1.0 + p-limit@4.0.0: + dependencies: + yocto-queue: 1.1.1 + p-locate@4.1.0: dependencies: p-limit: 2.3.0 @@ -10993,6 +11453,10 @@ snapshots: dependencies: p-limit: 3.1.0 + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + p-map@3.0.0: dependencies: aggregate-error: 3.1.0 @@ -11043,6 +11507,8 @@ snapshots: path-exists@4.0.0: {} + path-exists@5.0.0: {} + path-is-absolute@1.0.1: {} path-key@2.0.1: {} @@ -11138,11 +11604,11 @@ snapshots: optionalDependencies: postcss: 8.5.3 - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.3)(yaml@2.7.0): + postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.3)(yaml@2.7.0): dependencies: lilconfig: 3.1.3 optionalDependencies: - jiti: 1.21.7 + jiti: 2.4.2 postcss: 8.5.3 yaml: 2.7.0 @@ -11701,6 +12167,8 @@ snapshots: spdx-license-ids@3.0.21: {} + split2@4.2.0: {} + sprintf-js@1.0.3: {} stack-utils@2.0.6: @@ -11924,6 +12392,8 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 + text-extensions@2.4.0: {} + thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -11932,6 +12402,8 @@ snapshots: dependencies: any-promise: 1.3.0 + through@2.3.8: {} + tiny-invariant@1.3.3: {} tinybench@2.9.0: {} @@ -11993,7 +12465,7 @@ snapshots: tslib@2.8.1: {} - tsup@8.3.6(@microsoft/api-extractor@7.48.1(@types/node@22.13.4))(@swc/core@1.10.11)(jiti@1.21.7)(postcss@8.5.3)(typescript@5.7.3)(yaml@2.7.0): + tsup@8.3.6(@microsoft/api-extractor@7.48.1(@types/node@22.13.4))(@swc/core@1.10.11)(jiti@2.4.2)(postcss@8.5.3)(typescript@5.7.3)(yaml@2.7.0): dependencies: bundle-require: 5.1.0(esbuild@0.24.2) cac: 6.7.14 @@ -12003,7 +12475,7 @@ snapshots: esbuild: 0.24.2 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.3)(yaml@2.7.0) + postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.5.3)(yaml@2.7.0) resolve-from: 5.0.0 rollup: 4.32.0 source-map: 0.8.0-beta.0 @@ -12090,6 +12562,8 @@ snapshots: undici-types@6.20.0: {} + unicorn-magic@0.1.0: {} + union@0.5.0: dependencies: qs: 6.14.0 @@ -12188,13 +12662,13 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite-node@3.0.5(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0): + vite-node@3.0.5(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.2 - vite: 6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - jiti @@ -12209,7 +12683,7 @@ snapshots: - tsx - yaml - vite-plugin-dts@4.3.0(@types/node@22.13.4)(rollup@4.34.8)(typescript@5.7.3)(vite@6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0)): + vite-plugin-dts@4.3.0(@types/node@22.13.4)(rollup@4.34.8)(typescript@5.7.3)(vite@6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0)): dependencies: '@microsoft/api-extractor': 7.48.1(@types/node@22.13.4) '@rollup/pluginutils': 5.1.4(rollup@4.34.8) @@ -12222,20 +12696,20 @@ snapshots: magic-string: 0.30.17 typescript: 5.7.3 optionalDependencies: - vite: 6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-lib-inject-css@2.2.1(vite@6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0)): + vite-plugin-lib-inject-css@2.2.1(vite@6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0)): dependencies: '@ast-grep/napi': 0.32.3 magic-string: 0.30.17 picocolors: 1.1.1 - vite: 6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0) - vite@6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0): + vite@6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0): dependencies: esbuild: 0.24.2 postcss: 8.5.3 @@ -12243,13 +12717,13 @@ snapshots: optionalDependencies: '@types/node': 22.13.4 fsevents: 2.3.3 - jiti: 1.21.7 + jiti: 2.4.2 yaml: 2.7.0 - vitest@3.0.5(@types/node@22.13.4)(jiti@1.21.7)(jsdom@26.0.0)(yaml@2.7.0): + vitest@3.0.5(@types/node@22.13.4)(jiti@2.4.2)(jsdom@26.0.0)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.5 - '@vitest/mocker': 3.0.5(vite@6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0)) + '@vitest/mocker': 3.0.5(vite@6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0)) '@vitest/pretty-format': 3.0.5 '@vitest/runner': 3.0.5 '@vitest/snapshot': 3.0.5 @@ -12265,8 +12739,8 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.1.1(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) - vite-node: 3.0.5(@types/node@22.13.4)(jiti@1.21.7)(yaml@2.7.0) + vite: 6.1.1(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0) + vite-node: 3.0.5(@types/node@22.13.4)(jiti@2.4.2)(yaml@2.7.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.13.4 @@ -12486,6 +12960,8 @@ snapshots: yocto-queue@0.1.0: {} + yocto-queue@1.1.1: {} + zen-observable-ts@1.1.0: dependencies: '@types/zen-observable': 0.8.3 From 0a80b7220fb87e219418ecf23546ccbaeff02e7d Mon Sep 17 00:00:00 2001 From: Sergio Carracedo Date: Wed, 26 Feb 2025 12:49:44 +0100 Subject: [PATCH 08/12] chore: actions To publish stable and alpha --- .github/workflows/build-and-publish-alpha.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-and-publish-alpha.yaml b/.github/workflows/build-and-publish-alpha.yaml index 8f867db28..dc24fd365 100644 --- a/.github/workflows/build-and-publish-alpha.yaml +++ b/.github/workflows/build-and-publish-alpha.yaml @@ -65,8 +65,9 @@ jobs: REMOVE_DAYS=5 # days in seconds - #REMOVE_DAYS_IN_SECONDS=$((REMOVE_DAYS * 24 * 60 * 60)) - REMOVE_DAYS_IN_SECONDS=$((60)) + REMOVE_DAYS_IN_SECONDS=$((REMOVE_DAYS * 24 * 60 * 60)) + + echo "Removing alpha versions $REMOVE_DAYS days old or older" # Process each alpha version echo "$ALPHA_INFO" | jq -c '.[]' | while read -r VERSION_DATA; do From a49af79b3f8b9b9f8772375987295657eed8bee1 Mon Sep 17 00:00:00 2001 From: Sergio Carracedo Date: Wed, 26 Feb 2025 12:52:39 +0100 Subject: [PATCH 09/12] chore: actions To publish stable and alpha --- .../actions/cleanup-alpha-versions/action.yml | 192 ++++++++++++++++++ .../workflows/build-and-publish-alpha.yaml | 66 +----- .../workflows/build-and-publish-stable.yaml | 44 +++- .github/workflows/release.yaml | 31 --- .release-please-manifest.json | 5 + 5 files changed, 247 insertions(+), 91 deletions(-) create mode 100644 .github/actions/cleanup-alpha-versions/action.yml delete mode 100644 .github/workflows/release.yaml create mode 100644 .release-please-manifest.json diff --git a/.github/actions/cleanup-alpha-versions/action.yml b/.github/actions/cleanup-alpha-versions/action.yml new file mode 100644 index 000000000..bc1833ce0 --- /dev/null +++ b/.github/actions/cleanup-alpha-versions/action.yml @@ -0,0 +1,192 @@ +name: 'Cleanup Alpha Versions' +description: 'Remove alpha versions from GitHub Packages based on age or PR number' + +inputs: + days: + description: 'Remove alpha versions older than this many days' + required: false + pr-number: + description: 'PR number to remove alpha versions for' + required: false + token: + description: 'GitHub token with packages write permission' + required: true + default: ${{ github.token }} + package-name: + description: 'NPM package name (defaults to package.json name)' + required: false + keep-latest: + description: 'Keep the latest X alpha versions (works alongside days and pr-number filters)' + required: false + +runs: + using: "composite" + steps: + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '16' + registry-url: 'https://npm.pkg.github.com' + + - name: Cleanup Alpha Versions + shell: bash + run: | + # Get the package name (either from input or package.json) + if [[ -z "${{ inputs.package-name }}" ]]; then + PACKAGE_FULL_NAME=$(node -p "require('./package.json').name") + else + PACKAGE_FULL_NAME="${{ inputs.package-name }}" + fi + + echo "Working with package: $PACKAGE_FULL_NAME" + + # Extract organization and package name + ORG="${PACKAGE_FULL_NAME#@}" # Remove the '@' from the start + ORG="${ORG%%/*}" # Extract the part before the first '/' + PACKAGE="${PACKAGE_FULL_NAME#*/}" # Remove everything before the first '/' (including the '/') + + echo "Organization: $ORG, Package: $PACKAGE" + + # Get the alpha versions and their publish dates + ALPHA_INFO=$(npm view $PACKAGE_FULL_NAME time --json | jq 'to_entries | map(select(.key | contains("-alpha"))) | map({version: .key, date: .value})') + + # If there's no alpha versions, exit early + if [ -z "$ALPHA_INFO" ] || [ "$ALPHA_INFO" == "[]" ]; then + echo "No alpha versions found for package $PACKAGE_FULL_NAME" + exit 0 + fi + + # Fetch all versions to have complete information + ALL_VERSIONS=$(curl -s -H "Authorization: Bearer ${{ inputs.token }}" \ + "https://api.github.com/orgs/$ORG/packages/npm/$PACKAGE/versions") + + if [ -z "$ALL_VERSIONS" ] || [ "$ALL_VERSIONS" == "null" ]; then + echo "Error: Could not fetch versions for $PACKAGE_FULL_NAME" + echo "Response: $ALL_VERSIONS" + exit 1 + fi + + # Init variables from inputs + REMOVE_DAYS="${{ inputs.days }}" + PR_NUMBER="${{ inputs.pr-number }}" + KEEP_LATEST="${{ inputs.keep-latest }}" + CURRENT_DATE=$(date +%s) + + # Log what we're doing + echo "Filter settings:" + [ -n "$REMOVE_DAYS" ] && echo "- Remove versions older than $REMOVE_DAYS days" + [ -n "$PR_NUMBER" ] && echo "- Remove versions for PR #$PR_NUMBER" + [ -n "$KEEP_LATEST" ] && echo "- Keep the latest $KEEP_LATEST versions" + [ -z "$REMOVE_DAYS" ] && [ -z "$PR_NUMBER" ] && [ -z "$KEEP_LATEST" ] && echo "- No filters - will remove ALL alpha versions" + + # ---------- Step 1: Create a filtered list of versions to consider ---------- + # First, create a file with all alpha versions and their info + echo "$ALPHA_INFO" | jq -c '.[]' > all_versions.json + + # If PR filter is active, create filtered list for just that PR + if [ -n "$PR_NUMBER" ]; then + cat all_versions.json | while read -r VERSION_DATA; do + VERSION=$(echo "$VERSION_DATA" | jq -r '.version') + PR_NUM=$(echo "$VERSION" | grep -oP 'pr\K[0-9]+' || echo "") + + if [ -n "$PR_NUM" ] && [ "$PR_NUM" -eq "$PR_NUMBER" ]; then + echo "$VERSION_DATA" >> filtered_versions.json + fi + done + else + # If no PR filter, use all alpha versions + cp all_versions.json filtered_versions.json + fi + + # If days filter is active, remove versions newer than cutoff + if [ -n "$REMOVE_DAYS" ]; then + REMOVE_DAYS_IN_SECONDS=$((REMOVE_DAYS * 24 * 60 * 60)) + + if [ -f "filtered_versions.json" ]; then + rm -f temp_filtered.json + + cat filtered_versions.json | while read -r VERSION_DATA; do + VERSION=$(echo "$VERSION_DATA" | jq -r '.version') + PUBLISH_DATE=$(echo "$VERSION_DATA" | jq -r '.date') + PUBLISH_DATE_SECONDS=$(date -d "$PUBLISH_DATE" +%s 2>/dev/null || date -j -f "%Y-%m-%dT%H:%M:%S.000Z" "$PUBLISH_DATE" +%s 2>/dev/null) + + DIFF_SECONDS=$((CURRENT_DATE - PUBLISH_DATE_SECONDS)) + if [ $DIFF_SECONDS -gt $REMOVE_DAYS_IN_SECONDS ]; then + echo "$VERSION_DATA" >> temp_filtered.json + fi + done + + if [ -f "temp_filtered.json" ]; then + mv temp_filtered.json filtered_versions.json + else + # No versions match our date criteria + echo "No versions match the days filter" + rm filtered_versions.json + touch filtered_versions.json + fi + fi + fi + + # ---------- Step 2: Handle keep-latest if specified ---------- + if [ -n "$KEEP_LATEST" ] && [ -f "filtered_versions.json" ] && [ -s "filtered_versions.json" ]; then + # First, sort filtered versions by date (newest first) + cat filtered_versions.json | jq -s 'sort_by(.date) | reverse' > sorted_versions.json + + # Calculate how many to keep vs delete + TOTAL_VERSIONS=$(cat sorted_versions.json | jq 'length') + + if [ "$TOTAL_VERSIONS" -le "$KEEP_LATEST" ]; then + echo "Found $TOTAL_VERSIONS versions, which is <= $KEEP_LATEST to keep. Nothing to delete." + # Clear the filtered list since we're keeping all + rm filtered_versions.json + touch filtered_versions.json + else + # Keep only versions beyond the keep-latest count + cat sorted_versions.json | jq ".[${KEEP_LATEST}:]" > to_delete.json + + # If we have versions to delete, replace filtered list + if [ -s "to_delete.json" ]; then + rm filtered_versions.json + cat to_delete.json | jq -c '.[]' > filtered_versions.json + fi + fi + fi + + # ---------- Step 3: Delete all versions in our final filtered list ---------- + if [ -f "filtered_versions.json" ] && [ -s "filtered_versions.json" ]; then + echo "The following versions will be deleted:" + cat filtered_versions.json | while read -r VERSION_DATA; do + VERSION=$(echo "$VERSION_DATA" | jq -r '.version') + PUBLISH_DATE=$(echo "$VERSION_DATA" | jq -r '.date') + echo "- $VERSION (published $PUBLISH_DATE)" + + # Get version ID + VERSION_INFO=$(echo "$ALL_VERSIONS" | jq -r ".[] | select(.name == \"$VERSION\")") + VERSION_ID=$(echo "$VERSION_INFO" | jq -r '.id') + + if [ -z "$VERSION_ID" ] || [ "$VERSION_ID" == "null" ]; then + echo " Warning: Could not find ID for version $VERSION" + continue + fi + + # Delete the version + DELETE_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X DELETE \ + -H "Authorization: Bearer ${{ inputs.token }}" \ + "https://api.github.com/orgs/$ORG/packages/npm/$PACKAGE/versions/$VERSION_ID") + + # Check for errors based on the HTTP status code + if [ "$DELETE_RESPONSE" -ge 200 ] && [ "$DELETE_RESPONSE" -lt 300 ]; then + echo " ✅ Successfully deleted version $VERSION" + else + echo " ❌ Error deleting version $VERSION: HTTP $DELETE_RESPONSE" + fi + done + else + echo "No versions to delete based on the specified criteria." + fi + + # Clean up temp files + rm -f all_versions.json filtered_versions.json sorted_versions.json to_delete.json + + env: + NODE_AUTH_TOKEN: ${{ inputs.token }} \ No newline at end of file diff --git a/.github/workflows/build-and-publish-alpha.yaml b/.github/workflows/build-and-publish-alpha.yaml index dc24fd365..17f6e9cd0 100644 --- a/.github/workflows/build-and-publish-alpha.yaml +++ b/.github/workflows/build-and-publish-alpha.yaml @@ -1,4 +1,4 @@ -name: Build and publish [ALPHA] +name: Build and Publish [ALPHA] on: issue_comment: @@ -7,9 +7,6 @@ on: types: [ opened, synchronize ] jobs: - ################## - # Alpha versions # - ################## publish-alpha: if: | (github.event_name == 'issue_comment' && @@ -56,55 +53,14 @@ jobs: env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Remove old alpha versions of any PR + uses: ./.github/actions/cleanup-alpha-versions + with: + token: ${{ github.token }} + days: 5 - name: Remove old alpha versions - run: | - # Get the alpha versions and their publish dates - PACKAGE_FULL_NAME=$(node -p "require('./package.json').name") - ALPHA_INFO=$(npm view $PACKAGE_FULL_NAME time --json | jq 'to_entries | map(select(.key | contains("-alpha"))) | map({version: .key, date: .value})') - CURRENT_DATE=$(date +%s) - - REMOVE_DAYS=5 - # days in seconds - REMOVE_DAYS_IN_SECONDS=$((REMOVE_DAYS * 24 * 60 * 60)) - - echo "Removing alpha versions $REMOVE_DAYS days old or older" - - # Process each alpha version - echo "$ALPHA_INFO" | jq -c '.[]' | while read -r VERSION_DATA; do - VERSION=$(echo "$VERSION_DATA" | jq -r '.version') - - PUBLISH_DATE=$(echo "$VERSION_DATA" | jq -r '.date') - PUBLISH_DATE_SECONDS=$(date -d "$PUBLISH_DATE" +%s) - - DIFF_SECONDS=$((CURRENT_DATE - PUBLISH_DATE_SECONDS)) - - if [ $DIFF_SECONDS -gt $REMOVE_DAYS_IN_SECONDS ]; then - echo "Removing version $VERSION published at $PUBLISH_DATE" - - # Split the string using the '/' character - ORG="${PACKAGE_FULL_NAME#@}" # Remove the '@' from the start - ORG="${ORG%%/*}" # Extract the part before the first '/' - PACKAGE="${PACKAGE_FULL_NAME#*/}" # Remove everything before the first '/' (including the '/') - - # Get the version id from the version name - VERSION_ID=$(curl -s -H "Authorization: Bearer $GITHUB_TOKEN" \ - "https://api.github.com/orgs/$ORG/packages/npm/$PACKAGE/versions" | \ - jq -r ".[] | select(.name == \"$VERSION\") | .id") - - # Delete the version using github api as npm unpublish is not supported in github registry - DELETE_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X DELETE \ - -H "Authorization: Bearer $GITHUB_TOKEN" \ - "https://api.github.com/orgs/$ORG/packages/npm/$PACKAGE/versions/$VERSION_ID") - - # Check for errors based on the HTTP status code - if [ "$DELETE_RESPONSE" -ge 200 ] && [ "$DELETE_RESPONSE" -lt 300 ]; then - echo "Successfully deleted version $VERSION_TO_DELETE" - else - echo "Error deleting version $VERSION_TO_DELETE: HTTP $DELETE_RESPONSE" - exit 1 - fi - fi - done - env: - NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + uses: ./.github/actions/cleanup-alpha-versions + with: + token: ${{ github.token }} + pr-number: ${{ github.event.pull_request.number }} + keep-latest: 3 diff --git a/.github/workflows/build-and-publish-stable.yaml b/.github/workflows/build-and-publish-stable.yaml index 838e3dee6..226962a98 100644 --- a/.github/workflows/build-and-publish-stable.yaml +++ b/.github/workflows/build-and-publish-stable.yaml @@ -1,9 +1,13 @@ -name: Build and publish [STABLE] +name: Build and Publish [STABLE] on: push: branches: - main + issue_comment: + types: [ created ] + pull_request: + types: [ opened, synchronize ] jobs: release-please: @@ -11,21 +15,44 @@ jobs: permissions: contents: write pull-requests: write - + outputs: + release_created: ${{ steps.release.outputs.release_created }} + pr: ${{ steps.release.outputs.pr }} steps: - - uses: google-github-actions/release-please-action@v4 + - uses: googleapis/release-please-action@v4 id: release with: token: ${{ secrets.GITHUB_TOKEN }} release-type: node + target-branch: chore/publish-as-package - publish-npm: + auto-approve-merge: needs: release-please + if: ${{ needs.release-please.outputs.pr }} + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + steps: + - name: Approve Release PR + uses: juliangruber/approve-pull-request-action@v2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + number: ${{ fromJson(needs.release-please.outputs.pr).number }} + - name: Merge PR + uses: juliangruber/merge-pull-request-action@v1 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + number: ${{ fromJson(needs.release-please.outputs.pr).number }} + method: squash + + publish-npm: + needs: [ release-please, auto-approve-merge ] runs-on: ubuntu-latest permissions: contents: read packages: write - if: ${{ needs.release-please.outputs.release_created }} + if: ${{ needs.release-please.outputs.prs_created }} steps: - uses: actions/checkout@v4 @@ -43,3 +70,10 @@ jobs: env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Cleanup PR alpha versions + uses: ./.github/actions/cleanup-alpha-versions + if: ${{ github.event.pull_request.number }} + with: + token: ${{ secrets.GITHUB_TOKEN }} + pr-number: ${{ github.event.pull_request.number }} # PR that triggered the workflow + diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml deleted file mode 100644 index d7f436d69..000000000 --- a/.github/workflows/release.yaml +++ /dev/null @@ -1,31 +0,0 @@ -name: Update release branch and create package -on: - push: -jobs: - build: - runs-on: ubuntu-latest - permissions: - contents: write - packages: write - steps: - - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - - uses: actions/setup-node@v4 - with: - node-version: "22.x" - cache: pnpm - - run: pnpm install - - run: pnpm run build - - run: echo node_modules > .gitignore - - uses: JS-DevTools/npm-publish@v3 - if: github.ref == 'refs/heads/main' - with: - token: ${{ secrets.GITHUB_TOKEN }} - registry: "https://npm.pkg.github.com" - - uses: stefanzweifel/git-auto-commit-action@v5 - if: github.ref == 'refs/heads/main' - with: - commit_message: Commit Build - branch: release - create_branch: true - push_options: "--force" diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 000000000..0e0e712a2 --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,5 @@ +{ + "pull-request-header": "Factorial-one release ${version} 🚀", + "pull-request-title-pattern": "\uD83D\uDE80 \uD83E\uDD16 Factorial-one: release ${version} ", + ".": "0.0.3" +} \ No newline at end of file From fd9744687a19ff69a792dcb9cd2b2b2425e331a0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 27 Feb 2025 14:50:29 +0100 Subject: [PATCH 10/12] chore(chore/publish-as-package): release 1.0.0 (#1274) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../actions/cleanup-alpha-versions/action.yml | 7 ++-- .../workflows/build-and-publish-alpha.yaml | 12 ++++--- .../workflows/build-and-publish-stable.yaml | 33 ++++++++----------- .release-please-manifest.json | 4 +-- CHANGELOG.md | 20 +++++++++++ package.json | 2 +- 6 files changed, 49 insertions(+), 29 deletions(-) create mode 100644 CHANGELOG.md diff --git a/.github/actions/cleanup-alpha-versions/action.yml b/.github/actions/cleanup-alpha-versions/action.yml index bc1833ce0..510032af5 100644 --- a/.github/actions/cleanup-alpha-versions/action.yml +++ b/.github/actions/cleanup-alpha-versions/action.yml @@ -87,9 +87,8 @@ runs: if [ -n "$PR_NUMBER" ]; then cat all_versions.json | while read -r VERSION_DATA; do VERSION=$(echo "$VERSION_DATA" | jq -r '.version') - PR_NUM=$(echo "$VERSION" | grep -oP 'pr\K[0-9]+' || echo "") - if [ -n "$PR_NUM" ] && [ "$PR_NUM" -eq "$PR_NUMBER" ]; then + if echo "$VERSION" | grep -q ".pr-$PR_NUMBER-"; then echo "$VERSION_DATA" >> filtered_versions.json fi done @@ -144,6 +143,7 @@ runs: # Keep only versions beyond the keep-latest count cat sorted_versions.json | jq ".[${KEEP_LATEST}:]" > to_delete.json + cat to_delete.json # If we have versions to delete, replace filtered list if [ -s "to_delete.json" ]; then rm filtered_versions.json @@ -165,6 +165,9 @@ runs: VERSION_ID=$(echo "$VERSION_INFO" | jq -r '.id') if [ -z "$VERSION_ID" ] || [ "$VERSION_ID" == "null" ]; then + echo "+++++++++++++++++++++++++++++++++" + echo $ALL_VERSIONS + echo "+++++++++++++++++++++++++++++++++" echo " Warning: Could not find ID for version $VERSION" continue fi diff --git a/.github/workflows/build-and-publish-alpha.yaml b/.github/workflows/build-and-publish-alpha.yaml index 17f6e9cd0..f573ac7e6 100644 --- a/.github/workflows/build-and-publish-alpha.yaml +++ b/.github/workflows/build-and-publish-alpha.yaml @@ -53,14 +53,16 @@ jobs: env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Remove old alpha versions of any PR + - name: Keep only latest 3 alpha versions for this PR uses: ./.github/actions/cleanup-alpha-versions with: token: ${{ github.token }} - days: 5 - - name: Remove old alpha versions + pr-number: ${{ github.event.pull_request.number }} + keep-latest: 3 + + - name: Remove old alpha versions of any PR uses: ./.github/actions/cleanup-alpha-versions with: token: ${{ github.token }} - pr-number: ${{ github.event.pull_request.number }} - keep-latest: 3 + days: 5 + diff --git a/.github/workflows/build-and-publish-stable.yaml b/.github/workflows/build-and-publish-stable.yaml index 226962a98..18d00c76b 100644 --- a/.github/workflows/build-and-publish-stable.yaml +++ b/.github/workflows/build-and-publish-stable.yaml @@ -15,6 +15,8 @@ jobs: permissions: contents: write pull-requests: write + env: + BRANCH: chore/publish-as-package # ${{ github.event.repository.default_branch }} outputs: release_created: ${{ steps.release.outputs.release_created }} pr: ${{ steps.release.outputs.pr }} @@ -24,30 +26,23 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} release-type: node - target-branch: chore/publish-as-package + target-branch: ${{ env.BRANCH }} - auto-approve-merge: - needs: release-please - if: ${{ needs.release-please.outputs.pr }} - runs-on: ubuntu-latest - permissions: - contents: write - pull-requests: write - steps: - - name: Approve Release PR - uses: juliangruber/approve-pull-request-action@v2 + - uses: actions/checkout@v4 with: - github-token: ${{ secrets.GITHUB_TOKEN }} - number: ${{ fromJson(needs.release-please.outputs.pr).number }} + ref: ${{ github.event.repository.default_branch }} + - name: Merge PR - uses: juliangruber/merge-pull-request-action@v1 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - number: ${{ fromJson(needs.release-please.outputs.pr).number }} - method: squash + run: | + echo "PR: $PR_NUMBER" + gh pr merge $PR_NUMBER --squash --admin + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ fromJSON(steps.release.outputs.pr || '{}').number }} + publish-npm: - needs: [ release-please, auto-approve-merge ] + needs: [ release-please ] runs-on: ubuntu-latest permissions: contents: read diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 0e0e712a2..a08779d74 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,5 +1,5 @@ { "pull-request-header": "Factorial-one release ${version} 🚀", - "pull-request-title-pattern": "\uD83D\uDE80 \uD83E\uDD16 Factorial-one: release ${version} ", - ".": "0.0.3" + "pull-request-title-pattern": "🚀 🤖 Factorial-one: release ${version} ", + ".": "1.0.0" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..d07d579ef --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,20 @@ +# Changelog + +## 1.0.0 (2025-02-27) + + +### Features + +* add multiple type schema example ([#1204](https://github.com/factorialco/factorial-one/issues/1204)) ([59fa398](https://github.com/factorialco/factorial-one/commit/59fa398623992aa9cbb6e0afc411f7bc599a22b9)) +* add onClick to BarChart ([#1094](https://github.com/factorialco/factorial-one/issues/1094)) ([7a458f4](https://github.com/factorialco/factorial-one/commit/7a458f4aa6bef94b2490b9105e6a38fe61e71805)) +* add quick introduction to form libraries in forms documentation ([#1218](https://github.com/factorialco/factorial-one/issues/1218)) ([7a9a63c](https://github.com/factorialco/factorial-one/commit/7a9a63c6a65c63c64765e08a2c903c5d009fcd4d)) +* add radar chart ([#876](https://github.com/factorialco/factorial-one/issues/876)) ([0df9309](https://github.com/factorialco/factorial-one/commit/0df93094fe09932827aeec6003f9bfbcdb32096a)) +* nested schemas for forms examples ([#1202](https://github.com/factorialco/factorial-one/issues/1202)) ([9423367](https://github.com/factorialco/factorial-one/commit/94233675f865433c8a4f4c11b502d942b148a2b5)) + + +### Bug Fixes + +* allow undefined and booleand for conditional items ([#1140](https://github.com/factorialco/factorial-one/issues/1140)) ([4e336a8](https://github.com/factorialco/factorial-one/commit/4e336a8aedd245da80326db1ac211a27027e4254)) +* Breadcrumb type infer ([#1199](https://github.com/factorialco/factorial-one/issues/1199)) ([5673227](https://github.com/factorialco/factorial-one/commit/5673227e7c2cb2a8b3adbfa7922bf9c002345ce1)) +* Simplify breadcrumb type in Page header ([d7aa1c8](https://github.com/factorialco/factorial-one/commit/d7aa1c81abfa4c581c3f39770c5fd456a32b1d9e)) +* **Weekdays:** Use index for days of the week for the `activatedDays` prop ([#1194](https://github.com/factorialco/factorial-one/issues/1194)) ([1f4da9a](https://github.com/factorialco/factorial-one/commit/1f4da9a4e1ea907141ca587b296c228729c4f70d)) diff --git a/package.json b/package.json index 6d2ebbc48..e6d04664c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@factorialco/factorial-one", - "version": "0.0.3", + "version": "1.0.0", "main": "dist/factorial-one.js", "typings": "dist/factorial-one.d.ts", "private": false, From b4480a2e7055432596c8cf9d6eca80a1d3c090e1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 27 Feb 2025 15:28:15 +0000 Subject: [PATCH 11/12] chore(chore/publish-as-package): release 1.0.0 (#1279) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../actions/cleanup-alpha-versions/action.yml | 2 +- .github/actions/setup-node-pnpm/action.yaml | 3 +- .../workflows/build-and-publish-alpha.yaml | 5 -- .../workflows/build-and-publish-stable.yaml | 74 ------------------- .github/workflows/chromatic.yml | 7 +- .github/workflows/deploy.yaml | 6 +- .github/workflows/npm-publish.yaml | 28 +++++++ .github/workflows/quality.yaml | 18 +---- .github/workflows/release.yaml | 40 ++++++++++ .../workflows/remove-pr-alpha-versions.yaml | 28 +++++++ .github/workflows/storybook-tests.yaml | 8 +- .github/workflows/test.yaml | 8 +- CHANGELOG.md | 19 +++++ docs/development/release-and-versioning.md | 15 +++- 14 files changed, 136 insertions(+), 125 deletions(-) delete mode 100644 .github/workflows/build-and-publish-stable.yaml create mode 100644 .github/workflows/npm-publish.yaml create mode 100644 .github/workflows/release.yaml create mode 100644 .github/workflows/remove-pr-alpha-versions.yaml diff --git a/.github/actions/cleanup-alpha-versions/action.yml b/.github/actions/cleanup-alpha-versions/action.yml index 510032af5..06b4df51d 100644 --- a/.github/actions/cleanup-alpha-versions/action.yml +++ b/.github/actions/cleanup-alpha-versions/action.yml @@ -25,7 +25,7 @@ runs: - name: Setup Node.js uses: actions/setup-node@v3 with: - node-version: '16' + node-version: '20' registry-url: 'https://npm.pkg.github.com' - name: Cleanup Alpha Versions diff --git a/.github/actions/setup-node-pnpm/action.yaml b/.github/actions/setup-node-pnpm/action.yaml index e58eb276a..9c037a365 100644 --- a/.github/actions/setup-node-pnpm/action.yaml +++ b/.github/actions/setup-node-pnpm/action.yaml @@ -4,7 +4,7 @@ inputs: node-version: description: 'Node.js version' required: false - default: '20.x' + default: '22.x' registry: description: 'Registry URL' required: false @@ -23,6 +23,7 @@ runs: node-version: ${{ inputs.node-version }} registry-url: ${{ inputs.registry }} scope: ${{ inputs.scope }} + cache: pnpm - name: Install pnpm run: npm install -g pnpm diff --git a/.github/workflows/build-and-publish-alpha.yaml b/.github/workflows/build-and-publish-alpha.yaml index f573ac7e6..430ade88c 100644 --- a/.github/workflows/build-and-publish-alpha.yaml +++ b/.github/workflows/build-and-publish-alpha.yaml @@ -60,9 +60,4 @@ jobs: pr-number: ${{ github.event.pull_request.number }} keep-latest: 3 - - name: Remove old alpha versions of any PR - uses: ./.github/actions/cleanup-alpha-versions - with: - token: ${{ github.token }} - days: 5 diff --git a/.github/workflows/build-and-publish-stable.yaml b/.github/workflows/build-and-publish-stable.yaml deleted file mode 100644 index 18d00c76b..000000000 --- a/.github/workflows/build-and-publish-stable.yaml +++ /dev/null @@ -1,74 +0,0 @@ -name: Build and Publish [STABLE] - -on: - push: - branches: - - main - issue_comment: - types: [ created ] - pull_request: - types: [ opened, synchronize ] - -jobs: - release-please: - runs-on: ubuntu-latest - permissions: - contents: write - pull-requests: write - env: - BRANCH: chore/publish-as-package # ${{ github.event.repository.default_branch }} - outputs: - release_created: ${{ steps.release.outputs.release_created }} - pr: ${{ steps.release.outputs.pr }} - steps: - - uses: googleapis/release-please-action@v4 - id: release - with: - token: ${{ secrets.GITHUB_TOKEN }} - release-type: node - target-branch: ${{ env.BRANCH }} - - - uses: actions/checkout@v4 - with: - ref: ${{ github.event.repository.default_branch }} - - - name: Merge PR - run: | - echo "PR: $PR_NUMBER" - gh pr merge $PR_NUMBER --squash --admin - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - PR_NUMBER: ${{ fromJSON(steps.release.outputs.pr || '{}').number }} - - - publish-npm: - needs: [ release-please ] - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - if: ${{ needs.release-please.outputs.prs_created }} - - steps: - - uses: actions/checkout@v4 - with: - ref: ${{ github.event.repository.default_branch }} - - - name: Setup Node and pnpm - uses: ./.github/actions/setup-node-pnpm - - - name: Build - run: pnpm build - - - name: Publish to registry - run: pnpm publish - env: - NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Cleanup PR alpha versions - uses: ./.github/actions/cleanup-alpha-versions - if: ${{ github.event.pull_request.number }} - with: - token: ${{ secrets.GITHUB_TOKEN }} - pr-number: ${{ github.event.pull_request.number }} # PR that triggered the workflow - diff --git a/.github/workflows/chromatic.yml b/.github/workflows/chromatic.yml index 051f648ee..411cb0f23 100644 --- a/.github/workflows/chromatic.yml +++ b/.github/workflows/chromatic.yml @@ -23,12 +23,7 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: pnpm/action-setup@v4 - - uses: actions/setup-node@v4 - with: - node-version: "22.x" - cache: pnpm - - run: pnpm install + - uses: ./.github/actions/setup-node-pnpm - name: Run Chromatic id: chromatic uses: chromaui/action@latest diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index c7bd59bd6..4b0b4bc6d 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -19,11 +19,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - - uses: actions/setup-node@v4 - with: - node-version: "22.x" - cache: pnpm + - uses: ./.github/actions/setup-node-pnpm - uses: bitovi/github-actions-storybook-to-github-pages@v1.0.3 with: install_command: pnpm install diff --git a/.github/workflows/npm-publish.yaml b/.github/workflows/npm-publish.yaml new file mode 100644 index 000000000..8e23f58d2 --- /dev/null +++ b/.github/workflows/npm-publish.yaml @@ -0,0 +1,28 @@ +name: Publish factorial-one package to npm + +on: + release: + types: [ published ] # Triggers when a new release is published + +jobs: + publish: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + ref: ${{ github.event.release.tag_name }} # Checkout the tagged release + + - uses: ./.github/actions/setup-node-pnpm + name: Setup Node and pnpm + + - name: Build + run: pnpm build + + - name: Publish to registry + run: pnpm publish + env: + NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/quality.yaml b/.github/workflows/quality.yaml index 504910aaf..5172760f0 100644 --- a/.github/workflows/quality.yaml +++ b/.github/workflows/quality.yaml @@ -1,7 +1,7 @@ name: Code Quality checks on: pull_request: - branches: [main] + branches: [ main ] concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} @@ -12,13 +12,7 @@ jobs: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - - uses: actions/setup-node@v4 - with: - node-version: "22.x" - cache: pnpm - - name: Install dependencies - run: pnpm install + - uses: ./.github/actions/setup-node-pnpm - name: Check formatting with Prettier run: pnpm run prettier:check:ci eslint: @@ -26,13 +20,7 @@ jobs: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - - uses: actions/setup-node@v4 - with: - node-version: "22.x" - cache: pnpm - - name: Install dependencies - run: pnpm install + - uses: ./.github/actions/setup-node-pnpm - name: Check linting with eslint run: pnpm run lint diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 000000000..46493dbdb --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,40 @@ +name: Create release + +on: + push: + branches: + - main + +jobs: + release-please: + runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write + env: + BRANCH: ${{ github.event.repository.default_branch }} + outputs: + release_created: ${{ steps.release.outputs.release_created }} + pr: ${{ steps.release.outputs.pr }} + steps: + - uses: googleapis/release-please-action@v4 + id: release + with: + token: ${{ secrets.GITHUB_TOKEN }} + release-type: node + target-branch: ${{ env.BRANCH }} + + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.repository.default_branch }} + + - name: Merge PR + run: | + if [ -z "$PR_NUMBER" ]; then + echo "No PR number found" + exit 1 + fi + gh pr merge $PR_NUMBER --squash --admin + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ fromJSON(steps.release.outputs.pr || '{}').number }} \ No newline at end of file diff --git a/.github/workflows/remove-pr-alpha-versions.yaml b/.github/workflows/remove-pr-alpha-versions.yaml new file mode 100644 index 000000000..380c43e3f --- /dev/null +++ b/.github/workflows/remove-pr-alpha-versions.yaml @@ -0,0 +1,28 @@ +name: Build and Publish [ALPHA] + +on: + pull_request: + types: [ closed ] + +jobs: + clear-alpha-versions: + runs-on: ubuntu-latest + + permissions: + contents: write + packages: write + steps: + - name: Cleanup NPM PR alpha versions + + uses: ./.github/actions/cleanup-alpha-versions + if: ${{ github.event.pull_request.number }} + with: + token: ${{ secrets.GITHUB_TOKEN }} + pr-number: ${{ github.event.pull_request.number }} # PR that triggered the workflow + + - name: Remove old alpha versions of any PR + uses: ./.github/actions/cleanup-alpha-versions + with: + token: ${{ github.token }} + days: 5 + diff --git a/.github/workflows/storybook-tests.yaml b/.github/workflows/storybook-tests.yaml index b6a3ae42d..63b9268f2 100644 --- a/.github/workflows/storybook-tests.yaml +++ b/.github/workflows/storybook-tests.yaml @@ -16,13 +16,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - - uses: actions/setup-node@v4 - with: - node-version: "22.x" - cache: pnpm - - name: Install dependencies - run: pnpm install + - uses: ./.github/actions/setup-node-pnpm - name: Install Playwright run: pnpx playwright install --with-deps - name: Build Storybook diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 69acca9e2..adb96edde 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -16,13 +16,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - - uses: actions/setup-node@v4 - with: - node-version: "22.x" - cache: pnpm - - name: Install dependencies - run: pnpm install + - uses: ./.github/actions/setup-node-pnpm - name: Run type checking run: pnpm run tsc - name: Run tests diff --git a/CHANGELOG.md b/CHANGELOG.md index d07d579ef..33ec6fa70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,25 @@ * nested schemas for forms examples ([#1202](https://github.com/factorialco/factorial-one/issues/1202)) ([9423367](https://github.com/factorialco/factorial-one/commit/94233675f865433c8a4f4c11b502d942b148a2b5)) +### Bug Fixes + +* allow undefined and booleand for conditional items ([#1140](https://github.com/factorialco/factorial-one/issues/1140)) ([4e336a8](https://github.com/factorialco/factorial-one/commit/4e336a8aedd245da80326db1ac211a27027e4254)) +* Breadcrumb type infer ([#1199](https://github.com/factorialco/factorial-one/issues/1199)) ([5673227](https://github.com/factorialco/factorial-one/commit/5673227e7c2cb2a8b3adbfa7922bf9c002345ce1)) +* Simplify breadcrumb type in Page header ([d7aa1c8](https://github.com/factorialco/factorial-one/commit/d7aa1c81abfa4c581c3f39770c5fd456a32b1d9e)) +* **Weekdays:** Use index for days of the week for the `activatedDays` prop ([#1194](https://github.com/factorialco/factorial-one/issues/1194)) ([1f4da9a](https://github.com/factorialco/factorial-one/commit/1f4da9a4e1ea907141ca587b296c228729c4f70d)) + +## 1.0.0 (2025-02-27) + + +### Features + +* add multiple type schema example ([#1204](https://github.com/factorialco/factorial-one/issues/1204)) ([59fa398](https://github.com/factorialco/factorial-one/commit/59fa398623992aa9cbb6e0afc411f7bc599a22b9)) +* add onClick to BarChart ([#1094](https://github.com/factorialco/factorial-one/issues/1094)) ([7a458f4](https://github.com/factorialco/factorial-one/commit/7a458f4aa6bef94b2490b9105e6a38fe61e71805)) +* add quick introduction to form libraries in forms documentation ([#1218](https://github.com/factorialco/factorial-one/issues/1218)) ([7a9a63c](https://github.com/factorialco/factorial-one/commit/7a9a63c6a65c63c64765e08a2c903c5d009fcd4d)) +* add radar chart ([#876](https://github.com/factorialco/factorial-one/issues/876)) ([0df9309](https://github.com/factorialco/factorial-one/commit/0df93094fe09932827aeec6003f9bfbcdb32096a)) +* nested schemas for forms examples ([#1202](https://github.com/factorialco/factorial-one/issues/1202)) ([9423367](https://github.com/factorialco/factorial-one/commit/94233675f865433c8a4f4c11b502d942b148a2b5)) + + ### Bug Fixes * allow undefined and booleand for conditional items ([#1140](https://github.com/factorialco/factorial-one/issues/1140)) ([4e336a8](https://github.com/factorialco/factorial-one/commit/4e336a8aedd245da80326db1ac211a27027e4254)) diff --git a/docs/development/release-and-versioning.md b/docs/development/release-and-versioning.md index aeecb1130..034f9328f 100644 --- a/docs/development/release-and-versioning.md +++ b/docs/development/release-and-versioning.md @@ -7,19 +7,26 @@ based in [convention commits](https://www.conventionalcommits.org/en/v1.0.0/). ### Stable versions -When a PR is merged into the `main` branch, the CI will automatically will check the commit messages, bump the version -in consequence and publish a new version of the package to the github package registry. +When a PR is merged into the `main` branch, the CI will automatically will check the commit messages, bump the version, +update the changelog file, and create a release in github with the new version. + +Any new release (automatic or manual) triggers a workflow that will publish it to the github package registry. ### Experimental (alpha) versions When a PR is created any commit into the PR will trigger the build and publish process, but the version will be marked as -`alpha` and the version will be `x.y.z-alpha.-`. Where the `pr-number` is the number of the PR +`alpha` and the version will be `x.y.z-alpha.pr---`. Where the `pr-number` is the number of +the PR and the commit sha is the sha of the commit that triggered the build. Those versions are not meant to be used in production, but to be tested and reviewed by the team. -Those version are ephemeral and will be deleted after the PR is closed of after some time (TBD). +**Those versions are ephemeral** : + +- We will delete all the alpha version of a PR once the PR is closed (merged or not) +- We will only keep the last 3 versions of each PR +- We will delete any alpha version older than 5 days ## Conventional Commits From 2313a2debd9a25098ed02b8f18753e365f91ba1f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 27 Feb 2025 15:28:15 +0000 Subject: [PATCH 12/12] chore(chore/publish-as-package): release 1.0.0 (#1279) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .github/actions/setup-node-pnpm/action.yaml | 7 ++-- .../workflows/build-and-publish-alpha.yaml | 1 - docs/development/release-and-versioning.md | 33 +++++++++++++++++++ 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/.github/actions/setup-node-pnpm/action.yaml b/.github/actions/setup-node-pnpm/action.yaml index 9c037a365..3aeb6316a 100644 --- a/.github/actions/setup-node-pnpm/action.yaml +++ b/.github/actions/setup-node-pnpm/action.yaml @@ -17,6 +17,9 @@ inputs: runs: using: "composite" steps: + - name: Setup pnpm + uses: pnpm/action-setup@v4 + - name: Setup Node.js uses: actions/setup-node@v4 with: @@ -25,10 +28,6 @@ runs: scope: ${{ inputs.scope }} cache: pnpm - - name: Install pnpm - run: npm install -g pnpm - shell: bash - - name: Install dependencies run: pnpm install shell: bash diff --git a/.github/workflows/build-and-publish-alpha.yaml b/.github/workflows/build-and-publish-alpha.yaml index 430ade88c..858f650d4 100644 --- a/.github/workflows/build-and-publish-alpha.yaml +++ b/.github/workflows/build-and-publish-alpha.yaml @@ -24,7 +24,6 @@ jobs: fetch-depth: 0 token: ${{ secrets.GITHUB_TOKEN }} - - uses: ./.github/actions/setup-node-pnpm name: Setup Node and pnpm diff --git a/docs/development/release-and-versioning.md b/docs/development/release-and-versioning.md index 034f9328f..7ca328ce4 100644 --- a/docs/development/release-and-versioning.md +++ b/docs/development/release-and-versioning.md @@ -56,6 +56,39 @@ The commit contains the following structural elements, to communicate intent to [Read more about Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/#examples) +## Accessing to the package + +The package is published in the github package registry and is a private package so you need to be authenticated to in +the registry to install it. + +To install the package you need to create a `.npmrc` file in your home directory with the following content: + +``` +@factorialco:registry=https://npm.pkg.github.com +//npm.pkg.github.com/:_authToken=YOUR_GITHUB_TOKEN +``` + +You can get the token from your [github account settings](https://github.com/settings/tokens). +It must be a classic token with the `read:packages` scope. + +> Remember to don't share the token with anyone and don't commit it to the repository + +### Accessing the package in a CI/CD pipeline + +You need to add `.npmrc` file in repository with the following content: + +``` +@factorialco/factorial-one:registry=https://npm.pkg.github.com +``` + +To be able to install the `factorial-one` package in a CI/CD pipeline you need to ask us to add your repository to the +list +of "[Manage Actions Access](https://github.com/orgs/factorialco/packages/npm/factorial-one/settings)" + +Remember to set the env variable `NODE_AUTH_TOKEN` with the value of `${{secrets.GITHUB_TOKEN}}` in your CI/CD pipeline +use the authentication to access the package. + +