diff --git a/.changeset/config.json b/.changeset/config.json
index beeeaee0..0b3ad9d4 100644
--- a/.changeset/config.json
+++ b/.changeset/config.json
@@ -7,5 +7,19 @@
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
- "ignore": []
-}
\ No newline at end of file
+ "ignore": [
+ "@examples/with-code-share",
+ "@examples/with-code-share-shared",
+ "@examples/with-code-share-server",
+ "@examples/with-code-share-client",
+ "@examples/deel-hometask-challenge",
+ "@examples/next-client-app",
+ "@examples/server-palmares",
+ "@examples/server-express-only",
+ "@examples/next-monorepo",
+ "@example/basic",
+ "@examples/bench",
+ "@example/tests",
+ "@examples/schemas"
+ ]
+}
diff --git a/.changeset/cool-kiwis-count.md b/.changeset/cool-kiwis-count.md
new file mode 100644
index 00000000..9e5444df
--- /dev/null
+++ b/.changeset/cool-kiwis-count.md
@@ -0,0 +1,23 @@
+---
+'@palmares/eventemitter2-emitter': patch
+'@palmares/server-vercel': patch
+'@palmares/sequelize-engine': patch
+'@palmares/console-logging': patch
+'@palmares/express-adapter': patch
+'@palmares/drizzle-engine': patch
+'@palmares/vercel-adapter': patch
+'@palmares/redis-emitter': patch
+'@palmares/databases': patch
+'@palmares/logging': patch
+'@palmares/schemas': patch
+'@palmares/jest-tests': patch
+'@palmares/zod-schema': patch
+'@palmares/client': patch
+'@palmares/events': patch
+'@palmares/server': patch
+'@palmares/tests': patch
+'@palmares/node-std': patch
+'@palmares/core': patch
+---
+
+- Added ESModules support, you can have deeply nested packages and it wont affect the function of your app. For example, if module A has a dependency in @palmares/schema, and palmares schema depends on @palmares/core, it will work normally
diff --git a/examples/basic/CHANGELOG.md b/examples/basic/CHANGELOG.md
index 4f185ea2..08ef781f 100644
--- a/examples/basic/CHANGELOG.md
+++ b/examples/basic/CHANGELOG.md
@@ -1,5 +1,18 @@
# @example/basic
+## 0.0.19
+
+### Patch Changes
+
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/databases@0.1.16
+ - @palmares/server@0.1.13
+ - @palmares/core@0.1.13
+ - @palmares/express-adapter@0.1.14
+ - @palmares/sequelize-engine@0.1.16
+
## 0.0.18
### Patch Changes
diff --git a/examples/basic/package.json b/examples/basic/package.json
index c41c38ac..3e0db16a 100644
--- a/examples/basic/package.json
+++ b/examples/basic/package.json
@@ -1,6 +1,6 @@
{
"name": "@example/basic",
- "version": "0.0.18",
+ "version": "0.0.19",
"private": true,
"description": "This is a basic example application, just to test if everything works as expected",
"main": "manage.ts",
diff --git a/examples/bench/CHANGELOG.md b/examples/bench/CHANGELOG.md
index 48318cf5..376c619e 100644
--- a/examples/bench/CHANGELOG.md
+++ b/examples/bench/CHANGELOG.md
@@ -1,5 +1,21 @@
# @examples/bench
+## 0.0.19
+
+### Patch Changes
+
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/console-logging@0.1.7
+ - @palmares/databases@0.1.16
+ - @palmares/server@0.1.13
+ - @palmares/core@0.1.13
+ - @palmares/express-adapter@0.1.14
+ - @palmares/node-std@0.1.13
+ - @palmares/sequelize-engine@0.1.16
+ - @palmares/logging@0.1.13
+
## 0.0.18
### Patch Changes
diff --git a/examples/bench/package.json b/examples/bench/package.json
index 905ab2dc..a10d95b3 100644
--- a/examples/bench/package.json
+++ b/examples/bench/package.json
@@ -1,6 +1,6 @@
{
"name": "@examples/bench",
- "version": "0.0.18",
+ "version": "0.0.19",
"description": "asdasdasd",
"main": "manage.ts",
"scripts": {
diff --git a/examples/deel-hometask-challenge/CHANGELOG.md b/examples/deel-hometask-challenge/CHANGELOG.md
index dabbbab5..5167814d 100644
--- a/examples/deel-hometask-challenge/CHANGELOG.md
+++ b/examples/deel-hometask-challenge/CHANGELOG.md
@@ -1,5 +1,23 @@
# @examples/deel-hometask-challenge
+## 0.0.25
+
+### Patch Changes
+
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/console-logging@0.1.7
+ - @palmares/databases@0.1.16
+ - @palmares/server@0.1.13
+ - @palmares/core@0.1.13
+ - @palmares/express-adapter@0.1.14
+ - @palmares/node-std@0.1.13
+ - @palmares/sequelize-engine@0.1.16
+ - @palmares/zod-schema@0.1.22
+ - @palmares/logging@0.1.13
+ - @palmares/schemas@0.1.20
+
## 0.0.24
### Patch Changes
diff --git a/examples/deel-hometask-challenge/package.json b/examples/deel-hometask-challenge/package.json
index aaab76b5..a3956ecf 100644
--- a/examples/deel-hometask-challenge/package.json
+++ b/examples/deel-hometask-challenge/package.json
@@ -1,6 +1,6 @@
{
"name": "@examples/deel-hometask-challenge",
- "version": "0.0.24",
+ "version": "0.0.25",
"description": "This is the home task challenge solution for deel",
"main": "manage.ts",
"scripts": {
diff --git a/examples/next-monorepo/CHANGELOG.md b/examples/next-monorepo/CHANGELOG.md
index fa9e866f..c45feadb 100644
--- a/examples/next-monorepo/CHANGELOG.md
+++ b/examples/next-monorepo/CHANGELOG.md
@@ -1,5 +1,11 @@
# @examples/next-monorepo
+## 0.0.6
+
+### Patch Changes
+
+- Everything now has peer dependencies instead of dependency
+
## 0.0.5
### Patch Changes
diff --git a/examples/next-monorepo/next-client-app/CHANGELOG.md b/examples/next-monorepo/next-client-app/CHANGELOG.md
new file mode 100644
index 00000000..9bbfa26e
--- /dev/null
+++ b/examples/next-monorepo/next-client-app/CHANGELOG.md
@@ -0,0 +1,14 @@
+# @examples/next-client-app
+
+## 0.1.1
+
+### Patch Changes
+
+- Updated dependencies
+- Updated dependencies
+ - @palmares/console-logging@0.1.7
+ - @palmares/server@0.1.13
+ - @palmares/core@0.1.13
+ - @palmares/node-std@0.1.13
+ - @palmares/vercel-adapter@0.0.17
+ - @palmares/logging@0.1.13
diff --git a/examples/next-monorepo/next-client-app/package.json b/examples/next-monorepo/next-client-app/package.json
index a7e3f41f..d861c776 100644
--- a/examples/next-monorepo/next-client-app/package.json
+++ b/examples/next-monorepo/next-client-app/package.json
@@ -1,6 +1,6 @@
{
"name": "@examples/next-client-app",
- "version": "0.1.0",
+ "version": "0.1.1",
"private": true,
"scripts": {
"dev": "next dev",
diff --git a/examples/next-monorepo/package.json b/examples/next-monorepo/package.json
index 76473d67..64a6d807 100644
--- a/examples/next-monorepo/package.json
+++ b/examples/next-monorepo/package.json
@@ -1,6 +1,6 @@
{
"name": "@examples/next-monorepo",
- "version": "0.0.5",
+ "version": "0.0.6",
"description": "testing the serverless vercel on a next app",
"keywords": [],
"author": "",
diff --git a/examples/next-monorepo/server-palmares/CHANGELOG.md b/examples/next-monorepo/server-palmares/CHANGELOG.md
new file mode 100644
index 00000000..05e5952a
--- /dev/null
+++ b/examples/next-monorepo/server-palmares/CHANGELOG.md
@@ -0,0 +1,15 @@
+# @examples/server-palmares
+
+## 0.0.2
+
+### Patch Changes
+
+- Updated dependencies
+- Updated dependencies
+ - @palmares/console-logging@0.1.7
+ - @palmares/server@0.1.13
+ - @palmares/core@0.1.13
+ - @palmares/express-adapter@0.1.14
+ - @palmares/node-std@0.1.13
+ - @palmares/vercel-adapter@0.0.17
+ - @palmares/logging@0.1.13
diff --git a/examples/next-monorepo/server-palmares/package.json b/examples/next-monorepo/server-palmares/package.json
index df1efad6..1c76821f 100644
--- a/examples/next-monorepo/server-palmares/package.json
+++ b/examples/next-monorepo/server-palmares/package.json
@@ -1,6 +1,6 @@
{
"name": "@examples/server-palmares",
- "version": "0.0.1",
+ "version": "0.0.2",
"description": "testing the serverless vercel",
"main": "manage.ts",
"scripts": {
diff --git a/examples/schemas/CHANGELOG.md b/examples/schemas/CHANGELOG.md
index a3abeaea..804b981e 100644
--- a/examples/schemas/CHANGELOG.md
+++ b/examples/schemas/CHANGELOG.md
@@ -1,5 +1,15 @@
# @examples/schemas
+## 0.0.25
+
+### Patch Changes
+
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/zod-schema@0.1.22
+ - @palmares/schemas@0.1.20
+
## 0.0.24
### Patch Changes
diff --git a/examples/schemas/package.json b/examples/schemas/package.json
index 4bee3d80..1f1471d1 100644
--- a/examples/schemas/package.json
+++ b/examples/schemas/package.json
@@ -1,6 +1,6 @@
{
"name": "@examples/schemas",
- "version": "0.0.24",
+ "version": "0.0.25",
"description": "asdasdasd",
"main": "./src/index.ts",
"scripts": {
diff --git a/examples/server-express-only/CHANGELOG.md b/examples/server-express-only/CHANGELOG.md
index 038eaf5b..569501f5 100644
--- a/examples/server-express-only/CHANGELOG.md
+++ b/examples/server-express-only/CHANGELOG.md
@@ -1,5 +1,19 @@
# @examples/server-express-only
+## 0.0.17
+
+### Patch Changes
+
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/console-logging@0.1.7
+ - @palmares/server@0.1.13
+ - @palmares/core@0.1.13
+ - @palmares/express-adapter@0.1.14
+ - @palmares/node-std@0.1.13
+ - @palmares/logging@0.1.13
+
## 0.0.16
### Patch Changes
diff --git a/examples/server-express-only/package.json b/examples/server-express-only/package.json
index 3dea4be1..73f879e2 100644
--- a/examples/server-express-only/package.json
+++ b/examples/server-express-only/package.json
@@ -1,6 +1,6 @@
{
"name": "@examples/server-express-only",
- "version": "0.0.16",
+ "version": "0.0.17",
"description": "This is an example just to see if the server works as expected",
"main": "manage.ts",
"scripts": {
diff --git a/examples/server-vercel/CHANGELOG.md b/examples/server-vercel/CHANGELOG.md
index 305ee794..f3fe6170 100644
--- a/examples/server-vercel/CHANGELOG.md
+++ b/examples/server-vercel/CHANGELOG.md
@@ -1,5 +1,19 @@
# @palmares/server-vercel
+## 0.0.17
+
+### Patch Changes
+
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/console-logging@0.1.7
+ - @palmares/server@0.1.13
+ - @palmares/core@0.1.13
+ - @palmares/node-std@0.1.13
+ - @palmares/vercel-adapter@0.0.17
+ - @palmares/logging@0.1.13
+
## 0.0.16
### Patch Changes
diff --git a/examples/server-vercel/package.json b/examples/server-vercel/package.json
index 734a252b..53e1d348 100644
--- a/examples/server-vercel/package.json
+++ b/examples/server-vercel/package.json
@@ -1,6 +1,6 @@
{
"name": "@palmares/server-vercel",
- "version": "0.0.16",
+ "version": "0.0.17",
"description": "testing the serverless vercel",
"main": "manage.ts",
"scripts": {
diff --git a/examples/tests/CHANGELOG.md b/examples/tests/CHANGELOG.md
index 2443caa6..c1bbb6d8 100644
--- a/examples/tests/CHANGELOG.md
+++ b/examples/tests/CHANGELOG.md
@@ -1,5 +1,19 @@
# @example/tests
+## 0.0.16
+
+### Patch Changes
+
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/console-logging@0.1.7
+ - @palmares/core@0.1.13
+ - @palmares/jest-tests@0.1.13
+ - @palmares/node-std@0.1.13
+ - @palmares/logging@0.1.13
+ - @palmares/tests@0.1.13
+
## 0.0.15
### Patch Changes
diff --git a/examples/tests/package.json b/examples/tests/package.json
index 9eba1a76..f4867e12 100644
--- a/examples/tests/package.json
+++ b/examples/tests/package.json
@@ -1,6 +1,6 @@
{
"name": "@example/tests",
- "version": "0.0.15",
+ "version": "0.0.16",
"description": "testing the tests",
"main": "manage.ts",
"scripts": {
diff --git a/examples/with-code-share/apps/client/.gitignore b/examples/with-code-share/apps/client/.gitignore
new file mode 100644
index 00000000..bc6d3062
--- /dev/null
+++ b/examples/with-code-share/apps/client/.gitignore
@@ -0,0 +1,26 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+*storybook.log
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/.storybook/main.ts b/examples/with-code-share/apps/client/.storybook/main.ts
new file mode 100644
index 00000000..07987742
--- /dev/null
+++ b/examples/with-code-share/apps/client/.storybook/main.ts
@@ -0,0 +1,27 @@
+import type { StorybookConfig } from "@storybook/react-vite";
+
+import { join, dirname } from "path";
+
+/**
+ * This function is used to resolve the absolute path of a package.
+ * It is needed in projects that use Yarn PnP or are set up within a monorepo.
+ */
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+function getAbsolutePath(value: string): any {
+ return dirname(require.resolve(join(value, "package.json")));
+}
+const config: StorybookConfig = {
+ stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"],
+ addons: [
+ getAbsolutePath("@storybook/addon-onboarding"),
+ getAbsolutePath("@storybook/addon-links"),
+ getAbsolutePath("@storybook/addon-essentials"),
+ getAbsolutePath("@chromatic-com/storybook"),
+ getAbsolutePath("@storybook/addon-interactions"),
+ ],
+ framework: {
+ name: getAbsolutePath("@storybook/react-vite"),
+ options: {},
+ },
+};
+export default config;
diff --git a/examples/with-code-share/apps/client/.storybook/preview.ts b/examples/with-code-share/apps/client/.storybook/preview.ts
new file mode 100644
index 00000000..bb486805
--- /dev/null
+++ b/examples/with-code-share/apps/client/.storybook/preview.ts
@@ -0,0 +1,19 @@
+import '../src/index.css'
+import type { Preview } from "@storybook/react";
+
+import { setDefaultAdapter, ZodSchemaAdapter } from 'shared'
+
+setDefaultAdapter(new ZodSchemaAdapter());
+
+const preview: Preview = {
+ parameters: {
+ controls: {
+ matchers: {
+ color: /(background|color)$/i,
+ date: /Date$/i,
+ },
+ },
+ },
+};
+
+export default preview;
diff --git a/examples/with-code-share/apps/client/CHANGELOG.md b/examples/with-code-share/apps/client/CHANGELOG.md
new file mode 100644
index 00000000..1a3233dc
--- /dev/null
+++ b/examples/with-code-share/apps/client/CHANGELOG.md
@@ -0,0 +1,10 @@
+# client
+
+## 0.0.1
+
+### Patch Changes
+
+- Updated dependencies
+- Updated dependencies
+ - @palmares/client@0.1.13
+ - shared@1.0.1
diff --git a/examples/with-code-share/apps/client/README.md b/examples/with-code-share/apps/client/README.md
new file mode 100644
index 00000000..74872fd4
--- /dev/null
+++ b/examples/with-code-share/apps/client/README.md
@@ -0,0 +1,50 @@
+# React + TypeScript + Vite
+
+This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
+
+Currently, two official plugins are available:
+
+- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
+- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
+
+## Expanding the ESLint configuration
+
+If you are developing a production application, we recommend updating the configuration to enable type aware lint rules:
+
+- Configure the top-level `parserOptions` property like this:
+
+```js
+export default tseslint.config({
+ languageOptions: {
+ // other options...
+ parserOptions: {
+ project: ['./tsconfig.node.json', './tsconfig.app.json'],
+ tsconfigRootDir: import.meta.dirname,
+ },
+ },
+})
+```
+
+- Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked`
+- Optionally add `...tseslint.configs.stylisticTypeChecked`
+- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config:
+
+```js
+// eslint.config.js
+import react from 'eslint-plugin-react'
+
+export default tseslint.config({
+ // Set the react version
+ settings: { react: { version: '18.3' } },
+ plugins: {
+ // Add the react plugin
+ react,
+ },
+ rules: {
+ // other rules...
+ // Enable its recommended rules
+ ...react.configs.recommended.rules,
+ ...react.configs['jsx-runtime'].rules,
+ },
+})
+```
diff --git a/examples/with-code-share/apps/client/eslint.config.js b/examples/with-code-share/apps/client/eslint.config.js
new file mode 100644
index 00000000..092408a9
--- /dev/null
+++ b/examples/with-code-share/apps/client/eslint.config.js
@@ -0,0 +1,28 @@
+import js from '@eslint/js'
+import globals from 'globals'
+import reactHooks from 'eslint-plugin-react-hooks'
+import reactRefresh from 'eslint-plugin-react-refresh'
+import tseslint from 'typescript-eslint'
+
+export default tseslint.config(
+ { ignores: ['dist'] },
+ {
+ extends: [js.configs.recommended, ...tseslint.configs.recommended],
+ files: ['**/*.{ts,tsx}'],
+ languageOptions: {
+ ecmaVersion: 2020,
+ globals: globals.browser,
+ },
+ plugins: {
+ 'react-hooks': reactHooks,
+ 'react-refresh': reactRefresh,
+ },
+ rules: {
+ ...reactHooks.configs.recommended.rules,
+ 'react-refresh/only-export-components': [
+ 'warn',
+ { allowConstantExport: true },
+ ],
+ },
+ },
+)
diff --git a/examples/with-code-share/apps/client/index.html b/examples/with-code-share/apps/client/index.html
new file mode 100644
index 00000000..6b57d8a2
--- /dev/null
+++ b/examples/with-code-share/apps/client/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ Velozient Computers
+
+
+
+
+
+
diff --git a/examples/with-code-share/apps/client/package.json b/examples/with-code-share/apps/client/package.json
new file mode 100644
index 00000000..90938df8
--- /dev/null
+++ b/examples/with-code-share/apps/client/package.json
@@ -0,0 +1,58 @@
+{
+ "name": "@examples/with-code-share-client",
+ "private": true,
+ "version": "0.0.1",
+ "type": "module",
+ "scripts": {
+ "dev": "vite --clearScreen false",
+ "build:app": "vite build",
+ "lint": "eslint .",
+ "preview": "vite preview",
+ "storybook": "storybook dev -p 6006",
+ "build-storybook": "storybook build"
+ },
+ "packageManager": "pnpm@9.9.0",
+ "dependencies": {
+ "@faker-js/faker": "^8.4.1",
+ "@palmares/client": "workspace:*",
+ "@tanstack/react-query": "^5.55.0",
+ "@tanstack/react-virtual": "^3.10.7",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
+ "@examples/with-code-share-shared": "workspace:*"
+ },
+ "devDependencies": {
+ "@chromatic-com/storybook": "^1.9.0",
+ "@eslint/js": "^9.10.0",
+ "@palmares/core": "workspace:*",
+ "@palmares/server": "workspace:*",
+ "@storybook/addon-essentials": "^8.2.9",
+ "@storybook/addon-interactions": "^8.2.9",
+ "@storybook/addon-links": "^8.2.9",
+ "@storybook/addon-onboarding": "^8.2.9",
+ "@storybook/blocks": "^8.2.9",
+ "@storybook/react": "^8.2.9",
+ "@storybook/react-vite": "^8.2.9",
+ "@storybook/test": "^8.2.9",
+ "@types/react": "^18.3.5",
+ "@types/react-dom": "^18.3.0",
+ "@vitejs/plugin-react": "^4.3.1",
+ "autoprefixer": "^10.4.20",
+ "eslint": "^9.10.0",
+ "eslint-plugin-react-hooks": "5.1.0-rc-fb9a90fa48-20240614",
+ "eslint-plugin-react-refresh": "^0.4.11",
+ "eslint-plugin-storybook": "^0.8.0",
+ "globals": "^15.9.0",
+ "postcss": "^8.4.45",
+ "storybook": "^8.2.9",
+ "tailwindcss": "^3.4.10",
+ "typescript": "^5.5.4",
+ "typescript-eslint": "^8.4.0",
+ "vite": "^5.4.3"
+ },
+ "eslintConfig": {
+ "extends": [
+ "plugin:storybook/recommended"
+ ]
+ }
+}
diff --git a/examples/with-code-share/apps/client/postcss.config.js b/examples/with-code-share/apps/client/postcss.config.js
new file mode 100644
index 00000000..2e7af2b7
--- /dev/null
+++ b/examples/with-code-share/apps/client/postcss.config.js
@@ -0,0 +1,6 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+}
diff --git a/examples/with-code-share/apps/client/public/vite.svg b/examples/with-code-share/apps/client/public/vite.svg
new file mode 100644
index 00000000..e7b8dfb1
--- /dev/null
+++ b/examples/with-code-share/apps/client/public/vite.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/App.tsx b/examples/with-code-share/apps/client/src/App.tsx
new file mode 100644
index 00000000..6331180c
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/App.tsx
@@ -0,0 +1,15 @@
+import { QueryClientProvider } from "@tanstack/react-query";
+import Main from "./components/main";
+import { queryClient } from "./utils";
+
+function App() {
+ return (
+ <>
+
+
+
+ >
+ )
+}
+
+export default App
diff --git a/examples/with-code-share/apps/client/src/assets/react.svg b/examples/with-code-share/apps/client/src/assets/react.svg
new file mode 100644
index 00000000..6c87de9b
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/assets/react.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/components/AssignForm/AssignForm.component.tsx b/examples/with-code-share/apps/client/src/components/AssignForm/AssignForm.component.tsx
new file mode 100644
index 00000000..768eb2fd
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/components/AssignForm/AssignForm.component.tsx
@@ -0,0 +1,53 @@
+import useUsers from "../../hooks/users/useUsers";
+import { useEditItem } from "../../hooks";
+import { InventoryInput } from "shared";
+import AssignFormLayout from "./AssignForm.layout";
+
+export default function AssignForm(props: {
+ open: boolean,
+ onOpen: (isOpen: boolean) => void;
+ item: InventoryInput,
+}) {
+ const editItem = useEditItem()
+ const {
+ data,
+ error,
+ fetchNextPage,
+ hasNextPage,
+ isFetchingNextPage,
+ status,
+ onSearch,
+ } = useUsers()
+
+ function onSelectUser(user: NonNullable['pages'][number]['data'][number]) {
+ editItem.mutateAsync({
+ ...props.item,
+ assignmentDate: new Date().toISOString(),
+ status: 'use',
+ userId: user.id,
+ user: {
+ firstName: user.firstName,
+ lastName: user.lastName,
+ email: user.email
+ }
+ }).then(() => {
+ props.onOpen(false)
+ })
+ }
+
+ return (
+
+ )
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/components/AssignForm/AssignForm.layout.tsx b/examples/with-code-share/apps/client/src/components/AssignForm/AssignForm.layout.tsx
new file mode 100644
index 00000000..52607efe
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/components/AssignForm/AssignForm.layout.tsx
@@ -0,0 +1,96 @@
+import Modal from "../Modal/Modal.component";
+import { useVirtualList } from "../../hooks";
+import { AbstractUser, InventoryInput, ModelFields } from "shared";
+import { InfiniteData } from "@tanstack/react-query";
+
+export default function AssignFormLayout['allRows']>(props: {
+ open: boolean,
+ onOpen: (isOpen: boolean) => void;
+ data?: InfiniteData<{
+ data: ModelFields[];
+ nextCursor: number | null;
+ }, unknown>;
+ fetchNextPage: () => void;
+ item: InventoryInput;
+ error?: Error | null;
+ status: string;
+ onSearch: (search: string) => void;
+ onSelectUser: (user: TUsers[number]) => void;
+ hasNextPage: boolean;
+ isFetchingNextPage: boolean;
+}) {
+ const {
+ parentRef,
+ rowVirtualizer,
+ allRows: allUsers
+ } = useVirtualList({
+ data: props.data,
+ fetchNextPage: props.fetchNextPage,
+ hasNextPage: props.hasNextPage,
+ isFetchingNextPage: props.isFetchingNextPage,
+ estimatedSize: 40,
+ })
+
+ return (
+
+
+
props.onSearch(e.target.value)}
+ />
+
+ {props.status === 'pending' ? (
+
Loading...
+ ) : props.status === 'error' ? (
+
Error: {props.error?.message}
+ ) : (
+
+ {rowVirtualizer.getVirtualItems().map((virtualRow) => {
+ const isLoaderRow = virtualRow.index > allUsers.length - 1
+ const user = allUsers[virtualRow.index];
+ return (
+
+ {user === undefined ? (
+ isLoaderRow
+ ? props.hasNextPage
+ ? 'Loading more...'
+ : null
+ : 'No items found'
+ ) : (
+
+ )}
+
+ )
+ })}
+
+ )}
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/components/AssignForm/AssignForm.mock.tsx b/examples/with-code-share/apps/client/src/components/AssignForm/AssignForm.mock.tsx
new file mode 100644
index 00000000..557304cc
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/components/AssignForm/AssignForm.mock.tsx
@@ -0,0 +1,58 @@
+import { InventoryInput, mockUsers } from 'shared';
+
+import useGetMockedDataLikeReactInfiniteQuery from "../../hooks/usegetMockedDataLikeReactInfiniteQuery";
+import AssignFormLayout from "./AssignForm.layout";
+
+export const Wrapper = (props: {
+ open?: boolean;
+ onOpen?: (isOpen: boolean) => void;
+ item: InventoryInput;
+ users?: ReturnType['rows'];
+}) => {
+ const {
+ data,
+ fetchNextPage,
+ hasNextPage,
+ isFetchingNextPage,
+ status
+ } = useGetMockedDataLikeReactInfiniteQuery((nextCursor) => {
+ if (props.users) {
+ if (nextCursor) {
+ const offset = props.users.findIndex((user) => user.id === nextCursor);
+ return {
+ nextCursor: offset > -1 ? props.users[offset + 1]?.id : null,
+ rows: props.users.slice(offset + 1, offset + 21),
+ }
+ }
+ return {
+ nextCursor: props.users[20]?.id,
+ rows: props.users.slice(0, 20),
+ }
+ }
+
+ const mockedData = mockUsers(20, { offset: nextCursor as number | undefined });
+ return {
+ nextCursor: mockedData.nextOffset,
+ rows: mockedData.rows,
+ }
+ }, 60)
+
+ return (
+ {
+ if (props.onOpen) props.onOpen(isOpen);
+ }}
+ item={props.item}
+ data={data}
+ status={status}
+ onSearch={() => {
+ console.log('Searching')
+ }}
+ onSelectUser={() => {}}
+ hasNextPage={hasNextPage}
+ fetchNextPage={fetchNextPage}
+ isFetchingNextPage={isFetchingNextPage}
+ />
+ );
+};
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/components/AssignForm/AssignForm.stories.tsx b/examples/with-code-share/apps/client/src/components/AssignForm/AssignForm.stories.tsx
new file mode 100644
index 00000000..e4d2ed2b
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/components/AssignForm/AssignForm.stories.tsx
@@ -0,0 +1,20 @@
+import type { Meta, StoryObj } from "@storybook/react";
+
+import { mockInventory } from 'shared';
+
+import { Wrapper } from "./AssignForm.mock";
+
+const meta = {
+ title: "Components/AssignForm",
+ component: Wrapper,
+} satisfies Meta;
+
+export default meta;
+type Story = StoryObj;
+
+export const Basic: Story = {
+ args: {
+ item: mockInventory(1).rows[0],
+ },
+};
+
diff --git a/examples/with-code-share/apps/client/src/components/Item/Item.component.tsx b/examples/with-code-share/apps/client/src/components/Item/Item.component.tsx
new file mode 100644
index 00000000..1f90c26c
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/components/Item/Item.component.tsx
@@ -0,0 +1,46 @@
+import { useState } from 'react';
+import { VirtualItem } from '@tanstack/react-virtual';
+
+import ItemsForm from '../ItemsForm/ItemsForm.component';
+import AssignForm from '../AssignForm/AssignForm.component';
+import { useDeleteItem } from '../../hooks';
+
+import type { ArrayInventoryOutput } from 'shared';
+import ItemLayout from './Item.layout';
+
+export default function Item(props: {
+ isLoaderRow: boolean,
+ virtualRow: VirtualItem,
+ hasMore: boolean,
+ item?: ArrayInventoryOutput[number],
+}) {
+ const removeItem = useDeleteItem();
+ const [editOpen, setEditOpen] = useState(undefined);
+ const [assignOpen, setAssignOpen] = useState(false);
+
+ return (
+ setAssignOpen(true)}
+ onOpenEdit={() => setEditOpen(props.item)}
+ onRemove={() => {
+ if (props.item) removeItem.mutateAsync(props.item)
+ }}
+ isLoaderRow={props.isLoaderRow}
+ virtualRow={props.virtualRow}
+ hasMore={props.hasMore}
+ item={props.item}
+ >
+ setEditOpen(undefined)}
+ />
+ {props.item !== undefined ? (
+
+ ) : null}
+
+ )
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/components/Item/Item.layout.tsx b/examples/with-code-share/apps/client/src/components/Item/Item.layout.tsx
new file mode 100644
index 00000000..69d5d3fb
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/components/Item/Item.layout.tsx
@@ -0,0 +1,136 @@
+import { Fragment, PropsWithChildren } from 'react';
+import { VirtualItem } from '@tanstack/react-virtual';
+
+import type { ArrayInventoryOutput } from 'shared';
+
+
+export default function ItemLayout(props: PropsWithChildren<{
+ isLoaderRow: boolean,
+ virtualRow: VirtualItem,
+ hasMore: boolean,
+ item?: ArrayInventoryOutput[number],
+ onRemove: () => void;
+ onOpenEdit: () => void;
+ onOpenAssign: () => void;
+}>) {
+ const textByStatus = {
+ available: 'Available',
+ use: 'In Use',
+ maintenance: 'In Maintenance',
+ };
+ const warrantyExpiryDate = new Date(props.item?.warrantyExpiryDate as string);
+ const today = new Date();
+ const isExpired = warrantyExpiryDate < today;
+ const isExpiringSoon = warrantyExpiryDate < new Date(today.setDate(today.getDate() + 30));
+
+ return (
+
+
+ {props.item === undefined ? (
+ props.isLoaderRow
+ ? props.hasMore
+ ? (
+
+ )
+ : null
+ : 'No items found'
+ ) : (
+
+
+
+
+
+
+
+
Serial Number: {props.item.serial}
+
Manufacturer: {props.item.manufacturer}
+
+ Status:
+
+ {textByStatus[props.item.status]}
+
+
+
Specification: {props.item.specifications}
+
+
+
Purchased on:
+ {Intl.DateTimeFormat('en-US').format(new Date(props.item.purchaseDate as string))}
+
+
Warranty until:
+
+ {Intl.DateTimeFormat('en-US').format(new Date(props.item.warrantyExpiryDate as string))}
+
+
+
Assigned on:
+ {props.item?.user ? `${props.item?.user?.firstName} ${props.item?.user?.lastName}` : (
+ No person assigned
+ )}
+
+
Assigned to:
+ {props.item?.user ? `${props.item?.user?.firstName} ${props.item?.user?.lastName}` : (
+ No person assigned
+ )}
+
+
+
+
+
+
+
+
+
+
+ )}
+
+ {props.children}
+
+ );
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/components/Items/Items.component.tsx b/examples/with-code-share/apps/client/src/components/Items/Items.component.tsx
new file mode 100644
index 00000000..d43967db
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/components/Items/Items.component.tsx
@@ -0,0 +1,31 @@
+import Item from "../Item/Item.component";
+import { useItems } from "../../hooks";
+import ItemsLayout from "./Items.layout";
+
+export default function Items() {
+ const {
+ data,
+ error,
+ fetchNextPage,
+ hasNextPage,
+ isFetchingNextPage,
+ status,
+ } = useItems()
+
+ return (
+ (
+
+ )}
+ />
+ );
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/components/Items/Items.layout.tsx b/examples/with-code-share/apps/client/src/components/Items/Items.layout.tsx
new file mode 100644
index 00000000..74d0b03a
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/components/Items/Items.layout.tsx
@@ -0,0 +1,59 @@
+import Item from "../Item/Item.component";
+import { useVirtualList } from "../../hooks";
+import { InfiniteData } from "@tanstack/react-query";
+import { ArrayInventoryOutput } from "shared";
+import { ComponentProps } from "react";
+
+export default function ItemsLayout(props: {
+ data?: InfiniteData<{
+ data: ArrayInventoryOutput,
+ nextCursor: number | null
+ }>;
+ fetchNextPage: () => void;
+ hasNextPage: boolean;
+ isFetchingNextPage: boolean;
+ error?: Error | null;
+ status: string
+ onRenderItem: (key: number, props: ComponentProps) => JSX.Element;
+}) {
+ const {
+ parentRef,
+ rowVirtualizer,
+ allRows
+ } = useVirtualList({
+ data: props.data,
+ fetchNextPage: props.fetchNextPage,
+ hasNextPage: props.hasNextPage,
+ isFetchingNextPage: props.isFetchingNextPage,
+ estimatedSize: document.body.clientWidth > 767 ? 160 : 370
+ })
+
+ return (
+
+ {props.status === 'pending' ? (
+
Loading...
+ ) : props.status === 'error' ? (
+
Error: {props.error?.message}
+ ) : (
+
+ {rowVirtualizer.getVirtualItems().map((virtualRow) => {
+ const isLoaderRow = virtualRow.index > allRows.length - 1
+ const item = allRows[virtualRow.index];
+ return props.onRenderItem(virtualRow.index,{
+ item,
+ isLoaderRow,
+ virtualRow,
+ hasMore: props.hasNextPage
+ })
+ })}
+
+ )}
+
+ );
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/components/Items/Items.stories.tsx b/examples/with-code-share/apps/client/src/components/Items/Items.stories.tsx
new file mode 100644
index 00000000..34a32b71
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/components/Items/Items.stories.tsx
@@ -0,0 +1,113 @@
+import { ComponentProps, useMemo, useState } from "react";
+import type { Meta, StoryObj } from "@storybook/react";
+
+import { ArrayInventoryOutput, mockInventory, mockUsers } from 'shared';
+
+import ItemsLayout from "./Items.layout";
+import useGetMockedDataLikeReactInfiniteQuery from "../../hooks/usegetMockedDataLikeReactInfiniteQuery";
+import ItemLayout from "../Item/Item.layout";
+import ItemsFormLayout from "../ItemsForm/ItemsForm.layout";
+import { MutationErrors } from "../../utils";
+import { Wrapper as WrapperForAssignForm } from "../AssignForm/AssignForm.mock";
+
+const WrapperForItem = (props: {
+ key: number | string;
+} & ComponentProps & {
+ users: ReturnType['rows'];
+}) => {
+ const [editOpen, setEditOpen] = useState(undefined);
+ const [assignOpen, setAssignOpen] = useState(false);
+
+ return (
+ setAssignOpen(true)}
+ onOpenEdit={() => {
+ setEditOpen(props.item)
+ props.onOpenEdit()
+ }}
+ onRemove={() => {
+ props.onRemove()
+ }}
+ hasMore={props.hasMore}
+ >
+ setEditOpen(undefined)}
+ onAddOrUpdateData={async (item) => {
+ const shouldFail = Math.random() > 0.5;
+ if (shouldFail) {
+ throw new MutationErrors([{
+ code: "serial",
+ message: "Serial number already exists",
+ path: ["serial"],
+ }])
+ }
+ return Promise.resolve(item);
+ }}
+ />
+ {props.item && (
+
+ )}
+
+ )
+}
+
+const Wrapper = () => {
+ const users = useMemo(() => mockUsers(60).rows, []);
+ const {
+ data,
+ fetchNextPage,
+ hasNextPage,
+ isFetchingNextPage,
+ status
+ } = useGetMockedDataLikeReactInfiniteQuery((nextCursor) => {
+ const mockedData = mockInventory(20, { offset: nextCursor as number | undefined, users });
+ return {
+ nextCursor: mockedData.nextOffset,
+ rows: mockedData.rows,
+ }
+ }, 60)
+
+ return (
+
+ (
+ {}}
+ onOpenEdit={() => {}}
+ onRemove={() => {
+ alert('Removing item')
+ }}
+ />
+ )}
+ />
+
+ );
+};
+
+
+
+const meta = {
+ title: "Components/Items",
+ component: Wrapper,
+} satisfies Meta;
+
+export default meta;
+type Story = StoryObj;
+
+export const Basic: Story = {
+ args: {},
+};
+
diff --git a/examples/with-code-share/apps/client/src/components/ItemsForm/ItemsForm.component.tsx b/examples/with-code-share/apps/client/src/components/ItemsForm/ItemsForm.component.tsx
new file mode 100644
index 00000000..0937d892
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/components/ItemsForm/ItemsForm.component.tsx
@@ -0,0 +1,25 @@
+import { InventoryInput } from "shared";
+
+import { useAddItem, useEditItem } from "../../hooks";
+import ItemsFormLayout from "./ItemsForm.layout";
+
+export default function ItemsForm(props: {
+ newItem?: boolean;
+ item?: InventoryInput,
+ onClose?: () => void,
+}) {
+ const updateItem = useEditItem();
+ const addItem = useAddItem();
+
+ return (
+ {
+ const addItemOrUpdateItem = item.id ? updateItem : addItem;
+ return addItemOrUpdateItem.mutateAsync(item);
+ }}
+ />
+ )
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/components/ItemsForm/ItemsForm.layout.tsx b/examples/with-code-share/apps/client/src/components/ItemsForm/ItemsForm.layout.tsx
new file mode 100644
index 00000000..b11251a0
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/components/ItemsForm/ItemsForm.layout.tsx
@@ -0,0 +1,201 @@
+import { useEffect, useState } from "react";
+
+import { InventoryInput, InventoryOutput, getInventorySchemaWithSave } from "shared";
+
+import Modal from "../Modal/Modal.component";
+import { formatErrors, MutationErrors, uuid } from "../../utils";
+
+export default function ItemsFormLayout(props: {
+ newItem?: boolean;
+ item?: InventoryInput,
+ onClose?: () => void,
+ onAddOrUpdateData: (item: InventoryInput) => Promise,
+}) {
+ const [isOpen, setIsOpen] = useState(props.item ? true : typeof props.newItem === 'boolean' ? props.newItem : false);
+ const [item, setItem] = useState(props.item ? props.item : props.newItem ? getNewUser() : undefined);
+ const [errors, setErrors] = useState>({});
+
+ function getNewUser() {
+ return {
+ uuid: uuid(),
+ manufacturer: "Apple",
+ serial: "",
+ purchaseDate: new Date().toISOString(),
+ warrantyExpiryDate: new Date().toISOString(),
+ specifications: "",
+ imageUrl: "",
+ status: "available",
+ userId: null,
+ } satisfies InventoryInput
+ }
+
+ function onSubmit() {
+ if (item) {
+ getInventorySchemaWithSave(async (item) => {
+ props.onAddOrUpdateData(item).then(() => {
+ setErrors({});
+ setIsOpen(false);
+ setItem(undefined);
+ if (props.onClose) props.onClose();
+ }).catch((error) => {
+ if (error instanceof MutationErrors) setErrors(formatErrors(error.errors));
+ });
+ return item;
+ })
+ .validate({ ...item }, {})
+ .then((validateData) => {
+ console.log(validateData);
+ if (validateData.isValid === false) return setErrors(formatErrors(validateData.errors));
+ else validateData.save();
+ })
+ }
+ }
+
+ useEffect(() => {
+ if (typeof props.item === 'object') {
+ if (props.item) setIsOpen(true);
+ else setIsOpen(false);
+ setItem(props.item);
+ }
+ }, [props.item]);
+
+ useEffect(() => {
+ if (typeof props.newItem === 'boolean') {
+ if (props.newItem) setIsOpen(true);
+ else setIsOpen(false);
+ setItem(getNewUser());
+ }
+ }, [props.newItem]);
+
+ return (
+ {
+ if (isOpen === false) {
+ setItem(undefined);
+ props.onClose?.();
+ }
+ setIsOpen(isOpen);
+ }}>
+
+
+ );
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/components/ItemsForm/ItemsForm.stories.tsx b/examples/with-code-share/apps/client/src/components/ItemsForm/ItemsForm.stories.tsx
new file mode 100644
index 00000000..c907a2e2
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/components/ItemsForm/ItemsForm.stories.tsx
@@ -0,0 +1,57 @@
+import type { Meta, StoryObj } from "@storybook/react";
+
+import { mockInventory } from 'shared';
+
+import ItemsFormLayout from "../ItemsForm/ItemsForm.layout";
+import { MutationErrors } from "../../utils";
+
+const meta = {
+ title: "Components/ItemsForm",
+ component: ItemsFormLayout,
+} satisfies Meta;
+
+export default meta;
+type Story = StoryObj;
+
+export const New: Story = {
+ args: {
+ newItem: true,
+ item: undefined,
+ onClose: () => {
+ console.log("Closed");
+ },
+ onAddOrUpdateData: async (item) => {
+ const shouldFail = Math.random() > 0.5;
+ if (shouldFail) {
+ throw new MutationErrors([{
+ code: "serial",
+ message: "Serial number already exists",
+ path: ["serial"],
+ }])
+ }
+ return Promise.resolve(item);
+ },
+ },
+};
+
+export const Existing: Story = {
+ args: {
+ newItem: undefined,
+ item: mockInventory(1).rows[0],
+ onClose: () => {
+ console.log("Closed");
+ },
+ onAddOrUpdateData: async (item) => {
+ const shouldFail = Math.random() > 0.5;
+ if (shouldFail) {
+ throw new MutationErrors([{
+ code: "serial",
+ message: "Serial number already exists",
+ path: ["serial"],
+ }])
+ }
+ return Promise.resolve(item);
+ },
+ },
+};
+
diff --git a/examples/with-code-share/apps/client/src/components/Modal/Modal.component.tsx b/examples/with-code-share/apps/client/src/components/Modal/Modal.component.tsx
new file mode 100644
index 00000000..f4b8df06
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/components/Modal/Modal.component.tsx
@@ -0,0 +1,36 @@
+import { PropsWithChildren, useEffect, useRef, useState } from "react";
+
+export default function Modal(props: PropsWithChildren<{ title: string; open: boolean, onOpen: (isOpen: boolean) => void }>) {
+ const dialogRef = useRef(null);
+ const [isOpen, setIsOpen] = useState(props.open);
+
+ useEffect(() => {
+ setIsOpen(props.open);
+ }, [props.open]);
+
+ return (
+
+ )
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/components/Modal/Modal.stories.tsx b/examples/with-code-share/apps/client/src/components/Modal/Modal.stories.tsx
new file mode 100644
index 00000000..d416f767
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/components/Modal/Modal.stories.tsx
@@ -0,0 +1,53 @@
+import type { Meta, StoryObj } from "@storybook/react";
+import { useState } from "react";
+
+import Modal from "./Modal.component";
+
+const Wrapper = (props: {
+ open: boolean,
+ title: string,
+}) => {
+ const [isOpen, setIsOpen] = useState(props.open);
+
+ return (
+ <>
+
+ setIsOpen(isOpen)}
+ >
+ Modal Content
+
+ >
+ );
+};
+
+const meta = {
+ title: "Components/Modal",
+ component: Wrapper,
+} satisfies Meta;
+
+export default meta;
+type Story = StoryObj;
+
+export const Basic: Story = {
+ args: {
+ open: false,
+ title: "Modal Title"
+ },
+};
+
+export const WithDifferentTitle: Story = {
+ args: {
+ open: false,
+ title: "Really Long Modal Title for testing"
+ },
+};
+
+export const Opened: Story = {
+ args: {
+ open: true,
+ title: "Modal Title"
+ },
+};
diff --git a/examples/with-code-share/apps/client/src/components/Navbar/Navbar.component.tsx b/examples/with-code-share/apps/client/src/components/Navbar/Navbar.component.tsx
new file mode 100644
index 00000000..48709744
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/components/Navbar/Navbar.component.tsx
@@ -0,0 +1,15 @@
+import ItemsForm from "../ItemsForm/ItemsForm.component"
+import NavbarLayout from "./Navbar.layout";
+
+export default function Navbar() {
+ return (
+ (
+
+ )}
+ />
+ )
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/components/Navbar/Navbar.layout.tsx b/examples/with-code-share/apps/client/src/components/Navbar/Navbar.layout.tsx
new file mode 100644
index 00000000..de69f5c2
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/components/Navbar/Navbar.layout.tsx
@@ -0,0 +1,29 @@
+import { useState } from "react";
+
+export default function NavbarLayout(props: {
+ getItemsForm: (props: {
+ isAddingNewUser: boolean,
+ onClose: () => void
+ }) => JSX.Element;
+}) {
+ const [isAddingNewUser, setIsAddingNewUser] = useState(false);
+
+ return (
+
+ )
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/components/Navbar/Navbar.stories.tsx b/examples/with-code-share/apps/client/src/components/Navbar/Navbar.stories.tsx
new file mode 100644
index 00000000..608fa603
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/components/Navbar/Navbar.stories.tsx
@@ -0,0 +1,49 @@
+import type { Meta, StoryObj } from "@storybook/react";
+
+import Navbar from "./Navbar.layout";
+import ItemsFormLayout from "../ItemsForm/ItemsForm.layout";
+import { MutationErrors } from "../../utils";
+
+const Wrapper = (props: {
+ shouldFail?: boolean,
+}) => {
+ return (
+ (
+ {
+ const shouldFail = props.shouldFail;
+ if (shouldFail) {
+ throw new MutationErrors([{
+ code: "serial",
+ message: "Serial number already exists",
+ path: ["serial"],
+ }])
+ }
+ return Promise.resolve(item);
+ }}
+ />
+ )}
+ />
+ );
+};
+
+const meta = {
+ title: "Components/Navbar",
+ component: Wrapper,
+} satisfies Meta;
+
+export default meta;
+type Story = StoryObj;
+
+export const Basic: Story = {
+ args: {},
+};
+
+export const WithServerFailure: Story = {
+ args: {
+ shouldFail: true,
+ },
+};
diff --git a/examples/with-code-share/apps/client/src/components/index.ts b/examples/with-code-share/apps/client/src/components/index.ts
new file mode 100644
index 00000000..e69de29b
diff --git a/examples/with-code-share/apps/client/src/components/main.tsx b/examples/with-code-share/apps/client/src/components/main.tsx
new file mode 100644
index 00000000..195ea0f6
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/components/main.tsx
@@ -0,0 +1,12 @@
+import Items from "./Items/Items.component";
+import Navbar from "./Navbar/Navbar.component";
+
+export default function Main() {
+ return (
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/hooks/index.ts b/examples/with-code-share/apps/client/src/hooks/index.ts
new file mode 100644
index 00000000..db29907e
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/hooks/index.ts
@@ -0,0 +1,4 @@
+export * from './items';
+export { default as useVirtualList } from './useVirtualList';
+export { default as useDebounce } from './useDebounce';
+export { default as useGetMockedDataLikeReactInfiniteQuery } from './usegetMockedDataLikeReactInfiniteQuery';
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/hooks/items/index.ts b/examples/with-code-share/apps/client/src/hooks/items/index.ts
new file mode 100644
index 00000000..4a6f4890
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/hooks/items/index.ts
@@ -0,0 +1,4 @@
+export { default as useAddItem } from './useAddItem';
+export { default as useDeleteItem } from './useDeleteItem';
+export { default as useEditItem } from './useEditItem';
+export { default as useItems } from './useItems';
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/hooks/items/useAddItem.ts b/examples/with-code-share/apps/client/src/hooks/items/useAddItem.ts
new file mode 100644
index 00000000..6e1561da
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/hooks/items/useAddItem.ts
@@ -0,0 +1,50 @@
+import { InfiniteData, useMutation, useQueryClient } from '@tanstack/react-query';
+
+import { InventoryInput, ArrayInventoryOutput } from 'shared';
+
+import { pFetch, MutationErrors } from '../../utils';
+
+export default function useAddItem() {
+ const queryClient = useQueryClient();
+
+ const addItem = useMutation({
+ mutationFn: async (dataAdd: InventoryInput) => {
+ const response = await pFetch('/inventory?cursor=number?', {
+ method: 'POST',
+ query: {},
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: dataAdd,
+ });
+
+ if (!response.ok && response.status === 400) {
+ const dataErrors = await response.json();
+ throw new MutationErrors(dataErrors.errors);
+ }
+ return await response.json();
+ },
+ onMutate: async (newItem) => {
+ await queryClient.cancelQueries({ queryKey: ['items'] })
+ const previousItems = queryClient.getQueryData(['items']) as InfiniteData<{
+ data: ArrayInventoryOutput;
+ nextOffset: number;
+ }>;
+
+ const newItems = structuredClone(previousItems);
+ if (newItems.pages.length > 0 && Array.isArray(newItems.pages[0].data)) {
+ newItems.pages[0].data.unshift(newItem as ArrayInventoryOutput[number])
+ }
+
+ queryClient.setQueryData(['items'], newItems)
+
+ return { previousItems, newItems }
+ },
+ // If the mutation fails, use the context we returned above
+ onError: (_, __, context) => {
+ if (context) queryClient.setQueryData(['items'], context.previousItems)
+ },
+ });
+
+ return addItem;
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/hooks/items/useDeleteItem.ts b/examples/with-code-share/apps/client/src/hooks/items/useDeleteItem.ts
new file mode 100644
index 00000000..3ba0b38b
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/hooks/items/useDeleteItem.ts
@@ -0,0 +1,45 @@
+import { InfiniteData, useMutation, useQueryClient } from '@tanstack/react-query';
+
+import { InventoryInput, ArrayInventoryOutput } from 'shared';
+
+import { pFetch } from '../../utils';
+
+export default function useDeleteItem() {
+ const queryClient = useQueryClient();
+
+ const removeItem = useMutation({
+ mutationFn: async (dataToRemove: InventoryInput) => {
+ const response = await pFetch('/inventory/', {
+ method: 'DELETE',
+ headers: undefined,
+ body: undefined,
+ params: {
+ uuid: dataToRemove.uuid
+ }
+ });
+ return await response.json();
+ },
+ onMutate: async (newItem) => {
+ await queryClient.cancelQueries({ queryKey: ['items'] })
+ const previousItems = queryClient.getQueryData(['items']) as InfiniteData<{
+ data: ArrayInventoryOutput;
+ nextOffset: number;
+ }>;
+
+ const newItems = structuredClone(previousItems);
+ for (const page of newItems.pages) {
+ page.data = page.data.filter((item) => item.uuid !== newItem.uuid)
+ }
+
+ queryClient.setQueryData(['items'], newItems)
+
+ return { previousItems, newItems }
+ },
+ // If the mutation fails, use the context we returned above
+ onError: (_, __, context) => {
+ if (context) queryClient.setQueryData(['items'], context.previousItems)
+ },
+ });
+
+ return removeItem;
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/hooks/items/useEditItem.ts b/examples/with-code-share/apps/client/src/hooks/items/useEditItem.ts
new file mode 100644
index 00000000..b50779d1
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/hooks/items/useEditItem.ts
@@ -0,0 +1,62 @@
+import { InfiniteData, useMutation, useQueryClient } from '@tanstack/react-query';
+
+import { InventoryInput, ArrayInventoryOutput } from 'shared';
+
+import { pFetch, MutationErrors } from '../../utils';
+
+export default function useEditItem() {
+ const queryClient = useQueryClient();
+
+ const updateItem = useMutation({
+ mutationFn: async (dataToUpdate: InventoryInput) => {
+ if (!dataToUpdate.id) throw new Error('Item id is required to update');
+
+ const response = await pFetch('/inventory/', {
+ method: 'PUT',
+ body: dataToUpdate,
+ params: {
+ uuid: dataToUpdate.uuid
+ },
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ })
+ if (!response.ok && response.status === 400) {
+ const dataErrors = await response.json();
+ throw new MutationErrors(dataErrors.errors);
+ }
+ return await response.json();
+ },
+ onMutate: async (newItem) => {
+ await queryClient.cancelQueries({ queryKey: ['items'] });
+ const previousItems = queryClient.getQueryData(['items']) as InfiniteData<{
+ data: ArrayInventoryOutput;
+ nextOffset: number;
+ }>;
+ const newItems = structuredClone(previousItems);
+
+ for (const page of newItems.pages) {
+ for (let i = 0; i < page.data.length; i++) {
+ const item = page.data[i];
+ if (item.id === newItem.id) {
+ page.data[i] = newItem as ArrayInventoryOutput[number];
+ }
+ }
+ }
+
+ queryClient.setQueryData(['items'], newItems)
+
+ return { previousItems, newItems }
+ },
+ onError: (_, __, context) => {
+ if (context) {
+ queryClient.setQueryData(
+ ['items'],
+ context.previousItems,
+ )
+ }
+ },
+ });
+
+ return updateItem;
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/hooks/items/useItems.ts b/examples/with-code-share/apps/client/src/hooks/items/useItems.ts
new file mode 100644
index 00000000..716ab717
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/hooks/items/useItems.ts
@@ -0,0 +1,44 @@
+import { useInfiniteQuery } from '@tanstack/react-query';
+
+import { pFetch } from '../../utils';
+
+export default function useItems() {
+ const {
+ status,
+ data,
+ error,
+ isFetchingNextPage,
+ fetchNextPage,
+ hasNextPage,
+ } = useInfiniteQuery({
+ queryKey: ['items'],
+ queryFn: async (ctx) => {
+ const response = await pFetch('/inventory?cursor=number?', {
+ method: 'GET',
+ query: typeof ctx.pageParam === 'number' ? {
+ cursor: ctx.pageParam
+ } : {},
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ })
+ if (!response.ok) {
+ throw new Error('Network response was not ok');
+ }
+ return await response.json();
+ },
+ getNextPageParam: (lastGroup) => lastGroup.nextCursor,
+ initialPageParam: undefined as undefined | number,
+ staleTime: 30 * 1000,
+ gcTime: 5 * 60 * 1000,
+ });
+
+ return {
+ status,
+ data,
+ error,
+ isFetchingNextPage,
+ fetchNextPage,
+ hasNextPage,
+ };
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/hooks/useDebounce.ts b/examples/with-code-share/apps/client/src/hooks/useDebounce.ts
new file mode 100644
index 00000000..c1d57e58
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/hooks/useDebounce.ts
@@ -0,0 +1,15 @@
+import { useMemo } from 'react';
+
+import { debounce } from '../utils';
+
+/**
+ * This hook will return a function, this function will receive a callback. this callback will be executed when the timeout reaches 0.
+ *
+ * The idea is that for example, on an input, if the user does not stop typing for a certain amount of time, then the callback will not be executed.
+ * If the user stops typing for the timeout defined, then the callback will be executed. This is useful to avoid making to many requests to an API.
+ *
+ * @param timeout - The timeout in milliseconds
+ */
+export default function useDebounce(timeout = 300) {
+ return useMemo(() => debounce(timeout), [timeout]);
+}
diff --git a/examples/with-code-share/apps/client/src/hooks/useGetMockedDataLikeReactInfiniteQuery.ts b/examples/with-code-share/apps/client/src/hooks/useGetMockedDataLikeReactInfiniteQuery.ts
new file mode 100644
index 00000000..07ccd7d8
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/hooks/useGetMockedDataLikeReactInfiniteQuery.ts
@@ -0,0 +1,76 @@
+import type { InfiniteData } from '@tanstack/react-query';
+import { useEffect, useRef, useState } from 'react'
+
+export default function useGetMockedDataLikeReactInfiniteQuery(getData: (nextCursor?: null | undefined | number | string) => TData, totalNumberOfItems?: number) {
+ const [isFetchingNextPage, _setIsFetchingNextPage] = useState(false);
+ const isFetchingNextPageRef = useRef(isFetchingNextPage);
+ const setIsFetchingNextPage = (value: boolean) => {
+ isFetchingNextPageRef.current = value;
+ _setIsFetchingNextPage(value);
+ }
+ const [hasNextPage, setHasNextPage] = useState(true);
+ const [status, setStatus] = useState('pending');
+ const [calls, setCalls] = useState(0);
+ const [data, setData] = useState | undefined>({
+ pages: [],
+ pageParams: [],
+ })
+
+ async function getDataLikeFetch(nextCursor?: TData['nextCursor']) {
+ await new Promise((resolve) => setTimeout(resolve, 1000));
+ return getData(nextCursor);
+ }
+
+ function getInfiniteData(nextCursor?: TData['nextCursor']) {
+ if (typeof totalNumberOfItems === 'number' && calls >= totalNumberOfItems) {
+ setHasNextPage(false);
+ return
+ };
+ if (isFetchingNextPageRef.current) return;
+ setStatus('loading');
+ setIsFetchingNextPage(true);
+ getDataLikeFetch(nextCursor).then((data) => {
+ setData((prevData) => ({
+ pages: [
+ ...(prevData?.pages || []),
+ {
+ data: data.rows,
+ nextCursor: data.nextCursor,
+ },
+ ],
+ pageParams: [
+ ...(prevData?.pageParams || []),
+ data.nextCursor,
+ ],
+ }) as InfiniteData<{
+ data: TData['rows'],
+ nextCursor: TData['nextCursor']
+ }>);
+ setCalls((prev) => prev + 1);
+ setStatus('success');
+ setIsFetchingNextPage(false);
+ })
+ }
+
+ useEffect(() => {
+ getInfiniteData()
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [])
+
+ return {
+ data,
+ hasNextPage,
+ fetchNextPage: () => {
+ getInfiniteData(data?.pageParams[data?.pageParams.length - 1] as TData['nextCursor'])
+ },
+ isFetchingNextPage,
+ status: status,
+ };
+ }
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/hooks/useVirtualList.ts b/examples/with-code-share/apps/client/src/hooks/useVirtualList.ts
new file mode 100644
index 00000000..a49b5495
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/hooks/useVirtualList.ts
@@ -0,0 +1,60 @@
+import { InfiniteData } from "@tanstack/react-query";
+import { useVirtualizer } from "@tanstack/react-virtual";
+import { useEffect, useRef } from "react";
+
+export default function useVirtualList | undefined>(
+ args: {
+ data: TData;
+ fetchNextPage: () => void;
+ hasNextPage: boolean;
+ isFetchingNextPage: boolean;
+ estimatedSize: number;
+ overscan?: number;
+ }
+) {
+ const allRows = args.data ? args.data.pages.flatMap((page) => page.data) : []
+
+ const parentRef = useRef(null)
+
+ const rowVirtualizer = useVirtualizer({
+ count: args.hasNextPage ? allRows.length + 1 : allRows.length,
+ getScrollElement: () => parentRef.current,
+ estimateSize: () => args.estimatedSize,
+ overscan: args.overscan ?? 5,
+ });
+
+ useEffect(() => {
+ const [lastItem] = [...rowVirtualizer.getVirtualItems()].reverse()
+
+ if (!lastItem) {
+ return
+ }
+
+ if (
+ lastItem.index >= allRows.length - 1 &&
+ args.hasNextPage &&
+ !args.isFetchingNextPage
+ ) {
+ args.fetchNextPage()
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [
+ args.hasNextPage,
+ args.fetchNextPage,
+ allRows.length,
+ args.isFetchingNextPage,
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ rowVirtualizer.getVirtualItems(),
+ ]);
+
+ return {
+ parentRef,
+ rowVirtualizer,
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ allRows: allRows as TData extends InfiniteData<{ data: infer TData; nextCursor: any }> ? TData : [],
+ }
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/hooks/users/useUsers.ts b/examples/with-code-share/apps/client/src/hooks/users/useUsers.ts
new file mode 100644
index 00000000..8b396240
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/hooks/users/useUsers.ts
@@ -0,0 +1,56 @@
+import { useInfiniteQuery } from "@tanstack/react-query";
+import { pFetch } from "../../utils";
+import { useState } from "react";
+import useDebounce from "../useDebounce";
+
+export default function useUsers() {
+ const debounce = useDebounce(300);
+ const [search, setSearch] = useState('');
+
+ const {
+ status,
+ data,
+ error,
+ isFetchingNextPage,
+ fetchNextPage,
+ hasNextPage,
+ } = useInfiniteQuery({
+ queryKey: ['users', search],
+ queryFn: async (ctx) => {
+ const query = typeof ctx.pageParam === 'number' && search.length > 0 ? {
+ cursor: ctx.pageParam,
+ search: search
+ } : typeof ctx.pageParam === 'number' ? {
+ cursor: ctx.pageParam
+ } : search.length > 0 ? {
+ search: search
+ } : {};
+
+ const response = await pFetch('/users?cursor=number?&search=string?', {
+ method: 'GET',
+ query: query,
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ })
+ if (!response.ok) {
+ throw new Error('Network response was not ok');
+ }
+ return await response.json();
+ },
+ staleTime: 30 * 1000,
+ gcTime: 5 * 60 * 1000,
+ getNextPageParam: (lastGroup) => lastGroup.nextCursor,
+ initialPageParam: undefined as undefined | number,
+ });
+
+ return {
+ status,
+ data,
+ error,
+ isFetchingNextPage,
+ fetchNextPage,
+ hasNextPage,
+ onSearch: (search: string) => debounce(() => setSearch(search)),
+ };
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/index.css b/examples/with-code-share/apps/client/src/index.css
new file mode 100644
index 00000000..bd6213e1
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/index.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/main.tsx b/examples/with-code-share/apps/client/src/main.tsx
new file mode 100644
index 00000000..41a50b19
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/main.tsx
@@ -0,0 +1,13 @@
+import { StrictMode } from 'react'
+import { createRoot } from 'react-dom/client'
+import App from './App.tsx'
+import './index.css'
+import { setDefaultAdapter, ZodSchemaAdapter } from 'shared'
+
+setDefaultAdapter(new ZodSchemaAdapter());
+
+createRoot(document.getElementById('root')!).render(
+
+
+ ,
+)
diff --git a/examples/with-code-share/apps/client/src/utils.ts b/examples/with-code-share/apps/client/src/utils.ts
new file mode 100644
index 00000000..c5c9d58a
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/utils.ts
@@ -0,0 +1,66 @@
+import initializeClient from '@palmares/client'
+import { QueryClient } from '@tanstack/react-query'
+import type settings from '../../server/src/settings'
+
+export const pFetch = initializeClient('http://localhost:3001')
+
+export const queryClient = new QueryClient()
+
+export const formatErrors = (
+ errors: {
+ code: string,
+ message: string,
+ path: string[]
+ }[]
+) => {
+ return errors.reduce((acc, error) => {
+ const path = error.path.join('.') || error.code;
+ return { ...acc, [path]: error }
+ }, {});
+}
+
+export class MutationErrors extends Error {
+ errors: Parameters[0];
+
+ constructor(errors: Parameters[0]) {
+ super('Failed to update item');
+ this.name = 'MutationErrors';
+ this.errors = errors;
+ }
+}
+
+export function uuid() {
+ let date = new Date().getTime();
+ const browserOrNodePerformance = (globalThis).performance as typeof performance | undefined;
+ let performanceDate =
+ (browserOrNodePerformance && browserOrNodePerformance.now && browserOrNodePerformance.now() * 1000) || 0;
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (character) => {
+ let randomNumber = Math.random() * 16;
+ if (date > 0) {
+ randomNumber = (date + randomNumber) % 16 | 0;
+ date = Math.floor(date / 16);
+ } else {
+ randomNumber = (performanceDate + randomNumber) % 16 | 0;
+ performanceDate = Math.floor(performanceDate / 16);
+ }
+ return (character === 'x' ? randomNumber : (randomNumber & 0x3) | 0x8).toString(16);
+ });
+}
+
+/**
+ * This function adds the functionality of delaying a
+ * function execution based on a certain timeout.
+ *
+ * See, for reference: https://www.freecodecamp.org/news/javascript-debounce-example/
+ *
+ * @param functionToDelay - The function to be delayed
+ * @param timeout - The timeout in milliseconds
+ */
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+export function debounce any>(timeout = 300) {
+ let timer: NodeJS.Timeout | number;
+ return (functionToDelay: TFunctionToDelay) => {
+ clearTimeout(timer);
+ timer = setTimeout(functionToDelay, timeout);
+ };
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/client/src/vite-env.d.ts b/examples/with-code-share/apps/client/src/vite-env.d.ts
new file mode 100644
index 00000000..11f02fe2
--- /dev/null
+++ b/examples/with-code-share/apps/client/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/examples/with-code-share/apps/client/tailwind.config.js b/examples/with-code-share/apps/client/tailwind.config.js
new file mode 100644
index 00000000..8072be62
--- /dev/null
+++ b/examples/with-code-share/apps/client/tailwind.config.js
@@ -0,0 +1,31 @@
+/** @type {import('tailwindcss').Config} */
+export default {
+ content: [
+ "./index.html",
+ "./src/**/*.{js,ts,jsx,tsx,mdx}",
+ "./src/**/*.component.{js,ts,jsx,tsx,mdx}",
+ "./src/**/*.layout.{js,ts,jsx,tsx,mdx}",
+ "./src/**/*.stories.{js,ts,jsx,tsx,mdx}",
+ ],
+ theme: {
+ extend: {},
+ screens: {
+ "2xl": { max: "1535px" },
+ // => @media (max-width: 1535px) { ... }
+
+ xl: { max: "1279px" },
+ // => @media (max-width: 1279px) { ... }
+
+ lg: { max: "1023px" },
+ // => @media (max-width: 1023px) { ... }
+
+ md: { max: "767px" },
+ // => @media (max-width: 767px) { ... }
+
+ sm: { max: "639px" },
+ // => @media (max-width: 639px) { ... }
+ },
+ },
+ plugins: [],
+}
+
diff --git a/examples/with-code-share/apps/client/tsconfig.app.json b/examples/with-code-share/apps/client/tsconfig.app.json
new file mode 100644
index 00000000..f0a23505
--- /dev/null
+++ b/examples/with-code-share/apps/client/tsconfig.app.json
@@ -0,0 +1,24 @@
+{
+ "compilerOptions": {
+ "target": "ES2020",
+ "useDefineForClassFields": true,
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "isolatedModules": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+ "jsx": "react-jsx",
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["src"]
+}
diff --git a/examples/with-code-share/apps/client/tsconfig.json b/examples/with-code-share/apps/client/tsconfig.json
new file mode 100644
index 00000000..1ffef600
--- /dev/null
+++ b/examples/with-code-share/apps/client/tsconfig.json
@@ -0,0 +1,7 @@
+{
+ "files": [],
+ "references": [
+ { "path": "./tsconfig.app.json" },
+ { "path": "./tsconfig.node.json" }
+ ]
+}
diff --git a/examples/with-code-share/apps/client/tsconfig.node.json b/examples/with-code-share/apps/client/tsconfig.node.json
new file mode 100644
index 00000000..ca1fd30a
--- /dev/null
+++ b/examples/with-code-share/apps/client/tsconfig.node.json
@@ -0,0 +1,22 @@
+{
+ "compilerOptions": {
+ "target": "ES2022",
+ "lib": ["ES2015"],
+ "module": "ESNext",
+ "skipLibCheck": true,
+
+ /* Bundler mode */
+ "moduleResolution": "bundler",
+ "allowImportingTsExtensions": true,
+ "isolatedModules": true,
+ "moduleDetection": "force",
+ "noEmit": true,
+
+ /* Linting */
+ "strict": true,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/examples/with-code-share/apps/client/vite.config.ts b/examples/with-code-share/apps/client/vite.config.ts
new file mode 100644
index 00000000..5a33944a
--- /dev/null
+++ b/examples/with-code-share/apps/client/vite.config.ts
@@ -0,0 +1,7 @@
+import { defineConfig } from 'vite'
+import react from '@vitejs/plugin-react'
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [react()],
+})
diff --git a/examples/with-code-share/apps/server/.commonjs.swcrc b/examples/with-code-share/apps/server/.commonjs.swcrc
new file mode 100644
index 00000000..18e32066
--- /dev/null
+++ b/examples/with-code-share/apps/server/.commonjs.swcrc
@@ -0,0 +1,21 @@
+{
+ "$schema": "https://json.schemastore.org/swcrc",
+ "jsc": {
+ "parser": {
+ "syntax": "typescript",
+ "tsx": false,
+ "decorators": false,
+ "dynamicImport": true
+ },
+ "transform": null,
+ "target": "es5",
+ "loose": false,
+ "externalHelpers": false,
+ // Requires v1.2.50 or upper and requires target to be es2016 or upper.
+ "keepClassNames": false
+ },
+ "module": {
+ "type": "commonjs" // can be "es6", "umd", or "amd"
+ }
+ // any other options
+}
diff --git a/examples/with-code-share/apps/server/CHANGELOG.md b/examples/with-code-share/apps/server/CHANGELOG.md
new file mode 100644
index 00000000..79ff03ea
--- /dev/null
+++ b/examples/with-code-share/apps/server/CHANGELOG.md
@@ -0,0 +1,19 @@
+# server
+
+## 1.0.1
+
+### Patch Changes
+
+- Updated dependencies
+- Updated dependencies
+ - @palmares/console-logging@0.1.7
+ - @palmares/databases@0.1.16
+ - @palmares/server@0.1.13
+ - @palmares/core@0.1.13
+ - @palmares/drizzle-engine@0.1.17
+ - @palmares/express-adapter@0.1.14
+ - @palmares/node-std@0.1.13
+ - @palmares/zod-schema@0.1.22
+ - @palmares/logging@0.1.13
+ - @palmares/schemas@0.1.20
+ - shared@1.0.1
diff --git a/examples/with-code-share/apps/server/drizzle.config.ts b/examples/with-code-share/apps/server/drizzle.config.ts
new file mode 100644
index 00000000..e5c59def
--- /dev/null
+++ b/examples/with-code-share/apps/server/drizzle.config.ts
@@ -0,0 +1,11 @@
+import { defineConfig } from 'drizzle-kit';
+
+export default defineConfig({
+ schema: './drizzle/schema.ts',
+ out: './drizzle/migrations',
+ dialect: 'sqlite',
+ dbCredentials: {
+ databaseId: 'default',
+ url: 'sqlite.db',
+ },
+});
diff --git a/examples/with-code-share/apps/server/drizzle/migrations/0000_dazzling_chimera.sql b/examples/with-code-share/apps/server/drizzle/migrations/0000_dazzling_chimera.sql
new file mode 100644
index 00000000..2cb0c2b7
--- /dev/null
+++ b/examples/with-code-share/apps/server/drizzle/migrations/0000_dazzling_chimera.sql
@@ -0,0 +1,25 @@
+CREATE TABLE `inventory_item` (
+ `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
+ `uuid` text NOT NULL,
+ `manufacturer` text NOT NULL,
+ `serial` text(12) NOT NULL,
+ `status` text NOT NULL,
+ `purchaseDate` text NOT NULL,
+ `warrantyExpiryDate` text NOT NULL,
+ `specifications` text NOT NULL,
+ `imageUrl` text NOT NULL,
+ `assignmentDate` text,
+ `user_id` integer,
+ FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE no action
+);
+--> statement-breakpoint
+CREATE TABLE `user` (
+ `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
+ `firstName` text NOT NULL,
+ `lastName` text NOT NULL,
+ `email` text NOT NULL
+);
+--> statement-breakpoint
+CREATE UNIQUE INDEX `inventory_item_id_unique` ON `inventory_item` (`id`);--> statement-breakpoint
+CREATE UNIQUE INDEX `inventory_item_uuid_unique` ON `inventory_item` (`uuid`);--> statement-breakpoint
+CREATE UNIQUE INDEX `user_id_unique` ON `user` (`id`);
\ No newline at end of file
diff --git a/examples/with-code-share/apps/server/drizzle/migrations/meta/0000_snapshot.json b/examples/with-code-share/apps/server/drizzle/migrations/meta/0000_snapshot.json
new file mode 100644
index 00000000..f7a7db62
--- /dev/null
+++ b/examples/with-code-share/apps/server/drizzle/migrations/meta/0000_snapshot.json
@@ -0,0 +1,177 @@
+{
+ "version": "6",
+ "dialect": "sqlite",
+ "id": "ff77f112-42ba-423a-8c43-862dab764744",
+ "prevId": "00000000-0000-0000-0000-000000000000",
+ "tables": {
+ "inventory_item": {
+ "name": "inventory_item",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": true
+ },
+ "uuid": {
+ "name": "uuid",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "manufacturer": {
+ "name": "manufacturer",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "serial": {
+ "name": "serial",
+ "type": "text(12)",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "purchaseDate": {
+ "name": "purchaseDate",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "warrantyExpiryDate": {
+ "name": "warrantyExpiryDate",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "specifications": {
+ "name": "specifications",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "imageUrl": {
+ "name": "imageUrl",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "assignmentDate": {
+ "name": "assignmentDate",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "inventory_item_id_unique": {
+ "name": "inventory_item_id_unique",
+ "columns": [
+ "id"
+ ],
+ "isUnique": true
+ },
+ "inventory_item_uuid_unique": {
+ "name": "inventory_item_uuid_unique",
+ "columns": [
+ "uuid"
+ ],
+ "isUnique": true
+ }
+ },
+ "foreignKeys": {
+ "inventory_item_user_id_user_id_fk": {
+ "name": "inventory_item_user_id_user_id_fk",
+ "tableFrom": "inventory_item",
+ "tableTo": "user",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ },
+ "user": {
+ "name": "user",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "integer",
+ "primaryKey": true,
+ "notNull": true,
+ "autoincrement": true
+ },
+ "firstName": {
+ "name": "firstName",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "lastName": {
+ "name": "lastName",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true,
+ "autoincrement": false
+ }
+ },
+ "indexes": {
+ "user_id_unique": {
+ "name": "user_id_unique",
+ "columns": [
+ "id"
+ ],
+ "isUnique": true
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {}
+ }
+ },
+ "enums": {},
+ "_meta": {
+ "schemas": {},
+ "tables": {},
+ "columns": {}
+ },
+ "internal": {
+ "indexes": {}
+ }
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/server/drizzle/migrations/meta/_journal.json b/examples/with-code-share/apps/server/drizzle/migrations/meta/_journal.json
new file mode 100644
index 00000000..9c3ab6ee
--- /dev/null
+++ b/examples/with-code-share/apps/server/drizzle/migrations/meta/_journal.json
@@ -0,0 +1,13 @@
+{
+ "version": "7",
+ "dialect": "sqlite",
+ "entries": [
+ {
+ "idx": 0,
+ "version": "6",
+ "when": 1725579982764,
+ "tag": "0000_dazzling_chimera",
+ "breakpoints": true
+ }
+ ]
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/server/drizzle/schema.ts b/examples/with-code-share/apps/server/drizzle/schema.ts
new file mode 100644
index 00000000..30820680
--- /dev/null
+++ b/examples/with-code-share/apps/server/drizzle/schema.ts
@@ -0,0 +1,36 @@
+import * as d from 'drizzle-orm/sqlite-core';
+import * as pdb from 'shared';
+import * as drzl from 'drizzle-orm';
+
+export const InventoryItem = d.sqliteTable('inventory_item', {
+ id: d.integer('id', { mode: 'number' }).primaryKey({ autoIncrement: true }).notNull().unique(),
+ uuid: d.text('uuid').notNull().unique().$defaultFn(() => pdb.generateUUID()),
+ manufacturer: d.text('manufacturer', { enum: ["Apple", "Dell", "HP", "Lenovo"] }).notNull(),
+ serial: d.text('serial', { length: 12 }).notNull(),
+ status: d.text('status', { enum: ["use", "maintenance", "available"] }).notNull(),
+ purchaseDate: d.text('purchaseDate').notNull(),
+ warrantyExpiryDate: d.text('warrantyExpiryDate').notNull(),
+ specifications: d.text('specifications').notNull(),
+ imageUrl: d.text('imageUrl').notNull(),
+ assignmentDate: d.text('assignmentDate'),
+ userId: d.integer('user_id', { mode: 'number' }).references((): d.AnySQLiteColumn => User.id)
+});
+
+export const User = d.sqliteTable('user', {
+ id: d.integer('id', { mode: 'number' }).primaryKey({ autoIncrement: true }).notNull().unique(),
+ firstName: d.text('firstName').notNull(),
+ lastName: d.text('lastName').notNull(),
+ email: d.text('email').notNull()
+});
+
+export const InventoryItemRelations = drzl.relations(InventoryItem, (args) => ({
+ user: args.one(User, {
+ fields: [InventoryItem.userId],
+ references: [User.id]
+ })
+}));
+
+export const UserRelations = drzl.relations(User, (args) => ({
+ inventoriesOfUser: args.many(InventoryItem)
+}));
+
diff --git a/examples/with-code-share/apps/server/manage.tests.ts b/examples/with-code-share/apps/server/manage.tests.ts
new file mode 100644
index 00000000..bc476249
--- /dev/null
+++ b/examples/with-code-share/apps/server/manage.tests.ts
@@ -0,0 +1,6 @@
+import { Commands } from 'shared';
+import { setDb } from './src/core/utils';
+
+setDb('testDb.db');
+
+Commands.handleCommands(import('./src/settings.tests'), process.argv.slice(2));
diff --git a/examples/with-code-share/apps/server/manage.ts b/examples/with-code-share/apps/server/manage.ts
new file mode 100644
index 00000000..f688c6bc
--- /dev/null
+++ b/examples/with-code-share/apps/server/manage.ts
@@ -0,0 +1,5 @@
+import { Commands } from '@palmares/core';
+
+import settings from './src/settings';
+
+Commands.handleCommands(settings, process.argv.slice(2));
diff --git a/examples/with-code-share/apps/server/package.json b/examples/with-code-share/apps/server/package.json
new file mode 100644
index 00000000..bf126af3
--- /dev/null
+++ b/examples/with-code-share/apps/server/package.json
@@ -0,0 +1,76 @@
+{
+ "name": "@examples/with-code-share-server",
+ "version": "1.0.1",
+ "description": "",
+ "main": "./dist/manage.js",
+ "private": true,
+ "scripts": {
+ "help": "tsx manage.ts help",
+ "dev": "tsx watch --clear-screen=false manage.ts runserver",
+ "test": "tsx test.ts",
+ "load": "tsx manage.tests.ts load-models",
+ "makemigrations": "drizzle-kit generate",
+ "migrate": "tsx manage.ts drizzleMigrate",
+ "seed": "tsx manage.ts seedDb",
+ "clear": "rimraf ./dist",
+ "build:drizzle": "swc drizzle -d dist/drizzle --copy-files --config-file .commonjs.swcrc --ignore node_modules dist",
+ "build:src": "swc . -d ./dist --config-file .commonjs.swcrc --ignore node_modules dist && rimraf ./dist/dist",
+ "build:app": "pnpm run clear && tsup --format esm",
+ "start": "node ./dist/manage.js runserver"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "packageManager": "pnpm@9.9.0",
+ "dependencies": {
+ "@palmares/console-logging": "workspace:*",
+ "@palmares/core": "workspace:*",
+ "@palmares/databases": "workspace:*",
+ "@palmares/schemas": "workspace:*",
+ "@palmares/zod-schema": "workspace:*",
+ "@palmares/drizzle-engine": "workspace:*",
+ "@palmares/express-adapter": "workspace:*",
+ "@palmares/logging": "workspace:*",
+ "@palmares/node-std": "workspace:*",
+ "@palmares/server": "workspace:*",
+ "better-sqlite3": "^11.2.1",
+ "cors": "^2.8.5",
+ "drizzle-kit": "^0.24.2",
+ "drizzle-orm": "^0.32.2",
+ "@examples/with-code-share-shared": "workspace:*"
+ },
+ "devDependencies": {
+ "@palmares/jest-tests": "^0.1.13",
+ "@palmares/tests": "^0.1.13",
+ "@swc/cli": "^0.4.0",
+ "@swc/core": "^1.7.23",
+ "@types/better-sqlite3": "^7.6.11",
+ "@types/cors": "^2.8.17",
+ "@types/node": "^22.5.4",
+ "jest": "^29.7.0",
+ "rimraf": "^6.0.1",
+ "ts-jest": "^29.2.5",
+ "tsup": "^8.2.4",
+ "tsx": "^4.19.0",
+ "typescript": "^5.5.4"
+ },
+ "peerDependencies": {
+ "jest": "^29.7.0"
+ },
+ "type": "module",
+ "tsup": {
+ "entry": [
+ "manage.ts",
+ "drizzle",
+ "src/**/*.ts",
+ "!src/**/*.test.*",
+ "!src/**/*.tests.*"
+ ],
+ "loader": {
+ ".sql": "file"
+ },
+ "splitting": false,
+ "sourcemap": true,
+ "clean": true
+ }
+}
diff --git a/examples/with-code-share/apps/server/sqlite.db b/examples/with-code-share/apps/server/sqlite.db
new file mode 100644
index 00000000..dfffb7b2
Binary files /dev/null and b/examples/with-code-share/apps/server/sqlite.db differ
diff --git a/examples/with-code-share/apps/server/src/auth/auth.test.ts b/examples/with-code-share/apps/server/src/auth/auth.test.ts
new file mode 100644
index 00000000..f6d0a4e9
--- /dev/null
+++ b/examples/with-code-share/apps/server/src/auth/auth.test.ts
@@ -0,0 +1,25 @@
+import { describe } from '@palmares/tests';
+import { ModelFields } from 'shared';
+import { User } from '../auth/models';
+import { getUsersByCursorAndSearch } from './services';
+
+
+export const authTests = (getUsers: () => ModelFields>[]) => {
+ describe('auth testing', ({ test }) => {
+ test('should fetch users and return next cursor and be able to search', async ({ expect }) => {
+ const users = getUsers();
+ const { data, nextCursor } = await getUsersByCursorAndSearch(users[27].id);
+ expect(data.length).toBe(27);
+ expect(nextCursor).toBe(users[0].id);
+
+ const lastItem = (await User.default.get({ limit: 1, ordering: ['id'] }))[0];
+ const { data: data2, nextCursor: nextCursor2 } = await getUsersByCursorAndSearch(lastItem.id);
+ expect(data2.length).toBe(0);
+ expect(nextCursor2).toBe(null);
+
+ const { data: data3 } = await getUsersByCursorAndSearch(undefined, users[25].firstName);
+ expect(data3.find((user) => user.id === users[25].id)?.id).toBe(users[25].id);
+ });
+
+ })
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/server/src/auth/controllers.ts b/examples/with-code-share/apps/server/src/auth/controllers.ts
new file mode 100644
index 00000000..af727db6
--- /dev/null
+++ b/examples/with-code-share/apps/server/src/auth/controllers.ts
@@ -0,0 +1,17 @@
+import { path, pathNested, Response } from "@palmares/server";
+
+import { getUsersByCursorAndSearch } from "./services";
+
+import type { usersPath } from "./routes";
+
+export const getUsersController = pathNested()()
+ .get(async (request) => {
+ const { data, nextCursor } = await getUsersByCursorAndSearch(
+ request.query.cursor as number | undefined,
+ request.query.search as string | undefined
+ );
+ return Response.json({
+ data,
+ nextCursor
+ });
+ })
\ No newline at end of file
diff --git a/examples/with-code-share/apps/server/src/auth/index.ts b/examples/with-code-share/apps/server/src/auth/index.ts
new file mode 100644
index 00000000..d403b667
--- /dev/null
+++ b/examples/with-code-share/apps/server/src/auth/index.ts
@@ -0,0 +1,13 @@
+import { domain } from '@palmares/core';
+import { databaseDomainModifier } from '@palmares/databases';
+import { serverDomainModifier } from '@palmares/server';
+
+import * as models from './models';
+import route from './routes';
+
+export default domain('auth', import.meta.dirname, {
+ modifiers: [databaseDomainModifier, serverDomainModifier] as const,
+ getModels: async () => models,
+ getMigrations: async () => [],
+ getRoutes: () => route
+});
diff --git a/examples/with-code-share/apps/server/src/auth/models.ts b/examples/with-code-share/apps/server/src/auth/models.ts
new file mode 100644
index 00000000..47ec1f0c
--- /dev/null
+++ b/examples/with-code-share/apps/server/src/auth/models.ts
@@ -0,0 +1,13 @@
+import { define } from '@palmares/databases';
+import { AbstractUser } from 'shared';
+
+import { User as DUser } from '../../drizzle/schema';
+
+export const User = define('User', {
+ fields: {},
+ abstracts: [AbstractUser],
+ options: {
+ tableName: 'user',
+ instance: DUser
+ }
+});
diff --git a/examples/with-code-share/apps/server/src/auth/routes.ts b/examples/with-code-share/apps/server/src/auth/routes.ts
new file mode 100644
index 00000000..ddf33876
--- /dev/null
+++ b/examples/with-code-share/apps/server/src/auth/routes.ts
@@ -0,0 +1,11 @@
+import { path } from "@palmares/server";
+
+import { getUsersController } from "./controllers";
+
+export const usersPath = path('/users?cursor=number?&search=string?')
+
+export const routes = usersPath.nested([
+ getUsersController
+])
+
+export default routes;
\ No newline at end of file
diff --git a/examples/with-code-share/apps/server/src/auth/services.ts b/examples/with-code-share/apps/server/src/auth/services.ts
new file mode 100644
index 00000000..2751d031
--- /dev/null
+++ b/examples/with-code-share/apps/server/src/auth/services.ts
@@ -0,0 +1,29 @@
+import { and, desc, like, lt } from "drizzle-orm";
+
+import { arrayUserSchema } from "shared";
+
+import { User as DUser } from '../../drizzle/schema';
+import { db } from "../settings";
+
+
+export async function getUsersByCursorAndSearch(cursor?: number, search?: string) {
+ const queryForCursor = lt(DUser.id, cursor as number);
+ const splittedSearch = (search || '')?.split(' ');
+
+ const queryForSearch = splittedSearch.length > 1 ?
+ and(like(DUser.firstName, `%${splittedSearch[0]}%`), like(DUser.lastName, `%${splittedSearch.slice(1).join(' ')}%`))
+ : like(DUser.firstName, `%${search}%`);
+ const searchQuery = typeof cursor === 'number' && search ? and(queryForCursor, queryForSearch)
+ : typeof cursor === 'number' ? queryForCursor
+ : search ? queryForSearch
+ : undefined;
+
+ const users = await db.select().from(DUser).where(searchQuery).limit(30).orderBy(desc(DUser.id));
+ const data = await arrayUserSchema.data(users);
+ const nextCursor = users.length > 0 ? users[users.length - 1].id : null;
+
+ return {
+ data,
+ nextCursor
+ };
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/server/src/core/core.test.ts b/examples/with-code-share/apps/server/src/core/core.test.ts
new file mode 100644
index 00000000..21db31c6
--- /dev/null
+++ b/examples/with-code-share/apps/server/src/core/core.test.ts
@@ -0,0 +1,44 @@
+import { describe, beforeAll } from '@palmares/tests';
+import { mockInventory, mockUsers, ModelFields } from 'shared';
+import { User } from '../auth/models';
+import { InventoryItem } from '../inventory/models';
+import { inventoryTest } from '../inventory/inventory.test';
+import { authTests } from '../auth/auth.test';
+
+describe('start tests', ({ test }) => {
+ let users: ModelFields>[] = [];
+ let inventories: ModelFields>[] = [];
+
+ beforeAll(async () => {
+ await InventoryItem.default.remove({});
+ await User.default.remove({});
+ users = await Promise.all(mockUsers(30).rows.map(async (user) => (await User.default.set({
+ id: user.id,
+ email: user.email,
+ firstName: user.firstName,
+ lastName: user.lastName,
+ }))[0]));
+ inventories = await Promise.all(mockInventory(30, { users: users }).rows.map(async (item) => (await InventoryItem.default.set({
+ id: item.id,
+ uuid: item.uuid,
+ manufacturer: item.manufacturer,
+ serial: item.serial,
+ status: item.status,
+ purchaseDate: item.purchaseDate,
+ warrantyExpiryDate: item.warrantyExpiryDate,
+ assignmentDate: item.assignmentDate,
+ specifications: item.specifications,
+ imageUrl: item.imageUrl,
+ userId: item.userId,
+ }))[0]));
+ });
+
+ authTests(() => users);
+ inventoryTest(() => users, () => inventories);
+
+ afterAll(async () => {
+ await InventoryItem.default.remove({});
+ await User.default.remove({});
+ });
+})
+
diff --git a/examples/with-code-share/apps/server/src/core/index.ts b/examples/with-code-share/apps/server/src/core/index.ts
new file mode 100644
index 00000000..ef2e09de
--- /dev/null
+++ b/examples/with-code-share/apps/server/src/core/index.ts
@@ -0,0 +1,67 @@
+import { domain } from '@palmares/core';
+import { testDomainModifier } from '@palmares/tests';
+import { migrate } from 'drizzle-orm/better-sqlite3/migrator';
+import { mockInventory, mockUsers } from 'shared';
+
+import { User } from '../auth/models';
+import { InventoryItem } from '../inventory/models';
+import { db } from '../settings';
+
+export default domain('core', import.meta.dirname, {
+ modifiers: [testDomainModifier] as const,
+ commands: {
+ drizzleMigrate: {
+ description: 'Migrate the database using drizzle',
+ keywordArgs: undefined,
+ positionalArgs: undefined,
+ handler: () => {
+ migrate(db as any, { migrationsFolder: './drizzle/migrations' });
+ }
+ },
+ seedDb: {
+ description:
+ 'Seed the database with fake data. (Make sure to run `drizzleMigrate`, first.' +
+ ' This will also clear the database)',
+ keywordArgs: {
+ count: {
+ description: 'The number of items to seed the database with',
+ type: 'number',
+ default: 1000,
+ canBeMultiple: false,
+ hasFlag: false
+ }
+ },
+ positionalArgs: undefined,
+ handler: async (args) => {
+ const keywordArgs = args.commandLineArgs.keywordArgs;
+ const numberOfItemsToSeed = keywordArgs.count ? keywordArgs.count : 1000;
+ console.log('Seeding database with', numberOfItemsToSeed, 'items');
+ await InventoryItem.default.remove({});
+ await User.default.remove({});
+
+ const users = await Promise.all(
+ mockUsers(numberOfItemsToSeed).rows.map(async (user) => (await User.default.set(user))[0])
+ );
+ await Promise.all(
+ mockInventory(numberOfItemsToSeed, { users: users }).rows.map((item) =>
+ InventoryItem.default.set({
+ id: item.id,
+ uuid: item.uuid,
+ manufacturer: item.manufacturer,
+ serial: item.serial,
+ status: item.status,
+ purchaseDate: item.purchaseDate,
+ warrantyExpiryDate: item.warrantyExpiryDate,
+ assignmentDate: item.assignmentDate,
+ specifications: item.specifications,
+ imageUrl: item.imageUrl,
+ userId: item.userId
+ })
+ )
+ );
+ console.log('Database seeded');
+ }
+ }
+ },
+ getTests: () => [__dirname + '/core.test.ts']
+});
diff --git a/examples/with-code-share/apps/server/src/core/utils.ts b/examples/with-code-share/apps/server/src/core/utils.ts
new file mode 100644
index 00000000..10fc4451
--- /dev/null
+++ b/examples/with-code-share/apps/server/src/core/utils.ts
@@ -0,0 +1,4 @@
+let db = 'sqlite.db';
+
+export const setDb = (newDb: string) => db = newDb;
+export const getDb = () => db;
\ No newline at end of file
diff --git a/examples/with-code-share/apps/server/src/inventory/controllers.ts b/examples/with-code-share/apps/server/src/inventory/controllers.ts
new file mode 100644
index 00000000..d38c6705
--- /dev/null
+++ b/examples/with-code-share/apps/server/src/inventory/controllers.ts
@@ -0,0 +1,25 @@
+import { schemaHandler } from '@palmares/schemas';
+import { Response, pathNested } from '@palmares/server';
+
+import { InventoryItem } from './models';
+import { serverInventorySchema } from './schemas';
+import { getItemByCursor } from './services';
+
+import type { editInventoryPath, inventoryPath } from './routes';
+
+export const inventoryController = pathNested()('?cursor=number?')
+ .post(schemaHandler(serverInventorySchema))
+ .get(async (request) => {
+ const { data, nextCursor } = await getItemByCursor(request.query.cursor as number | undefined);
+ return Response.json({
+ data,
+ nextCursor
+ });
+ });
+
+export const editInventoryController = pathNested()()
+ .put(schemaHandler(serverInventorySchema))
+ .delete(async (request) => {
+ await InventoryItem.default.remove({ search: { uuid: request.params.uuid } });
+ return Response.json({ message: 'deleted' });
+ });
diff --git a/examples/with-code-share/apps/server/src/inventory/index.ts b/examples/with-code-share/apps/server/src/inventory/index.ts
new file mode 100644
index 00000000..bbc1204a
--- /dev/null
+++ b/examples/with-code-share/apps/server/src/inventory/index.ts
@@ -0,0 +1,13 @@
+import { domain } from '@palmares/core';
+import { databaseDomainModifier } from '@palmares/databases';
+import { serverDomainModifier } from '@palmares/server';
+
+import * as models from './models';
+import route from './routes';
+
+export default domain('inventory', import.meta.dirname, {
+ modifiers: [databaseDomainModifier, serverDomainModifier] as const,
+ getModels: async () => models as any,
+ getMigrations: async () => [],
+ getRoutes: () => route
+});
diff --git a/examples/with-code-share/apps/server/src/inventory/inventory.test.ts b/examples/with-code-share/apps/server/src/inventory/inventory.test.ts
new file mode 100644
index 00000000..35e38bc8
--- /dev/null
+++ b/examples/with-code-share/apps/server/src/inventory/inventory.test.ts
@@ -0,0 +1,64 @@
+import { describe } from '@palmares/tests';
+import { inventorySchema, ModelFields } from 'shared';
+import { User } from '../auth/models';
+import { InventoryItem } from './models';
+import { getItemByCursor } from './services';
+import { randomUUID } from 'crypto';
+
+export const inventoryTest = (
+ getUsers: () => ModelFields>[],
+ getInventories: () => ModelFields>[]
+) => {
+ describe('inventory testing', ({ test }) => {
+ test('should fetch inventory and return next cursor', async ({ expect }) => {
+ const inventories = getInventories();
+ const { data, nextCursor } = await getItemByCursor(inventories[25].id);
+ expect(data.length).toBe(20);
+ expect(nextCursor).toBe(inventories[5].id);
+
+ const lastItem = (await InventoryItem.default.get({ limit: 1, ordering: ['id'] }))[0];
+ const { data: data2, nextCursor: nextCursor2 } = await getItemByCursor(lastItem.id);
+ expect(data2.length).toBe(0);
+ expect(nextCursor2).toBe(null);
+ });
+
+ test('should prevent data from saving if id already exists', async ({ expect }) => {
+ const inventories = getInventories();
+
+ const copiedData = JSON.parse(JSON.stringify(inventories[0]));
+ copiedData.id = 9999;
+ copiedData.uuid = randomUUID();
+ const validData = await inventorySchema.validate(copiedData, {});
+
+ expect(validData.isValid).toBe(false);
+ expect(validData.isValid === false ? validData.errors[0].message : '').toBe('Serial already exists');
+ });
+
+ test('should prevent bad inventory data', async ({ expect }) => {
+ const inventories = getInventories();
+
+ const copiedData = JSON.parse(JSON.stringify(inventories[22]));
+
+ copiedData.serial = 'abc';
+ const validData = await inventorySchema.validate(copiedData, {});
+
+ expect(validData.isValid).toBe(false);
+ expect((validData.isValid === false ? validData.errors[0].message : '').includes(`Serial number is not valid`)).toBe(true);
+ });
+
+ test('should set assignment to null in case of different status than `use`', async ({ expect }) => {
+ const inventories = getInventories();
+ const users = getUsers();
+
+ const copiedData = JSON.parse(JSON.stringify(inventories[23]));
+
+ copiedData.status = 'available';
+ copiedData.assignmentDate = new Date().toISOString();
+ copiedData.userId = users[25].id;
+ const { parsed } = await inventorySchema.parse(copiedData);
+
+ expect(parsed.userId).toBe(null);
+ expect(parsed.assignmentDate).toBe(null);
+ });
+ });
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/server/src/inventory/models.ts b/examples/with-code-share/apps/server/src/inventory/models.ts
new file mode 100644
index 00000000..ab1b92f6
--- /dev/null
+++ b/examples/with-code-share/apps/server/src/inventory/models.ts
@@ -0,0 +1,23 @@
+import { define, fields, foreignKey } from '@palmares/databases';
+import { AbstractInventoryItem } from 'shared';
+
+import { InventoryItem as DInventoryItem } from '../../drizzle/schema';
+import { User } from '../auth/models';
+
+export const InventoryItem = define('InventoryItem', {
+ fields: {
+ userId: foreignKey({
+ allowNull: true,
+ relatedTo: User,
+ relatedName: 'inventoriesOfUser',
+ relationName: 'user',
+ toField: 'id',
+ onDelete: fields.ON_DELETE.CASCADE
+ })
+ },
+ abstracts: [AbstractInventoryItem],
+ options: {
+ tableName: 'inventory_item',
+ instance: DInventoryItem
+ }
+});
diff --git a/examples/with-code-share/apps/server/src/inventory/routes.ts b/examples/with-code-share/apps/server/src/inventory/routes.ts
new file mode 100644
index 00000000..2f4e2922
--- /dev/null
+++ b/examples/with-code-share/apps/server/src/inventory/routes.ts
@@ -0,0 +1,12 @@
+import { path, pathNested } from "@palmares/server";
+import { editInventoryController, inventoryController } from "./controllers";
+
+export const inventoryPath = path('/inventory');
+export const editInventoryPath = pathNested()('/');
+
+const route = inventoryPath.nested([
+ inventoryController,
+ editInventoryPath.nested([editInventoryController])
+]);
+
+export default route;
diff --git a/examples/with-code-share/apps/server/src/inventory/schemas.ts b/examples/with-code-share/apps/server/src/inventory/schemas.ts
new file mode 100644
index 00000000..cd2fb2cc
--- /dev/null
+++ b/examples/with-code-share/apps/server/src/inventory/schemas.ts
@@ -0,0 +1,52 @@
+import { getInventorySchemaWithSave } from "shared";
+import { db } from "../settings";
+import { InventoryItem } from "../../drizzle/schema";
+import { and, eq, not } from "drizzle-orm/sql";
+import { sql } from "drizzle-orm/sql";
+
+export const serverInventorySchema = getInventorySchemaWithSave(async (item) => {
+ const existsWithUuid = await db.select({
+ count: sql`count(*)`
+ }).from(InventoryItem).where(eq(InventoryItem.uuid, item.uuid));
+
+ if (existsWithUuid[0].count > 0) {
+ const data = (await db.update(InventoryItem).set({
+ manufacturer: item.manufacturer,
+ serial: item.serial,
+ status: item.status,
+ purchaseDate: item.purchaseDate instanceof Date ? item.purchaseDate.toISOString() : item.purchaseDate,
+ warrantyExpiryDate: item.warrantyExpiryDate instanceof Date ? item.warrantyExpiryDate.toISOString() : item.warrantyExpiryDate,
+ specifications: item.specifications,
+ imageUrl: item.imageUrl,
+ assignmentDate: item.assignmentDate instanceof Date ? item.assignmentDate.toISOString() : item.assignmentDate,
+ userId: item.userId
+ }).where(eq(InventoryItem.uuid, item.uuid)).returning())[0];
+ return data;
+ } else {
+ return (await db.insert(InventoryItem).values({
+ uuid: item.uuid,
+ manufacturer: item.manufacturer,
+ serial: item.serial,
+ status: item.status,
+ purchaseDate: item.purchaseDate instanceof Date ? item.purchaseDate.toISOString() : item.purchaseDate,
+ warrantyExpiryDate: item.warrantyExpiryDate instanceof Date ? item.warrantyExpiryDate.toISOString() : item.warrantyExpiryDate,
+ specifications: item.specifications,
+ imageUrl: item.imageUrl,
+ assignmentDate: item.assignmentDate instanceof Date ? item.assignmentDate.toISOString() : item.assignmentDate,
+ userId: item.userId
+ }).returning())[0];
+ }
+}).refine(async (item) => {
+ if (item) {
+ const existsWithSerial = await db.select({
+ count: sql`count(*)`
+ }).from(InventoryItem).where(
+ and(
+ eq(InventoryItem.serial, item.serial),
+ not(eq(InventoryItem.uuid, item.uuid))
+ )
+ );
+
+ if (existsWithSerial[0].count > 0) return { code: 'serial', message: 'Serial already exists' };
+ }
+});
\ No newline at end of file
diff --git a/examples/with-code-share/apps/server/src/inventory/services.ts b/examples/with-code-share/apps/server/src/inventory/services.ts
new file mode 100644
index 00000000..13b617a4
--- /dev/null
+++ b/examples/with-code-share/apps/server/src/inventory/services.ts
@@ -0,0 +1,26 @@
+import { arrayInventorySchema } from "shared";
+import { User } from "../auth/models";
+import { InventoryItem } from "./models";
+
+export async function getItemByCursor(cursor?: number | null) {
+ const items = await InventoryItem.default.get({
+ limit: 20,
+ search: typeof cursor === 'number' ? {
+ id: {
+ lessThan: cursor as number
+ }
+ } : undefined,
+ ordering: ['-id'],
+ includes: [{
+ model: User,
+ fields: ['email', 'firstName', 'lastName']
+ }]
+ });
+ const data = await arrayInventorySchema.data(items);
+ const nextCursor = items.length > 0 ? items[items.length - 1].id : null;
+
+ return {
+ data,
+ nextCursor,
+ };
+}
\ No newline at end of file
diff --git a/examples/with-code-share/apps/server/src/settings.tests.ts b/examples/with-code-share/apps/server/src/settings.tests.ts
new file mode 100644
index 00000000..557e5264
--- /dev/null
+++ b/examples/with-code-share/apps/server/src/settings.tests.ts
@@ -0,0 +1,15 @@
+import { dirname, resolve } from 'node:path';
+import settings from './settings';
+import JestTestAdapter from '@palmares/jest-tests';
+import TestsDomain from '@palmares/tests';
+
+settings.basePath = dirname(resolve(__dirname));
+settings.settingsLocation = __filename;
+(settings.installedDomains as unknown as any[]).push([
+ TestsDomain,
+ {
+ testAdapter: JestTestAdapter,
+ }
+]);
+
+export default settings;
\ No newline at end of file
diff --git a/examples/with-code-share/apps/server/src/settings.ts b/examples/with-code-share/apps/server/src/settings.ts
new file mode 100644
index 00000000..28d1fb35
--- /dev/null
+++ b/examples/with-code-share/apps/server/src/settings.ts
@@ -0,0 +1,101 @@
+import { ConsoleLogging } from '@palmares/console-logging';
+import { CoreDomain, Domain, defineSettings } from '@palmares/core';
+import { DatabasesDomain } from '@palmares/databases';
+import { DrizzleDatabaseAdapter } from '@palmares/drizzle-engine';
+import { drizzle as drizzleBetterSqlite3 } from '@palmares/drizzle-engine/better-sqlite3';
+import { ExpressServerAdapter } from '@palmares/express-adapter';
+import { loggingDomain as LoggingDomain } from '@palmares/logging';
+import { NodeStd } from '@palmares/node-std';
+import { SchemaDomain } from '@palmares/schemas';
+import { Response, ServerDomain } from '@palmares/server';
+import { ZodSchemaAdapter } from '@palmares/zod-schema';
+import Database from 'better-sqlite3';
+import cors from 'cors';
+import { dirname, resolve } from 'path';
+
+import authDomain from './auth';
+import coreDomain from './core';
+import { getDb } from './core/utils';
+import inventoryDomain from './inventory';
+import * as schema from '../drizzle/schema';
+
+const dbToUse = getDb();
+const database = new Database(dbToUse);
+
+export const databaseEngine = DrizzleDatabaseAdapter.new({
+ output: './drizzle/schema.ts',
+ type: 'better-sqlite3',
+ drizzle: drizzleBetterSqlite3(database, { schema: schema })
+});
+
+export const db = databaseEngine[1].instance.instance;
+
+export default defineSettings({
+ basePath: dirname(resolve(import.meta.dirname)),
+ settingsLocation: import.meta.filename,
+ std: NodeStd,
+ installedDomains: [
+ coreDomain,
+ inventoryDomain,
+ authDomain,
+ [
+ LoggingDomain,
+ {
+ logger: ConsoleLogging
+ }
+ ],
+ [
+ CoreDomain,
+ {
+ appName: 'server'
+ }
+ ],
+ // Domain Core, required for palmares to work
+ [
+ ServerDomain,
+ {
+ servers: {
+ default: {
+ server: ExpressServerAdapter,
+ customServerSettings: ExpressServerAdapter.customServerSettings({
+ middlewares: [cors()]
+ }),
+ debug: true,
+ port: 3001,
+ validation: {
+ handler: () => {
+ return Response.json({ message: 'query params or url params invalid' });
+ }
+ },
+ handler404: () =>
+ Response.json({
+ status: 404,
+ body: {
+ message: 'Not found'
+ }
+ }),
+ handler500: async (response: any) => {
+ return response;
+ }
+ }
+ }
+ }
+ ],
+ [
+ SchemaDomain,
+ {
+ schemaAdapter: ZodSchemaAdapter
+ }
+ ],
+ [
+ DatabasesDomain,
+ {
+ databases: {
+ default: {
+ engine: databaseEngine
+ }
+ }
+ }
+ ]
+ ]
+});
diff --git a/examples/with-code-share/apps/server/testDb.db b/examples/with-code-share/apps/server/testDb.db
new file mode 100644
index 00000000..3cc647d5
Binary files /dev/null and b/examples/with-code-share/apps/server/testDb.db differ
diff --git a/examples/with-code-share/apps/server/tsconfig.json b/examples/with-code-share/apps/server/tsconfig.json
new file mode 100644
index 00000000..64b829fb
--- /dev/null
+++ b/examples/with-code-share/apps/server/tsconfig.json
@@ -0,0 +1,110 @@
+{
+ "compilerOptions": {
+ /* Visit https://aka.ms/tsconfig to read more about this file */
+
+ /* Projects */
+ // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
+ // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
+ // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
+ // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
+ // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
+ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
+
+ /* Language and Environment */
+ "types": ["node"],
+ "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
+ // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
+ // "jsx": "preserve", /* Specify what JSX code is generated. */
+ // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
+ // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
+ // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
+ // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
+ // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
+ // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
+ // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
+ // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
+ // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
+
+ /* Modules */
+ "module": "ESNext",
+ // "rootDir": "./", /* Specify the root folder within your source files. */
+ "moduleResolution": "Bundler", /* Specify how TypeScript looks up a file from a given module specifier. */
+ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
+ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
+ // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
+ // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
+ // "types": [], /* Specify type package names to be included without being referenced in a source file. */
+ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
+ // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
+ // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
+ // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
+ // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
+ // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
+ // "resolveJsonModule": true, /* Enable importing .json files. */
+ // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
+ // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */
+
+ /* JavaScript Support */
+ // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
+ // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
+ // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
+
+ /* Emit */
+ // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
+ // "declarationMap": true, /* Create sourcemaps for d.ts files. */
+ // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
+ // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
+ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
+ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
+ // "outDir": "./", /* Specify an output folder for all emitted files. */
+ // "removeComments": true, /* Disable emitting comments. */
+ // "noEmit": true, /* Disable emitting files from a compilation. */
+ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
+ // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
+ // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
+ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
+ // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
+ // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
+ // "newLine": "crlf", /* Set the newline character for emitting files. */
+ // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
+ // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
+ // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
+ // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
+ // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
+
+ /* Interop Constraints */
+ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
+ // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
+ // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */
+ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
+ "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
+ // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
+ "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
+
+ /* Type Checking */
+ "strict": true, /* Enable all strict type-checking options. */
+ // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
+ // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
+ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
+ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
+ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
+ // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
+ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
+ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
+ // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
+ // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
+ // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
+ // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
+ // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
+ // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
+ // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
+ // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
+ // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
+ // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
+
+ /* Completeness */
+ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
+ "skipLibCheck": true /* Skip type checking all .d.ts files. */
+ },
+ "include": ["src/**/*", "manage.ts"]
+}
diff --git a/examples/with-code-share/assets/user-interface.png b/examples/with-code-share/assets/user-interface.png
new file mode 100644
index 00000000..0c03783b
Binary files /dev/null and b/examples/with-code-share/assets/user-interface.png differ
diff --git a/examples/with-code-share/package.json b/examples/with-code-share/package.json
new file mode 100644
index 00000000..29b377b2
--- /dev/null
+++ b/examples/with-code-share/package.json
@@ -0,0 +1,18 @@
+{
+ "name": "@examples/with-code-share",
+ "version": "1.0.0",
+ "private": true,
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "dev": "turbo run dev",
+ "server:help": "turbo run help",
+ "seed": "turbo run seed",
+ "storybook": "turbo run storybook",
+ "test": "turbo run test"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "packageManager": "pnpm@9.9.0"
+}
diff --git a/examples/with-code-share/shared/CHANGELOG.md b/examples/with-code-share/shared/CHANGELOG.md
new file mode 100644
index 00000000..0e781b0d
--- /dev/null
+++ b/examples/with-code-share/shared/CHANGELOG.md
@@ -0,0 +1,12 @@
+# shared
+
+## 1.0.1
+
+### Patch Changes
+
+- Updated dependencies
+- Updated dependencies
+ - @palmares/databases@0.1.16
+ - @palmares/core@0.1.13
+ - @palmares/zod-schema@0.1.22
+ - @palmares/schemas@0.1.20
diff --git a/examples/with-code-share/shared/package.json b/examples/with-code-share/shared/package.json
new file mode 100644
index 00000000..06e65893
--- /dev/null
+++ b/examples/with-code-share/shared/package.json
@@ -0,0 +1,50 @@
+{
+ "name": "@examples/with-code-share-shared",
+ "version": "1.0.1",
+ "description": "",
+ "private": true,
+ "types": "./src/index.ts",
+ "module": "./dist/index.js",
+ "main": "./dist/index.cjs",
+ "exports": {
+ ".": {
+ "types": "./src/index.ts",
+ "import": "./dist/index.js",
+ "require": "./dist/index.cjs"
+ }
+ },
+ "scripts": {
+ "dev": "tsup --format esm,cjs --watch",
+ "dev:shared": "tsup --format esm,cjs --watch",
+ "build:shared": "tsup --format esm"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "devDependencies": {
+ "@swc/cli": "^0.4.0",
+ "@swc/core": "^1.7.23",
+ "concurrently": "^8.2.2",
+ "rimraf": "^6.0.1",
+ "tsup": "^8.2.4",
+ "typescript": "^5.5.4"
+ },
+ "dependencies": {
+ "@faker-js/faker": "^8.4.1"
+ },
+ "peerDependencies": {
+ "@palmares/core": "workspace:*",
+ "@palmares/databases": "workspace:*",
+ "@palmares/schemas": "workspace:*",
+ "@palmares/zod-schema": "workspace:*"
+ },
+ "type": "module",
+ "tsup": {
+ "entry": [
+ "src/**/*.ts"
+ ],
+ "splitting": false,
+ "sourcemap": true,
+ "clean": true
+ }
+}
diff --git a/examples/with-code-share/shared/src/index.ts b/examples/with-code-share/shared/src/index.ts
new file mode 100644
index 00000000..cca508f7
--- /dev/null
+++ b/examples/with-code-share/shared/src/index.ts
@@ -0,0 +1,14 @@
+export {
+ type ArrayInventoryOutput,
+ type InventoryInput,
+ type InventoryOutput,
+ type ArrayUserOutput,
+ arrayInventorySchema,
+ inventorySchema,
+ getInventorySchemaWithSave,
+ arrayUserSchema
+} from './schemas';
+
+export { AbstractInventoryItem, AbstractUser } from './models';
+
+export { mockInventory, mockUsers } from './mocks';
diff --git a/examples/with-code-share/shared/src/mocks/index.ts b/examples/with-code-share/shared/src/mocks/index.ts
new file mode 100644
index 00000000..9b7add66
--- /dev/null
+++ b/examples/with-code-share/shared/src/mocks/index.ts
@@ -0,0 +1,2 @@
+export { default as mockInventory } from './inventory';
+export { default as mockUsers } from './users';
\ No newline at end of file
diff --git a/examples/with-code-share/shared/src/mocks/inventory.ts b/examples/with-code-share/shared/src/mocks/inventory.ts
new file mode 100644
index 00000000..f7de6679
--- /dev/null
+++ b/examples/with-code-share/shared/src/mocks/inventory.ts
@@ -0,0 +1,50 @@
+import { faker } from "@faker-js/faker";
+import { ArrayInventoryOutput } from "../schemas";
+import { ModelFields } from "@palmares/databases";
+import { AbstractUser } from "../models";
+import { regexForManufacturer } from '../utils';
+
+
+export default function mockInventory(limit: number, options?: {
+ offset?: number,
+ users?: ModelFields[]
+}): { rows: ArrayInventoryOutput, nextOffset: number } {
+ const offset = typeof options?.offset === 'number' ? options.offset : 0;
+ const rows = new Array(limit)
+ .fill(0)
+ .map((_, i) => {
+ const status = faker.helpers.arrayElement(["use", "maintenance", "available"] as const);
+ const manufacturer = faker.helpers.arrayElement(["Apple", "Dell", "HP", "Lenovo"] as const);
+ const fortyFiveDaysAhead = new Date();
+ fortyFiveDaysAhead.setDate(fortyFiveDaysAhead.getDate() + 45);
+ const ten10Ago = new Date();
+ ten10Ago.setDate(ten10Ago.getDate() - 10);
+ const user = faker.helpers.arrayElement(options?.users ?? [{
+ firstName: faker.person.firstName(),
+ lastName: faker.person.lastName(),
+ email: faker.internet.email(),
+ id: 1
+ }])
+ return {
+ id: i + offset,
+ manufacturer: manufacturer,
+ uuid: faker.string.uuid(),
+ serial: faker.helpers.fromRegExp(new RegExp(regexForManufacturer[manufacturer].replace(/^\^/g, '').replace(/\$$/g, ''))),
+ status: status,
+ purchaseDate: faker.date.recent().toISOString(),
+ warrantyExpiryDate:faker.date.between({ from: ten10Ago, to: fortyFiveDaysAhead }).toISOString(),
+ specifications: faker.lorem.sentence(),
+ assignmentDate: status !== "use" ? null : faker.date.recent().toISOString(),
+ imageUrl: faker.image.url(),
+ userId: status !== "use" ? null : user.id,
+ user: status !== "use" ? null : {
+ firstName: user.firstName,
+ lastName: user.lastName,
+ email: user.email
+ }
+ } satisfies ArrayInventoryOutput[number]
+ });
+
+ return { rows, nextOffset: offset + 1 }
+}
+
\ No newline at end of file
diff --git a/examples/with-code-share/shared/src/mocks/users.ts b/examples/with-code-share/shared/src/mocks/users.ts
new file mode 100644
index 00000000..064a11fb
--- /dev/null
+++ b/examples/with-code-share/shared/src/mocks/users.ts
@@ -0,0 +1,21 @@
+import { ModelFields } from "@palmares/databases";
+import { AbstractUser } from "../models";
+import { faker } from "@faker-js/faker";
+
+export default function mockUsers(limit: number, options?: {
+ offset?: number,
+ }): { rows: ModelFields[], nextOffset: number } {
+ const offset = typeof options?.offset === 'number' ? options.offset : 0;
+ const rows = new Array(limit)
+ .fill(0)
+ .map((_, i) => {
+ return {
+ id: i + offset,
+ firstName: faker.person.firstName(),
+ lastName: faker.person.lastName(),
+ email: faker.internet.email()
+ } satisfies ModelFields
+ });
+
+ return { rows, nextOffset: offset + 1 }
+ }
\ No newline at end of file
diff --git a/examples/with-code-share/shared/src/models.ts b/examples/with-code-share/shared/src/models.ts
new file mode 100644
index 00000000..a860c7c8
--- /dev/null
+++ b/examples/with-code-share/shared/src/models.ts
@@ -0,0 +1,38 @@
+import { auto, choice, char, date, text, Model, uuid } from '@palmares/databases'
+
+
+export class AbstractUser extends Model() {
+ fields = {
+ id: auto(),
+ firstName: text(),
+ lastName: text(),
+ email: text()
+ }
+
+ options = {
+ tableName: 'user',
+ managed: false,
+ abstract: true
+ }
+}
+
+export class AbstractInventoryItem extends Model() {
+ fields = {
+ id: auto(),
+ uuid: uuid({ autoGenerate: true }),
+ manufacturer: choice({ choices: ['Apple', 'Dell', 'HP', 'Lenovo' ]}),
+ serial: char({ maxLength: 12, allowNull: false, allowBlank: false }),
+ status: choice({ choices: ['use', 'maintenance', 'available'], allowNull: false }),
+ purchaseDate: date({ allowNull: false, }),
+ warrantyExpiryDate: date({ allowNull: false }),
+ specifications: text({ allowNull: false, allowBlank: false }),
+ imageUrl: text({ allowNull: false , allowBlank: false }),
+ assignmentDate: date({ allowNull: true })
+ }
+
+ options = {
+ tableName: 'inventory_item',
+ managed: false,
+ abstract: true
+ }
+}
diff --git a/examples/with-code-share/shared/src/schemas.ts b/examples/with-code-share/shared/src/schemas.ts
new file mode 100644
index 00000000..eb16fce3
--- /dev/null
+++ b/examples/with-code-share/shared/src/schemas.ts
@@ -0,0 +1,82 @@
+import { getSchemasWithDefaultAdapter, type infer as pInfer } from '@palmares/schemas';
+import { z } from '@palmares/zod-schema';
+
+import { AbstractInventoryItem, AbstractUser } from './models';
+import { regexForManufacturer } from './utils';
+
+import type { ZodSchemaAdapter } from '@palmares/zod-schema';
+
+const p = getSchemasWithDefaultAdapter();
+
+export const arrayInventorySchema = p.modelSchema(AbstractInventoryItem, {
+ many: true,
+ fields: {
+ userId: p.number().optional(),
+ user: p
+ .modelSchema(AbstractUser, {
+ show: ['email', 'firstName', 'lastName']
+ })
+ .optional()
+ },
+ omit: []
+});
+
+export const inventorySchema = p
+ .modelSchema(AbstractInventoryItem, {
+ fields: {
+ id: p.number().optional().nullable(),
+ imageUrl: p
+ .string()
+ .minLength(1)
+ .extends((schema) => {
+ if (schema instanceof z.ZodString) return schema.url('Not a valid URL');
+ return schema;
+ }),
+ userId: p.number().optional().nullable(),
+ user: p
+ .modelSchema(AbstractUser, {
+ show: ['email', 'firstName', 'lastName']
+ })
+ .optional()
+ .nullable()
+ },
+ omit: []
+ })
+ .refine((value) => {
+ if (
+ value &&
+ value.manufacturer &&
+ value.serial &&
+ !new RegExp(regexForManufacturer[value.manufacturer]).test(value.serial)
+ ) {
+ return {
+ code: 'serial',
+ message: `Serial number is not valid for ${value.manufacturer}`
+ };
+ }
+ })
+ .toValidate(async (value) => {
+ if (value) {
+ if (value.status !== 'use')
+ return {
+ ...value,
+ userId: null,
+ assignmentDate: null
+ };
+ }
+ return value;
+ });
+
+export const arrayUserSchema = p.modelSchema(AbstractUser, {
+ many: true,
+ omit: []
+});
+
+export function getInventorySchemaWithSave(onSave: Parameters[0]) {
+ return inventorySchema.onSave(onSave);
+}
+
+export type ArrayUserOutput = pInfer;
+export type ArrayInventoryOutput = pInfer;
+export type InventoryInput = pInfer;
+export type InventoryOutput = pInfer;
diff --git a/examples/with-code-share/shared/src/utils.ts b/examples/with-code-share/shared/src/utils.ts
new file mode 100644
index 00000000..511f5cad
--- /dev/null
+++ b/examples/with-code-share/shared/src/utils.ts
@@ -0,0 +1,6 @@
+export const regexForManufacturer = {
+ Apple: '^[A-Z]{3}[C-Z0-9][1-9C-NP-RTY][A-Z0-9]{3}[A-Z0-9]{4}$',
+ Dell: '^[A-Z0-9]{7}$',
+ HP: '^[A-Z0-9]{3}[0-9]{3}[A-Z0-9]{4}$',
+ Lenovo: '^[0-9]{2}-[A-Z0-9]{5}$',
+}
\ No newline at end of file
diff --git a/examples/with-code-share/shared/tsconfig.json b/examples/with-code-share/shared/tsconfig.json
new file mode 100644
index 00000000..70e4574f
--- /dev/null
+++ b/examples/with-code-share/shared/tsconfig.json
@@ -0,0 +1,108 @@
+{
+ "compilerOptions": {
+ /* Visit https://aka.ms/tsconfig to read more about this file */
+
+ /* Projects */
+ // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
+ // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
+ // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
+ // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
+ // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
+ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
+
+ /* Language and Environment */
+ "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
+ // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
+ // "jsx": "preserve", /* Specify what JSX code is generated. */
+ // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
+ // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
+ // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
+ // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
+ // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
+ // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
+ // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
+ // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
+ // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
+
+ /* Modules */
+ "module": "commonjs", /* Specify what module code is generated. */
+ // "rootDir": "./", /* Specify the root folder within your source files. */
+ // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
+ // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
+ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
+ // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
+ // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
+ "types": ["@palmares/databases", "@palmares/schemas"],
+ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
+ // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
+ // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
+ // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
+ // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
+ // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
+ // "resolveJsonModule": true, /* Enable importing .json files. */
+ // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
+ // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */
+
+ /* JavaScript Support */
+ // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
+ // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
+ // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
+
+ /* Emit */
+ // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
+ // "declarationMap": true, /* Create sourcemaps for d.ts files. */
+ // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
+ // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
+ // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
+ // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
+ "outDir": "./dist",
+ // "removeComments": true, /* Disable emitting comments. */
+ // "noEmit": true, /* Disable emitting files from a compilation. */
+ // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
+ // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
+ // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
+ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
+ // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
+ // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
+ // "newLine": "crlf", /* Set the newline character for emitting files. */
+ // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
+ // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
+ // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
+ // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
+ // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
+
+ /* Interop Constraints */
+ // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
+ // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
+ // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */
+ // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
+ "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
+ // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
+ "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
+
+ /* Type Checking */
+ "strict": true, /* Enable all strict type-checking options. */
+ // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
+ // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
+ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
+ // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
+ // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
+ // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
+ // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
+ // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
+ // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
+ // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
+ // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
+ // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
+ // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
+ // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
+ // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
+ // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
+ // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
+ // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
+
+ /* Completeness */
+ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
+ "skipLibCheck": true /* Skip type checking all .d.ts files. */
+ }
+}
diff --git a/libs/console-logging/CHANGELOG.md b/libs/console-logging/CHANGELOG.md
index ba0ee8d2..6778a24c 100644
--- a/libs/console-logging/CHANGELOG.md
+++ b/libs/console-logging/CHANGELOG.md
@@ -1,5 +1,15 @@
# @palmares/console-logging
+## 0.1.7
+
+### Patch Changes
+
+- add everything as peer dependencies of one another
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/logging@0.1.13
+
## 0.1.6
### Patch Changes
diff --git a/libs/console-logging/package.json b/libs/console-logging/package.json
index d4252afb..0c8fc93f 100644
--- a/libs/console-logging/package.json
+++ b/libs/console-logging/package.json
@@ -1,6 +1,6 @@
{
"name": "@palmares/console-logging",
- "version": "0.1.6",
+ "version": "0.1.7",
"description": "This is the default implementation of the logger adapter, you can create others if you want to",
"main": "./dist/cjs/src/index.js",
"module": "./dist/esm/src/index.js",
diff --git a/libs/console-logging/src/index.ts b/libs/console-logging/src/index.ts
index f508cd74..0dda961b 100644
--- a/libs/console-logging/src/index.ts
+++ b/libs/console-logging/src/index.ts
@@ -8,5 +8,5 @@ const consoleLoggingAdapter = loggingAdapter({
warn: (message: string) => console.warn(message)
});
-export { consoleLoggingAdapter as consoleLoggingAdapter };
+export { consoleLoggingAdapter as ConsoleLogging };
export default consoleLoggingAdapter;
diff --git a/libs/drizzle-engine/CHANGELOG.md b/libs/drizzle-engine/CHANGELOG.md
index fa705d73..7169b511 100644
--- a/libs/drizzle-engine/CHANGELOG.md
+++ b/libs/drizzle-engine/CHANGELOG.md
@@ -1,5 +1,16 @@
# @palmares/sequelize-engine
+## 0.1.17
+
+### Patch Changes
+
+- add everything as peer dependencies of one another
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/databases@0.1.16
+ - @palmares/core@0.1.13
+
## 0.1.16
### Patch Changes
diff --git a/libs/drizzle-engine/package.json b/libs/drizzle-engine/package.json
index 933152ff..69edae61 100644
--- a/libs/drizzle-engine/package.json
+++ b/libs/drizzle-engine/package.json
@@ -1,6 +1,6 @@
{
"name": "@palmares/drizzle-engine",
- "version": "0.1.16",
+ "version": "0.1.17",
"description": "This is the engine that wraps the hole drizzle interface in a way palmares can understand and have full control of",
"main": "./dist/cjs/src/index.js",
"module": "./dist/esm/src/index.js",
diff --git a/libs/eventemitter2-emitter/CHANGELOG.md b/libs/eventemitter2-emitter/CHANGELOG.md
index 8e025894..4edacad8 100644
--- a/libs/eventemitter2-emitter/CHANGELOG.md
+++ b/libs/eventemitter2-emitter/CHANGELOG.md
@@ -1,5 +1,15 @@
# @palmares/eventemitter2-emitter
+## 0.0.8
+
+### Patch Changes
+
+- add everything as peer dependencies of one another
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/events@0.0.16
+
## 0.0.7
### Patch Changes
diff --git a/libs/eventemitter2-emitter/package.json b/libs/eventemitter2-emitter/package.json
index 60b3a719..b801d772 100644
--- a/libs/eventemitter2-emitter/package.json
+++ b/libs/eventemitter2-emitter/package.json
@@ -1,6 +1,6 @@
{
"name": "@palmares/eventemitter2-emitter",
- "version": "0.0.7",
+ "version": "0.0.8",
"description": "EventEmitter2 as the event emitter to palmares. With this we are able to send events inside and between servers really fast.",
"main": "src/index.ts",
"repository": {
diff --git a/libs/express-adapter/CHANGELOG.md b/libs/express-adapter/CHANGELOG.md
index 8ffca8fb..c19c4872 100644
--- a/libs/express-adapter/CHANGELOG.md
+++ b/libs/express-adapter/CHANGELOG.md
@@ -1,5 +1,16 @@
# @palmares/express-adapter
+## 0.1.14
+
+### Patch Changes
+
+- add everything as peer dependencies of one another
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/server@0.1.13
+ - @palmares/core@0.1.13
+
## 0.1.13
### Patch Changes
diff --git a/libs/express-adapter/package.json b/libs/express-adapter/package.json
index 58a64386..51c893aa 100644
--- a/libs/express-adapter/package.json
+++ b/libs/express-adapter/package.json
@@ -1,6 +1,6 @@
{
"name": "@palmares/express-adapter",
- "version": "0.1.13",
+ "version": "0.1.14",
"description": "This is the adapter for express framework to work with Palmares framework",
"main": "./dist/cjs/src/index.js",
"module": "./dist/esm/index.js",
diff --git a/libs/jest-tests/CHANGELOG.md b/libs/jest-tests/CHANGELOG.md
index 7749f4ed..f7ebb672 100644
--- a/libs/jest-tests/CHANGELOG.md
+++ b/libs/jest-tests/CHANGELOG.md
@@ -1,5 +1,15 @@
# @palmares/jest-tests
+## 0.1.13
+
+### Patch Changes
+
+- add everything as peer dependencies of one another
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/tests@0.1.13
+
## 0.1.12
### Patch Changes
diff --git a/libs/jest-tests/package.json b/libs/jest-tests/package.json
index ef90c84d..2e1d410e 100644
--- a/libs/jest-tests/package.json
+++ b/libs/jest-tests/package.json
@@ -1,6 +1,6 @@
{
"name": "@palmares/jest-tests",
- "version": "0.1.12",
+ "version": "0.1.13",
"description": "This is the jest testing adapter, we are abstracting jest to work flawlessly with palmares",
"main": "./dist/cjs/src/index.js",
"module": "./dist/esm/src/index.js",
diff --git a/libs/node-std/CHANGELOG.md b/libs/node-std/CHANGELOG.md
index 52c161c4..8674321b 100644
--- a/libs/node-std/CHANGELOG.md
+++ b/libs/node-std/CHANGELOG.md
@@ -1,5 +1,15 @@
# @palmares/node-std
+## 0.1.13
+
+### Patch Changes
+
+- add everything as peer dependencies of one another
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/core@0.1.13
+
## 0.1.12
### Patch Changes
diff --git a/libs/node-std/package.json b/libs/node-std/package.json
index 23ba2044..bc0c7a40 100644
--- a/libs/node-std/package.json
+++ b/libs/node-std/package.json
@@ -1,6 +1,6 @@
{
"name": "@palmares/node-std",
- "version": "0.1.12",
+ "version": "0.1.13",
"description": "This is the nodejs standard library, it uses the std interfaces to interact with the environment so palmares can work with the same APIs without worrying about the environment it is running on.",
"main": "./dist/cjs/src/index.js",
"module": "./dist/esm/src/index.js",
diff --git a/libs/redis-emitter/CHANGELOG.md b/libs/redis-emitter/CHANGELOG.md
index dfe330c0..c5bedb82 100644
--- a/libs/redis-emitter/CHANGELOG.md
+++ b/libs/redis-emitter/CHANGELOG.md
@@ -1,5 +1,15 @@
# @palmares/redis-emitter
+## 0.0.9
+
+### Patch Changes
+
+- add everything as peer dependencies of one another
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/events@0.0.16
+
## 0.0.8
### Patch Changes
diff --git a/libs/redis-emitter/package.json b/libs/redis-emitter/package.json
index 398f9c7a..99cf3eb1 100644
--- a/libs/redis-emitter/package.json
+++ b/libs/redis-emitter/package.json
@@ -1,6 +1,6 @@
{
"name": "@palmares/redis-emitter",
- "version": "0.0.8",
+ "version": "0.0.9",
"description": "The default implementation for redis to act as pub/sub for palmares. It's specially useful as a layer.",
"main": "src/index.ts",
"scripts": {
diff --git a/libs/sequelize-engine/CHANGELOG.md b/libs/sequelize-engine/CHANGELOG.md
index 72d7e0a0..c2ccc35e 100644
--- a/libs/sequelize-engine/CHANGELOG.md
+++ b/libs/sequelize-engine/CHANGELOG.md
@@ -1,5 +1,16 @@
# @palmares/sequelize-engine
+## 0.1.16
+
+### Patch Changes
+
+- add everything as peer dependencies of one another
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/databases@0.1.16
+ - @palmares/core@0.1.13
+
## 0.1.15
### Patch Changes
diff --git a/libs/sequelize-engine/package.json b/libs/sequelize-engine/package.json
index 9f222790..e2f5d50e 100644
--- a/libs/sequelize-engine/package.json
+++ b/libs/sequelize-engine/package.json
@@ -1,6 +1,6 @@
{
"name": "@palmares/sequelize-engine",
- "version": "0.1.15",
+ "version": "0.1.16",
"description": "This is the engine that wraps the hole sequelize interface in a way palmares can understand and have full control of",
"main": "./dist/cjs/src/index.js",
"module": "./dist/esm/src/index.js",
diff --git a/libs/sequelize-engine/src/migrations.ts b/libs/sequelize-engine/src/migrations.ts
index 758ffb73..a7712830 100644
--- a/libs/sequelize-engine/src/migrations.ts
+++ b/libs/sequelize-engine/src/migrations.ts
@@ -1,35 +1,32 @@
-import {
- ForeignKeyField,
- adapterMigrations,
-} from '@palmares/databases';
+import { adapterMigrations } from '@palmares/databases';
import type SequelizeEngine from './engine';
import type {
CircularDependenciesInMigrationType,
GetForeignKeyReferencesForTableReturnType,
IndexesToAddOnNextIterationType,
- MigrationModelType,
+ MigrationModelType
} from './types';
+import type { DatabaseAdapter, Field, InitializedModelsType, Migration , ForeignKeyField} from '@palmares/databases';
import type {
- DatabaseAdapter,
- Field,
- InitializedModelsType,
- Migration} from '@palmares/databases';
-import type { Model, ModelAttributeColumnOptions, ModelCtor, QueryInterface, QueryInterfaceIndexOptions, Sequelize } from 'sequelize';
+ Model,
+ ModelAttributeColumnOptions,
+ ModelCtor,
+ QueryInterface,
+ QueryInterfaceIndexOptions,
+ Sequelize
+} from 'sequelize';
import type { SetRequired } from 'sequelize/types/utils/set-required';
const circularDependenciesInMigration: CircularDependenciesInMigrationType[] = [];
let indexesToAddOnNextIteration: IndexesToAddOnNextIterationType[] = [];
-function formatForeignKeyFields(
- model: ModelCtor,
- field: ModelAttributeColumnOptions>
-) {
+function formatForeignKeyFields(model: ModelCtor, field: ModelAttributeColumnOptions>) {
if (field.type === 'foreign-key') {
- const modelAssociation = Object.values(model.associations).find((association) =>
- association.foreignKey === ((field as any).name || (field as any).fieldName)
+ const modelAssociation = Object.values(model.associations).find(
+ (association) => association.foreignKey === ((field as any).name || (field as any).fieldName)
);
- const actualField = modelAssociation?.target.getAttributes()[(field.references as any)?.key as string]
+ const actualField = modelAssociation?.target.getAttributes()[(field.references as any)?.key as string];
if (actualField) field.type = actualField.type;
}
return field;
@@ -86,7 +83,7 @@ async function handleCircularDependencies(
migration: Migration,
{
toModel,
- fromModel,
+ fromModel
}: {
toModel: MigrationModelType;
fromModel?: MigrationModelType;
@@ -109,7 +106,7 @@ async function handleCircularDependencies(
// eslint-disable-next-line ts/no-unnecessary-condition
const allFieldsOfModel = Object.values(toModel.original.fields || {});
for (const fieldDefinition of allFieldsOfModel) {
- const isAForeignKeyField = fieldDefinition instanceof ForeignKeyField;
+ const isAForeignKeyField = (fieldDefinition as any)?.['$$type'] === '$PForeignKeyField';
const relatedTo = (fieldDefinition as ForeignKeyField).relatedTo;
const fieldDoesNotExist = isAForeignKeyField && engine.initializedModels[relatedTo] === undefined;
if (fieldDoesNotExist) {
@@ -117,7 +114,7 @@ async function handleCircularDependencies(
fromModel: fromModel !== undefined ? fromModel : toModel,
toModel: toModel,
fieldName: fieldDefinition.fieldName,
- relatedToName: relatedTo,
+ relatedToName: relatedTo
});
}
}
@@ -133,7 +130,7 @@ async function handleIndexes(
migration: Migration,
{
fromModel,
- toModel,
+ toModel
}: {
fromModel?: MigrationModelType;
toModel: MigrationModelType;
@@ -176,7 +173,7 @@ async function handleIndexes(
} else {
failedIndexesForNextIteration.push({
tableName: toModelName,
- index: toModelIndex,
+ index: toModelIndex
});
}
}
@@ -261,17 +258,16 @@ export default adapterMigrations({
): Promise => {
const model = toModel.initialized;
- const formattedFields = Object.entries(model.getAttributes())
- .reduce((accumulator, [fieldName, field]) => {
- accumulator[fieldName] = formatForeignKeyFields(model, field);;
- return accumulator;
- }, {} as any);
+ const formattedFields = Object.entries(model.getAttributes()).reduce((accumulator, [fieldName, field]) => {
+ accumulator[fieldName] = formatForeignKeyFields(model, field);
+ return accumulator;
+ }, {} as any);
await queryInterface.createTable(
model.options.tableName as string,
formattedFields,
Object.assign(model.options, {
- transaction: migration.transaction,
+ transaction: migration.transaction
})
);
await handleCircularDependencies(engine, migration, { toModel }, queryInterface);
@@ -312,7 +308,7 @@ export default adapterMigrations({
if (hasTheNameOfTheTableChanged) {
await queryInterface.renameTable(fromTableName, toTableName, {
- transaction: migration.transaction,
+ transaction: migration.transaction
});
}
await handleCircularDependencies(engine, migration, { fromModel, toModel }, queryInterface);
@@ -331,7 +327,7 @@ export default adapterMigrations({
const columnName = fromModel.initialized.getAttributes()[fieldName].field as string;
const tableName = fromModel.initialized.options.tableName as string;
await queryInterface.removeColumn(tableName, columnName, {
- transaction: migration.transaction,
+ transaction: migration.transaction
});
await handleIndexes(migration, { toModel, fromModel }, queryInterface);
},
@@ -352,7 +348,7 @@ export default adapterMigrations({
const tableNameWhereRenameHappened = toModel.initialized.options.tableName as string;
await queryInterface.renameColumn(tableNameWhereRenameHappened, databaseNameBefore, databaseNameAfter, {
- transaction: migration.transaction,
+ transaction: migration.transaction
});
await handleCircularDependencies(engine, migration, { fromModel, toModel }, queryInterface);
await handleIndexes(migration, { toModel, fromModel }, queryInterface);
@@ -384,13 +380,13 @@ export default adapterMigrations({
const initializedAttribute = attributesAsArray.find((attribute) => attribute.field === fieldAfter.databaseName);
const tableName = toModel.initialized.options.tableName as string;
if (initializedAttribute) {
- const isOfTypeRelation = fieldBefore instanceof ForeignKeyField;
+ const isOfTypeRelation = (fieldBefore as any)?.['$$type'] === '$PForeignKeyField';
// This removes the constraint, when we change the column sequelize automatically creates a new constraint
// because of that we remove the old one.
if (isOfTypeRelation) {
const constraints: GetForeignKeyReferencesForTableReturnType[] | undefined =
(await queryInterface.getForeignKeyReferencesForTable(tableName, {
- transaction: migration.transaction,
+ transaction: migration.transaction
})) as GetForeignKeyReferencesForTableReturnType[] | undefined;
if (constraints) {
@@ -400,7 +396,7 @@ export default adapterMigrations({
for (const constraintToRemove of constraintsToRemove) {
await queryInterface.removeConstraint(tableName, constraintToRemove.constraintName as string, {
- transaction: migration.transaction,
+ transaction: migration.transaction
});
}
}
@@ -408,9 +404,9 @@ export default adapterMigrations({
}
await queryInterface.changeColumn(tableName, fieldAfter.databaseName as unknown as string, initializedAttribute, {
- transaction: migration.transaction,
+ transaction: migration.transaction
});
await handleCircularDependencies(engine, migration, { fromModel, toModel }, queryInterface);
await handleIndexes(migration, { toModel, fromModel }, queryInterface);
- },
+ }
});
diff --git a/libs/sequelize-engine/src/utils.ts b/libs/sequelize-engine/src/utils.ts
index fdbe1336..b91f9db3 100644
--- a/libs/sequelize-engine/src/utils.ts
+++ b/libs/sequelize-engine/src/utils.ts
@@ -1,7 +1,7 @@
-import { ForeignKeyField, fields } from '@palmares/databases';
+import { fields } from '@palmares/databases';
import type SequelizeEngine from './engine';
-import type { Field} from '@palmares/databases';
+import type { Field , ForeignKeyField} from '@palmares/databases';
import type {
BelongsToOptions,
ForeignKeyOptions,
@@ -10,7 +10,7 @@ import type {
IndexesOptions,
Model,
ModelAttributeColumnOptions,
- ModelCtor,
+ ModelCtor
} from 'sequelize';
const indexesByEngineAndModelName = new Map>();
@@ -19,7 +19,7 @@ const onDeleteOperationsTable = {
[fields.ON_DELETE.SET_NULL]: 'SET NULL',
[fields.ON_DELETE.SET_DEFAULT]: 'SET DEFAULT',
[fields.ON_DELETE.RESTRICT]: 'RESTRICT',
- [fields.ON_DELETE.DO_NOTHING]: 'DO NOTHING',
+ [fields.ON_DELETE.DO_NOTHING]: 'DO NOTHING'
};
/**
@@ -42,7 +42,7 @@ export function appendIndexes(
const indexesForModelOnEngine = indexesByEngineAndModelName.get(engineName)?.get(modelName) as IndexesOptions[];
indexesForModelOnEngine.push({
unique: (field.unique as boolean) === true,
- fields: [field.databaseName],
+ fields: [field.databaseName]
});
}
@@ -70,7 +70,9 @@ export function handleRelatedField(
field: ForeignKeyField,
fieldAttributes: ModelAttributeColumnOptions & ForeignKeyOptions
) {
- const modelWithForeignKeyField: ModelCtor = engine.initializedModels[field.model.getName()] as ModelCtor;
+ const modelWithForeignKeyField: ModelCtor = engine.initializedModels[
+ field.model.getName()
+ ] as ModelCtor;
const relatedToModel: ModelCtor = engine.initializedModels[field.relatedTo] as ModelCtor;
// eslint-disable-next-line ts/no-unnecessary-condition
const isRelatedModelAndModelOfForeignDefined = relatedToModel !== undefined && modelWithForeignKeyField !== undefined;
@@ -83,16 +85,16 @@ export function handleRelatedField(
foreignKey: fieldAttributes,
hooks: true,
onDelete: translatedOnDelete,
- sourceKey: field.toField,
+ sourceKey: field.toField
};
- if (field instanceof ForeignKeyField) {
+ if ((field as any)?.['$$type'] === '$PForeignKeyField') {
relationOptions.as = field.relatedName as string;
relatedToModel.hasMany(modelWithForeignKeyField, relationOptions);
relationOptions.as = field.relationName as string;
modelWithForeignKeyField.belongsTo(relatedToModel, relationOptions);
- return false
+ return false;
}
}
return true;
diff --git a/libs/vercel-adapter/CHANGELOG.md b/libs/vercel-adapter/CHANGELOG.md
index 3116b636..56c6e611 100644
--- a/libs/vercel-adapter/CHANGELOG.md
+++ b/libs/vercel-adapter/CHANGELOG.md
@@ -1,5 +1,15 @@
# @palmares/vercel-adapter
+## 0.0.17
+
+### Patch Changes
+
+- add everything as peer dependencies of one another
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/server@0.1.13
+
## 0.0.16
### Patch Changes
diff --git a/libs/vercel-adapter/package.json b/libs/vercel-adapter/package.json
index 90519eee..4fb0a578 100644
--- a/libs/vercel-adapter/package.json
+++ b/libs/vercel-adapter/package.json
@@ -1,6 +1,6 @@
{
"name": "@palmares/vercel-adapter",
- "version": "0.0.16",
+ "version": "0.0.17",
"description": "This is the adapter for Vercel allows you to deploy Palmares apps on Vercel",
"main": "./dist/cjs/src/index.js",
"module": "./dist/esm/src/index.js",
diff --git a/libs/zod-schema/CHANGELOG.md b/libs/zod-schema/CHANGELOG.md
index 9f222776..88026611 100644
--- a/libs/zod-schema/CHANGELOG.md
+++ b/libs/zod-schema/CHANGELOG.md
@@ -1,5 +1,15 @@
# @palmares/zod-schema
+## 0.1.22
+
+### Patch Changes
+
+- add everything as peer dependencies of one another
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/schemas@0.1.20
+
## 0.1.21
### Patch Changes
diff --git a/libs/zod-schema/package.json b/libs/zod-schema/package.json
index 918111cb..d30f0d58 100644
--- a/libs/zod-schema/package.json
+++ b/libs/zod-schema/package.json
@@ -1,6 +1,6 @@
{
"name": "@palmares/zod-schema",
- "version": "0.1.21",
+ "version": "0.1.22",
"description": "Zod as the validation schema for palmares so we are able to validate through zod instead of using serializers",
"main": "./dist/cjs/src/index.js",
"module": "./dist/esm/src/index.js",
diff --git a/package.json b/package.json
index 66540494..c2ab2ac6 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,7 @@
"version": "0.0.0",
"description": "The palmares framework, a framework to write simple, fast and reliable node.js code on the server",
"workspaces": [
- "examples/*",
+ "examples/**/*",
"packages/*",
"libs/*",
"docs/*"
diff --git a/packages/client/CHANGELOG.md b/packages/client/CHANGELOG.md
index aa21d257..c23afd4a 100644
--- a/packages/client/CHANGELOG.md
+++ b/packages/client/CHANGELOG.md
@@ -1,5 +1,16 @@
# @palmares/client
+## 0.1.13
+
+### Patch Changes
+
+- add everything as peer dependencies of one another
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/server@0.1.13
+ - @palmares/core@0.1.13
+
## 0.1.12
### Patch Changes
diff --git a/packages/client/package.json b/packages/client/package.json
index 961c06b5..314ff743 100644
--- a/packages/client/package.json
+++ b/packages/client/package.json
@@ -1,6 +1,6 @@
{
"name": "@palmares/client",
- "version": "0.1.12",
+ "version": "0.1.13",
"description": "This is the client part of the palmares framework, you should be able to use it on any runtime",
"main": "./dist/cjs/src/index.js",
"module": "./dist/esm/src/index.js",
diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md
index 15e4142f..4747119d 100644
--- a/packages/core/CHANGELOG.md
+++ b/packages/core/CHANGELOG.md
@@ -1,5 +1,12 @@
# @palmares/core
+## 0.1.13
+
+### Patch Changes
+
+- add everything as peer dependencies of one another
+- Everything now has peer dependencies instead of dependency
+
## 0.1.12
### Patch Changes
diff --git a/packages/core/package.json b/packages/core/package.json
index 8c2c72bf..1bf6eb90 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@palmares/core",
- "version": "0.1.12",
+ "version": "0.1.13",
"description": "This is the core part of the palmares framework, palmares is a framework heavily inspired by django and nestjs core ideas",
"main": "./dist/cjs/src/index.js",
"module": "./dist/esm/src/index.js",
@@ -28,6 +28,11 @@
"framework",
"core"
],
+ "files": [
+ "dist",
+ "package.json",
+ "CHANGELOG.md"
+ ],
"scripts": {
"clear": "rimraf ./dist",
"build:types": "tsc --project tsconfig.types.json",
diff --git a/packages/core/src/app/index.ts b/packages/core/src/app/index.ts
index 62a73738..52a48e7c 100644
--- a/packages/core/src/app/index.ts
+++ b/packages/core/src/app/index.ts
@@ -1,11 +1,31 @@
import { getLogger } from '../logging';
import type { DomainHandlerFunctionArgs } from '../commands/types';
-import type { CoreSettingsType, SettingsType2 } from '../conf/types';
+import type { SettingsType2 } from '../conf/types';
import type { Domain } from '../domain/domain';
-let baseAppServerInstance: BaseAppServer | undefined = undefined;
-let appServerInstance: InstanceType> | AppServer | undefined = undefined;
+declare global {
+ // eslint-disable-next-line no-var
+ var $PBaseAppServerInstance: BaseAppServer | undefined;
+ // eslint-disable-next-line no-var
+ var $PAppServerInstance: InstanceType> | AppServer | undefined;
+}
+
+function getBaseAppServerInstance() {
+ return globalThis.$PBaseAppServerInstance;
+}
+
+function getAppServerInstance() {
+ return globalThis.$PAppServerInstance;
+}
+
+function setAppServerInstance(instance: InstanceType> | AppServer) {
+ globalThis.$PAppServerInstance = instance;
+}
+
+function setBaseAppServerInstance(instance: BaseAppServer) {
+ globalThis.$PBaseAppServerInstance = instance;
+}
/**
* Functional approach for creating an app server instead of using the class approach, it's pretty much the same as the
@@ -34,11 +54,12 @@ export class BaseAppServer {
isClosingServer = false;
constructor(domains: Domain[], settings: SettingsType2) {
+ const baseAppServerInstance = getBaseAppServerInstance();
if (baseAppServerInstance) return baseAppServerInstance;
else {
this.domains = domains;
this.settings = settings;
- baseAppServerInstance = this;
+ setBaseAppServerInstance(this);
return this;
}
}
@@ -120,13 +141,15 @@ export class BaseAppServer {
* - `close`: Stops the appServer.
*/
export class AppServer {
+ static $$type = '$PAppServer';
baseAppServer!: BaseAppServer;
constructor(domains: Domain[], settings: SettingsType2) {
+ const appServerInstance = getAppServerInstance();
if (appServerInstance) return appServerInstance;
else {
this.baseAppServer = new BaseAppServer(domains, settings);
- appServerInstance = this;
+ setAppServerInstance(this);
return this;
}
}
diff --git a/packages/core/src/commands/index.ts b/packages/core/src/commands/index.ts
index 3808d97f..153423f2 100644
--- a/packages/core/src/commands/index.ts
+++ b/packages/core/src/commands/index.ts
@@ -1,21 +1,29 @@
import { CommandNotFoundException } from './exceptions';
-import { AppServer } from '../app';
import { initializeApp } from '../app/utils';
import { initializeDomains } from '../domain/utils';
import { getLogger, setLogger } from '../logging';
import { PACKAGE_NAME, structuredClone } from '../utils';
import type { DefaultCommandType, DomainHandlerFunctionArgs } from './types';
-import type { appServer } from '../app';
+import type { AppServer, appServer } from '../app';
import type { SettingsType2 } from '../conf/types';
import type { Std } from '../std-adapter';
-let cachedCommands = {} as DefaultCommandType;
+declare global {
+ // eslint-disable-next-line no-var
+ var $PCachedCommands: DefaultCommandType | undefined;
+}
export function getCommands() {
+ const cachedCommands = globalThis.$PCachedCommands;
+ if (cachedCommands === undefined) return {};
return cachedCommands;
}
+function setCommands(commands: DefaultCommandType) {
+ globalThis.$PCachedCommands = commands;
+}
+
function getValueFromType(type: 'boolean' | 'number' | 'string' | string[] | readonly string[], value: string) {
switch (type) {
case 'string':
@@ -181,7 +189,7 @@ export async function handleCommands(
setLogger(new loggerConstructorFromPalmaresLoggingPackage({ domainName: PACKAGE_NAME }));
logger = getLogger();
- cachedCommands = availableCommands;
+ setCommands(availableCommands);
const isCommandDefined: boolean =
// eslint-disable-next-line ts/no-unnecessary-condition
@@ -211,9 +219,10 @@ export async function handleCommands(
// This will start the app server if your command returns an app server class. Please, don't try to run the app
// server manually, unless you REALLY know what you are doing, since it has it's own lifecycle.
- if (returnOfCommand?.prototype instanceof AppServer) {
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ if ((returnOfCommand as typeof AppServer)?.['$$type'] === '$PAppServer') {
logger.info(`Command wants to start the app server, starting it...`);
- initializeApp(domains, settings, formattedCommandLineArgs, returnOfCommand);
+ initializeApp(domains, settings, formattedCommandLineArgs, returnOfCommand as typeof AppServer);
}
}
diff --git a/packages/core/src/conf/exceptions.ts b/packages/core/src/conf/exceptions.ts
index a8ae17ee..bed981ee 100644
--- a/packages/core/src/conf/exceptions.ts
+++ b/packages/core/src/conf/exceptions.ts
@@ -1,7 +1,9 @@
export class SettingsNotFoundException extends Error {
constructor() {
super(
- `No settings file was found for the application.\nMake sure you either pass an option thrugh:\n-'Command.handleCommands'\n-PALMARES_SETTINGS_MODULE environment variable\n-Or inside 'src' folder in the root directory`
+ `No settings file was found for the application.\nMake sure you either pass an option through:` +
+ `\n-'Command.handleCommands'\n-PALMARES_SETTINGS_MODULE environment variable\n-Or inside` +
+ ` 'src' folder in the root directory`
);
}
}
diff --git a/packages/core/src/conf/settings.ts b/packages/core/src/conf/settings.ts
index b7bee904..78ac39d3 100644
--- a/packages/core/src/conf/settings.ts
+++ b/packages/core/src/conf/settings.ts
@@ -5,10 +5,13 @@ import { PALMARES_SETTINGS_MODULE_ENVIRONMENT_VARIABLE } from '../utils';
import type { SettingsType2 } from './types';
import type { Std } from '../std-adapter';
-let cachedSettings: SettingsType2 | null = null;
+declare global {
+ // eslint-disable-next-line no-var
+ var $PCachedSettings: SettingsType2 | undefined;
+}
export function getSettings() {
- if (cachedSettings) return cachedSettings;
+ if (globalThis.$PCachedSettings) return globalThis.$PCachedSettings;
}
/**
@@ -24,7 +27,7 @@ async function extractSettingsFromPath(stdToUse: Std, path?: string) {
if (!pathToUse) throw new SettingsNotFoundException();
try {
- cachedSettings = ((await import(pathToUse)) as { default: SettingsType2 }).default;
+ globalThis.$PCachedSettings = ((await import(pathToUse)) as { default: SettingsType2 }).default;
} catch (e) {
throw new SettingsNotFoundException();
}
@@ -45,16 +48,22 @@ export async function setSettings(
std: Std;
}
) {
+ let settings = undefined;
if (settingsOrStd instanceof Promise) {
const awaitedSettingsOrSrd = await settingsOrStd;
if ('files' in awaitedSettingsOrSrd.default) await extractSettingsFromPath(awaitedSettingsOrSrd.default);
- else cachedSettings = awaitedSettingsOrSrd.default;
+ else {
+ settings = awaitedSettingsOrSrd.default;
+ }
} else if ('files' in settingsOrStd) await extractSettingsFromPath(settingsOrStd);
else if (typeof settingsOrStd === 'object' && 'settingsPathLocation' in settingsOrStd) {
await extractSettingsFromPath(settingsOrStd.std, settingsOrStd.settingsPathLocation);
- } else cachedSettings = settingsOrStd;
+ } else {
+ settings = settingsOrStd;
+ }
- if (!cachedSettings) throw new SettingsNotFoundException();
- setDefaultStd(new cachedSettings.std());
- return cachedSettings;
+ if (!settings) throw new SettingsNotFoundException();
+ globalThis.$PCachedSettings = settings;
+ setDefaultStd(new settings.std());
+ return settings;
}
diff --git a/packages/core/src/domain/domain.ts b/packages/core/src/domain/domain.ts
index 8a1b08e4..50e726ec 100644
--- a/packages/core/src/domain/domain.ts
+++ b/packages/core/src/domain/domain.ts
@@ -10,7 +10,25 @@ import type { DefaultCommandType } from '../commands/types';
* the building blocks of your application. Everything inside Palmares starts with domains.
*/
export class Domain {
+ static $$type = '$PDomain';
commands = {} as DefaultCommandType | undefined;
+ /**
+ * Because of how node_modules work, we might have multiple instances of the core package.
+ * Your package requires core? So it might install it as well inside of the node_modules.
+ *
+ * Like that:
+ *
+ * The user's App
+ * |-> node_modules
+ * |-> @palmares/core
+ * |-> YOUR PACKAGE
+ * |-> node_modules
+ * |-> @palmares/core
+ *
+ * This will mess things up since we will have multiple instances of the core package.
+ * Since we rely a lot on global data. Shared data lets you
+ */
+ instances?: Domain[];
name!: string;
path!: string;
isLoaded = false;
diff --git a/packages/core/src/domain/utils.ts b/packages/core/src/domain/utils.ts
index 05f0e417..4e0652d8 100644
--- a/packages/core/src/domain/utils.ts
+++ b/packages/core/src/domain/utils.ts
@@ -1,16 +1,28 @@
-import { Domain } from './domain';
import { NotAValidDomainDefaultExportedError } from './exceptions';
import { getCommands } from '../commands';
import { getSettings, setSettings } from '../conf/settings';
+import type { Domain } from './domain';
import type { DomainReadyFunctionArgs } from './types';
import type { AppServer, appServer } from '../app';
import type { DefaultCommandType } from '../commands/types';
import type { CoreSettingsType, SettingsType2 } from '../conf/types';
import type { Std } from '../std-adapter';
-let cachedDomains: (typeof Domain)[] | null = null;
-let cachedInitializedDomains: Domain[] | null = null;
+declare global {
+ // eslint-disable-next-line no-var
+ var $PCachedInitializedDomains: Domain[] | undefined;
+ // eslint-disable-next-line no-var
+ var $PCachedDomains: (typeof Domain)[] | undefined;
+}
+
+function setCachedDomains(domains: (typeof Domain)[]) {
+ globalThis.$PCachedDomains = domains;
+}
+
+function setCachedInitializedDomains(domains: Domain[]) {
+ globalThis.$PCachedInitializedDomains = domains;
+}
/**
* This is used to retrieve all of the domains from the settings. We will loop through all of the installed domains in
@@ -28,7 +40,8 @@ export async function retrieveDomains(
}
): Promise<(typeof Domain)[]> {
const isNotDynamicDomains = settings.isDynamicDomains !== true;
- if (cachedDomains && isNotDynamicDomains && options?.ignoreCache !== true) return cachedDomains;
+ if (globalThis.$PCachedDomains && isNotDynamicDomains && options?.ignoreCache !== true)
+ return globalThis.$PCachedDomains;
const mergedSettings: any = settings;
const domainClasses: (typeof Domain)[] = [];
@@ -47,14 +60,15 @@ export async function retrieveDomains(
if (domainKls instanceof Promise) domainKls = (await domainKls).default;
- if ((domainKls as typeof Domain).prototype instanceof Domain) {
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ if ((domainKls as typeof Domain)?.['$$type'] === '$PDomain') {
domainClasses.push(domainKls as typeof Domain);
} else {
throw new NotAValidDomainDefaultExportedError();
}
}
- if (isNotDynamicDomains) cachedDomains = domainClasses;
+ if (isNotDynamicDomains) setCachedDomains(domainClasses);
setSettings(mergedSettings);
return domainClasses;
@@ -101,10 +115,10 @@ export async function initializeDomains(
commands: DefaultCommandType;
}> {
const ignoreCache = options?.ignoreCache === true;
- if (cachedInitializedDomains && ignoreCache !== true)
+ if (globalThis.$PCachedInitializedDomains && ignoreCache !== true)
return {
settings: getSettings() as SettingsType2,
- domains: cachedInitializedDomains,
+ domains: globalThis.$PCachedInitializedDomains,
commands: getCommands()
};
@@ -153,12 +167,12 @@ export async function initializeDomains(
}
if (ignoreCache !== true) {
- cachedInitializedDomains = initializedDomains;
+ setCachedInitializedDomains(initializedDomains);
return {
commands: commands,
settings: settings,
- domains: cachedInitializedDomains
+ domains: globalThis.$PCachedInitializedDomains as Domain[]
};
} else {
return {
diff --git a/packages/core/src/logging.ts b/packages/core/src/logging.ts
index 7459debe..14c719f1 100644
--- a/packages/core/src/logging.ts
+++ b/packages/core/src/logging.ts
@@ -11,7 +11,7 @@ let cachedLogger: {
info: (message: string) => console.info(getDefaultFormattedMessage(message)),
debug: (message: string) => console.debug(getDefaultFormattedMessage(message)),
warn: (message: string) => console.warn(getDefaultFormattedMessage(message)),
- error: (message: string) => console.error(getDefaultFormattedMessage(message)),
+ error: (message: string) => console.error(getDefaultFormattedMessage(message))
};
/**
diff --git a/packages/core/src/std-adapter/files.ts b/packages/core/src/std-adapter/files.ts
index 7f4dea57..9dc2066f 100644
--- a/packages/core/src/std-adapter/files.ts
+++ b/packages/core/src/std-adapter/files.ts
@@ -1,34 +1,41 @@
export interface FilesAndFolders {
readFromEnv: (envName: string) => Promise;
/**
- * Reads a file from the path, if the path is an array of strings, join the strings with .join() and then work normally
+ * Reads a file from the path, if the path is an array of strings, join the strings with .join()
+ * and then work normally
*/
readFile: (path: string | string[]) => Promise;
join: (...paths: string[]) => Promise;
/**
- * When the path is a simple string work normally, if the path is an array of strings, join the strings with .join() and then work normally
+ * When the path is a simple string work normally, if the path is an array of strings, join
+ * the strings with .join() and then work normally
*/
exists: (path: string | string[]) => Promise;
/**
- * When the path is a simple string work normally, if the path is an array of strings, join the strings with .join() and then work normally
+ * When the path is a simple string work normally, if the path is an array of strings, join
+ * the strings with .join() and then work normally
*/
readDirectory: (path: string | string[]) => Promise;
makeDirectory: (path: string | string[]) => Promise;
/**
- * When the path is a simple string work normally, if the path is an array of strings, join the strings with .join() and then work normally
+ * When the path is a simple string work normally, if the path is an array of strings, join
+ * the strings with .join() and then work normally
*/
appendFile: (path: string | string[], content: string) => Promise;
/**
- * When the path is a simple string work normally, if the path is an array of strings, join the strings with .join() and then work normally
+ * When the path is a simple string work normally, if the path is an array of strings, join
+ * the strings with .join() and then work normally
*/
writeFile: (path: string | string[], content: string) => Promise;
/**
- * When the path is a simple string work normally, if the path is an array of strings, join the strings with .join() and then work normally
+ * When the path is a simple string work normally, if the path is an array of strings, join
+ * the strings with .join() and then work normally
*/
removeFile: (path: string | string[]) => Promise;
dirname: (path: string | string[]) => Promise;
/**
- * When the path is a simple string work normally, if the path is an array of strings, join the strings with .join() and then work normally
+ * When the path is a simple string work normally, if the path is an array of strings, join
+ * the strings with .join() and then work normally
*/
basename: (path: string | string[]) => Promise;
/**
diff --git a/packages/core/src/std/config.ts b/packages/core/src/std/config.ts
index db8d17af..0dfad3d9 100644
--- a/packages/core/src/std/config.ts
+++ b/packages/core/src/std/config.ts
@@ -2,20 +2,23 @@ import { StdNotSetError } from './exceptions';
import type { Std } from '../std-adapter';
-let cachedDefaultStd: undefined | Std = undefined;
+declare global {
+ // eslint-disable-next-line no-var
+ var $PCachedDefaultStd: undefined | Std;
+}
/**
* This will set the default standard library thats being used by the application, so you can load it at any time in
* your application.
*/
export function setDefaultStd(std: Std) {
- cachedDefaultStd = std;
+ globalThis.$PCachedDefaultStd = std;
}
/**
* If no standard library is set, this will throw an error.
*/
export function getDefaultStd() {
- if (cachedDefaultStd === undefined) throw new StdNotSetError();
- return cachedDefaultStd;
+ if (globalThis.$PCachedDefaultStd === undefined) throw new StdNotSetError();
+ return globalThis.$PCachedDefaultStd;
}
diff --git a/packages/core/src/std/exceptions.ts b/packages/core/src/std/exceptions.ts
index 32bbcf4a..fdf37fa4 100644
--- a/packages/core/src/std/exceptions.ts
+++ b/packages/core/src/std/exceptions.ts
@@ -8,7 +8,9 @@ export class ImportsError extends Error {
export class StdNotSetError extends Error {
constructor() {
super(
- 'Default standard library not set. Please make sure you install `@palmares/std`, and add it at the top of your installed domains like: `installedDomains: [[StdDomain, { STD: NodeStd }], ...// other domains]`'
+ 'Default standard library not set. Please make sure you install `@palmares/std`, and add it ' +
+ 'at the top of your installed domains like: `installedDomains: ' +
+ '[[StdDomain, { STD: NodeStd }], ...// other domains]`'
);
this.name = 'StdNotSetError';
}
diff --git a/packages/core/src/std/imports.ts b/packages/core/src/std/imports.ts
index fdbf52c3..790b68d5 100644
--- a/packages/core/src/std/imports.ts
+++ b/packages/core/src/std/imports.ts
@@ -1,6 +1,7 @@
/**
- * With this function we are able to import a module from a specific path. We don't want to be tied to nodejs runtime, we want
- * to enable the framework to work on any runtime and environment like react native, the browser and many other that might exist.
+ * With this function we are able to import a module from a specific path. We don't want to be tied
+ * to nodejs runtime, we want to enable the framework to work on any runtime and environment like
+ * react native, the browser and many other that might exist.
*
* IMPORTANT: When importing multiple modules from different packages like:
* ```ts
@@ -29,8 +30,8 @@ export async function imports(
args?: {
apiName?: string;
/**
- * This error code is the code that returns when we have an import error, to see what error code to use, try to run the following
- * code on your environment:
+ * This error code is the code that returns when we have an import error, to see what error code
+ * to use, try to run the following code on your environment:
*
* ```
* async function main() {
diff --git a/packages/core/src/utils/imports.ts b/packages/core/src/utils/imports.ts
index dec6a4a7..eb334594 100644
--- a/packages/core/src/utils/imports.ts
+++ b/packages/core/src/utils/imports.ts
@@ -1,6 +1,7 @@
/**
- * With this function we are able to import a module from a specific path. We don't want to be tied to nodejs runtime, we want
- * to enable the framework to work on any runtime and environment like react native, the browser and many other that might exist.
+ * With this function we are able to import a module from a specific path. We don't want to be tied
+ * to nodejs runtime, we want to enable the framework to work on any runtime and environment like
+ * react native, the browser and many other that might exist.
*
* IMPORTANT: When importing multiple modules from different packages like:
* ```ts
@@ -24,13 +25,13 @@
*
* @returns - Returns the imported module.
*/
-export async function imports(
+export async function imports(
packageName: string,
args?: {
packagePath?: string;
/**
- * This error code is the code that returns when we have an import error, to see what error code to use, try to run the following
- * code on your environment:
+ * This error code is the code that returns when we have an import error, to see what error
+ * code to use, try to run the following code on your environment:
*
* ```
* async function main() {
@@ -62,7 +63,7 @@ export async function imports(
for (const key of splittedPackagePath) {
result = result[key];
}
- return result as R;
+ return result as TResult;
} catch (e) {
const error = e as any;
if (error.code === errorCodeToConsider) {
diff --git a/packages/databases/CHANGELOG.md b/packages/databases/CHANGELOG.md
index 1b64cc53..c82c0788 100644
--- a/packages/databases/CHANGELOG.md
+++ b/packages/databases/CHANGELOG.md
@@ -1,5 +1,17 @@
# @palmares/databases
+## 0.1.16
+
+### Patch Changes
+
+- add everything as peer dependencies of one another
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/core@0.1.13
+ - @palmares/events@0.0.16
+ - @palmares/logging@0.1.13
+
## 0.1.15
### Patch Changes
diff --git a/packages/databases/package.json b/packages/databases/package.json
index 03498ea8..ee2e1833 100644
--- a/packages/databases/package.json
+++ b/packages/databases/package.json
@@ -1,10 +1,15 @@
{
"name": "@palmares/databases",
- "version": "0.1.15",
+ "version": "0.1.16",
"description": "Add support for working with databases with palmares framework",
"main": "./dist/cjs/src/index.js",
"module": "./dist/esm/src/index.js",
"types": "./dist/cjs/types/index.d.ts",
+ "files": [
+ "dist",
+ "package.json",
+ "CHANGELOG.md"
+ ],
"exports": {
".": {
"import": {
diff --git a/packages/databases/src/databases.ts b/packages/databases/src/databases.ts
index 5b98d63a..9c7b8a0f 100644
--- a/packages/databases/src/databases.ts
+++ b/packages/databases/src/databases.ts
@@ -1,11 +1,10 @@
import { getSettings, retrieveDomains } from '@palmares/core';
-import { EventEmitter } from '@palmares/events';
-import { DatabaseAdapter } from './engine';
import { databaseLogger } from './logging';
import { Migrations } from './migrations';
import { initializeModels } from './models/utils';
+import type { DatabaseAdapter } from './engine';
import type { DatabaseDomainInterface } from './interfaces';
import type { Model } from './models';
import type { BaseModel, model } from './models/model';
@@ -17,6 +16,12 @@ import type {
InitializedEngineInstancesType,
OptionalMakemigrationsArgsType
} from './types';
+import type { EventEmitter } from '@palmares/events';
+
+declare global {
+ // eslint-disable-next-line no-var
+ var $PDatabaseInstance: Databases;
+}
export class Databases {
settings!: DatabaseSettingsType;
@@ -27,11 +32,11 @@ export class Databases {
#cachedModelsByModelName: {
[modelName: string]: FoundModelType;
} = {};
- private static __instance?: Databases;
constructor() {
- if (Databases.__instance) return Databases.__instance;
- Databases.__instance = this;
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ if (globalThis.$PDatabaseInstance) return globalThis.$PDatabaseInstance;
+ globalThis.$PDatabaseInstance = this;
}
/**
@@ -85,11 +90,12 @@ export class Databases {
const databaseEntries: [string, DatabaseConfigurationType][] = Object.entries(settings.databases);
const existsEventEmitterForAllEngines =
// eslint-disable-next-line ts/no-unnecessary-condition
- settings.eventEmitter instanceof EventEmitter || (settings.eventEmitter || {}) instanceof Promise;
+ (settings.eventEmitter as any)?.['$$type'] === '$PEventEmitter' ||
+ (settings.eventEmitter || {}) instanceof Promise;
for (const [databaseName, databaseSettings] of databaseEntries) {
const existsEventEmitterForSpecificEngine =
- databaseSettings.events?.emitter instanceof EventEmitter ||
+ (databaseSettings.events?.emitter as any)?.['$$type'] === '$PEventEmitter' ||
databaseSettings.events?.emitter instanceof Promise;
if (existsEventEmitterForSpecificEngine === false && existsEventEmitterForAllEngines) {
@@ -182,7 +188,8 @@ export class Databases {
engineInstance = engineArgs[1];
const isAnEngineInstanceDefinedForDatabase = isProbablyAnEngineInstanceDefinedForDatabase
- ? engineInstance instanceof DatabaseAdapter
+ ? // eslint-disable-next-line ts/no-unnecessary-condition
+ engineInstance?.['$$type'] === '$PDatabaseAdapter'
: false;
if (!isAnEngineInstanceDefinedForDatabase) throw new Error('You must define an engine for the database.');
}
diff --git a/packages/databases/src/domain.ts b/packages/databases/src/domain.ts
index 8693e224..b01e82d4 100644
--- a/packages/databases/src/domain.ts
+++ b/packages/databases/src/domain.ts
@@ -11,13 +11,16 @@ import type { model as BaseModel } from './models';
import type { DatabaseSettingsType } from './types';
import type { DomainHandlerFunctionArgs, DomainReadyFunctionArgs, SettingsType2 } from '@palmares/core';
-let databases: Databases | undefined = undefined;
-let cachedDatabaseDomains: DatabaseDomainInterface[] | undefined = undefined;
-
+declare global {
+ // eslint-disable-next-line no-var
+ var $PDatabases: Databases | undefined;
+ // eslint-disable-next-line no-var
+ var $PCachedDatabaseDomains: DatabaseDomainInterface[] | undefined;
+}
function loadDatabases(databaseDomains?: DatabaseDomainInterface[]) {
- if (Array.isArray(databaseDomains)) cachedDatabaseDomains = databaseDomains;
- if (!databases) databases = new Databases();
- return [databases, cachedDatabaseDomains] as const;
+ if (Array.isArray(databaseDomains)) globalThis.$PCachedDatabaseDomains = databaseDomains;
+ if (!globalThis.$PDatabases) globalThis.$PDatabases = new Databases();
+ return [globalThis.$PDatabases, globalThis.$PCachedDatabaseDomains] as const;
}
const databaseDomainModifier = domain<{
diff --git a/packages/databases/src/engine/index.ts b/packages/databases/src/engine/index.ts
index f5abf3b6..532cd880 100644
--- a/packages/databases/src/engine/index.ts
+++ b/packages/databases/src/engine/index.ts
@@ -74,6 +74,7 @@ export class DatabaseAdapter<
TQueryAdapter extends AdapterQuery = AdapterQuery,
TMigrationsAdapter extends AdapterMigrations = AdapterMigrations
> {
+ $$type = '$PDatabaseAdapter';
connectionName!: string;
databaseSettings!: DatabaseConfigurationType;
initializedModels: EngineInitializedModels = {};
diff --git a/packages/databases/src/models/fields/auto.ts b/packages/databases/src/models/fields/auto.ts
index 4db72990..e7fd12e3 100644
--- a/packages/databases/src/models/fields/auto.ts
+++ b/packages/databases/src/models/fields/auto.ts
@@ -64,6 +64,7 @@ export class AutoField<
TDatabaseName extends string | null | undefined = undefined,
TCustomAttributes = any
> extends Field {
+ protected $$type = '$PAutoField';
declare _type: TType;
typeName: string = AutoField.name;
diff --git a/packages/databases/src/models/fields/big-auto.ts b/packages/databases/src/models/fields/big-auto.ts
index 33b60da8..55e0e2f0 100644
--- a/packages/databases/src/models/fields/big-auto.ts
+++ b/packages/databases/src/models/fields/big-auto.ts
@@ -69,6 +69,7 @@ export class BigAutoField<
TDatabaseName extends string | null | undefined = undefined,
TCustomAttributes = any
> extends Field {
+ protected $$type = '$PBigAutoField';
declare _type: TType;
typeName: string = BigAutoField.name;
diff --git a/packages/databases/src/models/fields/big-integer.ts b/packages/databases/src/models/fields/big-integer.ts
index f006661a..881d7976 100644
--- a/packages/databases/src/models/fields/big-integer.ts
+++ b/packages/databases/src/models/fields/big-integer.ts
@@ -65,6 +65,7 @@ export class BigIntegerField<
TDatabaseName extends string | null | undefined = undefined,
TCustomAttributes = any
> extends Field {
+ protected $$type = '$PBigIntegerField';
declare _type: TType;
typeName: string = BigIntegerField.name;
diff --git a/packages/databases/src/models/fields/boolean.ts b/packages/databases/src/models/fields/boolean.ts
index 9a9904d2..12d8442c 100644
--- a/packages/databases/src/models/fields/boolean.ts
+++ b/packages/databases/src/models/fields/boolean.ts
@@ -62,6 +62,7 @@ export class BooleanField<
TDatabaseName extends string | null | undefined = undefined,
TCustomAttributes = any
> extends Field {
+ protected $$type = '$PBooleanField';
declare _type: TType;
typeName: string = BooleanField.name;
diff --git a/packages/databases/src/models/fields/char.ts b/packages/databases/src/models/fields/char.ts
index bde128f9..2f3f393e 100644
--- a/packages/databases/src/models/fields/char.ts
+++ b/packages/databases/src/models/fields/char.ts
@@ -60,6 +60,7 @@ export class CharField<
TDatabaseName extends string | null | undefined = undefined,
TCustomAttributes = any
> extends TextField {
+ protected $$type = '$PCharField';
declare _type: TType;
typeName: string = CharField.name;
maxLength: number;
diff --git a/packages/databases/src/models/fields/date.ts b/packages/databases/src/models/fields/date.ts
index f7e3e50e..5db10a2c 100644
--- a/packages/databases/src/models/fields/date.ts
+++ b/packages/databases/src/models/fields/date.ts
@@ -86,6 +86,7 @@ export class DateField<
TDatabaseName,
TCustomAttributes
> {
+ protected $$type = '$PDateField';
declare _type: TType;
typeName: string = DateField.name;
autoNow: TAutoNow;
diff --git a/packages/databases/src/models/fields/decimal.ts b/packages/databases/src/models/fields/decimal.ts
index 341ac274..ba4e8601 100644
--- a/packages/databases/src/models/fields/decimal.ts
+++ b/packages/databases/src/models/fields/decimal.ts
@@ -52,6 +52,7 @@ export class DecimalField<
TDatabaseName extends string | null | undefined = undefined,
TCustomAttributes = any
> extends UnopinionatedField {
+ protected $$type = '$PDecimalField';
declare _type: TType;
typeName: string = DecimalField.name;
maxDigits: number;
diff --git a/packages/databases/src/models/fields/enum.ts b/packages/databases/src/models/fields/enum.ts
index b353fdf3..d1ed4fe0 100644
--- a/packages/databases/src/models/fields/enum.ts
+++ b/packages/databases/src/models/fields/enum.ts
@@ -65,6 +65,7 @@ export class EnumField<
TCustomAttributes = any,
TEnumChoices extends string[] = string[]
> extends UnopinionatedField {
+ protected $$type = '$PEnumField';
declare _type: TType;
choices: TEnumChoices;
typeName: string = EnumField.name;
diff --git a/packages/databases/src/models/fields/field.ts b/packages/databases/src/models/fields/field.ts
index bd09a9ab..fabc4229 100644
--- a/packages/databases/src/models/fields/field.ts
+++ b/packages/databases/src/models/fields/field.ts
@@ -20,6 +20,7 @@ export class Field<
TDatabaseName extends string | null | undefined = undefined,
TCustomAttributes = any
> {
+ protected $$type = '$PField';
inputParsers = new Map['inputParser']>();
outputParsers = new Map['outputParser']>();
isAuto!: TAuto;
diff --git a/packages/databases/src/models/fields/foreign-key.ts b/packages/databases/src/models/fields/foreign-key.ts
index b1e0f5eb..8cb50fa6 100644
--- a/packages/databases/src/models/fields/foreign-key.ts
+++ b/packages/databases/src/models/fields/foreign-key.ts
@@ -218,6 +218,7 @@ export class ForeignKeyField<
TRelatedName extends string = any,
TRelationName extends string = any
> extends UnopinionatedField {
+ protected $$type = '$PForeignKeyField';
declare _type: TType;
modelRelatedTo!: TRelatedModel;
typeName: string = ForeignKeyField.name;
diff --git a/packages/databases/src/models/fields/integer.ts b/packages/databases/src/models/fields/integer.ts
index 93f4972a..4211797d 100644
--- a/packages/databases/src/models/fields/integer.ts
+++ b/packages/databases/src/models/fields/integer.ts
@@ -66,6 +66,7 @@ export class IntegerField<
TDatabaseName extends string | null | undefined = undefined,
TCustomAttributes = any
> extends Field {
+ protected $$type = '$PIntegerField';
declare _type: TType;
typeName: string = IntegerField.name;
diff --git a/packages/databases/src/models/fields/text.ts b/packages/databases/src/models/fields/text.ts
index 7e8adc9e..8cc69f02 100644
--- a/packages/databases/src/models/fields/text.ts
+++ b/packages/databases/src/models/fields/text.ts
@@ -54,6 +54,7 @@ export class TextField<
TDatabaseName extends string | null | undefined = undefined,
TCustomAttributes = any
> extends Field {
+ protected $$type = '$PTextField';
declare _type: TType;
typeName: string = TextField.name;
allowBlank: boolean;
diff --git a/packages/databases/src/models/fields/translatable.ts b/packages/databases/src/models/fields/translatable.ts
index eb3d1679..afce968e 100644
--- a/packages/databases/src/models/fields/translatable.ts
+++ b/packages/databases/src/models/fields/translatable.ts
@@ -27,6 +27,7 @@ import type { DatabaseAdapter } from '../../engine';
* ```
*/
export class TranslatableField extends Field {
+ protected $$type = '$PTranslatableField';
typeName: string = TranslatableField.name;
translate!: () => Promise;
customToString?: () => Promise<{ imports: string[]; translateBody: string }>;
diff --git a/packages/databases/src/models/fields/uuid.ts b/packages/databases/src/models/fields/uuid.ts
index bdbe6b54..787b55c6 100644
--- a/packages/databases/src/models/fields/uuid.ts
+++ b/packages/databases/src/models/fields/uuid.ts
@@ -65,6 +65,7 @@ export class UuidField<
TCustomAttributes = any,
TAutoGenerate extends boolean = false
> extends TextField {
+ protected $$type = '$PUuidField';
declare _type: TType;
typeName: string = UuidField.name;
autoGenerate: TAutoGenerate;
diff --git a/packages/databases/src/models/manager.ts b/packages/databases/src/models/manager.ts
index f3501dbf..ee867a1a 100644
--- a/packages/databases/src/models/manager.ts
+++ b/packages/databases/src/models/manager.ts
@@ -69,6 +69,7 @@ import type { Narrow, SettingsType2 } from '@palmares/core';
* of the code. This way we could update the tasks dynamically.
*/
export class Manager {
+ $$type = '$PManager';
instances: ManagerInstancesType;
engineInstances: ManagerEngineInstancesType;
defaultEngineInstanceName: string;
diff --git a/packages/databases/src/models/model.ts b/packages/databases/src/models/model.ts
index 0dac0236..69a09485 100644
--- a/packages/databases/src/models/model.ts
+++ b/packages/databases/src/models/model.ts
@@ -234,7 +234,7 @@ export class BaseModel {
const propertyNamesOfModel = Object.getOwnPropertyNames(prototype);
for (const propName of propertyNamesOfModel) {
const value = (prototype as any)[propName];
- if (value instanceof Manager) managers[propName] = value;
+ if ((value as Manager)['$$type'] === '$PManager') managers[propName] = value;
}
prototype = Object.getPrototypeOf(prototype);
}
@@ -569,6 +569,7 @@ const BaseModelWithoutMethods = BaseModel as unknown as { new (): Pick any) | ModelFieldsType;
fields: ModelFieldsType = {};
options: ModelOptionsType | undefined = undefined;
diff --git a/packages/databases/src/models/utils.ts b/packages/databases/src/models/utils.ts
index 98a53a10..af840ac0 100644
--- a/packages/databases/src/models/utils.ts
+++ b/packages/databases/src/models/utils.ts
@@ -222,7 +222,7 @@ export async function parse(
// eslint-disable-next-line ts/no-unnecessary-condition
if (engineFields.foreignKeyFieldParser) {
const fieldToParse = await foreignKeyFieldParser(engine, field as ForeignKeyField);
- if (fieldToParse instanceof ForeignKeyField) {
+ if (fieldToParse?.['$$type'] === '$PForeignKeyField') {
return callTranslateAndAppendInputAndOutputParsersToField(
engine.connectionName,
fieldToParse as Field,
diff --git a/packages/databases/src/queries/exceptions.ts b/packages/databases/src/queries/exceptions.ts
index 9df647f8..bdf3a9ee 100644
--- a/packages/databases/src/queries/exceptions.ts
+++ b/packages/databases/src/queries/exceptions.ts
@@ -1,7 +1,8 @@
export class UnmanagedModelsShouldImplementSpecialMethodsException extends Error {
constructor(modelName: string, methodItShouldImplement: string) {
super(
- `The model '${modelName}' is unmanaged, so it should implement the '${methodItShouldImplement}' method in order to work properly in queries.`
+ `The model '${modelName}' is unmanaged, so it should implement the '${methodItShouldImplement}' +
+ ' method in order to work properly in queries.`
);
this.name = UnmanagedModelsShouldImplementSpecialMethodsException.name;
}
diff --git a/packages/databases/src/transaction.ts b/packages/databases/src/transaction.ts
index 4492ee93..78ef8c30 100644
--- a/packages/databases/src/transaction.ts
+++ b/packages/databases/src/transaction.ts
@@ -4,8 +4,9 @@ import { setQuery } from './queries/set';
import type { model } from './models/model';
/**
- * This class is responsible for controlling the transactions that happens inside of the framework, this is supposed to be handled for the framework
- * itself specially for distributed systems where the data is stored in different places. The transaction instance is created so that the framework
+ * This class is responsible for controlling the transactions that happens inside of the framework,
+ * this is supposed to be handled for the framework itself specially for distributed systems where
+ * the data is stored in different places. The transaction instance is created so that the framework
* can handle when something goes wrong and fails.
*/
export class Transaction {
diff --git a/packages/databases/src/utils/index.ts b/packages/databases/src/utils/index.ts
index 39e31347..a36cba94 100644
--- a/packages/databases/src/utils/index.ts
+++ b/packages/databases/src/utils/index.ts
@@ -27,8 +27,9 @@ export function generateUUID() {
import('perf_hooks');
// eslint-disable-next-line ts/consistent-type-imports
const performance = (globalThis as any).performance as (typeof import('perf_hooks'))['performance'];
+ //Time in microseconds since page-load or 0 if unsupported
// eslint-disable-next-line ts/no-unnecessary-condition
- let performanceDate = (performance && performance.now && performance.now() * 1000) || 0; //Time in microseconds since page-load or 0 if unsupported
+ let performanceDate = (performance && performance.now && performance.now() * 1000) || 0;
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (character) => {
let randomNumber = Math.random() * 16; //random number between 0 and 16
if (date > 0) {
diff --git a/packages/databases/src/utils/models.ts b/packages/databases/src/utils/models.ts
index a09426ab..653e5b85 100644
--- a/packages/databases/src/utils/models.ts
+++ b/packages/databases/src/utils/models.ts
@@ -3,7 +3,7 @@ import type { onRemoveFunction, onSetFunction } from '../models/types';
export function extractDefaultEventsHandlerFromModel<
TModel extends InstanceType>,
- TFunctionType extends 'onSet' | 'onRemove',
+ TFunctionType extends 'onSet' | 'onRemove'
>(
modelInstance: TModel,
functionType: TFunctionType
diff --git a/packages/events/CHANGELOG.md b/packages/events/CHANGELOG.md
index 1b2241c2..5a4db1de 100644
--- a/packages/events/CHANGELOG.md
+++ b/packages/events/CHANGELOG.md
@@ -1,5 +1,16 @@
# @palmares/events
+## 0.0.16
+
+### Patch Changes
+
+- add everything as peer dependencies of one another
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/core@0.1.13
+ - @palmares/logging@0.1.13
+
## 0.0.15
### Patch Changes
diff --git a/packages/events/package.json b/packages/events/package.json
index ae5037ea..3c0f1f1d 100644
--- a/packages/events/package.json
+++ b/packages/events/package.json
@@ -1,6 +1,6 @@
{
"name": "@palmares/events",
- "version": "0.0.15",
+ "version": "0.0.16",
"description": "This is the events framework for palmares, it's responsible for handling everything that is Pub/Sub like websockets, pub/sub like redis, and other types of asynchronous background tasks",
"main": "./dist/cjs/src/index.js",
"module": "./dist/esm/src/index.js",
diff --git a/packages/events/src/emitter/exceptions.ts b/packages/events/src/emitter/exceptions.ts
index 32946b6a..1be8d65a 100644
--- a/packages/events/src/emitter/exceptions.ts
+++ b/packages/events/src/emitter/exceptions.ts
@@ -1,7 +1,8 @@
export class NotImplementedServerException extends Error {
constructor(serverName: string, methodName: string) {
super(
- `Method '${methodName}' was not implemented in '${serverName}' and it should be implemented in order to fully work.`
+ `Method '${methodName}' was not implemented in '${serverName}' and it should ` +
+ `be implemented in order to fully work.`
);
this.name = NotImplementedServerException.name;
}
diff --git a/packages/events/src/events/index.ts b/packages/events/src/events/index.ts
index 7ced4e61..af0d1140 100644
--- a/packages/events/src/events/index.ts
+++ b/packages/events/src/events/index.ts
@@ -85,40 +85,47 @@ import type { Emitter } from '../emitter';
* it, specially on distributed systems.
*
* That's not really magic it's really simple actually.
- * When we add a new listener you see that we wrap the function (callback) to another function (see #wrapInResultCallback).
- * What this function do is that it has a lifecycle, similar to a promise in javascript: `pending`, `completed`, `failed`.
+ * When we add a new listener you see that we wrap the function (callback) to another function
+ * (see #wrapInResultCallback).
+ * What this function do is that it has a lifecycle, similar to a promise in javascript: `pending`, `completed`,
+ * `failed`.
* What's the idea?
* When we call the for example `emitter.emit('create.user', 1)` we will call this function after
* creating a resultKey, the emitter by itself, when we initialize the class, will also hold a `resultsEventName`.
* Why both? The second one is a listener, a listener that will only listen for results of this emitter. The second one
* is needed because a single emitter can send multiple events at the same time, se we need to differ between them.
*
- * Continuing on, we called `emitter.emit('create.user', 1)`, created the resultId, and sent the resultsEventName to the listener.
- * After calling we return to the user a promise, inside of this promise there will be a recursion that iterates over for
- * each tick of the event loop. (see #fetchResultForEmit). Inside of this promise be aware of `pingTimeout` and `resultsTimeout`.
- * Ping is how long we will wait to be notified that ""someone"" is working on the result, this is needed for cases when the
- * event simply don't exist so we don't wait for too long. The second one is `resultsTimeout`, as you might have guessed, means
- * how long we will wait for a result.
+ * Continuing on, we called `emitter.emit('create.user', 1)`, created the resultId, and sent the resultsEventName to
+ * the listener. After calling we return to the user a promise, inside of this promise there will be a recursion that
+ * iterates over for each tick of the event loop. (see #fetchResultForEmit). Inside of this promise be aware of
+ * `pingTimeout` and `resultsTimeout`.
+ * Ping is how long we will wait to be notified that ""someone"" is working on the result, this is needed for cases
+ * when the event simply don't exist so we don't wait for too long. The second one is `resultsTimeout`, as you might
+ * have guessed, means how long we will wait for a result.
*
- * Now let's jump to the listener itself, you see that the first thing we do is to emit an event TO THE `resultsEventName` (remember,
- * that's the listener for the results), this event will have the following structure: { status: string; data: any }
- * When the listener receives this event, it'll append this result to `#pendingResults` the Promise (that will not be resolved just yet),
- * will iterate over and it'll see that some listener is working on the response for this emit. When this finishes we enter the `waiting`
- * stage. So now we will wait until all pending results have finished or until we reach the resultsTimeout. This get's kinda complicated
- * when adding a layer.
+ * Now let's jump to the listener itself, you see that the first thing we do is to emit an event TO THE
+ * `resultsEventName` (remember, that's the listener for the results), this event will have the following structure:
+ * { status: string; data: any } When the listener receives this event, it'll append this result to `#pendingResults`
+ * the Promise (that will not be resolved just yet), will iterate over and it'll see that some listener is working
+ * on the response for this emit. When this finishes we enter the `waiting` stage. So now we will wait until all pending
+ * results have finished or until we reach the resultsTimeout. This get's kinda complicated when adding a layer.
*
* - 3: Layers, what makes this almost unstoppable and where things gets kinda complicated.
- * Layers are just EventEmitter instances, a layer will be able to make distributed systems fully in sync with each other. But how?
- * Generally speaking a layer will be using `RedisEmitter` or `KafkaEmitter` or basically any type of Pub/Sub or messaging service.
+ * Layers are just EventEmitter instances, a layer will be able to make distributed systems fully in sync with each
+ * other.
+ * But how?
+ * Generally speaking a layer will be using `RedisEmitter` or `KafkaEmitter` or basically any type of Pub/Sub or
+ * messaging service.
*
- * A layer works by channels, channels enables the user to separate the logic between each of them, for example: if we have
- * have a chat, we might end up having multiple rooms, `room1` would be the first channel and `room2` would be the second channel.
- * If we want to broadcast an event to `room1` layer we can do that by just emitting the event to it. If we want `room2` to be broadcasted
- * we can send an event directly to it.
- * You will see that when layers are defined, emitting events are done inside of the layer, and not inside of the EventEmitter instance.
- * In other words, what we are doing is: Every event that will be emitted from the emitter will actually be sent to the layer. The layer broadcasts
- * the events to `room1` for example, `room1` so we emit it, when we emit a broadcast will be fired, this message received it'll be
- * handled by
+ * A layer works by channels, channels enables the user to separate the logic between each of them, for example:
+ * if we have have a chat, we might end up having multiple rooms, `room1` would be the first channel and `room2`
+ * would be the second channel. If we want to broadcast an event to `room1` layer we can do that by just emitting
+ * the event to it. If we want `room2` to be broadcasted we can send an event directly to it.
+ * You will see that when layers are defined, emitting events are done inside of the layer, and not inside of the
+ * EventEmitter instance.
+ * In other words, what we are doing is: Every event that will be emitted from the emitter will actually be sent
+ * to the layer. The layer broadcasts the events to `room1` for example, `room1` so we emit it, when we emit a
+ * broadcast will be fired, this message received it'll be handled by
*
* ```
* this.emitEventToEmitter
@@ -129,8 +136,10 @@ import type { Emitter } from '../emitter';
* This might become easier with an example:
* - Call `emitter.emitToChannel(['birds', 'users'], 'create.user', { id: 1, name: 'Nicolas'})`
* - Send the key ('create.user') and the data both to `bird` and `user` keys INSIDE of the layer
- * - `Bird` handler points to a function defined in birdsEmitter, so when we are receiving this value we are handling inside of `birdsEmitter`.
- * - on `birdsEmitter` instance, we get get the original key (so `create.user`) and we will be able to make it work normally as the layer didn't exist.
+ * - `Bird` handler points to a function defined in birdsEmitter, so when we are receiving this value we are
+ * handling inside of `birdsEmitter`.
+ * - on `birdsEmitter` instance, we get get the original key (so `create.user`) and we will be able to make
+ * it work normally as the layer didn't exist.
* - When we notify about the response we follow the same thing.
*
* IMPORTANT: Your emitter cannot receive responses from channels it's not subscribed to.
@@ -144,7 +153,8 @@ import type { Emitter } from '../emitter';
* wildcards: { use: true },
* });
*
- * const result = await emitter.emitToChannel(['users', 'birds'], 'create.*'); // We totally ignore 'users channel' on this case
+ * const result = await emitter.emitToChannel(['users', 'birds'], 'create.*');
+ * // We totally ignore 'users channel' on this case
* ```
*
* IMPORTANT: We can't rely on the data inside of this class, when working with events
@@ -153,6 +163,7 @@ import type { Emitter } from '../emitter';
* internal data for the class.
*/
export class EventEmitter {
+ protected $$type = '$PEventEmitter';
emitter: TEmitter;
protected layer?: EventEmitter;
private resultsEventName!: string;
@@ -168,15 +179,16 @@ export class EventEmitter {
#groups: Record; listeners: Record any> }> = {};
/**
- * Factory method for the building the emitter, we need this because we need to add results listener and layer listeners
- * to the function and both operations are async.
+ * Factory method for the building the emitter, we need this because we need to add results listener and layer
+ * listeners to the function and both operations are async.
*
- * Be aware that you need to pass the emitter, the constructor, and not the instance, you can pass the parameters of the emitter
- * inside of options: { customParams: }
+ * Be aware that you need to pass the emitter, the constructor, and not the instance, you can pass the parameters
+ * of the emitter inside of options: { customParams: }
*
- * @param emitter - The emitter constructor so we build it inside here or a default export by using `import('./my-custom-emitter.ts')`
- * @param options - Custom options for the emitter, on here you can pass a layer instance, wildcards options and customize
- * the timeout for the results to be retrieved.
+ * @param emitter - The emitter constructor so we build it inside here or a default export by using
+ * `import('./my-custom-emitter.ts')`
+ * @param options - Custom options for the emitter, on here you can pass a layer instance, wildcards options and
+ * customize the timeout for the results to be retrieved.
*
* @returns - This is a factory method so we create a new EventEmitter instance.
*/
@@ -219,7 +231,7 @@ export class EventEmitter {
}
get hasLayer() {
- return this.layer instanceof EventEmitter;
+ return (this.layer as any)?.['$$type'] === '$PEventEmitter';
}
get channels(): string[] {
@@ -271,11 +283,11 @@ export class EventEmitter {
}
/**
- * This will add the listener with the wildcards, what we do in order to be able to save the list with the wildcards is that
- * we save all of the events tied to the same group.
+ * This will add the listener with the wildcards, what we do in order to be able to save the list with the
+ * wildcards is that we save all of the events tied to the same group.
*
- * Think that we are appending the event with the keyword: `create.users`. The group id refers to all of the handlers that will
- * listen for this particular event.
+ * Think that we are appending the event with the keyword: `create.users`. The group id refers to all of the
+ * handlers that will listen for this particular event.
*
* What we do is that we append the same groupId to multiple keys like for example:
*
@@ -433,8 +445,8 @@ export class EventEmitter {
}
/**
- * This will subscribe a listener (function) to an specific event (key). When this key is emitted, either from a channel
- * or from the emitter itself, the listener (function) will be called.
+ * This will subscribe a listener (function) to an specific event (key). When this key is emitted, either from
+ * a channel or from the emitter itself, the listener (function) will be called.
*
* Returning a value from the function will emit a result back to the caller.
*
@@ -524,9 +536,9 @@ export class EventEmitter {
},
callback: (...args: any) => any
) {
- // A group means another handler for the same key. For example, to listeners to `users.create.index` will point to the same
- // group but are different handlers. Generally speaking, the groupId will be the name of the event that you should append
- // in your custom listeners.
+ // A group means another handler for the same key. For example, to listeners to `users.create.index` will
+ // point to the same group but are different handlers. Generally speaking, the groupId will be the name of
+ // the event that you should append in your custom listeners.
const handlerGroupId = key in this.#groupByKeys ? [...this.#groupByKeys[key].values()][0] : `group-${uuid()}`;
const handlerId = `handler-${uuid()}`;
diff --git a/packages/events/src/logging.ts b/packages/events/src/logging.ts
index d9238a6e..4febf1e2 100644
--- a/packages/events/src/logging.ts
+++ b/packages/events/src/logging.ts
@@ -6,7 +6,7 @@ export const eventsLogger = new Logger(
APP_START_EVENTS_SERVER: {
category: 'info',
handler: ({ appName }: { appName: string }) =>
- `${appName} is running an events server and will only listen for events.\nPress Ctrl+C to quit.`,
- },
+ `${appName} is running an events server and will only listen for events.\nPress Ctrl+C to quit.`
+ }
}
);
diff --git a/packages/events/src/server.ts b/packages/events/src/server.ts
index 719ca8d1..98659cfa 100644
--- a/packages/events/src/server.ts
+++ b/packages/events/src/server.ts
@@ -1,9 +1,13 @@
+/* eslint-disable max-len */
import { EventEmitter } from './events';
import type { Emitter } from './emitter';
import type { EventEmitterOptionsType } from './events/types';
-let runningEventsServer: EventsServer;
+declare global {
+ // eslint-disable-next-line no-var
+ var $PRunningEventsServer: EventsServer;
+}
/**
* The idea of an event server is to keep the application running so that it can receive requests from other servers
@@ -82,9 +86,9 @@ export async function eventsServer) {
- runningEventsServer = server;
+ globalThis.$PRunningEventsServer = server;
}
export function getEventsServer() {
- return runningEventsServer as EventsServer>;
+ return globalThis.$PRunningEventsServer as EventsServer>;
}
diff --git a/packages/logging/CHANGELOG.md b/packages/logging/CHANGELOG.md
index 2ded5506..5156d809 100644
--- a/packages/logging/CHANGELOG.md
+++ b/packages/logging/CHANGELOG.md
@@ -1,5 +1,15 @@
# @palmares/logging
+## 0.1.13
+
+### Patch Changes
+
+- add everything as peer dependencies of one another
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/core@0.1.13
+
## 0.1.12
### Patch Changes
diff --git a/packages/logging/package.json b/packages/logging/package.json
index c936daa1..55a170aa 100644
--- a/packages/logging/package.json
+++ b/packages/logging/package.json
@@ -1,6 +1,6 @@
{
"name": "@palmares/logging",
- "version": "0.1.12",
+ "version": "0.1.13",
"description": "Palmares logging interface so you can log it to the console or other places as well",
"main": "./dist/cjs/src/index.js",
"module": "./dist/esm/src/index.js",
diff --git a/packages/logging/src/config.ts b/packages/logging/src/config.ts
index 28e55bee..1889ba82 100644
--- a/packages/logging/src/config.ts
+++ b/packages/logging/src/config.ts
@@ -1,16 +1,21 @@
import type { LoggingAdapter } from './adapter';
import type { LoggerArgumentsToFilterAndFormatters, LoggingTypes } from './types';
-const cachedLogging: Partial<
- Record<
- LoggingTypes,
- {
- logger: LoggingAdapter | LoggingAdapter[];
- filter?: (args: LoggerArgumentsToFilterAndFormatters) => boolean;
- formatter?: (args: LoggerArgumentsToFilterAndFormatters) => string;
- }[]
- >
-> = {};
+declare global {
+ // eslint-disable-next-line no-var
+ var $PLogging:
+ | Partial<
+ Record<
+ LoggingTypes,
+ {
+ logger: LoggingAdapter | LoggingAdapter[];
+ filter?: (args: LoggerArgumentsToFilterAndFormatters) => boolean;
+ formatter?: (args: LoggerArgumentsToFilterAndFormatters) => string;
+ }[]
+ >
+ >
+ | undefined;
+}
/**
* This will set the logger for the given logging level.
@@ -31,8 +36,9 @@ export function setLoggerAtLevel(
formatter?: (args: LoggerArgumentsToFilterAndFormatters) => string;
}
) {
- if (cachedLogging[level]) cachedLogging[level].push(logger);
- else cachedLogging[level] = [logger];
+ if (typeof globalThis.$PLogging !== 'object') globalThis.$PLogging = {};
+ if (globalThis.$PLogging[level]) globalThis.$PLogging[level].push(logger);
+ else globalThis.$PLogging[level] = [logger];
}
/**
@@ -48,5 +54,5 @@ export function setLoggerAtLevel(
* @returns - The logger data for the given logging level.
*/
export function getLoggersAtLevel(level: LoggingTypes) {
- return cachedLogging[level];
+ return globalThis.$PLogging?.[level];
}
diff --git a/packages/logging/src/constants.ts b/packages/logging/src/constants.ts
index 67e5fc52..60eb6cac 100644
--- a/packages/logging/src/constants.ts
+++ b/packages/logging/src/constants.ts
@@ -7,5 +7,5 @@ export const stringByMessageType: Record = {
log: '\x1b[32mLOG\x1b[0m',
info: '\x1b[36mINFO\x1b[0m',
warn: '\x1b[33mWARN\x1b[0m',
- error: '\x1b[31mERROR\x1b[0m',
+ error: '\x1b[31mERROR\x1b[0m'
};
diff --git a/packages/logging/src/logger.ts b/packages/logging/src/logger.ts
index dc57f0f2..41c50361 100644
--- a/packages/logging/src/logger.ts
+++ b/packages/logging/src/logger.ts
@@ -5,11 +5,12 @@ import { getDefaultFormattedMessage } from './defaults';
import type { LoggerArgumentsToFilterAndFormatters, LoggingTypes, SavedLoggingMessagesType } from './types';
/**
- * This is the main logger class. This is the class that you will use to log messages in the application. You can log to the console but you can also log to a file or a database.
+ * This is the main logger class. This is the class that you will use to log messages in the application. You can
+ * log to the console but you can also log to a file or a database.
* You can add your own custom logger logic.
*
- * This also lets you add logging messages that you can use to log messages. This is useful when you want to log the same message multiple times. And you don't want to repeat the
- * same text over and over again.
+ * This also lets you add logging messages that you can use to log messages. This is useful when you want to log
+ * the same message multiple times. And you don't want to repeat the same text over and over again.
*
* @example
* ```ts
@@ -71,9 +72,11 @@ export class Logger {
}
/**
- * If you don't use the `loggingMessages` property in the constructor, you can use this method to add logging messages to the logger.
+ * If you don't use the `loggingMessages` property in the constructor, you can use this method to add logging
+ * messages to the logger.
*
- * On here you are only able to add logging messages one by one. So you need to call this method for each logging message you want to add.
+ * On here you are only able to add logging messages one by one. So you need to call this method for each
+ * logging message you want to add.
* This will work as a builder pattern so you can append as many logging messages as you want.
*
* @example
@@ -102,7 +105,8 @@ export class Logger {
}
/**
- * This will log the message that was added to the logger using the `appendLogMessage` method or the `loggingMessages` property in the constructor.
+ * This will log the message that was added to the logger using the `appendLogMessage` method or the
+ * `loggingMessages` property in the constructor.
*
* @example
* ```ts
@@ -128,7 +132,8 @@ export class Logger {
}
/**
- * This is the main logging method. This will log the message to the console or to a file or a database, or even an api.
+ * This is the main logging method. This will log the message to the console or to a file or a database,
+ * or even an api.
*
* With this method we can reuse the same logic over and over again on each logging type.
*
diff --git a/packages/schemas/CHANGELOG.md b/packages/schemas/CHANGELOG.md
index 5f7e9e50..294454a9 100644
--- a/packages/schemas/CHANGELOG.md
+++ b/packages/schemas/CHANGELOG.md
@@ -1,5 +1,17 @@
# @palmares/schemas
+## 0.1.20
+
+### Patch Changes
+
+- add everything as peer dependencies of one another
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/databases@0.1.16
+ - @palmares/server@0.1.13
+ - @palmares/core@0.1.13
+
## 0.1.19
### Patch Changes
diff --git a/packages/schemas/package.json b/packages/schemas/package.json
index be44d87a..9b334712 100644
--- a/packages/schemas/package.json
+++ b/packages/schemas/package.json
@@ -1,6 +1,6 @@
{
"name": "@palmares/schemas",
- "version": "0.1.19",
+ "version": "0.1.20",
"description": "This defines a default schema definition for validation of data, it abstract popular schema validation libraries like zod, yup, valibot and others\"",
"main": "./dist/cjs/src/index.js",
"module": "./dist/esm/src/index.js",
diff --git a/packages/schemas/src/adapter/index.ts b/packages/schemas/src/adapter/index.ts
index 824912a4..93cdc43e 100644
--- a/packages/schemas/src/adapter/index.ts
+++ b/packages/schemas/src/adapter/index.ts
@@ -11,6 +11,8 @@ import type { UnionFieldAdapter } from './fields/union';
import type { ErrorCodes } from './types';
export class SchemaAdapter {
+ $$type = '$PSchemaAdapter';
+ name!: string;
field!: FieldAdapter;
number?: NumberFieldAdapter;
object!: ObjectFieldAdapter;
diff --git a/packages/schemas/src/conf.ts b/packages/schemas/src/conf.ts
index a1d07ddb..52464888 100644
--- a/packages/schemas/src/conf.ts
+++ b/packages/schemas/src/conf.ts
@@ -2,7 +2,10 @@ import { NoAdapterFoundError } from './exceptions';
import type { SchemaAdapter } from './adapter';
-let cachedAdapter: SchemaAdapter | null = null;
+declare global {
+ // eslint-disable-next-line no-var
+ var $PSchemasAdapter: SchemaAdapter | undefined;
+}
/**
* Sets the default adapter to be used by all of your schemas.
@@ -10,7 +13,7 @@ let cachedAdapter: SchemaAdapter | null = null;
* @param adapter - The adapter to use when you define schemas.
*/
export function setDefaultAdapter(adapter: SchemaAdapter) {
- cachedAdapter = adapter;
+ globalThis.$PSchemasAdapter = adapter;
}
/**
@@ -21,7 +24,7 @@ export function setDefaultAdapter(adapter: SchemaAdapter) {
* @returns The default adapter.
*/
export function getDefaultAdapter(): SchemaAdapter {
- if (!cachedAdapter) throw new NoAdapterFoundError();
+ if (!globalThis.$PSchemasAdapter) throw new NoAdapterFoundError();
- return cachedAdapter;
+ return globalThis.$PSchemasAdapter;
}
diff --git a/packages/schemas/src/model.ts b/packages/schemas/src/model.ts
index 2fce992d..f637ee95 100644
--- a/packages/schemas/src/model.ts
+++ b/packages/schemas/src/model.ts
@@ -1,33 +1,27 @@
-import {
- AutoField,
- BigAutoField,
- BooleanField,
- CharField,
- DateField,
- DecimalField,
- EnumField,
- type Field,
- ForeignKeyField,
- IntegerField,
- type InternalModelClass_DoNotUse,
- type Model,
- type ModelFields,
- TextField,
- TranslatableField,
- UuidField
-} from '@palmares/databases';
-
import { TranslatableFieldNotImplementedError } from './exceptions';
import { number } from './schema';
import { ArraySchema } from './schema/array';
import { boolean } from './schema/boolean';
import { datetime } from './schema/datetime';
import { ObjectSchema } from './schema/object';
-import { Schema } from './schema/schema';
import { string } from './schema/string';
import { union } from './schema/union';
+import type { Schema } from './schema/schema';
import type { DefinitionsOfSchemaType, ExtractTypeFromObjectOfSchemas } from './schema/types';
+import type {
+ CharField,
+ DateField,
+ DecimalField,
+ EnumField,
+ Field,
+ ForeignKeyField,
+ InternalModelClass_DoNotUse,
+ Model,
+ ModelFields,
+ TextField,
+ UuidField
+} from '@palmares/databases';
async function getSchemaFromModelField(
model: ReturnType,
@@ -46,53 +40,70 @@ async function getSchemaFromModelField(
};
}
) {
+ const fieldAsAny = field as any;
let schema: Schema | undefined = undefined;
- if (field instanceof AutoField || field instanceof BigAutoField) schema = number().integer().optional();
- else if (field instanceof DecimalField)
- schema = number().decimalPlaces(field.decimalPlaces).maxDigits(field.maxDigits);
- else if (field instanceof IntegerField) schema = number().integer();
- else if (field instanceof BooleanField) schema = boolean();
- else if (field instanceof TextField || field instanceof CharField || field instanceof UuidField) {
+ if (fieldAsAny?.['$$type'] === '$PAutoField' || fieldAsAny?.['$$type'] === '$PBigAutoField')
+ schema = number().integer().optional();
+ else if (fieldAsAny?.['$$type'] === '$PDecimalField')
+ schema = number()
+ .decimalPlaces((field as DecimalField).decimalPlaces)
+ .maxDigits((field as DecimalField).maxDigits);
+ else if (fieldAsAny?.['$$type'] === '$PIntegerField') schema = number().integer();
+ else if (fieldAsAny?.['$$type'] === '$PBooleanField') schema = boolean();
+ else if (
+ fieldAsAny?.['$$type'] === '$PTextField' ||
+ fieldAsAny?.['$$type'] === '$PCharField' ||
+ fieldAsAny?.['$$type'] === '$PUuidField'
+ ) {
schema = string();
- if (field.allowBlank === false) schema = (schema as ReturnType).minLength(1);
- if (field instanceof CharField && typeof field.maxLength === 'number')
- schema = (schema as ReturnType).maxLength(field.maxLength);
- if (field instanceof UuidField) {
+ if ((field as TextField).allowBlank === false) schema = (schema as ReturnType).minLength(1);
+ if (fieldAsAny?.['$$type'] === '$PCharField' && typeof (field as CharField).maxLength === 'number')
+ schema = (schema as ReturnType).maxLength((field as CharField).maxLength);
+ if (fieldAsAny?.['$$type'] === '$PUuidField') {
schema = (schema as ReturnType).uuid();
- if (field.autoGenerate) schema = (schema as ReturnType).optional();
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ if ((field as UuidField).autoGenerate) schema = (schema as ReturnType).optional();
}
- } else if (field instanceof DateField) {
+ } else if (fieldAsAny?.['$$type'] === '$PDateField') {
schema = datetime().allowString();
- if (field.autoNow || field.autoNowAdd) schema = (schema as ReturnType).optional();
- } else if (field instanceof EnumField) {
- const allChoicesOfTypeStrings = field.choices.filter((choice: any) => typeof choice === 'string');
- const allChoicesOfTypeNumbers = field.choices.filter((choice: any) => typeof choice === 'number');
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ if ((field as DateField).autoNow || (field as DateField).autoNowAdd)
+ schema = (schema as ReturnType).optional();
+ } else if (fieldAsAny?.['$$type'] === '$PEnumField') {
+ const allChoicesOfTypeStrings = (field as EnumField).choices.filter(
+ (choice: any) => typeof choice === 'string'
+ );
+ const allChoicesOfTypeNumbers = (field as EnumField).choices.filter(
+ (choice: any) => typeof choice === 'number'
+ );
let schemaForChoicesAsStrings: Schema | undefined = undefined;
let schemaForChoicesAsNumbers: Schema | undefined = undefined;
if (allChoicesOfTypeStrings.length > 0) schemaForChoicesAsStrings = string().is([...allChoicesOfTypeStrings]);
- if (allChoicesOfTypeNumbers.length > 0) schemaForChoicesAsNumbers = number().is([...allChoicesOfTypeNumbers]);
+ if (allChoicesOfTypeNumbers.length > 0)
+ schemaForChoicesAsNumbers = number().is([...(allChoicesOfTypeNumbers as unknown as number[])]);
if (schemaForChoicesAsStrings && schemaForChoicesAsNumbers)
schema = union([schemaForChoicesAsStrings, schemaForChoicesAsNumbers]);
else if (schemaForChoicesAsStrings) schema = schemaForChoicesAsStrings;
else if (schemaForChoicesAsNumbers) schema = schemaForChoicesAsNumbers;
- } else if (field instanceof ForeignKeyField) {
+ } else if (fieldAsAny?.['$$type'] === '$PForeignKeyField') {
+ const fieldAsForeignKey = field as ForeignKeyField;
const doesADefinedFieldExistWithRelatedName =
- parent && field.relatedName && (parent as any).__data?.[field.relatedName];
+ parent && fieldAsForeignKey.relatedName && (parent as any).__data?.[fieldAsForeignKey.relatedName];
const doesADefinedFieldExistWithRelationName =
- definedFields && field.relationName && definedFields[field.relationName];
+ definedFields && fieldAsForeignKey.relationName && definedFields[fieldAsForeignKey.relationName];
const fieldWithRelatedName = doesADefinedFieldExistWithRelatedName
- ? (parent as any).__data?.[field.relatedName]
+ ? (parent as any).__data?.[fieldAsForeignKey.relatedName]
: undefined;
const fieldWithRelationName = doesADefinedFieldExistWithRelationName
- ? definedFields[field.relationName]
+ ? definedFields[fieldAsForeignKey.relationName]
: undefined;
const isFieldWithRelatedNameAModelField =
- fieldWithRelatedName instanceof Schema && (fieldWithRelatedName as any).__model !== undefined;
+ fieldWithRelatedName?.['$$type'] === '$PSchema' && fieldWithRelatedName.__model !== undefined;
const isFieldWithRelationNameAModelField =
- fieldWithRelationName instanceof Schema && (fieldWithRelationName as any).__model !== undefined;
- const relatedToModel = field.relatedTo;
- const toField = field.toField;
+ fieldWithRelationName?.['$$type'] === '$PSchema' && (fieldWithRelationName as any).__model !== undefined;
+ const relatedToModel = fieldAsForeignKey.relatedTo;
+ const toField = fieldAsForeignKey.toField;
if (Object.keys(model._initialized).length > 0) {
const engineInstance = await model.default.getEngineInstance(engineInstanceName);
const relatedToModelInstance = engineInstance.__modelsOfEngine[relatedToModel];
@@ -101,20 +112,20 @@ async function getSchemaFromModelField(
if (typeof options !== 'object') options = {};
options.foreignKeyRelation = {
schema: parent,
- isArray: fieldWithRelatedName instanceof ArraySchema,
- model: (fieldWithRelatedName as any).__model,
- fieldToSearchOnModel: field.fieldName,
- fieldToGetFromData: field.toField,
- relationOrRelatedName: field.relatedName!
+ isArray: fieldWithRelatedName['$$type'] === '$PArraySchema',
+ model: fieldWithRelatedName.__model,
+ fieldToSearchOnModel: fieldAsForeignKey.fieldName,
+ fieldToGetFromData: fieldAsForeignKey.toField,
+ relationOrRelatedName: fieldAsForeignKey.relatedName!
};
} else if (isFieldWithRelationNameAModelField) {
if (typeof options !== 'object') options = {};
options.foreignKeyRelation = {
- isArray: fieldWithRelationName instanceof ArraySchema,
+ isArray: fieldWithRelationName['$$type'] === '$PArraySchema',
model: (fieldWithRelationName as any).__model,
- fieldToSearchOnModel: field.toField,
+ fieldToSearchOnModel: fieldAsForeignKey.toField,
fieldToGetFromData: field.fieldName,
- relationOrRelatedName: field.relationName!
+ relationOrRelatedName: fieldAsForeignKey.relationName!
};
}
@@ -127,8 +138,8 @@ async function getSchemaFromModelField(
options
);
}
- } else if (field instanceof TranslatableField && field.customAttributes.schema) {
- if (field.customAttributes.schema instanceof Schema === false)
+ } else if (fieldAsAny?.['$$type'] === '$PTranslatableField' && field.customAttributes.schema) {
+ if ((field.customAttributes.schema?.['$$type'] === '$PSchema') === false)
throw new TranslatableFieldNotImplementedError(field.fieldName);
schema = field.customAttributes.schema;
}
@@ -409,7 +420,7 @@ export function modelSchema<
let schema = (fieldsAsObject as any)[key as any];
const optionsForForeignKeyRelation: any = {};
- if (!schema || value instanceof ForeignKeyField) {
+ if (!schema || (value as any)?.['$$type'] === '$PForeignKeyField') {
const newSchema = await getSchemaFromModelField(
model,
value,
diff --git a/packages/schemas/src/schema/array.ts b/packages/schemas/src/schema/array.ts
index cb73cf7c..31eb5452 100644
--- a/packages/schemas/src/schema/array.ts
+++ b/packages/schemas/src/schema/array.ts
@@ -28,6 +28,7 @@ export class ArraySchema<
TDefinitions extends DefinitionsOfSchemaType = DefinitionsOfSchemaType,
TSchemas extends readonly [Schema, ...Schema[]] | [[Schema]] = [[Schema]]
> extends Schema {
+ protected $$type = '$PArraySchema';
protected fieldType = 'array';
protected __schemas: readonly [Schema, ...Schema[]] | [[Schema]];
diff --git a/packages/schemas/src/schema/object.ts b/packages/schemas/src/schema/object.ts
index 3cb33ef4..606cf673 100644
--- a/packages/schemas/src/schema/object.ts
+++ b/packages/schemas/src/schema/object.ts
@@ -110,7 +110,8 @@ export class ObjectSchema<
}
}
};
- if (valueToTransform instanceof Schema) promises.push(awaitableTransformer());
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ if (valueToTransform?.['$$type'] === '$PSchema') promises.push(awaitableTransformer());
}
await Promise.all(promises);
diff --git a/packages/schemas/src/schema/schema.ts b/packages/schemas/src/schema/schema.ts
index d7ba84b4..ef7d6a6e 100644
--- a/packages/schemas/src/schema/schema.ts
+++ b/packages/schemas/src/schema/schema.ts
@@ -27,6 +27,7 @@ export class Schema<
},
TDefinitions extends DefinitionsOfSchemaType = DefinitionsOfSchemaType
> {
+ protected $$type = '$PSchema';
protected fieldType = 'schema';
// Those functions will assume control of the validation process on adapters, instead of the schema.
// Why this is used? The idea is that the Schema has NO idea
diff --git a/packages/schemas/src/utils.ts b/packages/schemas/src/utils.ts
index 26165764..2156c416 100644
--- a/packages/schemas/src/utils.ts
+++ b/packages/schemas/src/utils.ts
@@ -1,8 +1,8 @@
-import { SchemaAdapter } from './adapter';
import { getDefaultAdapter } from './conf';
import { checkType, nullable, optional } from './validators/schema';
import { Validator } from './validators/utils';
+import type { SchemaAdapter } from './adapter';
import type { FieldAdapter } from './adapter/fields';
import type { ValidationDataBasedOnType } from './adapter/types';
import type { Schema } from './schema/schema';
@@ -15,6 +15,7 @@ import type { FallbackFunctionsType, SupportedSchemas } from './types';
* fallback to our default implementation of the schema validation.
*/
export class WithFallback {
+ protected $$type = '$PWithFallback';
fallbackFor: Set<
| keyof Omit, 'withFallback' | 'parsers'>
| keyof ValidationDataBasedOnType['parsers']
@@ -185,7 +186,8 @@ export async function defaultTransform(
};
const appendRequiredFallbacks = () => {
- const hasFallbacks = schemaWithPrivateFields.__rootFallbacksValidator instanceof Validator;
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ const hasFallbacks = schemaWithPrivateFields.__rootFallbacksValidator?.['$$type'] === '$PValidator';
if (hasFallbacks) {
Validator.createAndAppendFallback(schema, optional(schemaWithPrivateFields.__optional));
Validator.createAndAppendFallback(schema, nullable(schemaWithPrivateFields.__nullable));
@@ -224,7 +226,8 @@ export async function defaultTransform(
if (options.shouldAddStringVersion)
stringVersion = await fieldAdapter.toString(adapter, adapter.field, validationDataForStringVersion);
- if (translatedSchemaOrWithFallback instanceof WithFallback) {
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ if ((translatedSchemaOrWithFallback as WithFallback)?.['$$type'] === '$PWithFallback') {
appendRootFallback();
for (const fallback of translatedSchemaOrWithFallback.fallbackFor) {
checkIfShouldAppendFallbackAndAppend(fallback);
@@ -272,15 +275,18 @@ export async function defaultTransformToAdapter(
const isTransformedSchemasEmpty = Object.keys(transformedSchemas).length <= 0;
if (isTransformedSchemasEmpty) {
const adapterInstanceToUse =
- options.schemaAdapter instanceof SchemaAdapter ? options.schemaAdapter : getDefaultAdapter();
- schema['__transformedSchemas'][adapterInstanceToUse.constructor.name] = {
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ (options.schemaAdapter as SchemaAdapter)?.['$$type'] === '$PSchemaAdapter'
+ ? options.schemaAdapter
+ : getDefaultAdapter();
+ schema['__transformedSchemas'][(adapterInstanceToUse as SchemaAdapter).name] = {
transformed: false,
adapter: adapterInstanceToUse,
schemas: []
};
}
- const schemaAdapterNameToUse = options.schemaAdapter?.constructor.name || Object.keys(transformedSchemas)[0];
+ const schemaAdapterNameToUse = options.schemaAdapter?.name || Object.keys(transformedSchemas)[0];
const isACustomSchemaAdapterAndNotYetDefined =
// eslint-disable-next-line ts/no-unnecessary-condition
transformedSchemas[schemaAdapterNameToUse] === undefined && options.schemaAdapter !== undefined;
diff --git a/packages/schemas/src/validators/utils.ts b/packages/schemas/src/validators/utils.ts
index 45804c57..a598a9a4 100644
--- a/packages/schemas/src/validators/utils.ts
+++ b/packages/schemas/src/validators/utils.ts
@@ -43,6 +43,7 @@ const typeByPriority = Object.entries(priorityByType).reduce(
* more powerful, because if we need to add any extra priorities we can do that easily without changing the schema.
*/
export class Validator {
+ protected $$type = '$PValidator';
child?: Validator;
parent?: Validator;
fallbackNamesAdded = new Set();
diff --git a/packages/server/CHANGELOG.md b/packages/server/CHANGELOG.md
index a5a442ec..670f1bd8 100644
--- a/packages/server/CHANGELOG.md
+++ b/packages/server/CHANGELOG.md
@@ -1,5 +1,16 @@
# @palmares/server
+## 0.1.13
+
+### Patch Changes
+
+- add everything as peer dependencies of one another
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/core@0.1.13
+ - @palmares/logging@0.1.13
+
## 0.1.12
### Patch Changes
diff --git a/packages/server/package.json b/packages/server/package.json
index 8b35906a..9f4caadc 100644
--- a/packages/server/package.json
+++ b/packages/server/package.json
@@ -1,6 +1,6 @@
{
"name": "@palmares/server",
- "version": "0.1.12",
+ "version": "0.1.13",
"files": [
"dist",
"README.md"
@@ -48,7 +48,7 @@
"url": "https://github.com/palmaresHQ/palmares/issues"
},
"homepage": "https://github.com/palmaresHQ/palmares#readme",
- "peerDependencies": {
+ "dependencies": {
"@palmares/core": "workspace:*",
"@palmares/logging": "workspace:*"
}
diff --git a/packages/server/src/adapters/index.ts b/packages/server/src/adapters/index.ts
index 95d10aaa..681f539b 100644
--- a/packages/server/src/adapters/index.ts
+++ b/packages/server/src/adapters/index.ts
@@ -18,24 +18,29 @@ export function serverAdapter<
TCustomServerSettings extends (typeof ServerAdapter)['customServerSettings']
>(args: {
/**
- * This is the {@link ServerRequestAdapter}. The request will hold all of the request data from the server, this way we can
- * translate the original request to Palmares request, everything is all lazy loaded.
+ * This is the {@link ServerRequestAdapter}. The request will hold all of the request data from
+ * the server, this way we can translate the original request to Palmares request, everything
+ * is all lazy loaded.
*/
request: TServerRequestAdapter;
/**
- * This is the {@link ServerResponseAdapter} instance to be used by the server so we can translate Palmares's response to the server's response.
+ * This is the {@link ServerResponseAdapter} instance to be used by the server so we can
+ * translate Palmares's response to the server's response.
*/
response: TServerResponseAdapter;
/**
- * This is the {@link ServerRouterAdapter} instance to be used by the server so we can translate Palmares's router to the server's router.
+ * This is the {@link ServerRouterAdapter} instance to be used by the server so we can translate
+ * Palmares's router to the server's router.
*/
routers: TServerRouterAdapter;
customServerSettings: TCustomServerSettings;
/**
- * This is the function that will be called by Palmares to load the server. Usually you add the server constructor here. Notice that this function
- * DOES NOT start the server, it will be used for adding middleware, custom logic, etc.
+ * This is the function that will be called by Palmares to load the server. Usually you add the
+ * server constructor here. Notice that this function DOES NOT start the server, it will be used
+ * for adding middleware, custom logic, etc.
*
- * You can use a global Map to store the server instance, this way you can access it later on the start function. Since this is functional and not class based.
+ * You can use a global Map to store the server instance, this way you can access it later on the
+ * start function. Since this is functional and not class based.
*
* @example
* ```
@@ -116,6 +121,7 @@ export function serverAdapter<
}
export class ServerAdapter {
+ $$type = '$PServerAdapter';
serverName: string;
settings: AllServerSettingsType['servers'][string];
allSettings: AllServerSettingsType;
@@ -137,10 +143,12 @@ export class ServerAdapter {
}
/**
- * This is the function that will be called by Palmares to load the server. Usually you add the server constructor here. Notice that this function
- * DOES NOT start the server, it will be used for adding middleware, custom logic, etc.
+ * This is the function that will be called by Palmares to load the server. Usually you add the
+ * server constructor here. Notice that this function DOES NOT start the server, it will be used
+ * for adding middleware, custom logic, etc.
*
- * You can use a global Map to store the server instance, this way you can access it later on the start function. Since this is functional and not class based.
+ * You can use a global Map to store the server instance, this way you can access it later on the
+ * start function. Since this is functional and not class based.
*
* @example
* ```
diff --git a/packages/server/src/adapters/serverless.ts b/packages/server/src/adapters/serverless.ts
index 40c6a0ff..3dbcd80f 100644
--- a/packages/server/src/adapters/serverless.ts
+++ b/packages/server/src/adapters/serverless.ts
@@ -54,6 +54,7 @@ export function serverlessAdapter<
}
export class ServerlessAdapter {
+ $$type = '$PServerlessAdapter';
serverName: string;
settings: ServerSettingsType;
allSettings: AllServerSettingsType;
diff --git a/packages/server/src/app/index.ts b/packages/server/src/app/index.ts
index a5cd29bf..47c664e2 100644
--- a/packages/server/src/app/index.ts
+++ b/packages/server/src/app/index.ts
@@ -2,16 +2,25 @@ import { appServer } from '@palmares/core';
import { ServerAlreadyInitializedError } from './exceptions';
import { initializeRouters } from './utils';
-import { ServerAdapter } from '../adapters';
import { DEFAULT_SERVER_PORT } from '../defaults';
import { serverLogger } from '../logging';
+import type { ServerAdapter } from '../adapters';
import type { ServerlessAdapter } from '../adapters/serverless';
import type { ServerDomain } from '../domain/types';
import type { AllServerSettingsType, ServerSettingsType } from '../types';
-const serverInstances: Map =
- new Map();
+declare global {
+ // eslint-disable-next-line no-var
+ var $PServerInstances:
+ | Map
+ | undefined;
+}
+
+function getServerInstances() {
+ if (!globalThis.$PServerInstances) globalThis.$PServerInstances = new Map();
+ return globalThis.$PServerInstances;
+}
/**
* This is the http app server, it is responsible for loading the server and starting it configuring all of
@@ -35,6 +44,7 @@ export const httpAppServer = appServer({
}) => {
const serverEntries = Object.entries(args.settings.servers);
for (const [serverName, serverSettings] of serverEntries) {
+ const serverInstances = getServerInstances();
const serverWasNotInitialized = !serverInstances.has(serverName);
if (serverWasNotInitialized) {
const newServerInstance = new serverSettings.server(
@@ -51,10 +61,12 @@ export const httpAppServer = appServer({
},
start: async (configureCleanup) => {
const promises: Promise[] = [];
+ const serverInstances = getServerInstances();
for (const [serverName, { server, settings }] of serverInstances.entries()) {
- if (server instanceof ServerAdapter) {
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ if ((server as ServerAdapter)?.$$type === '$PServerAdapter') {
promises.push(
- server.start(serverName, settings.port || DEFAULT_SERVER_PORT, () => {
+ (server as ServerAdapter).start(serverName, settings.port || DEFAULT_SERVER_PORT, () => {
serverLogger.logMessage('START_SERVER', { port: settings.port || DEFAULT_SERVER_PORT, serverName });
})
);
@@ -63,11 +75,13 @@ export const httpAppServer = appServer({
await Promise.all(promises.concat(Promise.resolve(configureCleanup())));
},
close: async () => {
+ const serverInstances = getServerInstances();
for (const [serverName, { server }] of serverInstances.entries()) {
serverLogger.logMessage('STOP_SERVER', {
serverName
});
- if (server instanceof ServerAdapter) await server.close();
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ if ((server as ServerAdapter)?.$$type === '$PServerAdapter') await (server as ServerAdapter).close();
}
}
});
diff --git a/packages/server/src/app/utils.ts b/packages/server/src/app/utils.ts
index 217cce15..c996ce54 100644
--- a/packages/server/src/app/utils.ts
+++ b/packages/server/src/app/utils.ts
@@ -1,12 +1,11 @@
import { getDefaultStd } from '@palmares/core';
+import { Server } from 'http';
import {
HandlerOrHandlersShouldBeDefinedOnRouterAdapterError,
RedirectionStatusCodesMustHaveALocationHeaderError,
ResponseNotReturnedFromResponseOnMiddlewareError
} from './exceptions';
-import { ServerAdapter } from '../adapters';
-import { ServerlessAdapter } from '../adapters/serverless';
import {
DEFAULT_NOT_FOUND_STATUS_TEXT_MESSAGE,
DEFAULT_RESPONSE_HEADERS_LOCATION_HEADER_KEY,
@@ -21,10 +20,12 @@ import { HTTP_404_NOT_FOUND, HTTP_500_INTERNAL_SERVER_ERROR, isRedirect } from '
import { AsyncGeneratorFunction, FileLike, GeneratorFunction } from '../response/utils';
import { path } from '../router';
+import type { ServerAdapter } from '../adapters';
import type { ServerRequestAdapter } from '../adapters/requests';
import type { ServerResponseAdapter } from '../adapters/response';
import type { ServerRouterAdapter } from '../adapters/routers';
import type { HandlerForServerless } from '../adapters/routers/serverless';
+import type { ServerlessAdapter } from '../adapters/serverless';
import type { ServerDomain } from '../domain/types';
import type { Middleware } from '../middleware';
import type { BaseRouter, MethodsRouter } from '../router/routers';
@@ -80,9 +81,11 @@ async function* wrappedMiddlewareRequests(middlewares: Middleware[], request: Re
middlewareIndex++;
if (middleware.request) {
const responseOrRequest = await middleware.request(request);
- if (responseOrRequest instanceof Response) yield [middlewareIndex, responseOrRequest] as const;
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ if ((responseOrRequest as Response)?.['$$type'] === '$PResponse')
+ yield [middlewareIndex, responseOrRequest as Response] as const;
else {
- request = responseOrRequest;
+ request = responseOrRequest as Request;
yield [middlewareIndex, responseOrRequest] as const;
}
}
@@ -118,11 +121,13 @@ async function appendErrorToResponseAndReturnResponseOrThrow(
error: Error | Response,
handler500?: AllServerSettingsType['servers'][string]['handler500']
) {
- if (error instanceof Response) return error;
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ if ((error as Response)?.['$$type'] === '$PResponse') return error as Response;
else if (!handler500) throw error;
response = await Promise.resolve(handler500(response));
- if (response instanceof Response) return response;
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ if ((response as Response)?.['$$type'] === '$PResponse') return response as Response;
else throw error;
}
@@ -229,7 +234,7 @@ async function translateResponseToServerResponse(
const isFileResponse =
// eslint-disable-next-line ts/no-unnecessary-condition
(response.body && (response.body as any) instanceof Blob) ||
- (response.body as any) instanceof FileLike ||
+ (response.body as any)?.$$type === '$PFileLike' ||
(response.body as any) instanceof ArrayBuffer;
// eslint-disable-next-line ts/no-unnecessary-condition
if (isRedirectResponse && !response.headers?.[DEFAULT_RESPONSE_HEADERS_LOCATION_HEADER_KEY])
@@ -269,12 +274,15 @@ async function translateResponseToServerResponse(
}
/**
- * There are two ways of translating the path, either use {@link ServerRouterAdapter.parseHandler} which will parse each handler (method) at a time. Or use
- * {@link ServerRouterAdapter.parseHandlers} which will parse all of the handlers at once.
+ * There are two ways of translating the path, either use {@link ServerRouterAdapter.parseHandler} which will
+ * parse each handler (method) at a time. Or use {@link ServerRouterAdapter.parseHandlers} which will parse
+ * all of the handlers at once.
*
- * Since they are pretty similar and they both need to translate the path we use this factory function to extract this common functionality on both of them.
+ * Since they are pretty similar and they both need to translate the path we use this factory function to extract
+ * this common functionality on both of them.
*
- * @param serverAdapter - The server adapter that was selected. We will call the {@link ServerRouterAdapter.parseRoute} method on it.
+ * @param serverAdapter - The server adapter that was selected. We will call the {@link ServerRouterAdapter.parseRoute}
+ * method on it.
*
* @returns - A function that can be used to translate the path.
*/
@@ -307,9 +315,11 @@ function translatePathFactory(serverAdapter: ServerAdapter | ServerlessAdapter)
}
/**
- * Responsible for wrapping the handler and the middlewares into a single function that will be called when a request is made to the server.
+ * Responsible for wrapping the handler and the middlewares into a single function that will be called when a
+ * request is made to the server.
*
- * The server adapter is responsible for passing the data it needs to be able to safely translate the request and response during it's lifecycle.
+ * The server adapter is responsible for passing the data it needs to be able to safely translate the request
+ * and response during it's lifecycle.
*
* @param method - The method that was extracted from the router.
* @param middlewares - The middlewares that will be applied to the request.
@@ -345,17 +355,19 @@ function wrapHandlerAndMiddlewares(
let response: Response | undefined = undefined;
let wasErrorAlreadyHandledInRequestLifecycle = false;
- // This is the index of the middleware that we are currently handling for the request. So on the response we start from the last to the first.
+ // This is the index of the middleware that we are currently handling for the request. So on the
+ // response we start from the last to the first.
let middlewareOnionIndex = 0;
try {
// Go through all of the middlewares and apply them to the request or modify the request.
for await (const [middlewareIndex, responseOrRequest] of wrappedMiddlewareRequests(middlewares, request)) {
middlewareOnionIndex = middlewareIndex;
- const isResponse = responseOrRequest instanceof Response;
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ const isResponse = (responseOrRequest as Response)?.['$$type'] === '$PResponse';
if (isResponse)
response = appendTranslatorToResponse(
- responseOrRequest,
+ responseOrRequest as Response,
server,
server.response,
serverRequestAndResponseData,
@@ -363,7 +375,7 @@ function wrapHandlerAndMiddlewares(
);
else
request = appendTranslatorToRequest(
- responseOrRequest,
+ responseOrRequest as Request,
server,
server.request,
serverRequestAndResponseData,
@@ -387,10 +399,11 @@ function wrapHandlerAndMiddlewares(
if (handlerResponse) response = handlerResponse;
}
} catch (error) {
- const isResponseError = error instanceof Response;
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ const isResponseError = (error as Response)?.['$$type'] === '$PResponse';
const errorAsError = error as Error;
- let errorResponse: Response = isResponseError
- ? error
+ let errorResponse: Response = isResponseError
+ ? (error as Response)
: server.settings.debug === true
? DEFAULT_SERVER_ERROR_RESPONSE(errorAsError, server.allSettings, server.domains)
: new Response(undefined, { status: HTTP_500_INTERNAL_SERVER_ERROR });
@@ -419,7 +432,8 @@ function wrapHandlerAndMiddlewares(
try {
if (response) {
for await (const modifiedResponse of wrappedMiddlewareResponses(middlewares, response, middlewareOnionIndex)) {
- const isResponse = modifiedResponse instanceof Response;
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ const isResponse = (modifiedResponse as Response)?.['$$type'] === '$PResponse';
if (isResponse)
response = appendTranslatorToResponse(
modifiedResponse,
@@ -439,9 +453,10 @@ function wrapHandlerAndMiddlewares(
}
} catch (error) {
if (wasErrorAlreadyHandledInRequestLifecycle === false) {
- const isResponseError = error instanceof Response;
- let errorResponse: Response = isResponseError
- ? error
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ const isResponseError = (error as Response)?.['$$type'] === '$PResponse';
+ let errorResponse: Response = isResponseError
+ ? (error as Response)
: server.settings.debug === true
? DEFAULT_SERVER_ERROR_RESPONSE(error as Error, server.allSettings, server.domains)
: new Response(undefined, { status: HTTP_500_INTERNAL_SERVER_ERROR });
@@ -543,7 +558,8 @@ function generateServerlessHandler(
args.pathOfHandlerFile[args.pathOfHandlerFile.length - 1] =
`${args.pathOfHandlerFile[args.pathOfHandlerFile.length - 1]}.${extension}`;
- // The serverless folder location is used to go back to the settings file. So we need to know how many directories we need to go back.
+ // The serverless folder location is used to go back to the settings file. So we need to know how many
+ // directories we need to go back.
let numberOfTwoDotsOnServerlessLocation = 0;
let numberOfDirectoriesToGoBackOnSettingsFromServerlessFolderLocation = 0;
for (const pathParts of (settings.serverlessFolderLocation || '').split('/')) {
@@ -599,10 +615,12 @@ function generateServerlessHandler(
}
/**
- * This will take care of the routing. It's just used on serverless environments. On serverless you might define a function but
- * the routing is not handled by the serverless. This is a workaround for that. It's not the most efficient way but it does work.
+ * This will take care of the routing. It's just used on serverless environments. On serverless you might
+ * define a function but the routing is not handled by the serverless. This is a workaround for that. It's
+ * not the most efficient way but it does work.
*
- * We could use a custom server for just using the router, but not all servers support just routing so we prefer to do that way.
+ * We could use a custom server for just using the router, but not all servers support just routing so we
+ * prefer to do that way.
*/
function doTheRoutingForServerlessOnly(
serverAdapter: ServerlessAdapter,
@@ -637,7 +655,8 @@ function doTheRoutingForServerlessOnly(
}
/**
- * A generator that will yield all of the routers that were extracted from the domains and the settings. Used for {@link ServerRouterAdapter.parseHandlers} function.
+ * A generator that will yield all of the routers that were extracted from the domains and the settings.
+ * Used for {@link ServerRouterAdapter.parseHandlers} function.
*/
export async function* getAllRouters(
domains: ServerDomain[],
@@ -656,8 +675,14 @@ export async function* getAllRouters(
) {
const methodToFilterWhenOnServerlessEnvironment = options?.serverless?.use.method;
const routeToFilterWhenOnServerlessEnvironment = options?.serverless?.use.route;
- const isUseServerless = serverAdapter instanceof ServerlessAdapter && typeof options?.serverless?.use === 'object';
- const isGeneratingServerless = serverAdapter instanceof ServerlessAdapter && options?.serverless?.generate === true;
+ const isUseServerless =
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ (serverAdapter as ServerlessAdapter)?.$$type === '$PServerlessAdapter' &&
+ typeof options?.serverless?.use === 'object';
+
+ const isGeneratingServerless =
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ (serverAdapter as ServerlessAdapter)?.$$type === '$PServerlessAdapter' && options?.serverless?.generate === true;
const translatePath = translatePathFactory(serverAdapter);
const existsRootMiddlewares = Array.isArray(settings.middlewares) && settings.middlewares.length > 0;
@@ -677,7 +702,7 @@ export async function* getAllRouters(
if (isUseServerless && typeof routeToFilterWhenOnServerlessEnvironment === 'string') {
if (
doTheRoutingForServerlessOnly(
- serverAdapter,
+ serverAdapter as ServerlessAdapter,
router.partsOfPath,
router.urlParams,
routeToFilterWhenOnServerlessEnvironment
@@ -771,7 +796,8 @@ export async function* getAllRouters(
}
/**
- * A generator that will yield all of the routers that were extracted from the domains and the settings. Used for {@link ServerRouterAdapter.parseHandler} function.
+ * A generator that will yield all of the routers that were extracted from the domains and the
+ * settings. Used for {@link ServerRouterAdapter.parseHandler} function.
*/
export async function* getAllHandlers(
domains: ServerDomain[],
@@ -837,7 +863,8 @@ export function wrap404HandlerAndRootMiddlewares(
response as Response,
middlewares.length - 1
)) {
- const isResponse = modifiedResponse instanceof Response;
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ const isResponse = (modifiedResponse as Response)?.['$$type'] === '$PResponse';
if (isResponse)
response = appendTranslatorToResponse(
modifiedResponse,
@@ -863,7 +890,8 @@ export function wrap404HandlerAndRootMiddlewares(
}
/**
- * This will initialize all of the routers in sequence, it'll extract all of the routes from all of the domains and initialize them on the server.
+ * This will initialize all of the routers in sequence, it'll extract all of the routes from all of
+ * the domains and initialize them on the server.
*/
export async function initializeRouters(
domains: ServerDomain[],
@@ -920,17 +948,18 @@ export async function initializeRouters(
return (router.handlers.get(method) as any)?.handler(serverRequestAndResponseData);
else return (router.handlers.get('all') as any)?.handler(serverRequestAndResponseData);
} else if (useServerless === false && serverAdapter.routers.parseHandlers) {
- if (serverAdapter instanceof ServerAdapter) {
- serverAdapter.routers.parseHandlers(
+ if ((serverAdapter as ServerAdapter).$$type === '$PServerAdapter') {
+ serverAdapter = serverAdapter as ServerAdapter;
+ serverAdapter.routers.parseHandlers?.(
serverAdapter,
router.translatedPath,
router.handlers as Parameters>['2'],
router.queryParams,
wrapped404Handler
);
- } else if (serverAdapter instanceof ServerlessAdapter) {
- await serverAdapter.routers.parseHandlers(
- serverAdapter,
+ } else if ((serverAdapter as ServerlessAdapter).$$type === '$PServerlessAdapter') {
+ await (serverAdapter as ServerlessAdapter).routers.parseHandlers(
+ serverAdapter as ServerlessAdapter,
allSettings.basePath,
router.translatedPath,
router.handlers as Parameters>['3'],
@@ -941,14 +970,18 @@ export async function initializeRouters(
}
}
// eslint-disable-next-line ts/no-unnecessary-condition
- } else if (serverAdapter instanceof ServerAdapter && serverAdapter.routers.parseHandler !== undefined) {
+ } else if (
+ (serverAdapter as ServerAdapter).$$type === '$PServerAdapter' &&
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ (serverAdapter as ServerAdapter).routers.parseHandler !== undefined
+ ) {
const translatePath = translatePathFactory(serverAdapter);
const handlers = getAllHandlers(domains, settings, serverAdapter);
for await (const handler of handlers) {
const translatedPath = translatePath(handler.path, handler.partsOfPath, handler.urlParams);
- serverAdapter.routers.parseHandler(
- serverAdapter,
+ (serverAdapter as ServerAdapter).routers.parseHandler(
+ serverAdapter as ServerAdapter,
translatedPath,
handler.method as MethodTypes | 'all',
handler.handler,
diff --git a/packages/server/src/request/utils.ts b/packages/server/src/request/utils.ts
index 8b56ff16..7d860c82 100644
--- a/packages/server/src/request/utils.ts
+++ b/packages/server/src/request/utils.ts
@@ -40,6 +40,7 @@ export function parseQueryParams(
*/
export function formDataLikeFactory() {
return class FormDataLike {
+ $$type = '$PFormDataLike';
proxyCallback: ConstructorParameters[0];
data: Record;
diff --git a/packages/server/src/response/index.ts b/packages/server/src/response/index.ts
index 55623131..7a88e0e0 100644
--- a/packages/server/src/response/index.ts
+++ b/packages/server/src/response/index.ts
@@ -6,7 +6,6 @@ import {
isServerError,
isSuccess
} from './status';
-import { FileLike } from './utils';
import {
DEFAULT_RESPONSE_CONTENT_HEADER_VALUE_HTML,
DEFAULT_RESPONSE_CONTENT_HEADER_VALUE_JSON,
@@ -20,6 +19,7 @@ import { formDataLikeFactory } from '../request/utils';
import type { RedirectionStatusCodes, StatusCodes } from './status';
import type { HeadersType, ResponseTypeType } from './types';
+import type { FileLike } from './utils';
import type { Request } from '../request';
import type { FormDataLike } from '../request/types';
@@ -58,6 +58,7 @@ export class Response<
* });
* ```
*/
+ protected $$type = '$PResponse';
private __serverRequestAndResponseData: any = undefined;
private __error: Error | undefined = undefined;
@@ -89,7 +90,7 @@ export class Response<
typeof body === 'object' &&
body !== null &&
!(body instanceof Blob) &&
- !(body instanceof FileLike) &&
+ !((body as unknown as FileLike).$$type === '$PFileLike') &&
!(body instanceof ArrayBuffer);
this.body = isAJsonObject ? (JSON.stringify(body) as unknown as TBody) : (body as TBody);
this.context = options?.context as TResponse['context'] extends object ? TResponse['context'] : undefined;
@@ -317,9 +318,10 @@ export class Response<
options.statusText = typeof options.statusText === 'string' ? options.statusText : 'OK';
}
- if (hasNotDefinedFileHeader && (body instanceof FileLike || body instanceof Blob)) {
- const contentType = body instanceof FileLike ? body.blob.type : body.type;
- const fileName = body instanceof FileLike ? body.name : options?.filename ? options.filename : undefined;
+ if (hasNotDefinedFileHeader && ((body as any).$$type === '$PFileLike' || body instanceof Blob)) {
+ const contentType = (body as any).$$type === '$PFileLike' ? (body as FileLike).blob.type : (body as Blob).type;
+ const fileName =
+ (body as any).$$type === '$PFileLike' ? (body as FileLike) : options?.filename ? options.filename : undefined;
if (options) {
if (options.headers) {
if (!(options.headers as any)[DEFAULT_RESPONSE_HEADERS_CONTENT_HEADER_KEY])
@@ -836,7 +838,8 @@ export class Response<
// eslint-disable-next-line ts/require-await
async formData() {
const formDataLike = formDataLikeFactory();
- if (this.body instanceof formDataLike) return this.body;
+ // eslint-disable-next-line ts/no-unnecessary-condition
+ if (this.body && (this.body as any)?.['$$type'] === '$PFormDataLike') return this.body as FormDataLike;
else if (typeof this.body === 'object') {
return new formDataLike({
getKeys: () => Object.keys(this.body as object),
diff --git a/packages/server/src/response/utils.ts b/packages/server/src/response/utils.ts
index 73b2dd14..2b3fae45 100644
--- a/packages/server/src/response/utils.ts
+++ b/packages/server/src/response/utils.ts
@@ -4,6 +4,7 @@
* This is just a simple class that also holds the name of the file.
*/
export class FileLike {
+ $$type = '$PFileLike';
blob: Blob;
name: string;
diff --git a/packages/server/src/router/functions.ts b/packages/server/src/router/functions.ts
index bccd1975..41889c74 100644
--- a/packages/server/src/router/functions.ts
+++ b/packages/server/src/router/functions.ts
@@ -75,11 +75,14 @@ export function path(path: TPath = '' as TPath) {
* This is more specific version of {@link path} that allows you to nest paths without losing track of the parent path.
* See {@link path} for more beginner-friendly documentation.
*
- * So, imagine this problem: you want to define a parent router, your parent router defines query parameters, params, etc.
- * But you want to create the child router
- * without losing track of all of that information. What is the full url? What types are the query parameters? What types are the params? etc.
+ * So, imagine this problem: you want to define a parent router, your parent router defines query parameters,
+ * params, etc.
*
- * This function solves that problem, it allows you to create a child router without losing track of the parent router by just passing the parent router as a generic.
+ * But you want to create the child router without losing track of all of that information. What is the full url? What
+ * types are the query parameters? What types are the params? etc.
+ *
+ * This function solves that problem, it allows you to create a child router without losing track of the parent router
+ * by just passing the parent router as a generic.
*
* On **routers.ts** file:
* @example
@@ -119,8 +122,8 @@ export function path(path: TPath = '' as TPath) {
* ]);
* ```
*
- * This will create a circular dependency in typescript and it'll complain with you. So guarantee that you are not trying not using `.nested` function
- * in the same router you use as parent. Separate them in different variables.
+ * This will create a circular dependency in typescript and it'll complain with you. So guarantee that you are not
+ * trying not using `.nested` function in the same router you use as parent. Separate them in different variables.
*/
export function pathNested(parentRouter?: TParentRouter) {
return (path: TPath = '' as TPath) => {
diff --git a/packages/tests/CHANGELOG.md b/packages/tests/CHANGELOG.md
index a0a24cf0..f2e77394 100644
--- a/packages/tests/CHANGELOG.md
+++ b/packages/tests/CHANGELOG.md
@@ -1,5 +1,15 @@
# @palmares/tests
+## 0.1.13
+
+### Patch Changes
+
+- add everything as peer dependencies of one another
+- Everything now has peer dependencies instead of dependency
+- Updated dependencies
+- Updated dependencies
+ - @palmares/core@0.1.13
+
## 0.1.12
### Patch Changes
diff --git a/packages/tests/package.json b/packages/tests/package.json
index e5f5c376..354665e5 100644
--- a/packages/tests/package.json
+++ b/packages/tests/package.json
@@ -1,6 +1,6 @@
{
"name": "@palmares/tests",
- "version": "0.1.12",
+ "version": "0.1.13",
"description": "This defines a default test framework testing stuff inside of the framework",
"main": "./dist/cjs/src/index.js",
"module": "./dist/esm/src/index.js",
diff --git a/packages/tests/src/utils.ts b/packages/tests/src/utils.ts
index 7d829ae9..45968c30 100644
--- a/packages/tests/src/utils.ts
+++ b/packages/tests/src/utils.ts
@@ -1,14 +1,17 @@
import type { TestAdapter } from './adapter';
-let testAdapter: TestAdapter | undefined = undefined;
+declare global {
+ // eslint-disable-next-line no-var
+ var $PTestAdapter: TestAdapter | undefined;
+}
export function setTestAdapter(adapter: TestAdapter) {
- testAdapter = adapter;
+ globalThis.$PTestAdapter = adapter;
}
export function getTestAdapter() {
- if (!testAdapter) {
+ if (!globalThis.$PTestAdapter) {
throw new Error('Test adapter not set');
}
- return testAdapter;
+ return globalThis.$PTestAdapter;
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 3f8e0b99..317acc20 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -118,7 +118,7 @@ importers:
version: 18.3.1(react@18.3.1)
tailwindcss:
specifier: 3.4.7
- version: 3.4.7(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
+ version: 3.4.7(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
typescript:
specifier: ^5.5.4
version: 5.5.4
@@ -344,7 +344,7 @@ importers:
version: 8.4.31
tailwindcss:
specifier: ^3.4.7
- version: 3.4.7(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.14.2)(typescript@5.5.4))
+ version: 3.4.7(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.14.2)(typescript@5.5.4))
typescript:
specifier: ^5.5.4
version: 5.5.4
@@ -507,13 +507,246 @@ importers:
version: 6.9.15
jest:
specifier: ^29.7.0
- version: 29.7.0(@types/node@22.5.2)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))
+ version: 29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
nodemon:
specifier: ^3.1.4
version: 3.1.4
- libs/console-logging:
+ examples/with-code-share: {}
+
+ examples/with-code-share/apps/client:
+ dependencies:
+ '@faker-js/faker':
+ specifier: ^8.4.1
+ version: 8.4.1
+ '@palmares/client':
+ specifier: workspace:*
+ version: link:../../../../packages/client
+ '@tanstack/react-query':
+ specifier: ^5.55.0
+ version: 5.55.0(react@18.3.1)
+ '@tanstack/react-virtual':
+ specifier: ^3.10.7
+ version: 3.10.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ react:
+ specifier: ^18.3.1
+ version: 18.3.1
+ react-dom:
+ specifier: ^18.3.1
+ version: 18.3.1(react@18.3.1)
+ shared:
+ specifier: workspace:*
+ version: link:../../shared
+ devDependencies:
+ '@chromatic-com/storybook':
+ specifier: ^1.9.0
+ version: 1.9.0(react@18.3.1)
+ '@eslint/js':
+ specifier: ^9.10.0
+ version: 9.10.0
+ '@palmares/core':
+ specifier: workspace:*
+ version: link:../../../../packages/core
+ '@palmares/server':
+ specifier: workspace:*
+ version: link:../../../../packages/server
+ '@storybook/addon-essentials':
+ specifier: ^8.2.9
+ version: 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/addon-interactions':
+ specifier: ^8.2.9
+ version: 8.2.9(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)))(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/addon-links':
+ specifier: ^8.2.9
+ version: 8.2.9(react@18.3.1)(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/addon-onboarding':
+ specifier: ^8.2.9
+ version: 8.2.9(react@18.3.1)(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/blocks':
+ specifier: ^8.2.9
+ version: 8.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/react':
+ specifier: ^8.2.9
+ version: 8.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))(typescript@5.5.4)
+ '@storybook/react-vite':
+ specifier: ^8.2.9
+ version: 8.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.21.2)(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))(typescript@5.5.4)(vite@5.4.3(@types/node@22.5.4))
+ '@storybook/test':
+ specifier: ^8.2.9
+ version: 8.2.9(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)))(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@types/react':
+ specifier: ^18.3.5
+ version: 18.3.5
+ '@types/react-dom':
+ specifier: ^18.3.0
+ version: 18.3.0
+ '@vitejs/plugin-react':
+ specifier: ^4.3.1
+ version: 4.3.1(vite@5.4.3(@types/node@22.5.4))
+ autoprefixer:
+ specifier: ^10.4.20
+ version: 10.4.20(postcss@8.4.45)
+ eslint:
+ specifier: ^9.10.0
+ version: 9.10.0(jiti@1.21.3)
+ eslint-plugin-react-hooks:
+ specifier: 5.1.0-rc-fb9a90fa48-20240614
+ version: 5.1.0-rc-fb9a90fa48-20240614(eslint@9.10.0(jiti@1.21.3))
+ eslint-plugin-react-refresh:
+ specifier: ^0.4.11
+ version: 0.4.11(eslint@9.10.0(jiti@1.21.3))
+ eslint-plugin-storybook:
+ specifier: ^0.8.0
+ version: 0.8.0(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4)
+ globals:
+ specifier: ^15.9.0
+ version: 15.9.0
+ postcss:
+ specifier: ^8.4.45
+ version: 8.4.45
+ storybook:
+ specifier: ^8.2.9
+ version: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ tailwindcss:
+ specifier: ^3.4.10
+ version: 3.4.10(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4))
+ typescript:
+ specifier: ^5.5.4
+ version: 5.5.4
+ typescript-eslint:
+ specifier: ^8.4.0
+ version: 8.4.0(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4)
+ vite:
+ specifier: ^5.4.3
+ version: 5.4.3(@types/node@22.5.4)
+
+ examples/with-code-share/apps/server:
+ dependencies:
+ '@palmares/console-logging':
+ specifier: workspace:*
+ version: link:../../../../libs/console-logging
+ '@palmares/core':
+ specifier: workspace:*
+ version: link:../../../../packages/core
+ '@palmares/databases':
+ specifier: workspace:*
+ version: link:../../../../packages/databases
+ '@palmares/drizzle-engine':
+ specifier: workspace:*
+ version: link:../../../../libs/drizzle-engine
+ '@palmares/express-adapter':
+ specifier: workspace:*
+ version: link:../../../../libs/express-adapter
+ '@palmares/logging':
+ specifier: workspace:*
+ version: link:../../../../packages/logging
+ '@palmares/node-std':
+ specifier: workspace:*
+ version: link:../../../../libs/node-std
+ '@palmares/schemas':
+ specifier: workspace:*
+ version: link:../../../../packages/schemas
+ '@palmares/server':
+ specifier: workspace:*
+ version: link:../../../../packages/server
+ '@palmares/zod-schema':
+ specifier: workspace:*
+ version: link:../../../../libs/zod-schema
+ better-sqlite3:
+ specifier: ^11.2.1
+ version: 11.2.1
+ cors:
+ specifier: ^2.8.5
+ version: 2.8.5
+ drizzle-kit:
+ specifier: ^0.24.2
+ version: 0.24.2
+ drizzle-orm:
+ specifier: ^0.32.2
+ version: 0.32.2(@types/better-sqlite3@7.6.11)(@types/react@18.3.5)(better-sqlite3@11.2.1)(pg@8.12.0)(postgres@3.4.4)(react@18.3.1)(sqlite3@5.1.7)
+ shared:
+ specifier: workspace:*
+ version: link:../../shared
+ devDependencies:
+ '@palmares/jest-tests':
+ specifier: ^0.1.13
+ version: 0.1.13(@palmares/tests@0.1.13(@palmares/core@packages+core))
+ '@palmares/tests':
+ specifier: ^0.1.13
+ version: 0.1.13(@palmares/core@packages+core)
+ '@swc/cli':
+ specifier: ^0.4.0
+ version: 0.4.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(chokidar@3.6.0)
+ '@swc/core':
+ specifier: ^1.7.23
+ version: 1.7.23(@swc/helpers@0.5.5)
+ '@types/better-sqlite3':
+ specifier: ^7.6.11
+ version: 7.6.11
+ '@types/cors':
+ specifier: ^2.8.17
+ version: 2.8.17
+ '@types/node':
+ specifier: ^22.5.4
+ version: 22.5.4
+ jest:
+ specifier: ^29.7.0
+ version: 29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4))
+ rimraf:
+ specifier: ^6.0.1
+ version: 6.0.1
+ ts-jest:
+ specifier: ^29.2.5
+ version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(esbuild@0.19.12)(jest@29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)))(typescript@5.5.4)
+ tsup:
+ specifier: ^8.2.4
+ version: 8.2.4(@swc/core@1.7.23(@swc/helpers@0.5.5))(jiti@1.21.3)(postcss@8.4.45)(tsx@4.19.0)(typescript@5.5.4)(yaml@2.4.3)
+ tsx:
+ specifier: ^4.19.0
+ version: 4.19.0
+ typescript:
+ specifier: ^5.5.4
+ version: 5.5.4
+
+ examples/with-code-share/shared:
+ dependencies:
+ '@faker-js/faker':
+ specifier: ^8.4.1
+ version: 8.4.1
+ '@palmares/core':
+ specifier: workspace:*
+ version: link:../../../packages/core
+ '@palmares/databases':
+ specifier: workspace:*
+ version: link:../../../packages/databases
+ '@palmares/schemas':
+ specifier: workspace:*
+ version: link:../../../packages/schemas
+ '@palmares/zod-schema':
+ specifier: workspace:*
+ version: link:../../../libs/zod-schema
devDependencies:
+ '@swc/cli':
+ specifier: ^0.4.0
+ version: 0.4.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(chokidar@3.6.0)
+ '@swc/core':
+ specifier: ^1.7.23
+ version: 1.7.23(@swc/helpers@0.5.5)
+ concurrently:
+ specifier: ^8.2.2
+ version: 8.2.2
+ rimraf:
+ specifier: ^6.0.1
+ version: 6.0.1
+ tsup:
+ specifier: ^8.2.4
+ version: 8.2.4(@swc/core@1.7.23(@swc/helpers@0.5.5))(jiti@1.21.3)(postcss@8.4.45)(tsx@4.19.0)(typescript@5.5.4)(yaml@2.4.3)
+ typescript:
+ specifier: ^5.5.4
+ version: 5.5.4
+
+ libs/console-logging:
+ dependencies:
'@palmares/logging':
specifier: workspace:*
version: link:../../packages/logging
@@ -528,7 +761,7 @@ importers:
version: link:../../packages/databases
drizzle-orm:
specifier: ^0.32.1
- version: 0.32.2(@types/better-sqlite3@7.6.11)(@types/react@18.3.3)(better-sqlite3@11.1.2)(pg@8.12.0)(postgres@3.4.4)(react@18.3.1)(sqlite3@5.1.7)
+ version: 0.32.2(@types/better-sqlite3@7.6.11)(@types/react@18.3.5)(better-sqlite3@11.2.1)(pg@8.12.0)(postgres@3.4.4)(react@18.3.1)(sqlite3@5.1.7)
devDependencies:
'@types/better-sqlite3':
specifier: ^7.6.11
@@ -601,10 +834,10 @@ importers:
version: 29.7.0(@babel/core@7.25.2)
jest:
specifier: ^29.7.0
- version: 29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
+ version: 29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4))
ts-jest:
specifier: ^29.2.3
- version: 29.2.3(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4)))(typescript@5.5.4)
+ version: 29.2.3(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)))(typescript@5.5.4)
libs/node-std:
dependencies:
@@ -649,13 +882,13 @@ importers:
devDependencies:
'@vercel/node':
specifier: ^3.2.7
- version: 3.2.7(@swc/core@1.7.18(@swc/helpers@0.5.5))(encoding@0.1.13)
+ version: 3.2.7(@swc/core@1.7.23(@swc/helpers@0.5.5))(encoding@0.1.13)
typescript:
specifier: ^5.5.4
version: 5.5.4
vercel:
specifier: ^35.2.1
- version: 35.2.4(@swc/core@1.7.18(@swc/helpers@0.5.5))(encoding@0.1.13)
+ version: 35.2.4(@swc/core@1.7.23(@swc/helpers@0.5.5))(encoding@0.1.13)
libs/zod-schema:
dependencies:
@@ -671,13 +904,14 @@ importers:
version: 5.5.4
packages/client:
- devDependencies:
+ dependencies:
'@palmares/core':
specifier: workspace:*
version: link:../core
'@palmares/server':
specifier: workspace:*
version: link:../server
+ devDependencies:
'@types/node':
specifier: ^22.5.2
version: 22.5.2
@@ -768,7 +1002,7 @@ importers:
version: 0.23.0
drizzle-orm:
specifier: ^0.32.1
- version: 0.32.2(@types/better-sqlite3@7.6.11)(@types/react@18.3.3)(better-sqlite3@11.1.2)(pg@8.12.0)(postgres@3.4.4)(react@18.3.1)(sqlite3@5.1.7)
+ version: 0.32.2(@types/better-sqlite3@7.6.11)(@types/react@18.3.5)(better-sqlite3@11.1.2)(pg@8.12.0)(postgres@3.4.4)(react@18.3.1)(sqlite3@5.1.7)
postgres:
specifier: ^3.4.4
version: 3.4.4
@@ -856,7 +1090,7 @@ importers:
version: 0.23.0
drizzle-orm:
specifier: ^0.32.0
- version: 0.32.0(@types/better-sqlite3@7.6.11)(@types/react@18.3.3)(better-sqlite3@11.1.2)(pg@8.12.0)(postgres@3.4.4)(react@18.3.1)(sqlite3@5.1.7)
+ version: 0.32.0(@types/better-sqlite3@7.6.11)(@types/react@18.3.5)(better-sqlite3@11.1.2)(pg@8.12.0)(postgres@3.4.4)(react@18.3.1)(sqlite3@5.1.7)
devDependencies:
'@types/better-sqlite3':
specifier: ^7.6.11
@@ -911,7 +1145,7 @@ importers:
version: 0.23.0
drizzle-orm:
specifier: ^0.32.0
- version: 0.32.0(@types/better-sqlite3@7.6.11)(@types/react@18.3.3)(better-sqlite3@11.1.2)(pg@8.12.0)(postgres@3.4.4)(react@18.3.1)(sqlite3@5.1.7)
+ version: 0.32.0(@types/better-sqlite3@7.6.11)(@types/react@18.3.5)(better-sqlite3@11.1.2)(pg@8.12.0)(postgres@3.4.4)(react@18.3.1)(sqlite3@5.1.7)
devDependencies:
'@types/better-sqlite3':
specifier: ^7.6.11
@@ -962,6 +1196,9 @@ importers:
packages:
+ '@adobe/css-tools@4.4.0':
+ resolution: {integrity: sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==}
+
'@alloc/quick-lru@5.2.0':
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'}
@@ -1226,6 +1463,12 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-syntax-flow@7.24.7':
+ resolution: {integrity: sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-syntax-import-assertions@7.24.7':
resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==}
engines: {node: '>=6.9.0'}
@@ -1404,6 +1647,12 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-flow-strip-types@7.25.2':
+ resolution: {integrity: sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-for-of@7.24.7':
resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==}
engines: {node: '>=6.9.0'}
@@ -1548,6 +1797,18 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-transform-react-jsx-self@7.24.7':
+ resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-source@7.24.7':
+ resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-transform-react-jsx@7.24.7':
resolution: {integrity: sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==}
engines: {node: '>=6.9.0'}
@@ -1638,6 +1899,12 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/preset-flow@7.24.7':
+ resolution: {integrity: sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/preset-modules@0.1.6-no-external-plugins':
resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
peerDependencies:
@@ -1655,6 +1922,12 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/register@7.24.6':
+ resolution: {integrity: sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/regjsgen@0.8.0':
resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
@@ -1686,6 +1959,9 @@ packages:
resolution: {integrity: sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==}
engines: {node: '>=6.9.0'}
+ '@base2/pretty-print-object@1.0.1':
+ resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==}
+
'@bcoe/v8-coverage@0.2.3':
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
@@ -1744,6 +2020,10 @@ packages:
'@changesets/write@0.3.1':
resolution: {integrity: sha512-SyGtMXzH3qFqlHKcvFY2eX+6b0NGiFcNav8AFsYwy5l8hejOeoeTDemu5Yjmke2V5jpzY+pBvM0vCCQ3gdZpfw==}
+ '@chromatic-com/storybook@1.9.0':
+ resolution: {integrity: sha512-vYQ+TcfktEE3GHnLZXHCzXF/sN9dw+KivH8a5cmPyd9YtQs7fZtHrEgsIjWpYycXiweKMo1Lm1RZsjxk8DH3rA==}
+ engines: {node: '>=16.0.0', yarn: '>=1.22.18'}
+
'@colors/colors@1.5.0':
resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
engines: {node: '>=0.1.90'}
@@ -1752,6 +2032,9 @@ packages:
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
engines: {node: '>=12'}
+ '@drizzle-team/brocli@0.10.1':
+ resolution: {integrity: sha512-AHy0vjc+n/4w/8Mif+w86qpppHuF3AyXbcWW+R/W7GNA3F5/p2nuhlkCJaTXSLZheB4l1rtHzOfr9A7NwoR/Zg==}
+
'@edge-runtime/format@2.2.1':
resolution: {integrity: sha512-JQTRVuiusQLNNLe2W9tnzBlV/GvSVcozLl4XZHk5swnRZ/v6jp8TqR8P7sqmJsQqblDZ3EztcWmLDbhRje/+8g==}
engines: {node: '>=16'}
@@ -1790,6 +2073,12 @@ packages:
cpu: [ppc64]
os: [aix]
+ '@esbuild/aix-ppc64@0.23.1':
+ resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
'@esbuild/android-arm64@0.18.20':
resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
engines: {node: '>=12'}
@@ -1808,6 +2097,12 @@ packages:
cpu: [arm64]
os: [android]
+ '@esbuild/android-arm64@0.23.1':
+ resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
'@esbuild/android-arm@0.18.20':
resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
engines: {node: '>=12'}
@@ -1826,6 +2121,12 @@ packages:
cpu: [arm]
os: [android]
+ '@esbuild/android-arm@0.23.1':
+ resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
'@esbuild/android-x64@0.18.20':
resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
engines: {node: '>=12'}
@@ -1844,6 +2145,12 @@ packages:
cpu: [x64]
os: [android]
+ '@esbuild/android-x64@0.23.1':
+ resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
'@esbuild/darwin-arm64@0.18.20':
resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
engines: {node: '>=12'}
@@ -1862,6 +2169,12 @@ packages:
cpu: [arm64]
os: [darwin]
+ '@esbuild/darwin-arm64@0.23.1':
+ resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
'@esbuild/darwin-x64@0.18.20':
resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
engines: {node: '>=12'}
@@ -1880,6 +2193,12 @@ packages:
cpu: [x64]
os: [darwin]
+ '@esbuild/darwin-x64@0.23.1':
+ resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
'@esbuild/freebsd-arm64@0.18.20':
resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
engines: {node: '>=12'}
@@ -1898,6 +2217,12 @@ packages:
cpu: [arm64]
os: [freebsd]
+ '@esbuild/freebsd-arm64@0.23.1':
+ resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
'@esbuild/freebsd-x64@0.18.20':
resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
engines: {node: '>=12'}
@@ -1916,6 +2241,12 @@ packages:
cpu: [x64]
os: [freebsd]
+ '@esbuild/freebsd-x64@0.23.1':
+ resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
'@esbuild/linux-arm64@0.18.20':
resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
engines: {node: '>=12'}
@@ -1934,6 +2265,12 @@ packages:
cpu: [arm64]
os: [linux]
+ '@esbuild/linux-arm64@0.23.1':
+ resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
'@esbuild/linux-arm@0.18.20':
resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
engines: {node: '>=12'}
@@ -1952,6 +2289,12 @@ packages:
cpu: [arm]
os: [linux]
+ '@esbuild/linux-arm@0.23.1':
+ resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
'@esbuild/linux-ia32@0.18.20':
resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
engines: {node: '>=12'}
@@ -1970,6 +2313,12 @@ packages:
cpu: [ia32]
os: [linux]
+ '@esbuild/linux-ia32@0.23.1':
+ resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
'@esbuild/linux-loong64@0.18.20':
resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
engines: {node: '>=12'}
@@ -1988,6 +2337,12 @@ packages:
cpu: [loong64]
os: [linux]
+ '@esbuild/linux-loong64@0.23.1':
+ resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
'@esbuild/linux-mips64el@0.18.20':
resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
engines: {node: '>=12'}
@@ -2006,6 +2361,12 @@ packages:
cpu: [mips64el]
os: [linux]
+ '@esbuild/linux-mips64el@0.23.1':
+ resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
'@esbuild/linux-ppc64@0.18.20':
resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
engines: {node: '>=12'}
@@ -2024,6 +2385,12 @@ packages:
cpu: [ppc64]
os: [linux]
+ '@esbuild/linux-ppc64@0.23.1':
+ resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
'@esbuild/linux-riscv64@0.18.20':
resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
engines: {node: '>=12'}
@@ -2042,6 +2409,12 @@ packages:
cpu: [riscv64]
os: [linux]
+ '@esbuild/linux-riscv64@0.23.1':
+ resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
'@esbuild/linux-s390x@0.18.20':
resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
engines: {node: '>=12'}
@@ -2060,6 +2433,12 @@ packages:
cpu: [s390x]
os: [linux]
+ '@esbuild/linux-s390x@0.23.1':
+ resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
'@esbuild/linux-x64@0.18.20':
resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
engines: {node: '>=12'}
@@ -2078,6 +2457,12 @@ packages:
cpu: [x64]
os: [linux]
+ '@esbuild/linux-x64@0.23.1':
+ resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
'@esbuild/netbsd-x64@0.18.20':
resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
engines: {node: '>=12'}
@@ -2096,6 +2481,18 @@ packages:
cpu: [x64]
os: [netbsd]
+ '@esbuild/netbsd-x64@0.23.1':
+ resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.23.1':
+ resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
'@esbuild/openbsd-x64@0.18.20':
resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
engines: {node: '>=12'}
@@ -2114,6 +2511,12 @@ packages:
cpu: [x64]
os: [openbsd]
+ '@esbuild/openbsd-x64@0.23.1':
+ resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
'@esbuild/sunos-x64@0.18.20':
resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
engines: {node: '>=12'}
@@ -2132,6 +2535,12 @@ packages:
cpu: [x64]
os: [sunos]
+ '@esbuild/sunos-x64@0.23.1':
+ resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
'@esbuild/win32-arm64@0.18.20':
resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
engines: {node: '>=12'}
@@ -2150,6 +2559,12 @@ packages:
cpu: [arm64]
os: [win32]
+ '@esbuild/win32-arm64@0.23.1':
+ resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
'@esbuild/win32-ia32@0.18.20':
resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
engines: {node: '>=12'}
@@ -2168,6 +2583,12 @@ packages:
cpu: [ia32]
os: [win32]
+ '@esbuild/win32-ia32@0.23.1':
+ resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
'@esbuild/win32-x64@0.18.20':
resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
engines: {node: '>=12'}
@@ -2186,6 +2607,12 @@ packages:
cpu: [x64]
os: [win32]
+ '@esbuild/win32-x64@0.23.1':
+ resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
'@eslint-community/eslint-utils@4.4.0':
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -2212,6 +2639,10 @@ packages:
resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ '@eslint/js@9.10.0':
+ resolution: {integrity: sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
'@eslint/js@9.9.1':
resolution: {integrity: sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -2220,6 +2651,14 @@ packages:
resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@eslint/plugin-kit@0.1.0':
+ resolution: {integrity: sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@faker-js/faker@8.4.1':
+ resolution: {integrity: sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13'}
+
'@fastify/ajv-compiler@3.5.0':
resolution: {integrity: sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==}
@@ -2334,6 +2773,15 @@ packages:
resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ '@joshwooding/vite-plugin-react-docgen-typescript@0.3.1':
+ resolution: {integrity: sha512-pdoMZ9QaPnVlSM+SdU/wgg0nyD/8wQ7y90ttO2CMCyrrm7RxveYIJ5eNfjPaoMFqW41LZra7QO9j+xV4Y18Glw==}
+ peerDependencies:
+ typescript: '>= 4.3.x'
+ vite: ^3.0.0 || ^4.0.0 || ^5.0.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
'@jridgewell/gen-mapping@0.3.5':
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
engines: {node: '>=6.0.0'}
@@ -2349,6 +2797,9 @@ packages:
'@jridgewell/sourcemap-codec@1.4.15':
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+ '@jridgewell/sourcemap-codec@1.5.0':
+ resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
+
'@jridgewell/trace-mapping@0.3.25':
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
@@ -2464,9 +2915,19 @@ packages:
'@palmares/events@0.0.1':
resolution: {integrity: sha512-w14qDi/I9ugiVy5Wj6zS8OnWN8aJCwIx8I1DPUXlnllDDZmqII7BJ6Ox6WxgwdhczthnV1/MM00dp/XIbq2PAw==}
+ '@palmares/jest-tests@0.1.13':
+ resolution: {integrity: sha512-+w/5ZXVT6fTqnNi5+PQNF9meS0fixBi9gvfQTfqsbbHjtQVgkZdldGFpOWmDM+0fIMEId5miYlrBY9+B0sT/6A==}
+ peerDependencies:
+ '@palmares/tests': 0.1.13
+
'@palmares/logging@0.0.1':
resolution: {integrity: sha512-3mBPEk1WwacXG8StU1wGs2ZJGyV+KWOvSsawDUHVsqd2YmqKQb1TVoVW2GC4QcwWtKK9OReoiGbhmFXsTBzB9g==}
+ '@palmares/tests@0.1.13':
+ resolution: {integrity: sha512-nS2nptU7WP6YDai5EIQWa0Bb6bMBD2oESxc0VKakGB9H/A/Z0FLBDFjhpirszbWftl38/y83ABF0fiukwXWNFg==}
+ peerDependencies:
+ '@palmares/core': 0.1.13
+
'@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
@@ -2508,11 +2969,100 @@ packages:
resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
engines: {node: '>= 8.0.0'}
- '@rushstack/eslint-patch@1.10.3':
- resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==}
+ '@rollup/pluginutils@5.1.0':
+ resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
- '@sinclair/typebox@0.25.24':
- resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==}
+ '@rollup/rollup-android-arm-eabi@4.21.2':
+ resolution: {integrity: sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.21.2':
+ resolution: {integrity: sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.21.2':
+ resolution: {integrity: sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.21.2':
+ resolution: {integrity: sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.21.2':
+ resolution: {integrity: sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.21.2':
+ resolution: {integrity: sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.21.2':
+ resolution: {integrity: sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.21.2':
+ resolution: {integrity: sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.21.2':
+ resolution: {integrity: sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.21.2':
+ resolution: {integrity: sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.21.2':
+ resolution: {integrity: sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.21.2':
+ resolution: {integrity: sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.21.2':
+ resolution: {integrity: sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-win32-arm64-msvc@4.21.2':
+ resolution: {integrity: sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.21.2':
+ resolution: {integrity: sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.21.2':
+ resolution: {integrity: sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rushstack/eslint-patch@1.10.3':
+ resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==}
+
+ '@sinclair/typebox@0.25.24':
+ resolution: {integrity: sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==}
'@sinclair/typebox@0.27.8':
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
@@ -2521,12 +3071,198 @@ packages:
resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
engines: {node: '>=10'}
+ '@sindresorhus/merge-streams@2.3.0':
+ resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==}
+ engines: {node: '>=18'}
+
'@sinonjs/commons@3.0.1':
resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
'@sinonjs/fake-timers@10.3.0':
resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==}
+ '@storybook/addon-actions@8.2.9':
+ resolution: {integrity: sha512-eh2teOqjga7aoClDVV+/b1gHJqsPwjiU1t+Hg/l4i2CkaBUNdYMEL90nR6fgReOdvvL5YhcPwJ8w38f9TrQcoQ==}
+ peerDependencies:
+ storybook: ^8.2.9
+
+ '@storybook/addon-backgrounds@8.2.9':
+ resolution: {integrity: sha512-eGmZAd742ORBbQ6JepzBCko/in62T4Xg9j9LVa+Cvz/7L1C/RQSuU6sUwbRAsXaz+PMVDksPDCUUNsXl3zUL7w==}
+ peerDependencies:
+ storybook: ^8.2.9
+
+ '@storybook/addon-controls@8.2.9':
+ resolution: {integrity: sha512-vaSE78KOE7SO0GrW4e+mdQphSNpvCX/FGybIRxyaKX9h8smoyUwRNHVyCS3ROHTwH324QWu7GDzsOVrnyXOv0A==}
+ peerDependencies:
+ storybook: ^8.2.9
+
+ '@storybook/addon-docs@8.2.9':
+ resolution: {integrity: sha512-flDOxFIGmXg+6lVdwTLMOKsGob1WrT7rG98mn1SNW0Nxhg3Wg+9pQuq1GLxEzKtAgSflmu+xcBRfYhsogyDXkw==}
+ peerDependencies:
+ storybook: ^8.2.9
+
+ '@storybook/addon-essentials@8.2.9':
+ resolution: {integrity: sha512-B2d3eznGZvPIyCVtYX0UhrYcEfK+3Y2sACmEWpSwtk8KXomFEsZnD95m397BYDRw3/X6qeSLWxqgMfqDTEDeMA==}
+ peerDependencies:
+ storybook: ^8.2.9
+
+ '@storybook/addon-highlight@8.2.9':
+ resolution: {integrity: sha512-qdcazeNQoo9QKIq+LJJZZXvFZoLn+i4uhbt1Uf9WtW6oU/c1qxORGVD7jc3zsxbQN9nROVPbJ76sfthogxeqWA==}
+ peerDependencies:
+ storybook: ^8.2.9
+
+ '@storybook/addon-interactions@8.2.9':
+ resolution: {integrity: sha512-oSxBkqpmp1Vm9v/G8mZeFNXD8k6T1NMgzUWzAx7R5m31rfObhoi5Fo1bKQT5BAhSSsdjjd7owTAFKdhwSotSKg==}
+ peerDependencies:
+ storybook: ^8.2.9
+
+ '@storybook/addon-links@8.2.9':
+ resolution: {integrity: sha512-RhJzUNdDb7lbliwXb64HMwieIeJ+OQ2Ditue1vmSox6NsSd+pshR+okHpAyoP1+fW+dahNENwAS2Kt2QiI78FA==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ storybook: ^8.2.9
+ peerDependenciesMeta:
+ react:
+ optional: true
+
+ '@storybook/addon-measure@8.2.9':
+ resolution: {integrity: sha512-XUfQtYRKWB2dfbPRmHuos816wt1JrLbtRld5ZC8J8ljeqZ4hFBPTQcgI5GAzZqjQuclLC0KuhlA/0bKxdxMMGA==}
+ peerDependencies:
+ storybook: ^8.2.9
+
+ '@storybook/addon-onboarding@8.2.9':
+ resolution: {integrity: sha512-9FAWwlnF4JqxOdaZCqe4HeEDj95rqQmITPugPUV3Ra8aJuukPWzlFZgfYubI50TTrnJDAFc8kYeatbxFvoagNQ==}
+ peerDependencies:
+ storybook: ^8.2.9
+
+ '@storybook/addon-outline@8.2.9':
+ resolution: {integrity: sha512-p22kI4W7MT0YJOCmg/FfhfH+NpZEDA5tgwstjazSg4ertyhaxziMwWZWiK2JCg0gOAfRJjoYjHz+6/u56iXwgQ==}
+ peerDependencies:
+ storybook: ^8.2.9
+
+ '@storybook/addon-toolbars@8.2.9':
+ resolution: {integrity: sha512-9LMZZ2jRD86Jh6KXedDbAYs4eHj9HtJA9VhSEE2wiqMGwXozpySi7B1GWniNzmFfcgMQ4JHfmD/OrBVTK7Ca/w==}
+ peerDependencies:
+ storybook: ^8.2.9
+
+ '@storybook/addon-viewport@8.2.9':
+ resolution: {integrity: sha512-lyM24+DJEt8R0YZkJKee34NQWv0REACU6lYDalqJNdKS1sEwzLGWxg1hZXnw2JFdBID9NGVvyYU2w6LDozOB0g==}
+ peerDependencies:
+ storybook: ^8.2.9
+
+ '@storybook/blocks@8.2.9':
+ resolution: {integrity: sha512-5276q/s/UL8arwftuBXovUNHqYo/HPQFMGXEmjVVAMXUyFjzEAfKj3+xU897J6AuL+7XVZG32WnqA+X6LJMrcQ==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ storybook: ^8.2.9
+ peerDependenciesMeta:
+ react:
+ optional: true
+ react-dom:
+ optional: true
+
+ '@storybook/builder-vite@8.2.9':
+ resolution: {integrity: sha512-MHD3ezRjKkJkOl0u7CRQoQD/LKd28YMWIcaz4YrV6ygokc0c3RFTlOefICQFgboc+1RwIUowxN1CJ2kJ7p4SWw==}
+ peerDependencies:
+ '@preact/preset-vite': '*'
+ storybook: ^8.2.9
+ typescript: '>= 4.3.x'
+ vite: ^4.0.0 || ^5.0.0
+ vite-plugin-glimmerx: '*'
+ peerDependenciesMeta:
+ '@preact/preset-vite':
+ optional: true
+ typescript:
+ optional: true
+ vite-plugin-glimmerx:
+ optional: true
+
+ '@storybook/codemod@8.2.9':
+ resolution: {integrity: sha512-3yRx1lFMm1FXWVv+CKDiYM4gOQPEfpcZAQrjfcumxSDUrB091pnU1PeI92Prj3vCdi4+0oPNuN4yDGNUYTMP/A==}
+
+ '@storybook/components@8.2.9':
+ resolution: {integrity: sha512-OkkcZ/f/6o3GdFEEK9ZHKIGHWUHmavZUYs5xaSgU64bOrA2aqEFtfeWWitZYTv3Euhk8MVLWfyEMDfez0AlvDg==}
+ peerDependencies:
+ storybook: ^8.2.9
+
+ '@storybook/core@8.2.9':
+ resolution: {integrity: sha512-wSER8FpA6Il/jPyDfKm3yohxDtuhisNPTonMVzd3ulNWR4zERLddyO3HrHJJwdqYHLNk4SBFzwMGpQZVws1y0w==}
+
+ '@storybook/csf-plugin@8.2.9':
+ resolution: {integrity: sha512-QQCFb3g12VQQEraDV1UfCmniGhQZKyT6oEt1Im6dzzPJj9NQk+6BjWoDep33CZhBHWoLryrMQd2fjuHxnFRNEA==}
+ peerDependencies:
+ storybook: ^8.2.9
+
+ '@storybook/csf@0.0.1':
+ resolution: {integrity: sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==}
+
+ '@storybook/csf@0.1.11':
+ resolution: {integrity: sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==}
+
+ '@storybook/global@5.0.0':
+ resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
+
+ '@storybook/icons@1.2.10':
+ resolution: {integrity: sha512-310apKdDcjbbX2VSLWPwhEwAgjxTzVagrwucVZIdGPErwiAppX8KvBuWZgPo+rQLVrtH8S+pw1dbUwjcE6d7og==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+
+ '@storybook/instrumenter@8.2.9':
+ resolution: {integrity: sha512-+DNjTbsMzlDggsvkhRuOy7aGvQJ4oLCPgunP5Se/3yBjG+M2bYDa0EmC5jC2nwZ3ffpuvbzaVe7fWf7R8W9F2Q==}
+ peerDependencies:
+ storybook: ^8.2.9
+
+ '@storybook/manager-api@8.2.9':
+ resolution: {integrity: sha512-mkYvUlfqDw+0WbxIynh5TcrotmoXlumEsOA4+45zuNea8XpEgj5cNBUCnmfEO6yQ85swqkS8YYbMpg1cZyu/Vw==}
+ peerDependencies:
+ storybook: ^8.2.9
+
+ '@storybook/preview-api@8.2.9':
+ resolution: {integrity: sha512-D8/t+a78OJqQAcT/ABa1C4YM/OaLGQ9IvCsp3Q9ruUqDCwuZBj8bG3D4477dlY4owX2ycC0rWYu3VvuK0EmJjA==}
+ peerDependencies:
+ storybook: ^8.2.9
+
+ '@storybook/react-dom-shim@8.2.9':
+ resolution: {integrity: sha512-uCAjSQEsNk8somVn1j/I1G9G/uUax5byHseIIV0Eq3gVXttGd7gaWcP+TDHtqIaenWHx4l+hCSuCesxiLWmx4Q==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ storybook: ^8.2.9
+
+ '@storybook/react-vite@8.2.9':
+ resolution: {integrity: sha512-Lw6FzcAaL7jX8Y8EsDzg32Lp0NdeNJZpj0LVwX5sLOQQA6w4i3PqlFINXDY28qCGo6wqKT+w44zhgwUcU5V0Ow==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ storybook: ^8.2.9
+ vite: ^4.0.0 || ^5.0.0
+
+ '@storybook/react@8.2.9':
+ resolution: {integrity: sha512-F2xZcTDxxjpbqt7eP8rEHmlksiKmE/qtPusEWEY4N4jK01kN+ncxSl8gkJpUohMEmAnVC5t/1v/sU57xv1DYpg==}
+ engines: {node: '>=18.0.0'}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta
+ storybook: ^8.2.9
+ typescript: '>= 4.2.x'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@storybook/test@8.2.9':
+ resolution: {integrity: sha512-O5JZ5S8UVVR7V0ru5AiF/uRO+srAVwji0Iik7ihy8gw3V91WQNMmJh2KkdhG0R1enYeBsYZlipOm+AW7f/MmOA==}
+ peerDependencies:
+ storybook: ^8.2.9
+
+ '@storybook/theming@8.2.9':
+ resolution: {integrity: sha512-OL0NFvowPX85N5zIYdgeKKaFm7V4Vgtci093vL3cDZT13LGH6GuEzJKkUFGuUGNPFlJc+EgTj0o6PYKrOLyQ6w==}
+ peerDependencies:
+ storybook: ^8.2.9
+
'@swc/cli@0.1.65':
resolution: {integrity: sha512-4NcgsvJVHhA7trDnMmkGLLvWMHu2kSy+qHx6QwRhhJhdiYdNUrhdp+ERxen73sYtaeEOYeLJcWrQ60nzKi6rpg==}
engines: {node: '>= 12.13'}
@@ -2555,60 +3291,120 @@ packages:
cpu: [arm64]
os: [darwin]
+ '@swc/core-darwin-arm64@1.7.23':
+ resolution: {integrity: sha512-yyOHPfti6yKlQulfVWMt7BVKst+SyEZYCWuQSGMn1KgmNCH/bYufRWfQXIhkGSj44ZkEepJmsJ8tDyIb4k5WyA==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [darwin]
+
'@swc/core-darwin-x64@1.7.18':
resolution: {integrity: sha512-IkukOQUw7/14VkHp446OkYGCZEHqZg9pTmTdBawlUyz2JwZMSn2VodCl7aFSdGCsU4Cwni8zKA8CCgkCCAELhw==}
engines: {node: '>=10'}
cpu: [x64]
os: [darwin]
+ '@swc/core-darwin-x64@1.7.23':
+ resolution: {integrity: sha512-GzqHwQ0Y1VyjdI/bBKFX2GKm5HD3PIB6OhuAQtWZMTtEr2yIrlT0YK2T+XKh7oIg31JwxGBeQdBk3KTI7DARmQ==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [darwin]
+
'@swc/core-linux-arm-gnueabihf@1.7.18':
resolution: {integrity: sha512-ATnb6jJaBeXCqrTUawWdoOy7eP9SCI7UMcfXlYIMxX4otKKspLPAEuGA5RaNxlCcj9ObyO0J3YGbtZ6hhD2pjg==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux]
+ '@swc/core-linux-arm-gnueabihf@1.7.23':
+ resolution: {integrity: sha512-qwX4gB41OS6/OZkHcpTqLFGsdmvoZyffnJIlgB/kZKwH3lfeJWzv6vx57zXtNpM/t7GoQEe0VZUVdmNjxSxBZw==}
+ engines: {node: '>=10'}
+ cpu: [arm]
+ os: [linux]
+
'@swc/core-linux-arm64-gnu@1.7.18':
resolution: {integrity: sha512-poHtH7zL7lEp9K2inY90lGHJABWxURAOgWNeZqrcR5+jwIe7q5KBisysH09Zf/JNF9+6iNns+U0xgWTNJzBuGA==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
+ '@swc/core-linux-arm64-gnu@1.7.23':
+ resolution: {integrity: sha512-TsrbUZdMaUwzI7+g/8rHPLWbntMKYSu5Bn5IBSqVKPeyqaXxNnlIUnWXgXcUcRAc+T+Y8ADfr7EiFz9iz5DuSA==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [linux]
+
'@swc/core-linux-arm64-musl@1.7.18':
resolution: {integrity: sha512-qnNI1WmcOV7Wz1ZDyK6WrOlzLvJ01rnni8ec950mMHWkLRMP53QvCvhF3S+7gFplWBwWJTOOPPUqJp/PlSxWyQ==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
+ '@swc/core-linux-arm64-musl@1.7.23':
+ resolution: {integrity: sha512-JEdtwdthazKq4PBz53KSubwwK8MvqODAihGSAzc8u3Unq4ojcvaS8b0CwLBeD+kTQ78HpxOXTt3DsFIxpgaCAA==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [linux]
+
'@swc/core-linux-x64-gnu@1.7.18':
resolution: {integrity: sha512-x9SCqCLzwtlqtD5At3I1a7Gco+EuXnzrJGoucmkpeQohshHuwa+cskqsXO6u1Dz0jXJEuHbBZB9va1wYYfjgFg==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
+ '@swc/core-linux-x64-gnu@1.7.23':
+ resolution: {integrity: sha512-V51gFPWaVAHbI1yg9ahsoya3aB4uawye3SZ5uQWgcP7wdCdiv60dw4F5nuPJf5Z1oXD3U/BslXuamv8Oh9vXqQ==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [linux]
+
'@swc/core-linux-x64-musl@1.7.18':
resolution: {integrity: sha512-qtj8iOpMMgKjzxTv+islmEY0JBsbd93nka0gzcTTmGZxKtL5jSUsYQvkxwNPZr5M9NU1fgaR3n1vE6lFmtY0IQ==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
+ '@swc/core-linux-x64-musl@1.7.23':
+ resolution: {integrity: sha512-BBqQi4+UdeRqag3yM4IJjaHG4yc1o3l9ksENHToE0o/u2DT0FY5+K/DiYGZLC1JHbSFzNqRCYsa7DIzRtZ0A1A==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [linux]
+
'@swc/core-win32-arm64-msvc@1.7.18':
resolution: {integrity: sha512-ltX/Ol9+Qu4SXmISCeuwVgAjSa8nzHTymknpozzVMgjXUoZMoz6lcynfKL1nCh5XLgqh0XNHUKLti5YFF8LrrA==}
engines: {node: '>=10'}
cpu: [arm64]
os: [win32]
+ '@swc/core-win32-arm64-msvc@1.7.23':
+ resolution: {integrity: sha512-JPk6pvCKncL6bXG7p+NLZf8PWx4FakVvKNdwGeMrYunb+yk1IZf7qf9LJk8+GDGF5QviDXPs8opZrTrfsW80fA==}
+ engines: {node: '>=10'}
+ cpu: [arm64]
+ os: [win32]
+
'@swc/core-win32-ia32-msvc@1.7.18':
resolution: {integrity: sha512-RgTcFP3wgyxnQbTCJrlgBJmgpeTXo8t807GU9GxApAXfpLZJ3swJ2GgFUmIJVdLWyffSHF5BEkF3FmF6mtH5AQ==}
engines: {node: '>=10'}
cpu: [ia32]
os: [win32]
+ '@swc/core-win32-ia32-msvc@1.7.23':
+ resolution: {integrity: sha512-2Whxi8d+bLQBzJcQ5qYPHlk02YYVGsMVav0fWk+FnX2z1QRREIu1L1xvrpi7gBpjXp6BIU40ya8GiKeekNT2bg==}
+ engines: {node: '>=10'}
+ cpu: [ia32]
+ os: [win32]
+
'@swc/core-win32-x64-msvc@1.7.18':
resolution: {integrity: sha512-XbZ0wAgzR757+DhQcnv60Y/bK9yuWPhDNRQVFFQVRsowvK3+c6EblyfUSytIidpXgyYFzlprq/9A9ZlO/wvDWw==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
+ '@swc/core-win32-x64-msvc@1.7.23':
+ resolution: {integrity: sha512-82fARk4/yJ40kwWKY/gdKDisPdtgJE9jgpl/vkNG3alyJxrCzuNM7+CtiKoYbXLeqM8GQTS3wlvCaJu9oQ8dag==}
+ engines: {node: '>=10'}
+ cpu: [x64]
+ os: [win32]
+
'@swc/core@1.7.18':
resolution: {integrity: sha512-qL9v5N5S38ijmqiQRvCFUUx2vmxWT/JJ2rswElnyaHkOHuVoAFhBB90Ywj4RKjh3R0zOjhEcemENTyF3q3G6WQ==}
engines: {node: '>=10'}
@@ -2618,6 +3414,15 @@ packages:
'@swc/helpers':
optional: true
+ '@swc/core@1.7.23':
+ resolution: {integrity: sha512-VDNkpDvDlreGh2E3tlDj8B3piiuLhhQA/7rIVZpiLUvG1YpucAa6N7iDXA7Gc/+Hah8spaCg/qvEaBkCmcIYCQ==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ '@swc/helpers': '*'
+ peerDependenciesMeta:
+ '@swc/helpers':
+ optional: true
+
'@swc/counter@0.1.3':
resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
@@ -2631,6 +3436,54 @@ packages:
resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==}
engines: {node: '>=10'}
+ '@tanstack/query-core@5.54.1':
+ resolution: {integrity: sha512-hKS+WRpT5zBFip21pB6Jx1C0hranWQrbv5EJ7qPoiV5MYI3C8rTCqWC9DdBseiPT1JgQWh8Y55YthuYZNiw3Xw==}
+
+ '@tanstack/react-query@5.55.0':
+ resolution: {integrity: sha512-2uYuxEbRQD8TORUiTUacEOwt1e8aoSqUOJFGY5TUrh6rQ3U85zrMS2wvbNhBhXGh6Vj69QDCP2yv8tIY7joo6Q==}
+ peerDependencies:
+ react: ^18 || ^19
+
+ '@tanstack/react-virtual@3.10.7':
+ resolution: {integrity: sha512-yeP+M0G8D+15ZFPivpuQ5hoM4Fa/PzERBx8P8EGcfEsXX3JOb9G9UUrqc47ZXAxvK+YqzM9T5qlJUYUFOwCZJw==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+
+ '@tanstack/virtual-core@3.10.7':
+ resolution: {integrity: sha512-ND5dfsU0n9F4gROzwNNDJmg6y8n9pI8YWxtgbfJ5UcNn7Hx+MxEXtXcQ189tS7sh8pmCObgz2qSiyRKTZxT4dg==}
+
+ '@testing-library/dom@10.1.0':
+ resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==}
+ engines: {node: '>=18'}
+
+ '@testing-library/jest-dom@6.4.5':
+ resolution: {integrity: sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==}
+ engines: {node: '>=14', npm: '>=6', yarn: '>=1'}
+ peerDependencies:
+ '@jest/globals': '>= 28'
+ '@types/bun': latest
+ '@types/jest': '>= 28'
+ jest: '>= 28'
+ vitest: '>= 0.32'
+ peerDependenciesMeta:
+ '@jest/globals':
+ optional: true
+ '@types/bun':
+ optional: true
+ '@types/jest':
+ optional: true
+ jest:
+ optional: true
+ vitest:
+ optional: true
+
+ '@testing-library/user-event@14.5.2':
+ resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==}
+ engines: {node: '>=12', npm: '>=6'}
+ peerDependencies:
+ '@testing-library/dom': '>=7.21.4'
+
'@tokenizer/token@0.3.0':
resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==}
@@ -2660,6 +3513,9 @@ packages:
'@types/acorn@4.0.6':
resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
+ '@types/aria-query@5.0.4':
+ resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
+
'@types/babel__core@7.20.5':
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
@@ -2693,12 +3549,27 @@ packages:
'@types/cors@2.8.17':
resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==}
+ '@types/cross-spawn@6.0.6':
+ resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==}
+
'@types/debug@4.1.12':
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+ '@types/doctrine@0.0.9':
+ resolution: {integrity: sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==}
+
+ '@types/emscripten@1.39.13':
+ resolution: {integrity: sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw==}
+
+ '@types/escodegen@0.0.6':
+ resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==}
+
'@types/estree-jsx@1.0.5':
resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
+ '@types/estree@0.0.51':
+ resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==}
+
'@types/estree@1.0.5':
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
@@ -2708,6 +3579,12 @@ packages:
'@types/express@4.17.21':
resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==}
+ '@types/find-cache-dir@3.2.1':
+ resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==}
+
+ '@types/glob@7.2.0':
+ resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
+
'@types/graceful-fs@4.1.9':
resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
@@ -2756,6 +3633,9 @@ packages:
'@types/mime@3.0.4':
resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==}
+ '@types/minimatch@5.1.2':
+ resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
+
'@types/ms@0.7.34':
resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
@@ -2768,6 +3648,9 @@ packages:
'@types/node@16.18.11':
resolution: {integrity: sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==}
+ '@types/node@18.19.50':
+ resolution: {integrity: sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg==}
+
'@types/node@20.14.2':
resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==}
@@ -2777,6 +3660,9 @@ packages:
'@types/node@22.5.2':
resolution: {integrity: sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==}
+ '@types/node@22.5.4':
+ resolution: {integrity: sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==}
+
'@types/prop-types@15.7.12':
resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==}
@@ -2798,6 +3684,12 @@ packages:
'@types/react@18.3.3':
resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==}
+ '@types/react@18.3.5':
+ resolution: {integrity: sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==}
+
+ '@types/resolve@1.20.6':
+ resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==}
+
'@types/responselike@1.0.3':
resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==}
@@ -2825,6 +3717,9 @@ packages:
'@types/unist@3.0.2':
resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==}
+ '@types/uuid@9.0.8':
+ resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==}
+
'@types/validator@13.11.9':
resolution: {integrity: sha512-FCTsikRozryfayPuiI46QzH3fnrOoctTjvOYZkho9BTFLCOZ2rgZJHMOVgCOfttjPJcgOx52EpkY0CMfy87MIw==}
@@ -2856,6 +3751,17 @@ packages:
typescript:
optional: true
+ '@typescript-eslint/eslint-plugin@8.4.0':
+ resolution: {integrity: sha512-rg8LGdv7ri3oAlenMACk9e+AR4wUV0yrrG+XKsGKOK0EVgeEDqurkXMPILG2836fW4ibokTB5v4b6Z9+GYQDEw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
'@typescript-eslint/parser@6.21.0':
resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -2876,6 +3782,20 @@ packages:
typescript:
optional: true
+ '@typescript-eslint/parser@8.4.0':
+ resolution: {integrity: sha512-NHgWmKSgJk5K9N16GIhQ4jSobBoJwrmURaLErad0qlLjrpP5bECYg+wxVTGlGZmJbU03jj/dfnb6V9bw+5icsA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/scope-manager@5.62.0':
+ resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
'@typescript-eslint/scope-manager@6.21.0':
resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -2892,6 +3812,10 @@ packages:
resolution: {integrity: sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==}
engines: {node: ^18.18.0 || >=20.0.0}
+ '@typescript-eslint/scope-manager@8.4.0':
+ resolution: {integrity: sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
'@typescript-eslint/type-utils@7.0.0':
resolution: {integrity: sha512-FIM8HPxj1P2G7qfrpiXvbHeHypgo2mFpFGoh5I73ZlqmJOsloSa1x0ZyXCer43++P1doxCgNqIOLqmZR6SOT8g==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -2912,6 +3836,19 @@ packages:
typescript:
optional: true
+ '@typescript-eslint/type-utils@8.4.0':
+ resolution: {integrity: sha512-pu2PAmNrl9KX6TtirVOrbLPLwDmASpZhK/XU7WvoKoCUkdtq9zF7qQ7gna0GBZFN0hci0vHaSusiL2WpsQk37A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/types@5.62.0':
+ resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
'@typescript-eslint/types@6.21.0':
resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -2928,6 +3865,19 @@ packages:
resolution: {integrity: sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==}
engines: {node: ^18.18.0 || >=20.0.0}
+ '@typescript-eslint/types@8.4.0':
+ resolution: {integrity: sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/typescript-estree@5.62.0':
+ resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
'@typescript-eslint/typescript-estree@6.21.0':
resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -2964,6 +3914,21 @@ packages:
typescript:
optional: true
+ '@typescript-eslint/typescript-estree@8.4.0':
+ resolution: {integrity: sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@typescript-eslint/utils@5.62.0':
+ resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
+
'@typescript-eslint/utils@7.0.0':
resolution: {integrity: sha512-kuPZcPAdGcDBAyqDn/JVeJVhySvpkxzfXjJq1X1BFSTYo1TTuo4iyb937u457q4K0In84p6u2VHQGaFnv7VYqg==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -2982,6 +3947,16 @@ packages:
peerDependencies:
eslint: ^8.56.0
+ '@typescript-eslint/utils@8.4.0':
+ resolution: {integrity: sha512-swULW8n1IKLjRAgciCkTCafyTHHfwVQFt8DovmaF69sKbOxTSFMmIZaSHjqO9i/RV0wIblaawhzvtva8Nmm7lQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0
+
+ '@typescript-eslint/visitor-keys@5.62.0':
+ resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
'@typescript-eslint/visitor-keys@6.21.0':
resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==}
engines: {node: ^16.0.0 || >=18.0.0}
@@ -2998,6 +3973,10 @@ packages:
resolution: {integrity: sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==}
engines: {node: ^18.18.0 || >=20.0.0}
+ '@typescript-eslint/visitor-keys@8.4.0':
+ resolution: {integrity: sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
'@ungap/structured-clone@1.2.0':
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
@@ -3061,6 +4040,29 @@ packages:
'@vercel/static-config@3.0.0':
resolution: {integrity: sha512-2qtvcBJ1bGY0dYGYh3iM7yGKkk971FujLEDXzuW5wcZsPr1GSEjO/w2iSr3qve6nDDtBImsGoDEnus5FI4+fIw==}
+ '@vitejs/plugin-react@4.3.1':
+ resolution: {integrity: sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^4.2.0 || ^5.0.0
+
+ '@vitest/expect@1.6.0':
+ resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==}
+
+ '@vitest/spy@1.6.0':
+ resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==}
+
+ '@vitest/utils@1.6.0':
+ resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==}
+
+ '@yarnpkg/fslib@2.10.3':
+ resolution: {integrity: sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==}
+ engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'}
+
+ '@yarnpkg/libzip@2.3.0':
+ resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==}
+ engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'}
+
abbrev@1.1.1:
resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==}
@@ -3085,10 +4087,19 @@ packages:
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ acorn-walk@7.2.0:
+ resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==}
+ engines: {node: '>=0.4.0'}
+
acorn-walk@8.3.3:
resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==}
engines: {node: '>=0.4.0'}
+ acorn@7.4.1:
+ resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
acorn@8.11.3:
resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
engines: {node: '>=0.4.0'}
@@ -3249,9 +4260,16 @@ packages:
resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==}
engines: {node: '>= 0.4'}
+ assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+
ast-types-flow@0.0.8:
resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
+ ast-types@0.16.1:
+ resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==}
+ engines: {node: '>=4'}
+
astring@1.8.6:
resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==}
hasBin: true
@@ -3291,6 +4309,13 @@ packages:
peerDependencies:
postcss: ^8.1.0
+ autoprefixer@10.4.20:
+ resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+
available-typed-arrays@1.0.7:
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
engines: {node: '>= 0.4'}
@@ -3305,6 +4330,11 @@ packages:
axobject-query@3.2.1:
resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==}
+ babel-core@7.0.0-bridge.0:
+ resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
babel-jest@29.7.0:
resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -3361,6 +4391,9 @@ packages:
better-sqlite3@11.1.2:
resolution: {integrity: sha512-gujtFwavWU4MSPT+h9B+4pkvZdyOUkH54zgLdIrMmmmd4ZqiBIrRNBzNzYVFO417xo882uP5HBu4GjOfaSrIQw==}
+ better-sqlite3@11.2.1:
+ resolution: {integrity: sha512-Xbt1d68wQnUuFIEVsbt6V+RG30zwgbtCGQ4QOcXVrOH0FE4eHk64FWZ9NUfRHS4/x1PXqwz/+KOrnXD7f0WieA==}
+
bin-check@4.1.0:
resolution: {integrity: sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA==}
engines: {node: '>=4'}
@@ -3397,6 +4430,9 @@ packages:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
+ browser-assert@1.2.1:
+ resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==}
+
browserslist@4.23.0:
resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
@@ -3431,6 +4467,12 @@ packages:
buffer@6.0.3:
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+ bundle-require@5.0.0:
+ resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ peerDependencies:
+ esbuild: '>=0.18'
+
busboy@1.6.0:
resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
engines: {node: '>=10.16.0'}
@@ -3443,6 +4485,10 @@ packages:
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
engines: {node: '>= 0.8'}
+ cac@6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+ engines: {node: '>=8'}
+
cacache@15.3.0:
resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==}
engines: {node: '>= 10'}
@@ -3487,10 +4533,18 @@ packages:
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
+ chai@4.5.0:
+ resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==}
+ engines: {node: '>=4'}
+
chalk@2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
engines: {node: '>=4'}
+ chalk@3.0.0:
+ resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
+ engines: {node: '>=8'}
+
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
@@ -3517,6 +4571,9 @@ packages:
chardet@0.7.0:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+ check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+
chokidar@3.3.1:
resolution: {integrity: sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==}
engines: {node: '>= 8.10.0'}
@@ -3532,10 +4589,25 @@ packages:
resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
engines: {node: '>=10'}
+ chromatic@11.7.1:
+ resolution: {integrity: sha512-LvgPimdQdnQB07ZDxLEC2KtxgYeqTw0X71GA7fi3zhgtKLxZcE+BSZ/5I9rrQp1V8ydmfElfw0ZwnUH4fVgUAQ==}
+ hasBin: true
+ peerDependencies:
+ '@chromatic-com/cypress': ^0.*.* || ^1.0.0
+ '@chromatic-com/playwright': ^0.*.* || ^1.0.0
+ peerDependenciesMeta:
+ '@chromatic-com/cypress':
+ optional: true
+ '@chromatic-com/playwright':
+ optional: true
+
ci-info@3.9.0:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'}
+ citty@0.1.6:
+ resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
+
cjs-module-lexer@1.2.3:
resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==}
@@ -3562,6 +4634,10 @@ packages:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
+ clone-deep@4.0.1:
+ resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
+ engines: {node: '>=6'}
+
clone-response@1.0.3:
resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==}
@@ -3614,6 +4690,10 @@ packages:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
engines: {node: '>= 6'}
+ commander@6.2.1:
+ resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==}
+ engines: {node: '>= 6'}
+
commander@7.2.0:
resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
engines: {node: '>= 10'}
@@ -3622,6 +4702,9 @@ packages:
resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
engines: {node: '>= 12'}
+ commondir@1.0.1:
+ resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
+
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
@@ -3629,6 +4712,18 @@ packages:
resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==}
engines: {'0': node >= 0.8}
+ concurrently@8.2.2:
+ resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==}
+ engines: {node: ^14.13.0 || >=16.0.0}
+ hasBin: true
+
+ confbox@0.1.7:
+ resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==}
+
+ consola@3.2.3:
+ resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==}
+ engines: {node: ^14.18.0 || >=16.10.0}
+
console-control-strings@1.1.0:
resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
@@ -3689,6 +4784,13 @@ packages:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
engines: {node: '>= 8'}
+ crypto-random-string@4.0.0:
+ resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==}
+ engines: {node: '>=12'}
+
+ css.escape@1.5.1:
+ resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==}
+
cssesc@3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'}
@@ -3712,6 +4814,10 @@ packages:
resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==}
engines: {node: '>= 0.4'}
+ date-fns@2.30.0:
+ resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==}
+ engines: {node: '>=0.11'}
+
debug@2.6.9:
resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
peerDependencies:
@@ -3761,6 +4867,10 @@ packages:
babel-plugin-macros:
optional: true
+ deep-eql@4.1.4:
+ resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==}
+ engines: {node: '>=6'}
+
deep-extend@0.6.0:
resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
engines: {node: '>=4.0.0'}
@@ -3787,6 +4897,9 @@ packages:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
+ defu@6.1.4:
+ resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
+
delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
@@ -3851,6 +4964,12 @@ packages:
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
engines: {node: '>=6.0.0'}
+ dom-accessibility-api@0.5.16:
+ resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
+
+ dom-accessibility-api@0.6.3:
+ resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==}
+
dottie@2.0.6:
resolution: {integrity: sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==}
@@ -3858,6 +4977,10 @@ packages:
resolution: {integrity: sha512-w9jE97z193dd4jzAyj4Uv2SOh8Ydue70Ki6W0awy4bGM1aPXan6zD6Yv+nNTA6oGgNTDl2MJFxutjHG4fden5g==}
hasBin: true
+ drizzle-kit@0.24.2:
+ resolution: {integrity: sha512-nXOaTSFiuIaTMhS8WJC2d4EBeIcN9OSt2A2cyFbQYBAZbi7lRsVGJNqDpEwPqYfJz38yxbY/UtbvBBahBfnExQ==}
+ hasBin: true
+
drizzle-orm@0.32.0:
resolution: {integrity: sha512-99IlfVGPNHzOFEXo9Phyu5At5TALLsY2t6WxFFy68rYd9Ej4cHX/7WjdPOn7JNRW69MNeNtP8XrDQg43SppuAA==}
peerDependencies:
@@ -4096,6 +5219,11 @@ packages:
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
engines: {node: '>=6'}
+ envinfo@7.13.0:
+ resolution: {integrity: sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==}
+ engines: {node: '>=4'}
+ hasBin: true
+
err-code@2.0.3:
resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
@@ -4121,6 +5249,9 @@ packages:
es-module-lexer@1.4.1:
resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==}
+ es-module-lexer@1.5.4:
+ resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==}
+
es-object-atoms@1.0.0:
resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==}
engines: {node: '>= 0.4'}
@@ -4281,6 +5412,11 @@ packages:
engines: {node: '>=12'}
hasBin: true
+ esbuild@0.23.1:
+ resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
escalade@3.1.2:
resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
engines: {node: '>=6'}
@@ -4304,6 +5440,11 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
+ escodegen@2.1.0:
+ resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
+ engines: {node: '>=6.0'}
+ hasBin: true
+
eslint-compat-utils@0.5.1:
resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==}
engines: {node: '>=12'}
@@ -4415,6 +5556,17 @@ packages:
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
+ eslint-plugin-react-hooks@5.1.0-rc-fb9a90fa48-20240614:
+ resolution: {integrity: sha512-xsiRwaDNF5wWNC4ZHLut+x/YcAxksUd9Rizt7LaEn3bV8VyYRpXnRJQlLOfYaVy9esk4DFP4zPPnoNVjq5Gc0w==}
+ engines: {node: '>=10'}
+ peerDependencies:
+ eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
+
+ eslint-plugin-react-refresh@0.4.11:
+ resolution: {integrity: sha512-wrAKxMbVr8qhXTtIKfXqAn5SAtRZt0aXxe5P23Fh4pUAdC6XEsybGLB8P0PI4j1yYqOgUEUlzKAGDfo7rJOjcw==}
+ peerDependencies:
+ eslint: '>=7'
+
eslint-plugin-react@7.34.2:
resolution: {integrity: sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==}
engines: {node: '>=4'}
@@ -4425,6 +5577,16 @@ packages:
resolution: {integrity: sha512-XjVGBhtDZJfyuhIxnQ/WMm385RbX3DBu7H1J7HNNhmB2tnGxMeqVSnYv79oAj992ayvIBZghsymwkYFS6cGH4Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ eslint-plugin-storybook@0.8.0:
+ resolution: {integrity: sha512-CZeVO5EzmPY7qghO2t64oaFM+8FTaD4uzOEjHKp516exyTKo+skKAL9GI3QALS2BXhyALJjNtwbmr1XinGE8bA==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ eslint: '>=6'
+
+ eslint-scope@5.1.1:
+ resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+ engines: {node: '>=8.0.0'}
+
eslint-scope@7.2.2:
resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -4446,6 +5608,16 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true
+ eslint@9.10.0:
+ resolution: {integrity: sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ hasBin: true
+ peerDependencies:
+ jiti: '*'
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+
eslint@9.9.1:
resolution: {integrity: sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -4477,6 +5649,10 @@ packages:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
engines: {node: '>=4.0'}
+ estraverse@4.3.0:
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+ engines: {node: '>=4.0'}
+
estraverse@5.3.0:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
@@ -4536,6 +5712,10 @@ packages:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
+ execa@8.0.1:
+ resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
+ engines: {node: '>=16.17'}
+
executable@4.1.1:
resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==}
engines: {node: '>=4'}
@@ -4618,6 +5798,9 @@ packages:
fb-watchman@2.0.2:
resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
+ fd-package-json@1.2.0:
+ resolution: {integrity: sha512-45LSPmWf+gC5tdCQMNH4s9Sr00bIkiD9aN7dc5hqkrEw1geRYyDQS1v1oMHAW3ysfxfndqGsrDREHHjNNbKUfA==}
+
fd-slicer@1.1.0:
resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
@@ -4647,6 +5830,10 @@ packages:
resolution: {integrity: sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA==}
engines: {node: '>=12.20'}
+ filesize@10.1.6:
+ resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==}
+ engines: {node: '>= 10.4.0'}
+
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
@@ -4655,10 +5842,22 @@ packages:
resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
engines: {node: '>= 0.8'}
+ find-cache-dir@2.1.0:
+ resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==}
+ engines: {node: '>=6'}
+
+ find-cache-dir@3.3.2:
+ resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==}
+ engines: {node: '>=8'}
+
find-my-way@8.1.0:
resolution: {integrity: sha512-41QwjCGcVTODUmLLqTMeoHeiozbMXYMAE1CKFiDyi9zVZ2Vjh0yz3MF0WQZoIb+cmzP/XlbFjlF2NtJmvZHznA==}
engines: {node: '>=14'}
+ find-up@3.0.0:
+ resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
+ engines: {node: '>=6'}
+
find-up@4.1.0:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
engines: {node: '>=8'}
@@ -4685,6 +5884,10 @@ packages:
flatted@3.3.1:
resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
+ flow-parser@0.245.2:
+ resolution: {integrity: sha512-FU4yuqC1j2IeWWicpzG0YJrXHJgKjK/AU8QKK/7MvQaNhcoGisDoE7FJLGCtbvnifzsgDWdm9/jtTF7Mp+PJXQ==}
+ engines: {node: '>=0.4.0'}
+
for-each@0.3.3:
resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
@@ -4779,6 +5982,9 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
+ get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+
get-intrinsic@1.2.4:
resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
engines: {node: '>= 0.4'}
@@ -4799,6 +6005,10 @@ packages:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
+ get-stream@8.0.1:
+ resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
+ engines: {node: '>=16'}
+
get-symbol-description@1.0.2:
resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
engines: {node: '>= 0.4'}
@@ -4806,9 +6016,16 @@ packages:
get-tsconfig@4.7.5:
resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==}
+ giget@1.2.3:
+ resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==}
+ hasBin: true
+
github-from-package@0.0.0:
resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
+ github-slugger@2.0.0:
+ resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
+
glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@@ -4817,6 +6034,12 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
+ glob-promise@4.2.2:
+ resolution: {integrity: sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ glob: ^7.1.6
+
glob@10.3.10:
resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -4852,6 +6075,10 @@ packages:
resolution: {integrity: sha512-VZAJ4cewHTExBWDHR6yptdIBlx9YSSZuwojj9Nt5mBRXQzrKakDsVKQ1J63sklLvzAJm0X5+RpO4i3Y2hcOnFw==}
engines: {node: '>=18'}
+ globals@15.9.0:
+ resolution: {integrity: sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==}
+ engines: {node: '>=18'}
+
globalthis@1.0.3:
resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
engines: {node: '>= 0.4'}
@@ -4864,6 +6091,10 @@ packages:
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
engines: {node: '>=10'}
+ globby@14.0.2:
+ resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==}
+ engines: {node: '>=18'}
+
gopd@1.0.1:
resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
@@ -4913,12 +6144,21 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
+ hast-util-heading-rank@3.0.0:
+ resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==}
+
+ hast-util-is-element@3.0.0:
+ resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
+
hast-util-to-estree@3.1.0:
resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==}
hast-util-to-jsx-runtime@2.3.0:
resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==}
+ hast-util-to-string@3.0.0:
+ resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==}
+
hast-util-whitespace@3.0.0:
resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
@@ -4932,6 +6172,10 @@ packages:
html-escaper@2.0.2:
resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
+ html-tags@3.3.1:
+ resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
+ engines: {node: '>=8'}
+
http-cache-semantics@4.1.1:
resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
@@ -4973,6 +6217,10 @@ packages:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
+ human-signals@5.0.0:
+ resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
+ engines: {node: '>=16.17.0'}
+
humanize-ms@1.2.1:
resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
@@ -5052,12 +6300,20 @@ packages:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
+ is-absolute-url@4.0.1:
+ resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
is-alphabetical@2.0.1:
resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
is-alphanumerical@2.0.1:
resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
+ is-arguments@1.1.1:
+ resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
+ engines: {node: '>= 0.4'}
+
is-array-buffer@3.0.4:
resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==}
engines: {node: '>= 0.4'}
@@ -5159,6 +6415,14 @@ packages:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
engines: {node: '>=12'}
+ is-plain-object@2.0.4:
+ resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
+ engines: {node: '>=0.10.0'}
+
+ is-plain-object@5.0.0:
+ resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
+ engines: {node: '>=0.10.0'}
+
is-reference@3.0.2:
resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==}
@@ -5182,6 +6446,10 @@ packages:
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
engines: {node: '>=8'}
+ is-stream@3.0.0:
+ resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
is-string@1.0.7:
resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
engines: {node: '>= 0.4'}
@@ -5229,6 +6497,10 @@ packages:
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+ isobject@3.0.1:
+ resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
+ engines: {node: '>=0.10.0'}
+
istanbul-lib-coverage@3.2.2:
resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
engines: {node: '>=8'}
@@ -5406,6 +6678,10 @@ packages:
resolution: {integrity: sha512-uy2bNX5zQ+tESe+TiC7ilGRz8AtRGmnJH55NC5S0nSUjvvvM2hJHmefHErugGXN4pNv4Qx7vLsnNw9qJ9mtIsw==}
hasBin: true
+ joycon@3.1.1:
+ resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
+ engines: {node: '>=10'}
+
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -5420,6 +6696,15 @@ packages:
jsbn@1.1.0:
resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==}
+ jscodeshift@0.15.2:
+ resolution: {integrity: sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==}
+ hasBin: true
+ peerDependencies:
+ '@babel/preset-env': ^7.1.6
+ peerDependenciesMeta:
+ '@babel/preset-env':
+ optional: true
+
jsesc@0.5.0:
resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
hasBin: true
@@ -5472,6 +6757,10 @@ packages:
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ kind-of@6.0.3:
+ resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+ engines: {node: '>=0.10.0'}
+
kleur@3.0.3:
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
engines: {node: '>=6'}
@@ -5505,10 +6794,18 @@ packages:
lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+ load-tsconfig@0.2.5:
+ resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
load-yaml-file@0.2.0:
resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==}
engines: {node: '>=6'}
+ locate-path@3.0.0:
+ resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==}
+ engines: {node: '>=6'}
+
locate-path@5.0.0:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'}
@@ -5535,6 +6832,9 @@ packages:
lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+ lodash.sortby@4.7.0:
+ resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
+
lodash.startcase@4.4.0:
resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
@@ -5552,6 +6852,9 @@ packages:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
+ loupe@2.3.7:
+ resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
+
lowercase-keys@2.0.0:
resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
engines: {node: '>=8'}
@@ -5574,6 +6877,21 @@ packages:
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
engines: {node: '>=10'}
+ lz-string@1.5.0:
+ resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
+ hasBin: true
+
+ magic-string@0.27.0:
+ resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
+ engines: {node: '>=12'}
+
+ magic-string@0.30.11:
+ resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==}
+
+ make-dir@2.1.0:
+ resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
+ engines: {node: '>=6'}
+
make-dir@3.1.0:
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
engines: {node: '>=8'}
@@ -5595,10 +6913,19 @@ packages:
manage-path@2.0.0:
resolution: {integrity: sha512-NJhyB+PJYTpxhxZJ3lecIGgh4kwIY2RAh44XvAz9UlqthlQwtPBf62uBVR8XaD8CRuSjQ6TnZH2lNJkbLPZM2A==}
+ map-or-similar@1.5.0:
+ resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==}
+
markdown-extensions@2.0.0:
resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
engines: {node: '>=16'}
+ markdown-to-jsx@7.5.0:
+ resolution: {integrity: sha512-RrBNcMHiFPcz/iqIj0n3wclzHXjwS7mzjBNWecKKVhNTIxQepIix6Il/wZCn2Cg5Y1ow2Qi84+eJrryFRWBEWw==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ react: '>= 0.14.0'
+
mdast-util-from-markdown@2.0.1:
resolution: {integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==}
@@ -5630,6 +6957,9 @@ packages:
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
engines: {node: '>= 0.6'}
+ memoizerific@1.11.3:
+ resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==}
+
merge-descriptors@1.0.1:
resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
@@ -5754,6 +7084,10 @@ packages:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
+ mimic-fn@4.0.0:
+ resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
+ engines: {node: '>=12'}
+
mimic-response@1.0.1:
resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
engines: {node: '>=4'}
@@ -5762,6 +7096,10 @@ packages:
resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
engines: {node: '>=10'}
+ min-indent@1.0.1:
+ resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
+ engines: {node: '>=4'}
+
minimatch@10.0.1:
resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
engines: {node: 20 || >=22}
@@ -5842,6 +7180,9 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ mlly@1.7.1:
+ resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==}
+
moment-timezone@0.5.45:
resolution: {integrity: sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==}
@@ -5886,6 +7227,9 @@ packages:
resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
engines: {node: '>= 0.6'}
+ neo-async@2.6.2:
+ resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+
next@14.2.5:
resolution: {integrity: sha512-0f8aRfBVL+mpzfBjYfQuLWh2WyAwtJXCRfkPF4UJ5qd2YwrHczsrSzXU4tRMV0OAxR8ZJZWPFn6uhSC56UTsLA==}
engines: {node: '>=18.17.0'}
@@ -5919,6 +7263,13 @@ packages:
resolution: {integrity: sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==}
engines: {node: ^16 || ^18 || >= 20}
+ node-dir@0.1.17:
+ resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==}
+ engines: {node: '>= 0.10.5'}
+
+ node-fetch-native@1.6.4:
+ resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==}
+
node-fetch@2.6.7:
resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
engines: {node: 4.x || >=6.0.0}
@@ -5989,6 +7340,10 @@ packages:
resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
engines: {node: '>=8'}
+ npm-run-path@5.3.0:
+ resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
npmlog@5.0.1:
resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==}
deprecated: This package is no longer supported.
@@ -5998,6 +7353,11 @@ packages:
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
deprecated: This package is no longer supported.
+ nypm@0.3.11:
+ resolution: {integrity: sha512-E5GqaAYSnbb6n1qZyik2wjPDZON43FqOJO59+3OkWrnmQtjggrMOVnsyzfjxp/tS6nlYJBA4zRA5jSM2YaadMg==}
+ engines: {node: ^14.16.0 || >=16.10.0}
+ hasBin: true
+
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
@@ -6037,6 +7397,9 @@ packages:
resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==}
engines: {node: '>= 0.4'}
+ ohash@1.1.3:
+ resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==}
+
on-exit-leak-free@2.1.2:
resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
engines: {node: '>=14.0.0'}
@@ -6059,6 +7422,10 @@ packages:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
+ onetime@6.0.0:
+ resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
+ engines: {node: '>=12'}
+
optionator@0.9.4:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
@@ -6106,6 +7473,10 @@ packages:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
engines: {node: '>=10'}
+ p-locate@3.0.0:
+ resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==}
+ engines: {node: '>=6'}
+
p-locate@4.1.0:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
@@ -6154,6 +7525,10 @@ packages:
path-browserify@1.0.1:
resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
+ path-exists@3.0.0:
+ resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
+ engines: {node: '>=4'}
+
path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
@@ -6170,6 +7545,10 @@ packages:
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
engines: {node: '>=8'}
+ path-key@4.0.0:
+ resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
+ engines: {node: '>=12'}
+
path-match@1.2.4:
resolution: {integrity: sha512-UWlehEdqu36jmh4h5CWJ7tARp1OEVKGHKm6+dg9qMq5RKUTV5WJrGgaZ3dN2m7WFAXDbjlHzvJvL/IUpy84Ktw==}
@@ -6200,6 +7579,16 @@ packages:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
+ path-type@5.0.0:
+ resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==}
+ engines: {node: '>=12'}
+
+ pathe@1.1.2:
+ resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+
+ pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+
peek-readable@5.0.0:
resolution: {integrity: sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==}
engines: {node: '>=14.16'}
@@ -6279,10 +7668,21 @@ packages:
piscina@4.5.1:
resolution: {integrity: sha512-DVhySLPfqAW+uRH9dF0bjA2xEWr5ANLAzkYXx5adSLMFnwssSIVJYhg0FlvgYsnT/khILQJ3WkjqbAlBvt+maw==}
+ pkg-dir@3.0.0:
+ resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==}
+ engines: {node: '>=6'}
+
pkg-dir@4.2.0:
resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
engines: {node: '>=8'}
+ pkg-types@1.2.0:
+ resolution: {integrity: sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==}
+
+ polished@4.3.1:
+ resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==}
+ engines: {node: '>=10'}
+
possible-typed-array-names@1.0.0:
resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
engines: {node: '>= 0.4'}
@@ -6311,6 +7711,24 @@ packages:
ts-node:
optional: true
+ postcss-load-config@6.0.1:
+ resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ jiti: '>=1.21.0'
+ postcss: '>=8.0.9'
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+ postcss:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
postcss-nested@6.0.1:
resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
engines: {node: '>=12.0'}
@@ -6332,6 +7750,10 @@ packages:
resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==}
engines: {node: ^10 || ^12 || >=14}
+ postcss@8.4.45:
+ resolution: {integrity: sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==}
+ engines: {node: ^10 || ^12 || >=14}
+
postgres-array@2.0.0:
resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==}
engines: {node: '>=4'}
@@ -6383,6 +7805,10 @@ packages:
resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==}
engines: {node: '>=6'}
+ pretty-format@27.5.1:
+ resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
+ engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
+
pretty-format@29.7.0:
resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -6486,6 +7912,27 @@ packages:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
+ react-colorful@5.6.1:
+ resolution: {integrity: sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==}
+ peerDependencies:
+ react: '>=16.8.0'
+ react-dom: '>=16.8.0'
+
+ react-confetti@6.1.0:
+ resolution: {integrity: sha512-7Ypx4vz0+g8ECVxr88W9zhcQpbeujJAVqL14ZnXJ3I23mOI9/oBVTQ3dkJhUmB0D6XOtCZEM6N0Gm9PMngkORw==}
+ engines: {node: '>=10.18'}
+ peerDependencies:
+ react: ^16.3.0 || ^17.0.1 || ^18.0.0
+
+ react-docgen-typescript@2.2.2:
+ resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==}
+ peerDependencies:
+ typescript: '>= 4.3.x'
+
+ react-docgen@7.0.3:
+ resolution: {integrity: sha512-i8aF1nyKInZnANZ4uZrH49qn1paRgBZ7wZiCNBMnenlPzEv0mRl+ShpTVEI6wZNl8sSc79xZkivtgLKQArcanQ==}
+ engines: {node: '>=16.14.0'}
+
react-dom@18.2.0:
resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
peerDependencies:
@@ -6496,12 +7943,28 @@ packages:
peerDependencies:
react: ^18.3.1
+ react-element-to-jsx-string@15.0.0:
+ resolution: {integrity: sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==}
+ peerDependencies:
+ react: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0
+ react-dom: ^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0
+
react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+ react-is@17.0.2:
+ resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
+
+ react-is@18.1.0:
+ resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==}
+
react-is@18.3.1:
resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
+ react-refresh@0.14.2:
+ resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==}
+ engines: {node: '>=0.10.0'}
+
react@18.3.1:
resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
engines: {node: '>=0.10.0'}
@@ -6540,6 +8003,14 @@ packages:
resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
engines: {node: '>= 12.13.0'}
+ recast@0.23.9:
+ resolution: {integrity: sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==}
+ engines: {node: '>= 4'}
+
+ redent@3.0.0:
+ resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
+ engines: {node: '>=8'}
+
redis@4.7.0:
resolution: {integrity: sha512-zvmkHEAdGMn+hMRXuMBtu4Vo5P6rHQjLoHftu+lBqq8ZTA3RCVC/WzD790bkKKiNFp7d5/9PcSD19fJyyRvOdQ==}
@@ -6576,6 +8047,12 @@ packages:
resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==}
hasBin: true
+ rehype-external-links@3.0.0:
+ resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==}
+
+ rehype-slug@6.0.0:
+ resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==}
+
reinterval@1.1.0:
resolution: {integrity: sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==}
@@ -6596,6 +8073,10 @@ packages:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
+ requireindex@1.2.0:
+ resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==}
+ engines: {node: '>=0.10.5'}
+
resolve-alpn@1.2.1:
resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
@@ -6654,6 +8135,11 @@ packages:
rfdc@1.3.1:
resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==}
+ rimraf@2.6.3:
+ resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+
rimraf@3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
deprecated: Rimraf versions prior to v4 are no longer supported
@@ -6664,9 +8150,17 @@ packages:
engines: {node: 20 || >=22}
hasBin: true
+ rollup@4.21.2:
+ resolution: {integrity: sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+ rxjs@7.8.1:
+ resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
+
safe-array-concat@1.1.2:
resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==}
engines: {node: '>=0.4'}
@@ -6708,6 +8202,10 @@ packages:
resolution: {integrity: sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==}
engines: {node: '>=12'}
+ semver@5.7.2:
+ resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
+ hasBin: true
+
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
@@ -6727,6 +8225,11 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ semver@7.6.3:
+ resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
+ engines: {node: '>=10'}
+ hasBin: true
+
send@0.18.0:
resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==}
engines: {node: '>= 0.8.0'}
@@ -6792,6 +8295,10 @@ packages:
setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+ shallow-clone@3.0.1:
+ resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
+ engines: {node: '>=8'}
+
shebang-command@1.2.0:
resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
engines: {node: '>=0.10.0'}
@@ -6808,6 +8315,9 @@ packages:
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
engines: {node: '>=8'}
+ shell-quote@1.8.1:
+ resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==}
+
side-channel@1.0.6:
resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
engines: {node: '>= 0.4'}
@@ -6840,6 +8350,10 @@ packages:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
+ slash@5.1.0:
+ resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==}
+ engines: {node: '>=14.16'}
+
smart-buffer@4.2.0:
resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
@@ -6881,9 +8395,16 @@ packages:
resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
engines: {node: '>= 8'}
+ source-map@0.8.0-beta.0:
+ resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
+ engines: {node: '>= 8'}
+
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+ spawn-command@0.0.2:
+ resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==}
+
spawndamnit@2.0.0:
resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==}
@@ -6922,6 +8443,10 @@ packages:
resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
engines: {node: '>= 0.8'}
+ storybook@8.2.9:
+ resolution: {integrity: sha512-S7Q/Yt4A+nu1O23rg39lQvBqL2Vg+PKXbserDWUR4LFJtfmoZ2xGO8oFIhJmvvhjUBvolw1q7QDeswPq2i0sGw==}
+ hasBin: true
+
stream-to-array@2.3.0:
resolution: {integrity: sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==}
@@ -6992,6 +8517,18 @@ packages:
resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
engines: {node: '>=6'}
+ strip-final-newline@3.0.0:
+ resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
+ engines: {node: '>=12'}
+
+ strip-indent@3.0.0:
+ resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
+ engines: {node: '>=8'}
+
+ strip-indent@4.0.0:
+ resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==}
+ engines: {node: '>=12'}
+
strip-json-comments@2.0.1:
resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
engines: {node: '>=0.10.0'}
@@ -7058,6 +8595,11 @@ packages:
resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==}
engines: {node: ^14.18.0 || >=16.0.0}
+ tailwindcss@3.4.10:
+ resolution: {integrity: sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
tailwindcss@3.4.7:
resolution: {integrity: sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ==}
engines: {node: '>=14.0.0'}
@@ -7082,6 +8624,21 @@ packages:
resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
engines: {node: '>=10'}
+ telejson@7.2.0:
+ resolution: {integrity: sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==}
+
+ temp-dir@3.0.0:
+ resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==}
+ engines: {node: '>=14.16'}
+
+ temp@0.8.4:
+ resolution: {integrity: sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==}
+ engines: {node: '>=6.0.0'}
+
+ tempy@3.1.0:
+ resolution: {integrity: sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==}
+ engines: {node: '>=14.16'}
+
term-size@2.2.1:
resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
engines: {node: '>=8'}
@@ -7114,6 +8671,13 @@ packages:
tiny-case@1.0.3:
resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==}
+ tiny-invariant@1.3.3:
+ resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
+
+ tinyspy@2.2.1:
+ resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==}
+ engines: {node: '>=14.0.0'}
+
tmp@0.0.33:
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
engines: {node: '>=0.6.0'}
@@ -7158,6 +8722,9 @@ packages:
tr46@0.0.3:
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+ tr46@1.0.1:
+ resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
+
tree-kill@1.2.2:
resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
hasBin: true
@@ -7178,6 +8745,10 @@ packages:
peerDependencies:
typescript: '>=4.2.0'
+ ts-dedent@2.2.0:
+ resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==}
+ engines: {node: '>=6.10'}
+
ts-interface-checker@0.1.13:
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
@@ -7205,6 +8776,30 @@ packages:
esbuild:
optional: true
+ ts-jest@29.2.5:
+ resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@babel/core': '>=7.0.0-beta.0 <8'
+ '@jest/transform': ^29.0.0
+ '@jest/types': ^29.0.0
+ babel-jest: ^29.0.0
+ esbuild: '*'
+ jest: ^29.0.0
+ typescript: '>=4.3 <6'
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+ '@jest/transform':
+ optional: true
+ '@jest/types':
+ optional: true
+ babel-jest:
+ optional: true
+ esbuild:
+ optional: true
+
ts-morph@12.0.0:
resolution: {integrity: sha512-VHC8XgU2fFW7yO1f/b3mxKDje1vmyzFXHWzOYmKEkCEwcLjDtbdLgBQviqj4ZwP4MJkQtRo6Ha2I29lq/B+VxA==}
@@ -7228,14 +8823,51 @@ packages:
tsconfig-paths@3.15.0:
resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+ tsconfig-paths@4.2.0:
+ resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
+ engines: {node: '>=6'}
+
+ tslib@1.14.1:
+ resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+
tslib@2.6.3:
resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
+ tsup@8.2.4:
+ resolution: {integrity: sha512-akpCPePnBnC/CXgRrcy72ZSntgIEUa1jN0oJbbvpALWKNOz1B7aM+UVDWGRGIO/T/PZugAESWDJUAb5FD48o8Q==}
+ engines: {node: '>=18'}
+ hasBin: true
+ peerDependencies:
+ '@microsoft/api-extractor': ^7.36.0
+ '@swc/core': ^1
+ postcss: ^8.4.12
+ typescript: '>=4.5.0'
+ peerDependenciesMeta:
+ '@microsoft/api-extractor':
+ optional: true
+ '@swc/core':
+ optional: true
+ postcss:
+ optional: true
+ typescript:
+ optional: true
+
+ tsutils@3.21.0:
+ resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
+ engines: {node: '>= 6'}
+ peerDependencies:
+ typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
+
tsx@4.16.2:
resolution: {integrity: sha512-C1uWweJDgdtX2x600HjaFaucXTilT7tgUZHbOE4+ypskZ1OP8CRCSDkCxG6Vya9EwaFIVagWwpaVAn5wzypaqQ==}
engines: {node: '>=18.0.0'}
hasBin: true
+ tsx@4.19.0:
+ resolution: {integrity: sha512-bV30kM7bsLZKZIOCHeMNVMJ32/LuJzLVajkQI/qf92J2Qr08ueLQvW00PUZGiuLPP760UINwupgUj8qrSCPUKg==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
tunnel-agent@0.6.0:
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
@@ -7273,6 +8905,9 @@ packages:
resolution: {integrity: sha512-QaLaUL1CqblSKKPgLrFW3lZWkWG4pGBQNW+q1ScJB5v1D/nFWtsrD/yZljW/bdawg90ihi4/ftQJ3h6fz1FamA==}
hasBin: true
+ tween-functions@1.2.0:
+ resolution: {integrity: sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA==}
+
type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
@@ -7281,6 +8916,10 @@ packages:
resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
engines: {node: '>=4'}
+ type-detect@4.1.0:
+ resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==}
+ engines: {node: '>=4'}
+
type-fest@0.20.2:
resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
engines: {node: '>=10'}
@@ -7289,6 +8928,10 @@ packages:
resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
engines: {node: '>=10'}
+ type-fest@1.4.0:
+ resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==}
+ engines: {node: '>=10'}
+
type-fest@2.19.0:
resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
engines: {node: '>=12.20'}
@@ -7326,6 +8969,15 @@ packages:
typescript:
optional: true
+ typescript-eslint@8.4.0:
+ resolution: {integrity: sha512-67qoc3zQZe3CAkO0ua17+7aCLI0dU+sSQd1eKPGq06QE4rfQjstVXR6woHO5qQvGUa550NfGckT4tzh3b3c8Pw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
typescript@4.9.5:
resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
engines: {node: '>=4.2.0'}
@@ -7336,6 +8988,9 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
+ ufo@1.5.4:
+ resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
+
uid-promise@1.0.0:
resolution: {integrity: sha512-R8375j0qwXyIu/7R0tjdF06/sElHqbmdmWC9M2qQHpEVbvE4I5+38KJI7LUUmQMp7NVq4tKHiBMkT0NFM453Ig==}
@@ -7371,6 +9026,10 @@ packages:
resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
engines: {node: '>=4'}
+ unicorn-magic@0.1.0:
+ resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==}
+ engines: {node: '>=18'}
+
unified@11.0.4:
resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==}
@@ -7380,6 +9039,10 @@ packages:
unique-slug@2.0.2:
resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==}
+ unique-string@3.0.0:
+ resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==}
+ engines: {node: '>=12'}
+
unist-util-is@6.0.0:
resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
@@ -7413,6 +9076,15 @@ packages:
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
engines: {node: '>= 0.8'}
+ unplugin@1.13.1:
+ resolution: {integrity: sha512-6Kq1iSSwg7KyjcThRUks9LuqDAKvtnioxbL9iEtB9ctTyBA5OmrB8gZd/d225VJu1w3UpUsKV7eGrvf59J7+VA==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ webpack-sources: ^3
+ peerDependenciesMeta:
+ webpack-sources:
+ optional: true
+
update-browserslist-db@1.0.16:
resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==}
hasBin: true
@@ -7431,6 +9103,9 @@ packages:
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+ util@0.12.5:
+ resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==}
+
utils-merge@1.0.1:
resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
engines: {node: '>= 0.4.0'}
@@ -7447,6 +9122,10 @@ packages:
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
hasBin: true
+ uuid@9.0.1:
+ resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
+ hasBin: true
+
v8-compile-cache-lib@3.0.1:
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
@@ -7473,6 +9152,40 @@ packages:
vfile@6.0.1:
resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==}
+ vite@5.4.3:
+ resolution: {integrity: sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
+ walk-up-path@3.0.1:
+ resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==}
+
walker@1.0.8:
resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
@@ -7485,9 +9198,18 @@ packages:
webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+ webidl-conversions@4.0.2:
+ resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
+
+ webpack-virtual-modules@0.6.2:
+ resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+
whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+ whatwg-url@7.1.0:
+ resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
+
which-boxed-primitive@1.0.2:
resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
@@ -7537,10 +9259,25 @@ packages:
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ write-file-atomic@2.4.3:
+ resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==}
+
write-file-atomic@4.0.2:
resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ ws@8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
xdg-app-paths@5.1.0:
resolution: {integrity: sha512-RAQ3WkPf4KTU1A8RtFx3gWywzVKe00tfOPFfl2NDGqbIFENQO4kqAJp7mhQjNj/33W5x5hiWWUdyfPq/5SU3QA==}
engines: {node: '>=6'}
@@ -7609,6 +9346,8 @@ packages:
snapshots:
+ '@adobe/css-tools@4.4.0': {}
+
'@alloc/quick-lru@5.2.0': {}
'@ampproject/remapping@2.3.0':
@@ -7647,7 +9386,7 @@ snapshots:
'@babel/generator@7.24.7':
dependencies:
- '@babel/types': 7.24.7
+ '@babel/types': 7.25.4
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
jsesc: 2.5.2
@@ -7742,7 +9481,7 @@ snapshots:
'@babel/helper-hoist-variables@7.24.7':
dependencies:
- '@babel/types': 7.24.7
+ '@babel/types': 7.25.4
'@babel/helper-member-expression-to-functions@7.24.7':
dependencies:
@@ -7960,6 +9699,11 @@ snapshots:
'@babel/core': 7.25.2
'@babel/helper-plugin-utils': 7.24.8
+ '@babel/plugin-syntax-flow@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
'@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.25.2)':
dependencies:
'@babel/core': 7.25.2
@@ -8147,6 +9891,12 @@ snapshots:
'@babel/helper-plugin-utils': 7.24.8
'@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.2)
+ '@babel/plugin-transform-flow-strip-types@7.25.2(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/plugin-syntax-flow': 7.24.7(@babel/core@7.25.2)
+
'@babel/plugin-transform-for-of@7.24.7(@babel/core@7.25.2)':
dependencies:
'@babel/core': 7.25.2
@@ -8315,6 +10065,16 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
+ '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+
'@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.25.2)':
dependencies:
'@babel/core': 7.25.2
@@ -8493,6 +10253,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/preset-flow@7.24.7(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/helper-plugin-utils': 7.24.8
+ '@babel/helper-validator-option': 7.24.8
+ '@babel/plugin-transform-flow-strip-types': 7.25.2(@babel/core@7.25.2)
+
'@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.2)':
dependencies:
'@babel/core': 7.25.2
@@ -8523,6 +10290,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@babel/register@7.24.6(@babel/core@7.25.2)':
+ dependencies:
+ '@babel/core': 7.25.2
+ clone-deep: 4.0.1
+ find-cache-dir: 2.1.0
+ make-dir: 2.1.0
+ pirates: 4.0.6
+ source-map-support: 0.5.21
+
'@babel/regjsgen@0.8.0': {}
'@babel/runtime@7.24.7':
@@ -8580,6 +10356,8 @@ snapshots:
'@babel/helper-validator-identifier': 7.24.7
to-fast-properties: 2.0.0
+ '@base2/pretty-print-object@1.0.1': {}
+
'@bcoe/v8-coverage@0.2.3': {}
'@changesets/apply-release-plan@7.0.4':
@@ -8738,6 +10516,18 @@ snapshots:
human-id: 1.0.2
prettier: 2.8.8
+ '@chromatic-com/storybook@1.9.0(react@18.3.1)':
+ dependencies:
+ chromatic: 11.7.1
+ filesize: 10.1.6
+ jsonfile: 6.1.0
+ react-confetti: 6.1.0(react@18.3.1)
+ strip-ansi: 7.1.0
+ transitivePeerDependencies:
+ - '@chromatic-com/cypress'
+ - '@chromatic-com/playwright'
+ - react
+
'@colors/colors@1.5.0':
optional: true
@@ -8745,6 +10535,8 @@ snapshots:
dependencies:
'@jridgewell/trace-mapping': 0.3.9
+ '@drizzle-team/brocli@0.10.1': {}
+
'@edge-runtime/format@2.2.1': {}
'@edge-runtime/node-utils@2.3.0': {}
@@ -8773,6 +10565,9 @@ snapshots:
'@esbuild/aix-ppc64@0.21.5':
optional: true
+ '@esbuild/aix-ppc64@0.23.1':
+ optional: true
+
'@esbuild/android-arm64@0.18.20':
optional: true
@@ -8782,6 +10577,9 @@ snapshots:
'@esbuild/android-arm64@0.21.5':
optional: true
+ '@esbuild/android-arm64@0.23.1':
+ optional: true
+
'@esbuild/android-arm@0.18.20':
optional: true
@@ -8791,6 +10589,9 @@ snapshots:
'@esbuild/android-arm@0.21.5':
optional: true
+ '@esbuild/android-arm@0.23.1':
+ optional: true
+
'@esbuild/android-x64@0.18.20':
optional: true
@@ -8800,6 +10601,9 @@ snapshots:
'@esbuild/android-x64@0.21.5':
optional: true
+ '@esbuild/android-x64@0.23.1':
+ optional: true
+
'@esbuild/darwin-arm64@0.18.20':
optional: true
@@ -8809,6 +10613,9 @@ snapshots:
'@esbuild/darwin-arm64@0.21.5':
optional: true
+ '@esbuild/darwin-arm64@0.23.1':
+ optional: true
+
'@esbuild/darwin-x64@0.18.20':
optional: true
@@ -8818,6 +10625,9 @@ snapshots:
'@esbuild/darwin-x64@0.21.5':
optional: true
+ '@esbuild/darwin-x64@0.23.1':
+ optional: true
+
'@esbuild/freebsd-arm64@0.18.20':
optional: true
@@ -8827,6 +10637,9 @@ snapshots:
'@esbuild/freebsd-arm64@0.21.5':
optional: true
+ '@esbuild/freebsd-arm64@0.23.1':
+ optional: true
+
'@esbuild/freebsd-x64@0.18.20':
optional: true
@@ -8836,6 +10649,9 @@ snapshots:
'@esbuild/freebsd-x64@0.21.5':
optional: true
+ '@esbuild/freebsd-x64@0.23.1':
+ optional: true
+
'@esbuild/linux-arm64@0.18.20':
optional: true
@@ -8845,6 +10661,9 @@ snapshots:
'@esbuild/linux-arm64@0.21.5':
optional: true
+ '@esbuild/linux-arm64@0.23.1':
+ optional: true
+
'@esbuild/linux-arm@0.18.20':
optional: true
@@ -8854,6 +10673,9 @@ snapshots:
'@esbuild/linux-arm@0.21.5':
optional: true
+ '@esbuild/linux-arm@0.23.1':
+ optional: true
+
'@esbuild/linux-ia32@0.18.20':
optional: true
@@ -8863,6 +10685,9 @@ snapshots:
'@esbuild/linux-ia32@0.21.5':
optional: true
+ '@esbuild/linux-ia32@0.23.1':
+ optional: true
+
'@esbuild/linux-loong64@0.18.20':
optional: true
@@ -8872,6 +10697,9 @@ snapshots:
'@esbuild/linux-loong64@0.21.5':
optional: true
+ '@esbuild/linux-loong64@0.23.1':
+ optional: true
+
'@esbuild/linux-mips64el@0.18.20':
optional: true
@@ -8881,6 +10709,9 @@ snapshots:
'@esbuild/linux-mips64el@0.21.5':
optional: true
+ '@esbuild/linux-mips64el@0.23.1':
+ optional: true
+
'@esbuild/linux-ppc64@0.18.20':
optional: true
@@ -8890,6 +10721,9 @@ snapshots:
'@esbuild/linux-ppc64@0.21.5':
optional: true
+ '@esbuild/linux-ppc64@0.23.1':
+ optional: true
+
'@esbuild/linux-riscv64@0.18.20':
optional: true
@@ -8899,6 +10733,9 @@ snapshots:
'@esbuild/linux-riscv64@0.21.5':
optional: true
+ '@esbuild/linux-riscv64@0.23.1':
+ optional: true
+
'@esbuild/linux-s390x@0.18.20':
optional: true
@@ -8908,6 +10745,9 @@ snapshots:
'@esbuild/linux-s390x@0.21.5':
optional: true
+ '@esbuild/linux-s390x@0.23.1':
+ optional: true
+
'@esbuild/linux-x64@0.18.20':
optional: true
@@ -8917,6 +10757,9 @@ snapshots:
'@esbuild/linux-x64@0.21.5':
optional: true
+ '@esbuild/linux-x64@0.23.1':
+ optional: true
+
'@esbuild/netbsd-x64@0.18.20':
optional: true
@@ -8926,6 +10769,12 @@ snapshots:
'@esbuild/netbsd-x64@0.21.5':
optional: true
+ '@esbuild/netbsd-x64@0.23.1':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.23.1':
+ optional: true
+
'@esbuild/openbsd-x64@0.18.20':
optional: true
@@ -8935,6 +10784,9 @@ snapshots:
'@esbuild/openbsd-x64@0.21.5':
optional: true
+ '@esbuild/openbsd-x64@0.23.1':
+ optional: true
+
'@esbuild/sunos-x64@0.18.20':
optional: true
@@ -8944,6 +10796,9 @@ snapshots:
'@esbuild/sunos-x64@0.21.5':
optional: true
+ '@esbuild/sunos-x64@0.23.1':
+ optional: true
+
'@esbuild/win32-arm64@0.18.20':
optional: true
@@ -8953,6 +10808,9 @@ snapshots:
'@esbuild/win32-arm64@0.21.5':
optional: true
+ '@esbuild/win32-arm64@0.23.1':
+ optional: true
+
'@esbuild/win32-ia32@0.18.20':
optional: true
@@ -8962,6 +10820,9 @@ snapshots:
'@esbuild/win32-ia32@0.21.5':
optional: true
+ '@esbuild/win32-ia32@0.23.1':
+ optional: true
+
'@esbuild/win32-x64@0.18.20':
optional: true
@@ -8971,11 +10832,19 @@ snapshots:
'@esbuild/win32-x64@0.21.5':
optional: true
+ '@esbuild/win32-x64@0.23.1':
+ optional: true
+
'@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)':
dependencies:
eslint: 8.57.0
eslint-visitor-keys: 3.4.3
+ '@eslint-community/eslint-utils@4.4.0(eslint@9.10.0(jiti@1.21.3))':
+ dependencies:
+ eslint: 9.10.0(jiti@1.21.3)
+ eslint-visitor-keys: 3.4.3
+
'@eslint-community/eslint-utils@4.4.0(eslint@9.9.1(jiti@1.21.3))':
dependencies:
eslint: 9.9.1(jiti@1.21.3)
@@ -9021,10 +10890,18 @@ snapshots:
'@eslint/js@8.57.0': {}
+ '@eslint/js@9.10.0': {}
+
'@eslint/js@9.9.1': {}
'@eslint/object-schema@2.1.4': {}
+ '@eslint/plugin-kit@0.1.0':
+ dependencies:
+ levn: 0.4.1
+
+ '@faker-js/faker@8.4.1': {}
+
'@fastify/ajv-compiler@3.5.0':
dependencies:
ajv: 8.12.0
@@ -9088,7 +10965,7 @@ snapshots:
jest-util: 29.7.0
slash: 3.0.0
- '@jest/core@29.7.0(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))':
+ '@jest/core@29.7.0(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))':
dependencies:
'@jest/console': 29.7.0
'@jest/reporters': 29.7.0
@@ -9102,7 +10979,7 @@ snapshots:
exit: 0.1.2
graceful-fs: 4.2.11
jest-changed-files: 29.7.0
- jest-config: 29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
+ jest-config: 29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
jest-haste-map: 29.7.0
jest-message-util: 29.7.0
jest-regex-util: 29.6.3
@@ -9123,7 +11000,7 @@ snapshots:
- supports-color
- ts-node
- '@jest/core@29.7.0(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))':
+ '@jest/core@29.7.0(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4))':
dependencies:
'@jest/console': 29.7.0
'@jest/reporters': 29.7.0
@@ -9137,7 +11014,7 @@ snapshots:
exit: 0.1.2
graceful-fs: 4.2.11
jest-changed-files: 29.7.0
- jest-config: 29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))
+ jest-config: 29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4))
jest-haste-map: 29.7.0
jest-message-util: 29.7.0
jest-regex-util: 29.6.3
@@ -9276,6 +11153,16 @@ snapshots:
'@types/yargs': 17.0.32
chalk: 4.1.2
+ '@joshwooding/vite-plugin-react-docgen-typescript@0.3.1(typescript@5.5.4)(vite@5.4.3(@types/node@22.5.4))':
+ dependencies:
+ glob: 7.2.3
+ glob-promise: 4.2.2(glob@7.2.3)
+ magic-string: 0.27.0
+ react-docgen-typescript: 2.2.2(typescript@5.5.4)
+ vite: 5.4.3(@types/node@22.5.4)
+ optionalDependencies:
+ typescript: 5.5.4
+
'@jridgewell/gen-mapping@0.3.5':
dependencies:
'@jridgewell/set-array': 1.2.1
@@ -9288,6 +11175,8 @@ snapshots:
'@jridgewell/sourcemap-codec@1.4.15': {}
+ '@jridgewell/sourcemap-codec@1.5.0': {}
+
'@jridgewell/trace-mapping@0.3.25':
dependencies:
'@jridgewell/resolve-uri': 3.1.2
@@ -9363,6 +11252,12 @@ snapshots:
'@types/react': 18.3.3
react: 18.3.1
+ '@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1)':
+ dependencies:
+ '@types/mdx': 2.0.13
+ '@types/react': 18.3.5
+ react: 18.3.1
+
'@mole-inc/bin-wrapper@8.0.1':
dependencies:
bin-check: 4.1.0
@@ -9438,10 +11333,19 @@ snapshots:
'@palmares/core': 0.0.3
'@palmares/logging': 0.0.1
+ '@palmares/jest-tests@0.1.13(@palmares/tests@0.1.13(@palmares/core@packages+core))':
+ dependencies:
+ '@palmares/tests': 0.1.13(@palmares/core@packages+core)
+ '@types/jest': 29.5.12
+
'@palmares/logging@0.0.1':
dependencies:
'@palmares/core': 0.0.3
+ '@palmares/tests@0.1.13(@palmares/core@packages+core)':
+ dependencies:
+ '@palmares/core': link:packages/core
+
'@pkgjs/parseargs@0.11.0':
optional: true
@@ -9457,42 +11361,416 @@ snapshots:
generic-pool: 3.9.0
yallist: 4.0.0
- '@redis/graph@1.1.1(@redis/client@1.6.0)':
+ '@redis/graph@1.1.1(@redis/client@1.6.0)':
+ dependencies:
+ '@redis/client': 1.6.0
+
+ '@redis/json@1.0.7(@redis/client@1.6.0)':
+ dependencies:
+ '@redis/client': 1.6.0
+
+ '@redis/search@1.2.0(@redis/client@1.6.0)':
+ dependencies:
+ '@redis/client': 1.6.0
+
+ '@redis/time-series@1.1.0(@redis/client@1.6.0)':
+ dependencies:
+ '@redis/client': 1.6.0
+
+ '@rollup/pluginutils@4.2.1':
+ dependencies:
+ estree-walker: 2.0.2
+ picomatch: 2.3.1
+
+ '@rollup/pluginutils@5.1.0(rollup@4.21.2)':
+ dependencies:
+ '@types/estree': 1.0.5
+ estree-walker: 2.0.2
+ picomatch: 2.3.1
+ optionalDependencies:
+ rollup: 4.21.2
+
+ '@rollup/rollup-android-arm-eabi@4.21.2':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.21.2':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.21.2':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.21.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.21.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.21.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.21.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.21.2':
+ optional: true
+
+ '@rollup/rollup-linux-powerpc64le-gnu@4.21.2':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.21.2':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.21.2':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.21.2':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.21.2':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.21.2':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.21.2':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.21.2':
+ optional: true
+
+ '@rushstack/eslint-patch@1.10.3': {}
+
+ '@sinclair/typebox@0.25.24': {}
+
+ '@sinclair/typebox@0.27.8': {}
+
+ '@sindresorhus/is@4.6.0': {}
+
+ '@sindresorhus/merge-streams@2.3.0': {}
+
+ '@sinonjs/commons@3.0.1':
+ dependencies:
+ type-detect: 4.0.8
+
+ '@sinonjs/fake-timers@10.3.0':
+ dependencies:
+ '@sinonjs/commons': 3.0.1
+
+ '@storybook/addon-actions@8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ '@types/uuid': 9.0.8
+ dequal: 2.0.3
+ polished: 4.3.1
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ uuid: 9.0.1
+
+ '@storybook/addon-backgrounds@8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ memoizerific: 1.11.3
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ ts-dedent: 2.2.0
+
+ '@storybook/addon-controls@8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ dequal: 2.0.3
+ lodash: 4.17.21
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ ts-dedent: 2.2.0
+
+ '@storybook/addon-docs@8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@mdx-js/react': 3.0.1(@types/react@18.3.5)(react@18.3.1)
+ '@storybook/blocks': 8.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/csf-plugin': 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/global': 5.0.0
+ '@storybook/react-dom-shim': 8.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@types/react': 18.3.5
+ fs-extra: 11.1.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ rehype-external-links: 3.0.0
+ rehype-slug: 6.0.0
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ ts-dedent: 2.2.0
+ transitivePeerDependencies:
+ - supports-color
+ - webpack-sources
+
+ '@storybook/addon-essentials@8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ '@storybook/addon-actions': 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/addon-backgrounds': 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/addon-controls': 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/addon-docs': 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/addon-highlight': 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/addon-measure': 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/addon-outline': 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/addon-toolbars': 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/addon-viewport': 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ ts-dedent: 2.2.0
+ transitivePeerDependencies:
+ - supports-color
+ - webpack-sources
+
+ '@storybook/addon-highlight@8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+
+ '@storybook/addon-interactions@8.2.9(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)))(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ '@storybook/instrumenter': 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/test': 8.2.9(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)))(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ polished: 4.3.1
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ ts-dedent: 2.2.0
+ transitivePeerDependencies:
+ - '@jest/globals'
+ - '@types/bun'
+ - '@types/jest'
+ - jest
+ - vitest
+
+ '@storybook/addon-links@8.2.9(react@18.3.1)(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ '@storybook/csf': 0.1.11
+ '@storybook/global': 5.0.0
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ ts-dedent: 2.2.0
+ optionalDependencies:
+ react: 18.3.1
+
+ '@storybook/addon-measure@8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ tiny-invariant: 1.3.3
+
+ '@storybook/addon-onboarding@8.2.9(react@18.3.1)(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ react-confetti: 6.1.0(react@18.3.1)
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ transitivePeerDependencies:
+ - react
+
+ '@storybook/addon-outline@8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ ts-dedent: 2.2.0
+
+ '@storybook/addon-toolbars@8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+
+ '@storybook/addon-viewport@8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ memoizerific: 1.11.3
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+
+ '@storybook/blocks@8.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ '@storybook/csf': 0.1.11
+ '@storybook/global': 5.0.0
+ '@storybook/icons': 1.2.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ '@types/lodash': 4.17.0
+ color-convert: 2.0.1
+ dequal: 2.0.3
+ lodash: 4.17.21
+ markdown-to-jsx: 7.5.0(react@18.3.1)
+ memoizerific: 1.11.3
+ polished: 4.3.1
+ react-colorful: 5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ telejson: 7.2.0
+ ts-dedent: 2.2.0
+ util-deprecate: 1.0.2
+ optionalDependencies:
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@storybook/builder-vite@8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))(typescript@5.5.4)(vite@5.4.3(@types/node@22.5.4))':
+ dependencies:
+ '@storybook/csf-plugin': 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@types/find-cache-dir': 3.2.1
+ browser-assert: 1.2.1
+ es-module-lexer: 1.5.4
+ express: 4.19.2
+ find-cache-dir: 3.3.2
+ fs-extra: 11.1.0
+ magic-string: 0.30.11
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ ts-dedent: 2.2.0
+ vite: 5.4.3(@types/node@22.5.4)
+ optionalDependencies:
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+ - webpack-sources
+
+ '@storybook/codemod@8.2.9':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/preset-env': 7.25.4(@babel/core@7.25.2)
+ '@babel/types': 7.25.4
+ '@storybook/core': 8.2.9
+ '@storybook/csf': 0.1.11
+ '@types/cross-spawn': 6.0.6
+ cross-spawn: 7.0.3
+ globby: 14.0.2
+ jscodeshift: 0.15.2(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ lodash: 4.17.21
+ prettier: 3.3.3
+ recast: 0.23.9
+ tiny-invariant: 1.3.3
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
+ '@storybook/components@8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+
+ '@storybook/core@8.2.9':
dependencies:
- '@redis/client': 1.6.0
+ '@storybook/csf': 0.1.11
+ '@types/express': 4.17.21
+ '@types/node': 18.19.50
+ browser-assert: 1.2.1
+ esbuild: 0.21.5
+ esbuild-register: 3.5.0(esbuild@0.21.5)
+ express: 4.19.2
+ process: 0.11.10
+ recast: 0.23.9
+ util: 0.12.5
+ ws: 8.18.0
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
- '@redis/json@1.0.7(@redis/client@1.6.0)':
+ '@storybook/csf-plugin@8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
dependencies:
- '@redis/client': 1.6.0
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ unplugin: 1.13.1
+ transitivePeerDependencies:
+ - webpack-sources
- '@redis/search@1.2.0(@redis/client@1.6.0)':
+ '@storybook/csf@0.0.1':
dependencies:
- '@redis/client': 1.6.0
+ lodash: 4.17.21
- '@redis/time-series@1.1.0(@redis/client@1.6.0)':
+ '@storybook/csf@0.1.11':
dependencies:
- '@redis/client': 1.6.0
+ type-fest: 2.19.0
- '@rollup/pluginutils@4.2.1':
+ '@storybook/global@5.0.0': {}
+
+ '@storybook/icons@1.2.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
dependencies:
- estree-walker: 2.0.2
- picomatch: 2.3.1
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
- '@rushstack/eslint-patch@1.10.3': {}
+ '@storybook/instrumenter@8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ '@storybook/global': 5.0.0
+ '@vitest/utils': 1.6.0
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ util: 0.12.5
- '@sinclair/typebox@0.25.24': {}
+ '@storybook/manager-api@8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
- '@sinclair/typebox@0.27.8': {}
+ '@storybook/preview-api@8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
- '@sindresorhus/is@4.6.0': {}
+ '@storybook/react-dom-shim@8.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
- '@sinonjs/commons@3.0.1':
+ '@storybook/react-vite@8.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(rollup@4.21.2)(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))(typescript@5.5.4)(vite@5.4.3(@types/node@22.5.4))':
dependencies:
- type-detect: 4.0.8
+ '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.1(typescript@5.5.4)(vite@5.4.3(@types/node@22.5.4))
+ '@rollup/pluginutils': 5.1.0(rollup@4.21.2)
+ '@storybook/builder-vite': 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))(typescript@5.5.4)(vite@5.4.3(@types/node@22.5.4))
+ '@storybook/react': 8.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))(typescript@5.5.4)
+ find-up: 5.0.0
+ magic-string: 0.30.11
+ react: 18.3.1
+ react-docgen: 7.0.3
+ react-dom: 18.3.1(react@18.3.1)
+ resolve: 1.22.8
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ tsconfig-paths: 4.2.0
+ vite: 5.4.3(@types/node@22.5.4)
+ transitivePeerDependencies:
+ - '@preact/preset-vite'
+ - rollup
+ - supports-color
+ - typescript
+ - vite-plugin-glimmerx
+ - webpack-sources
+
+ '@storybook/react@8.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))(typescript@5.5.4)':
+ dependencies:
+ '@storybook/components': 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/global': 5.0.0
+ '@storybook/manager-api': 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/preview-api': 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/react-dom-shim': 8.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@storybook/theming': 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@types/escodegen': 0.0.6
+ '@types/estree': 0.0.51
+ '@types/node': 18.19.50
+ acorn: 7.4.1
+ acorn-jsx: 5.3.2(acorn@7.4.1)
+ acorn-walk: 7.2.0
+ escodegen: 2.1.0
+ html-tags: 3.3.1
+ lodash: 4.17.21
+ prop-types: 15.8.1
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-element-to-jsx-string: 15.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ semver: 7.6.2
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ ts-dedent: 2.2.0
+ type-fest: 2.19.0
+ util-deprecate: 1.0.2
+ optionalDependencies:
+ typescript: 5.5.4
- '@sinonjs/fake-timers@10.3.0':
+ '@storybook/test@8.2.9(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)))(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
+ dependencies:
+ '@storybook/csf': 0.1.11
+ '@storybook/instrumenter': 8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))
+ '@testing-library/dom': 10.1.0
+ '@testing-library/jest-dom': 6.4.5(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)))
+ '@testing-library/user-event': 14.5.2(@testing-library/dom@10.1.0)
+ '@vitest/expect': 1.6.0
+ '@vitest/spy': 1.6.0
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ util: 0.12.5
+ transitivePeerDependencies:
+ - '@jest/globals'
+ - '@types/bun'
+ - '@types/jest'
+ - jest
+ - vitest
+
+ '@storybook/theming@8.2.9(storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)))':
dependencies:
- '@sinonjs/commons': 3.0.1
+ storybook: 8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2))
'@swc/cli@0.1.65(@swc/core@1.7.18(@swc/helpers@0.5.5))(chokidar@3.6.0)':
dependencies:
@@ -9522,36 +11800,81 @@ snapshots:
optionalDependencies:
chokidar: 3.6.0
+ '@swc/cli@0.4.0(@swc/core@1.7.23(@swc/helpers@0.5.5))(chokidar@3.6.0)':
+ dependencies:
+ '@mole-inc/bin-wrapper': 8.0.1
+ '@swc/core': 1.7.23(@swc/helpers@0.5.5)
+ '@swc/counter': 0.1.3
+ commander: 8.3.0
+ fast-glob: 3.3.2
+ minimatch: 9.0.4
+ piscina: 4.5.1
+ semver: 7.6.2
+ slash: 3.0.0
+ source-map: 0.7.4
+ optionalDependencies:
+ chokidar: 3.6.0
+
'@swc/core-darwin-arm64@1.7.18':
optional: true
+ '@swc/core-darwin-arm64@1.7.23':
+ optional: true
+
'@swc/core-darwin-x64@1.7.18':
optional: true
+ '@swc/core-darwin-x64@1.7.23':
+ optional: true
+
'@swc/core-linux-arm-gnueabihf@1.7.18':
optional: true
+ '@swc/core-linux-arm-gnueabihf@1.7.23':
+ optional: true
+
'@swc/core-linux-arm64-gnu@1.7.18':
optional: true
+ '@swc/core-linux-arm64-gnu@1.7.23':
+ optional: true
+
'@swc/core-linux-arm64-musl@1.7.18':
optional: true
+ '@swc/core-linux-arm64-musl@1.7.23':
+ optional: true
+
'@swc/core-linux-x64-gnu@1.7.18':
optional: true
+ '@swc/core-linux-x64-gnu@1.7.23':
+ optional: true
+
'@swc/core-linux-x64-musl@1.7.18':
optional: true
+ '@swc/core-linux-x64-musl@1.7.23':
+ optional: true
+
'@swc/core-win32-arm64-msvc@1.7.18':
optional: true
+ '@swc/core-win32-arm64-msvc@1.7.23':
+ optional: true
+
'@swc/core-win32-ia32-msvc@1.7.18':
optional: true
+ '@swc/core-win32-ia32-msvc@1.7.23':
+ optional: true
+
'@swc/core-win32-x64-msvc@1.7.18':
optional: true
+ '@swc/core-win32-x64-msvc@1.7.23':
+ optional: true
+
'@swc/core@1.7.18(@swc/helpers@0.5.5)':
dependencies:
'@swc/counter': 0.1.3
@@ -9569,6 +11892,23 @@ snapshots:
'@swc/core-win32-x64-msvc': 1.7.18
'@swc/helpers': 0.5.5
+ '@swc/core@1.7.23(@swc/helpers@0.5.5)':
+ dependencies:
+ '@swc/counter': 0.1.3
+ '@swc/types': 0.1.12
+ optionalDependencies:
+ '@swc/core-darwin-arm64': 1.7.23
+ '@swc/core-darwin-x64': 1.7.23
+ '@swc/core-linux-arm-gnueabihf': 1.7.23
+ '@swc/core-linux-arm64-gnu': 1.7.23
+ '@swc/core-linux-arm64-musl': 1.7.23
+ '@swc/core-linux-x64-gnu': 1.7.23
+ '@swc/core-linux-x64-musl': 1.7.23
+ '@swc/core-win32-arm64-msvc': 1.7.23
+ '@swc/core-win32-ia32-msvc': 1.7.23
+ '@swc/core-win32-x64-msvc': 1.7.23
+ '@swc/helpers': 0.5.5
+
'@swc/counter@0.1.3': {}
'@swc/helpers@0.5.5':
@@ -9584,6 +11924,51 @@ snapshots:
dependencies:
defer-to-connect: 2.0.1
+ '@tanstack/query-core@5.54.1': {}
+
+ '@tanstack/react-query@5.55.0(react@18.3.1)':
+ dependencies:
+ '@tanstack/query-core': 5.54.1
+ react: 18.3.1
+
+ '@tanstack/react-virtual@3.10.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ dependencies:
+ '@tanstack/virtual-core': 3.10.7
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ '@tanstack/virtual-core@3.10.7': {}
+
+ '@testing-library/dom@10.1.0':
+ dependencies:
+ '@babel/code-frame': 7.24.7
+ '@babel/runtime': 7.24.7
+ '@types/aria-query': 5.0.4
+ aria-query: 5.3.0
+ chalk: 4.1.2
+ dom-accessibility-api: 0.5.16
+ lz-string: 1.5.0
+ pretty-format: 27.5.1
+
+ '@testing-library/jest-dom@6.4.5(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)))':
+ dependencies:
+ '@adobe/css-tools': 4.4.0
+ '@babel/runtime': 7.24.7
+ aria-query: 5.3.0
+ chalk: 3.0.0
+ css.escape: 1.5.1
+ dom-accessibility-api: 0.6.3
+ lodash: 4.17.21
+ redent: 3.0.0
+ optionalDependencies:
+ '@jest/globals': 29.7.0
+ '@types/jest': 29.5.12
+ jest: 29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4))
+
+ '@testing-library/user-event@14.5.2(@testing-library/dom@10.1.0)':
+ dependencies:
+ '@testing-library/dom': 10.1.0
+
'@tokenizer/token@0.3.0': {}
'@tootallnate/once@1.1.2':
@@ -9610,6 +11995,8 @@ snapshots:
dependencies:
'@types/estree': 1.0.5
+ '@types/aria-query@5.0.4': {}
+
'@types/babel__core@7.20.5':
dependencies:
'@babel/parser': 7.25.4
@@ -9661,14 +12048,26 @@ snapshots:
dependencies:
'@types/node': 20.16.1
+ '@types/cross-spawn@6.0.6':
+ dependencies:
+ '@types/node': 20.16.1
+
'@types/debug@4.1.12':
dependencies:
'@types/ms': 0.7.34
+ '@types/doctrine@0.0.9': {}
+
+ '@types/emscripten@1.39.13': {}
+
+ '@types/escodegen@0.0.6': {}
+
'@types/estree-jsx@1.0.5':
dependencies:
'@types/estree': 1.0.5
+ '@types/estree@0.0.51': {}
+
'@types/estree@1.0.5': {}
'@types/express-serve-static-core@4.19.5':
@@ -9685,6 +12084,13 @@ snapshots:
'@types/qs': 6.9.15
'@types/serve-static': 1.15.5
+ '@types/find-cache-dir@3.2.1': {}
+
+ '@types/glob@7.2.0':
+ dependencies:
+ '@types/minimatch': 5.1.2
+ '@types/node': 20.16.1
+
'@types/graceful-fs@4.1.9':
dependencies:
'@types/node': 20.16.1
@@ -9732,6 +12138,8 @@ snapshots:
'@types/mime@3.0.4': {}
+ '@types/minimatch@5.1.2': {}
+
'@types/ms@0.7.34': {}
'@types/multer@1.4.11':
@@ -9742,6 +12150,10 @@ snapshots:
'@types/node@16.18.11': {}
+ '@types/node@18.19.50':
+ dependencies:
+ undici-types: 5.26.5
+
'@types/node@20.14.2':
dependencies:
undici-types: 5.26.5
@@ -9754,6 +12166,10 @@ snapshots:
dependencies:
undici-types: 6.19.8
+ '@types/node@22.5.4':
+ dependencies:
+ undici-types: 6.19.8
+
'@types/prop-types@15.7.12': {}
'@types/qs@6.9.15': {}
@@ -9779,6 +12195,13 @@ snapshots:
'@types/prop-types': 15.7.12
csstype: 3.1.3
+ '@types/react@18.3.5':
+ dependencies:
+ '@types/prop-types': 15.7.12
+ csstype: 3.1.3
+
+ '@types/resolve@1.20.6': {}
+
'@types/responselike@1.0.3':
dependencies:
'@types/node': 20.16.1
@@ -9811,6 +12234,8 @@ snapshots:
'@types/unist@3.0.2': {}
+ '@types/uuid@9.0.8': {}
+
'@types/validator@13.11.9': {}
'@types/yargs-parser@21.0.3': {}
@@ -9857,6 +12282,24 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@typescript-eslint/eslint-plugin@8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4))(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4)':
+ dependencies:
+ '@eslint-community/regexpp': 4.11.0
+ '@typescript-eslint/parser': 8.4.0(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4)
+ '@typescript-eslint/scope-manager': 8.4.0
+ '@typescript-eslint/type-utils': 8.4.0(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4)
+ '@typescript-eslint/utils': 8.4.0(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4)
+ '@typescript-eslint/visitor-keys': 8.4.0
+ eslint: 9.10.0(jiti@1.21.3)
+ graphemer: 1.4.0
+ ignore: 5.3.1
+ natural-compare: 1.4.0
+ ts-api-utils: 1.3.0(typescript@5.5.4)
+ optionalDependencies:
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4)':
dependencies:
'@typescript-eslint/scope-manager': 6.21.0
@@ -9883,6 +12326,24 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@typescript-eslint/parser@8.4.0(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4)':
+ dependencies:
+ '@typescript-eslint/scope-manager': 8.4.0
+ '@typescript-eslint/types': 8.4.0
+ '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4)
+ '@typescript-eslint/visitor-keys': 8.4.0
+ debug: 4.3.5(supports-color@5.5.0)
+ eslint: 9.10.0(jiti@1.21.3)
+ optionalDependencies:
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/scope-manager@5.62.0':
+ dependencies:
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/visitor-keys': 5.62.0
+
'@typescript-eslint/scope-manager@6.21.0':
dependencies:
'@typescript-eslint/types': 6.21.0
@@ -9903,6 +12364,11 @@ snapshots:
'@typescript-eslint/types': 7.17.0
'@typescript-eslint/visitor-keys': 7.17.0
+ '@typescript-eslint/scope-manager@8.4.0':
+ dependencies:
+ '@typescript-eslint/types': 8.4.0
+ '@typescript-eslint/visitor-keys': 8.4.0
+
'@typescript-eslint/type-utils@7.0.0(eslint@8.57.0)(typescript@5.5.4)':
dependencies:
'@typescript-eslint/typescript-estree': 7.0.0(typescript@5.5.4)
@@ -9927,6 +12393,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@typescript-eslint/type-utils@8.4.0(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4)':
+ dependencies:
+ '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4)
+ '@typescript-eslint/utils': 8.4.0(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4)
+ debug: 4.3.5(supports-color@5.5.0)
+ ts-api-utils: 1.3.0(typescript@5.5.4)
+ optionalDependencies:
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - eslint
+ - supports-color
+
+ '@typescript-eslint/types@5.62.0': {}
+
'@typescript-eslint/types@6.21.0': {}
'@typescript-eslint/types@7.0.0': {}
@@ -9935,6 +12415,22 @@ snapshots:
'@typescript-eslint/types@7.17.0': {}
+ '@typescript-eslint/types@8.4.0': {}
+
+ '@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4)':
+ dependencies:
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/visitor-keys': 5.62.0
+ debug: 4.3.5(supports-color@5.5.0)
+ globby: 11.1.0
+ is-glob: 4.0.3
+ semver: 7.6.2
+ tsutils: 3.21.0(typescript@5.5.4)
+ optionalDependencies:
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+
'@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4)':
dependencies:
'@typescript-eslint/types': 6.21.0
@@ -9995,6 +12491,36 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ '@typescript-eslint/typescript-estree@8.4.0(typescript@5.5.4)':
+ dependencies:
+ '@typescript-eslint/types': 8.4.0
+ '@typescript-eslint/visitor-keys': 8.4.0
+ debug: 4.3.5(supports-color@5.5.0)
+ fast-glob: 3.3.2
+ is-glob: 4.0.3
+ minimatch: 9.0.5
+ semver: 7.6.2
+ ts-api-utils: 1.3.0(typescript@5.5.4)
+ optionalDependencies:
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/utils@5.62.0(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0(jiti@1.21.3))
+ '@types/json-schema': 7.0.15
+ '@types/semver': 7.5.8
+ '@typescript-eslint/scope-manager': 5.62.0
+ '@typescript-eslint/types': 5.62.0
+ '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4)
+ eslint: 9.10.0(jiti@1.21.3)
+ eslint-scope: 5.1.1
+ semver: 7.6.2
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
'@typescript-eslint/utils@7.0.0(eslint@8.57.0)(typescript@5.5.4)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
@@ -10031,6 +12557,22 @@ snapshots:
- supports-color
- typescript
+ '@typescript-eslint/utils@8.4.0(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0(jiti@1.21.3))
+ '@typescript-eslint/scope-manager': 8.4.0
+ '@typescript-eslint/types': 8.4.0
+ '@typescript-eslint/typescript-estree': 8.4.0(typescript@5.5.4)
+ eslint: 9.10.0(jiti@1.21.3)
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ '@typescript-eslint/visitor-keys@5.62.0':
+ dependencies:
+ '@typescript-eslint/types': 5.62.0
+ eslint-visitor-keys: 3.4.3
+
'@typescript-eslint/visitor-keys@6.21.0':
dependencies:
'@typescript-eslint/types': 6.21.0
@@ -10051,6 +12593,11 @@ snapshots:
'@typescript-eslint/types': 7.17.0
eslint-visitor-keys: 3.4.3
+ '@typescript-eslint/visitor-keys@8.4.0':
+ dependencies:
+ '@typescript-eslint/types': 8.4.0
+ eslint-visitor-keys: 3.4.3
+
'@ungap/structured-clone@1.2.0': {}
'@vercel/build-utils@8.3.5': {}
@@ -10116,8 +12663,8 @@ snapshots:
dependencies:
'@mapbox/node-pre-gyp': 1.0.11(encoding@0.1.13)
'@rollup/pluginutils': 4.2.1
- acorn: 8.11.3
- acorn-import-attributes: 1.9.5(acorn@8.11.3)
+ acorn: 8.12.1
+ acorn-import-attributes: 1.9.5(acorn@8.12.1)
async-sema: 3.1.1
bindings: 1.5.0
estree-walker: 2.0.2
@@ -10130,7 +12677,7 @@ snapshots:
- encoding
- supports-color
- '@vercel/node@3.2.7(@swc/core@1.7.18(@swc/helpers@0.5.5))(encoding@0.1.13)':
+ '@vercel/node@3.2.7(@swc/core@1.7.23(@swc/helpers@0.5.5))(encoding@0.1.13)':
dependencies:
'@edge-runtime/node-utils': 2.3.0
'@edge-runtime/primitives': 4.1.0
@@ -10149,7 +12696,7 @@ snapshots:
node-fetch: 2.6.9(encoding@0.1.13)
path-to-regexp: 6.2.1
ts-morph: 12.0.0
- ts-node: 10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@16.18.11)(typescript@4.9.5)
+ ts-node: 10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@16.18.11)(typescript@4.9.5)
typescript: 4.9.5
undici: 5.28.4
transitivePeerDependencies:
@@ -10158,7 +12705,7 @@ snapshots:
- encoding
- supports-color
- '@vercel/node@3.2.8(@swc/core@1.7.18(@swc/helpers@0.5.5))(encoding@0.1.13)':
+ '@vercel/node@3.2.8(@swc/core@1.7.23(@swc/helpers@0.5.5))(encoding@0.1.13)':
dependencies:
'@edge-runtime/node-utils': 2.3.0
'@edge-runtime/primitives': 4.1.0
@@ -10177,7 +12724,7 @@ snapshots:
node-fetch: 2.6.9(encoding@0.1.13)
path-to-regexp: 6.2.1
ts-morph: 12.0.0
- ts-node: 10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@16.18.11)(typescript@4.9.5)
+ ts-node: 10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@16.18.11)(typescript@4.9.5)
typescript: 4.9.5
undici: 5.28.4
transitivePeerDependencies:
@@ -10230,6 +12777,44 @@ snapshots:
json-schema-to-ts: 1.6.4
ts-morph: 12.0.0
+ '@vitejs/plugin-react@4.3.1(vite@5.4.3(@types/node@22.5.4))':
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2)
+ '@types/babel__core': 7.20.5
+ react-refresh: 0.14.2
+ vite: 5.4.3(@types/node@22.5.4)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vitest/expect@1.6.0':
+ dependencies:
+ '@vitest/spy': 1.6.0
+ '@vitest/utils': 1.6.0
+ chai: 4.5.0
+
+ '@vitest/spy@1.6.0':
+ dependencies:
+ tinyspy: 2.2.1
+
+ '@vitest/utils@1.6.0':
+ dependencies:
+ diff-sequences: 29.6.3
+ estree-walker: 3.0.3
+ loupe: 2.3.7
+ pretty-format: 29.7.0
+
+ '@yarnpkg/fslib@2.10.3':
+ dependencies:
+ '@yarnpkg/libzip': 2.3.0
+ tslib: 1.14.1
+
+ '@yarnpkg/libzip@2.3.0':
+ dependencies:
+ '@types/emscripten': 1.39.13
+ tslib: 1.14.1
+
abbrev@1.1.1: {}
abort-controller@3.0.0:
@@ -10243,9 +12828,13 @@ snapshots:
mime-types: 2.1.35
negotiator: 0.6.3
- acorn-import-attributes@1.9.5(acorn@8.11.3):
+ acorn-import-attributes@1.9.5(acorn@8.12.1):
dependencies:
- acorn: 8.11.3
+ acorn: 8.12.1
+
+ acorn-jsx@5.3.2(acorn@7.4.1):
+ dependencies:
+ acorn: 7.4.1
acorn-jsx@5.3.2(acorn@8.11.3):
dependencies:
@@ -10255,9 +12844,13 @@ snapshots:
dependencies:
acorn: 8.12.1
+ acorn-walk@7.2.0: {}
+
acorn-walk@8.3.3:
dependencies:
- acorn: 8.11.3
+ acorn: 8.12.1
+
+ acorn@7.4.1: {}
acorn@8.11.3: {}
@@ -10445,8 +13038,14 @@ snapshots:
is-array-buffer: 3.0.4
is-shared-array-buffer: 1.0.3
+ assertion-error@1.1.0: {}
+
ast-types-flow@0.0.8: {}
+ ast-types@0.16.1:
+ dependencies:
+ tslib: 2.6.3
+
astring@1.8.6: {}
async-listen@1.2.0: {}
@@ -10496,7 +13095,17 @@ snapshots:
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.0.1
- postcss: 8.4.40
+ postcss: 8.4.40
+ postcss-value-parser: 4.2.0
+
+ autoprefixer@10.4.20(postcss@8.4.45):
+ dependencies:
+ browserslist: 4.23.3
+ caniuse-lite: 1.0.30001653
+ fraction.js: 4.3.7
+ normalize-range: 0.1.2
+ picocolors: 1.0.1
+ postcss: 8.4.45
postcss-value-parser: 4.2.0
available-typed-arrays@1.0.7:
@@ -10518,6 +13127,10 @@ snapshots:
dependencies:
dequal: 2.0.3
+ babel-core@7.0.0-bridge.0(@babel/core@7.25.2):
+ dependencies:
+ '@babel/core': 7.25.2
+
babel-jest@29.7.0(@babel/core@7.25.2):
dependencies:
'@babel/core': 7.25.2
@@ -10609,6 +13222,11 @@ snapshots:
bindings: 1.5.0
prebuild-install: 7.1.2
+ better-sqlite3@11.2.1:
+ dependencies:
+ bindings: 1.5.0
+ prebuild-install: 7.1.2
+
bin-check@4.1.0:
dependencies:
execa: 0.7.0
@@ -10667,6 +13285,8 @@ snapshots:
dependencies:
fill-range: 7.1.1
+ browser-assert@1.2.1: {}
+
browserslist@4.23.0:
dependencies:
caniuse-lite: 1.0.30001629
@@ -10710,6 +13330,11 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
+ bundle-require@5.0.0(esbuild@0.23.1):
+ dependencies:
+ esbuild: 0.23.1
+ load-tsconfig: 0.2.5
+
busboy@1.6.0:
dependencies:
streamsearch: 1.1.0
@@ -10718,6 +13343,8 @@ snapshots:
bytes@3.1.2: {}
+ cac@6.7.14: {}
+
cacache@15.3.0:
dependencies:
'@npmcli/fs': 1.1.1
@@ -10778,12 +13405,27 @@ snapshots:
ccount@2.0.1: {}
+ chai@4.5.0:
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.4
+ get-func-name: 2.0.2
+ loupe: 2.3.7
+ pathval: 1.1.1
+ type-detect: 4.1.0
+
chalk@2.4.2:
dependencies:
ansi-styles: 3.2.1
escape-string-regexp: 1.0.5
supports-color: 5.5.0
+ chalk@3.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
chalk@4.1.2:
dependencies:
ansi-styles: 4.3.0
@@ -10803,6 +13445,10 @@ snapshots:
chardet@0.7.0: {}
+ check-error@1.0.3:
+ dependencies:
+ get-func-name: 2.0.2
+
chokidar@3.3.1:
dependencies:
anymatch: 3.1.3
@@ -10831,8 +13477,14 @@ snapshots:
chownr@2.0.0: {}
+ chromatic@11.7.1: {}
+
ci-info@3.9.0: {}
+ citty@0.1.6:
+ dependencies:
+ consola: 3.2.3
+
cjs-module-lexer@1.2.3: {}
clean-stack@2.2.0:
@@ -10858,6 +13510,12 @@ snapshots:
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
+ clone-deep@4.0.1:
+ dependencies:
+ is-plain-object: 2.0.4
+ kind-of: 6.0.3
+ shallow-clone: 3.0.1
+
clone-response@1.0.3:
dependencies:
mimic-response: 1.0.1
@@ -10896,10 +13554,14 @@ snapshots:
commander@4.1.1: {}
+ commander@6.2.1: {}
+
commander@7.2.0: {}
commander@8.3.0: {}
+ commondir@1.0.1: {}
+
concat-map@0.0.1: {}
concat-stream@1.6.2:
@@ -10909,6 +13571,22 @@ snapshots:
readable-stream: 2.3.8
typedarray: 0.0.6
+ concurrently@8.2.2:
+ dependencies:
+ chalk: 4.1.2
+ date-fns: 2.30.0
+ lodash: 4.17.21
+ rxjs: 7.8.1
+ shell-quote: 1.8.1
+ spawn-command: 0.0.2
+ supports-color: 8.1.1
+ tree-kill: 1.2.2
+ yargs: 17.7.2
+
+ confbox@0.1.7: {}
+
+ consola@3.2.3: {}
+
console-control-strings@1.1.0: {}
content-disposition@0.5.4:
@@ -10942,13 +13620,13 @@ snapshots:
object-assign: 4.1.1
vary: 1.1.2
- create-jest@29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4)):
+ create-jest@29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4)):
dependencies:
'@jest/types': 29.6.3
chalk: 4.1.2
exit: 0.1.2
graceful-fs: 4.2.11
- jest-config: 29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
+ jest-config: 29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
jest-util: 29.7.0
prompts: 2.4.2
transitivePeerDependencies:
@@ -10957,13 +13635,13 @@ snapshots:
- supports-color
- ts-node
- create-jest@29.7.0(@types/node@22.5.2)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4)):
+ create-jest@29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)):
dependencies:
'@jest/types': 29.6.3
chalk: 4.1.2
exit: 0.1.2
graceful-fs: 4.2.11
- jest-config: 29.7.0(@types/node@22.5.2)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))
+ jest-config: 29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4))
jest-util: 29.7.0
prompts: 2.4.2
transitivePeerDependencies:
@@ -10988,6 +13666,12 @@ snapshots:
shebang-command: 2.0.0
which: 2.0.2
+ crypto-random-string@4.0.0:
+ dependencies:
+ type-fest: 1.4.0
+
+ css.escape@1.5.1: {}
+
cssesc@3.0.0: {}
csstype@3.1.3: {}
@@ -11012,6 +13696,10 @@ snapshots:
es-errors: 1.3.0
is-data-view: 1.0.1
+ date-fns@2.30.0:
+ dependencies:
+ '@babel/runtime': 7.24.7
+
debug@2.6.9:
dependencies:
ms: 2.0.0
@@ -11040,6 +13728,10 @@ snapshots:
dedent@1.5.3: {}
+ deep-eql@4.1.4:
+ dependencies:
+ type-detect: 4.1.0
+
deep-extend@0.6.0: {}
deep-is@0.1.4: {}
@@ -11064,6 +13756,8 @@ snapshots:
has-property-descriptors: 1.0.2
object-keys: 1.1.1
+ defu@6.1.4: {}
+
delayed-stream@1.0.0: {}
delegates@1.0.0: {}
@@ -11106,6 +13800,10 @@ snapshots:
dependencies:
esutils: 2.0.3
+ dom-accessibility-api@0.5.16: {}
+
+ dom-accessibility-api@0.6.3: {}
+
dottie@2.0.6: {}
drizzle-kit@0.23.0:
@@ -11116,26 +13814,45 @@ snapshots:
transitivePeerDependencies:
- supports-color
- drizzle-orm@0.32.0(@types/better-sqlite3@7.6.11)(@types/react@18.3.3)(better-sqlite3@11.1.2)(pg@8.12.0)(postgres@3.4.4)(react@18.3.1)(sqlite3@5.1.7):
+ drizzle-kit@0.24.2:
+ dependencies:
+ '@drizzle-team/brocli': 0.10.1
+ '@esbuild-kit/esm-loader': 2.6.5
+ esbuild: 0.19.12
+ esbuild-register: 3.5.0(esbuild@0.19.12)
+ transitivePeerDependencies:
+ - supports-color
+
+ drizzle-orm@0.32.0(@types/better-sqlite3@7.6.11)(@types/react@18.3.5)(better-sqlite3@11.1.2)(pg@8.12.0)(postgres@3.4.4)(react@18.3.1)(sqlite3@5.1.7):
optionalDependencies:
'@types/better-sqlite3': 7.6.11
- '@types/react': 18.3.3
+ '@types/react': 18.3.5
better-sqlite3: 11.1.2
pg: 8.12.0
postgres: 3.4.4
react: 18.3.1
sqlite3: 5.1.7
- drizzle-orm@0.32.2(@types/better-sqlite3@7.6.11)(@types/react@18.3.3)(better-sqlite3@11.1.2)(pg@8.12.0)(postgres@3.4.4)(react@18.3.1)(sqlite3@5.1.7):
+ drizzle-orm@0.32.2(@types/better-sqlite3@7.6.11)(@types/react@18.3.5)(better-sqlite3@11.1.2)(pg@8.12.0)(postgres@3.4.4)(react@18.3.1)(sqlite3@5.1.7):
optionalDependencies:
'@types/better-sqlite3': 7.6.11
- '@types/react': 18.3.3
+ '@types/react': 18.3.5
better-sqlite3: 11.1.2
pg: 8.12.0
postgres: 3.4.4
react: 18.3.1
sqlite3: 5.1.7
+ drizzle-orm@0.32.2(@types/better-sqlite3@7.6.11)(@types/react@18.3.5)(better-sqlite3@11.2.1)(pg@8.12.0)(postgres@3.4.4)(react@18.3.1)(sqlite3@5.1.7):
+ optionalDependencies:
+ '@types/better-sqlite3': 7.6.11
+ '@types/react': 18.3.5
+ better-sqlite3: 11.2.1
+ pg: 8.12.0
+ postgres: 3.4.4
+ react: 18.3.1
+ sqlite3: 5.1.7
+
eastasianwidth@0.2.0: {}
edge-runtime@2.5.9:
@@ -11196,6 +13913,8 @@ snapshots:
env-paths@2.2.1:
optional: true
+ envinfo@7.13.0: {}
+
err-code@2.0.3:
optional: true
@@ -11277,6 +13996,8 @@ snapshots:
es-module-lexer@1.4.1: {}
+ es-module-lexer@1.5.4: {}
+
es-object-atoms@1.0.0:
dependencies:
es-errors: 1.3.0
@@ -11352,6 +14073,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ esbuild-register@3.5.0(esbuild@0.21.5):
+ dependencies:
+ debug: 4.3.5(supports-color@5.5.0)
+ esbuild: 0.21.5
+ transitivePeerDependencies:
+ - supports-color
+
esbuild-sunos-64@0.14.47:
optional: true
@@ -11464,6 +14192,33 @@ snapshots:
'@esbuild/win32-ia32': 0.21.5
'@esbuild/win32-x64': 0.21.5
+ esbuild@0.23.1:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.23.1
+ '@esbuild/android-arm': 0.23.1
+ '@esbuild/android-arm64': 0.23.1
+ '@esbuild/android-x64': 0.23.1
+ '@esbuild/darwin-arm64': 0.23.1
+ '@esbuild/darwin-x64': 0.23.1
+ '@esbuild/freebsd-arm64': 0.23.1
+ '@esbuild/freebsd-x64': 0.23.1
+ '@esbuild/linux-arm': 0.23.1
+ '@esbuild/linux-arm64': 0.23.1
+ '@esbuild/linux-ia32': 0.23.1
+ '@esbuild/linux-loong64': 0.23.1
+ '@esbuild/linux-mips64el': 0.23.1
+ '@esbuild/linux-ppc64': 0.23.1
+ '@esbuild/linux-riscv64': 0.23.1
+ '@esbuild/linux-s390x': 0.23.1
+ '@esbuild/linux-x64': 0.23.1
+ '@esbuild/netbsd-x64': 0.23.1
+ '@esbuild/openbsd-arm64': 0.23.1
+ '@esbuild/openbsd-x64': 0.23.1
+ '@esbuild/sunos-x64': 0.23.1
+ '@esbuild/win32-arm64': 0.23.1
+ '@esbuild/win32-ia32': 0.23.1
+ '@esbuild/win32-x64': 0.23.1
+
escalade@3.1.2: {}
escape-html@1.0.3: {}
@@ -11476,6 +14231,14 @@ snapshots:
escape-string-regexp@5.0.0: {}
+ escodegen@2.1.0:
+ dependencies:
+ esprima: 4.0.1
+ estraverse: 5.3.0
+ esutils: 2.0.3
+ optionalDependencies:
+ source-map: 0.6.1
+
eslint-compat-utils@0.5.1(eslint@8.57.0):
dependencies:
eslint: 8.57.0
@@ -11668,6 +14431,14 @@ snapshots:
dependencies:
eslint: 8.57.0
+ eslint-plugin-react-hooks@5.1.0-rc-fb9a90fa48-20240614(eslint@9.10.0(jiti@1.21.3)):
+ dependencies:
+ eslint: 9.10.0(jiti@1.21.3)
+
+ eslint-plugin-react-refresh@0.4.11(eslint@9.10.0(jiti@1.21.3)):
+ dependencies:
+ eslint: 9.10.0(jiti@1.21.3)
+
eslint-plugin-react@7.34.2(eslint@8.57.0):
dependencies:
array-includes: 3.1.8
@@ -11694,6 +14465,22 @@ snapshots:
dependencies:
safe-regex: 2.1.1
+ eslint-plugin-storybook@0.8.0(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4):
+ dependencies:
+ '@storybook/csf': 0.0.1
+ '@typescript-eslint/utils': 5.62.0(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4)
+ eslint: 9.10.0(jiti@1.21.3)
+ requireindex: 1.2.0
+ ts-dedent: 2.2.0
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ eslint-scope@5.1.1:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 4.3.0
+
eslint-scope@7.2.2:
dependencies:
esrecurse: 4.3.0
@@ -11751,6 +14538,47 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ eslint@9.10.0(jiti@1.21.3):
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@9.10.0(jiti@1.21.3))
+ '@eslint-community/regexpp': 4.11.0
+ '@eslint/config-array': 0.18.0
+ '@eslint/eslintrc': 3.1.0
+ '@eslint/js': 9.10.0
+ '@eslint/plugin-kit': 0.1.0
+ '@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.3.0
+ '@nodelib/fs.walk': 1.2.8
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.3
+ debug: 4.3.5(supports-color@5.5.0)
+ escape-string-regexp: 4.0.0
+ eslint-scope: 8.0.2
+ eslint-visitor-keys: 4.0.0
+ espree: 10.1.0
+ esquery: 1.5.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 8.0.0
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ ignore: 5.3.1
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ is-path-inside: 3.0.3
+ json-stable-stringify-without-jsonify: 1.0.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ strip-ansi: 6.0.1
+ text-table: 0.2.0
+ optionalDependencies:
+ jiti: 1.21.3
+ transitivePeerDependencies:
+ - supports-color
+
eslint@9.9.1(jiti@1.21.3):
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.3))
@@ -11814,6 +14642,8 @@ snapshots:
dependencies:
estraverse: 5.3.0
+ estraverse@4.3.0: {}
+
estraverse@5.3.0: {}
estree-util-attach-comments@3.0.0:
@@ -11893,6 +14723,18 @@ snapshots:
signal-exit: 3.0.7
strip-final-newline: 2.0.0
+ execa@8.0.1:
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 8.0.1
+ human-signals: 5.0.0
+ is-stream: 3.0.0
+ merge-stream: 2.0.0
+ npm-run-path: 5.3.0
+ onetime: 6.0.0
+ signal-exit: 4.1.0
+ strip-final-newline: 3.0.0
+
executable@4.1.1:
dependencies:
pify: 2.3.0
@@ -12031,6 +14873,10 @@ snapshots:
dependencies:
bser: 2.1.1
+ fd-package-json@1.2.0:
+ dependencies:
+ walk-up-path: 3.0.1
+
fd-slicer@1.1.0:
dependencies:
pend: 1.2.0
@@ -12063,6 +14909,8 @@ snapshots:
strip-outer: 2.0.0
trim-repeated: 2.0.0
+ filesize@10.1.6: {}
+
fill-range@7.1.1:
dependencies:
to-regex-range: 5.0.1
@@ -12079,12 +14927,28 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ find-cache-dir@2.1.0:
+ dependencies:
+ commondir: 1.0.1
+ make-dir: 2.1.0
+ pkg-dir: 3.0.0
+
+ find-cache-dir@3.3.2:
+ dependencies:
+ commondir: 1.0.1
+ make-dir: 3.1.0
+ pkg-dir: 4.2.0
+
find-my-way@8.1.0:
dependencies:
fast-deep-equal: 3.1.3
fast-querystring: 1.1.2
safe-regex2: 2.0.0
+ find-up@3.0.0:
+ dependencies:
+ locate-path: 3.0.0
+
find-up@4.1.0:
dependencies:
locate-path: 5.0.0
@@ -12117,6 +14981,8 @@ snapshots:
flatted@3.3.1: {}
+ flow-parser@0.245.2: {}
+
for-each@0.3.3:
dependencies:
is-callable: 1.2.7
@@ -12217,6 +15083,8 @@ snapshots:
get-caller-file@2.0.5: {}
+ get-func-name@2.0.2: {}
+
get-intrinsic@1.2.4:
dependencies:
es-errors: 1.3.0
@@ -12235,6 +15103,8 @@ snapshots:
get-stream@6.0.1: {}
+ get-stream@8.0.1: {}
+
get-symbol-description@1.0.2:
dependencies:
call-bind: 1.0.7
@@ -12245,8 +15115,21 @@ snapshots:
dependencies:
resolve-pkg-maps: 1.0.0
+ giget@1.2.3:
+ dependencies:
+ citty: 0.1.6
+ consola: 3.2.3
+ defu: 6.1.4
+ node-fetch-native: 1.6.4
+ nypm: 0.3.11
+ ohash: 1.1.3
+ pathe: 1.1.2
+ tar: 6.2.1
+
github-from-package@0.0.0: {}
+ github-slugger@2.0.0: {}
+
glob-parent@5.1.2:
dependencies:
is-glob: 4.0.3
@@ -12255,6 +15138,11 @@ snapshots:
dependencies:
is-glob: 4.0.3
+ glob-promise@4.2.2(glob@7.2.3):
+ dependencies:
+ '@types/glob': 7.2.0
+ glob: 7.2.3
+
glob@10.3.10:
dependencies:
foreground-child: 3.1.1
@@ -12299,6 +15187,8 @@ snapshots:
globals@15.8.0: {}
+ globals@15.9.0: {}
+
globalthis@1.0.3:
dependencies:
define-properties: 1.2.1
@@ -12317,6 +15207,15 @@ snapshots:
merge2: 1.4.1
slash: 3.0.0
+ globby@14.0.2:
+ dependencies:
+ '@sindresorhus/merge-streams': 2.3.0
+ fast-glob: 3.3.2
+ ignore: 5.3.1
+ path-type: 5.0.0
+ slash: 5.1.0
+ unicorn-magic: 0.1.0
+
gopd@1.0.1:
dependencies:
get-intrinsic: 1.2.4
@@ -12365,6 +15264,14 @@ snapshots:
dependencies:
function-bind: 1.1.2
+ hast-util-heading-rank@3.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+
+ hast-util-is-element@3.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+
hast-util-to-estree@3.1.0:
dependencies:
'@types/estree': 1.0.5
@@ -12406,6 +15313,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ hast-util-to-string@3.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+
hast-util-whitespace@3.0.0:
dependencies:
'@types/hast': 3.0.4
@@ -12420,6 +15331,8 @@ snapshots:
html-escaper@2.0.2: {}
+ html-tags@3.3.1: {}
+
http-cache-semantics@4.1.1: {}
http-errors@1.4.0:
@@ -12472,6 +15385,8 @@ snapshots:
human-signals@2.1.0: {}
+ human-signals@5.0.0: {}
+
humanize-ms@1.2.1:
dependencies:
ms: 2.1.3
@@ -12510,8 +15425,7 @@ snapshots:
imurmurhash@0.1.4: {}
- indent-string@4.0.0:
- optional: true
+ indent-string@4.0.0: {}
infer-owner@1.0.4:
optional: true
@@ -12547,6 +15461,8 @@ snapshots:
ipaddr.js@1.9.1: {}
+ is-absolute-url@4.0.1: {}
+
is-alphabetical@2.0.1: {}
is-alphanumerical@2.0.1:
@@ -12554,6 +15470,11 @@ snapshots:
is-alphabetical: 2.0.1
is-decimal: 2.0.1
+ is-arguments@1.1.1:
+ dependencies:
+ call-bind: 1.0.7
+ has-tostringtag: 1.0.2
+
is-array-buffer@3.0.4:
dependencies:
call-bind: 1.0.7
@@ -12635,6 +15556,12 @@ snapshots:
is-plain-obj@4.1.0: {}
+ is-plain-object@2.0.4:
+ dependencies:
+ isobject: 3.0.1
+
+ is-plain-object@5.0.0: {}
+
is-reference@3.0.2:
dependencies:
'@types/estree': 1.0.5
@@ -12654,6 +15581,8 @@ snapshots:
is-stream@2.0.1: {}
+ is-stream@3.0.0: {}
+
is-string@1.0.7:
dependencies:
has-tostringtag: 1.0.2
@@ -12693,6 +15622,8 @@ snapshots:
isexe@2.0.0: {}
+ isobject@3.0.1: {}
+
istanbul-lib-coverage@3.2.2: {}
istanbul-lib-instrument@5.2.1:
@@ -12799,16 +15730,16 @@ snapshots:
- babel-plugin-macros
- supports-color
- jest-cli@29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4)):
+ jest-cli@29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4)):
dependencies:
- '@jest/core': 29.7.0(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
+ '@jest/core': 29.7.0(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
chalk: 4.1.2
- create-jest: 29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
+ create-jest: 29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
exit: 0.1.2
import-local: 3.1.0
- jest-config: 29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
+ jest-config: 29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
jest-util: 29.7.0
jest-validate: 29.7.0
yargs: 17.7.2
@@ -12818,16 +15749,16 @@ snapshots:
- supports-color
- ts-node
- jest-cli@29.7.0(@types/node@22.5.2)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4)):
+ jest-cli@29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)):
dependencies:
- '@jest/core': 29.7.0(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))
+ '@jest/core': 29.7.0(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4))
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
chalk: 4.1.2
- create-jest: 29.7.0(@types/node@22.5.2)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))
+ create-jest: 29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4))
exit: 0.1.2
import-local: 3.1.0
- jest-config: 29.7.0(@types/node@22.5.2)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))
+ jest-config: 29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4))
jest-util: 29.7.0
jest-validate: 29.7.0
yargs: 17.7.2
@@ -12837,7 +15768,7 @@ snapshots:
- supports-color
- ts-node
- jest-config@29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4)):
+ jest-config@29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4)):
dependencies:
'@babel/core': 7.25.2
'@jest/test-sequencer': 29.7.0
@@ -12863,12 +15794,12 @@ snapshots:
strip-json-comments: 3.1.1
optionalDependencies:
'@types/node': 20.16.1
- ts-node: 10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4)
+ ts-node: 10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4)
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
- jest-config@29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4)):
+ jest-config@29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)):
dependencies:
'@babel/core': 7.25.2
'@jest/test-sequencer': 29.7.0
@@ -12894,12 +15825,12 @@ snapshots:
strip-json-comments: 3.1.1
optionalDependencies:
'@types/node': 20.16.1
- ts-node: 10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4)
+ ts-node: 10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
- jest-config@29.7.0(@types/node@22.5.2)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4)):
+ jest-config@29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)):
dependencies:
'@babel/core': 7.25.2
'@jest/test-sequencer': 29.7.0
@@ -12924,8 +15855,8 @@ snapshots:
slash: 3.0.0
strip-json-comments: 3.1.1
optionalDependencies:
- '@types/node': 22.5.2
- ts-node: 10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4)
+ '@types/node': 22.5.4
+ ts-node: 10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
@@ -13145,24 +16076,24 @@ snapshots:
merge-stream: 2.0.0
supports-color: 8.1.1
- jest@29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4)):
+ jest@29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4)):
dependencies:
- '@jest/core': 29.7.0(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
+ '@jest/core': 29.7.0(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
'@jest/types': 29.6.3
import-local: 3.1.0
- jest-cli: 29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
+ jest-cli: 29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
- supports-color
- ts-node
- jest@29.7.0(@types/node@22.5.2)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4)):
+ jest@29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)):
dependencies:
- '@jest/core': 29.7.0(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))
+ '@jest/core': 29.7.0(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4))
'@jest/types': 29.6.3
import-local: 3.1.0
- jest-cli: 29.7.0(@types/node@22.5.2)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4))
+ jest-cli: 29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4))
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
@@ -13171,6 +16102,8 @@ snapshots:
jiti@1.21.3: {}
+ joycon@3.1.1: {}
+
js-tokens@4.0.0: {}
js-yaml@3.14.1:
@@ -13185,6 +16118,33 @@ snapshots:
jsbn@1.1.0:
optional: true
+ jscodeshift@0.15.2(@babel/preset-env@7.25.4(@babel/core@7.25.2)):
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/parser': 7.25.4
+ '@babel/plugin-transform-class-properties': 7.25.4(@babel/core@7.25.2)
+ '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.25.2)
+ '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.25.2)
+ '@babel/plugin-transform-private-methods': 7.25.4(@babel/core@7.25.2)
+ '@babel/preset-flow': 7.24.7(@babel/core@7.25.2)
+ '@babel/preset-typescript': 7.24.7(@babel/core@7.25.2)
+ '@babel/register': 7.24.6(@babel/core@7.25.2)
+ babel-core: 7.0.0-bridge.0(@babel/core@7.25.2)
+ chalk: 4.1.2
+ flow-parser: 0.245.2
+ graceful-fs: 4.2.11
+ micromatch: 4.0.7
+ neo-async: 2.6.2
+ node-dir: 0.1.17
+ recast: 0.23.9
+ temp: 0.8.4
+ write-file-atomic: 2.4.3
+ optionalDependencies:
+ '@babel/preset-env': 7.25.4(@babel/core@7.25.2)
+ transitivePeerDependencies:
+ - supports-color
+
jsesc@0.5.0: {}
jsesc@2.5.2: {}
@@ -13235,6 +16195,8 @@ snapshots:
dependencies:
json-buffer: 3.0.1
+ kind-of@6.0.3: {}
+
kleur@3.0.3: {}
language-subtag-registry@0.3.23: {}
@@ -13262,6 +16224,8 @@ snapshots:
lines-and-columns@1.2.4: {}
+ load-tsconfig@0.2.5: {}
+
load-yaml-file@0.2.0:
dependencies:
graceful-fs: 4.2.11
@@ -13269,6 +16233,11 @@ snapshots:
pify: 4.0.1
strip-bom: 3.0.0
+ locate-path@3.0.0:
+ dependencies:
+ p-locate: 3.0.0
+ path-exists: 3.0.0
+
locate-path@5.0.0:
dependencies:
p-locate: 4.1.0
@@ -13289,6 +16258,8 @@ snapshots:
lodash.merge@4.6.2: {}
+ lodash.sortby@4.7.0: {}
+
lodash.startcase@4.4.0: {}
lodash@4.17.21: {}
@@ -13304,6 +16275,10 @@ snapshots:
dependencies:
js-tokens: 4.0.0
+ loupe@2.3.7:
+ dependencies:
+ get-func-name: 2.0.2
+
lowercase-keys@2.0.0: {}
lru-cache@10.2.2: {}
@@ -13323,6 +16298,21 @@ snapshots:
dependencies:
yallist: 4.0.0
+ lz-string@1.5.0: {}
+
+ magic-string@0.27.0:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.4.15
+
+ magic-string@0.30.11:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ make-dir@2.1.0:
+ dependencies:
+ pify: 4.0.1
+ semver: 5.7.2
+
make-dir@3.1.0:
dependencies:
semver: 6.3.1
@@ -13362,8 +16352,14 @@ snapshots:
manage-path@2.0.0: {}
+ map-or-similar@1.5.0: {}
+
markdown-extensions@2.0.0: {}
+ markdown-to-jsx@7.5.0(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+
mdast-util-from-markdown@2.0.1:
dependencies:
'@types/mdast': 4.0.4
@@ -13465,6 +16461,10 @@ snapshots:
media-typer@0.3.0: {}
+ memoizerific@1.11.3:
+ dependencies:
+ map-or-similar: 1.5.0
+
merge-descriptors@1.0.1: {}
merge-stream@2.0.0: {}
@@ -13700,10 +16700,14 @@ snapshots:
mimic-fn@2.1.0: {}
+ mimic-fn@4.0.0: {}
+
mimic-response@1.0.1: {}
mimic-response@3.1.0: {}
+ min-indent@1.0.1: {}
+
minimatch@10.0.1:
dependencies:
brace-expansion: 2.0.1
@@ -13789,6 +16793,13 @@ snapshots:
mkdirp@1.0.4: {}
+ mlly@1.7.1:
+ dependencies:
+ acorn: 8.12.1
+ pathe: 1.1.2
+ pkg-types: 1.2.0
+ ufo: 1.5.4
+
moment-timezone@0.5.45:
dependencies:
moment: 2.30.1
@@ -13829,6 +16840,8 @@ snapshots:
negotiator@0.6.3: {}
+ neo-async@2.6.2: {}
+
next@14.2.5(@babel/core@7.25.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
'@next/env': 14.2.5
@@ -13894,6 +16907,12 @@ snapshots:
node-addon-api@7.1.0: {}
+ node-dir@0.1.17:
+ dependencies:
+ minimatch: 3.1.2
+
+ node-fetch-native@1.6.4: {}
+
node-fetch@2.6.7(encoding@0.1.13):
dependencies:
whatwg-url: 5.0.0
@@ -13966,6 +16985,10 @@ snapshots:
dependencies:
path-key: 3.1.1
+ npm-run-path@5.3.0:
+ dependencies:
+ path-key: 4.0.0
+
npmlog@5.0.1:
dependencies:
are-we-there-yet: 2.0.0
@@ -13981,6 +17004,15 @@ snapshots:
set-blocking: 2.0.0
optional: true
+ nypm@0.3.11:
+ dependencies:
+ citty: 0.1.6
+ consola: 3.2.3
+ execa: 8.0.1
+ pathe: 1.1.2
+ pkg-types: 1.2.0
+ ufo: 1.5.4
+
object-assign@4.1.1: {}
object-hash@3.0.0: {}
@@ -14027,6 +17059,8 @@ snapshots:
define-properties: 1.2.1
es-object-atoms: 1.0.0
+ ohash@1.1.3: {}
+
on-exit-leak-free@2.1.2: {}
on-finished@2.4.1:
@@ -14047,6 +17081,10 @@ snapshots:
dependencies:
mimic-fn: 2.1.0
+ onetime@6.0.0:
+ dependencies:
+ mimic-fn: 4.0.0
+
optionator@0.9.4:
dependencies:
deep-is: 0.1.4
@@ -14096,6 +17134,10 @@ snapshots:
dependencies:
yocto-queue: 0.1.0
+ p-locate@3.0.0:
+ dependencies:
+ p-limit: 2.3.0
+
p-locate@4.1.0:
dependencies:
p-limit: 2.3.0
@@ -14145,6 +17187,8 @@ snapshots:
path-browserify@1.0.1: {}
+ path-exists@3.0.0: {}
+
path-exists@4.0.0: {}
path-is-absolute@1.0.1: {}
@@ -14153,6 +17197,8 @@ snapshots:
path-key@3.1.1: {}
+ path-key@4.0.0: {}
+
path-match@1.2.4:
dependencies:
http-errors: 1.4.0
@@ -14182,6 +17228,12 @@ snapshots:
path-type@4.0.0: {}
+ path-type@5.0.0: {}
+
+ pathe@1.1.2: {}
+
+ pathval@1.1.1: {}
+
peek-readable@5.0.0: {}
pend@1.2.0: {}
@@ -14264,9 +17316,23 @@ snapshots:
optionalDependencies:
nice-napi: 1.0.2
- pkg-dir@4.2.0:
+ pkg-dir@3.0.0:
+ dependencies:
+ find-up: 3.0.0
+
+ pkg-dir@4.2.0:
+ dependencies:
+ find-up: 4.1.0
+
+ pkg-types@1.2.0:
+ dependencies:
+ confbox: 0.1.7
+ mlly: 1.7.1
+ pathe: 1.1.2
+
+ polished@4.3.1:
dependencies:
- find-up: 4.1.0
+ '@babel/runtime': 7.24.7
possible-typed-array-names@1.0.0: {}
@@ -14277,32 +17343,66 @@ snapshots:
read-cache: 1.0.0
resolve: 1.22.8
+ postcss-import@15.1.0(postcss@8.4.45):
+ dependencies:
+ postcss: 8.4.45
+ postcss-value-parser: 4.2.0
+ read-cache: 1.0.0
+ resolve: 1.22.8
+
postcss-js@4.0.1(postcss@8.4.40):
dependencies:
camelcase-css: 2.0.1
postcss: 8.4.40
- postcss-load-config@4.0.2(postcss@8.4.40)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.14.2)(typescript@5.5.4)):
+ postcss-js@4.0.1(postcss@8.4.45):
+ dependencies:
+ camelcase-css: 2.0.1
+ postcss: 8.4.45
+
+ postcss-load-config@4.0.2(postcss@8.4.40)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.14.2)(typescript@5.5.4)):
dependencies:
lilconfig: 3.1.1
yaml: 2.4.3
optionalDependencies:
postcss: 8.4.40
- ts-node: 10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.14.2)(typescript@5.5.4)
+ ts-node: 10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.14.2)(typescript@5.5.4)
- postcss-load-config@4.0.2(postcss@8.4.40)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4)):
+ postcss-load-config@4.0.2(postcss@8.4.40)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4)):
dependencies:
lilconfig: 3.1.1
yaml: 2.4.3
optionalDependencies:
postcss: 8.4.40
- ts-node: 10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4)
+ ts-node: 10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4)
+
+ postcss-load-config@4.0.2(postcss@8.4.45)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)):
+ dependencies:
+ lilconfig: 3.1.1
+ yaml: 2.4.3
+ optionalDependencies:
+ postcss: 8.4.45
+ ts-node: 10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)
+
+ postcss-load-config@6.0.1(jiti@1.21.3)(postcss@8.4.45)(tsx@4.19.0)(yaml@2.4.3):
+ dependencies:
+ lilconfig: 3.1.1
+ optionalDependencies:
+ jiti: 1.21.3
+ postcss: 8.4.45
+ tsx: 4.19.0
+ yaml: 2.4.3
postcss-nested@6.0.1(postcss@8.4.40):
dependencies:
postcss: 8.4.40
postcss-selector-parser: 6.1.0
+ postcss-nested@6.0.1(postcss@8.4.45):
+ dependencies:
+ postcss: 8.4.45
+ postcss-selector-parser: 6.1.0
+
postcss-selector-parser@6.1.0:
dependencies:
cssesc: 3.0.0
@@ -14322,6 +17422,12 @@ snapshots:
picocolors: 1.0.1
source-map-js: 1.2.0
+ postcss@8.4.45:
+ dependencies:
+ nanoid: 3.3.7
+ picocolors: 1.0.1
+ source-map-js: 1.2.0
+
postgres-array@2.0.0: {}
postgres-bytea@1.0.0: {}
@@ -14368,6 +17474,12 @@ snapshots:
pretty-bytes@5.6.0: {}
+ pretty-format@27.5.1:
+ dependencies:
+ ansi-regex: 5.0.1
+ ansi-styles: 5.2.0
+ react-is: 17.0.2
+
pretty-format@29.7.0:
dependencies:
'@jest/schemas': 29.6.3
@@ -14465,6 +17577,35 @@ snapshots:
minimist: 1.2.8
strip-json-comments: 2.0.1
+ react-colorful@5.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+
+ react-confetti@6.1.0(react@18.3.1):
+ dependencies:
+ react: 18.3.1
+ tween-functions: 1.2.0
+
+ react-docgen-typescript@2.2.2(typescript@5.5.4):
+ dependencies:
+ typescript: 5.5.4
+
+ react-docgen@7.0.3:
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/traverse': 7.25.4
+ '@babel/types': 7.25.4
+ '@types/babel__core': 7.20.5
+ '@types/babel__traverse': 7.20.6
+ '@types/doctrine': 0.0.9
+ '@types/resolve': 1.20.6
+ doctrine: 3.0.0
+ resolve: 1.22.8
+ strip-indent: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+
react-dom@18.2.0(react@18.3.1):
dependencies:
loose-envify: 1.4.0
@@ -14477,10 +17618,24 @@ snapshots:
react: 18.3.1
scheduler: 0.23.2
+ react-element-to-jsx-string@15.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ dependencies:
+ '@base2/pretty-print-object': 1.0.1
+ is-plain-object: 5.0.0
+ react: 18.3.1
+ react-dom: 18.3.1(react@18.3.1)
+ react-is: 18.1.0
+
react-is@16.13.1: {}
+ react-is@17.0.2: {}
+
+ react-is@18.1.0: {}
+
react-is@18.3.1: {}
+ react-refresh@0.14.2: {}
+
react@18.3.1:
dependencies:
loose-envify: 1.4.0
@@ -14534,6 +17689,19 @@ snapshots:
real-require@0.2.0: {}
+ recast@0.23.9:
+ dependencies:
+ ast-types: 0.16.1
+ esprima: 4.0.1
+ source-map: 0.6.1
+ tiny-invariant: 1.3.3
+ tslib: 2.6.3
+
+ redent@3.0.0:
+ dependencies:
+ indent-string: 4.0.0
+ strip-indent: 3.0.0
+
redis@4.7.0:
dependencies:
'@redis/bloom': 1.2.0(@redis/client@1.6.0)
@@ -14587,6 +17755,23 @@ snapshots:
dependencies:
jsesc: 0.5.0
+ rehype-external-links@3.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+ '@ungap/structured-clone': 1.2.0
+ hast-util-is-element: 3.0.0
+ is-absolute-url: 4.0.1
+ space-separated-tokens: 2.0.2
+ unist-util-visit: 5.0.0
+
+ rehype-slug@6.0.0:
+ dependencies:
+ '@types/hast': 3.0.4
+ github-slugger: 2.0.0
+ hast-util-heading-rank: 3.0.0
+ hast-util-to-string: 3.0.0
+ unist-util-visit: 5.0.0
+
reinterval@1.1.0: {}
remark-mdx@3.0.1:
@@ -14617,6 +17802,8 @@ snapshots:
require-from-string@2.0.2: {}
+ requireindex@1.2.0: {}
+
resolve-alpn@1.2.1: {}
resolve-cwd@3.0.0:
@@ -14665,6 +17852,10 @@ snapshots:
rfdc@1.3.1: {}
+ rimraf@2.6.3:
+ dependencies:
+ glob: 7.2.3
+
rimraf@3.0.2:
dependencies:
glob: 7.2.3
@@ -14674,10 +17865,36 @@ snapshots:
glob: 11.0.0
package-json-from-dist: 1.0.0
+ rollup@4.21.2:
+ dependencies:
+ '@types/estree': 1.0.5
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.21.2
+ '@rollup/rollup-android-arm64': 4.21.2
+ '@rollup/rollup-darwin-arm64': 4.21.2
+ '@rollup/rollup-darwin-x64': 4.21.2
+ '@rollup/rollup-linux-arm-gnueabihf': 4.21.2
+ '@rollup/rollup-linux-arm-musleabihf': 4.21.2
+ '@rollup/rollup-linux-arm64-gnu': 4.21.2
+ '@rollup/rollup-linux-arm64-musl': 4.21.2
+ '@rollup/rollup-linux-powerpc64le-gnu': 4.21.2
+ '@rollup/rollup-linux-riscv64-gnu': 4.21.2
+ '@rollup/rollup-linux-s390x-gnu': 4.21.2
+ '@rollup/rollup-linux-x64-gnu': 4.21.2
+ '@rollup/rollup-linux-x64-musl': 4.21.2
+ '@rollup/rollup-win32-arm64-msvc': 4.21.2
+ '@rollup/rollup-win32-ia32-msvc': 4.21.2
+ '@rollup/rollup-win32-x64-msvc': 4.21.2
+ fsevents: 2.3.3
+
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
+ rxjs@7.8.1:
+ dependencies:
+ tslib: 2.6.3
+
safe-array-concat@1.1.2:
dependencies:
call-bind: 1.0.7
@@ -14719,6 +17936,8 @@ snapshots:
dependencies:
semver: 7.6.2
+ semver@5.7.2: {}
+
semver@6.3.1: {}
semver@7.3.5:
@@ -14731,6 +17950,8 @@ snapshots:
semver@7.6.2: {}
+ semver@7.6.3: {}
+
send@0.18.0:
dependencies:
debug: 2.6.9
@@ -14808,6 +18029,10 @@ snapshots:
setprototypeof@1.2.0: {}
+ shallow-clone@3.0.1:
+ dependencies:
+ kind-of: 6.0.3
+
shebang-command@1.2.0:
dependencies:
shebang-regex: 1.0.0
@@ -14820,6 +18045,8 @@ snapshots:
shebang-regex@3.0.0: {}
+ shell-quote@1.8.1: {}
+
side-channel@1.0.6:
dependencies:
call-bind: 1.0.7
@@ -14849,6 +18076,8 @@ snapshots:
slash@3.0.0: {}
+ slash@5.1.0: {}
+
smart-buffer@4.2.0:
optional: true
@@ -14895,8 +18124,14 @@ snapshots:
source-map@0.7.4: {}
+ source-map@0.8.0-beta.0:
+ dependencies:
+ whatwg-url: 7.1.0
+
space-separated-tokens@2.0.2: {}
+ spawn-command@0.0.2: {}
+
spawndamnit@2.0.0:
dependencies:
cross-spawn: 5.1.0
@@ -14938,6 +18173,42 @@ snapshots:
statuses@2.0.1: {}
+ storybook@8.2.9(@babel/preset-env@7.25.4(@babel/core@7.25.2)):
+ dependencies:
+ '@babel/core': 7.25.2
+ '@babel/types': 7.25.4
+ '@storybook/codemod': 8.2.9
+ '@storybook/core': 8.2.9
+ '@types/semver': 7.5.8
+ '@yarnpkg/fslib': 2.10.3
+ '@yarnpkg/libzip': 2.3.0
+ chalk: 4.1.2
+ commander: 6.2.1
+ cross-spawn: 7.0.3
+ detect-indent: 6.1.0
+ envinfo: 7.13.0
+ execa: 5.1.1
+ fd-package-json: 1.2.0
+ find-up: 5.0.0
+ fs-extra: 11.1.0
+ giget: 1.2.3
+ globby: 14.0.2
+ jscodeshift: 0.15.2(@babel/preset-env@7.25.4(@babel/core@7.25.2))
+ leven: 3.1.0
+ ora: 5.4.1
+ prettier: 3.3.3
+ prompts: 2.4.2
+ semver: 7.6.2
+ strip-json-comments: 3.1.1
+ tempy: 3.1.0
+ tiny-invariant: 1.3.3
+ ts-dedent: 2.2.0
+ transitivePeerDependencies:
+ - '@babel/preset-env'
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
stream-to-array@2.3.0:
dependencies:
any-promise: 1.3.0
@@ -15030,6 +18301,16 @@ snapshots:
strip-final-newline@2.0.0: {}
+ strip-final-newline@3.0.0: {}
+
+ strip-indent@3.0.0:
+ dependencies:
+ min-indent: 1.0.1
+
+ strip-indent@4.0.0:
+ dependencies:
+ min-indent: 1.0.1
+
strip-json-comments@2.0.1: {}
strip-json-comments@3.1.1: {}
@@ -15097,7 +18378,34 @@ snapshots:
'@pkgr/core': 0.1.1
tslib: 2.6.3
- tailwindcss@3.4.7(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.14.2)(typescript@5.5.4)):
+ tailwindcss@3.4.10(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)):
+ dependencies:
+ '@alloc/quick-lru': 5.2.0
+ arg: 5.0.2
+ chokidar: 3.6.0
+ didyoumean: 1.2.2
+ dlv: 1.1.3
+ fast-glob: 3.3.2
+ glob-parent: 6.0.2
+ is-glob: 4.0.3
+ jiti: 1.21.3
+ lilconfig: 2.1.0
+ micromatch: 4.0.7
+ normalize-path: 3.0.0
+ object-hash: 3.0.0
+ picocolors: 1.0.1
+ postcss: 8.4.45
+ postcss-import: 15.1.0(postcss@8.4.45)
+ postcss-js: 4.0.1(postcss@8.4.45)
+ postcss-load-config: 4.0.2(postcss@8.4.45)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4))
+ postcss-nested: 6.0.1(postcss@8.4.45)
+ postcss-selector-parser: 6.1.0
+ resolve: 1.22.8
+ sucrase: 3.35.0
+ transitivePeerDependencies:
+ - ts-node
+
+ tailwindcss@3.4.7(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.14.2)(typescript@5.5.4)):
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
@@ -15116,7 +18424,7 @@ snapshots:
postcss: 8.4.40
postcss-import: 15.1.0(postcss@8.4.40)
postcss-js: 4.0.1(postcss@8.4.40)
- postcss-load-config: 4.0.2(postcss@8.4.40)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.14.2)(typescript@5.5.4))
+ postcss-load-config: 4.0.2(postcss@8.4.40)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.14.2)(typescript@5.5.4))
postcss-nested: 6.0.1(postcss@8.4.40)
postcss-selector-parser: 6.1.0
resolve: 1.22.8
@@ -15124,7 +18432,7 @@ snapshots:
transitivePeerDependencies:
- ts-node
- tailwindcss@3.4.7(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4)):
+ tailwindcss@3.4.7(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4)):
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
@@ -15143,7 +18451,7 @@ snapshots:
postcss: 8.4.40
postcss-import: 15.1.0(postcss@8.4.40)
postcss-js: 4.0.1(postcss@8.4.40)
- postcss-load-config: 4.0.2(postcss@8.4.40)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
+ postcss-load-config: 4.0.2(postcss@8.4.40)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
postcss-nested: 6.0.1(postcss@8.4.40)
postcss-selector-parser: 6.1.0
resolve: 1.22.8
@@ -15187,6 +18495,23 @@ snapshots:
mkdirp: 1.0.4
yallist: 4.0.0
+ telejson@7.2.0:
+ dependencies:
+ memoizerific: 1.11.3
+
+ temp-dir@3.0.0: {}
+
+ temp@0.8.4:
+ dependencies:
+ rimraf: 2.6.3
+
+ tempy@3.1.0:
+ dependencies:
+ is-stream: 3.0.0
+ temp-dir: 3.0.0
+ type-fest: 2.19.0
+ unique-string: 3.0.0
+
term-size@2.2.1: {}
test-exclude@6.0.0:
@@ -15217,6 +18542,10 @@ snapshots:
tiny-case@1.0.3: {}
+ tiny-invariant@1.3.3: {}
+
+ tinyspy@2.2.1: {}
+
tmp@0.0.33:
dependencies:
os-tmpdir: 1.0.2
@@ -15250,6 +18579,10 @@ snapshots:
tr46@0.0.3: {}
+ tr46@1.0.1:
+ dependencies:
+ punycode: 2.3.1
+
tree-kill@1.2.2: {}
trim-lines@3.0.1: {}
@@ -15264,14 +18597,16 @@ snapshots:
dependencies:
typescript: 5.5.4
+ ts-dedent@2.2.0: {}
+
ts-interface-checker@0.1.13: {}
- ts-jest@29.2.3(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4)))(typescript@5.5.4):
+ ts-jest@29.2.3(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)))(typescript@5.5.4):
dependencies:
bs-logger: 0.2.6
ejs: 3.1.10
fast-json-stable-stringify: 2.1.0
- jest: 29.7.0(@types/node@20.16.1)(ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4))
+ jest: 29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4))
jest-util: 29.7.0
json5: 2.2.3
lodash.memoize: 4.1.2
@@ -15285,12 +18620,32 @@ snapshots:
'@jest/types': 29.6.3
babel-jest: 29.7.0(@babel/core@7.25.2)
+ ts-jest@29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(esbuild@0.19.12)(jest@29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4)))(typescript@5.5.4):
+ dependencies:
+ bs-logger: 0.2.6
+ ejs: 3.1.10
+ fast-json-stable-stringify: 2.1.0
+ jest: 29.7.0(@types/node@22.5.4)(ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4))
+ jest-util: 29.7.0
+ json5: 2.2.3
+ lodash.memoize: 4.1.2
+ make-error: 1.3.6
+ semver: 7.6.3
+ typescript: 5.5.4
+ yargs-parser: 21.1.1
+ optionalDependencies:
+ '@babel/core': 7.25.2
+ '@jest/transform': 29.7.0
+ '@jest/types': 29.6.3
+ babel-jest: 29.7.0(@babel/core@7.25.2)
+ esbuild: 0.19.12
+
ts-morph@12.0.0:
dependencies:
'@ts-morph/common': 0.11.1
code-block-writer: 10.1.1
- ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@16.18.11)(typescript@4.9.5):
+ ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@16.18.11)(typescript@4.9.5):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
@@ -15298,7 +18653,7 @@ snapshots:
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 16.18.11
- acorn: 8.11.3
+ acorn: 8.12.1
acorn-walk: 8.3.3
arg: 4.1.3
create-require: 1.1.1
@@ -15308,9 +18663,9 @@ snapshots:
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
optionalDependencies:
- '@swc/core': 1.7.18(@swc/helpers@0.5.5)
+ '@swc/core': 1.7.23(@swc/helpers@0.5.5)
- ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.14.2)(typescript@5.5.4):
+ ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.14.2)(typescript@5.5.4):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
@@ -15318,7 +18673,7 @@ snapshots:
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 20.14.2
- acorn: 8.11.3
+ acorn: 8.12.1
acorn-walk: 8.3.3
arg: 4.1.3
create-require: 1.1.1
@@ -15328,10 +18683,10 @@ snapshots:
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
optionalDependencies:
- '@swc/core': 1.7.18(@swc/helpers@0.5.5)
+ '@swc/core': 1.7.23(@swc/helpers@0.5.5)
optional: true
- ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4):
+ ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@20.16.1)(typescript@5.5.4):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
@@ -15339,7 +18694,7 @@ snapshots:
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 20.16.1
- acorn: 8.11.3
+ acorn: 8.12.1
acorn-walk: 8.3.3
arg: 4.1.3
create-require: 1.1.1
@@ -15349,18 +18704,18 @@ snapshots:
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
optionalDependencies:
- '@swc/core': 1.7.18(@swc/helpers@0.5.5)
+ '@swc/core': 1.7.23(@swc/helpers@0.5.5)
optional: true
- ts-node@10.9.1(@swc/core@1.7.18(@swc/helpers@0.5.5))(@types/node@22.5.2)(typescript@5.5.4):
+ ts-node@10.9.1(@swc/core@1.7.23(@swc/helpers@0.5.5))(@types/node@22.5.4)(typescript@5.5.4):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
- '@types/node': 22.5.2
- acorn: 8.11.3
+ '@types/node': 22.5.4
+ acorn: 8.12.1
acorn-walk: 8.3.3
arg: 4.1.3
create-require: 1.1.1
@@ -15370,7 +18725,7 @@ snapshots:
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
optionalDependencies:
- '@swc/core': 1.7.18(@swc/helpers@0.5.5)
+ '@swc/core': 1.7.23(@swc/helpers@0.5.5)
optional: true
ts-toolbelt@6.15.5: {}
@@ -15382,8 +18737,49 @@ snapshots:
minimist: 1.2.8
strip-bom: 3.0.0
+ tsconfig-paths@4.2.0:
+ dependencies:
+ json5: 2.2.3
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+
+ tslib@1.14.1: {}
+
tslib@2.6.3: {}
+ tsup@8.2.4(@swc/core@1.7.23(@swc/helpers@0.5.5))(jiti@1.21.3)(postcss@8.4.45)(tsx@4.19.0)(typescript@5.5.4)(yaml@2.4.3):
+ dependencies:
+ bundle-require: 5.0.0(esbuild@0.23.1)
+ cac: 6.7.14
+ chokidar: 3.6.0
+ consola: 3.2.3
+ debug: 4.3.5(supports-color@5.5.0)
+ esbuild: 0.23.1
+ execa: 5.1.1
+ globby: 11.1.0
+ joycon: 3.1.1
+ picocolors: 1.0.1
+ postcss-load-config: 6.0.1(jiti@1.21.3)(postcss@8.4.45)(tsx@4.19.0)(yaml@2.4.3)
+ resolve-from: 5.0.0
+ rollup: 4.21.2
+ source-map: 0.8.0-beta.0
+ sucrase: 3.35.0
+ tree-kill: 1.2.2
+ optionalDependencies:
+ '@swc/core': 1.7.23(@swc/helpers@0.5.5)
+ postcss: 8.4.45
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - jiti
+ - supports-color
+ - tsx
+ - yaml
+
+ tsutils@3.21.0(typescript@5.5.4):
+ dependencies:
+ tslib: 1.14.1
+ typescript: 5.5.4
+
tsx@4.16.2:
dependencies:
esbuild: 0.21.5
@@ -15391,6 +18787,13 @@ snapshots:
optionalDependencies:
fsevents: 2.3.3
+ tsx@4.19.0:
+ dependencies:
+ esbuild: 0.23.1
+ get-tsconfig: 4.7.5
+ optionalDependencies:
+ fsevents: 2.3.3
+
tunnel-agent@0.6.0:
dependencies:
safe-buffer: 5.2.1
@@ -15422,16 +18825,22 @@ snapshots:
turbo-windows-64: 2.0.9
turbo-windows-arm64: 2.0.9
+ tween-functions@1.2.0: {}
+
type-check@0.4.0:
dependencies:
prelude-ls: 1.2.1
type-detect@4.0.8: {}
+ type-detect@4.1.0: {}
+
type-fest@0.20.2: {}
type-fest@0.21.3: {}
+ type-fest@1.4.0: {}
+
type-fest@2.19.0: {}
type-is@1.6.18:
@@ -15484,10 +18893,23 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ typescript-eslint@8.4.0(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4):
+ dependencies:
+ '@typescript-eslint/eslint-plugin': 8.4.0(@typescript-eslint/parser@8.4.0(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4))(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4)
+ '@typescript-eslint/parser': 8.4.0(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4)
+ '@typescript-eslint/utils': 8.4.0(eslint@9.10.0(jiti@1.21.3))(typescript@5.5.4)
+ optionalDependencies:
+ typescript: 5.5.4
+ transitivePeerDependencies:
+ - eslint
+ - supports-color
+
typescript@4.9.5: {}
typescript@5.5.4: {}
+ ufo@1.5.4: {}
+
uid-promise@1.0.0: {}
unbox-primitive@1.0.2:
@@ -15518,6 +18940,8 @@ snapshots:
unicode-property-aliases-ecmascript@2.1.0: {}
+ unicorn-magic@0.1.0: {}
+
unified@11.0.4:
dependencies:
'@types/unist': 3.0.2
@@ -15538,6 +18962,10 @@ snapshots:
imurmurhash: 0.1.4
optional: true
+ unique-string@3.0.0:
+ dependencies:
+ crypto-random-string: 4.0.0
+
unist-util-is@6.0.0:
dependencies:
'@types/unist': 3.0.2
@@ -15576,6 +19004,11 @@ snapshots:
unpipe@1.0.0: {}
+ unplugin@1.13.1:
+ dependencies:
+ acorn: 8.12.1
+ webpack-virtual-modules: 0.6.2
+
update-browserslist-db@1.0.16(browserslist@4.23.0):
dependencies:
browserslist: 4.23.0
@@ -15600,6 +19033,14 @@ snapshots:
util-deprecate@1.0.2: {}
+ util@0.12.5:
+ dependencies:
+ inherits: 2.0.4
+ is-arguments: 1.1.1
+ is-generator-function: 1.0.10
+ is-typed-array: 1.1.13
+ which-typed-array: 1.1.15
+
utils-merge@1.0.1: {}
uuid-parse@1.1.0: {}
@@ -15608,6 +19049,8 @@ snapshots:
uuid@8.3.2: {}
+ uuid@9.0.1: {}
+
v8-compile-cache-lib@3.0.1: {}
v8-to-istanbul@9.3.0:
@@ -15620,14 +19063,14 @@ snapshots:
vary@1.1.2: {}
- vercel@35.2.4(@swc/core@1.7.18(@swc/helpers@0.5.5))(encoding@0.1.13):
+ vercel@35.2.4(@swc/core@1.7.23(@swc/helpers@0.5.5))(encoding@0.1.13):
dependencies:
'@vercel/build-utils': 8.3.6
'@vercel/fun': 1.1.0(encoding@0.1.13)
'@vercel/go': 3.1.1
'@vercel/hydrogen': 1.0.4
'@vercel/next': 4.3.6(encoding@0.1.13)
- '@vercel/node': 3.2.8(@swc/core@1.7.18(@swc/helpers@0.5.5))(encoding@0.1.13)
+ '@vercel/node': 3.2.8(@swc/core@1.7.23(@swc/helpers@0.5.5))(encoding@0.1.13)
'@vercel/python': 4.3.1
'@vercel/redwood': 2.1.3(encoding@0.1.13)
'@vercel/remix-builder': 2.2.4(encoding@0.1.13)
@@ -15651,6 +19094,17 @@ snapshots:
unist-util-stringify-position: 4.0.0
vfile-message: 4.0.2
+ vite@5.4.3(@types/node@22.5.4):
+ dependencies:
+ esbuild: 0.21.5
+ postcss: 8.4.45
+ rollup: 4.21.2
+ optionalDependencies:
+ '@types/node': 22.5.4
+ fsevents: 2.3.3
+
+ walk-up-path@3.0.1: {}
+
walker@1.0.8:
dependencies:
makeerror: 1.0.12
@@ -15663,11 +19117,21 @@ snapshots:
webidl-conversions@3.0.1: {}
+ webidl-conversions@4.0.2: {}
+
+ webpack-virtual-modules@0.6.2: {}
+
whatwg-url@5.0.0:
dependencies:
tr46: 0.0.3
webidl-conversions: 3.0.1
+ whatwg-url@7.1.0:
+ dependencies:
+ lodash.sortby: 4.7.0
+ tr46: 1.0.1
+ webidl-conversions: 4.0.2
+
which-boxed-primitive@1.0.2:
dependencies:
is-bigint: 1.0.4
@@ -15743,11 +19207,19 @@ snapshots:
wrappy@1.0.2: {}
+ write-file-atomic@2.4.3:
+ dependencies:
+ graceful-fs: 4.2.11
+ imurmurhash: 0.1.4
+ signal-exit: 3.0.7
+
write-file-atomic@4.0.2:
dependencies:
imurmurhash: 0.1.4
signal-exit: 3.0.7
+ ws@8.18.0: {}
+
xdg-app-paths@5.1.0:
dependencies:
xdg-portable: 7.3.0
diff --git a/turbo.json b/turbo.json
index cf2dbf41..bb86c906 100644
--- a/turbo.json
+++ b/turbo.json
@@ -10,7 +10,6 @@
"cache": true,
"outputs": [
"packages/**/dist/**",
- "examples/**/dist/**",
"lib/**/dist/**"
]
},