diff --git a/.editorconfig b/.editorconfig index ec4c8e83e..d970f16e7 100644 --- a/.editorconfig +++ b/.editorconfig @@ -19,3 +19,7 @@ indent_size = 2 [*.mdx] indent_style = space indent_size = 2 + +[*.json] +indent_style = space +indent_size = 2 diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..247f3f12d --- /dev/null +++ b/.eslintignore @@ -0,0 +1,10 @@ +.tmp +**/.git +**/.hg +**/.pnp.* +**/.svn +**/.yarn/** +**/build +**/dist/** +**/node_modules +**/temp diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 000000000..53f970d88 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,16 @@ +module.exports = { + extends: ['@payloadcms'], + overrides: [ + { + extends: ['plugin:@typescript-eslint/disable-type-checked'], + files: ['*.js', '*.cjs', '*.json', '*.md', '*.yml', '*.yaml'], + }, + { + files: ['packages/eslint-config-payload/**'], + rules: { + 'perfectionist/sort-objects': 'off', + }, + }, + ], + root: true, +} diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 47d4a492e..000000000 --- a/.eslintrc.js +++ /dev/null @@ -1,104 +0,0 @@ -module.exports = { - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaVersion: 2020, - sourceType: 'module', - ecmaFeatures: { - jsx: true, - }, - }, - plugins: [ - '@typescript-eslint', - ], - extends: [ - './eslint-config', - ], - settings: { - 'import/resolver': { - node: { - extensions: ['.js', '.jsx', '.ts', '.tsx'], - }, - }, - }, - overrides: [ - { - files: ['test/**/int.spec.ts'], - rules: { - '@typescript-eslint/no-use-before-define': 'off', - '@typescript-eslint/consistent-type-imports': 'warn', - 'jest/prefer-strict-equal': 'off', - } - }, - { - files: ['test/**/e2e.spec.ts'], - extends: [ - 'plugin:playwright/playwright-test' - ], - rules: { - 'jest/consistent-test-it': 'off', - 'jest/require-top-level-describe': 'off', - 'jest/no-test-callback': 'off', - 'jest/prefer-strict-equal': 'off', - 'jest/expect-expect': 'off', - 'jest-dom/prefer-to-have-attribute': 'off', - } - }, - { - files: ['*.ts', '*.tsx'], - parser: '@typescript-eslint/parser', - extends: [ - 'plugin:@typescript-eslint/recommended', - ], - rules: { - 'no-shadow': 'off', - '@typescript-eslint/no-shadow': ['error'], - 'import/no-unresolved': [ - 2, - { - ignore: [ - 'payload-config', - 'payload/generated-types', - ], - }, - ], - }, - }, - { - files: ['*.spec.ts'], - rules: { - '@typescript-eslint/no-use-before-define': 'off', - }, - }, - { - files: ['*.e2e.ts'], - rules: { - '@typescript-eslint/no-use-before-define': 'off', - 'jest/expect-expect': 'off', - }, - }, - ], - rules: { - 'import/no-extraneous-dependencies': ['error', { packageDir: './' }], - 'react/jsx-filename-extension': [2, { extensions: ['.js', '.jsx', '.ts', '.tsx'] }], - 'import/prefer-default-export': 'off', - 'react/prop-types': 'off', - 'react/require-default-props': 'off', - 'react/no-unused-prop-types': 'off', - 'no-console': 'warn', - 'no-sparse-arrays': 'off', - 'no-underscore-dangle': 'off', - 'no-use-before-define': 'off', - 'arrow-body-style': 0, - '@typescript-eslint/no-use-before-define': 'off', - 'import/extensions': [ - 'error', - 'ignorePackages', - { - js: 'never', - jsx: 'never', - ts: 'never', - tsx: 'never', - }, - ], - }, -}; diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 000000000..ffdf0d7a0 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,3 @@ +# lint and format +ae7d6f97d205491390f15850e5104c7abded1550 +1fbda85cd04a774cb978778b0f813001664c53dd diff --git a/.github/ISSUE_TEMPLATE/1.bug_report.yml b/.github/ISSUE_TEMPLATE/1.bug_report.yml index 4aa924616..d08e0a87d 100644 --- a/.github/ISSUE_TEMPLATE/1.bug_report.yml +++ b/.github/ISSUE_TEMPLATE/1.bug_report.yml @@ -1,6 +1,6 @@ name: Bug Report description: Create a bug report for Payload -labels: ["possible-bug"] +labels: ['possible-bug'] body: - type: markdown attributes: diff --git a/.github/reproduction-guide.md b/.github/reproduction-guide.md index 797f0b2cb..85ea565d7 100644 --- a/.github/reproduction-guide.md +++ b/.github/reproduction-guide.md @@ -9,6 +9,7 @@ **NOTE:** The goal is to isolate the problem by reducing the number of `collections/globals/fields` you add to the `test/_community` folder. This folder is _not_ meant for you to copy your project into, but rather recreate the issue you are experiencing with minimal config. ## Example test directory file tree + ```text . ├── config.ts @@ -27,9 +28,11 @@ The directory split up in this way specifically to reduce friction when creating
## Testing is optional but encouraged + An issue does not need to have failing tests — reproduction steps with your forked repo are enough at this point. Some people like to dive deeper and we want to give you the guidance/tools to do so. Read more below: ### Running integration tests (Payload API tests) + First install [Jest Runner for VSVode](https://marketplace.visualstudio.com/items?itemName=firsttris.vscode-jest-runner). There are a couple ways run integration tests: @@ -45,7 +48,9 @@ There are a couple ways run integration tests: ``` ### Running E2E tests (Admin Panel UI tests) + The easiest way to run E2E tests is to install + - [Playwright Test for VSCode](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright) - [Playwright Runner](https://marketplace.visualstudio.com/items?itemName=ortoni.ortoni) @@ -53,6 +58,6 @@ Once they are installed you can open the `testing` tab in vscode sidebar and dri - #### Notes + - It is recommended to add the test credentials (located in `test/credentials.ts`) to your autofill for `localhost:3000/admin` as this will be required on every nodemon restart. The default credentials are `dev@payloadcms.com` as email and `test` as password. diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a200697ab..8dee497e1 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -4,14 +4,14 @@ on: pull_request: types: [opened, reopened, synchronize] push: - branches: ["master"] + branches: ['master', '2.0'] jobs: - build_yarn: + install_and_build_pnpm: runs-on: ubuntu-latest strategy: matrix: - node-version: [16.x, 18.x] + node-version: [16.x, 18.x, 20.x] steps: - uses: actions/checkout@v2 @@ -20,37 +20,51 @@ jobs: with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org - scope: "@payloadcms" + scope: '@payloadcms' always-auth: true - - name: Cache node modules - uses: actions/cache@v1 + - uses: pnpm/action-setup@v2 + name: Install pnpm with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + version: 8 + run_install: false + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - uses: actions/cache@v3 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | - ${{ runner.os }}-build-${{ env.cache-name }}- - ${{ runner.os }}-build- - ${{ runner.os }}- - - run: yarn + ${{ runner.os }}-pnpm-store- + - name: Debug print versions + run: | + node -v + pnpm -v + - name: Install dependencies + run: pnpm install env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - run: yarn build + - run: pnpm build - name: Component Tests - run: yarn test:components - - name: Integration Tests - run: yarn test:int - - - name: Generate Payload Types - run: yarn dev:generate-types fields - - - name: Generate GraphQL schema file - run: yarn dev:generate-graphql-schema graphql-schema-gen + run: pnpm test:components - name: Install Playwright Browsers run: npx playwright install --with-deps - name: E2E Tests - run: yarn test:e2e --bail + run: pnpm test:e2e --bail + + - name: Integration Tests + run: pnpm test:int + + - name: Generate Payload Types + run: pnpm dev:generate-types fields + + - name: Generate GraphQL schema file + run: pnpm dev:generate-graphql-schema graphql-schema-gen - uses: actions/upload-artifact@v3 if: always() @@ -58,31 +72,3 @@ jobs: name: test-results path: test-results/ retention-days: 30 - - install_npm: - runs-on: ubuntu-latest - strategy: - matrix: - node-version: [16.x] - - steps: - - uses: actions/checkout@v2 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - registry-url: https://registry.npmjs.org - scope: "@payloadcms" - always-auth: true - - name: Cache node modules - uses: actions/cache@v1 - with: - path: ~/.npm - key: ${{ runner.os }}-node-npm-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-npm-${{ env.cache-name }}- - ${{ runner.os }}-npm- - ${{ runner.os }}- - - run: npm install - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.gitignore b/.gitignore index 7de28afdb..c0253c0ca 100644 --- a/.gitignore +++ b/.gitignore @@ -3,14 +3,20 @@ package-lock.json dist .idea test-results +.devcontainer -# Created by https://www.gitignore.io/api/node,macos,windows,webstorm,sublimetext,visualstudiocode +# Created by https://www.toptal.com/developers/gitignore/api/node,macos,windows,webstorm,sublimetext,visualstudiocode +# Edit at https://www.toptal.com/developers/gitignore?templates=node,macos,windows,webstorm,sublimetext,visualstudiocode ### macOS ### -*.DS_Store +# General +.DS_Store .AppleDouble .LSOverride +# Icon must end with two \r +Icon + # Thumbnails ._* @@ -30,6 +36,10 @@ Network Trash Folder Temporary Items .apdisk +### macOS Patch ### +# iCloud generated files +*.icloud + ### Node ### # Logs logs @@ -37,6 +47,11 @@ logs npm-debug.log* yarn-debug.log* yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json # Runtime data pids @@ -49,11 +64,12 @@ lib-cov # Coverage directory used by tools like istanbul coverage +*.lcov # nyc test coverage .nyc_output -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) .grunt # Bower dependency directory (https://bower.io/) @@ -62,15 +78,18 @@ bower_components # node-waf configuration .lock-wscript -# Compiled binary addons (http://nodejs.org/api/addons.html) +# Compiled binary addons (https://nodejs.org/api/addons.html) build/Release # Dependency directories node_modules/ jspm_packages/ -# Typescript v1 declaration files -typings/ +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo # Optional npm cache directory .npm @@ -78,6 +97,15 @@ typings/ # Optional eslint cache .eslintcache +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + # Optional REPL history .node_repl_history @@ -87,34 +115,87 @@ typings/ # Yarn Integrity file .yarn-integrity -# Yarn Berry -.yarn/* -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/sdks -!.yarn/versions +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz .pnp.* -# dotenv environment variables file -.env +### Node Patch ### +# Serverless Webpack directories +.webpack/ +# Optional stylelint cache + +# SvelteKit build / generate output +.svelte-kit ### SublimeText ### -# cache files for sublime text +# Cache files for Sublime Text *.tmlanguage.cache *.tmPreferences.cache *.stTheme.cache -# workspace files are user-specific +# Workspace files are user-specific *.sublime-workspace -# project files should be checked into the repository, unless a significant -# proportion of contributors will probably not be using SublimeText +# Project files should be checked into the repository, unless a significant +# proportion of contributors will probably not be using Sublime Text # *.sublime-project -# sftp configuration file +# SFTP configuration file sftp-config.json +sftp-config-alt*.json # Package control specific files Package Control.last-run @@ -134,46 +215,77 @@ GitHub.sublime-settings ### VisualStudioCode ### .vscode/* +!.vscode/settings.json !.vscode/tasks.json !.vscode/launch.json !.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### VisualStudioCode Patch ### +# Ignore all local history of files .history +.ionide ### WebStorm ### -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 -# User-specific stuff: +# User-specific stuff .idea/**/workspace.xml .idea/**/tasks.xml -.idea/dictionaries +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf -# Sensitive or high-churn files: +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files .idea/**/dataSources/ .idea/**/dataSources.ids -.idea/**/dataSources.xml .idea/**/dataSources.local.xml .idea/**/sqlDataSources.xml .idea/**/dynamic.xml .idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml -# Gradle: +# Gradle .idea/**/gradle.xml .idea/**/libraries -# CMake -cmake-build-debug/ +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr -# MongoDB Explorer plugin: +# CMake +cmake-build-*/ + +# Mongo Explorer plugin .idea/**/mongoSettings.xml -## File-based project format: +# File-based project format *.iws -## Plugin-specific files: - # IntelliJ -/out/ +out/ # mpeltonen/sbt-idea plugin .idea_modules/ @@ -184,8 +296,8 @@ atlassian-ide-plugin.xml # Cursive Clojure plugin .idea/replstate.xml -# Ruby plugin and RubyMine -/.rakeTasks +# SonarLint plugin +.idea/sonarlint/ # Crashlytics plugin (for Android Studio and IntelliJ) com_crashlytics_export_strings.xml @@ -193,6 +305,12 @@ crashlytics.properties crashlytics-build.properties fabric.properties +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + ### WebStorm Patch ### # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 @@ -202,16 +320,43 @@ fabric.properties # *.ipr # Sonarlint plugin -.idea/sonarlint +# https://plugins.jetbrains.com/plugin/7973-sonarlint +.idea/**/sonarlint/ + +# SonarQube Plugin +# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$CACHE_FILE$ + +# CodeStream plugin +# https://plugins.jetbrains.com/plugin/12206-codestream +.idea/codestream.xml + +# Azure Toolkit for IntelliJ plugin +# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij +.idea/**/azureSettings.xml ### Windows ### # Windows thumbnail cache files Thumbs.db +Thumbs.db:encryptable ehthumbs.db ehthumbs_vista.db +# Dump file +*.stackdump + # Folder config file -Desktop.ini +[Dd]esktop.ini # Recycle Bin used on file shares $RECYCLE.BIN/ @@ -219,26 +364,11 @@ $RECYCLE.BIN/ # Windows Installer files *.cab *.msi +*.msix *.msm *.msp # Windows shortcuts *.lnk -# End of https://www.gitignore.io/api/node,macos,windows,webstorm,sublimetext,visualstudiocode - -# Ignore all uploads -demo/upload -demo/media -demo/files - -# Ignore build folder -build - -# Ignore built components -components/index.js -components/styles.css - -# Ignore generated -demo/generated-types.ts -demo/generated-schema.graphql +# End of https://www.toptal.com/developers/gitignore/api/node,macos,windows,webstorm,sublimetext,visualstudiocode diff --git a/.migrations/drizzle-snapshot.json b/.migrations/drizzle-snapshot.json index 7011c2298..801558cbd 100644 --- a/.migrations/drizzle-snapshot.json +++ b/.migrations/drizzle-snapshot.json @@ -1,922 +1,10 @@ { - "id": "4b6f2243-b055-45d8-9afa-53cd2b729a12", - "prevId": "00000000-0000-0000-0000-000000000000", - "version": "5", - "dialect": "pg", - "tables": { - "posts_my_array_my_sub_array": { - "name": "posts_my_array_my_sub_array", - "schema": "", - "columns": { - "_order": { - "name": "_order", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "sub_sub_field": { - "name": "sub_sub_field", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "posts_my_array_my_sub_array__parent_id_posts_my_array_id_fk": { - "name": "posts_my_array_my_sub_array__parent_id_posts_my_array_id_fk", - "tableFrom": "posts_my_array_my_sub_array", - "tableTo": "posts_my_array", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "posts_my_array": { - "name": "posts_my_array", - "schema": "", - "columns": { - "_order": { - "name": "_order", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "posts_my_array__parent_id_posts_id_fk": { - "name": "posts_my_array__parent_id_posts_id_fk", - "tableFrom": "posts_my_array", - "tableTo": "posts", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "posts_my_array_locales": { - "name": "posts_my_array_locales", - "schema": "", - "columns": { - "sub_field": { - "name": "sub_field", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "_locale": { - "name": "_locale", - "type": "_locales", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "varchar", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "posts_my_array_locales__parent_id_posts_my_array_id_fk": { - "name": "posts_my_array_locales__parent_id_posts_my_array_id_fk", - "tableFrom": "posts_my_array_locales", - "tableTo": "posts_my_array", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "posts_block1": { - "name": "posts_block1", - "schema": "", - "columns": { - "_order": { - "name": "_order", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "_path": { - "name": "_path", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "non_localized_text": { - "name": "non_localized_text", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "block_name": { - "name": "block_name", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "posts_block1__parent_id_posts_id_fk": { - "name": "posts_block1__parent_id_posts_id_fk", - "tableFrom": "posts_block1", - "tableTo": "posts", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "posts_block1_locales": { - "name": "posts_block1_locales", - "schema": "", - "columns": { - "localized_text": { - "name": "localized_text", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "_locale": { - "name": "_locale", - "type": "_locales", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "varchar", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "posts_block1_locales__parent_id_posts_block1_id_fk": { - "name": "posts_block1_locales__parent_id_posts_block1_id_fk", - "tableFrom": "posts_block1_locales", - "tableTo": "posts_block1", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "posts_block2_block_array": { - "name": "posts_block2_block_array", - "schema": "", - "columns": { - "_order": { - "name": "_order", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "sub_block_array": { - "name": "sub_block_array", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "posts_block2_block_array__parent_id_posts_block2_id_fk": { - "name": "posts_block2_block_array__parent_id_posts_block2_id_fk", - "tableFrom": "posts_block2_block_array", - "tableTo": "posts_block2", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "posts_block2": { - "name": "posts_block2", - "schema": "", - "columns": { - "_order": { - "name": "_order", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "_path": { - "name": "_path", - "type": "text", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "number": { - "name": "number", - "type": "numeric", - "primaryKey": false, - "notNull": false - }, - "block_name": { - "name": "block_name", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "posts_block2__parent_id_posts_id_fk": { - "name": "posts_block2__parent_id_posts_id_fk", - "tableFrom": "posts_block2", - "tableTo": "posts", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "posts_my_group_group_array": { - "name": "posts_my_group_group_array", - "schema": "", - "columns": { - "_order": { - "name": "_order", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "id": { - "name": "id", - "type": "varchar", - "primaryKey": true, - "notNull": true - }, - "group_array_text": { - "name": "group_array_text", - "type": "varchar", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "posts_my_group_group_array__parent_id_posts_id_fk": { - "name": "posts_my_group_group_array__parent_id_posts_id_fk", - "tableFrom": "posts_my_group_group_array", - "tableTo": "posts", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "posts": { - "name": "posts", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "my_group_sub_field": { - "name": "my_group_sub_field", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "my_group_sub_group_sub_sub_field": { - "name": "my_group_sub_group_sub_sub_field", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "posts_locales": { - "name": "posts_locales", - "schema": "", - "columns": { - "title": { - "name": "title", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "number": { - "name": "number", - "type": "numeric", - "primaryKey": false, - "notNull": false - }, - "my_group_sub_field_localized": { - "name": "my_group_sub_field_localized", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "my_group_sub_group_sub_sub_field_localized": { - "name": "my_group_sub_group_sub_sub_field_localized", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "_locale": { - "name": "_locale", - "type": "_locales", - "primaryKey": false, - "notNull": true - }, - "_parent_id": { - "name": "_parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - } - }, - "indexes": {}, - "foreignKeys": { - "posts_locales__parent_id_posts_id_fk": { - "name": "posts_locales__parent_id_posts_id_fk", - "tableFrom": "posts_locales", - "tableTo": "posts", - "columnsFrom": [ - "_parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "posts_relationships": { - "name": "posts_relationships", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "parent_id": { - "name": "parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "path": { - "name": "path", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "order": { - "name": "order", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "pages_id": { - "name": "pages_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "people_id": { - "name": "people_id", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "posts_id": { - "name": "posts_id", - "type": "integer", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "posts_relationships_parent_id_posts_id_fk": { - "name": "posts_relationships_parent_id_posts_id_fk", - "tableFrom": "posts_relationships", - "tableTo": "posts", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "posts_relationships_pages_id_pages_id_fk": { - "name": "posts_relationships_pages_id_pages_id_fk", - "tableFrom": "posts_relationships", - "tableTo": "pages", - "columnsFrom": [ - "pages_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "posts_relationships_people_id_people_id_fk": { - "name": "posts_relationships_people_id_people_id_fk", - "tableFrom": "posts_relationships", - "tableTo": "people", - "columnsFrom": [ - "people_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "posts_relationships_posts_id_posts_id_fk": { - "name": "posts_relationships_posts_id_posts_id_fk", - "tableFrom": "posts_relationships", - "tableTo": "posts", - "columnsFrom": [ - "posts_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "pages": { - "name": "pages", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "slug": { - "name": "slug", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "people": { - "name": "people", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "full_name": { - "name": "full_name", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "users": { - "name": "users", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "email": { - "name": "email", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "reset_password_token": { - "name": "reset_password_token", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "salt": { - "name": "salt", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "hash": { - "name": "hash", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "login_attempts": { - "name": "login_attempts", - "type": "numeric", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": { - "email_idx": { - "name": "email_idx", - "columns": [ - "email" - ], - "isUnique": true - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "payload_preferences": { - "name": "payload_preferences", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "key": { - "name": "key", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "value": { - "name": "value", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "payload_preferences_relationships": { - "name": "payload_preferences_relationships", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "parent_id": { - "name": "parent_id", - "type": "integer", - "primaryKey": false, - "notNull": true - }, - "path": { - "name": "path", - "type": "varchar", - "primaryKey": false, - "notNull": true - }, - "order": { - "name": "order", - "type": "integer", - "primaryKey": false, - "notNull": false - }, - "users_id": { - "name": "users_id", - "type": "integer", - "primaryKey": false, - "notNull": false - } - }, - "indexes": {}, - "foreignKeys": { - "payload_preferences_relationships_parent_id_payload_preferences_id_fk": { - "name": "payload_preferences_relationships_parent_id_payload_preferences_id_fk", - "tableFrom": "payload_preferences_relationships", - "tableTo": "payload_preferences", - "columnsFrom": [ - "parent_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "payload_preferences_relationships_users_id_users_id_fk": { - "name": "payload_preferences_relationships_users_id_users_id_fk", - "tableFrom": "payload_preferences_relationships", - "tableTo": "users", - "columnsFrom": [ - "users_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "payload_migrations": { - "name": "payload_migrations", - "schema": "", - "columns": { - "id": { - "name": "id", - "type": "serial", - "primaryKey": true, - "notNull": true - }, - "name": { - "name": "name", - "type": "varchar", - "primaryKey": false, - "notNull": false - }, - "batch": { - "name": "batch", - "type": "numeric", - "primaryKey": false, - "notNull": false - }, - "schema": { - "name": "schema", - "type": "jsonb", - "primaryKey": false, - "notNull": false - }, - "created_at": { - "name": "created_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - }, - "updated_at": { - "name": "updated_at", - "type": "timestamp", - "primaryKey": false, - "notNull": true, - "default": "now()" - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - } + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} }, + "dialect": "pg", "enums": { "_locales": { "name": "_locales", @@ -926,10 +14,860 @@ } } }, + "id": "4b6f2243-b055-45d8-9afa-53cd2b729a12", + "prevId": "00000000-0000-0000-0000-000000000000", "schemas": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - } -} \ No newline at end of file + "tables": { + "pages": { + "columns": { + "created_at": { + "default": "now()", + "name": "created_at", + "notNull": true, + "primaryKey": false, + "type": "timestamp" + }, + "id": { + "name": "id", + "notNull": true, + "primaryKey": true, + "type": "serial" + }, + "slug": { + "name": "slug", + "notNull": false, + "primaryKey": false, + "type": "varchar" + }, + "updated_at": { + "default": "now()", + "name": "updated_at", + "notNull": true, + "primaryKey": false, + "type": "timestamp" + } + }, + "compositePrimaryKeys": {}, + "foreignKeys": {}, + "indexes": {}, + "name": "pages", + "schema": "", + "uniqueConstraints": {} + }, + "payload_migrations": { + "columns": { + "batch": { + "name": "batch", + "notNull": false, + "primaryKey": false, + "type": "numeric" + }, + "created_at": { + "default": "now()", + "name": "created_at", + "notNull": true, + "primaryKey": false, + "type": "timestamp" + }, + "id": { + "name": "id", + "notNull": true, + "primaryKey": true, + "type": "serial" + }, + "name": { + "name": "name", + "notNull": false, + "primaryKey": false, + "type": "varchar" + }, + "schema": { + "name": "schema", + "notNull": false, + "primaryKey": false, + "type": "jsonb" + }, + "updated_at": { + "default": "now()", + "name": "updated_at", + "notNull": true, + "primaryKey": false, + "type": "timestamp" + } + }, + "compositePrimaryKeys": {}, + "foreignKeys": {}, + "indexes": {}, + "name": "payload_migrations", + "schema": "", + "uniqueConstraints": {} + }, + "payload_preferences": { + "columns": { + "created_at": { + "default": "now()", + "name": "created_at", + "notNull": true, + "primaryKey": false, + "type": "timestamp" + }, + "id": { + "name": "id", + "notNull": true, + "primaryKey": true, + "type": "serial" + }, + "key": { + "name": "key", + "notNull": false, + "primaryKey": false, + "type": "varchar" + }, + "updated_at": { + "default": "now()", + "name": "updated_at", + "notNull": true, + "primaryKey": false, + "type": "timestamp" + }, + "value": { + "name": "value", + "notNull": false, + "primaryKey": false, + "type": "jsonb" + } + }, + "compositePrimaryKeys": {}, + "foreignKeys": {}, + "indexes": {}, + "name": "payload_preferences", + "schema": "", + "uniqueConstraints": {} + }, + "payload_preferences_relationships": { + "columns": { + "id": { + "name": "id", + "notNull": true, + "primaryKey": true, + "type": "serial" + }, + "order": { + "name": "order", + "notNull": false, + "primaryKey": false, + "type": "integer" + }, + "parent_id": { + "name": "parent_id", + "notNull": true, + "primaryKey": false, + "type": "integer" + }, + "path": { + "name": "path", + "notNull": true, + "primaryKey": false, + "type": "varchar" + }, + "users_id": { + "name": "users_id", + "notNull": false, + "primaryKey": false, + "type": "integer" + } + }, + "compositePrimaryKeys": {}, + "foreignKeys": { + "payload_preferences_relationships_parent_id_payload_preferences_id_fk": { + "columnsFrom": ["parent_id"], + "columnsTo": ["id"], + "name": "payload_preferences_relationships_parent_id_payload_preferences_id_fk", + "onDelete": "no action", + "onUpdate": "no action", + "tableFrom": "payload_preferences_relationships", + "tableTo": "payload_preferences" + }, + "payload_preferences_relationships_users_id_users_id_fk": { + "columnsFrom": ["users_id"], + "columnsTo": ["id"], + "name": "payload_preferences_relationships_users_id_users_id_fk", + "onDelete": "no action", + "onUpdate": "no action", + "tableFrom": "payload_preferences_relationships", + "tableTo": "users" + } + }, + "indexes": {}, + "name": "payload_preferences_relationships", + "schema": "", + "uniqueConstraints": {} + }, + "people": { + "columns": { + "created_at": { + "default": "now()", + "name": "created_at", + "notNull": true, + "primaryKey": false, + "type": "timestamp" + }, + "full_name": { + "name": "full_name", + "notNull": false, + "primaryKey": false, + "type": "varchar" + }, + "id": { + "name": "id", + "notNull": true, + "primaryKey": true, + "type": "serial" + }, + "updated_at": { + "default": "now()", + "name": "updated_at", + "notNull": true, + "primaryKey": false, + "type": "timestamp" + } + }, + "compositePrimaryKeys": {}, + "foreignKeys": {}, + "indexes": {}, + "name": "people", + "schema": "", + "uniqueConstraints": {} + }, + "posts": { + "columns": { + "created_at": { + "default": "now()", + "name": "created_at", + "notNull": true, + "primaryKey": false, + "type": "timestamp" + }, + "id": { + "name": "id", + "notNull": true, + "primaryKey": true, + "type": "serial" + }, + "my_group_sub_field": { + "name": "my_group_sub_field", + "notNull": false, + "primaryKey": false, + "type": "varchar" + }, + "my_group_sub_group_sub_sub_field": { + "name": "my_group_sub_group_sub_sub_field", + "notNull": false, + "primaryKey": false, + "type": "varchar" + }, + "updated_at": { + "default": "now()", + "name": "updated_at", + "notNull": true, + "primaryKey": false, + "type": "timestamp" + } + }, + "compositePrimaryKeys": {}, + "foreignKeys": {}, + "indexes": {}, + "name": "posts", + "schema": "", + "uniqueConstraints": {} + }, + "posts_block1": { + "columns": { + "_order": { + "name": "_order", + "notNull": true, + "primaryKey": false, + "type": "integer" + }, + "_parent_id": { + "name": "_parent_id", + "notNull": true, + "primaryKey": false, + "type": "integer" + }, + "_path": { + "name": "_path", + "notNull": true, + "primaryKey": false, + "type": "text" + }, + "block_name": { + "name": "block_name", + "notNull": false, + "primaryKey": false, + "type": "varchar" + }, + "id": { + "name": "id", + "notNull": true, + "primaryKey": true, + "type": "varchar" + }, + "non_localized_text": { + "name": "non_localized_text", + "notNull": false, + "primaryKey": false, + "type": "varchar" + } + }, + "compositePrimaryKeys": {}, + "foreignKeys": { + "posts_block1__parent_id_posts_id_fk": { + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "name": "posts_block1__parent_id_posts_id_fk", + "onDelete": "no action", + "onUpdate": "no action", + "tableFrom": "posts_block1", + "tableTo": "posts" + } + }, + "indexes": {}, + "name": "posts_block1", + "schema": "", + "uniqueConstraints": {} + }, + "posts_block1_locales": { + "columns": { + "_locale": { + "name": "_locale", + "notNull": true, + "primaryKey": false, + "type": "_locales" + }, + "_parent_id": { + "name": "_parent_id", + "notNull": true, + "primaryKey": false, + "type": "varchar" + }, + "id": { + "name": "id", + "notNull": true, + "primaryKey": true, + "type": "serial" + }, + "localized_text": { + "name": "localized_text", + "notNull": false, + "primaryKey": false, + "type": "varchar" + } + }, + "compositePrimaryKeys": {}, + "foreignKeys": { + "posts_block1_locales__parent_id_posts_block1_id_fk": { + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "name": "posts_block1_locales__parent_id_posts_block1_id_fk", + "onDelete": "no action", + "onUpdate": "no action", + "tableFrom": "posts_block1_locales", + "tableTo": "posts_block1" + } + }, + "indexes": {}, + "name": "posts_block1_locales", + "schema": "", + "uniqueConstraints": {} + }, + "posts_block2": { + "columns": { + "_order": { + "name": "_order", + "notNull": true, + "primaryKey": false, + "type": "integer" + }, + "_parent_id": { + "name": "_parent_id", + "notNull": true, + "primaryKey": false, + "type": "integer" + }, + "_path": { + "name": "_path", + "notNull": true, + "primaryKey": false, + "type": "text" + }, + "block_name": { + "name": "block_name", + "notNull": false, + "primaryKey": false, + "type": "varchar" + }, + "id": { + "name": "id", + "notNull": true, + "primaryKey": true, + "type": "varchar" + }, + "number": { + "name": "number", + "notNull": false, + "primaryKey": false, + "type": "numeric" + } + }, + "compositePrimaryKeys": {}, + "foreignKeys": { + "posts_block2__parent_id_posts_id_fk": { + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "name": "posts_block2__parent_id_posts_id_fk", + "onDelete": "no action", + "onUpdate": "no action", + "tableFrom": "posts_block2", + "tableTo": "posts" + } + }, + "indexes": {}, + "name": "posts_block2", + "schema": "", + "uniqueConstraints": {} + }, + "posts_block2_block_array": { + "columns": { + "_order": { + "name": "_order", + "notNull": true, + "primaryKey": false, + "type": "integer" + }, + "_parent_id": { + "name": "_parent_id", + "notNull": true, + "primaryKey": false, + "type": "varchar" + }, + "id": { + "name": "id", + "notNull": true, + "primaryKey": true, + "type": "varchar" + }, + "sub_block_array": { + "name": "sub_block_array", + "notNull": false, + "primaryKey": false, + "type": "varchar" + } + }, + "compositePrimaryKeys": {}, + "foreignKeys": { + "posts_block2_block_array__parent_id_posts_block2_id_fk": { + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "name": "posts_block2_block_array__parent_id_posts_block2_id_fk", + "onDelete": "no action", + "onUpdate": "no action", + "tableFrom": "posts_block2_block_array", + "tableTo": "posts_block2" + } + }, + "indexes": {}, + "name": "posts_block2_block_array", + "schema": "", + "uniqueConstraints": {} + }, + "posts_locales": { + "columns": { + "_locale": { + "name": "_locale", + "notNull": true, + "primaryKey": false, + "type": "_locales" + }, + "_parent_id": { + "name": "_parent_id", + "notNull": true, + "primaryKey": false, + "type": "integer" + }, + "id": { + "name": "id", + "notNull": true, + "primaryKey": true, + "type": "serial" + }, + "my_group_sub_field_localized": { + "name": "my_group_sub_field_localized", + "notNull": false, + "primaryKey": false, + "type": "varchar" + }, + "my_group_sub_group_sub_sub_field_localized": { + "name": "my_group_sub_group_sub_sub_field_localized", + "notNull": false, + "primaryKey": false, + "type": "varchar" + }, + "number": { + "name": "number", + "notNull": false, + "primaryKey": false, + "type": "numeric" + }, + "title": { + "name": "title", + "notNull": false, + "primaryKey": false, + "type": "varchar" + } + }, + "compositePrimaryKeys": {}, + "foreignKeys": { + "posts_locales__parent_id_posts_id_fk": { + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "name": "posts_locales__parent_id_posts_id_fk", + "onDelete": "no action", + "onUpdate": "no action", + "tableFrom": "posts_locales", + "tableTo": "posts" + } + }, + "indexes": {}, + "name": "posts_locales", + "schema": "", + "uniqueConstraints": {} + }, + "posts_my_array": { + "columns": { + "_order": { + "name": "_order", + "notNull": true, + "primaryKey": false, + "type": "integer" + }, + "_parent_id": { + "name": "_parent_id", + "notNull": true, + "primaryKey": false, + "type": "integer" + }, + "id": { + "name": "id", + "notNull": true, + "primaryKey": true, + "type": "varchar" + } + }, + "compositePrimaryKeys": {}, + "foreignKeys": { + "posts_my_array__parent_id_posts_id_fk": { + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "name": "posts_my_array__parent_id_posts_id_fk", + "onDelete": "no action", + "onUpdate": "no action", + "tableFrom": "posts_my_array", + "tableTo": "posts" + } + }, + "indexes": {}, + "name": "posts_my_array", + "schema": "", + "uniqueConstraints": {} + }, + "posts_my_array_locales": { + "columns": { + "_locale": { + "name": "_locale", + "notNull": true, + "primaryKey": false, + "type": "_locales" + }, + "_parent_id": { + "name": "_parent_id", + "notNull": true, + "primaryKey": false, + "type": "varchar" + }, + "id": { + "name": "id", + "notNull": true, + "primaryKey": true, + "type": "serial" + }, + "sub_field": { + "name": "sub_field", + "notNull": false, + "primaryKey": false, + "type": "varchar" + } + }, + "compositePrimaryKeys": {}, + "foreignKeys": { + "posts_my_array_locales__parent_id_posts_my_array_id_fk": { + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "name": "posts_my_array_locales__parent_id_posts_my_array_id_fk", + "onDelete": "no action", + "onUpdate": "no action", + "tableFrom": "posts_my_array_locales", + "tableTo": "posts_my_array" + } + }, + "indexes": {}, + "name": "posts_my_array_locales", + "schema": "", + "uniqueConstraints": {} + }, + "posts_my_array_my_sub_array": { + "columns": { + "_order": { + "name": "_order", + "notNull": true, + "primaryKey": false, + "type": "integer" + }, + "_parent_id": { + "name": "_parent_id", + "notNull": true, + "primaryKey": false, + "type": "varchar" + }, + "id": { + "name": "id", + "notNull": true, + "primaryKey": true, + "type": "varchar" + }, + "sub_sub_field": { + "name": "sub_sub_field", + "notNull": false, + "primaryKey": false, + "type": "varchar" + } + }, + "compositePrimaryKeys": {}, + "foreignKeys": { + "posts_my_array_my_sub_array__parent_id_posts_my_array_id_fk": { + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "name": "posts_my_array_my_sub_array__parent_id_posts_my_array_id_fk", + "onDelete": "no action", + "onUpdate": "no action", + "tableFrom": "posts_my_array_my_sub_array", + "tableTo": "posts_my_array" + } + }, + "indexes": {}, + "name": "posts_my_array_my_sub_array", + "schema": "", + "uniqueConstraints": {} + }, + "posts_my_group_group_array": { + "columns": { + "_order": { + "name": "_order", + "notNull": true, + "primaryKey": false, + "type": "integer" + }, + "_parent_id": { + "name": "_parent_id", + "notNull": true, + "primaryKey": false, + "type": "integer" + }, + "group_array_text": { + "name": "group_array_text", + "notNull": false, + "primaryKey": false, + "type": "varchar" + }, + "id": { + "name": "id", + "notNull": true, + "primaryKey": true, + "type": "varchar" + } + }, + "compositePrimaryKeys": {}, + "foreignKeys": { + "posts_my_group_group_array__parent_id_posts_id_fk": { + "columnsFrom": ["_parent_id"], + "columnsTo": ["id"], + "name": "posts_my_group_group_array__parent_id_posts_id_fk", + "onDelete": "no action", + "onUpdate": "no action", + "tableFrom": "posts_my_group_group_array", + "tableTo": "posts" + } + }, + "indexes": {}, + "name": "posts_my_group_group_array", + "schema": "", + "uniqueConstraints": {} + }, + "posts_relationships": { + "columns": { + "id": { + "name": "id", + "notNull": true, + "primaryKey": true, + "type": "serial" + }, + "order": { + "name": "order", + "notNull": false, + "primaryKey": false, + "type": "integer" + }, + "pages_id": { + "name": "pages_id", + "notNull": false, + "primaryKey": false, + "type": "integer" + }, + "parent_id": { + "name": "parent_id", + "notNull": true, + "primaryKey": false, + "type": "integer" + }, + "path": { + "name": "path", + "notNull": true, + "primaryKey": false, + "type": "varchar" + }, + "people_id": { + "name": "people_id", + "notNull": false, + "primaryKey": false, + "type": "integer" + }, + "posts_id": { + "name": "posts_id", + "notNull": false, + "primaryKey": false, + "type": "integer" + } + }, + "compositePrimaryKeys": {}, + "foreignKeys": { + "posts_relationships_pages_id_pages_id_fk": { + "columnsFrom": ["pages_id"], + "columnsTo": ["id"], + "name": "posts_relationships_pages_id_pages_id_fk", + "onDelete": "no action", + "onUpdate": "no action", + "tableFrom": "posts_relationships", + "tableTo": "pages" + }, + "posts_relationships_parent_id_posts_id_fk": { + "columnsFrom": ["parent_id"], + "columnsTo": ["id"], + "name": "posts_relationships_parent_id_posts_id_fk", + "onDelete": "no action", + "onUpdate": "no action", + "tableFrom": "posts_relationships", + "tableTo": "posts" + }, + "posts_relationships_people_id_people_id_fk": { + "columnsFrom": ["people_id"], + "columnsTo": ["id"], + "name": "posts_relationships_people_id_people_id_fk", + "onDelete": "no action", + "onUpdate": "no action", + "tableFrom": "posts_relationships", + "tableTo": "people" + }, + "posts_relationships_posts_id_posts_id_fk": { + "columnsFrom": ["posts_id"], + "columnsTo": ["id"], + "name": "posts_relationships_posts_id_posts_id_fk", + "onDelete": "no action", + "onUpdate": "no action", + "tableFrom": "posts_relationships", + "tableTo": "posts" + } + }, + "indexes": {}, + "name": "posts_relationships", + "schema": "", + "uniqueConstraints": {} + }, + "users": { + "columns": { + "created_at": { + "default": "now()", + "name": "created_at", + "notNull": true, + "primaryKey": false, + "type": "timestamp" + }, + "email": { + "name": "email", + "notNull": false, + "primaryKey": false, + "type": "varchar" + }, + "hash": { + "name": "hash", + "notNull": false, + "primaryKey": false, + "type": "varchar" + }, + "id": { + "name": "id", + "notNull": true, + "primaryKey": true, + "type": "serial" + }, + "login_attempts": { + "name": "login_attempts", + "notNull": false, + "primaryKey": false, + "type": "numeric" + }, + "reset_password_token": { + "name": "reset_password_token", + "notNull": false, + "primaryKey": false, + "type": "varchar" + }, + "salt": { + "name": "salt", + "notNull": false, + "primaryKey": false, + "type": "varchar" + }, + "updated_at": { + "default": "now()", + "name": "updated_at", + "notNull": true, + "primaryKey": false, + "type": "timestamp" + } + }, + "compositePrimaryKeys": {}, + "foreignKeys": {}, + "indexes": { + "email_idx": { + "columns": ["email"], + "isUnique": true, + "name": "email_idx" + } + }, + "name": "users", + "schema": "", + "uniqueConstraints": {} + } + }, + "version": "5" +} diff --git a/.node-version b/.node-version index 6276cf12f..860cc5000 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -v16.14.2 +v18.17.1 diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..b58731c30 --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +symlink=true +node-linker=isolated # due to a typescript bug, isolated mode requires @types/express-serve-static-core, terser and monaco-editor to be installed https://github.com/microsoft/TypeScript/issues/47663#issuecomment-1519138189 along with two other changes in the code which I've marked with (tsbugisolatedmode) in the code \ No newline at end of file diff --git a/.nvmrc b/.nvmrc index 6276cf12f..860cc5000 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v16.14.2 +v18.17.1 diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..247f3f12d --- /dev/null +++ b/.prettierignore @@ -0,0 +1,10 @@ +.tmp +**/.git +**/.hg +**/.pnp.* +**/.svn +**/.yarn/** +**/build +**/dist/** +**/node_modules +**/temp diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 000000000..cb8ee2671 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "singleQuote": true, + "trailingComma": "all", + "printWidth": 100, + "semi": false +} diff --git a/.release-it.json b/.release-it.json index c2f21016b..f6bdc6333 100644 --- a/.release-it.json +++ b/.release-it.json @@ -11,7 +11,7 @@ "skipChecks": true }, "hooks": { - "before:init": ["yarn", "yarn clean", "yarn test"] + "before:init": ["pnpm i", "pnpm clean", "pnpm test"] }, "plugins": { "@release-it/conventional-changelog": { diff --git a/.release-it.pre.json b/.release-it.pre.json index a02d70178..646ff2384 100644 --- a/.release-it.pre.json +++ b/.release-it.pre.json @@ -14,7 +14,7 @@ "tag": "canary" }, "hooks": { - "before:init": ["yarn", "yarn clean", "yarn test"] + "before:init": ["pnpm i", "pnpm clean", "pnpm test"] }, "plugins": { "@release-it/conventional-changelog": { diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 000000000..d7df89c9c --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint"] +} diff --git a/.vscode/launch.json b/.vscode/launch.json index e8242463c..6cd7d7fae 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,112 +1,112 @@ { // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", "configurations": [ { - "command": "yarn run dev _community", + "command": "pnpm run dev _community", + "cwd": "${workspaceFolder}", "name": "Run Dev Community", "request": "launch", - "type": "node-terminal", - "cwd": "${workspaceFolder}" + "type": "node-terminal" }, { - "command": "yarn run dev fields", + "command": "pnpm run dev fields", + "cwd": "${workspaceFolder}", "name": "Run Dev Fields", "request": "launch", - "type": "node-terminal", - "cwd": "${workspaceFolder}" + "type": "node-terminal" }, { - "command": "yarn run dev:postgres postgres -- -I", // Allow input + "command": "pnpm run dev:postgres postgres -- -I", // Allow input + "cwd": "${workspaceFolder}", "name": "Run Dev Postgres", "request": "launch", - "type": "node-terminal", - "cwd": "${workspaceFolder}" + "type": "node-terminal" }, { - "command": "yarn run dev versions", + "command": "pnpm run dev versions", + "cwd": "${workspaceFolder}", "name": "Run Dev Versions", "request": "launch", - "type": "node-terminal", - "cwd": "${workspaceFolder}" + "type": "node-terminal" }, { - "type": "node-terminal", "command": "ts-node src/bin/migrate.ts migrate", - "request": "launch", + "env": { + "PAYLOAD_CONFIG_PATH": "test/migrations-cli/config.ts", + "PAYLOAD_DATABASE": "postgres" + // "PAYLOAD_DROP_DATABASE": "true", + }, "name": "Migrate CLI - migrate", - "env": { - "PAYLOAD_CONFIG_PATH": "test/migrations-cli/config.ts", - "PAYLOAD_DATABASE": "postgres", - // "PAYLOAD_DROP_DATABASE": "true", - }, "outputCapture": "std", + "request": "launch", + "type": "node-terminal" }, { - "type": "node-terminal", "command": "ts-node src/bin/migrate.ts migrate:status", - "request": "launch", - "name": "Migrate CLI - status", "env": { "PAYLOAD_CONFIG_PATH": "test/migrations-cli/config.ts", - "PAYLOAD_DATABASE": "postgres", + "PAYLOAD_DATABASE": "postgres" // "PAYLOAD_DROP_DATABASE": "true", }, + "name": "Migrate CLI - status", "outputCapture": "std", + "request": "launch", + "type": "node-terminal" }, { - "type": "node-terminal", "command": "ts-node src/bin/migrate.ts migrate:create yass", - "request": "launch", + "env": { + // "PAYLOAD_CONFIG_PATH": "test/migrations-cli/config.ts", + "PAYLOAD_CONFIG_PATH": "test/postgres/config.ts", + "PAYLOAD_DATABASE": "postgres" + // "PAYLOAD_DROP_DATABASE": "true", + }, "name": "Migrate CLI - create", - "env": { - // "PAYLOAD_CONFIG_PATH": "test/migrations-cli/config.ts", - "PAYLOAD_CONFIG_PATH": "test/postgres/config.ts", - "PAYLOAD_DATABASE": "postgres", - // "PAYLOAD_DROP_DATABASE": "true", - }, "outputCapture": "std", + "request": "launch", + "type": "node-terminal" }, { - "type": "node-terminal", "command": "ts-node src/bin/migrate.ts migrate:down", - "request": "launch", + "env": { + // "PAYLOAD_CONFIG_PATH": "test/migrations-cli/config.ts", + "PAYLOAD_CONFIG_PATH": "test/postgres/config.ts", + "PAYLOAD_DATABASE": "postgres" + // "PAYLOAD_DROP_DATABASE": "true", + }, "name": "Migrate CLI - down", - "env": { - // "PAYLOAD_CONFIG_PATH": "test/migrations-cli/config.ts", - "PAYLOAD_CONFIG_PATH": "test/postgres/config.ts", - "PAYLOAD_DATABASE": "postgres", - // "PAYLOAD_DROP_DATABASE": "true", - }, "outputCapture": "std", + "request": "launch", + "type": "node-terminal" }, { - "type": "node-terminal", "command": "ts-node src/bin/migrate.ts migrate:reset", - "request": "launch", - "name": "Migrate CLI - reset", "env": { // "PAYLOAD_CONFIG_PATH": "test/migrations-cli/config.ts", "PAYLOAD_CONFIG_PATH": "test/postgres/config.ts", - "PAYLOAD_DATABASE": "postgres", + "PAYLOAD_DATABASE": "postgres" // "PAYLOAD_DROP_DATABASE": "true", }, + "name": "Migrate CLI - reset", "outputCapture": "std", + "request": "launch", + "type": "node-terminal" }, { - "type": "node-terminal", "command": "ts-node src/bin/migrate.ts migrate:refresh", - "request": "launch", - "name": "Migrate CLI - refresh", "env": { // "PAYLOAD_CONFIG_PATH": "test/migrations-cli/config.ts", "PAYLOAD_CONFIG_PATH": "test/postgres/config.ts", - "PAYLOAD_DATABASE": "postgres", + "PAYLOAD_DATABASE": "postgres" // "PAYLOAD_DROP_DATABASE": "true", }, + "name": "Migrate CLI - refresh", "outputCapture": "std", - }, - ] + "request": "launch", + "type": "node-terminal" + } + ], + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0" } diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..f936aa706 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,39 @@ +{ + "npm.packageManager": "pnpm", + "editor.defaultFormatter": "esbenp.prettier-vscode", + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + } + }, + "[typescriptreact]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + } + }, + "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": true + } + }, + "[json]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "[jsonc]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "editor.formatOnSaveMode": "file", + // All ESLint rules to 'warn' to differentate from TypeScript's 'error' level + "eslint.rules.customizations": [{ "rule": "*", "severity": "warn" }], + "typescript.tsdk": "node_modules/typescript/lib", + // Load .git-blame-ignore-revs file + "gitlens.advanced.blame.customArguments": ["--ignore-revs-file", ".git-blame-ignore-revs"] +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 088e1af90..495fe69a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,457 +1,402 @@ - - # [1.14.0](https://github.com/payloadcms/payload/compare/v1.13.4...v1.14.0) (2023-08-16) - ### Bug Fixes -* DatePicker showing only selected day by default ([#3169](https://github.com/payloadcms/payload/issues/3169)) ([edcb393](https://github.com/payloadcms/payload/commit/edcb3933cfb4532180c822135ea6a8be928e0fdc)) -* only allow redirects to /admin sub-routes ([c0f05a1](https://github.com/payloadcms/payload/commit/c0f05a1c38fb9c958de920fabb698b5ecfb661f0)) -* passes in height to resizeOptions upload option to allow height resize ([#3171](https://github.com/payloadcms/payload/issues/3171)) ([7963d04](https://github.com/payloadcms/payload/commit/7963d04a27888eb5a12d0ab37f2082cd33638abd)) -* WhereBuilder component does not accept all valid Where queries ([#3087](https://github.com/payloadcms/payload/issues/3087)) ([fdfdfc8](https://github.com/payloadcms/payload/commit/fdfdfc83f36a958971f8e4e4f9f5e51560cb26e0)) - +- DatePicker showing only selected day by default ([#3169](https://github.com/payloadcms/payload/issues/3169)) ([edcb393](https://github.com/payloadcms/payload/commit/edcb3933cfb4532180c822135ea6a8be928e0fdc)) +- only allow redirects to /admin sub-routes ([c0f05a1](https://github.com/payloadcms/payload/commit/c0f05a1c38fb9c958de920fabb698b5ecfb661f0)) +- passes in height to resizeOptions upload option to allow height resize ([#3171](https://github.com/payloadcms/payload/issues/3171)) ([7963d04](https://github.com/payloadcms/payload/commit/7963d04a27888eb5a12d0ab37f2082cd33638abd)) +- WhereBuilder component does not accept all valid Where queries ([#3087](https://github.com/payloadcms/payload/issues/3087)) ([fdfdfc8](https://github.com/payloadcms/payload/commit/fdfdfc83f36a958971f8e4e4f9f5e51560cb26e0)) ### Features -* add afterOperation hook ([#2697](https://github.com/payloadcms/payload/issues/2697)) ([33686c6](https://github.com/payloadcms/payload/commit/33686c6db8373a16d7f6b0192e0701bf15881aa4)) -* add support for hotkeys ([#1821](https://github.com/payloadcms/payload/issues/1821)) ([942cfec](https://github.com/payloadcms/payload/commit/942cfec286ff050e13417b037cca64b9d757d868)) -* Added Azerbaijani language file ([#3164](https://github.com/payloadcms/payload/issues/3164)) ([63e3063](https://github.com/payloadcms/payload/commit/63e3063b9ecc1afd62d7a287a798d41215008f2a)) -* allow async relationship filter options ([#2951](https://github.com/payloadcms/payload/issues/2951)) ([bad3638](https://github.com/payloadcms/payload/commit/bad363882c9d00d3c73547ca3329eba988e728ff)) -* Improve admin dashboard accessibility ([#3053](https://github.com/payloadcms/payload/issues/3053)) ([e03a8e6](https://github.com/payloadcms/payload/commit/e03a8e6b030e82a17e1cdae5b4032433cf9c75a4)) -* improve field ops ([#3172](https://github.com/payloadcms/payload/issues/3172)) ([d91b44c](https://github.com/payloadcms/payload/commit/d91b44cbb3fd526caca2a6f4bd30fd06ede3a5da)) -* make PAYLOAD_CONFIG_PATH optional ([#2839](https://github.com/payloadcms/payload/issues/2839)) ([5744de7](https://github.com/payloadcms/payload/commit/5744de7ec63e3f17df7e02a7cc827818a79dbbb8)) -* text alignment for richtext editor ([#2803](https://github.com/payloadcms/payload/issues/2803)) ([a0b13a5](https://github.com/payloadcms/payload/commit/a0b13a5b01fa0d7f4c4dffd1895bfe507e5c676d)) +- add afterOperation hook ([#2697](https://github.com/payloadcms/payload/issues/2697)) ([33686c6](https://github.com/payloadcms/payload/commit/33686c6db8373a16d7f6b0192e0701bf15881aa4)) +- add support for hotkeys ([#1821](https://github.com/payloadcms/payload/issues/1821)) ([942cfec](https://github.com/payloadcms/payload/commit/942cfec286ff050e13417b037cca64b9d757d868)) +- Added Azerbaijani language file ([#3164](https://github.com/payloadcms/payload/issues/3164)) ([63e3063](https://github.com/payloadcms/payload/commit/63e3063b9ecc1afd62d7a287a798d41215008f2a)) +- allow async relationship filter options ([#2951](https://github.com/payloadcms/payload/issues/2951)) ([bad3638](https://github.com/payloadcms/payload/commit/bad363882c9d00d3c73547ca3329eba988e728ff)) +- Improve admin dashboard accessibility ([#3053](https://github.com/payloadcms/payload/issues/3053)) ([e03a8e6](https://github.com/payloadcms/payload/commit/e03a8e6b030e82a17e1cdae5b4032433cf9c75a4)) +- improve field ops ([#3172](https://github.com/payloadcms/payload/issues/3172)) ([d91b44c](https://github.com/payloadcms/payload/commit/d91b44cbb3fd526caca2a6f4bd30fd06ede3a5da)) +- make PAYLOAD_CONFIG_PATH optional ([#2839](https://github.com/payloadcms/payload/issues/2839)) ([5744de7](https://github.com/payloadcms/payload/commit/5744de7ec63e3f17df7e02a7cc827818a79dbbb8)) +- text alignment for richtext editor ([#2803](https://github.com/payloadcms/payload/issues/2803)) ([a0b13a5](https://github.com/payloadcms/payload/commit/a0b13a5b01fa0d7f4c4dffd1895bfe507e5c676d)) ## [1.13.4](https://github.com/payloadcms/payload/compare/v1.13.3...v1.13.4) (2023-08-11) - ### Bug Fixes -* correctly passes block path inside buildFieldSchemaMap ([#3162](https://github.com/payloadcms/payload/issues/3162)) ([3c60abd](https://github.com/payloadcms/payload/commit/3c60abd61aaf24d49712c80bcbd0f1113c22b85a)) +- correctly passes block path inside buildFieldSchemaMap ([#3162](https://github.com/payloadcms/payload/issues/3162)) ([3c60abd](https://github.com/payloadcms/payload/commit/3c60abd61aaf24d49712c80bcbd0f1113c22b85a)) ## [1.13.3](https://github.com/payloadcms/payload/compare/v1.13.2...v1.13.3) (2023-08-11) - ### Bug Fixes -* unable to add arrays inside secondary named tabs ([#3158](https://github.com/payloadcms/payload/issues/3158)) ([cb04d4a](https://github.com/payloadcms/payload/commit/cb04d4a82a68a764330582b93882d422b32c2527)) +- unable to add arrays inside secondary named tabs ([#3158](https://github.com/payloadcms/payload/issues/3158)) ([cb04d4a](https://github.com/payloadcms/payload/commit/cb04d4a82a68a764330582b93882d422b32c2527)) ## [1.13.2](https://github.com/payloadcms/payload/compare/v1.13.1...v1.13.2) (2023-08-10) ## [1.13.1](https://github.com/payloadcms/payload/compare/v1.13.0...v1.13.1) (2023-08-08) - ### Bug Fixes -* updates addFieldRow and replaceFieldRow rowIndex insertion ([#3145](https://github.com/payloadcms/payload/issues/3145)) ([f5cf546](https://github.com/payloadcms/payload/commit/f5cf546e1918de66998d5f0e5410bfbc1f054567)) +- updates addFieldRow and replaceFieldRow rowIndex insertion ([#3145](https://github.com/payloadcms/payload/issues/3145)) ([f5cf546](https://github.com/payloadcms/payload/commit/f5cf546e1918de66998d5f0e5410bfbc1f054567)) # [1.13.0](https://github.com/payloadcms/payload/compare/v1.12.0...v1.13.0) (2023-08-08) - ### Bug Fixes -* `setPreference()` return type ([#3125](https://github.com/payloadcms/payload/issues/3125)) ([463d6bb](https://github.com/payloadcms/payload/commit/463d6bbec66e61523bae3869df88bd98e7617390)) -* absolute staticURL admin thumbnails ([#3135](https://github.com/payloadcms/payload/issues/3135)) ([1039f39](https://github.com/payloadcms/payload/commit/1039f39c09260537616b22228080466e8df6e981)) -* adding and replacing similarly shaped block configs ([#3140](https://github.com/payloadcms/payload/issues/3140)) ([8e188cf](https://github.com/payloadcms/payload/commit/8e188cfe61db808c94d726967affdadf2e5abb9f)) - +- `setPreference()` return type ([#3125](https://github.com/payloadcms/payload/issues/3125)) ([463d6bb](https://github.com/payloadcms/payload/commit/463d6bbec66e61523bae3869df88bd98e7617390)) +- absolute staticURL admin thumbnails ([#3135](https://github.com/payloadcms/payload/issues/3135)) ([1039f39](https://github.com/payloadcms/payload/commit/1039f39c09260537616b22228080466e8df6e981)) +- adding and replacing similarly shaped block configs ([#3140](https://github.com/payloadcms/payload/issues/3140)) ([8e188cf](https://github.com/payloadcms/payload/commit/8e188cfe61db808c94d726967affdadf2e5abb9f)) ### Features -* default tab labels from name ([#3129](https://github.com/payloadcms/payload/issues/3129)) ([e8f0516](https://github.com/payloadcms/payload/commit/e8f05165eb3a28c00deb11931db01ad1f8c75c74)) -* radio and select fields are filterable by options ([#3136](https://github.com/payloadcms/payload/issues/3136)) ([b117e73](https://github.com/payloadcms/payload/commit/b117e7346434bfc8edbfa92f5db45f63c57bab08)) -* recursive saveToJWT field support ([#3130](https://github.com/payloadcms/payload/issues/3130)) ([c6e0908](https://github.com/payloadcms/payload/commit/c6e09080767dad2ab8128ba330b2b344bb25ac6f)) +- default tab labels from name ([#3129](https://github.com/payloadcms/payload/issues/3129)) ([e8f0516](https://github.com/payloadcms/payload/commit/e8f05165eb3a28c00deb11931db01ad1f8c75c74)) +- radio and select fields are filterable by options ([#3136](https://github.com/payloadcms/payload/issues/3136)) ([b117e73](https://github.com/payloadcms/payload/commit/b117e7346434bfc8edbfa92f5db45f63c57bab08)) +- recursive saveToJWT field support ([#3130](https://github.com/payloadcms/payload/issues/3130)) ([c6e0908](https://github.com/payloadcms/payload/commit/c6e09080767dad2ab8128ba330b2b344bb25ac6f)) # [1.12.0](https://github.com/payloadcms/payload/compare/v1.11.8...v1.12.0) (2023-08-04) - ### Bug Fixes -* excludes useAsTitle field from searchableFields in collection view ([#3105](https://github.com/payloadcms/payload/issues/3105)) ([8c4d251](https://github.com/payloadcms/payload/commit/8c4d2514b0f195e0059c6063346199785979c70c)) -* relationship field filter long titles ([#3113](https://github.com/payloadcms/payload/issues/3113)) ([da27a8a](https://github.com/payloadcms/payload/commit/da27a8aadbb103c5f6fe0ccc62c032876851b88f)) -* wrong links in verification and forgot password emails if serverURL not set ([#3010](https://github.com/payloadcms/payload/issues/3010)) ([6a189c6](https://github.com/payloadcms/payload/commit/6a189c6548b233aba64598af8804a56ec47e45f0)) - +- excludes useAsTitle field from searchableFields in collection view ([#3105](https://github.com/payloadcms/payload/issues/3105)) ([8c4d251](https://github.com/payloadcms/payload/commit/8c4d2514b0f195e0059c6063346199785979c70c)) +- relationship field filter long titles ([#3113](https://github.com/payloadcms/payload/issues/3113)) ([da27a8a](https://github.com/payloadcms/payload/commit/da27a8aadbb103c5f6fe0ccc62c032876851b88f)) +- wrong links in verification and forgot password emails if serverURL not set ([#3010](https://github.com/payloadcms/payload/issues/3010)) ([6a189c6](https://github.com/payloadcms/payload/commit/6a189c6548b233aba64598af8804a56ec47e45f0)) ### Features -* add support for sharp resize options ([#2844](https://github.com/payloadcms/payload/issues/2844)) ([144bb81](https://github.com/payloadcms/payload/commit/144bb81721814c19eb4957d4c8fcc845c73e2aa4)) -* allows for upload relationship drawer to be opened ([#3108](https://github.com/payloadcms/payload/issues/3108)) ([ea73e68](https://github.com/payloadcms/payload/commit/ea73e689ac46f2a7ba3b6c34e7a190944b5d5868)) -* option to pre-fill login credentials automatically ([#3021](https://github.com/payloadcms/payload/issues/3021)) ([c5756ed](https://github.com/payloadcms/payload/commit/c5756ed4a13b46bc73ae7b23309d6e9980fc81bf)) -* programmatic control over array and block rows inside the form ([#3110](https://github.com/payloadcms/payload/issues/3110)) ([a78c463](https://github.com/payloadcms/payload/commit/a78c4631b4aabb5b57448ab21ef98749b1cf1935)) -* set JWT token field name with saveToJWT ([#3126](https://github.com/payloadcms/payload/issues/3126)) ([356f174](https://github.com/payloadcms/payload/commit/356f174b9ff601facb0062d0b65db18803ef2aa2)) +- add support for sharp resize options ([#2844](https://github.com/payloadcms/payload/issues/2844)) ([144bb81](https://github.com/payloadcms/payload/commit/144bb81721814c19eb4957d4c8fcc845c73e2aa4)) +- allows for upload relationship drawer to be opened ([#3108](https://github.com/payloadcms/payload/issues/3108)) ([ea73e68](https://github.com/payloadcms/payload/commit/ea73e689ac46f2a7ba3b6c34e7a190944b5d5868)) +- option to pre-fill login credentials automatically ([#3021](https://github.com/payloadcms/payload/issues/3021)) ([c5756ed](https://github.com/payloadcms/payload/commit/c5756ed4a13b46bc73ae7b23309d6e9980fc81bf)) +- programmatic control over array and block rows inside the form ([#3110](https://github.com/payloadcms/payload/issues/3110)) ([a78c463](https://github.com/payloadcms/payload/commit/a78c4631b4aabb5b57448ab21ef98749b1cf1935)) +- set JWT token field name with saveToJWT ([#3126](https://github.com/payloadcms/payload/issues/3126)) ([356f174](https://github.com/payloadcms/payload/commit/356f174b9ff601facb0062d0b65db18803ef2aa2)) ## [1.11.8](https://github.com/payloadcms/payload/compare/v1.11.7...v1.11.8) (2023-07-31) ## [1.11.7](https://github.com/payloadcms/payload/compare/v1.11.6...v1.11.7) (2023-07-27) - ### Bug Fixes -* [#3062](https://github.com/payloadcms/payload/issues/3062) ([0280953](https://github.com/payloadcms/payload/commit/02809532b484d9018c6528cfbbbb43abfd55a540)) -* array row deletion ([#3062](https://github.com/payloadcms/payload/issues/3062)) ([cf9795b](https://github.com/payloadcms/payload/commit/cf9795b8d8b53c48335ff4c32c6c51b3de4f7bc9)) -* incorrect image rotation after being processed by sharp ([#3081](https://github.com/payloadcms/payload/issues/3081)) ([0a91950](https://github.com/payloadcms/payload/commit/0a91950f052ce40427801e6561a0f676354a2ca4)) - +- [#3062](https://github.com/payloadcms/payload/issues/3062) ([0280953](https://github.com/payloadcms/payload/commit/02809532b484d9018c6528cfbbbb43abfd55a540)) +- array row deletion ([#3062](https://github.com/payloadcms/payload/issues/3062)) ([cf9795b](https://github.com/payloadcms/payload/commit/cf9795b8d8b53c48335ff4c32c6c51b3de4f7bc9)) +- incorrect image rotation after being processed by sharp ([#3081](https://github.com/payloadcms/payload/issues/3081)) ([0a91950](https://github.com/payloadcms/payload/commit/0a91950f052ce40427801e6561a0f676354a2ca4)) ### Features -* ability to add context to payload's request object ([#2796](https://github.com/payloadcms/payload/issues/2796)) ([67ba131](https://github.com/payloadcms/payload/commit/67ba131cc61f3d3b30ef9ef7fc150344ca82da2f)) +- ability to add context to payload's request object ([#2796](https://github.com/payloadcms/payload/issues/2796)) ([67ba131](https://github.com/payloadcms/payload/commit/67ba131cc61f3d3b30ef9ef7fc150344ca82da2f)) ## [1.11.6](https://github.com/payloadcms/payload/compare/v1.11.5...v1.11.6) (2023-07-25) - ### Bug Fixes -* **collections:admin:** Enable adminThumbnail fn execution on all types ([2c74e93](https://github.com/payloadcms/payload/commit/2c74e9396a216a033e2bacdf189b7f28a0f97505)) -* threads hasMaxRows into ArrayAction components within blocks and arrays ([#3066](https://github.com/payloadcms/payload/issues/3066)) ([d43c83d](https://github.com/payloadcms/payload/commit/d43c83dad1bab5b05f4fcbae7d41de369905797c)) +- **collections:admin:** Enable adminThumbnail fn execution on all types ([2c74e93](https://github.com/payloadcms/payload/commit/2c74e9396a216a033e2bacdf189b7f28a0f97505)) +- threads hasMaxRows into ArrayAction components within blocks and arrays ([#3066](https://github.com/payloadcms/payload/issues/3066)) ([d43c83d](https://github.com/payloadcms/payload/commit/d43c83dad1bab5b05f4fcbae7d41de369905797c)) ## [1.11.5](https://github.com/payloadcms/payload/compare/v1.11.4...v1.11.5) (2023-07-25) - ### Bug Fixes -* admin route not mounting on production serve ([#3071](https://github.com/payloadcms/payload/issues/3071)) ([e718668](https://github.com/payloadcms/payload/commit/e71866856fffefcfb61dd3d29135cccb66939a62)) +- admin route not mounting on production serve ([#3071](https://github.com/payloadcms/payload/issues/3071)) ([e718668](https://github.com/payloadcms/payload/commit/e71866856fffefcfb61dd3d29135cccb66939a62)) ## [1.11.4](https://github.com/payloadcms/payload/compare/v1.11.3...v1.11.4) (2023-07-25) - ### Bug Fixes -* if arrayFieldType rows are undefined, page would crash ([#3049](https://github.com/payloadcms/payload/issues/3049)) ([08377cc](https://github.com/payloadcms/payload/commit/08377cc5a7ea9d02350177e2e1d69390ee97af78)) - +- if arrayFieldType rows are undefined, page would crash ([#3049](https://github.com/payloadcms/payload/issues/3049)) ([08377cc](https://github.com/payloadcms/payload/commit/08377cc5a7ea9d02350177e2e1d69390ee97af78)) ### Features -* bump mongoose and mongoose-paginate versions ([#3025](https://github.com/payloadcms/payload/issues/3025)) ([41d3eee](https://github.com/payloadcms/payload/commit/41d3eee35f3855798a5c3372f8ad7c742a7810f7)) -* improve keyboard focus styles ([#3011](https://github.com/payloadcms/payload/issues/3011)) ([080e619](https://github.com/payloadcms/payload/commit/080e6195ef39ec858fbb115e8f554a8dfc436438)) -* solidifies bundler adapter pattern ([#3044](https://github.com/payloadcms/payload/issues/3044)) ([641c765](https://github.com/payloadcms/payload/commit/641c765fb921e162c98f09218929348037dd0f88)) +- bump mongoose and mongoose-paginate versions ([#3025](https://github.com/payloadcms/payload/issues/3025)) ([41d3eee](https://github.com/payloadcms/payload/commit/41d3eee35f3855798a5c3372f8ad7c742a7810f7)) +- improve keyboard focus styles ([#3011](https://github.com/payloadcms/payload/issues/3011)) ([080e619](https://github.com/payloadcms/payload/commit/080e6195ef39ec858fbb115e8f554a8dfc436438)) +- solidifies bundler adapter pattern ([#3044](https://github.com/payloadcms/payload/issues/3044)) ([641c765](https://github.com/payloadcms/payload/commit/641c765fb921e162c98f09218929348037dd0f88)) ## [1.11.3](https://github.com/payloadcms/payload/compare/v1.11.2...v1.11.3) (2023-07-19) - ### Bug Fixes -* adds backdrop blur to button ([#3006](https://github.com/payloadcms/payload/issues/3006)) ([4233426](https://github.com/payloadcms/payload/commit/42334263bbc6219be92c5728f1a4ac6c8d2d1306)) -* rich text link element not validating on create ([#3014](https://github.com/payloadcms/payload/issues/3014)) ([60fca40](https://github.com/payloadcms/payload/commit/60fca40780d4ddd8e684a455de55c566ec91e223)) - +- adds backdrop blur to button ([#3006](https://github.com/payloadcms/payload/issues/3006)) ([4233426](https://github.com/payloadcms/payload/commit/42334263bbc6219be92c5728f1a4ac6c8d2d1306)) +- rich text link element not validating on create ([#3014](https://github.com/payloadcms/payload/issues/3014)) ([60fca40](https://github.com/payloadcms/payload/commit/60fca40780d4ddd8e684a455de55c566ec91e223)) ### Features -* auto-login in config capability ([#3009](https://github.com/payloadcms/payload/issues/3009)) ([733fc0b](https://github.com/payloadcms/payload/commit/733fc0b2d0cf0f2d58c8a28e84776f883774b0e0)) -* returns queried user alongside refreshed token ([#2813](https://github.com/payloadcms/payload/issues/2813)) ([2fc03f1](https://github.com/payloadcms/payload/commit/2fc03f196e4e5fa0ad3369ec976c0b6889ebda88)) -* support logger destination ([#2896](https://github.com/payloadcms/payload/issues/2896)) ([cd0bf68](https://github.com/payloadcms/payload/commit/cd0bf68a6150b1adbdb9ee318ac0a06c4476aa4d)) +- auto-login in config capability ([#3009](https://github.com/payloadcms/payload/issues/3009)) ([733fc0b](https://github.com/payloadcms/payload/commit/733fc0b2d0cf0f2d58c8a28e84776f883774b0e0)) +- returns queried user alongside refreshed token ([#2813](https://github.com/payloadcms/payload/issues/2813)) ([2fc03f1](https://github.com/payloadcms/payload/commit/2fc03f196e4e5fa0ad3369ec976c0b6889ebda88)) +- support logger destination ([#2896](https://github.com/payloadcms/payload/issues/2896)) ([cd0bf68](https://github.com/payloadcms/payload/commit/cd0bf68a6150b1adbdb9ee318ac0a06c4476aa4d)) ## [1.11.2](https://github.com/payloadcms/payload/compare/v1.11.1...v1.11.2) (2023-07-14) - ### Features -* adds array, collapsible, tab and group error states ([4925f90](https://github.com/payloadcms/payload/commit/4925f90b5f5c8fb8092bf4e8d88d5e0c1846b094)) +- adds array, collapsible, tab and group error states ([4925f90](https://github.com/payloadcms/payload/commit/4925f90b5f5c8fb8092bf4e8d88d5e0c1846b094)) ## [1.11.1](https://github.com/payloadcms/payload/compare/v1.11.0...v1.11.1) (2023-07-11) - ### Bug Fixes -* [#2980](https://github.com/payloadcms/payload/issues/2980), locale=all was not iterating through arrays / blocks ([d6bfba7](https://github.com/payloadcms/payload/commit/d6bfba72a6b1a84bc5bb9dd14c7ce31d7afcbc1c)) -* anchor Button component respect margins ([#2648](https://github.com/payloadcms/payload/issues/2648)) ([1877d22](https://github.com/payloadcms/payload/commit/1877d2247c89ca5c8e1f0e1f989154d54768fed8)) +- [#2980](https://github.com/payloadcms/payload/issues/2980), locale=all was not iterating through arrays / blocks ([d6bfba7](https://github.com/payloadcms/payload/commit/d6bfba72a6b1a84bc5bb9dd14c7ce31d7afcbc1c)) +- anchor Button component respect margins ([#2648](https://github.com/payloadcms/payload/issues/2648)) ([1877d22](https://github.com/payloadcms/payload/commit/1877d2247c89ca5c8e1f0e1f989154d54768fed8)) # [1.11.0](https://github.com/payloadcms/payload/compare/v1.10.5...v1.11.0) (2023-07-05) - ### Bug Fixes -* ensures fields within blocks respect field level access control ([#2969](https://github.com/payloadcms/payload/issues/2969)) ([5b79067](https://github.com/payloadcms/payload/commit/5b79067cc14874abbd1e1a5b6e619d41571b187f)) -* ensures rows always have id's ([#2968](https://github.com/payloadcms/payload/issues/2968)) ([04851d0](https://github.com/payloadcms/payload/commit/04851d0dc99e4a3df0a1ac642e9a4b9a3c06d8a1)) -* GraphQL type for number field ([#2954](https://github.com/payloadcms/payload/issues/2954)) ([29d8bf0](https://github.com/payloadcms/payload/commit/29d8bf0927038d2305218e5a6b811e0c4039d617)) -* nested richtext bug and test ([#2966](https://github.com/payloadcms/payload/issues/2966)) ([801f609](https://github.com/payloadcms/payload/commit/801f60939b1bb4e33fbabe1f9a3c4a04a47912db)) -* properly threads custom react-select props through relationship field ([#2973](https://github.com/payloadcms/payload/issues/2973)) ([79393e8](https://github.com/payloadcms/payload/commit/79393e8cf0b79b31fa711536e0bc22b1a251468a)) - +- ensures fields within blocks respect field level access control ([#2969](https://github.com/payloadcms/payload/issues/2969)) ([5b79067](https://github.com/payloadcms/payload/commit/5b79067cc14874abbd1e1a5b6e619d41571b187f)) +- ensures rows always have id's ([#2968](https://github.com/payloadcms/payload/issues/2968)) ([04851d0](https://github.com/payloadcms/payload/commit/04851d0dc99e4a3df0a1ac642e9a4b9a3c06d8a1)) +- GraphQL type for number field ([#2954](https://github.com/payloadcms/payload/issues/2954)) ([29d8bf0](https://github.com/payloadcms/payload/commit/29d8bf0927038d2305218e5a6b811e0c4039d617)) +- nested richtext bug and test ([#2966](https://github.com/payloadcms/payload/issues/2966)) ([801f609](https://github.com/payloadcms/payload/commit/801f60939b1bb4e33fbabe1f9a3c4a04a47912db)) +- properly threads custom react-select props through relationship field ([#2973](https://github.com/payloadcms/payload/issues/2973)) ([79393e8](https://github.com/payloadcms/payload/commit/79393e8cf0b79b31fa711536e0bc22b1a251468a)) ### Features -* improve typing of ExtendableError and APIError ([#2864](https://github.com/payloadcms/payload/issues/2864)) ([7c47e4b](https://github.com/payloadcms/payload/commit/7c47e4b0d3c63f6f7800daaf424935d6067ffcc4)) -* narrow endpoint.method type ([#1880](https://github.com/payloadcms/payload/issues/1880)) ([b734a1c](https://github.com/payloadcms/payload/commit/b734a1c422d200cad1085b7e92f8540df4238e32)) +- improve typing of ExtendableError and APIError ([#2864](https://github.com/payloadcms/payload/issues/2864)) ([7c47e4b](https://github.com/payloadcms/payload/commit/7c47e4b0d3c63f6f7800daaf424935d6067ffcc4)) +- narrow endpoint.method type ([#1880](https://github.com/payloadcms/payload/issues/1880)) ([b734a1c](https://github.com/payloadcms/payload/commit/b734a1c422d200cad1085b7e92f8540df4238e32)) ## [1.10.5](https://github.com/payloadcms/payload/compare/v1.10.4...v1.10.5) (2023-06-30) - ### Bug Fixes -* fields in drawer cannot be edited ([#2949](https://github.com/payloadcms/payload/issues/2949)) ([0c2e41c](https://github.com/payloadcms/payload/commit/0c2e41c4bef9333c47a9b1db0de807696b3f3872)), closes [#2945](https://github.com/payloadcms/payload/issues/2945) -* improve versions test suite ([#2941](https://github.com/payloadcms/payload/issues/2941)) ([1d4df99](https://github.com/payloadcms/payload/commit/1d4df99ea78c5f682074ae824dcd8dea18b774e0)) -* incorrect graphql type generation ([#2898](https://github.com/payloadcms/payload/issues/2898)) ([b36deb4](https://github.com/payloadcms/payload/commit/b36deb4640cad4f494a12ab74b4e4d9a918cd94b)) +- fields in drawer cannot be edited ([#2949](https://github.com/payloadcms/payload/issues/2949)) ([0c2e41c](https://github.com/payloadcms/payload/commit/0c2e41c4bef9333c47a9b1db0de807696b3f3872)), closes [#2945](https://github.com/payloadcms/payload/issues/2945) +- improve versions test suite ([#2941](https://github.com/payloadcms/payload/issues/2941)) ([1d4df99](https://github.com/payloadcms/payload/commit/1d4df99ea78c5f682074ae824dcd8dea18b774e0)) +- incorrect graphql type generation ([#2898](https://github.com/payloadcms/payload/issues/2898)) ([b36deb4](https://github.com/payloadcms/payload/commit/b36deb4640cad4f494a12ab74b4e4d9a918cd94b)) ## [1.10.4](https://github.com/payloadcms/payload/compare/v1.10.3...v1.10.4) (2023-06-30) - ### Features -* add locale to displayed API URL ([b22d157](https://github.com/payloadcms/payload/commit/b22d157bd2f1c1a857e2d42bdc5b893549e3db9e)) +- add locale to displayed API URL ([b22d157](https://github.com/payloadcms/payload/commit/b22d157bd2f1c1a857e2d42bdc5b893549e3db9e)) ## [1.10.3](https://github.com/payloadcms/payload/compare/v1.10.2...v1.10.3) (2023-06-30) - ### Bug Fixes -* [#2937](https://github.com/payloadcms/payload/issues/2937), depth not being respected in graphql rich text fields ([f84b432](https://github.com/payloadcms/payload/commit/f84b4323e2fce57e2e14b181e486ed72cc09ded5)) -* shows updatedAt date when selecting a version to compare from dropdown ([3c9dab3](https://github.com/payloadcms/payload/commit/3c9dab3b9d5302d8bdf5792f0384cd5aeeb13839)) +- [#2937](https://github.com/payloadcms/payload/issues/2937), depth not being respected in graphql rich text fields ([f84b432](https://github.com/payloadcms/payload/commit/f84b4323e2fce57e2e14b181e486ed72cc09ded5)) +- shows updatedAt date when selecting a version to compare from dropdown ([3c9dab3](https://github.com/payloadcms/payload/commit/3c9dab3b9d5302d8bdf5792f0384cd5aeeb13839)) ## [1.10.2](https://github.com/payloadcms/payload/compare/v1.10.1...v1.10.2) (2023-06-26) - ### Bug Fixes -* adjusts swc loader to only exclude non ts/tsx files - [#2888](https://github.com/payloadcms/payload/issues/2888) ([#2907](https://github.com/payloadcms/payload/issues/2907)) ([a2d9ef3](https://github.com/payloadcms/payload/commit/a2d9ef3ca618934df58102a7e02e86dbe0ed63da)) -* autosave on localized fields, adds test ([6893231](https://github.com/payloadcms/payload/commit/6893231f85f702189089a6d78d3f3af63aaa0d82)) -* broken export of entityToJSONSchema ([#2894](https://github.com/payloadcms/payload/issues/2894)) ([837dccc](https://github.com/payloadcms/payload/commit/837dcccefeffe7bb6e674713b4184c4eb92db8dc)) -* correctly scopes data variable within bulk update - [#2901](https://github.com/payloadcms/payload/issues/2901) ([#2904](https://github.com/payloadcms/payload/issues/2904)) ([f627277](https://github.com/payloadcms/payload/commit/f627277479e6a4a847e79f54c545712a7186abb9)) -* safely check for tempFilePath when updating media document ([#2899](https://github.com/payloadcms/payload/issues/2899)) ([8206c0f](https://github.com/payloadcms/payload/commit/8206c0fe8be78a5e0f7c8e64996d73d135b1fcc2)) +- adjusts swc loader to only exclude non ts/tsx files - [#2888](https://github.com/payloadcms/payload/issues/2888) ([#2907](https://github.com/payloadcms/payload/issues/2907)) ([a2d9ef3](https://github.com/payloadcms/payload/commit/a2d9ef3ca618934df58102a7e02e86dbe0ed63da)) +- autosave on localized fields, adds test ([6893231](https://github.com/payloadcms/payload/commit/6893231f85f702189089a6d78d3f3af63aaa0d82)) +- broken export of entityToJSONSchema ([#2894](https://github.com/payloadcms/payload/issues/2894)) ([837dccc](https://github.com/payloadcms/payload/commit/837dcccefeffe7bb6e674713b4184c4eb92db8dc)) +- correctly scopes data variable within bulk update - [#2901](https://github.com/payloadcms/payload/issues/2901) ([#2904](https://github.com/payloadcms/payload/issues/2904)) ([f627277](https://github.com/payloadcms/payload/commit/f627277479e6a4a847e79f54c545712a7186abb9)) +- safely check for tempFilePath when updating media document ([#2899](https://github.com/payloadcms/payload/issues/2899)) ([8206c0f](https://github.com/payloadcms/payload/commit/8206c0fe8be78a5e0f7c8e64996d73d135b1fcc2)) ## [1.10.1](https://github.com/payloadcms/payload/compare/v1.10.0...v1.10.1) (2023-06-22) - ### Bug Fixes -* conditional fields perf bug - [#2886](https://github.com/payloadcms/payload/issues/2886) ([#2890](https://github.com/payloadcms/payload/issues/2890)) ([b83d788](https://github.com/payloadcms/payload/commit/b83d788d3cfe12f87dcd63a9df20b939a6f4681e)) -* cutoff tooltips in relationship field ([#2873](https://github.com/payloadcms/payload/issues/2873)) ([09c6cad](https://github.com/payloadcms/payload/commit/09c6cad3e8462dc3d8b1b6424aafd336c1d7828c)) -* Relationship hasMany and filterOptions fails above 10 items ([#2891](https://github.com/payloadcms/payload/issues/2891)) ([8128de6](https://github.com/payloadcms/payload/commit/8128de64dff98fdbcf053faef9de3c3f9a733071)) +- conditional fields perf bug - [#2886](https://github.com/payloadcms/payload/issues/2886) ([#2890](https://github.com/payloadcms/payload/issues/2890)) ([b83d788](https://github.com/payloadcms/payload/commit/b83d788d3cfe12f87dcd63a9df20b939a6f4681e)) +- cutoff tooltips in relationship field ([#2873](https://github.com/payloadcms/payload/issues/2873)) ([09c6cad](https://github.com/payloadcms/payload/commit/09c6cad3e8462dc3d8b1b6424aafd336c1d7828c)) +- Relationship hasMany and filterOptions fails above 10 items ([#2891](https://github.com/payloadcms/payload/issues/2891)) ([8128de6](https://github.com/payloadcms/payload/commit/8128de64dff98fdbcf053faef9de3c3f9a733071)) # [1.10.0](https://github.com/payloadcms/payload/compare/v1.9.5...v1.10.0) (2023-06-20) - ### Bug Fixes -* [#2831](https://github.com/payloadcms/payload/issues/2831), persists payloadAPI through local operations that accept req ([85d2467](https://github.com/payloadcms/payload/commit/85d2467d73582a372ee34e3ce93403847a1f0689)) -* [#2842](https://github.com/payloadcms/payload/issues/2842), querying number custom ids with in ([116e9ff](https://github.com/payloadcms/payload/commit/116e9ffe81f44c4b40fa578b4a8fe4bb70fd110c)) -* default sort with near operator ([#2862](https://github.com/payloadcms/payload/issues/2862)) ([99f3809](https://github.com/payloadcms/payload/commit/99f38098dd4a386437c469becc975ca86c54601f)) -* deprecate min/max in exchange for minRows and maxRows for relationship field ([#2826](https://github.com/payloadcms/payload/issues/2826)) ([0d8d7f3](https://github.com/payloadcms/payload/commit/0d8d7f358d390184f6f888d77858b4a145e94214)) -* drawer close on backspace ([#2869](https://github.com/payloadcms/payload/issues/2869)) ([a110ba2](https://github.com/payloadcms/payload/commit/a110ba2dc09cd0824a9b1eb8e011604388277bd8)) -* drawer fields are read-only if opened from a hasMany relationship ([#2843](https://github.com/payloadcms/payload/issues/2843)) ([542b536](https://github.com/payloadcms/payload/commit/542b5362d3ec8741aff6b1672fab7d2250e7b854)) -* fields in relationship drawer not usable [#2815](https://github.com/payloadcms/payload/issues/2815) ([#2870](https://github.com/payloadcms/payload/issues/2870)) ([8626dc6](https://github.com/payloadcms/payload/commit/8626dc6b1a926143e7ba505f3edd924432168675)) -* mobile loading overlay width [#2866](https://github.com/payloadcms/payload/issues/2866) ([#2867](https://github.com/payloadcms/payload/issues/2867)) ([ba9d633](https://github.com/payloadcms/payload/commit/ba9d6336acc779cfec0db312c8e2da912ce58cd4)) -* near query sorting by distance and pagination ([#2861](https://github.com/payloadcms/payload/issues/2861)) ([1611896](https://github.com/payloadcms/payload/commit/16118960aa6d63f7a429f168ff4305f336b1b1e6)) -* relationship field query pagination ([#2871](https://github.com/payloadcms/payload/issues/2871)) ([ce84174](https://github.com/payloadcms/payload/commit/ce84174554d9d828cbaaaa9548e5defc0feb4e2b)) -* slow like queries with lots of records ([4dd703a](https://github.com/payloadcms/payload/commit/4dd703a6bff0ab7d06af234baa975553bd62f176)) - +- [#2831](https://github.com/payloadcms/payload/issues/2831), persists payloadAPI through local operations that accept req ([85d2467](https://github.com/payloadcms/payload/commit/85d2467d73582a372ee34e3ce93403847a1f0689)) +- [#2842](https://github.com/payloadcms/payload/issues/2842), querying number custom ids with in ([116e9ff](https://github.com/payloadcms/payload/commit/116e9ffe81f44c4b40fa578b4a8fe4bb70fd110c)) +- default sort with near operator ([#2862](https://github.com/payloadcms/payload/issues/2862)) ([99f3809](https://github.com/payloadcms/payload/commit/99f38098dd4a386437c469becc975ca86c54601f)) +- deprecate min/max in exchange for minRows and maxRows for relationship field ([#2826](https://github.com/payloadcms/payload/issues/2826)) ([0d8d7f3](https://github.com/payloadcms/payload/commit/0d8d7f358d390184f6f888d77858b4a145e94214)) +- drawer close on backspace ([#2869](https://github.com/payloadcms/payload/issues/2869)) ([a110ba2](https://github.com/payloadcms/payload/commit/a110ba2dc09cd0824a9b1eb8e011604388277bd8)) +- drawer fields are read-only if opened from a hasMany relationship ([#2843](https://github.com/payloadcms/payload/issues/2843)) ([542b536](https://github.com/payloadcms/payload/commit/542b5362d3ec8741aff6b1672fab7d2250e7b854)) +- fields in relationship drawer not usable [#2815](https://github.com/payloadcms/payload/issues/2815) ([#2870](https://github.com/payloadcms/payload/issues/2870)) ([8626dc6](https://github.com/payloadcms/payload/commit/8626dc6b1a926143e7ba505f3edd924432168675)) +- mobile loading overlay width [#2866](https://github.com/payloadcms/payload/issues/2866) ([#2867](https://github.com/payloadcms/payload/issues/2867)) ([ba9d633](https://github.com/payloadcms/payload/commit/ba9d6336acc779cfec0db312c8e2da912ce58cd4)) +- near query sorting by distance and pagination ([#2861](https://github.com/payloadcms/payload/issues/2861)) ([1611896](https://github.com/payloadcms/payload/commit/16118960aa6d63f7a429f168ff4305f336b1b1e6)) +- relationship field query pagination ([#2871](https://github.com/payloadcms/payload/issues/2871)) ([ce84174](https://github.com/payloadcms/payload/commit/ce84174554d9d828cbaaaa9548e5defc0feb4e2b)) +- slow like queries with lots of records ([4dd703a](https://github.com/payloadcms/payload/commit/4dd703a6bff0ab7d06af234baa975553bd62f176)) ### Features -* automatically redirect a user back to their originally requested URL after login ([#2838](https://github.com/payloadcms/payload/issues/2838)) ([e910688](https://github.com/payloadcms/payload/commit/e9106882f721d43bcc05a1690bda7754b450404e)) -* hasMany for number field ([#2517](https://github.com/payloadcms/payload/issues/2517)) ([8f086e3](https://github.com/payloadcms/payload/commit/8f086e315cb30be9d399fd3022c16952fb81cb2e)), closes [#2812](https://github.com/payloadcms/payload/issues/2812) [#2821](https://github.com/payloadcms/payload/issues/2821) [#2823](https://github.com/payloadcms/payload/issues/2823) [#2824](https://github.com/payloadcms/payload/issues/2824) [#2814](https://github.com/payloadcms/payload/issues/2814) [#2793](https://github.com/payloadcms/payload/issues/2793) [#2835](https://github.com/payloadcms/payload/issues/2835) -* optimizes conditional logic performance ([967f217](https://github.com/payloadcms/payload/commit/967f21734600de1fec8c1227a354ef5a417e54c5)) +- automatically redirect a user back to their originally requested URL after login ([#2838](https://github.com/payloadcms/payload/issues/2838)) ([e910688](https://github.com/payloadcms/payload/commit/e9106882f721d43bcc05a1690bda7754b450404e)) +- hasMany for number field ([#2517](https://github.com/payloadcms/payload/issues/2517)) ([8f086e3](https://github.com/payloadcms/payload/commit/8f086e315cb30be9d399fd3022c16952fb81cb2e)), closes [#2812](https://github.com/payloadcms/payload/issues/2812) [#2821](https://github.com/payloadcms/payload/issues/2821) [#2823](https://github.com/payloadcms/payload/issues/2823) [#2824](https://github.com/payloadcms/payload/issues/2824) [#2814](https://github.com/payloadcms/payload/issues/2814) [#2793](https://github.com/payloadcms/payload/issues/2793) [#2835](https://github.com/payloadcms/payload/issues/2835) +- optimizes conditional logic performance ([967f217](https://github.com/payloadcms/payload/commit/967f21734600de1fec8c1227a354ef5a417e54c5)) ## [1.9.5](https://github.com/payloadcms/payload/compare/v1.9.4...v1.9.5) (2023-06-16) ## [1.9.4](https://github.com/payloadcms/payload/compare/v1.9.3...v1.9.4) (2023-06-16) - ### Bug Fixes -* incorrectly return totalDocs=1 instead of the correct count when pagination=false ([2e73938](https://github.com/payloadcms/payload/commit/2e7393853447d2da41ddef79f73e9026719a674b)) +- incorrectly return totalDocs=1 instead of the correct count when pagination=false ([2e73938](https://github.com/payloadcms/payload/commit/2e7393853447d2da41ddef79f73e9026719a674b)) ## [1.9.3](https://github.com/payloadcms/payload/compare/v1.9.2...v1.9.3) (2023-06-16) - ### Bug Fixes -* adds custom property to ui field in joi validation ([#2835](https://github.com/payloadcms/payload/issues/2835)) ([56d7745](https://github.com/payloadcms/payload/commit/56d7745139e31c5d42c5191477f409f12589a952)) -* ensures relations to object ids can be queried on ([c3d6e1b](https://github.com/payloadcms/payload/commit/c3d6e1b490a69f0aadb00e54e46a8774732e6658)) +- adds custom property to ui field in joi validation ([#2835](https://github.com/payloadcms/payload/issues/2835)) ([56d7745](https://github.com/payloadcms/payload/commit/56d7745139e31c5d42c5191477f409f12589a952)) +- ensures relations to object ids can be queried on ([c3d6e1b](https://github.com/payloadcms/payload/commit/c3d6e1b490a69f0aadb00e54e46a8774732e6658)) ## [1.9.2](https://github.com/payloadcms/payload/compare/v1.9.1...v1.9.2) (2023-06-14) - ### Bug Fixes -* [#2821](https://github.com/payloadcms/payload/issues/2821) i18n ui field label ([#2823](https://github.com/payloadcms/payload/issues/2823)) ([63cd7fb](https://github.com/payloadcms/payload/commit/63cd7fbd0c91bbf5120e95fd33388a38e593b341)) -* adds missing dark-mode styles for version differences view ([#2812](https://github.com/payloadcms/payload/issues/2812)) ([346a48f](https://github.com/payloadcms/payload/commit/346a48f871e09a3d5e25b7ff9e45689a104b0f9f)) -* sanitize reset password result - [#2805](https://github.com/payloadcms/payload/issues/2805) ([#2808](https://github.com/payloadcms/payload/issues/2808)) ([46a5f41](https://github.com/payloadcms/payload/commit/46a5f417217313b049f4b412abb3319634f27262)) -* user can be created without having to specify an email - [#2801](https://github.com/payloadcms/payload/issues/2801) ([abe3852](https://github.com/payloadcms/payload/commit/abe38520aaaefdfaea4c47130eea04a42a82627b)) +- [#2821](https://github.com/payloadcms/payload/issues/2821) i18n ui field label ([#2823](https://github.com/payloadcms/payload/issues/2823)) ([63cd7fb](https://github.com/payloadcms/payload/commit/63cd7fbd0c91bbf5120e95fd33388a38e593b341)) +- adds missing dark-mode styles for version differences view ([#2812](https://github.com/payloadcms/payload/issues/2812)) ([346a48f](https://github.com/payloadcms/payload/commit/346a48f871e09a3d5e25b7ff9e45689a104b0f9f)) +- sanitize reset password result - [#2805](https://github.com/payloadcms/payload/issues/2805) ([#2808](https://github.com/payloadcms/payload/issues/2808)) ([46a5f41](https://github.com/payloadcms/payload/commit/46a5f417217313b049f4b412abb3319634f27262)) +- user can be created without having to specify an email - [#2801](https://github.com/payloadcms/payload/issues/2801) ([abe3852](https://github.com/payloadcms/payload/commit/abe38520aaaefdfaea4c47130eea04a42a82627b)) ## [1.9.1](https://github.com/payloadcms/payload/compare/v1.9.0...v1.9.1) (2023-06-09) - ### Features -* adds option to customize filename on upload ([596eea1](https://github.com/payloadcms/payload/commit/596eea1f0a42628464e5269c496360b808c35f97)) -* collection list view custom components: BeforeList, BeforeListTable, AfterListTable, AfterList ([#2792](https://github.com/payloadcms/payload/issues/2792)) ([38e962f](https://github.com/payloadcms/payload/commit/38e962f2cbcaf9eaa72276969289efdbf670c7c7)) +- adds option to customize filename on upload ([596eea1](https://github.com/payloadcms/payload/commit/596eea1f0a42628464e5269c496360b808c35f97)) +- collection list view custom components: BeforeList, BeforeListTable, AfterListTable, AfterList ([#2792](https://github.com/payloadcms/payload/issues/2792)) ([38e962f](https://github.com/payloadcms/payload/commit/38e962f2cbcaf9eaa72276969289efdbf670c7c7)) # [1.9.0](https://github.com/payloadcms/payload/compare/v1.8.6...v1.9.0) (2023-06-07) - ### Features -* custom type interfaces ([#2709](https://github.com/payloadcms/payload/issues/2709)) ([8458a98](https://github.com/payloadcms/payload/commit/8458a98eff0eedf1abfd9ec065a084955a9b8149)) +- custom type interfaces ([#2709](https://github.com/payloadcms/payload/issues/2709)) ([8458a98](https://github.com/payloadcms/payload/commit/8458a98eff0eedf1abfd9ec065a084955a9b8149)) ## [1.8.6](https://github.com/payloadcms/payload/compare/v1.8.5...v1.8.6) (2023-06-07) - ### Bug Fixes -* [#2711](https://github.com/payloadcms/payload/issues/2711) index sortable field global versions fields ([#2775](https://github.com/payloadcms/payload/issues/2775)) ([576af01](https://github.com/payloadcms/payload/commit/576af01b6f81d24621d522e8d8b9c496eafa6df0)) -* [#2767](https://github.com/payloadcms/payload/issues/2767) bulk operations missing locales in admin requests ([e30871a](https://github.com/payloadcms/payload/commit/e30871a96ff25f12401a3cc3bc5e12c064eeff3f)) -* [#2771](https://github.com/payloadcms/payload/issues/2771) relationship field not querying all collections ([#2774](https://github.com/payloadcms/payload/issues/2774)) ([8b767a1](https://github.com/payloadcms/payload/commit/8b767a166aa16659d8880cc68da546251725b20b)) -* adjusts activation constraint of draggable nodes ([#2773](https://github.com/payloadcms/payload/issues/2773)) ([863be3d](https://github.com/payloadcms/payload/commit/863be3d852af6c6a76021695f895badf23e776ae)) -* flattens relationships in the update operation for globals [#2766](https://github.com/payloadcms/payload/issues/2766) ([#2776](https://github.com/payloadcms/payload/issues/2776)) ([3677cf6](https://github.com/payloadcms/payload/commit/3677cf688d0e456c42068b4eab0086e64407d938)) -* improperly typing optional arrays with required fields as required ([f1fc305](https://github.com/payloadcms/payload/commit/f1fc305ac443ecb247622bc89067b129e96146fc)) -* read-only Auth fields ([#2781](https://github.com/payloadcms/payload/issues/2781)) ([3c72f33](https://github.com/payloadcms/payload/commit/3c72f3303c57e88256266c343225157e0b081bba)) -* read-only Auth fields ([#2781](https://github.com/payloadcms/payload/issues/2781)) ([60f5522](https://github.com/payloadcms/payload/commit/60f5522e67acb353e6d5ce05f0012241c192d4b4)) -* recursiveNestedPaths not merging existing fields when hoisting row/collapsible fields ([#2769](https://github.com/payloadcms/payload/issues/2769)) ([536d701](https://github.com/payloadcms/payload/commit/536d7017eebd5a8e14b2936c55a7fccc90d3f530)) +- [#2711](https://github.com/payloadcms/payload/issues/2711) index sortable field global versions fields ([#2775](https://github.com/payloadcms/payload/issues/2775)) ([576af01](https://github.com/payloadcms/payload/commit/576af01b6f81d24621d522e8d8b9c496eafa6df0)) +- [#2767](https://github.com/payloadcms/payload/issues/2767) bulk operations missing locales in admin requests ([e30871a](https://github.com/payloadcms/payload/commit/e30871a96ff25f12401a3cc3bc5e12c064eeff3f)) +- [#2771](https://github.com/payloadcms/payload/issues/2771) relationship field not querying all collections ([#2774](https://github.com/payloadcms/payload/issues/2774)) ([8b767a1](https://github.com/payloadcms/payload/commit/8b767a166aa16659d8880cc68da546251725b20b)) +- adjusts activation constraint of draggable nodes ([#2773](https://github.com/payloadcms/payload/issues/2773)) ([863be3d](https://github.com/payloadcms/payload/commit/863be3d852af6c6a76021695f895badf23e776ae)) +- flattens relationships in the update operation for globals [#2766](https://github.com/payloadcms/payload/issues/2766) ([#2776](https://github.com/payloadcms/payload/issues/2776)) ([3677cf6](https://github.com/payloadcms/payload/commit/3677cf688d0e456c42068b4eab0086e64407d938)) +- improperly typing optional arrays with required fields as required ([f1fc305](https://github.com/payloadcms/payload/commit/f1fc305ac443ecb247622bc89067b129e96146fc)) +- read-only Auth fields ([#2781](https://github.com/payloadcms/payload/issues/2781)) ([3c72f33](https://github.com/payloadcms/payload/commit/3c72f3303c57e88256266c343225157e0b081bba)) +- read-only Auth fields ([#2781](https://github.com/payloadcms/payload/issues/2781)) ([60f5522](https://github.com/payloadcms/payload/commit/60f5522e67acb353e6d5ce05f0012241c192d4b4)) +- recursiveNestedPaths not merging existing fields when hoisting row/collapsible fields ([#2769](https://github.com/payloadcms/payload/issues/2769)) ([536d701](https://github.com/payloadcms/payload/commit/536d7017eebd5a8e14b2936c55a7fccc90d3f530)) ## [1.8.5](https://github.com/payloadcms/payload/compare/v1.8.4...v1.8.5) (2023-06-03) - ### Features -* allows objectid through relationship validation ([42afa6b](https://github.com/payloadcms/payload/commit/42afa6b48aa924fa0dfc9defadf08ddb029da6c1)) +- allows objectid through relationship validation ([42afa6b](https://github.com/payloadcms/payload/commit/42afa6b48aa924fa0dfc9defadf08ddb029da6c1)) ## [1.8.4](https://github.com/payloadcms/payload/compare/v1.8.3...v1.8.4) (2023-06-02) - ### Features -* Add Bulgarian translation ([#2753](https://github.com/payloadcms/payload/issues/2753)) ([51108c0](https://github.com/payloadcms/payload/commit/51108c02ea346fd41c1b94ef7c339feec8383dd1)) - +- Add Bulgarian translation ([#2753](https://github.com/payloadcms/payload/issues/2753)) ([51108c0](https://github.com/payloadcms/payload/commit/51108c02ea346fd41c1b94ef7c339feec8383dd1)) ### Bug Fixes -* group row hoisting ([#2683](https://github.com/payloadcms/payload/issues/2683)) ([1626e17](https://github.com/payloadcms/payload/commit/1626e173b7eced83c59e8eb4f70b0bb68fdb0e7a)) -* graphql where types on rows and collapsible's ([#2758](https://github.com/payloadcms/payload/issues/2758)) ([f978299](https://github.com/payloadcms/payload/commit/f978299868bf352e147070afdf556bf1153bac56)) -* RichText link custom fields ([#2756](https://github.com/payloadcms/payload/issues/2756)) ([23be263](https://github.com/payloadcms/payload/commit/23be263dd2e75dca448019b1c66d7f6dd3558b37)) -* adds timestamps to global schemas ([#2738](https://github.com/payloadcms/payload/issues/2738)) ([0986282](https://github.com/payloadcms/payload/commit/0986282f13d8a3b5596c4a241b4da35e6fac6aa1)) -* adjusts code field joi schema to allow editorOptions ([ed136fb](https://github.com/payloadcms/payload/commit/ed136fbc5146889cd30c641d4947da58b66dfb2f)) -* fix locale popup overflow ([#2737](https://github.com/payloadcms/payload/issues/2737)) ([8ee9724](https://github.com/payloadcms/payload/commit/8ee9724277d419de78b27a8ffa22f3a599361251)) -* fix tests by hard-coding the URL in the logger ([2697974](https://github.com/payloadcms/payload/commit/2697974694112440bf1737c4ce535ba77bf4b194)) -* mongoose connection ([#2754](https://github.com/payloadcms/payload/issues/2754)) ([69b97bb](https://github.com/payloadcms/payload/commit/69b97bbc590c62fffbcd03a42f0e9737e3f7ca01)) -* removes payload dependency inception ([#2717](https://github.com/payloadcms/payload/issues/2717)) ([6125b66](https://github.com/payloadcms/payload/commit/6125b66286e5315725ca0ae365c81a04c1c1a54c)) -* searches on correct useAsTitle field in polymorphic list drawers [#2710](https://github.com/payloadcms/payload/issues/2710) ([9ec2a40](https://github.com/payloadcms/payload/commit/9ec2a40274ea9b3a32e43cb992df3897baf62e63)) -* typing of sendMail function ([e3ff4c4](https://github.com/payloadcms/payload/commit/e3ff4c46cbecf731c9a3c688682bcb33012cb234)) -* corrects relationship field schema from pr [#2696](https://github.com/payloadcms/payload/issues/2696) ([#2714](https://github.com/payloadcms/payload/issues/2714)) ([8285bac](https://github.com/payloadcms/payload/commit/8285bac2f5eb443b6af160b21726edf3f828a52f)) - +- group row hoisting ([#2683](https://github.com/payloadcms/payload/issues/2683)) ([1626e17](https://github.com/payloadcms/payload/commit/1626e173b7eced83c59e8eb4f70b0bb68fdb0e7a)) +- graphql where types on rows and collapsible's ([#2758](https://github.com/payloadcms/payload/issues/2758)) ([f978299](https://github.com/payloadcms/payload/commit/f978299868bf352e147070afdf556bf1153bac56)) +- RichText link custom fields ([#2756](https://github.com/payloadcms/payload/issues/2756)) ([23be263](https://github.com/payloadcms/payload/commit/23be263dd2e75dca448019b1c66d7f6dd3558b37)) +- adds timestamps to global schemas ([#2738](https://github.com/payloadcms/payload/issues/2738)) ([0986282](https://github.com/payloadcms/payload/commit/0986282f13d8a3b5596c4a241b4da35e6fac6aa1)) +- adjusts code field joi schema to allow editorOptions ([ed136fb](https://github.com/payloadcms/payload/commit/ed136fbc5146889cd30c641d4947da58b66dfb2f)) +- fix locale popup overflow ([#2737](https://github.com/payloadcms/payload/issues/2737)) ([8ee9724](https://github.com/payloadcms/payload/commit/8ee9724277d419de78b27a8ffa22f3a599361251)) +- fix tests by hard-coding the URL in the logger ([2697974](https://github.com/payloadcms/payload/commit/2697974694112440bf1737c4ce535ba77bf4b194)) +- mongoose connection ([#2754](https://github.com/payloadcms/payload/issues/2754)) ([69b97bb](https://github.com/payloadcms/payload/commit/69b97bbc590c62fffbcd03a42f0e9737e3f7ca01)) +- removes payload dependency inception ([#2717](https://github.com/payloadcms/payload/issues/2717)) ([6125b66](https://github.com/payloadcms/payload/commit/6125b66286e5315725ca0ae365c81a04c1c1a54c)) +- searches on correct useAsTitle field in polymorphic list drawers [#2710](https://github.com/payloadcms/payload/issues/2710) ([9ec2a40](https://github.com/payloadcms/payload/commit/9ec2a40274ea9b3a32e43cb992df3897baf62e63)) +- typing of sendMail function ([e3ff4c4](https://github.com/payloadcms/payload/commit/e3ff4c46cbecf731c9a3c688682bcb33012cb234)) +- corrects relationship field schema from pr [#2696](https://github.com/payloadcms/payload/issues/2696) ([#2714](https://github.com/payloadcms/payload/issues/2714)) ([8285bac](https://github.com/payloadcms/payload/commit/8285bac2f5eb443b6af160b21726edf3f828a52f)) ## [1.8.3](https://github.com/payloadcms/payload/compare/v1.8.3...v1.8.3) (2023-05-24) - ### Bug Fixes -* [#2662](https://github.com/payloadcms/payload/issues/2662), draft=true querying by id ([3b78ab0](https://github.com/payloadcms/payload/commit/3b78ab04c7a68e39afa9936ac692169ed2c8fb74)) -* [#2685](https://github.com/payloadcms/payload/issues/2685), graphql querying relationships with custom id ([9bb5470](https://github.com/payloadcms/payload/commit/9bb54703423b3f0fdb242a5e63f322d346323b06)) -* adds credentials to doc access request ([#2705](https://github.com/payloadcms/payload/issues/2705)) ([c716954](https://github.com/payloadcms/payload/commit/c716954e89b0aef976cbcbef9ece981ec9bab233)) -* prevents add new relationship modal from adding duplicative values to the parent doc [#2688](https://github.com/payloadcms/payload/issues/2688) ([a2a8ac9](https://github.com/payloadcms/payload/commit/a2a8ac9549bd67e6ab578772689684fd2bc64872)) -* unable to clear relationships or open relationship drawer on mobile [#2691](https://github.com/payloadcms/payload/issues/2691) [#2692](https://github.com/payloadcms/payload/issues/2692) ([782f8ca](https://github.com/payloadcms/payload/commit/782f8ca047178cadb4214702854a0e0cb2d9eaab)) +- [#2662](https://github.com/payloadcms/payload/issues/2662), draft=true querying by id ([3b78ab0](https://github.com/payloadcms/payload/commit/3b78ab04c7a68e39afa9936ac692169ed2c8fb74)) +- [#2685](https://github.com/payloadcms/payload/issues/2685), graphql querying relationships with custom id ([9bb5470](https://github.com/payloadcms/payload/commit/9bb54703423b3f0fdb242a5e63f322d346323b06)) +- adds credentials to doc access request ([#2705](https://github.com/payloadcms/payload/issues/2705)) ([c716954](https://github.com/payloadcms/payload/commit/c716954e89b0aef976cbcbef9ece981ec9bab233)) +- prevents add new relationship modal from adding duplicative values to the parent doc [#2688](https://github.com/payloadcms/payload/issues/2688) ([a2a8ac9](https://github.com/payloadcms/payload/commit/a2a8ac9549bd67e6ab578772689684fd2bc64872)) +- unable to clear relationships or open relationship drawer on mobile [#2691](https://github.com/payloadcms/payload/issues/2691) [#2692](https://github.com/payloadcms/payload/issues/2692) ([782f8ca](https://github.com/payloadcms/payload/commit/782f8ca047178cadb4214702854a0e0cb2d9eaab)) ## [1.8.2](https://github.com/payloadcms/payload/compare/v1.8.1...v1.8.2) (2023-05-10) - ### Bug Fixes -* react webpack alias ([1732bb8](https://github.com/payloadcms/payload/commit/1732bb877ca9688fc87cf44fbf63d05b6be23de2)) +- react webpack alias ([1732bb8](https://github.com/payloadcms/payload/commit/1732bb877ca9688fc87cf44fbf63d05b6be23de2)) ## [1.8.1](https://github.com/payloadcms/payload/compare/v1.8.0...v1.8.1) (2023-05-10) - ### Bug Fixes -* add dotenv.config() to test/dev.ts ([#2646](https://github.com/payloadcms/payload/issues/2646)) ([7963e75](https://github.com/payloadcms/payload/commit/7963e7540f4899c16a49b47cf5145f46ea0c71cf)) - +- add dotenv.config() to test/dev.ts ([#2646](https://github.com/payloadcms/payload/issues/2646)) ([7963e75](https://github.com/payloadcms/payload/commit/7963e7540f4899c16a49b47cf5145f46ea0c71cf)) ### Features -* allow users to manipulate images without needing to resize them ([#2574](https://github.com/payloadcms/payload/issues/2574)) ([8531687](https://github.com/payloadcms/payload/commit/85316879cd97933ed34588b0cee72798964de281)) -* export additional graphql types ([#2610](https://github.com/payloadcms/payload/issues/2610)) ([3f185cb](https://github.com/payloadcms/payload/commit/3f185cb18b9677654b92921267ffef408388d0d1)) +- allow users to manipulate images without needing to resize them ([#2574](https://github.com/payloadcms/payload/issues/2574)) ([8531687](https://github.com/payloadcms/payload/commit/85316879cd97933ed34588b0cee72798964de281)) +- export additional graphql types ([#2610](https://github.com/payloadcms/payload/issues/2610)) ([3f185cb](https://github.com/payloadcms/payload/commit/3f185cb18b9677654b92921267ffef408388d0d1)) # [1.8.0](https://github.com/payloadcms/payload/compare/v1.7.5...v1.8.0) (2023-05-09) - ### Bug Fixes -* correct casing on graphql type ([219f50b](https://github.com/payloadcms/payload/commit/219f50b0bc7a520655a5ae4f1d8b08fd04c8a3dd)) -* defaultValue missing from Upload field schema ([7b21eaf](https://github.com/payloadcms/payload/commit/7b21eaf12da64778568b45e56fa8d39e81f11c29)) -* ensures nested querying works when querying across collections ([09974fa](https://github.com/payloadcms/payload/commit/09974fa68677586c727943cc234311f87bf6da75)) -* query custom text id fields ([967f2ac](https://github.com/payloadcms/payload/commit/967f2ace0ea1a65570f69e85920f2f55626efde0)) -* removes deprecated queryHiddenFIelds from local API docs ([5f30dbb](https://github.com/payloadcms/payload/commit/5f30dbb1a5b7c7ab6752c114710f92c159319d3d)) -* removes queryHiddenFields from example Find operation ([fb4f822](https://github.com/payloadcms/payload/commit/fb4f822d34d0235a537f96515073e2662680412f)) -* resolve process/browser package in webpack config ([02f27f3](https://github.com/payloadcms/payload/commit/02f27f3de6fdaf5dd0023298fc671a8ae9a1b758)) -* Row groups in tabs vertical alignment ([#2593](https://github.com/payloadcms/payload/issues/2593)) ([54fac4a](https://github.com/payloadcms/payload/commit/54fac4a5d793b534e25600d2f9470c449f40df1d)) -* softens columns and filters pill colors ([#2642](https://github.com/payloadcms/payload/issues/2642)) ([9072096](https://github.com/payloadcms/payload/commit/90720964953d392d85982052b3a4843a5450681e)) -* webp upload formatting ([ccd6ca2](https://github.com/payloadcms/payload/commit/ccd6ca298e69faf04709535df3fcb18eb3d40f1b)) - +- correct casing on graphql type ([219f50b](https://github.com/payloadcms/payload/commit/219f50b0bc7a520655a5ae4f1d8b08fd04c8a3dd)) +- defaultValue missing from Upload field schema ([7b21eaf](https://github.com/payloadcms/payload/commit/7b21eaf12da64778568b45e56fa8d39e81f11c29)) +- ensures nested querying works when querying across collections ([09974fa](https://github.com/payloadcms/payload/commit/09974fa68677586c727943cc234311f87bf6da75)) +- query custom text id fields ([967f2ac](https://github.com/payloadcms/payload/commit/967f2ace0ea1a65570f69e85920f2f55626efde0)) +- removes deprecated queryHiddenFIelds from local API docs ([5f30dbb](https://github.com/payloadcms/payload/commit/5f30dbb1a5b7c7ab6752c114710f92c159319d3d)) +- removes queryHiddenFields from example Find operation ([fb4f822](https://github.com/payloadcms/payload/commit/fb4f822d34d0235a537f96515073e2662680412f)) +- resolve process/browser package in webpack config ([02f27f3](https://github.com/payloadcms/payload/commit/02f27f3de6fdaf5dd0023298fc671a8ae9a1b758)) +- Row groups in tabs vertical alignment ([#2593](https://github.com/payloadcms/payload/issues/2593)) ([54fac4a](https://github.com/payloadcms/payload/commit/54fac4a5d793b534e25600d2f9470c449f40df1d)) +- softens columns and filters pill colors ([#2642](https://github.com/payloadcms/payload/issues/2642)) ([9072096](https://github.com/payloadcms/payload/commit/90720964953d392d85982052b3a4843a5450681e)) +- webp upload formatting ([ccd6ca2](https://github.com/payloadcms/payload/commit/ccd6ca298e69faf04709535df3fcb18eb3d40f1b)) ### Features -* add Arabic translations ([#2641](https://github.com/payloadcms/payload/issues/2641)) ([7d04cf1](https://github.com/payloadcms/payload/commit/7d04cf14fb0587f2208745bb77ed4fd17e99c8d5)) -* allow full URL in staticURL ([#2562](https://github.com/payloadcms/payload/issues/2562)) ([a9b5dff](https://github.com/payloadcms/payload/commit/a9b5dffa00623eb48302d51b88c3449920c10f46)) +- add Arabic translations ([#2641](https://github.com/payloadcms/payload/issues/2641)) ([7d04cf1](https://github.com/payloadcms/payload/commit/7d04cf14fb0587f2208745bb77ed4fd17e99c8d5)) +- allow full URL in staticURL ([#2562](https://github.com/payloadcms/payload/issues/2562)) ([a9b5dff](https://github.com/payloadcms/payload/commit/a9b5dffa00623eb48302d51b88c3449920c10f46)) ## [1.7.5](https://github.com/payloadcms/payload/compare/v1.7.4...v1.7.5) (2023-05-04) - ### Bug Fixes -* make incrementName match multiple digits ([#2609](https://github.com/payloadcms/payload/issues/2609)) ([8dbf0a2](https://github.com/payloadcms/payload/commit/8dbf0a2bd88db1b361ce16bb730613de489f2ed2)) - +- make incrementName match multiple digits ([#2609](https://github.com/payloadcms/payload/issues/2609)) ([8dbf0a2](https://github.com/payloadcms/payload/commit/8dbf0a2bd88db1b361ce16bb730613de489f2ed2)) ### Features -* collection admin.enableRichTextLink property ([#2560](https://github.com/payloadcms/payload/issues/2560)) ([9678992](https://github.com/payloadcms/payload/commit/967899229f458d06a3931d086bcc49299dc310b7)) -* custom admin buttons ([#2618](https://github.com/payloadcms/payload/issues/2618)) ([1d58007](https://github.com/payloadcms/payload/commit/1d58007606fa7e34007f2a56a3ca653d2cd3404d)) +- collection admin.enableRichTextLink property ([#2560](https://github.com/payloadcms/payload/issues/2560)) ([9678992](https://github.com/payloadcms/payload/commit/967899229f458d06a3931d086bcc49299dc310b7)) +- custom admin buttons ([#2618](https://github.com/payloadcms/payload/issues/2618)) ([1d58007](https://github.com/payloadcms/payload/commit/1d58007606fa7e34007f2a56a3ca653d2cd3404d)) ## [1.7.4](https://github.com/payloadcms/payload/compare/v1.7.3...v1.7.4) (2023-05-02) - ### Bug Fixes -* properly import SwcMinifyWebpackPlugin ([#2600](https://github.com/payloadcms/payload/issues/2600)) ([802deac](https://github.com/payloadcms/payload/commit/802deaca03f8506fa4a7adb8fc008205c2c4f013)) +- properly import SwcMinifyWebpackPlugin ([#2600](https://github.com/payloadcms/payload/issues/2600)) ([802deac](https://github.com/payloadcms/payload/commit/802deaca03f8506fa4a7adb8fc008205c2c4f013)) ## [1.7.3](https://github.com/payloadcms/payload/compare/v1.7.2...v1.7.3) (2023-05-01) - ### Bug Fixes -* [#2592](https://github.com/payloadcms/payload/issues/2592), allows usage of hidden fields within access query constraints ([#2599](https://github.com/payloadcms/payload/issues/2599)) ([a0bb13a](https://github.com/payloadcms/payload/commit/a0bb13a4123b51d770b364ddaee3dde1c5a3da53)) -* addds workaround for slate isBlock function issue ([#2596](https://github.com/payloadcms/payload/issues/2596)) ([8f6f13d](https://github.com/payloadcms/payload/commit/8f6f13dc93f49f5ba5384a9168ced5baec85e1fb)) -* bulk operations result type ([#2588](https://github.com/payloadcms/payload/issues/2588)) ([8382faa](https://github.com/payloadcms/payload/commit/8382faa0afc8118f4fb873c657a52c48abb2a6ad)) -* query on id throws 500 ([#2587](https://github.com/payloadcms/payload/issues/2587)) ([0ba22c3](https://github.com/payloadcms/payload/commit/0ba22c3aafca67be78814357edc668ed11ec4a97)) -* timestamp queries ([#2583](https://github.com/payloadcms/payload/issues/2583)) ([9c5107e](https://github.com/payloadcms/payload/commit/9c5107e86d70e36ac181c9d3ad51edacf9fc529a)) - +- [#2592](https://github.com/payloadcms/payload/issues/2592), allows usage of hidden fields within access query constraints ([#2599](https://github.com/payloadcms/payload/issues/2599)) ([a0bb13a](https://github.com/payloadcms/payload/commit/a0bb13a4123b51d770b364ddaee3dde1c5a3da53)) +- addds workaround for slate isBlock function issue ([#2596](https://github.com/payloadcms/payload/issues/2596)) ([8f6f13d](https://github.com/payloadcms/payload/commit/8f6f13dc93f49f5ba5384a9168ced5baec85e1fb)) +- bulk operations result type ([#2588](https://github.com/payloadcms/payload/issues/2588)) ([8382faa](https://github.com/payloadcms/payload/commit/8382faa0afc8118f4fb873c657a52c48abb2a6ad)) +- query on id throws 500 ([#2587](https://github.com/payloadcms/payload/issues/2587)) ([0ba22c3](https://github.com/payloadcms/payload/commit/0ba22c3aafca67be78814357edc668ed11ec4a97)) +- timestamp queries ([#2583](https://github.com/payloadcms/payload/issues/2583)) ([9c5107e](https://github.com/payloadcms/payload/commit/9c5107e86d70e36ac181c9d3ad51edacf9fc529a)) ### Features -* Add new translation for romanian language ([#2556](https://github.com/payloadcms/payload/issues/2556)) ([fbf3a2a](https://github.com/payloadcms/payload/commit/fbf3a2a1b4633e704e467d9aec05f3ae0b900bae)) -* add persian translations ([#2553](https://github.com/payloadcms/payload/issues/2553)) ([c80f68a](https://github.com/payloadcms/payload/commit/c80f68af943c730996c9cdad87cf84d4d06a5777)) -* adjust stack trace for api error ([#2598](https://github.com/payloadcms/payload/issues/2598)) ([870838e](https://github.com/payloadcms/payload/commit/870838e7563b6767c53f4dc0288119087e3f9486)) -* allow customizing the link fields ([#2559](https://github.com/payloadcms/payload/issues/2559)) ([bf65228](https://github.com/payloadcms/payload/commit/bf6522898db353e75db11525ea5a1b58243333d8)) -* supports collection compound indexes ([#2529](https://github.com/payloadcms/payload/issues/2529)) ([85b3d57](https://github.com/payloadcms/payload/commit/85b3d579d3054aad2de793957cf6454332361327)) +- Add new translation for romanian language ([#2556](https://github.com/payloadcms/payload/issues/2556)) ([fbf3a2a](https://github.com/payloadcms/payload/commit/fbf3a2a1b4633e704e467d9aec05f3ae0b900bae)) +- add persian translations ([#2553](https://github.com/payloadcms/payload/issues/2553)) ([c80f68a](https://github.com/payloadcms/payload/commit/c80f68af943c730996c9cdad87cf84d4d06a5777)) +- adjust stack trace for api error ([#2598](https://github.com/payloadcms/payload/issues/2598)) ([870838e](https://github.com/payloadcms/payload/commit/870838e7563b6767c53f4dc0288119087e3f9486)) +- allow customizing the link fields ([#2559](https://github.com/payloadcms/payload/issues/2559)) ([bf65228](https://github.com/payloadcms/payload/commit/bf6522898db353e75db11525ea5a1b58243333d8)) +- supports collection compound indexes ([#2529](https://github.com/payloadcms/payload/issues/2529)) ([85b3d57](https://github.com/payloadcms/payload/commit/85b3d579d3054aad2de793957cf6454332361327)) ## [1.7.2](https://github.com/payloadcms/payload/compare/v1.7.1...v1.7.2) (2023-04-25) - ### Bug Fixes -* [#2521](https://github.com/payloadcms/payload/issues/2521), graphql AND not working with drafts ([e67ca20](https://github.com/payloadcms/payload/commit/e67ca2010831c14938d3f639fcb5374ca62747ba)) -* document drawer access control [#2545](https://github.com/payloadcms/payload/issues/2545) ([439caf8](https://github.com/payloadcms/payload/commit/439caf815fc99538f14b3a59835dcf49185759dc)) -* prevent floating point number in image sizes ([#1935](https://github.com/payloadcms/payload/issues/1935)) ([7fcde11](https://github.com/payloadcms/payload/commit/7fcde11fa0b232537de606e44c0af68b122daed2)) -* prevent sharp toFormat settings fallthrough by using clone ([#2547](https://github.com/payloadcms/payload/issues/2547)) ([90dab3c](https://github.com/payloadcms/payload/commit/90dab3c445d4bdbab0eff286a2b66861d04f2a93)) -* query localized fields without localization configured ([12edb1c](https://github.com/payloadcms/payload/commit/12edb1cc4b2675d9b0948fb7f3439f61c6e2015d)) -* read-only styles ([823d022](https://github.com/payloadcms/payload/commit/823d0228c949fe58a7e0f11f95354b240c3ea876)) - +- [#2521](https://github.com/payloadcms/payload/issues/2521), graphql AND not working with drafts ([e67ca20](https://github.com/payloadcms/payload/commit/e67ca2010831c14938d3f639fcb5374ca62747ba)) +- document drawer access control [#2545](https://github.com/payloadcms/payload/issues/2545) ([439caf8](https://github.com/payloadcms/payload/commit/439caf815fc99538f14b3a59835dcf49185759dc)) +- prevent floating point number in image sizes ([#1935](https://github.com/payloadcms/payload/issues/1935)) ([7fcde11](https://github.com/payloadcms/payload/commit/7fcde11fa0b232537de606e44c0af68b122daed2)) +- prevent sharp toFormat settings fallthrough by using clone ([#2547](https://github.com/payloadcms/payload/issues/2547)) ([90dab3c](https://github.com/payloadcms/payload/commit/90dab3c445d4bdbab0eff286a2b66861d04f2a93)) +- query localized fields without localization configured ([12edb1c](https://github.com/payloadcms/payload/commit/12edb1cc4b2675d9b0948fb7f3439f61c6e2015d)) +- read-only styles ([823d022](https://github.com/payloadcms/payload/commit/823d0228c949fe58a7e0f11f95354b240c3ea876)) ### Features -* add rich-text blockquote element, change quote node type to blockquote ([ed230a4](https://github.com/payloadcms/payload/commit/ed230a42e0315dc2492b4a26e3bf8b5334e89380)) -* add user to field conditional logic ([274edc7](https://github.com/payloadcms/payload/commit/274edc74a70202e8c771c5111507b585c3f69377)) -* exposes id in conditional logic ([c117b32](https://github.com/payloadcms/payload/commit/c117b321474b8318c3a0ddf544e49568e461f0d8)) -* **imageresizer:** add trim options ([#2073](https://github.com/payloadcms/payload/issues/2073)) ([0406548](https://github.com/payloadcms/payload/commit/0406548fe6127e091db9926ee42e59f9158eff5a)) +- add rich-text blockquote element, change quote node type to blockquote ([ed230a4](https://github.com/payloadcms/payload/commit/ed230a42e0315dc2492b4a26e3bf8b5334e89380)) +- add user to field conditional logic ([274edc7](https://github.com/payloadcms/payload/commit/274edc74a70202e8c771c5111507b585c3f69377)) +- exposes id in conditional logic ([c117b32](https://github.com/payloadcms/payload/commit/c117b321474b8318c3a0ddf544e49568e461f0d8)) +- **imageresizer:** add trim options ([#2073](https://github.com/payloadcms/payload/issues/2073)) ([0406548](https://github.com/payloadcms/payload/commit/0406548fe6127e091db9926ee42e59f9158eff5a)) ## [1.7.1](https://github.com/payloadcms/payload/compare/v1.7.0...v1.7.1) (2023-04-18) - ### Bug Fixes -* adds 'use client' for next 13 compatibility ([5e02985](https://github.com/payloadcms/payload/commit/5e029852060d6475eccada35ffbcdd0178d5e690)) -* graphql variables not being passed properly ([72be80a](https://github.com/payloadcms/payload/commit/72be80abc4082013e052aef1152a5de749a6f3c4)) - +- adds 'use client' for next 13 compatibility ([5e02985](https://github.com/payloadcms/payload/commit/5e029852060d6475eccada35ffbcdd0178d5e690)) +- graphql variables not being passed properly ([72be80a](https://github.com/payloadcms/payload/commit/72be80abc4082013e052aef1152a5de749a6f3c4)) ### Features -* configuration extension points ([023719d](https://github.com/payloadcms/payload/commit/023719d77554a70493d779ba94bf55058d4caf98)) +- configuration extension points ([023719d](https://github.com/payloadcms/payload/commit/023719d77554a70493d779ba94bf55058d4caf98)) ## [1.7.0](https://github.com/payloadcms/payload/compare/v1.6.32...v1.7.0) (2023-04-17) @@ -829,47 +774,43 @@ We are pulling off a bandaid here and enforcing that `payload.init` is now async To migrate, you need to convert your code everywhere that you run `payload.init` to be asynchronous instead. For example, here is an example of a traditional `payload.init` call which needs to be migrated: ```js -const express = require("express"); -const payload = require("payload"); +const express = require('express') +const payload = require('payload') -const app = express(); +const app = express() payload.init({ - secret: "SECRET_KEY", - mongoURL: "mongodb://localhost/payload", + secret: 'SECRET_KEY', + mongoURL: 'mongodb://localhost/payload', express: app, -}); +}) app.listen(3000, async () => { - console.log( - "Express is now listening for incoming connections on port 3000." - ); -}); + console.log('Express is now listening for incoming connections on port 3000.') +}) ``` Your `payload.init` call will need to be converted into the following: ```js -const express = require("express"); -const payload = require("payload"); +const express = require('express') +const payload = require('payload') -const app = express(); +const app = express() const start = async () => { await payload.init({ - secret: "SECRET_KEY", - mongoURL: "mongodb://localhost/payload", + secret: 'SECRET_KEY', + mongoURL: 'mongodb://localhost/payload', express: app, - }); + }) app.listen(3000, async () => { - console.log( - "Express is now listening for incoming connections on port 3000." - ); - }); -}; + console.log('Express is now listening for incoming connections on port 3000.') + }) +} -start(); +start() ``` Notice that all we've done is wrapped the `payload.init` and `app.listen` calls with a `start` function that is asynchronous. @@ -880,18 +821,18 @@ Before this release, the Local API methods were configured as generics. For exam ```ts const post = await payload.findByID({ - collection: "posts", - id: "id-of-post-here", -}); + collection: 'posts', + id: 'id-of-post-here', +}) ``` Now, you don't need to pass your types and Payload will automatically infer them for you, as well as significantly improve typing throughout the local API. Here's an example: ```ts const post = await payload.findByID({ - collection: "posts", // this is now auto-typed - id: "id-of-post-here", -}); + collection: 'posts', // this is now auto-typed + id: 'id-of-post-here', +}) // `post` will be automatically typed as `Post` ``` @@ -938,11 +879,11 @@ To migrate, create this file within the root of your Payload project: **migrateVersions.ts** ```ts -const payload = require("payload"); +const payload = require('payload') -require("dotenv").config(); +require('dotenv').config() -const { PAYLOAD_SECRET, MONGODB_URI } = process.env; +const { PAYLOAD_SECRET, MONGODB_URI } = process.env // This function ensures that there is at least one corresponding version for any document // within each of your draft-enabled collections. @@ -955,7 +896,7 @@ const ensureAtLeastOneVersion = async () => { secret: PAYLOAD_SECRET, mongoURL: MONGODB_URI, local: true, - }); + }) // For each collection await Promise.all( @@ -966,14 +907,14 @@ const ensureAtLeastOneVersion = async () => { collection: slug, limit: 0, depth: 0, - locale: "all", - }); + locale: 'all', + }) - const VersionsModel = payload.versions[slug]; - const existingCollectionDocIds: Array = []; + const VersionsModel = payload.versions[slug] + const existingCollectionDocIds: Array = [] await Promise.all( docs.map(async (doc) => { - existingCollectionDocIds.push(doc.id); + existingCollectionDocIds.push(doc.id) // Find at least one version for the doc const versionDocs = await VersionsModel.find( { @@ -981,8 +922,8 @@ const ensureAtLeastOneVersion = async () => { updatedAt: { $gte: doc.updatedAt }, }, null, - { limit: 1 } - ).lean(); + { limit: 1 }, + ).lean() // If there are no corresponding versions, // we need to create one @@ -994,39 +935,37 @@ const ensureAtLeastOneVersion = async () => { autosave: Boolean(versions?.drafts?.autosave), updatedAt: doc.updatedAt, createdAt: doc.createdAt, - }); + }) } catch (e) { console.error( `Unable to create version corresponding with collection ${slug} document ID ${doc.id}`, - e?.errors || e - ); + e?.errors || e, + ) } - console.log( - `Created version corresponding with ${slug} document ID ${doc.id}` - ); + console.log(`Created version corresponding with ${slug} document ID ${doc.id}`) } - }) - ); + }), + ) const versionsWithoutParentDocs = await VersionsModel.deleteMany({ parent: { $nin: existingCollectionDocIds }, - }); + }) if (versionsWithoutParentDocs.deletedCount > 0) { console.log( - `Removing ${versionsWithoutParentDocs.deletedCount} versions for ${slug} collection - parent documents no longer exist` - ); + `Removing ${versionsWithoutParentDocs.deletedCount} versions for ${slug} collection - parent documents no longer exist`, + ) } } - }) - ); + }), + ) - console.log("Done!"); - process.exit(0); -}; + console.log('Done!') + process.exit(0) +} -ensureAtLeastOneVersion(); +ensureAtLeastOneVersion() ``` Make sure your environment variables match the script's values above and then run `PAYLOAD_CONFIG_PATH=src/payload.config.ts npx ts-node -T migrateVersions.ts` in your terminal. Make sure that you point the command to your Payload config. @@ -1368,32 +1307,32 @@ Any future slugs after updating will be used as-is. // Before const ExampleCollection: CollectionConfig = { - slug: "case-studies", + slug: 'case-studies', labels: { // Before Payload used `labels.singular` to generate types/graphQL schema - singular: "Project", - plural: "Projects", + singular: 'Project', + plural: 'Projects', }, - }; + } // After const ExampleCollection: CollectionConfig = { // Now Payload uses `slug` to generate types/graphQL schema - slug: "case-studies", + slug: 'case-studies', labels: { - singular: "Project", - plural: "Projects", + singular: 'Project', + plural: 'Projects', }, // To override the usage of slug in graphQL schema generation graphQL: { - singularName: "Project", - pluralName: "Projects", + singularName: 'Project', + pluralName: 'Projects', }, // To override the usage of slug in type file generation typescript: { - interface: "Project", + interface: 'Project', }, - }; + } ``` - **Globals:** are affected if you have a `label` defined that differs from your global slug. @@ -1403,25 +1342,25 @@ Any future slugs after updating will be used as-is. // Before const ExampleGlobal: GlobalConfig = { - slug: "footer", + slug: 'footer', // Before Payload used `label` to generate types/graphQL schema - label: "Page Footer", - }; + label: 'Page Footer', + } // After const ExampleGlobal: GlobalConfig = { // Now Payload uses `slug` to generate types/graphQL schema - slug: "footer", - label: "Page Footer", + slug: 'footer', + label: 'Page Footer', // To override the usage of slug in graphQL schema generation graphQL: { - name: "PageFooter", + name: 'PageFooter', }, // To override the usage of slug in type file generation typescript: { - interface: "PageFooter", + interface: 'PageFooter', }, - }; + } ``` - **Block Fields:** are affected if you have a `label` defined that differs from your block slug. @@ -2694,25 +2633,25 @@ Now, configs will be sanitized **_before_** plugins are executed **_as well as_* So, where your plugin may have been typed like this before: ```ts -import { SanitizedConfig } from "payload/config"; +import { SanitizedConfig } from 'payload/config' const plugin = (config: SanitizedConfig): SanitizedConfig => { return { ...config, - }; -}; + } +} ``` It can now be written like this: ```ts -import { Config } from "payload/config"; +import { Config } from 'payload/config' const plugin = (config: Config): Config => { return { ...config, - }; -}; + } +} ``` ### Features @@ -2944,24 +2883,24 @@ For example, if you have a `pages` collection with no existing access control, a ```js const Page = { - slug: "pages", + slug: 'pages', access: { // No `read` access control was set }, -}; +} ``` To: ```js const Page = { - slug: "pages", + slug: 'pages', access: { // Now we explicitly allow public read access // to this collection's documents read: () => true, }, -}; +} ``` If none of your collections or globals should be publicly exposed, you don't need to do anything to upgrade. @@ -3522,4 +3461,4 @@ If none of your collections or globals should be publicly exposed, you don't nee - add blind index for encrypting API Keys ([9a1c1f6](https://github.com/payloadcms/payload/commit/9a1c1f64c0ea0066b679195f50e6cb1ac4bf3552)) - add license key to access routej ([2565005](https://github.com/payloadcms/payload/commit/2565005cc099797a6e3b8995e0984c28b7837e82)) -## [0.0.137](https://github.com/payloadcms/payload/commit/5c1e2846a2694a80cc8707703406c2ac1bb6af8a) (2020-11-12) \ No newline at end of file +## [0.0.137](https://github.com/payloadcms/payload/commit/5c1e2846a2694a80cc8707703406c2ac1bb6af8a) (2020-11-12) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9c9e0f619..4fcdfc02a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -49,13 +49,13 @@ A typical directory with `test/` will be structured like this: - `config.ts` - This is the _granular_ Payload config for testing. It should be as lightweight as possible. Reference existing configs for an example - `int.spec.ts` - This is the test file run by jest. Any test file must have a `*int.spec.ts` suffix. - `e2e.spec.ts` - This is the end-to-end test file that will load up the admin UI using the above config and run Playwright tests. These tests are typically only needed if a large change is being made to the Admin UI. -- `payload-types.ts` - Generated types from `config.ts`. Generate this file by running `yarn dev:generate-types my-test-dir`. +- `payload-types.ts` - Generated types from `config.ts`. Generate this file by running `pnpm dev:generate-types my-test-dir`. The directory split up in this way specifically to reduce friction when creating tests and to add the ability to boot up Payload with that specific config. -The following command will start Payload with your config: `yarn dev my-test-dir`. This command will start up Payload using your config and refresh a test database on every restart. +The following command will start Payload with your config: `pnpm dev my-test-dir`. This command will start up Payload using your config and refresh a test database on every restart. -By default, it will automatically log you in with the default credentials. To disable that, you can either pass in the --no-auto-login flag (example: `yarn dev my-test-dir --no-auto-login`) or set the `PAYLOAD_PUBLIC_DISABLE_AUTO_LOGIN` environment variable to `false`. +By default, it will automatically log you in with the default credentials. To disable that, you can either pass in the --no-auto-login flag (example: `pnpm dev my-test-dir --no-auto-login`) or set the `PAYLOAD_PUBLIC_DISABLE_AUTO_LOGIN` environment variable to `false`. If you wish to use to your own Mongo database for the `test` directory instead of using the in memory database, all you need to do is add the following env vars to the `test/dev.ts` file: diff --git a/ISSUE_GUIDE.md b/ISSUE_GUIDE.md index 9f5df6607..d64fec0e9 100644 --- a/ISSUE_GUIDE.md +++ b/ISSUE_GUIDE.md @@ -6,9 +6,10 @@ To report an issue, please follow the steps below: 2. Add necessary collections/globals/fields to the `test/_community` directory to recreate the issue you are experiencing 3. Create an issue and add a link to your forked repo -**The goal is to isolate the problem by reducing the number of fields/collections you add to the test/_community folder. This folder is not meant for you to copy your project into, but to recreate the issue you are experiencing with minimal config.** +**The goal is to isolate the problem by reducing the number of fields/collections you add to the test/\_community folder. This folder is not meant for you to copy your project into, but to recreate the issue you are experiencing with minimal config.** ## Test directory file tree explanation + ```text . ├── config.ts @@ -20,24 +21,26 @@ To report an issue, please follow the steps below: - `config.ts` - This is the _granular_ Payload config for testing. It should be as lightweight as possible. Reference existing configs for an example - `int.spec.ts` [Optional] - This is the test file run by jest. Any test file must have a `*int.spec.ts` suffix. - `e2e.spec.ts` [Optional] - This is the end-to-end test file that will load up the admin UI using the above config and run Playwright tests. -- `payload-types.ts` - Generated types from `config.ts`. Generate this file by running `yarn dev:generate-types _community`. +- `payload-types.ts` - Generated types from `config.ts`. Generate this file by running `pnpm dev:generate-types _community`. The directory split up in this way specifically to reduce friction when creating tests and to add the ability to boot up Payload with that specific config. You should modify the files in `test/_community` to get started. ## How to start test collection admin UI + To start the admin panel so you can manually recreate your issue, you can run the following command: - ```bash - # This command will start up Payload using your config - # NOTE: it will wipe the test database on restart - yarn dev _community - ``` - +```bash +# This command will start up Payload using your config +# NOTE: it will wipe the test database on restart +pnpm dev _community +``` ## Testing is optional but encouraged + An issue does not need to have failing tests — reproduction steps with your forked repo are enough at this point. Some people like to dive deeper and we want to give you the guidance/tools to do so. Read more below. ### How to run integration tests (Payload API tests) + There are a couple ways to do this: - **Granularly** - you can run individual tests in vscode by installing the Jest Runner plugin and using that to run individual tests. Clicking the `debug` button will run the test in debug mode allowing you to set break points. @@ -47,11 +50,13 @@ There are a couple ways to do this: - **Manually** - you can run all int tests in the `/test/_community/int.spec.ts` file by running the following command: ```bash - yarn test:int _community + pnpm test:int _community ``` ### How to run E2E tests (Admin Panel UI tests) + The easiest way to run E2E tests is to install + - [Playwright Test for VSCode](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright) - [Playwright Runner](https://marketplace.visualstudio.com/items?itemName=ortoni.ortoni) @@ -59,6 +64,6 @@ Once they are installed you can open the `testing` tab in vscode sidebar and dri - #### Notes + - It is recommended to add the test credentials (located in `test/credentials.ts`) to your autofill for `localhost:3000/admin` as this will be required on every nodemon restart. The default credentials are `dev@payloadcms.com` as email and `test` as password. diff --git a/README.md b/README.md index 892120d67..5bcbf1f36 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ ## ☁️ Deploy instantly with Payload Cloud. + Create a cloud account, connect your GitHub, and [deploy in minutes](https://payloadcms.com/new). ## 🚀 Get started by self-hosting completely free, forever. @@ -52,7 +53,9 @@ npx create-payload-app Alternatively, it only takes about five minutes to [create an app from scratch](https://payloadcms.com/docs/getting-started/installation#from-scratch). ## 🖱️ One-click templates + ### 🛒 [E-Commerce](https://github.com/payloadcms/payload/tree/master/templates/ecommerce) + Eliminate the need to combine Shopify and a CMS, and instead do it all with Payload + Stripe. Best of all, you can extend it as much as you need. [All Official Templates](https://github.com/orgs/payloadcms/repositories?q=topic%3Apayload-template) · [Community Templates](https://github.com/topics/payload-template) diff --git a/auth.d.ts b/auth.d.ts deleted file mode 100644 index 212805261..000000000 --- a/auth.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/auth'; diff --git a/auth.js b/auth.js deleted file mode 100644 index 111985a3a..000000000 --- a/auth.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dist/auth'); diff --git a/bin.js b/bin.js deleted file mode 100755 index 86541f415..000000000 --- a/bin.js +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -require('./dist/bin'); diff --git a/components/elements.js b/components/elements.js deleted file mode 100644 index e1de4dca9..000000000 --- a/components/elements.js +++ /dev/null @@ -1,5 +0,0 @@ -exports.Button = require('../dist/admin/components/elements/Button').default; -exports.Card = require('../dist/admin/components/elements/Card').default; -exports.Eyebrow = require('../dist/admin/components/elements/Eyebrow').default; -exports.Nav = require('../dist/admin/components/elements/Nav').default; -exports.Gutter = require('../dist/admin/components/elements/Gutter').Gutter; diff --git a/components/elements.ts b/components/elements.ts deleted file mode 100644 index 1de9c31e6..000000000 --- a/components/elements.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { default as Button } from '../dist/admin/components/elements/Button'; -export { default as Card } from '../dist/admin/components/elements/Card'; -export { default as Eyebrow } from '../dist/admin/components/elements/Eyebrow'; -export { default as Nav } from '../dist/admin/components/elements/Nav'; -export { Gutter } from '../dist/admin/components/elements/Gutter'; diff --git a/components/fields/Array.ts b/components/fields/Array.ts deleted file mode 100644 index 398f25436..000000000 --- a/components/fields/Array.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../dist/admin/components/forms/field-types/Array/types'; diff --git a/components/fields/Blocks.ts b/components/fields/Blocks.ts deleted file mode 100644 index b641b2dc9..000000000 --- a/components/fields/Blocks.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../dist/admin/components/forms/field-types/Blocks/types'; diff --git a/components/fields/Cell.ts b/components/fields/Cell.ts deleted file mode 100644 index 0526f3c0d..000000000 --- a/components/fields/Cell.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../dist/admin/components/views/collections/List/Cell/types'; diff --git a/components/fields/Checkbox.ts b/components/fields/Checkbox.ts deleted file mode 100644 index f1c044c39..000000000 --- a/components/fields/Checkbox.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../dist/admin/components/forms/field-types/Checkbox/types'; diff --git a/components/fields/Code.ts b/components/fields/Code.ts deleted file mode 100644 index d51e60fd2..000000000 --- a/components/fields/Code.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../dist/admin/components/forms/field-types/Code/types'; diff --git a/components/fields/DateTime.ts b/components/fields/DateTime.ts deleted file mode 100644 index f24ddc95f..000000000 --- a/components/fields/DateTime.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../dist/admin/components/forms/field-types/DateTime/types'; diff --git a/components/fields/Email.ts b/components/fields/Email.ts deleted file mode 100644 index 47aa2fecf..000000000 --- a/components/fields/Email.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../dist/admin/components/forms/field-types/Email/types'; diff --git a/components/fields/Group.ts b/components/fields/Group.ts deleted file mode 100644 index 734bc629c..000000000 --- a/components/fields/Group.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../dist/admin/components/forms/field-types/Group/types'; diff --git a/components/fields/Json.ts b/components/fields/Json.ts deleted file mode 100644 index f140a9ba7..000000000 --- a/components/fields/Json.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../dist/admin/components/forms/field-types/JSON/types'; diff --git a/components/fields/Number.ts b/components/fields/Number.ts deleted file mode 100644 index dc25b5778..000000000 --- a/components/fields/Number.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../dist/admin/components/forms/field-types/Number/types'; diff --git a/components/fields/Password.ts b/components/fields/Password.ts deleted file mode 100644 index ce8726341..000000000 --- a/components/fields/Password.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../dist/admin/components/forms/field-types/Password/types'; diff --git a/components/fields/RadioGroup/RadioInput.ts b/components/fields/RadioGroup/RadioInput.ts deleted file mode 100644 index 181708142..000000000 --- a/components/fields/RadioGroup/RadioInput.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../../dist/admin/components/forms/field-types/RadioGroup/RadioInput/types'; diff --git a/components/fields/RadioGroup/index.ts b/components/fields/RadioGroup/index.ts deleted file mode 100644 index 148c78ffd..000000000 --- a/components/fields/RadioGroup/index.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../../dist/admin/components/forms/field-types/RadioGroup/types'; diff --git a/components/fields/Relationship.ts b/components/fields/Relationship.ts deleted file mode 100644 index e3ba67023..000000000 --- a/components/fields/Relationship.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props, Option, ValueWithRelation } from '../../dist/admin/components/forms/field-types/Relationship/types'; diff --git a/components/fields/RichText.ts b/components/fields/RichText.ts deleted file mode 100644 index 44ba30462..000000000 --- a/components/fields/RichText.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../dist/admin/components/forms/field-types/RichText/types'; diff --git a/components/fields/Row.ts b/components/fields/Row.ts deleted file mode 100644 index 66e7cc7e0..000000000 --- a/components/fields/Row.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../dist/admin/components/forms/field-types/Row/types'; diff --git a/components/fields/Select.ts b/components/fields/Select.ts deleted file mode 100644 index 95bb6911d..000000000 --- a/components/fields/Select.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../dist/admin/components/forms/field-types/Select/types'; diff --git a/components/fields/Text.ts b/components/fields/Text.ts deleted file mode 100644 index 1a637720f..000000000 --- a/components/fields/Text.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../dist/admin/components/forms/field-types/Text/types'; diff --git a/components/fields/Textarea.ts b/components/fields/Textarea.ts deleted file mode 100644 index e6716094c..000000000 --- a/components/fields/Textarea.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../dist/admin/components/forms/field-types/Textarea/types'; diff --git a/components/fields/Upload.ts b/components/fields/Upload.ts deleted file mode 100644 index f5bd9ba3b..000000000 --- a/components/fields/Upload.ts +++ /dev/null @@ -1 +0,0 @@ -export type { Props } from '../../dist/admin/components/forms/field-types/Upload/types'; diff --git a/components/forms.js b/components/forms.js deleted file mode 100644 index 500f6ed39..000000000 --- a/components/forms.js +++ /dev/null @@ -1,42 +0,0 @@ -exports.useForm = require('../dist/admin/components/forms/Form/context').useForm; - -/** - * @deprecated useWatchForm is no longer preferred. If you need all form fields, prefer `useAllFormFields`. - */ -exports.useWatchForm = require('../dist/admin/components/forms/Form/context').useWatchForm; - -exports.useFormFields = require('../dist/admin/components/forms/Form/context').useFormFields; - -exports.useAllFormFields = require('../dist/admin/components/forms/Form/context').useAllFormFields; - -exports.useFormSubmitted = require('../dist/admin/components/forms/Form/context').useFormSubmitted; - -exports.useFormProcessing = require('../dist/admin/components/forms/Form/context').useFormProcessing; - -exports.useFormModified = require('../dist/admin/components/forms/Form/context').useFormModified; - -exports.useField = require('../dist/admin/components/forms/useField').default; - -/** - * @deprecated This method is now called useField. The useFieldType alias will be removed in an upcoming version. - */ -exports.useFieldType = require('../dist/admin/components/forms/useField').default; - -exports.Form = require('../dist/admin/components/forms/Form').default; - -exports.Text = require('../dist/admin/components/forms/field-types/Text').default; -exports.TextInput = require('../dist/admin/components/forms/field-types/Text/Input').default; - -exports.Group = require('../dist/admin/components/forms/field-types/Group').default; - -exports.Select = require('../dist/admin/components/forms/field-types/Select').default; -exports.SelectInput = require('../dist/admin/components/forms/field-types/Select/Input').default; - -exports.Checkbox = require('../dist/admin/components/forms/field-types/Checkbox').default; -exports.Submit = require('../dist/admin/components/forms/Submit').default; -exports.Label = require('../dist/admin/components/forms/Label').default; - -exports.reduceFieldsToValues = require('../dist/admin/components/forms/Form/reduceFieldsToValues').default; -exports.getSiblingData = require('../dist/admin/components/forms/Form/getSiblingData').default; - -exports.withCondition = require('../dist/admin/components/forms/withCondition').default; diff --git a/components/forms.ts b/components/forms.ts deleted file mode 100644 index 79a6ff87a..000000000 --- a/components/forms.ts +++ /dev/null @@ -1,38 +0,0 @@ -export { - useForm, - /** - * @deprecated useWatchForm is no longer preferred. If you need all form fields, prefer `useAllFormFields`. - */ - useWatchForm, - useFormFields, - useAllFormFields, - useFormSubmitted, - useFormProcessing, - useFormModified, -} from '../dist/admin/components/forms/Form/context'; - -export { default as useField } from '../dist/admin/components/forms/useField'; - -/** - * @deprecated This method is now called useField. The useFieldType alias will be removed in an upcoming version. - */ -export { default as useFieldType } from '../dist/admin/components/forms/useField'; - -export { default as Form } from '../dist/admin/components/forms/Form'; - -export { default as Text } from '../dist/admin/components/forms/field-types/Text'; -export { default as TextInput } from '../dist/admin/components/forms/field-types/Text/Input'; - -export { default as Group } from '../dist/admin/components/forms/field-types/Group'; - -export { default as Select } from '../dist/admin/components/forms/field-types/Select'; -export { default as SelectInput } from '../dist/admin/components/forms/field-types/Select/Input'; - -export { default as Checkbox } from '../dist/admin/components/forms/field-types/Checkbox'; -export { default as Submit } from '../dist/admin/components/forms/Submit'; -export { default as Label } from '../dist/admin/components/forms/Label'; - -export { default as reduceFieldsToValues } from '../dist/admin/components/forms/Form/reduceFieldsToValues'; -export { default as getSiblingData } from '../dist/admin/components/forms/Form/getSiblingData'; - -export { default as withCondition } from '../dist/admin/components/forms/withCondition'; diff --git a/components/hooks.js b/components/hooks.js deleted file mode 100644 index dca5507fa..000000000 --- a/components/hooks.js +++ /dev/null @@ -1 +0,0 @@ -exports.useStepNav = require('../dist/admin/components/elements/StepNav').useStepNav; diff --git a/components/hooks.ts b/components/hooks.ts deleted file mode 100644 index cfb636fab..000000000 --- a/components/hooks.ts +++ /dev/null @@ -1 +0,0 @@ -export { useStepNav } from '../dist/admin/components/elements/StepNav'; diff --git a/components/icons.js b/components/icons.js deleted file mode 100644 index 8a671a5ed..000000000 --- a/components/icons.js +++ /dev/null @@ -1,2 +0,0 @@ -exports.Chevron = require('../dist/admin/components/icons/Chevron').default; -exports.X = require('../dist/admin/components/icons/X').default; diff --git a/components/icons.ts b/components/icons.ts deleted file mode 100644 index cd0c56b27..000000000 --- a/components/icons.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as Chevron } from '../dist/admin/components/icons/Chevron'; -export { default as X } from '../dist/admin/components/icons/X'; diff --git a/components/index.ts b/components/index.ts deleted file mode 100644 index 8ff82cb22..000000000 --- a/components/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '../dist/admin/components'; diff --git a/components/preferences.js b/components/preferences.js deleted file mode 100644 index 533da4f88..000000000 --- a/components/preferences.js +++ /dev/null @@ -1 +0,0 @@ -exports.usePreferences = require('../dist/admin/components/utilities/Preferences').usePreferences; diff --git a/components/preferences.ts b/components/preferences.ts deleted file mode 100644 index 232c17756..000000000 --- a/components/preferences.ts +++ /dev/null @@ -1 +0,0 @@ -export { usePreferences } from '../dist/admin/components/utilities/Preferences'; diff --git a/components/rich-text.js b/components/rich-text.js deleted file mode 100644 index 145e8608c..000000000 --- a/components/rich-text.js +++ /dev/null @@ -1,3 +0,0 @@ -exports.LeafButton = require('../dist/admin/components/forms/field-types/RichText/leaves/Button').default; -exports.ElementButton = require('../dist/admin/components/forms/field-types/RichText/elements/Button').default; -exports.toggleElement = require('../dist/admin/components/forms/field-types/RichText/elements/toggle').default; diff --git a/components/rich-text.ts b/components/rich-text.ts deleted file mode 100644 index 6e5623baf..000000000 --- a/components/rich-text.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { default as LeafButton } from '../dist/admin/components/forms/field-types/RichText/leaves/Button'; -export { default as ElementButton } from '../dist/admin/components/forms/field-types/RichText/elements/Button'; -export { default as toggleElement } from '../dist/admin/components/forms/field-types/RichText/elements/toggle'; diff --git a/components/templates.js b/components/templates.js deleted file mode 100644 index 11246d6f0..000000000 --- a/components/templates.js +++ /dev/null @@ -1,2 +0,0 @@ -exports.DefaultTemplate = require('../dist/admin/components/templates/Default').default; -exports.MinimalTemplate = require('../dist/admin/components/templates/Minimal').default; \ No newline at end of file diff --git a/components/templates.ts b/components/templates.ts deleted file mode 100644 index eff066582..000000000 --- a/components/templates.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as DefaultTemplate } from '../dist/admin/components/templates/Default'; -export { default as MinimalTemplate } from '../dist/admin/components/templates/Minimal'; diff --git a/components/utilities.js b/components/utilities.js deleted file mode 100644 index 0fd979263..000000000 --- a/components/utilities.js +++ /dev/null @@ -1,7 +0,0 @@ -exports.Meta = require('../dist/admin/components/utilities/Meta').default; -exports.useLocale = require('../dist/admin/components/utilities/Locale').useLocale; -exports.useDocumentInfo = require('../dist/admin/components/utilities/DocumentInfo').useDocumentInfo; -exports.useConfig = require('../dist/admin/components/utilities/Config').useConfig; -exports.useAuth = require('../dist/admin/components/utilities/Auth').useAuth; -exports.useEditDepth = require('../dist/admin/components/utilities/EditDepth').useEditDepth; -exports.useTheme = require('../dist/admin/components/utilities/Theme').useTheme; diff --git a/components/utilities.ts b/components/utilities.ts deleted file mode 100644 index 623851238..000000000 --- a/components/utilities.ts +++ /dev/null @@ -1,6 +0,0 @@ -export { default as Meta } from '../dist/admin/components/utilities/Meta'; -export { useLocale } from '../dist/admin/components/utilities/Locale'; -export { useDocumentInfo } from '../dist/admin/components/utilities/DocumentInfo'; -export { useConfig } from '../dist/admin/components/utilities/Config'; -export { useAuth } from '../dist/admin/components/utilities/Auth'; -export { useEditDepth } from '../dist/admin/components/utilities/EditDepth'; diff --git a/components/views/Cell.js b/components/views/Cell.js deleted file mode 100644 index d2ee71c1d..000000000 --- a/components/views/Cell.js +++ /dev/null @@ -1 +0,0 @@ -exports.Cell = require('../../dist/admin/components/views/collections/List/Cell').default; diff --git a/components/views/Cell.ts b/components/views/Cell.ts deleted file mode 100644 index cb44390e0..000000000 --- a/components/views/Cell.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as Cell } from '../../dist/admin/components/views/collections/List/Cell'; -export type { Props } from '../../dist/admin/components/views/collections/List/Cell/types'; diff --git a/components/views/Dashboard.js b/components/views/Dashboard.js deleted file mode 100644 index 53693cf52..000000000 --- a/components/views/Dashboard.js +++ /dev/null @@ -1 +0,0 @@ -exports.Dashboard = required('../../dist/admin/components/views/Dashboard/Default').default; diff --git a/components/views/Dashboard.ts b/components/views/Dashboard.ts deleted file mode 100644 index 6acd5404b..000000000 --- a/components/views/Dashboard.ts +++ /dev/null @@ -1,3 +0,0 @@ -export { default as Dashboard } from '../../dist/admin/components/views/Dashboard/Default'; - -export type { Props } from '../../dist/admin/components/views/Dashboard/types'; diff --git a/components/views/Edit.js b/components/views/Edit.js deleted file mode 100644 index 79350aa6e..000000000 --- a/components/views/Edit.js +++ /dev/null @@ -1 +0,0 @@ -exports.Edit = require('../../dist/admin/components/views/collections/Edit/Default').default; diff --git a/components/views/Edit.ts b/components/views/Edit.ts deleted file mode 100644 index 5895ce557..000000000 --- a/components/views/Edit.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as Edit } from '../../dist/admin/components/views/collections/Edit/Default'; -export type { Props } from '../../dist/admin/components/views/collections/Edit/types'; diff --git a/components/views/List.js b/components/views/List.js deleted file mode 100644 index 6ec8ce8b7..000000000 --- a/components/views/List.js +++ /dev/null @@ -1 +0,0 @@ -exports.List = require('../../dist/admin/components/views/collections/List/Default').default; diff --git a/components/views/List.ts b/components/views/List.ts deleted file mode 100644 index 1d14c3a0a..000000000 --- a/components/views/List.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as List } from '../../dist/admin/components/views/collections/List/Default'; -export type { Props } from '../../dist/admin/components/views/collections/List/types'; diff --git a/config.d.ts b/config.d.ts deleted file mode 100644 index ae147d469..000000000 --- a/config.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { buildConfig } from './dist/config/build'; -export * from './dist/config/types'; diff --git a/config.js b/config.js deleted file mode 100644 index 717599548..000000000 --- a/config.js +++ /dev/null @@ -1 +0,0 @@ -exports.buildConfig = require('./dist/config/build').buildConfig; diff --git a/database/index.ts b/database/index.ts deleted file mode 100644 index c02719da7..000000000 --- a/database/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { baseDatabaseAdapter } from '../dist/database/baseDatabaseAdapter'; diff --git a/docs/access-control/collections.mdx b/docs/access-control/collections.mdx index 9b0969de1..2fa681add 100644 --- a/docs/access-control/collections.mdx +++ b/docs/access-control/collections.mdx @@ -10,23 +10,24 @@ You can define Collection-level Access Control within each Collection's `access` ## Available Controls -| Function | Allows/Denies Access | -| ------------------------ | -------------------- | -| **[`create`](#create)** | Used in the `create` operation | -| **[`read`](#read)** | Used in the `find` and `findByID` operations | -| **[`update`](#update)** | Used in the `update` operation | -| **[`delete`](#delete)** | Used in the `delete` operation | +| Function | Allows/Denies Access | +| ----------------------- | -------------------------------------------- | +| **[`create`](#create)** | Used in the `create` operation | +| **[`read`](#read)** | Used in the `find` and `findByID` operations | +| **[`update`](#update)** | Used in the `update` operation | +| **[`delete`](#delete)** | Used in the `delete` operation | #### Auth-enabled Controls If a Collection supports [`Authentication`](/docs/authentication/overview), the following Access Controls become available: -| Function | Allows/Denies Access | -| ----------------------- | -------------------- | -| **[`admin`](#admin)** | Used to restrict access to the Payload Admin panel | +| Function | Allows/Denies Access | +| ----------------------- | -------------------------------------------------------------- | +| **[`admin`](#admin)** | Used to restrict access to the Payload Admin panel | | **[`unlock`](#unlock)** | Used to restrict which users can access the `unlock` operation | **Example Collection config:** + ```ts import { CollectionConfig } from 'payload/types'; @@ -50,10 +51,10 @@ Returns a boolean which allows/denies access to the `create` request. **Available argument properties:** -| Option | Description | -| ---------- | ----------- | +| Option | Description | +| ---------- | -------------------------------------------------------------------------- | | **`req`** | The Express `request` object containing the currently authenticated `user` | -| **`data`** | The data passed to create the document with. | +| **`data`** | The data passed to create the document with. | **Example:** @@ -77,20 +78,20 @@ Read access functions can return a boolean result or optionally return a [query **Available argument properties:** -| Option | Description | -| --------- | ----------- | +| Option | Description | +| --------- | -------------------------------------------------------------------------- | | **`req`** | The Express `request` object containing the currently authenticated `user` | -| **`id`** | `id` of document requested, if within `findByID` | +| **`id`** | `id` of document requested, if within `findByID` | **Example:** ```ts -import { Access } from 'payload/config'; +import { Access } from 'payload/config' const canReadPage: Access = ({ req: { user } }) => { // allow authenticated users if (user) { - return true; + return true } // using a query constraint, guest users can access when a field named 'isPublic' is set to true return { @@ -99,7 +100,7 @@ const canReadPage: Access = ({ req: { user } }) => { equals: true, }, } -}; +} ``` ### Update @@ -108,25 +109,25 @@ Update access functions can return a boolean result or optionally return a [quer **Available argument properties:** -| Option | Description | -| ---------- | ----------- | +| Option | Description | +| ---------- | -------------------------------------------------------------------------- | | **`req`** | The Express `request` object containing the currently authenticated `user` | -| **`id`** | `id` of document requested to update | -| **`data`** | The data passed to update the document with | +| **`id`** | `id` of document requested to update | +| **`data`** | The data passed to update the document with | **Example:** ```ts -import { Access } from 'payload/config'; +import { Access } from 'payload/config' const canUpdateUser: Access = ({ req: { user }, id }) => { // allow users with a role of 'admin' - if (user.roles && user.roles.some(role => role === 'admin')) { - return true; + if (user.roles && user.roles.some((role) => role === 'admin')) { + return true } // allow any other users to update only oneself - return user.id === id; -}; + return user.id === id +} ``` ### Delete @@ -135,10 +136,10 @@ Similarly to the Update function, returns a boolean or a [query constraint](/doc **Available argument properties:** -| Option | Description | -| --------- | ----------- | +| Option | Description | +| --------- | --------------------------------------------------------------------------------------------------- | | **`req`** | The Express `request` object with additional `user` property, which is the currently logged in user | -| **`id`** | `id` of document requested to delete | +| **`id`** | `id` of document requested to delete | **Example:** @@ -148,7 +149,7 @@ import { Access } from 'payload/config' const canDeleteCustomer: Access = async ({ req, id }) => { if (!id) { // allow the admin UI to show controls to delete since it is indeterminate without the id - return true; + return true } // query another collection using the id const result = await req.payload.find({ @@ -158,10 +159,10 @@ const canDeleteCustomer: Access = async ({ req, id }) => { where: { customer: { equals: id }, }, - }); + }) - return result.totalDocs === 0; -}; + return result.totalDocs === 0 +} ``` ### Admin @@ -170,8 +171,8 @@ If the Collection is [used to access the Payload Admin panel](/docs/admin/overvi **Available argument properties:** -| Option | Description | -| --------- | ----------- | +| Option | Description | +| --------- | -------------------------------------------------------------------------- | | **`req`** | The Express `request` object containing the currently authenticated `user` | ### Unlock @@ -180,6 +181,6 @@ Determines which users can [unlock](/docs/authentication/operations#unlock) othe **Available argument properties:** -| Option | Description | -| --------- | ----------- | +| Option | Description | +| --------- | -------------------------------------------------------------------------- | | **`req`** | The Express `request` object containing the currently authenticated `user` | diff --git a/docs/access-control/fields.mdx b/docs/access-control/fields.mdx index 513f140e9..68cc782ed 100644 --- a/docs/access-control/fields.mdx +++ b/docs/access-control/fields.mdx @@ -10,13 +10,14 @@ Field Access Control is specified with functions inside a field's config. All fi ## Available Controls -| Function | Purpose | -| ------------------------ | ------- | -| **[`create`](#create)** | Allows or denies the ability to set a field's value when creating a new document | -| **[`read`](#read)** | Allows or denies the ability to read a field's value | -| **[`update`](#update)** | Allows or denies the ability to update a field's value | +| Function | Purpose | +| ----------------------- | -------------------------------------------------------------------------------- | +| **[`create`](#create)** | Allows or denies the ability to set a field's value when creating a new document | +| **[`read`](#read)** | Allows or denies the ability to read a field's value | +| **[`update`](#update)** | Allows or denies the ability to update a field's value | **Example Collection config:** + ```ts import { CollectionConfig } from 'payload/types'; @@ -44,11 +45,11 @@ Returns a boolean which allows or denies the ability to set a field's value when **Available argument properties:** -| Option | Description | -| ----------------- | ----------- | +| Option | Description | +| ----------------- | -------------------------------------------------------------------------- | | **`req`** | The Express `request` object containing the currently authenticated `user` | -| **`data`** | The full data passed to create the document. | -| **`siblingData`** | Immediately adjacent field data passed to create the document. | +| **`data`** | The full data passed to create the document. | +| **`siblingData`** | Immediately adjacent field data passed to create the document. | ### Read @@ -56,12 +57,12 @@ Returns a boolean which allows or denies the ability to read a field's value. If **Available argument properties:** -| Option | Description | -| ----------------- | ----------- | +| Option | Description | +| ----------------- | -------------------------------------------------------------------------- | | **`req`** | The Express `request` object containing the currently authenticated `user` | -| **`id`** | `id` of the document being read | -| **`doc`** | The full document data. | -| **`siblingData`** | Immediately adjacent field data of the document being read. | +| **`id`** | `id` of the document being read | +| **`doc`** | The full document data. | +| **`siblingData`** | Immediately adjacent field data of the document being read. | ### Update @@ -71,10 +72,10 @@ If `false` is returned and you attempt to update the field's value, the operatio **Available argument properties:** -| Option | Description | -| ----------------- | ----------- | +| Option | Description | +| ----------------- | -------------------------------------------------------------------------- | | **`req`** | The Express `request` object containing the currently authenticated `user` | -| **`id`** | `id` of the document being updated | -| **`data`** | The full data passed to update the document. | -| **`siblingData`** | Immediately adjacent field data passed to update the document with. | -| **`doc`** | The full document data, before the update is applied. | +| **`id`** | `id` of the document being updated | +| **`data`** | The full data passed to update the document. | +| **`siblingData`** | Immediately adjacent field data passed to update the document with. | +| **`doc`** | The full document data, before the update is applied. | diff --git a/docs/access-control/globals.mdx b/docs/access-control/globals.mdx index bdb73b9fa..cd8f8673e 100644 --- a/docs/access-control/globals.mdx +++ b/docs/access-control/globals.mdx @@ -8,30 +8,35 @@ keywords: globals, access control, permissions, documentation, Content Managemen You can define Global-level Access Control within each Global's `access` property. All Access Control functions accept one `args` argument. -**Available argument properties: +\*\*Available argument properties: ## Available Controls -| Function | Allows/Denies Access | -| ------------------------ | -------------------- | -| **[`read`](#read)** | Used in the `findOne` Global operation | -| **[`update`](#update)** | Used in the `update` Global operation | +| Function | Allows/Denies Access | +| ----------------------- | -------------------------------------- | +| **[`read`](#read)** | Used in the `findOne` Global operation | +| **[`update`](#update)** | Used in the `update` Global operation | **Example Global config:** + ```ts -import { GlobalConfig } from 'payload/types'; +import { GlobalConfig } from 'payload/types' const Header: GlobalConfig = { - slug: "header", + slug: 'header', // highlight-start access: { - read: ({ req: { user } }) => { /* */ }, - update: ({ req: { user } }) => { /* */ }, + read: ({ req: { user } }) => { + /* */ + }, + update: ({ req: { user } }) => { + /* */ + }, }, // highlight-end -}; +} -export default Header; +export default Header ``` ### Read @@ -40,8 +45,8 @@ Returns a boolean result or optionally a [query constraint](/docs/queries/overvi **Available argument properties:** -| Option | Description | -| --------- | ----------- | +| Option | Description | +| --------- | -------------------------------------------------------------------------- | | **`req`** | The Express `request` object containing the currently authenticated `user` | ### Update @@ -50,7 +55,7 @@ Returns a boolean result or optionally a [query constraint](/docs/queries/overvi **Available argument properties:** -| Option | Description | -| ---------- | ----------- | +| Option | Description | +| ---------- | -------------------------------------------------------------------------- | | **`req`** | The Express `request` object containing the currently authenticated `user` | -| **`data`** | The data passed to update the global with. | +| **`data`** | The data passed to update the global with. | diff --git a/docs/access-control/overview.mdx b/docs/access-control/overview.mdx index 7d5a51106..03d8596a2 100644 --- a/docs/access-control/overview.mdx +++ b/docs/access-control/overview.mdx @@ -8,10 +8,7 @@ keywords: overview, access control, permissions, documentation, Content Manageme Access control within Payload is extremely powerful while remaining easy and intuitive to manage. Declaring who should have access to what documents is no more complex than writing a simple JavaScript function that either returns a `boolean` or a [`query`](/docs/queries/overview) constraint to restrict which documents users can interact with. - + **Example use cases:** @@ -32,13 +29,18 @@ Access control within Payload is extremely powerful while remaining easy and int const defaultPayloadAccess = ({ req: { user } }) => { // Return `true` if a user is found // and `false` if it is undefined or null - return Boolean(user); + return Boolean(user) } ``` - Note:
- In the Local API, all Access Control functions are skipped by default, allowing your server to do whatever it needs. But, you can opt back in by setting the option overrideAccess to false. + Note: +
+ In the Local API, all Access Control functions are skipped by default, allowing your server to do + whatever it needs. But, you can opt back in by setting the option + overrideAccess + {' '} + to false.
### Access Control Types @@ -49,12 +51,13 @@ You can manage access within Payload on three different levels: - [Fields](/docs/access-control/fields) - [Globals](/docs/access-control/globals) - ### When Access Control is Executed - Note:
- Access control functions are utilized in two places. It's important to understand how and when your access control is executed. + Note: +
+ Access control functions are utilized in two places. It's important to understand how and when + your access control is executed.
#### As you execute operations @@ -70,8 +73,11 @@ To accomplish this, Payload ships with an `Access` operation, which is executed ### Argument Availability - Important:
- When your access control functions are executed via the access operation, the id and data arguments will be undefined, because Payload is executing your functions without referencing a specific document. + Important: +
+ When your access control functions are executed via the access operation, the{' '} + id and data arguments will be undefined, + because Payload is executing your functions without referencing a specific document.
If you use `id` or `data` within your access control functions, make sure to check that they are defined first. If they are not, then you can assume that your access control is being executed via the `access` operation, to determine solely what the user can do within the Admin UI. diff --git a/docs/admin/components.mdx b/docs/admin/components.mdx index 60c37110f..22f220e33 100644 --- a/docs/admin/components.mdx +++ b/docs/admin/components.mdx @@ -11,8 +11,10 @@ While designing the Payload Admin panel, we determined it should be as minimal a To swap in your own React component, first, consult the list of available component overrides below. Determine the scope that corresponds to what you are trying to accomplish, and then author your React component accordingly. - Tip:
- Custom components will automatically be provided with all props that the default component would accept. + Tip: +
+ Custom components will automatically be provided with all props that the default component would + accept.
### Base Component Overrides @@ -41,7 +43,7 @@ You can override a set of admin panel-wide components by providing a component t `payload.config.js` ```ts -import { buildConfig } from "payload/config"; +import { buildConfig } from 'payload/config' import { MyCustomNav, MyCustomLogo, @@ -49,7 +51,7 @@ import { MyCustomAccount, MyCustomDashboard, MyProvider, -} from "./customComponents"; +} from './customComponents' export default buildConfig({ admin: { @@ -66,7 +68,7 @@ export default buildConfig({ providers: [MyProvider], }, }, -}); +}) ``` _For more examples regarding how to customize components, look at the following [examples](https://github.com/payloadcms/payload/tree/master/test/admin/components)._ @@ -93,20 +95,17 @@ You can override components on a Collection-by-Collection basis via each Collect ```tsx // Custom Buttons -import * as React from "react"; +import * as React from 'react' import { CustomSaveButtonProps, CustomSaveDraftButtonProps, CustomPublishButtonProps, CustomPreviewButtonProps, -} from "payload/types"; +} from 'payload/types' -export const CustomSaveButton: CustomSaveButtonProps = ({ - DefaultButton, - label, -}) => { - return ; -}; +export const CustomSaveButton: CustomSaveButtonProps = ({ DefaultButton, label }) => { + return +} export const CustomSaveDraftButton: CustomSaveDraftButtonProps = ({ DefaultButton, @@ -114,10 +113,8 @@ export const CustomSaveDraftButton: CustomSaveDraftButtonProps = ({ label, saveDraft, }) => { - return ( - - ); -}; + return +} export const CustomPublishButton: CustomPublishButtonProps = ({ DefaultButton, @@ -125,8 +122,8 @@ export const CustomPublishButton: CustomPublishButtonProps = ({ label, publish, }) => { - return ; -}; + return +} export const CustomPreviewButton: CustomPreviewButtonProps = ({ DefaultButton, @@ -134,8 +131,8 @@ export const CustomPreviewButton: CustomPreviewButtonProps = ({ label, preview, }) => { - return ; -}; + return +} ``` ##### Custom Collection List View Example @@ -162,17 +159,17 @@ export const MyCollection: CollectionConfig = { MyListComponent.tsx ```tsx -import React from "react"; -import { List, type Props } from "payload/components/views/List"; // Payload's default List view component and its props +import React from 'react' +import { List, type Props } from 'payload/components/views/List' // Payload's default List view component and its props export const MyListComponent: React.FC = (props) => (

- Some text before the default list view component. If you just want to do - that, you can also use the admin.components.list.BeforeList hook + Some text before the default list view component. If you just want to do that, you can also + use the admin.components.list.BeforeList hook

-); +) ``` ### Globals @@ -194,10 +191,9 @@ All Payload fields support the ability to swap in your own React components. So, Tip:
- Don't see a built-in field type that you need? Build it! Using a combination - of custom validation and custom components, you can override the entirety of - how a component functions within the admin panel and effectively create your - own field type. + Don't see a built-in field type that you need? Build it! Using a combination of custom validation + and custom components, you can override the entirety of how a component functions within the admin + panel and effectively create your own field type.
**Fields support the following custom components:** @@ -223,15 +219,15 @@ These are the props that will be passed to your custom Cell to use in your own c #### Example ```tsx -import React from "react"; -import "./index.scss"; -const baseClass = "custom-cell"; +import React from 'react' +import './index.scss' +const baseClass = 'custom-cell' const CustomCell: React.FC = (props) => { - const { field, colIndex, collection, cellData, rowData } = props; + const { field, colIndex, collection, cellData, rowData } = props - return {cellData}; -}; + return {cellData} +} ``` ## Field Component @@ -243,25 +239,22 @@ When writing your own custom components you can make use of a number of hooks to When swapping out the `Field` component, you'll be responsible for sending and receiving the field's `value` from the form itself. To do so, import the `useField` hook as follows: ```tsx -import { useField } from "payload/components/forms"; +import { useField } from 'payload/components/forms' -type Props = { path: string }; +type Props = { path: string } const CustomTextField: React.FC = ({ path }) => { // highlight-start - const { value, setValue } = useField({ path }); + const { value, setValue } = useField({ path }) // highlight-end - return ( - setValue(e.target.value)} value={value.path} /> - ); -}; + return setValue(e.target.value)} value={value.path} /> +} ``` - For more information regarding the hooks that are available to you while you - build custom components, including the useField hook, [click - here](/docs/admin/hooks). + For more information regarding the hooks that are available to you while you build custom + components, including the useField hook, [click here](/docs/admin/hooks). ## Custom routes @@ -292,9 +285,8 @@ Your custom route components will be given all the props that a React Router ` Note:
- It's up to you to secure your custom routes. If your route requires a user to - be logged in or to have certain access rights, you should handle that within - your route component yourself. + It's up to you to secure your custom routes. If your route requires a user to be logged in or to + have certain access rights, you should handle that within your route component yourself. #### Example @@ -311,8 +303,8 @@ To see how to pass in your custom views to create custom routes of your own, tak As your admin customizations gets more complex you may want to share state between fields or other components. You can add custom providers to do add your own context to any Payload app for use in other custom components within the admin panel. Within your config add `admin.components.providers`, these can be used to share context or provide other custom functionality. Read the [React context](https://reactjs.org/docs/context.html) docs to learn more. - Reminder: Don't forget to pass the **children** prop through - the provider component for the admin UI to show + Reminder: Don't forget to pass the **children** prop through the provider + component for the admin UI to show ### Styling Custom Components @@ -332,21 +324,21 @@ When developing custom components you can support multiple languages to be consi For example: ```tsx -import { useTranslation } from "react-i18next"; +import { useTranslation } from 'react-i18next' const CustomComponent: React.FC = () => { // highlight-start - const { t, i18n } = useTranslation("namespace1"); + const { t, i18n } = useTranslation('namespace1') // highlight-end return (
    -
  • {t("key", { variable: "value" })}
  • -
  • {t("namespace2:key", { variable: "value" })}
  • +
  • {t('key', { variable: 'value' })}
  • +
  • {t('namespace2:key', { variable: 'value' })}
  • {i18n.language}
- ); -}; + ) +} ``` ### Getting the current locale @@ -354,18 +346,18 @@ const CustomComponent: React.FC = () => { In any custom component you can get the selected locale with `useLocale` hook. `useLocale` returns the full locale object, consisting of a `label`, `rtl`(right-to-left) property, and then `code`. Here is a simple example: ```tsx -import { useLocale } from "payload/components/utilities"; +import { useLocale } from 'payload/components/utilities' const Greeting: React.FC = () => { // highlight-start - const locale = useLocale(); + const locale = useLocale() // highlight-end const trans = { - en: "Hello", - es: "Hola", - }; + en: 'Hello', + es: 'Hola', + } return {trans[locale.code]} -}; +} ``` diff --git a/docs/admin/customizing-css.mdx b/docs/admin/customizing-css.mdx index 85c79c8f5..1592418b5 100644 --- a/docs/admin/customizing-css.mdx +++ b/docs/admin/customizing-css.mdx @@ -13,15 +13,16 @@ You can add your own CSS by providing your base Payload config with a path to yo To do so, provide your base Payload config with a path to your own stylesheet. It can be either a CSS or SCSS file. **Example in payload.config.js:** + ```ts -import { buildConfig } from 'payload/config'; -import path from 'path'; +import { buildConfig } from 'payload/config' +import path from 'path' const config = buildConfig({ - admin: { - css: path.resolve(__dirname, 'relative/path/to/stylesheet.scss'), - }, -}); + admin: { + css: path.resolve(__dirname, 'relative/path/to/stylesheet.scss'), + }, +}) ``` ### Overriding built-in styles @@ -43,7 +44,8 @@ You can find the built-in Payload CSS variables within [`./src/admin/scss/app.sc #### Dark mode - If you're overriding colors or theme elevations, make sure to consider how your changes will affect dark mode. + If you're overriding colors or theme elevations, make sure to consider how your changes will + affect dark mode. By default, Payload automatically overrides all `--theme-elevation`s and inverts all success / warning / error shades to suit dark mode. We also update some base theme variables like `--theme-bg`, `--theme-text`, etc. diff --git a/docs/admin/hooks.mdx b/docs/admin/hooks.mdx index 3c498db6a..ea4b21903 100644 --- a/docs/admin/hooks.mdx +++ b/docs/admin/hooks.mdx @@ -24,7 +24,7 @@ const CustomTextField: React.FC = ({ path }) => { const { value, setValue } = useField({ path }) // highlight-end - return setValue(e.target.value)} value={value.path} /> + return setValue(e.target.value)} value={value.path} /> } ``` @@ -57,7 +57,8 @@ const { There are times when a custom field component needs to have access to data from other fields, and you have a few options to do so. The `useFormFields` hook is a powerful and highly performant way to retrieve a form's field state, as well as to retrieve the `dispatchFields` method, which can be helpful for setting other fields' form states from anywhere within a form. - This hook is great for retrieving only certain fields from form state because it ensures that it will only cause a rerender when the items that you ask for change. + This hook is great for retrieving only certain fields from form state because it + ensures that it will only cause a rerender when the items that you ask for change. Thanks to the awesome package [`use-context-selector`](https://github.com/dai-shi/use-context-selector), you can retrieve a specific field's state easily. This is ideal because you can ensure you have an up-to-date field state, and your component will only re-render when _that field's state_ changes. @@ -65,21 +66,19 @@ Thanks to the awesome package [`use-context-selector`](https://github.com/dai-sh You can pass a Redux-like selector into the hook, which will ensure that you retrieve only the field that you want. The selector takes an argument with type of `[fields: Fields, dispatch: React.Dispatch]]`. ```tsx -import { useFormFields } from 'payload/components/forms'; +import { useFormFields } from 'payload/components/forms' const MyComponent: React.FC = () => { // Get only the `amount` field state, and only cause a rerender when that field changes - const amount = useFormFields(([fields, dispatch]) => fields.amount); + const amount = useFormFields(([fields, dispatch]) => fields.amount) // Do the same thing as above, but to the `feePercentage` field - const feePercentage = useFormFields(([fields, dispatch]) => fields.feePercentage); + const feePercentage = useFormFields(([fields, dispatch]) => fields.feePercentage) if (typeof amount?.value !== 'undefined' && typeof feePercentage?.value !== 'undefined') { - return ( - The fee is ${(amount.value * feePercentage.value) / 100} - ); + return The fee is ${(amount.value * feePercentage.value) / 100} } -}; +} ``` ### useAllFormFields @@ -117,7 +116,7 @@ If you are building a custom component, then you should use `setValue` which is You can send the following actions to the `dispatchFields` function. | Action | Description | -|------------------------|----------------------------------------------------------------------------| +| ---------------------- | -------------------------------------------------------------------------- | | **`ADD_ROW`** | Adds a row of data (useful in array / block field data) | | **`DUPLICATE_ROW`** | Duplicates a row of data (useful in array / block field data) | | **`MODIFY_CONDITION`** | Updates a field's conditional logic result (true / false) | @@ -134,8 +133,12 @@ To see types for each action supported within the `dispatchFields` hook, check o The `useForm` hook can be used to interact with the form itself, and sends back many methods that can be used to reactively fetch form state without causing rerenders within your components each time a field is changed. This is useful if you have action-based callbacks that your components fire, and need to interact with form state _based on a user action_. - Warning:
- This hook is optimized to avoid causing rerenders when fields change, and as such, its `fields` property will be out of date. You should only leverage this hook if you need to perform actions against the form in response to your users' actions. Do not rely on its returned "fields" as being up-to-date. They will be removed from this hook's response in an upcoming version. + Warning: +
+ This hook is optimized to avoid causing rerenders when fields change, and as such, its `fields` + property will be out of date. You should only leverage this hook if you need to perform actions + against the form in response to your users' actions. Do not rely on its returned "fields" as being + up-to-date. They will be removed from this hook's response in an upcoming version.
The `useForm` hook returns an object with the following properties: | @@ -358,10 +361,14 @@ The `useForm` hook returns an object with the following properties: | ]} /> -
+{' '} -
-{`import { useForm } from "payload/components/forms";
+
+ +{' '} + +
+  {`import { useForm } from "payload/components/forms";
 
 export const CustomArrayManager = () => {
   const { addFieldRow } = useForm()
@@ -385,7 +392,7 @@ export const CustomArrayManager = () => {
     
   )
 }`}
-  
+

An example config to go along with the custom component

@@ -456,10 +463,14 @@ export const CustomArrayManager = () => {
     ]}
   />
 
-  
+{' '} -
-{`import { useForm } from "payload/components/forms";
+
+ +{' '} + +
+  {`import { useForm } from "payload/components/forms";
 
 export const CustomArrayManager = () => {
   const { removeFieldRow } = useForm()
@@ -478,7 +489,7 @@ export const CustomArrayManager = () => {
     
   )
 }`}
-  
+

An example config to go along with the custom component

@@ -557,10 +568,14 @@ export const CustomArrayManager = () => {
     ]}
   />
 
-  
+{' '} -
-{`import { useForm } from "payload/components/forms";
+
+ +{' '} + +
+  {`import { useForm } from "payload/components/forms";
 
 export const CustomArrayManager = () => {
   const { replaceFieldRow } = useForm()
@@ -584,7 +599,7 @@ export const CustomArrayManager = () => {
     
   )
 }`}
-  
+

An example config to go along with the custom component

@@ -624,40 +639,40 @@ export const CustomArrayManager = () => {
 
 The `useDocumentInfo` hook provides lots of information about the document currently being edited, including the following:
 
-| Property                  | Description                                                                                                        |
-|---------------------------|--------------------------------------------------------------------------------------------------------------------|                                |
-| **`collection`**          | If the doc is a collection, its collection config will be returned                                                 |
-| **`global`**              | If the doc is a global, its global config will be returned                                                         |
-| **`id`**                  | If the doc is a collection, its ID will be returned                                                                |
-| **`preferencesKey`**      | The `preferences` key to use when interacting with document-level user preferences                                 |
-| **`versions`**            | Versions of the current doc                                                                                        |
-| **`unpublishedVersions`** | Unpublished versions of the current doc                                                                            |
-| **`publishedDoc`**        | The currently published version of the doc being edited                                                            |
-| **`getVersions`**         | Method to trigger the retrieval of document versions                                                               |
-| **`docPermissions`**      | The current documents permissions. Collection document permissions fallback when no id is present (i.e. on create) |
-| **`getDocPermissions`**   | Method to trigger the retrieval of document level permissions                                                      |
+| Property | Description |
+|---------------------------|--------------------------------------------------------------------------------------------------------------------| |
+| **`collection`** | If the doc is a collection, its collection config will be returned |
+| **`global`** | If the doc is a global, its global config will be returned |
+| **`id`** | If the doc is a collection, its ID will be returned |
+| **`preferencesKey`** | The `preferences` key to use when interacting with document-level user preferences |
+| **`versions`** | Versions of the current doc |
+| **`unpublishedVersions`** | Unpublished versions of the current doc |
+| **`publishedDoc`** | The currently published version of the doc being edited |
+| **`getVersions`** | Method to trigger the retrieval of document versions |
+| **`docPermissions`** | The current documents permissions. Collection document permissions fallback when no id is present (i.e. on create) |
+| **`getDocPermissions`** | Method to trigger the retrieval of document level permissions |
 
 **Example:**
 
 ```tsx
-import { useDocumentInfo } from 'payload/components/utilities';
+import { useDocumentInfo } from 'payload/components/utilities'
 
 const LinkFromCategoryToPosts: React.FC = () => {
   // highlight-start
-  const { id } = useDocumentInfo();
+  const { id } = useDocumentInfo()
   // highlight-end
 
   // id will be undefined on the create form
   if (!id) {
-    return null;
+    return null
   }
 
   return (
-    
+    
       View posts
     
   )
-};
+}
 ```
 
 ### useLocale
@@ -665,22 +680,20 @@ const LinkFromCategoryToPosts: React.FC = () => {
 In any custom component you can get the selected locale object with the `useLocale` hook. `useLocale`gives you the full locale object, consisting of a `label`, `rtl`(right-to-left) property, and then `code`. Here is a simple example:
 
 ```tsx
-import { useLocale } from 'payload/components/utilities';
+import { useLocale } from 'payload/components/utilities'
 
 const Greeting: React.FC = () => {
   // highlight-start
-  const locale = useLocale();
+  const locale = useLocale()
   // highlight-end
 
   const trans = {
     en: 'Hello',
     es: 'Hola',
-  };
+  }
 
-  return (
-     { trans[locale.code] } 
-  );
-};
+  return  {trans[locale.code]} 
+}
 ```
 
 ### useAuth
@@ -688,7 +701,7 @@ const Greeting: React.FC = () => {
 Useful to retrieve info about the currently logged in user as well as methods for interacting with it. It sends back an object with the following properties:
 
 | Property                 | Description                                                                             |
-|--------------------------|-----------------------------------------------------------------------------------------|
+| ------------------------ | --------------------------------------------------------------------------------------- |
 | **`user`**               | The currently logged in user                                                            |
 | **`logOut`**             | A method to log out the currently logged in user                                        |
 | **`refreshCookie`**      | A method to trigger the silent refreshing of a user's auth token                        |
@@ -698,18 +711,16 @@ Useful to retrieve info about the currently logged in user as well as methods fo
 | **`permissions`**        | The permissions of the current user                                                     |
 
 ```tsx
-import { useAuth } from 'payload/components/utilities';
-import { User } from '../payload-types.ts';
+import { useAuth } from 'payload/components/utilities'
+import { User } from '../payload-types.ts'
 
 const Greeting: React.FC = () => {
   // highlight-start
-  const { user } = useAuth();
+  const { user } = useAuth()
   // highlight-end
 
-  return (
-    Hi, {user.email}!
-  );
-};
+  return Hi, {user.email}!
+}
 ```
 
 ### useConfig
@@ -717,17 +728,15 @@ const Greeting: React.FC = () => {
 Used to easily fetch the full Payload config.
 
 ```tsx
-import { useConfig } from 'payload/components/utilities';
+import { useConfig } from 'payload/components/utilities'
 
 const MyComponent: React.FC = () => {
   // highlight-start
-  const config = useConfig();
+  const config = useConfig()
   // highlight-end
 
-  return (
-    {config.serverURL}
-  );
-};
+  return {config.serverURL}
+}
 ```
 
 ### useEditDepth
@@ -735,16 +744,14 @@ const MyComponent: React.FC = () => {
 Sends back how many editing levels "deep" the current component is. Edit depth is relevant while adding new documents / editing documents in modal windows and other cases.
 
 ```tsx
-import { useEditDepth } from 'payload/components/utilities';
+import { useEditDepth } from 'payload/components/utilities'
 
 const MyComponent: React.FC = () => {
   // highlight-start
-  const editDepth = useEditDepth();
+  const editDepth = useEditDepth()
   // highlight-end
 
-  return (
-    My component is {editDepth} levels deep
-  )
+  return My component is {editDepth} levels deep
 }
 ```
 
diff --git a/docs/admin/overview.mdx b/docs/admin/overview.mdx
index c042974b0..420d9ee74 100644
--- a/docs/admin/overview.mdx
+++ b/docs/admin/overview.mdx
@@ -11,9 +11,9 @@ Payload dynamically generates a beautiful, fully functional React admin panel to
 The Payload Admin panel is built with Webpack, code-split, highly performant (even with 100+ fields), and written fully in TypeScript.
 
 
-  The Admin panel is meant to be simple enough to give you a starting point but
-  not bring too much complexity, so that you can easily customize it to suit the
-  needs of your application and your editors.
+  The Admin panel is meant to be simple enough to give you a starting point but not bring too much
+  complexity, so that you can easily customize it to suit the needs of your application and your
+  editors.
 
 
 ![Payload's Admin panel built in React](https://payloadcms.com/images/docs/admin.jpg)
@@ -25,7 +25,7 @@ _Screenshot of the Admin panel while editing a document from an example `AllFiel
 All options for the Admin panel are defined in your base Payload config file.
 
 | Option                | Description                                                                                                                                                                                                                                                  |
-|-----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
 | `user`                | The `slug` of a Collection that you want be used to log in to the Admin dashboard. [More](/docs/admin/overview#the-admin-user-collection)                                                                                                                    |
 | `buildPath`           | Specify an absolute path for where to store the built Admin panel bundle used in production. Defaults to `path.resolve(process.cwd(), 'build')`.                                                                                                             |
 | `meta`                | Base meta data to use for the Admin panel. Included properties are `titleSuffix`, `ogImage`, and `favicon`.                                                                                                                                                  |
@@ -55,13 +55,13 @@ To specify which Collection to use to log in to the Admin panel, pass the `admin
 `payload.config.js`:
 
 ```ts
-import { buildConfig } from "payload/config";
+import { buildConfig } from 'payload/config'
 
 const config = buildConfig({
   admin: {
-    user: "admins", // highlight-line
+    user: 'admins', // highlight-line
   },
-});
+})
 ```
 
 By default, if you have not specified a Collection, Payload will automatically provide you with a `User` Collection which will be used to access the Admin panel. You can customize or override the fields and settings of the default `User` Collection by passing your own collection using `users` as its `slug` to Payload. When this is done, Payload will use your provided `User` Collection instead of its default version.
diff --git a/docs/admin/preferences.mdx b/docs/admin/preferences.mdx
index 4343acde6..b4f8ce491 100644
--- a/docs/admin/preferences.mdx
+++ b/docs/admin/preferences.mdx
@@ -15,8 +15,10 @@ Out of the box, Payload handles the persistence of your users' preferences in a
 1. The "collapsed" state of blocks, on a document level, as users edit or interact with documents
 
 
-	Important:
- All preferences are stored on an individual user basis. Payload automatically recognizes the user that is reading or setting a preference via all provided authentication methods. + Important: +
+ All preferences are stored on an individual user basis. Payload automatically recognizes the user + that is reading or setting a preference via all provided authentication methods.
### Use cases @@ -33,7 +35,7 @@ This API is used significantly for internal operations of the Admin panel, as me Payload automatically creates an internally used `payload-preferences` collection that stores user preferences. Each document in the `payload-preferences` collection contains the following shape: | Key | Value | -|-------------------|-------------------------------------------------------------------| +| ----------------- | ----------------------------------------------------------------- | | `id` | A unique ID for each preference stored. | | `key` | A unique `key` that corresponds to the preference. | | `user.value` | The ID of the `user` that is storing its preference. | diff --git a/docs/admin/webpack.mdx b/docs/admin/webpack.mdx index ddfa1599f..5e87c4f28 100644 --- a/docs/admin/webpack.mdx +++ b/docs/admin/webpack.mdx @@ -11,20 +11,21 @@ Payload uses Webpack 5 to build the Admin panel. It comes with support for many To extend the Webpack config, add the `webpack` key to your base Payload config, and provide a function that accepts the default Webpack config as its only argument: `payload.config.ts` + ```ts -import { buildConfig } from 'payload/config'; +import { buildConfig } from 'payload/config' export default buildConfig({ - admin: { - // highlight-start - webpack: (config) => { - // Do something with the config here + admin: { + // highlight-start + webpack: (config) => { + // Do something with the config here - return config; - } - // highlight-end - } -}); + return config + }, + // highlight-end + }, +}) ``` ### Aliasing server-only modules @@ -43,73 +44,84 @@ Examples of **non** browser-friendly packages: You may rely on server-only packages such as the above to perform logic in access control functions, hooks, and other contexts (which is great!) but when you boot up your Payload app and try to view it in the browser, you'll likely run into missing dependency issues or other general incompatibilities. - Tip:
- To avoid problems with server code making it to your Webpack bundle, you can use the alias Webpack feature to tell Webpack to avoid importing the modules you want to restrict to server-only. + Tip: +
+ To avoid problems with server code making it to your Webpack bundle, you can use the{' '} + alias Webpack feature to tell Webpack to avoid importing the modules you want to + restrict to server-only.
-For example, let's say that you have a Collection called `Subscriptions` which relies on Stripe: + + For example, let's say that you have a Collection called `Subscriptions` which relies on Stripe: + -

+
+
`collections/Subscriptions/index.js` + ```ts -import { CollectionConfig } from 'payload/types'; -import createStripeSubscription from './hooks/createStripeSubscription'; +import { CollectionConfig } from 'payload/types' +import createStripeSubscription from './hooks/createStripeSubscription' export const Subscription: CollectionConfig = { - slug: 'subscriptions', - hooks: { - beforeChange: [ - createStripeSubscription, - ] - }, - fields: [ - { - name: 'stripeSubscriptionID', - type: 'text', - required: true, - } - ] -}; + slug: 'subscriptions', + hooks: { + beforeChange: [createStripeSubscription], + }, + fields: [ + { + name: 'stripeSubscriptionID', + type: 'text', + required: true, + }, + ], +} ``` The collection above features a `beforeChange` hook that creates a Stripe subscription whenever a Subscription document is created in Payload. That hook might look something like this: -

+
+
`collections/Subscriptions/hooks/createStripeSubscription.js` -```js -import Stripe from 'stripe'; -const stripe = new Stripe(process.env.STRIPE_SECRET_KEY); +```js +import Stripe from 'stripe' + +const stripe = new Stripe(process.env.STRIPE_SECRET_KEY) const createStripeSubscription = async ({ data, operation }) => { - if (operation === 'create') { - const dataWithStripeID = {...data}; + if (operation === 'create') { + const dataWithStripeID = { ...data } - // use Stripe to create a Stripe subscription - const subscription = await stripe.subscriptions.create({ - // Configure the subscription accordingly - }); + // use Stripe to create a Stripe subscription + const subscription = await stripe.subscriptions.create({ + // Configure the subscription accordingly + }) - // Automatically add the Stripe subscription ID - // to the data that will be saved to this Subscription doc - dataWithStripeID.stripeSubscriptionID = subscription.id; + // Automatically add the Stripe subscription ID + // to the data that will be saved to this Subscription doc + dataWithStripeID.stripeSubscriptionID = subscription.id return dataWithStripeID - } + } - return data; + return data } -export default createStripeSubscription; +export default createStripeSubscription ``` - Warning:
- The above code is NOT production-ready and should not be referenced to create Stripe subscriptions. Although creating a beforeChange hook is a completely valid spot to do things like create subscriptions, the code above is incomplete and insecure, meant for explanation purposes only. + Warning: +
+ The above code is NOT production-ready and should not be referenced to create Stripe + subscriptions. Although creating a beforeChange hook is a completely valid spot to do things like + create subscriptions, the code above is incomplete and insecure, meant for explanation purposes + only.
**As-is, this collection will prevent your Admin panel from bundling or loading correctly, because Stripe relies on some Node-only packages.** @@ -117,52 +129,61 @@ export default createStripeSubscription; To remedy this issue you can extend the Payload Webpack config to alias your entire `createStripeSubscription` hook to a separate, empty mock file. Example in `payload.config.js`: -```js -import { buildConfig } from 'payload/config'; -import path from 'path'; -import Subscription from './collections/Subscription'; -const createStripeSubscriptionPath = path.resolve(__dirname, 'collections/Subscription/hooks/createStripeSubscription.js'); -const mockModulePath = path.resolve(__dirname, 'mocks/emptyObject.js'); +```js +import { buildConfig } from 'payload/config' +import path from 'path' +import Subscription from './collections/Subscription' + +const createStripeSubscriptionPath = path.resolve( + __dirname, + 'collections/Subscription/hooks/createStripeSubscription.js', +) +const mockModulePath = path.resolve(__dirname, 'mocks/emptyObject.js') export default buildConfig({ - collections: [ - Subscription - ], - admin: { - webpack: (config) => ({ - ...config, - resolve: { - ...config.resolve, - alias: { - ...config.resolve.alias, - [createStripeSubscriptionPath]: mockModulePath, - } - } - }) - } -}); + collections: [Subscription], + admin: { + webpack: (config) => ({ + ...config, + resolve: { + ...config.resolve, + alias: { + ...config.resolve.alias, + [createStripeSubscriptionPath]: mockModulePath, + }, + }, + }), + }, +}) ``` The above code will alias the file at path `createStripeSubscriptionPath` to a mocked module, which might look like this: `mocks/emptyObject.js` + ```js -export default {}; +export default {} ``` Now, when Webpack sees that you're attempting to import your `createStripeSubscriptionPath` file, it'll disregard that actual file and load your mock file instead. Not only will your Admin panel now bundle successfully, you will have optimized its filesize by removing unnecessary code! And you might have learned something about Webpack, too. - Tip:
- If changes to your Webpack aliases are not surfacing, they might be [cached](https://webpack.js.org/configuration/cache/) in `node_modules/.cache/webpack`. Try deleting that folder and restarting your server. + Tip: +
+ If changes to your Webpack aliases are not surfacing, they might be + [cached](https://webpack.js.org/configuration/cache/) in `node_modules/.cache/webpack`. Try + deleting that folder and restarting your server.
## Admin environment vars - Important:
- Be careful about what variables you provide to your client-side code. Analyze every single one to make sure that you're not accidentally leaking anything that an attacker could exploit. Only keys that are safe to be available to everyone in plain text should be provided to your Admin panel. + Important: +
+ Be careful about what variables you provide to your client-side code. Analyze every single one to + make sure that you're not accidentally leaking anything that an attacker could exploit. Only keys + that are safe to be available to everyone in plain text should be provided to your Admin panel.
By default, `env` variables are **not** provided to the Admin panel for security and safety reasons. But, Payload provides you with a way to still provide `env` vars to your frontend code. diff --git a/docs/authentication/config.mdx b/docs/authentication/config.mdx index 92b6d0a31..5e1f92bc4 100644 --- a/docs/authentication/config.mdx +++ b/docs/authentication/config.mdx @@ -41,8 +41,8 @@ Technically, both of these options will work for third-party integrations but th To enable API keys on a collection, set the `useAPIKey` auth option to `true`. From there, a new interface will appear in the Admin panel for each document within the collection that allows you to generate an API key for each user in the Collection. - User API keys are encrypted within the database, meaning that if your database - is compromised, your API keys will not be. + User API keys are encrypted within the database, meaning that if your database is compromised, + your API keys will not be. #### Authenticating via API Key @@ -52,31 +52,31 @@ To authenticate REST or GraphQL API requests using an API key, set the `Authoriz **For example, using Fetch:** ```ts -import User from '../collections/User'; +import User from '../collections/User' -const response = await fetch("http://localhost:3000/api/pages", { +const response = await fetch('http://localhost:3000/api/pages', { headers: { Authorization: `${User.slug} API-Key ${YOUR_API_KEY}`, }, -}); +}) ``` Payload ensures that the same, uniform access control is used across all authentication strategies. This enables you to utilize your existing access control configurations with both API keys and the standard email/password authentication. This consistency can aid in maintaining granular control over your API keys. -#### API Key *Only* Authentication +#### API Key _Only_ Authentication If you want to use API keys as the only authentication method for a collection, you can disable the default local strategy by setting `disableLocalStrategy` to `true` on the collection's `auth` property. This will disable the ability to authenticate with email and password, and will only allow for authentication via API key. ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const Customers: CollectionConfig = { slug: 'customers', auth: { useAPIKey: true, disableLocalStrategy: true, - } -}; + }, +} ``` ### Forgot Password @@ -90,17 +90,16 @@ Function that accepts one argument, containing `{ req, token, user }`, that allo Tip:
- HTML templating can be used to create custom email templates, inline CSS - automatically, and more. You can make a reusable function that standardizes - all email sent from Payload, which makes sending custom emails more DRY. - Payload doesn't ship with an HTML templating engine, so you are free to choose - your own. + HTML templating can be used to create custom email templates, inline CSS automatically, and more. + You can make a reusable function that standardizes all email sent from Payload, which makes + sending custom emails more DRY. Payload doesn't ship with an HTML templating engine, so you are + free to choose your own.
Example: ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const Customers: CollectionConfig = { slug: 'customers', @@ -109,7 +108,7 @@ export const Customers: CollectionConfig = { // highlight-start generateEmailHTML: ({ req, token, user }) => { // Use the token provided to allow your user to reset their password - const resetPasswordURL = `https://yourfrontend.com/reset-password?token=${token}`; + const resetPasswordURL = `https://yourfrontend.com/reset-password?token=${token}` return ` @@ -123,22 +122,21 @@ export const Customers: CollectionConfig = {

- `; - } + ` + }, // highlight-end - } - } -}; + }, + }, +} ``` Important:
- If you specify a different URL to send your users to for resetting their - password, such as a page on the frontend of your app or similar, you need to - handle making the call to the Payload REST or GraphQL reset-password operation - yourself on your frontend, using the token that was provided for you. Above, - it was passed via query parameter. + If you specify a different URL to send your users to for resetting their password, such as a page + on the frontend of your app or similar, you need to handle making the call to the Payload REST or + GraphQL reset-password operation yourself on your frontend, using the token that was provided for + you. Above, it was passed via query parameter.
**`generateEmailSubject`** @@ -173,8 +171,7 @@ Function that accepts one argument, containing `{ req, token, user }`, that allo Example: ```ts -import { CollectionConfig } from 'payload/types'; - +import { CollectionConfig } from 'payload/types' export const Customers: CollectionConfig = { slug: 'customers', @@ -183,24 +180,23 @@ export const Customers: CollectionConfig = { // highlight-start generateEmailHTML: ({ req, token, user }) => { // Use the token provided to allow your user to verify their account - const url = `https://yourfrontend.com/verify?token=${token}`; + const url = `https://yourfrontend.com/verify?token=${token}` - return `Hey ${user.email}, verify your email by clicking here: ${url}`; - } + return `Hey ${user.email}, verify your email by clicking here: ${url}` + }, // highlight-end - } - } -}; + }, + }, +} ``` Important:
- If you specify a different URL to send your users to for email verification, - such as a page on the frontend of your app or similar, you need to handle - making the call to the Payload REST or GraphQL verification operation yourself - on your frontend, using the token that was provided for you. Above, it was - passed via query parameter. + If you specify a different URL to send your users to for email verification, such as a page on the + frontend of your app or similar, you need to handle making the call to the Payload REST or GraphQL + verification operation yourself on your frontend, using the token that was provided for you. + Above, it was passed via query parameter.
**`generateEmailSubject`** @@ -231,9 +227,8 @@ As of Payload `1.0.0`, you can add additional authentication strategies to Paylo Behind the scenes, Payload uses PassportJS to power its local authentication strategy, so most strategies listed on the PassportJS website will work seamlessly. Combined with adding custom components to the admin panel's `Login` view, you can create advanced authentication strategies directly within Payload. - This is an advanced feature, so only attempt this if you are an experienced - developer. Otherwise, just let Payload's built-in authentication handle user - auth for you. + This is an advanced feature, so only attempt this if you are an experienced developer. Otherwise, + just let Payload's built-in authentication handle user auth for you. The `strategies` property is an array that takes objects with the following properties: @@ -250,7 +245,6 @@ However, if you pass a function to `strategy`, `name` is a required property. In either case, Payload will prefix the strategy name with the collection `slug` that the strategy is passed to. - ### Admin autologin For testing and demo purposes you may want to skip forcing the admin user to login in order to access the panel. @@ -259,29 +253,33 @@ The default is that all users will have to login and this should not be enabled #### autoLogin Options -| Option | Description | -| -------------------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **`email`** | The email address of the user to login as | -| **`password`** | The password of the user to login as | -| **`prefillOnly`** | If set to true, the login credentials will be prefilled but the user will still need to click the login button. | +| Option | Description | +| ----------------- | --------------------------------------------------------------------------------------------------------------- | +| **`email`** | The email address of the user to login as | +| **`password`** | The password of the user to login as | +| **`prefillOnly`** | If set to true, the login credentials will be prefilled but the user will still need to click the login button. | The recommended way to use this feature is behind an environment variable to ensure it is disabled when in production. **Example:** ```ts - export default buildConfig({ admin: { user: 'users', // highlight-start - autoLogin: process.env.PAYLOAD_PUBLIC_ENABLE_AUTOLOGIN === 'true' ? { - email: 'test@example.com', - password: 'test', - prefillOnly: true, - } : false, + autoLogin: + process.env.PAYLOAD_PUBLIC_ENABLE_AUTOLOGIN === 'true' + ? { + email: 'test@example.com', + password: 'test', + prefillOnly: true, + } + : false, // highlight-end }, - collections: [ /** */], + collections: [ + /** */ + ], }) ``` diff --git a/docs/authentication/operations.mdx b/docs/authentication/operations.mdx index 89c281c1e..e4b571b62 100644 --- a/docs/authentication/operations.mdx +++ b/docs/authentication/operations.mdx @@ -17,6 +17,7 @@ The Access operation returns what a logged in user can and can't do with the col `GET http://localhost:3000/api/access` Example response: + ```ts { canAccessAdmin: true, @@ -77,6 +78,7 @@ Returns either a logged in user with token or null when there is no logged in us `GET http://localhost:3000/api/[collection-slug]/me` Example response: + ```ts { user: { // The JWT "payload" ;) from the logged in user @@ -108,6 +110,7 @@ query { Accepts an `email` and `password`. On success, it will return the logged in user as well as a token that can be used to authenticate. In the GraphQL and REST APIs, this operation also automatically sets an HTTP-only cookie including the user's token. If you pass an Express `res` to the Local API operation, Payload will set a cookie there as well. **Example REST API login**: + ```ts const res = await fetch('http://localhost:3000/api/[collection-slug]/login', { method: 'POST', @@ -117,10 +120,10 @@ const res = await fetch('http://localhost:3000/api/[collection-slug]/login', { body: JSON.stringify({ email: 'dev@payloadcms.com', password: 'this-is-not-our-password...or-is-it?', - }) + }), }) -const json = await res.json(); +const json = await res.json() // JSON will be equal to the following: /* @@ -168,6 +171,7 @@ const result = await payload.login({ As Payload sets HTTP-only cookies, logging out cannot be done by just removing a cookie in JavaScript, as HTTP-only cookies are inaccessible by JS within the browser. So, Payload exposes a `logout` operation to delete the token in a safe way. **Example REST API logout**: + ```ts const res = await fetch('http://localhost:3000/api/[collection-slug]/logout', { method: 'POST', @@ -194,6 +198,7 @@ This operation requires a non-expired token to send back a new one. If the user' If successful, this operation will automatically renew the user's HTTP-only cookie and will send back the updated token in JSON. **Example REST API token refresh**: + ```ts const res = await fetch('http://localhost:3000/api/[collection-slug]/refresh-token', { method: 'POST', @@ -202,7 +207,7 @@ const res = await fetch('http://localhost:3000/api/[collection-slug]/refresh-tok }, }) -const json = await res.json(); +const json = await res.json() // JSON will be equal to the following: /* @@ -233,7 +238,10 @@ mutation { ``` - The Refresh operation will automatically find the user's token in either a JWT header or the HTTP-only cookie. But, you can specify the token you're looking to refresh by providing the REST API with a `token` within the JSON body of the request, or by providing the GraphQL resolver a `token` arg. + The Refresh operation will automatically find the user's token in either a JWT header or the + HTTP-only cookie. But, you can specify the token you're looking to refresh by providing the REST + API with a `token` within the JSON body of the request, or by providing the GraphQL resolver a + `token` arg. ### Verify by Email @@ -241,13 +249,14 @@ mutation { If your collection supports email verification, the Verify operation will be exposed which accepts a verification token and sets the user's `_verified` property to `true`, thereby allowing the user to authenticate with the Payload API. **Example REST API user verification**: + ```ts const res = await fetch(`http://localhost:3000/api/[collection-slug]/verify/${TOKEN_HERE}`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, -}); +}) ``` **Example GraphQL Mutation**: @@ -274,6 +283,7 @@ If a user locks themselves out and you wish to deliberately unlock them, you can To restrict who is allowed to unlock users, you can utilize the [`unlock`](/docs/access-control/overview#unlock) access control function. **Example REST API unlock**: + ```ts const res = await fetch(`http://localhost:3000/api/[collection-slug]/unlock`, { method: 'POST', @@ -308,6 +318,7 @@ The link to reset the user's password contains a token which is what allows the By default, the Forgot Password operations send users to the Payload Admin panel to reset their password, but you can customize the generated email to send users to the frontend of your app instead by [overriding the email HTML](/docs/authentication/config#forgot-password). **Example REST API Forgot Password**: + ```ts const res = await fetch(`http://localhost:3000/api/[collection-slug]/forgot-password`, { method: 'POST', @@ -317,7 +328,7 @@ const res = await fetch(`http://localhost:3000/api/[collection-slug]/forgot-pass body: JSON.stringify({ email: 'dev@payloadcms.com', }), -}); +}) ``` **Example GraphQL Mutation**: @@ -336,13 +347,18 @@ const token = await payload.forgotPassword({ data: { email: 'dev@payloadcms.com', }, - disableEmail: false // you can disable the auto-generation of email via local API -}); + disableEmail: false, // you can disable the auto-generation of email via local API +}) ``` - Tip:
- You can stop the reset-password email from being sent via using the local API. This is helpful if you need to create user accounts programmatically, but not set their password for them. This effectively generates a reset password token which you can then use to send to a page you create, allowing a user to "complete" their account by setting their password. In the background, you'd use the token to "reset" their password. + Tip: +
+ You can stop the reset-password email from being sent via using the local API. This is helpful if + you need to create user accounts programmatically, but not set their password for them. This + effectively generates a reset password token which you can then use to send to a page you create, + allowing a user to "complete" their account by setting their password. In the background, you'd + use the token to "reset" their password.
### Reset Password @@ -350,6 +366,7 @@ const token = await payload.forgotPassword({ After a user has "forgotten" their password and a token is generated, that token can be used to send to the reset password operation along with a new password which will allow the user to reset their password securely. **Example REST API Reset Password**: + ```ts const res = await fetch(`http://localhost:3000/api/[collection-slug]/reset-password`, { method: 'POST', diff --git a/docs/authentication/overview.mdx b/docs/authentication/overview.mdx index 486c9ab3b..3730407e8 100644 --- a/docs/authentication/overview.mdx +++ b/docs/authentication/overview.mdx @@ -12,13 +12,14 @@ keywords: authentication, config, configuration, overview, documentation, Conten /> - Payload provides for highly secure and customizable user Authentication out of the box, which allows for users to identify themselves to Payload. + Payload provides for highly secure and customizable user Authentication out of the box, which + allows for users to identify themselves to Payload. Authentication is used within the Payload Admin panel itself as well as throughout your app(s) themselves however you determine necessary. ![Authentication admin panel functionality](https://payloadcms.com/images/docs/auth-admin.jpg) -*Admin panel screenshot depicting an Admins Collection with Auth enabled* +_Admin panel screenshot depicting an Admins Collection with Auth enabled_ **Here are some common use cases of Authentication outside of Payload's dashboard itself:** @@ -38,7 +39,7 @@ Every Payload Collection can opt-in to supporting Authentication by specifying t Simple example collection: ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const Admins: CollectionConfig = { slug: 'admins', @@ -56,13 +57,8 @@ export const Admins: CollectionConfig = { name: 'role', type: 'select', required: true, - options: [ - 'user', - 'admin', - 'editor', - 'developer', - ], - } + options: ['user', 'admin', 'editor', 'developer'], + }, ], } ``` @@ -86,8 +82,11 @@ Successfully logging in returns a `JWT` (JSON web token) which is how a user wil You can specify what data gets encoded to the JWT token by setting `saveToJWT` to true in your auth collection fields. If you wish to use a different key other than the field `name`, you can provide it to `saveToJWT` as a string. It is also possible to use `saveToJWT` on fields that are nested in inside groups and tabs. If a group has a `saveToJWT` set it will include the object with all sub-fields in the token. You can set `saveToJWT: false` for any fields you wish to omit. If a field inside a group has `saveToJWT` set, but the group does not, the field will be included at the top level of the token. - Tip:
- You can access the logged-in user from access control functions and hooks via the Express req. The logged-in user is automatically added as the user property. + Tip: +
+ You can access the logged-in user from access control functions and hooks via the Express{' '} + req. The logged-in user is automatically added as the user{' '} + property.
### HTTP-only cookies @@ -107,16 +106,19 @@ Fetch example, including credentials: ```ts const response = await fetch('http://localhost:3000/api/pages', { credentials: 'include', -}); +}) -const pages = await response.json(); +const pages = await response.json() ``` For more about how to automatically include cookies in requests from your app to your Payload API, [click here](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#Sending_a_request_with_credentials_included). - Tip:
- To make sure you have a Payload cookie set properly in your browser after logging in, you can use Chrome's Developer Tools - Application - Cookies - [your-domain-here]. The Chrome Developer tools will still show HTTP-only cookies, even when JavaScript running on the page can't. + Tip: +
+ To make sure you have a Payload cookie set properly in your browser after logging in, you can use + Chrome's Developer Tools - Application - Cookies - [your-domain-here]. The Chrome Developer tools + will still show HTTP-only cookies, even when JavaScript running on the page can't.
### CSRF Protection @@ -128,28 +130,33 @@ For example, let's say you have a very popular app running at coolsite.com. This So, if a user of coolsite.com is logged in and just browsing around on the internet, they might stumble onto a page with bad intentions. That bad page might automatically make requests to all sorts of sites to see if they can find one that they can log into - and coolsite.com might be on their list. If your user was logged in while they visited that evil site, the attacker could do whatever they wanted as if they were your coolsite.com user by just sending requests to the coolsite API (which would automatically include the auth cookie). They could send themselves a bunch of money from your user's account, change the user's password, etc. This is what a CSRF attack is. - To protect against CSRF attacks, Payload only accepts cookie-based authentication from domains that you explicitly whitelist. + + To protect against CSRF attacks, Payload only accepts cookie-based authentication from domains + that you explicitly whitelist. + To define domains that should allow users to identify themselves via the Payload HTTP-only cookie, use the `csrf` option on the base Payload config to whitelist domains that you trust. `payload.config.ts`: + ```ts -import { buildConfig } from 'payload/config'; +import { buildConfig } from 'payload/config' const config = buildConfig({ collections: [ // collections here ], // highlight-start - csrf: [ // whitelist of domains to allow cookie auth from + csrf: [ + // whitelist of domains to allow cookie auth from 'https://your-frontend-app.com', 'https://your-other-frontend-app.com', ], // highlight-end -}); +}) -export default config; +export default config ``` ### Identifying users via the Authorization Header @@ -157,11 +164,12 @@ export default config; In addition to authenticating via an HTTP-only cookie, you can also identify users via the `Authorization` header on an HTTP request. Example: + ```ts const request = await fetch('http://localhost:3000', { headers: { - Authorization: `JWT ${token}` - } + Authorization: `JWT ${token}`, + }, }) ``` diff --git a/docs/authentication/using-middleware.mdx b/docs/authentication/using-middleware.mdx index 945c0a735..c4e7f35be 100644 --- a/docs/authentication/using-middleware.mdx +++ b/docs/authentication/using-middleware.mdx @@ -11,48 +11,47 @@ Because Payload uses your existing Express server, you are free to add whatever This approach has a ton of benefits - it's great for isolation of concerns and limiting scope, but it also means that your additional routes won't have access to Payload's user authentication. - You can make full use of Payload's built-in authentication within your own - custom Express endpoints by adding Payload's authentication middleware. + You can make full use of Payload's built-in authentication within your own custom Express + endpoints by adding Payload's authentication middleware. - Payload must be initialized before the `payload.authenticate` middleware can - be used. This is done by calling `payload.init()` prior to adding the - middleware. + Payload must be initialized before the `payload.authenticate` middleware can be used. This is done + by calling `payload.init()` prior to adding the middleware. Example in `server.js`: ```ts -import express from "express"; -import payload from "payload"; +import express from 'express' +import payload from 'payload' -const app = express(); +const app = express() const start = async () => { await payload.init({ - secret: "PAYLOAD_SECRET_KEY", - mongoURL: "mongodb://localhost/payload", + secret: 'PAYLOAD_SECRET_KEY', + mongoURL: 'mongodb://localhost/payload', express: app, - }); + }) - const router = express.Router(); + const router = express.Router() // Note: Payload must be initialized before the `payload.authenticate` middleware can be used - router.use(payload.authenticate); // highlight-line + router.use(payload.authenticate) // highlight-line - router.get("/", (req, res) => { + router.get('/', (req, res) => { if (req.user) { - return res.send(`Authenticated successfully as ${req.user.email}.`); + return res.send(`Authenticated successfully as ${req.user.email}.`) } - return res.send("Not authenticated"); - }); + return res.send('Not authenticated') + }) - app.use("/some-route-here", router); + app.use('/some-route-here', router) - app.listen(3000); -}; + app.listen(3000) +} -start(); +start() ``` diff --git a/docs/cloud/configuration.mdx b/docs/cloud/configuration.mdx index 7e836805d..161409dae 100644 --- a/docs/cloud/configuration.mdx +++ b/docs/cloud/configuration.mdx @@ -11,10 +11,10 @@ keywords: configuration, config, settings, project, cloud, payload cloud, deploy Once you have created a project, you will need to select your plan. This will determine the resources that are allocated to your project and the features that are available to you. - Note: All Payload Cloud teams that deploy a project require a card on file. - This helps us prevent fraud and abuse on our platform. If you select a plan - with a free trial, you will not be charged until your trial period is over. - We’ll remind you 7 days before your trial ends and you can cancel anytime. + Note: All Payload Cloud teams that deploy a project require a card on file. This helps us prevent + fraud and abuse on our platform. If you select a plan with a free trial, you will not be charged + until your trial period is over. We’ll remind you 7 days before your trial ends and you can cancel + anytime. ### Project Details @@ -44,8 +44,8 @@ If you are deploying a new project from a template, the following settings will Any of the features in Payload Cloud that require environment variables will automatically be provided to your application. If your app requires any custom environment variables, you can set them here. - Note: For security reasons, any variables you wish to provide to the Admin - panel must be prefixed with `PAYLOAD_PUBLIC_`.  Learn more + Note: For security reasons, any variables you wish to provide to the Admin panel must be prefixed + with `PAYLOAD_PUBLIC_`.  Learn more [here](https://payloadcms.com/docs/admin/webpack#admin-environment-vars). @@ -54,9 +54,8 @@ Any of the features in Payload Cloud that require environment variables will aut Payment methods can be set per project and can be updated any time. You can use team’s default payment method, or add a new one. Modify your payment methods in your Project settings / Team settings. - Note: All Payload Cloud teams that deploy a project require a - card on file. This helps us prevent fraud and abuse on our platform. If you - select a plan with a free trial, you will not be charged until your trial - period is over. We’ll remind you 7 days before your trial ends and you can - cancel anytime. + Note: All Payload Cloud teams that deploy a project require a card on file. This + helps us prevent fraud and abuse on our platform. If you select a plan with a free trial, you will + not be charged until your trial period is over. We’ll remind you 7 days before your trial ends and + you can cancel anytime. diff --git a/docs/cloud/creating-a-project.mdx b/docs/cloud/creating-a-project.mdx index b8fdaa302..a315bd996 100644 --- a/docs/cloud/creating-a-project.mdx +++ b/docs/cloud/creating-a-project.mdx @@ -13,9 +13,8 @@ Payload Cloud offers various plans tailored to meet your specific needs, includi To get started, you first need to create an account. Head over to [the login screen](https://payloadcms.com/login) and **Register for Free**. - To create your first project, you can either select [a - template](#starting-from-a-template) or [import an existing - project](#importing-from-an-existing-codebase) from GitHub. + To create your first project, you can either select [a template](#starting-from-a-template) or + [import an existing project](#importing-from-an-existing-codebase) from GitHub. ## Starting from a Template @@ -32,9 +31,8 @@ Next, select your `GitHub Scope`. If you belong to multiple organizations, they After selecting your scope, create a unique `repository name` and select whether you want your repository to be public or private on GitHub. - Note: Public repositories can be accessed by anyone online, - while private repositories grant access only to you and anyone you explicitly - authorize. + Note: Public repositories can be accessed by anyone online, while private + repositories grant access only to you and anyone you explicitly authorize. Once you are ready, click **Create Project**. This will clone the selected template to a new repository in your GitHub account, and take you to the configuration page to set up your project for deployment. @@ -47,7 +45,7 @@ Payload Cloud works for any Node.js + MongoDB app. From the New Project page, se _Creating a new project from an existing repository._ - Note: In order to make use of the features of Payload Cloud - in your own codebase, you will need to add the [Cloud - Plugin](https://github.com/payloadcms/plugin-cloud) to your Payload app. + Note: In order to make use of the features of Payload Cloud in your own codebase, + you will need to add the [Cloud Plugin](https://github.com/payloadcms/plugin-cloud) to your + Payload app. diff --git a/docs/cloud/projects.mdx b/docs/cloud/projects.mdx index 3fc72b5f9..4fe0c7508 100644 --- a/docs/cloud/projects.mdx +++ b/docs/cloud/projects.mdx @@ -9,11 +9,10 @@ keywords: cloud, payload cloud, projects, project, overview, database, file stor ### Overview - The overview tab shows your most recent deployment, along with build and - deployment logs. From here, you can see your live URL, deployment details like - timestamps and commit hash, as well as the status of your deployment. You can - also trigger a redeployment manually, which will rebuild your project using - the current configuration. + The overview tab shows your most recent deployment, along with build and deployment logs. From + here, you can see your live URL, deployment details like timestamps and commit hash, as well as + the status of your deployment. You can also trigger a redeployment manually, which will rebuild + your project using the current configuration. ![Payload Cloud Overview Page](https://payloadcms.com/images/docs/cloud/overview-page.jpg) @@ -40,8 +39,8 @@ You can update settings from your Project’s Settings tab. Changes to your buil From the Environment Variables page of the Settings tab, you can add, update and delete variables for use in your project. Like build settings, these changes will trigger a redeployment of your project. - Note: For security reasons, any variables you wish to provide to the Admin - panel must be prefixed with `PAYLOAD_PUBLIC_`.  Learn more + Note: For security reasons, any variables you wish to provide to the Admin panel must be prefixed + with `PAYLOAD_PUBLIC_`.  Learn more [here](https://payloadcms.com/docs/admin/webpack#admin-environment-vars). ### Custom Domains @@ -49,9 +48,8 @@ From the Environment Variables page of the Settings tab, you can add, update and With Payload Cloud, you can add custom domain names to your project. To do so, first go to the Domains page of the Settings tab of your project. Here you can see your default domain. To add a new domain, type in the domain name you wish to use. - Note: do not include the protocol (http:// or https://) or any routes (/page). - Only include the domain name and extension, and optionally a subdomain. - - your-domain.com - backend.your-domain.com + Note: do not include the protocol (http:// or https://) or any routes (/page). Only include the + domain name and extension, and optionally a subdomain. - your-domain.com - backend.your-domain.com Once you click save, a DNS record will be generated for your domain name to point to your live project. Add this record into your DNS provider’s records, and once the records are resolving properly (this can take 1hr to 48hrs in some cases), your domain will now to point to your live project. @@ -60,9 +58,9 @@ You will also need to configure your Payload project to use your specified domai ```ts export default buildConfig({ - serverURL: "https://example.com", + serverURL: 'https://example.com', // the rest of your config, -}); +}) ``` ### Email @@ -84,18 +82,18 @@ Projects generated from a template will come pre-configured with the official Cl `yarn add @payloadcms/plugin-cloud` ```js -import { payloadCloud } from "@payloadcms/plugin-cloud"; -import { buildConfig } from "payload/config"; +import { payloadCloud } from '@payloadcms/plugin-cloud' +import { buildConfig } from 'payload/config' export default buildConfig({ plugins: [payloadCloud()], // rest of config -}); +}) ``` - **Note:** If your Payload config already has an email with transport, this - will take precedence over Payload Cloud's email service. + **Note:** If your Payload config already has an email with transport, this will take precedence + over Payload Cloud's email service. ##### **Optional configuration** @@ -106,5 +104,5 @@ If you wish to opt-out of any Payload cloud features, the plugin also accepts op payloadCloud({ storage: false, // Disable file storage email: false, // Disable email delivery -}); +}) ``` diff --git a/docs/cloud/teams.mdx b/docs/cloud/teams.mdx index 80d367cd5..64eb26ab7 100644 --- a/docs/cloud/teams.mdx +++ b/docs/cloud/teams.mdx @@ -7,8 +7,8 @@ keywords: team, teams, billing, subscription, payment, plan, plans, cloud, paylo --- - Within Payload Cloud, the team management feature offers you the ability to - manage your organization, team members, billing, and subscription settings. + Within Payload Cloud, the team management feature offers you the ability to manage your + organization, team members, billing, and subscription settings. ![Payload Cloud Team Settings](https://payloadcms.com/images/docs/cloud/team-settings.jpg) diff --git a/docs/configuration/collections.mdx b/docs/configuration/collections.mdx index 6b6f3c028..035f39b50 100644 --- a/docs/configuration/collections.mdx +++ b/docs/configuration/collections.mdx @@ -12,49 +12,49 @@ It's often best practice to write your Collections in separate files and then im ## Options -| Option | Description | -|--------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **`slug`** * | Unique, URL-friendly string that will act as an identifier for this Collection. | -| **`fields`** * | Array of field types that will determine the structure and functionality of the data stored within this Collection. [Click here](/docs/fields/overview) for a full list of field types as well as how to configure them. | -| **`indexes`** * | Array of database indexes to create, including compound indexes that have multiple fields. | -| **`labels`** | Singular and plural labels for use in identifying this Collection throughout Payload. Auto-generated from slug if not defined. | -| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-options). | -| **`hooks`** | Entry points to "tie in" to Collection actions at specific points. [More](/docs/hooks/overview#collection-hooks) | -| **`access`** | Provide access control functions to define exactly who should be able to do what with Documents in this Collection. [More](/docs/access-control/overview/#collections) | -| **`auth`** | Specify options if you would like this Collection to feature authentication. For more, consult the [Authentication](/docs/authentication/config) documentation. | -| **`upload`** | Specify options if you would like this Collection to support file uploads. For more, consult the [Uploads](/docs/upload/overview) documentation. | -| **`timestamps`** | Set to false to disable documents' automatically generated `createdAt` and `updatedAt` timestamps. | -| **`versions`** | Set to true to enable default options, or configure with object properties. [More](/docs/versions/overview#collection-config) | -| **`endpoints`** | Add custom routes to the REST API. Set to `false` to disable routes. [More](/docs/rest-api/overview#custom-endpoints) | -| **`graphQL`** | An object with `singularName` and `pluralName` strings used in schema generation. Auto-generated from slug if not defined. Set to `false` to disable GraphQL. | -| **`typescript`** | An object with property `interface` as the text used in schema generation. Auto-generated from slug if not defined. | -| **`defaultSort`** | Pass a top-level field to sort by default in the collection List view. Prefix the name of the field with a minus symbol ("-") to sort in descending order. | -| **`pagination`** | Set pagination-specific options for this collection. [More](#pagination) | -| **`custom`** | Extension point for adding custom data (e.g. for plugins) | +| Option | Description | +| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| **`slug`** \* | Unique, URL-friendly string that will act as an identifier for this Collection. | +| **`fields`** \* | Array of field types that will determine the structure and functionality of the data stored within this Collection. [Click here](/docs/fields/overview) for a full list of field types as well as how to configure them. | +| **`indexes`** \* | Array of database indexes to create, including compound indexes that have multiple fields. | +| **`labels`** | Singular and plural labels for use in identifying this Collection throughout Payload. Auto-generated from slug if not defined. | +| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-options). | +| **`hooks`** | Entry points to "tie in" to Collection actions at specific points. [More](/docs/hooks/overview#collection-hooks) | +| **`access`** | Provide access control functions to define exactly who should be able to do what with Documents in this Collection. [More](/docs/access-control/overview/#collections) | +| **`auth`** | Specify options if you would like this Collection to feature authentication. For more, consult the [Authentication](/docs/authentication/config) documentation. | +| **`upload`** | Specify options if you would like this Collection to support file uploads. For more, consult the [Uploads](/docs/upload/overview) documentation. | +| **`timestamps`** | Set to false to disable documents' automatically generated `createdAt` and `updatedAt` timestamps. | +| **`versions`** | Set to true to enable default options, or configure with object properties. [More](/docs/versions/overview#collection-config) | +| **`endpoints`** | Add custom routes to the REST API. Set to `false` to disable routes. [More](/docs/rest-api/overview#custom-endpoints) | +| **`graphQL`** | An object with `singularName` and `pluralName` strings used in schema generation. Auto-generated from slug if not defined. Set to `false` to disable GraphQL. | +| **`typescript`** | An object with property `interface` as the text used in schema generation. Auto-generated from slug if not defined. | +| **`defaultSort`** | Pass a top-level field to sort by default in the collection List view. Prefix the name of the field with a minus symbol ("-") to sort in descending order. | +| **`pagination`** | Set pagination-specific options for this collection. [More](#pagination) | +| **`custom`** | Extension point for adding custom data (e.g. for plugins) | -*\* An asterisk denotes that a property is required.* +_\* An asterisk denotes that a property is required._ #### Simple collection example ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const Orders: CollectionConfig = { - slug: 'orders', - fields: [ - { - name: 'total', - type: 'number', - required: true, - }, - { - name: 'placedBy', - type: 'relationship', - relationTo: 'customers', - required: true, - } - ], -}; + slug: 'orders', + fields: [ + { + name: 'total', + type: 'number', + required: true, + }, + { + name: 'placedBy', + type: 'relationship', + relationTo: 'customers', + required: true, + }, + ], +} ``` #### More collection config examples @@ -66,7 +66,7 @@ You can find an assortment of [example collection configs](https://github.com/pa You can customize the way that the Admin panel behaves on a collection-by-collection basis by defining the `admin` property on a collection's config. | Option | Description | -|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `group` | Text used as a label for grouping collection and global links together in the navigation. | | `hidden` | Set to true or a function, called with the current user, returning true to exclude this collection from navigation and admin routing. | | `hooks` | Admin-specific hooks for this collection. [More](#admin-hooks) | @@ -95,37 +95,37 @@ If the function is specified, a Preview button will automatically appear in the **Example collection with preview function:** ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const Posts: CollectionConfig = { - slug: 'posts', - fields: [ - { - name: 'slug', - type: 'text', - required: true, - }, - ], - admin: { - preview: (doc, { locale }) => { - if (doc?.slug) { - return `https://bigbird.com/preview/posts/${doc.slug}?locale=${locale}`; - } + slug: 'posts', + fields: [ + { + name: 'slug', + type: 'text', + required: true, + }, + ], + admin: { + preview: (doc, { locale }) => { + if (doc?.slug) { + return `https://bigbird.com/preview/posts/${doc.slug}?locale=${locale}` + } - return null; - }, - }, -}; + return null + }, + }, +} ``` ### Pagination Here are a few options that you can specify options for pagination on a collection-by-collection basis: -| Option | Description | -| --------------------------- | -------------| -| `defaultLimit` | Integer that specifies the default per-page limit that should be used. Defaults to 10. | -| `limits` | Provide an array of integers to use as per-page options for admins to choose from in the List view. | +| Option | Description | +| -------------- | --------------------------------------------------------------------------------------------------- | +| `defaultLimit` | Integer that specifies the default per-page limit that should be used. Defaults to 10. | +| `limits` | Provide an array of integers to use as per-page options for admins to choose from in the List view. | ### Access control @@ -146,8 +146,10 @@ In the List view, there is a "search" box that allows you to quickly find a docu For example, let's say you have a Posts collection with `title`, `metaDescription`, and `tags` fields - and you want all three of those fields to be searchable in the List view. You can simply add `admin.listSearchableFields: ['title', 'metaDescription', 'tags']` - and the admin UI will automatically search on those three fields plus the ID field. - Note:
- If you are adding listSearchableFields, make sure you index each of these fields so your admin queries can remain performant. + Note: +
+ If you are adding listSearchableFields, make sure you index each of these fields + so your admin queries can remain performant.
### Admin Hooks @@ -161,24 +163,24 @@ The `beforeDuplicate` hook is an async function that accepts an object containin Example: ```ts -import { BeforeDuplicate, CollectionConfig } from 'payload/types'; +import { BeforeDuplicate, CollectionConfig } from 'payload/types' // Your auto-generated Page type -import { Page } from '../payload-types.ts'; +import { Page } from '../payload-types.ts' const beforeDuplicate: BeforeDuplicate = ({ data }) => { return { ...data, title: `${data.title} Copy`, uniqueField: data.uniqueField ? `${data.uniqueField}-copy` : '', - }; -}; + } +} export const Page: CollectionConfig = { slug: 'pages', admin: { hooks: { beforeDuplicate, - } + }, }, fields: [ { @@ -189,8 +191,8 @@ export const Page: CollectionConfig = { name: 'uniqueField', type: 'text', unique: true, - } - ] + }, + ], } ``` @@ -199,14 +201,14 @@ export const Page: CollectionConfig = { You can import collection types as follows: ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' // This is the type used for incoming collection configs. // Only the bare minimum properties are marked as required. ``` ```ts -import { SanitizedCollectionConfig } from 'payload/types'; +import { SanitizedCollectionConfig } from 'payload/types' // This is the type used after an incoming collection config is fully sanitized. // Generally, this is only used internally by Payload. diff --git a/docs/configuration/express.mdx b/docs/configuration/express.mdx index 360db219b..74fc66f3b 100644 --- a/docs/configuration/express.mdx +++ b/docs/configuration/express.mdx @@ -70,11 +70,11 @@ To customize compression options, pass an object to the Payload config's `expres ```js { - express: { - compression: { - // settings go here - } - } + express: { + compression: { + // settings go here + } + } } ``` diff --git a/docs/configuration/globals.mdx b/docs/configuration/globals.mdx index 396b53397..c92da8cc9 100644 --- a/docs/configuration/globals.mdx +++ b/docs/configuration/globals.mdx @@ -32,29 +32,29 @@ _\* An asterisk denotes that a property is required._ #### Simple Global example ```ts -import { GlobalConfig } from "payload/types"; +import { GlobalConfig } from 'payload/types' const Nav: GlobalConfig = { - slug: "nav", + slug: 'nav', fields: [ { - name: "items", - type: "array", + name: 'items', + type: 'array', required: true, maxRows: 8, fields: [ { - name: "page", - type: "relationship", - relationTo: "pages", // "pages" is the slug of an existing collection + name: 'page', + type: 'relationship', + relationTo: 'pages', // "pages" is the slug of an existing collection required: true, }, ], }, ], -}; +} -export default Nav; +export default Nav ``` #### Global config example @@ -66,8 +66,8 @@ You can find an [example Global config](https://github.com/payloadcms/public-dem You can customize the way that the Admin panel behaves on a Global-by-Global basis by defining the `admin` property on a Global's config. | Option | Description | -|--------------|-----------------------------------------------------------------------------------------------------------------------------------| -| `group` | Text used as a label for grouping collection and global links together in the navigation. | +| ------------ | --------------------------------------------------------------------------------------------------------------------------------- | +| `group` | Text used as a label for grouping collection and global links together in the navigation. | | `hidden` | Set to true or a function, called with the current user, returning true to exclude this global from navigation and admin routing. | | `components` | Swap in your own React components to be used within this Global. [More](/docs/admin/components#globals) | | `preview` | Function to generate a preview URL within the Admin panel for this global that can point to your app. [More](#preview). | @@ -87,27 +87,27 @@ If the function is specified, a Preview button will automatically appear in the **Example global with preview function:** ```ts -import { GlobalConfig } from "payload/types"; +import { GlobalConfig } from 'payload/types' export const MyGlobal: GlobalConfig = { - slug: "my-global", + slug: 'my-global', fields: [ { - name: "slug", - type: "text", + name: 'slug', + type: 'text', required: true, }, ], admin: { preview: (doc, { locale }) => { if (doc?.slug) { - return `https://bigbird.com/preview/${doc.slug}?locale=${locale}`; + return `https://bigbird.com/preview/${doc.slug}?locale=${locale}` } - return null; + return null }, }, -}; +} ``` ### Access control @@ -127,14 +127,14 @@ Globals support all field types that Payload has to offer—including simple fie You can import global types as follows: ```ts -import { GlobalConfig } from "payload/types"; +import { GlobalConfig } from 'payload/types' // This is the type used for incoming global configs. // Only the bare minimum properties are marked as required. ``` ```ts -import { SanitizedGlobalConfig } from "payload/types"; +import { SanitizedGlobalConfig } from 'payload/types' // This is the type used after an incoming global config is fully sanitized. // Generally, this is only used internally by Payload. diff --git a/docs/configuration/i18n.mdx b/docs/configuration/i18n.mdx index 2c39244d7..d699e58ad 100644 --- a/docs/configuration/i18n.mdx +++ b/docs/configuration/i18n.mdx @@ -13,47 +13,47 @@ While Payload's built-in features come translated, you may want to also translat Here is an example of a simple collection supporting both English and Spanish editors: ```ts -import { CollectionConfig } from "payload/types"; +import { CollectionConfig } from 'payload/types' export const Articles: CollectionConfig = { - slug: "articles", + slug: 'articles', labels: { singular: { - en: "Article", - es: "Artículo", + en: 'Article', + es: 'Artículo', }, plural: { - en: "Articles", - es: "Artículos", + en: 'Articles', + es: 'Artículos', }, }, admin: { - group: { en: "Content", es: "Contenido" }, + group: { en: 'Content', es: 'Contenido' }, }, fields: [ { - name: "title", - type: "text", + name: 'title', + type: 'text', label: { - en: "Title", - es: "Título", + en: 'Title', + es: 'Título', }, admin: { - placeholder: { en: "Enter title", es: "Introduce el título" }, + placeholder: { en: 'Enter title', es: 'Introduce el título' }, }, }, { - name: "type", - type: "radio", + name: 'type', + type: 'radio', options: [ { - value: "news", - label: { en: "News", es: "Noticias" }, + value: 'news', + label: { en: 'News', es: 'Noticias' }, }, // etc... ], }, ], -}; +} ``` ### Admin UI @@ -62,8 +62,10 @@ The Payload admin panel reads the language settings of a user's browser and disp After a user logs in, they can change their language selection in the `/account` view. - Note:
- If there is a language that Payload does not yet support, we accept code [contributions](https://github.com/payloadcms/payload/blob/master/contributing.md). + Note: +
+ If there is a language that Payload does not yet support, we accept code + [contributions](https://github.com/payloadcms/payload/blob/master/contributing.md).
### Node Express @@ -81,28 +83,28 @@ In your Payload config, you can add translations and customize the settings in ` **Example Payload config extending i18n:** ```ts -import { buildConfig } from "payload/config"; +import { buildConfig } from 'payload/config' export default buildConfig({ //... i18n: { - fallbackLng: "en", // default + fallbackLng: 'en', // default debug: false, // default resources: { en: { custom: { // namespace can be anything you want - key1: "Translation with {{variable}}", // translation + key1: 'Translation with {{variable}}', // translation }, // override existing translation keys general: { - dashboard: "Home", + dashboard: 'Home', }, }, }, }, //... -}); +}) ``` See the i18next [configuration options](https://www.i18next.com/overview/configuration-options) to learn more. diff --git a/docs/configuration/localization.mdx b/docs/configuration/localization.mdx index 6b92a0a8c..2a052b7c1 100644 --- a/docs/configuration/localization.mdx +++ b/docs/configuration/localization.mdx @@ -22,15 +22,11 @@ export default buildConfig({ // collections go here ], localization: { - locales: [ - 'en', - 'es', - 'de', - ], + locales: ['en', 'es', 'de'], defaultLocale: 'en', fallback: true, }, -}); +}) ``` **Example Payload config set up for localization with full locales objects:** @@ -43,22 +39,22 @@ export default buildConfig({ // collections go here ], localization: { - locales: [ - { - label: "English", - code: "en", - }, - { - label: "Arabic", - code: "ar", - // opt-in to setting default text-alignment on Input fields to rtl (right-to-left) when current locale is rtl - rtl: true, - }, - ], - defaultLocale: "en", - fallback: true, + locales: [ + { + label: 'English', + code: 'en', + }, + { + label: 'Arabic', + code: 'ar', + // opt-in to setting default text-alignment on Input fields to rtl (right-to-left) when current locale is rtl + rtl: true, + }, + ], + defaultLocale: 'en', + fallback: true, }, -}); +}) ``` **Here is a brief explanation of each of the options available within the `localization` property:** @@ -96,17 +92,21 @@ With the above configuration, the `title` field will now be saved in the databas All field types with a `name` property support the `localized` property—even the more complex field types like `array`s and `block`s. - Note:
- Enabling localization for field types that support nested fields will automatically create localized "sets" of all fields contained within the field. For example, if you have a page layout using a blocks field type, you have the choice of either localizing the full layout, by enabling localization on the top-level blocks field, or only certain fields within the layout. + Note: +
+ Enabling localization for field types that support nested fields will automatically create + localized "sets" of all fields contained within the field. For example, if you have a page layout + using a blocks field type, you have the choice of either localizing the full layout, by enabling + localization on the top-level blocks field, or only certain fields within the layout.
Important:
- When converting an existing field to or from `localized: true` the data - structure in the document will change for this field and so existing data for - this field will be lost. Before changing the localization setting on fields - with existing data, you may need to consider a field migration strategy. + When converting an existing field to or from `localized: true` the data structure in the document + will change for this field and so existing data for this field will be lost. Before changing the + localization setting on fields with existing data, you may need to consider a field migration + strategy.
### Retrieving localized docs @@ -152,7 +152,9 @@ query { ``` - In GraphQL, specifying the locale at the top level of a query will automatically apply it throughout all nested relationship fields. You can override this behavior by re-specifying locale arguments in nested related document queries. + In GraphQL, specifying the locale at the top level of a query will automatically apply it + throughout all nested relationship fields. You can override this behavior by re-specifying locale + arguments in nested related document queries. ##### Local API @@ -170,5 +172,9 @@ const posts = await payload.find({ ``` - Tip:
The REST and Local APIs can return all localization data in one request by passing 'all' or '*' as the locale parameter. The response will be structured so that field values come back as the full objects keyed for each locale instead of the single, translated value. + Tip: +
+ The REST and Local APIs can return all localization data in one request by passing 'all' or '*' as + the locale parameter. The response will be structured so that field values come + back as the full objects keyed for each locale instead of the single, translated value.
diff --git a/docs/configuration/overview.mdx b/docs/configuration/overview.mdx index 0c6f3e1f6..8f2b87975 100644 --- a/docs/configuration/overview.mdx +++ b/docs/configuration/overview.mdx @@ -13,8 +13,8 @@ Payload is a _config-based_, code-first CMS and application framework. The Paylo Important:
- This file is included in the Payload admin bundle, so make sure you do not - embed any sensitive information. + This file is included in the Payload admin bundle, so make sure you do not embed any sensitive + information.
## Options @@ -48,21 +48,21 @@ Payload is a _config-based_, code-first CMS and application framework. The Paylo #### Simple example ```ts -import { buildConfig } from "payload/config"; +import { buildConfig } from 'payload/config' export default buildConfig({ collections: [ { - slug: "pages", + slug: 'pages', fields: [ { - name: "title", - type: "text", + name: 'title', + type: 'text', required: true, }, { - name: "content", - type: "richText", + name: 'content', + type: 'richText', required: true, }, ], @@ -70,23 +70,23 @@ export default buildConfig({ ], globals: [ { - slug: "header", + slug: 'header', fields: [ { - name: "nav", - type: "array", + name: 'nav', + type: 'array', fields: [ { - name: "page", - type: "relationship", - relationTo: "pages", + name: 'page', + type: 'relationship', + relationTo: 'pages', }, ], }, ], }, ], -}); +}) ``` #### Full example config @@ -120,10 +120,9 @@ project-name Important:
- If you use an environment variable to configure any properties that are - required for the Admin panel to function (ex. serverURL or any routes), you - need to make sure that your Admin panel code can access it. [Click - here](/docs/admin/webpack#admin-environment-vars) for more info. + If you use an environment variable to configure any properties that are required for the Admin + panel to function (ex. serverURL or any routes), you need to make sure that your Admin panel code + can access it. [Click here](/docs/admin/webpack#admin-environment-vars) for more info.
### Customizing & Automating Config Location Detection @@ -145,7 +144,7 @@ In addition to the above automated detection, you can specify your own location ```json { "scripts": { - "dev": "PAYLOAD_CONFIG_PATH=path/to/custom-config.js node server.js", + "dev": "PAYLOAD_CONFIG_PATH=path/to/custom-config.js node server.js" } } ``` @@ -161,14 +160,14 @@ Payload comes with `isomorphic-fetch` installed which means that even in Node, y You can import config types as follows: ```ts -import { Config } from "payload/config"; +import { Config } from 'payload/config' // This is the type used for an incoming Payload config. // Only the bare minimum properties are marked as required. ``` ```ts -import { SanitizedConfig } from "payload/config"; +import { SanitizedConfig } from 'payload/config' // This is the type used after an incoming Payload config is fully sanitized. // Generally, this is only used internally by Payload. diff --git a/docs/database/overview.mdx b/docs/database/overview.mdx index a8dcf5780..d6e18c653 100644 --- a/docs/database/overview.mdx +++ b/docs/database/overview.mdx @@ -23,7 +23,8 @@ Database transactions allow your application to make a series of database change By default, Payload will use transactions for all operations, as long as it is supported by the configured database. Database changes are contained within all Payload operations and any errors thrown will result in all changes being rolled back without being committed. When transactions are not supported by the database, Payload will continue to operate as expected without them. - Note:
+ Note: +
MongoDB requires a connection to a replicaset in order to make use of transactions.
@@ -37,12 +38,13 @@ const afterChange: CollectionAfterChangeHook = async ({ req }) => { collection: 'my-slug', data: { some: 'data', - } - }); + }, + }) } ``` ### Async Hooks with Transactions + Since Payload hooks can be async and be written to not await the result, it is possible to have an incorrect success response returned on a request that is rolled back. If you have a hook where you do not `await` the result, then you should **not** pass the `req.transactionID`. ```ts @@ -53,7 +55,7 @@ const afterChange: CollectionAfterChangeHook = async ({ req }) => { collection: 'my-slug', data: { some: 'other data', - } + }, }) // Should this call fail, it will not rollback other changes @@ -65,7 +67,7 @@ const afterChange: CollectionAfterChangeHook = async ({ req }) => { collection: 'my-slug', data: { some: 'other data', - } + }, }) } ``` @@ -82,4 +84,3 @@ The following functions can be used for managing transactions: `payload.db.rollbackTransaction` - Takes the identifier for the transaction, discards any changes. ## Migrations - diff --git a/docs/email/overview.mdx b/docs/email/overview.mdx index 74db97567..ce9767add 100644 --- a/docs/email/overview.mdx +++ b/docs/email/overview.mdx @@ -57,15 +57,16 @@ payload.init({ rejectUnauthorized: false, }, }, - fromName: "hello", - fromAddress: "hello@example.com", + fromName: 'hello', + fromAddress: 'hello@example.com', }, // ... -}); +}) ``` - It is best practice to avoid saving credentials or API keys directly in your code, use [environment variables](/docs/configuration/overview#using-environment-variables-in-your-config). + It is best practice to avoid saving credentials or API keys directly in your code, use + [environment variables](/docs/configuration/overview#using-environment-variables-in-your-config). ### Use an email service @@ -73,10 +74,10 @@ payload.init({ Many third party mail providers are available and offer benefits beyond basic SMTP. As an example your payload init could look this if you wanted to use SendGrid.com though the same approach would work for any other [NodeMailer transports](https://nodemailer.com/transports/) shown here or provided by another third party. ```ts -import payload from "payload"; -import nodemailerSendgrid from "nodemailer-sendgrid"; +import payload from 'payload' +import nodemailerSendgrid from 'nodemailer-sendgrid' -const sendGridAPIKey = process.env.SENDGRID_API_KEY; +const sendGridAPIKey = process.env.SENDGRID_API_KEY payload.init({ ...(sendGridAPIKey @@ -85,12 +86,12 @@ payload.init({ transportOptions: nodemailerSendgrid({ apiKey: sendGridAPIKey, }), - fromName: "Admin", - fromAddress: "admin@example.com", + fromName: 'Admin', + fromAddress: 'admin@example.com', }, } : {}), -}); +}) ``` ### Use a custom NodeMailer transport @@ -98,11 +99,11 @@ payload.init({ To take full control of the mail transport you may wish to use `nodemailer.createTransport()` on your server and provide it to Payload init. ```ts -import payload from "payload"; -import nodemailer from "nodemailer"; +import payload from 'payload' +import nodemailer from 'nodemailer' -const payload = require("payload"); -const nodemailer = require("nodemailer"); +const payload = require('payload') +const nodemailer = require('nodemailer') const transport = await nodemailer.createTransport({ host: process.env.SMTP_HOST, @@ -111,16 +112,16 @@ const transport = await nodemailer.createTransport({ user: process.env.SMTP_USER, pass: process.env.SMTP_PASS, }, -}); +}) payload.init({ email: { - fromName: "Admin", - fromAddress: "admin@example.com", + fromName: 'Admin', + fromAddress: 'admin@example.com', transport, }, // ... -}); +}) ``` ### Sending Mail @@ -136,12 +137,12 @@ To see ethereal credentials, add `logMockCredentials: true` to the email options ```ts payload.init({ email: { - fromName: "Admin", - fromAddress: "admin@example.com", + fromName: 'Admin', + fromAddress: 'admin@example.com', logMockCredentials: true, // Optional }, // ... -}); +}) ``` **Console output when starting payload with a mock email instance and logMockCredentials: true** @@ -160,7 +161,8 @@ payload.init({ The mock email handler is used when payload is started with neither `transport` or `transportOptions` to know how to deliver email. - The randomly generated email account username and password will be different each time the Payload server starts. + The randomly generated email account username and password will be different each time the Payload + server starts. ### Using multiple mail providers diff --git a/docs/fields/array.mdx b/docs/fields/array.mdx index 949b28bb4..52af0a607 100644 --- a/docs/fields/array.mdx +++ b/docs/fields/array.mdx @@ -7,9 +7,8 @@ keywords: array, fields, config, configuration, documentation, Content Managemen --- - The Array field type is used when you need to have a set of "repeating" - fields. It stores an array of objects containing the fields that you define. - Its uses can be simple or highly complex. + The Array field type is used when you need to have a set of "repeating" fields. It stores an array + of objects containing the fields that you define. Its uses can be simple or highly complex. { - return data?.title || `Slide ${String(index).padStart(2, "0")}`; + return data?.title || `Slide ${String(index).padStart(2, '0')}` }, }, }, }, ], -}; +} ``` diff --git a/docs/fields/blocks.mdx b/docs/fields/blocks.mdx index 827581eea..87da3205f 100644 --- a/docs/fields/blocks.mdx +++ b/docs/fields/blocks.mdx @@ -7,10 +7,10 @@ keywords: blocks, fields, config, configuration, documentation, Content Manageme --- - The Blocks field type is incredibly powerful and can be used - as a layout builder as well as to define any other flexible content - model you can think of. It stores an array of objects, where each object must - match the shape of one of your provided block configs. + The Blocks field type is incredibly powerful and can be used as a{' '} + layout builder as well as to define any other flexible content model you can think of. It + stores an array of objects, where each object must match the shape of one of your provided block + configs. Tip:
- Best practice is to define each block config in its own file, and then import - them into your Blocks field as necessary. This way each block config can be - easily shared between fields. For instance, using the "layout builder" - example, you might want to feature a few of the same blocks in a Post - collection as well as a Page collection. Abstracting into their own files - trivializes their reusability. + Best practice is to define each block config in its own file, and then import them into your + Blocks field as necessary. This way each block config can be easily shared between fields. For + instance, using the "layout builder" example, you might want to feature a few of the same blocks + in a Post collection as well as a Page collection. Abstracting into their own files trivializes + their reusability. | Option | Description | @@ -97,7 +96,7 @@ The Admin panel provides each block with a `blockName` field which optionally al `collections/ExampleCollection.js` ```ts -import { Block, CollectionConfig } from 'payload/types'; +import { Block, CollectionConfig } from 'payload/types' const QuoteBlock: Block = { slug: 'Quote', // required @@ -116,7 +115,7 @@ const QuoteBlock: Block = { type: 'text', }, ], -}; +} export const ExampleCollection: CollectionConfig = { slug: 'example-collection', @@ -132,7 +131,7 @@ export const ExampleCollection: CollectionConfig = { ], }, ], -}; +} ``` ### TypeScript @@ -140,5 +139,5 @@ export const ExampleCollection: CollectionConfig = { As you build your own Block configs, you might want to store them in separate files but retain typing accordingly. To do so, you can import and use Payload's `Block` type: ```ts -import type { Block } from 'payload/types'; +import type { Block } from 'payload/types' ``` diff --git a/docs/fields/checkbox.mdx b/docs/fields/checkbox.mdx index 4d3da6ec0..1a2f5765f 100644 --- a/docs/fields/checkbox.mdx +++ b/docs/fields/checkbox.mdx @@ -6,42 +6,41 @@ desc: Checkbox field types allow the developer to save a boolean value in the da keywords: checkbox, fields, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express --- - - The Checkbox field type saves a boolean in the database. - +The Checkbox field type saves a boolean in the database. - ### Config -| Option | Description | -| ---------------- | ----------- | -| **`name`** * | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | -| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. | -| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) | -| **`index`** | Build a [MongoDB index](https://docs.mongodb.com/manual/indexes/) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. | -| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. | -| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) | -| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) | -| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. | -| **`defaultValue`** | Provide data to be used for this field's default value, will default to false if field is also `required`. [More](/docs/fields/overview#default-values) | -| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. | -| **`required`** | Require this field to have a value. | -| **`admin`** | Admin-specific configuration. See the [default field admin config](/docs/fields/overview#admin-config) for more details. | -| **`custom`** | Extension point for adding custom data (e.g. for plugins) | +| Option | Description | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`name`** \* | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | +| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. | +| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) | +| **`index`** | Build a [MongoDB index](https://docs.mongodb.com/manual/indexes/) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. | +| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. | +| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) | +| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) | +| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. | +| **`defaultValue`** | Provide data to be used for this field's default value, will default to false if field is also `required`. [More](/docs/fields/overview#default-values) | +| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. | +| **`required`** | Require this field to have a value. | +| **`admin`** | Admin-specific configuration. See the [default field admin config](/docs/fields/overview#admin-config) for more details. | +| **`custom`** | Extension point for adding custom data (e.g. for plugins) | -*\* An asterisk denotes that a property is required.* +_\* An asterisk denotes that a property is required._ ### Example `collections/ExampleCollection.ts` + ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', @@ -51,7 +50,7 @@ export const ExampleCollection: CollectionConfig = { type: 'checkbox', // required label: 'Click me to see fanciness', defaultValue: false, - } - ] -}; + }, + ], +} ``` diff --git a/docs/fields/code.mdx b/docs/fields/code.mdx index a9126c904..f8d8a00d8 100644 --- a/docs/fields/code.mdx +++ b/docs/fields/code.mdx @@ -7,39 +7,40 @@ desc: The Code field type will store any string in the Database. Learn how to us keywords: code, fields, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express --- - - The Code field type saves a string in the database, but provides the Admin panel with a code editor styled interface. + + The Code field type saves a string in the database, but provides the Admin panel with a code + editor styled interface. - This field uses the `monaco-react` editor syntax highlighting. ### Config -| Option | Description | -| ---------------- | ----------- | -| **`name`** * | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | -| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. | -| **`unique`** | Enforce that each entry in the Collection has a unique value for this field. | -| **`index`** | Build a [MongoDB index](https://docs.mongodb.com/manual/indexes/) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. | -| **`minLength`** | Used by the default validation function to ensure values are of a minimum character length. | -| **`maxLength`** | Used by the default validation function to ensure values are of a maximum character length. | -| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) | -| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. | -| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) | -| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) | -| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. | -| **`defaultValue`** | Provide data to be used for this field's default value. [More](/docs/fields/overview#default-values) | -| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. | -| **`required`** | Require this field to have a value. | -| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). | -| **`custom`** | Extension point for adding custom data (e.g. for plugins) | +| Option | Description | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`name`** \* | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | +| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. | +| **`unique`** | Enforce that each entry in the Collection has a unique value for this field. | +| **`index`** | Build a [MongoDB index](https://docs.mongodb.com/manual/indexes/) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. | +| **`minLength`** | Used by the default validation function to ensure values are of a minimum character length. | +| **`maxLength`** | Used by the default validation function to ensure values are of a maximum character length. | +| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) | +| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. | +| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) | +| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) | +| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. | +| **`defaultValue`** | Provide data to be used for this field's default value. [More](/docs/fields/overview#default-values) | +| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. | +| **`required`** | Require this field to have a value. | +| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). | +| **`custom`** | Extension point for adding custom data (e.g. for plugins) | _\* An asterisk denotes that a property is required._ @@ -47,16 +48,17 @@ _\* An asterisk denotes that a property is required._ In addition to the default [field admin config](/docs/fields/overview#admin-config), you can adjust the following properties: -| Option | Description | -| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **`language`** | This property can be set to any language listed [here](https://github.com/microsoft/monaco-editor/tree/main/src/basic-languages). | -| **`editorOptions`** | Options that can be passed to the monaco editor, [view the full list](https://microsoft.github.io/monaco-editor/typedoc/interfaces/editor.IDiffEditorConstructionOptions.html). | +| Option | Description | +| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`language`** | This property can be set to any language listed [here](https://github.com/microsoft/monaco-editor/tree/main/src/basic-languages). | +| **`editorOptions`** | Options that can be passed to the monaco editor, [view the full list](https://microsoft.github.io/monaco-editor/typedoc/interfaces/editor.IDiffEditorConstructionOptions.html). | ### Example `collections/ExampleCollection.ts + ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', @@ -66,9 +68,9 @@ export const ExampleCollection: CollectionConfig = { type: 'code', // required required: true, admin: { - language: 'javascript' - } - } - ] -}; + language: 'javascript', + }, + }, + ], +} ``` diff --git a/docs/fields/collapsible.mdx b/docs/fields/collapsible.mdx index a38a73494..5e1b06d3d 100644 --- a/docs/fields/collapsible.mdx +++ b/docs/fields/collapsible.mdx @@ -6,41 +6,43 @@ desc: With the Collapsible field, you can place fields within a collapsible layo keywords: row, fields, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express --- - - The Collapsible field is presentational-only and only affects the Admin panel. By using it, you can place fields within a nice layout component that can be collapsed / expanded. + + The Collapsible field is presentational-only and only affects the Admin panel. By using it, you + can place fields within a nice layout component that can be collapsed / expanded. - ### Config -| Option | Description | -| -------------- | ------------------------------------------------------------------------- | -| **`label`** * | A label to render within the header of the collapsible component. This can be a string, function or react component. Function/components receive `({ data, path })` as args. | -| **`fields`** * | Array of field types to nest within this Collapsible. | -| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). | -| **`custom`** | Extension point for adding custom data (e.g. for plugins) | +| Option | Description | +| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`label`** \* | A label to render within the header of the collapsible component. This can be a string, function or react component. Function/components receive `({ data, path })` as args. | +| **`fields`** \* | Array of field types to nest within this Collapsible. | +| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). | +| **`custom`** | Extension point for adding custom data (e.g. for plugins) | -*\* An asterisk denotes that a property is required.* +_\* An asterisk denotes that a property is required._ ### Admin Config In addition to the default [field admin config](/docs/fields/overview#admin-config), you can adjust the following properties: -| Option | Description | -| ---------------------- | ------------------------------- | -| **`initCollapsed`** | Set the initial collapsed state | +| Option | Description | +| ------------------- | ------------------------------- | +| **`initCollapsed`** | Set the initial collapsed state | ### Example `collections/ExampleCollection.ts` + ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', @@ -48,7 +50,8 @@ export const ExampleCollection: CollectionConfig = { { label: ({ data }) => data?.title || 'Untitled', type: 'collapsible', // required - fields: [ // required + fields: [ + // required { name: 'title', type: 'text', @@ -60,7 +63,7 @@ export const ExampleCollection: CollectionConfig = { required: true, }, ], - } - ] -}; + }, + ], +} ``` diff --git a/docs/fields/date.mdx b/docs/fields/date.mdx index e6c2ca936..299e3da12 100644 --- a/docs/fields/date.mdx +++ b/docs/fields/date.mdx @@ -7,15 +7,15 @@ keywords: date, fields, config, configuration, documentation, Content Management --- - The Date field type saves a Date in the database and provides the Admin panel - with a customizable time picker interface. + The Date field type saves a Date in the database and provides the Admin panel with a customizable + time picker interface. - This field uses [`react-datepicker`](https://www.npmjs.com/package/react-datepicker) for the Admin panel component. @@ -75,41 +75,41 @@ When only `pickerAppearance` is set, an equivalent format will be rendered in th `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from "payload/types"; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { - slug: "example-collection", + slug: 'example-collection', fields: [ { - name: "dateOnly", - type: "date", + name: 'dateOnly', + type: 'date', admin: { date: { - pickerAppearance: "dayOnly", - displayFormat: "d MMM yyy", + pickerAppearance: 'dayOnly', + displayFormat: 'd MMM yyy', }, }, }, { - name: "timeOnly", - type: "date", + name: 'timeOnly', + type: 'date', admin: { date: { - pickerAppearance: "timeOnly", - displayFormat: "h:mm:ss a", + pickerAppearance: 'timeOnly', + displayFormat: 'h:mm:ss a', }, }, }, { - name: "monthOnly", - type: "date", + name: 'monthOnly', + type: 'date', admin: { date: { - pickerAppearance: "monthOnly", - displayFormat: "MMMM yyyy", + pickerAppearance: 'monthOnly', + displayFormat: 'MMMM yyyy', }, }, }, ], -}; +} ``` diff --git a/docs/fields/email.mdx b/docs/fields/email.mdx index 7d36686fd..f2213851b 100644 --- a/docs/fields/email.mdx +++ b/docs/fields/email.mdx @@ -6,37 +6,35 @@ desc: The Email field enforces that the value provided is a valid email address. keywords: email, fields, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express --- - - The Email field enforces that the value provided is a valid email address. - +The Email field enforces that the value provided is a valid email address. - ### Config -| Option | Description | -| ---------------- | ----------- | -| **`name`** * | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | -| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. | -| **`unique`** | Enforce that each entry in the Collection has a unique value for this field. | -| **`index`** | Build a [MongoDB index](https://docs.mongodb.com/manual/indexes/) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. | -| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) | -| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. | -| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) | -| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) | -| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. | -| **`defaultValue`** | Provide data to be used for this field's default value. [More](/docs/fields/overview#default-values) | -| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. | -| **`required`** | Require this field to have a value. | -| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). | -| **`custom`** | Extension point for adding custom data (e.g. for plugins) | +| Option | Description | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`name`** \* | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | +| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. | +| **`unique`** | Enforce that each entry in the Collection has a unique value for this field. | +| **`index`** | Build a [MongoDB index](https://docs.mongodb.com/manual/indexes/) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. | +| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) | +| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. | +| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) | +| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) | +| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. | +| **`defaultValue`** | Provide data to be used for this field's default value. [More](/docs/fields/overview#default-values) | +| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. | +| **`required`** | Require this field to have a value. | +| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). | +| **`custom`** | Extension point for adding custom data (e.g. for plugins) | -*\* An asterisk denotes that a property is required.* +_\* An asterisk denotes that a property is required._ ### Admin config @@ -53,8 +51,9 @@ Set this property to a string that will be used for browser autocomplete. ### Example `collections/ExampleCollection.ts` + ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', @@ -64,7 +63,7 @@ export const ExampleCollection: CollectionConfig = { type: 'email', // required label: 'Contact Email Address', required: true, - } - ] -}; + }, + ], +} ``` diff --git a/docs/fields/group.mdx b/docs/fields/group.mdx index b9cbdb432..3c5ca228e 100644 --- a/docs/fields/group.mdx +++ b/docs/fields/group.mdx @@ -7,15 +7,15 @@ keywords: group, fields, config, configuration, documentation, Content Managemen --- - The Group field allows fields to be nested under a common property name. It - also groups fields together visually in the Admin panel. + The Group field allows fields to be nested under a common property name. It also groups fields + together visually in the Admin panel. - ### Config @@ -51,27 +51,27 @@ Set this property to `true` to hide this field's gutter within the admin panel. `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from "payload/types"; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { - slug: "example-collection", + slug: 'example-collection', fields: [ { - name: "pageMeta", // required - type: "group", // required - interfaceName: "Meta", // optional + name: 'pageMeta', // required + type: 'group', // required + interfaceName: 'Meta', // optional fields: [ // required { - name: "title", - type: "text", + name: 'title', + type: 'text', required: true, minLength: 20, maxLength: 100, }, { - name: "description", - type: "textarea", + name: 'description', + type: 'textarea', required: true, minLength: 40, maxLength: 160, @@ -79,5 +79,5 @@ export const ExampleCollection: CollectionConfig = { ], }, ], -}; +} ``` diff --git a/docs/fields/json.mdx b/docs/fields/json.mdx index 34c8debc2..0a17fdda8 100644 --- a/docs/fields/json.mdx +++ b/docs/fields/json.mdx @@ -7,37 +7,38 @@ desc: The JSON field type will store any string in the Database. Learn how to us keywords: json, fields, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express --- - - The JSON field type saves actual JSON in the database, which differs from the Code field that saves the value as a string in the database. + + The JSON field type saves actual JSON in the database, which differs from the Code field that + saves the value as a string in the database. - This field uses the `monaco-react` editor syntax highlighting. ### Config -| Option | Description | -| ---------------- | ----------- | -| **`name`** * | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | -| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. | -| **`unique`** | Enforce that each entry in the Collection has a unique value for this field. | -| **`index`** | Build a [MongoDB index](https://docs.mongodb.com/manual/indexes/) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. | -| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) | -| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. | -| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) | -| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) | -| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. | -| **`defaultValue`** | Provide data to be used for this field's default value. [More](/docs/fields/overview#default-values) | -| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. | -| **`required`** | Require this field to have a value. | -| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). | -| **`custom`** | Extension point for adding custom data (e.g. for plugins) | +| Option | Description | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`name`** \* | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | +| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. | +| **`unique`** | Enforce that each entry in the Collection has a unique value for this field. | +| **`index`** | Build a [MongoDB index](https://docs.mongodb.com/manual/indexes/) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. | +| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) | +| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. | +| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) | +| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) | +| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. | +| **`defaultValue`** | Provide data to be used for this field's default value. [More](/docs/fields/overview#default-values) | +| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. | +| **`required`** | Require this field to have a value. | +| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). | +| **`custom`** | Extension point for adding custom data (e.g. for plugins) | _\* An asterisk denotes that a property is required._ @@ -45,15 +46,16 @@ _\* An asterisk denotes that a property is required._ In addition to the default [field admin config](/docs/fields/overview#admin-config), you can adjust the following properties: -| Option | Description | -| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **`editorOptions`** | Options that can be passed to the monaco editor, [view the full list](https://microsoft.github.io/monaco-editor/api/interfaces/monaco.editor.IDiffEditorConstructionOptions.html). | +| Option | Description | +| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`editorOptions`** | Options that can be passed to the monaco editor, [view the full list](https://microsoft.github.io/monaco-editor/api/interfaces/monaco.editor.IDiffEditorConstructionOptions.html). | ### Example `collections/ExampleCollection.ts + ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', @@ -62,7 +64,7 @@ export const ExampleCollection: CollectionConfig = { name: 'customerJSON', // required type: 'json', // required required: true, - } - ] -}; + }, + ], +} ``` diff --git a/docs/fields/number.mdx b/docs/fields/number.mdx index b78eb4d60..6b6786342 100644 --- a/docs/fields/number.mdx +++ b/docs/fields/number.mdx @@ -6,42 +6,43 @@ desc: Number fields store and validate numeric data. Learn how to use and format keywords: number, fields, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express --- - - The Number field stores and validates numeric entry and supports additional numerical validation and formatting features. + + The Number field stores and validates numeric entry and supports additional numerical validation + and formatting features. - ### Config -| Option | Description | -| ---------------- | ----------- | -| **`name`** * | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | -| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. | -| **`min`** | Minimum value accepted. Used in the default `validation` function. | -| **`max`** | Maximum value accepted. Used in the default `validation` function. | -| **`hasMany`** | Makes this field an ordered array of numbers instead of just a single number. | -| **`minRows`** | Minimum number of numbers in the numbers array, if `hasMany` is set to true. | -| **`maxRows`** | Maximum number of numbers in the numbers array, if `hasMany` is set to true. | -| **`unique`** | Enforce that each entry in the Collection has a unique value for this field. | -| **`index`** | Build a [MongoDB index](https://docs.mongodb.com/manual/indexes/) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. | -| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) | -| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. | -| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) | -| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) | -| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. | -| **`defaultValue`** | Provide data to be used for this field's default value. [More](/docs/fields/overview#default-values) | -| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. | -| **`required`** | Require this field to have a value. | -| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). | -| **`custom`** | Extension point for adding custom data (e.g. for plugins) | +| Option | Description | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`name`** \* | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | +| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. | +| **`min`** | Minimum value accepted. Used in the default `validation` function. | +| **`max`** | Maximum value accepted. Used in the default `validation` function. | +| **`hasMany`** | Makes this field an ordered array of numbers instead of just a single number. | +| **`minRows`** | Minimum number of numbers in the numbers array, if `hasMany` is set to true. | +| **`maxRows`** | Maximum number of numbers in the numbers array, if `hasMany` is set to true. | +| **`unique`** | Enforce that each entry in the Collection has a unique value for this field. | +| **`index`** | Build a [MongoDB index](https://docs.mongodb.com/manual/indexes/) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. | +| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) | +| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. | +| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) | +| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) | +| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. | +| **`defaultValue`** | Provide data to be used for this field's default value. [More](/docs/fields/overview#default-values) | +| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. | +| **`required`** | Require this field to have a value. | +| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). | +| **`custom`** | Extension point for adding custom data (e.g. for plugins) | -*\* An asterisk denotes that a property is required.* +_\* An asterisk denotes that a property is required._ ### Admin config @@ -62,8 +63,9 @@ Set this property to a string that will be used for browser autocomplete. ### Example `collections/ExampleCollection.ts` + ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', @@ -74,8 +76,8 @@ export const ExampleCollection: CollectionConfig = { required: true, admin: { step: 1, - } - } - ] -}; + }, + }, + ], +} ``` diff --git a/docs/fields/overview.mdx b/docs/fields/overview.mdx index 29146f8b3..7e3315af8 100644 --- a/docs/fields/overview.mdx +++ b/docs/fields/overview.mdx @@ -7,8 +7,9 @@ keywords: overview, fields, config, configuration, documentation, Content Manage --- - Fields are the building blocks of Payload. Collections and Globals both use Fields to define the shape of the data - that they store. Payload offers a wide variety of field types - both simple and complex. + Fields are the building blocks of Payload. Collections and Globals both use Fields to define the + shape of the data that they store. Payload offers a wide variety of field types - both simple and + complex. Fields are defined as an array on Collections and Globals via the `fields` key. They define the shape of the data that will be stored as well as automatically construct the corresponding Admin UI. @@ -16,22 +17,23 @@ Fields are defined as an array on Collections and Globals via the `fields` key. The required `type` property on a field determines what values it can accept, how it is presented in the API, and how the field will be rendered in the admin interface. **Simple collection with two fields:** + ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const Page: CollectionConfig = { - slug: 'pages', - fields: [ - { - name: 'myField', - type: 'text', // highlight-line - }, - { - name: 'otherField', - type: 'checkbox', // highlight-line - }, - ], -}; + slug: 'pages', + fields: [ + { + name: 'myField', + type: 'text', // highlight-line + }, + { + name: 'otherField', + type: 'checkbox', // highlight-line + }, + ], +} ``` ### Field types @@ -73,11 +75,12 @@ Some fields use their `name` property as a unique identifier to store and retrie Field validation is enforced automatically based on the field type and other properties such as `required` or `min` and `max` value constraints on certain field types. This default behavior can be replaced by providing your own validate function for any field. It will be used on both the frontend and the backend, so it should not rely on any Node-specific packages. The validation function can be either synchronous or asynchronous and expects to return either `true` or a string error message to display in both API responses and within the Admin panel. There are two arguments available to custom validation functions. + 1. The value which is currently assigned to the field 2. An optional object with dynamic properties for more complex validation having the following: | Property | Description | -|---------------|--------------------------------------------------------------------------------------------------------------------------| +| ------------- | ------------------------------------------------------------------------------------------------------------------------ | | `data` | An object of the full collection or global document. | | `siblingData` | An object of the document data limited to fields within the same parent to the field. | | `operation` | Will be "create" or "update" depending on the UI action or API call. | @@ -87,8 +90,9 @@ There are two arguments available to custom validation functions. | `payload` | If the `validate` function is being executed on the server, Payload will be exposed for easily running local operations. | Example: + ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const Orders: CollectionConfig = { slug: 'orders', @@ -99,38 +103,39 @@ export const Orders: CollectionConfig = { validate: async (val, { operation }) => { if (operation !== 'create') { // skip validation on update - return true; + return true } - const response = await fetch(`https://your-api.com/customers/${val}`); + const response = await fetch(`https://your-api.com/customers/${val}`) if (response.ok) { - return true; + return true } - return 'The customer number provided does not match any customers within our records.'; + return 'The customer number provided does not match any customers within our records.' }, }, ], -}; +} ``` When supplying a field `validate` function, Payload will use yours in place of the default. To make use of the default field validation in your custom logic you can import, call and return the result as needed. For example: + ```ts -import { text } from 'payload/fields/validations'; +import { text } from 'payload/fields/validations' const field: Field = { name: 'notBad', type: 'text', validate: (val, args) => { if (val === 'bad') { - return 'This cannot be "bad"'; + return 'This cannot be "bad"' } // highlight-start - return text(val, args); + return text(val, args) // highlight-end }, -}; +} ``` ### Customizable ID @@ -140,6 +145,7 @@ Users are then required to provide a custom ID value when creating a record thro Valid ID types are `number` and `text`. Example: + ```ts { fields: [ @@ -155,19 +161,19 @@ Example: In addition to each field's base configuration, you can define specific traits and properties for fields that only have effect on how they are rendered in the Admin panel. The following properties are available for all fields within the `admin` property: -| Option | Description | -|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `condition` | You can programmatically show / hide fields based on what other fields are doing. [Click here](#conditional-logic) for more info. | -| `components` | All field components can be completely and easily swapped out for custom components that you define. [Click here](#custom-components) for more info. | -| `description` | Helper text to display with the field to provide more information for the editor user. [Click here](#description) for more info. | -| `position` | Specify if the field should be rendered in the sidebar by defining `position: 'sidebar'`. | +| Option | Description | +| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `condition` | You can programmatically show / hide fields based on what other fields are doing. [Click here](#conditional-logic) for more info. | +| `components` | All field components can be completely and easily swapped out for custom components that you define. [Click here](#custom-components) for more info. | +| `description` | Helper text to display with the field to provide more information for the editor user. [Click here](#description) for more info. | +| `position` | Specify if the field should be rendered in the sidebar by defining `position: 'sidebar'`. | | `width` | Restrict the width of a field. you can pass any string-based value here, be it pixels, percentages, etc. This property is especially useful when fields are nested within a `Row` type where they can be organized horizontally. | -| `style` | Attach raw CSS style properties to the root DOM element of a field. | -| `className` | Attach a CSS class name to the root DOM element of a field. | -| `readOnly` | Setting a field to `readOnly` has no effect on the API whatsoever but disables the admin component's editability to prevent editors from modifying the field's value. | -| `disabled` | If a field is `disabled`, it is completely omitted from the Admin panel. | -| `disableBulkEdit` | Set `disableBulkEdit` to `true` to prevent fields from appearing in the select options when making edits for multiple documents. | -| `hidden` | Setting a field's `hidden` property on its `admin` config will transform it into a `hidden` input type. Its value will still submit with the Admin panel's requests, but the field itself will not be visible to editors. | +| `style` | Attach raw CSS style properties to the root DOM element of a field. | +| `className` | Attach a CSS class name to the root DOM element of a field. | +| `readOnly` | Setting a field to `readOnly` has no effect on the API whatsoever but disables the admin component's editability to prevent editors from modifying the field's value. | +| `disabled` | If a field is `disabled`, it is completely omitted from the Admin panel. | +| `disableBulkEdit` | Set `disableBulkEdit` to `true` to prevent fields from appearing in the select options when making edits for multiple documents. | +| `hidden` | Setting a field's `hidden` property on its `admin` config will transform it into a `hidden` input type. Its value will still submit with the Admin panel's requests, but the field itself will not be visible to editors. | ### Custom components @@ -200,14 +206,14 @@ The `condition` function should return a boolean that will control if the field // highlight-start condition: (data, siblingData, { user }) => { if (data.enableGreeting) { - return true; + return true } else { - return false; + return false } - } + }, // highlight-end - } - } + }, + }, ] } ``` @@ -225,17 +231,17 @@ Here is an example of a defaultValue function that uses both: ```ts const translation: { - en: 'Written by', - es: 'Escrito por', -}; + en: 'Written by' + es: 'Escrito por' +} const field = { name: 'attribution', type: 'text', // highlight-start - defaultValue: ({ user, locale }) => (`${translation[locale]} ${user.name}`) + defaultValue: ({ user, locale }) => `${translation[locale]} ${user.name}`, // highlight-end -}; +} ``` @@ -245,6 +251,7 @@ const field = { ### Description A description can be configured three ways. + - As a string - As a function that accepts an object containing the field's value, which returns a string - As a React component that accepts value as a prop @@ -262,15 +269,17 @@ As shown above, you can simply provide a string that will show by the field, but maxLength: 20, admin: { description: ({ value }) => - (`${typeof value === 'string' ? 20 - value.length : '20'} characters left`) - } - } + `${typeof value === 'string' ? 20 - value.length : '20'} characters left`, + }, + }, ] } ``` + This example will display the number of characters allowed as the user types. **Component Example:** + ```ts { fields: [ @@ -292,6 +301,7 @@ This example will display the number of characters allowed as the user types. ] } ``` + This component will count the number of characters entered. ### TypeScript @@ -299,7 +309,5 @@ This component will count the number of characters entered. You can import the internal Payload `Field` type as well as other common field types as follows: ```ts -import type { - Field, -} from 'payload/types'; +import type { Field } from 'payload/types' ``` diff --git a/docs/fields/point.mdx b/docs/fields/point.mdx index 2494ee14d..7d39f982c 100644 --- a/docs/fields/point.mdx +++ b/docs/fields/point.mdx @@ -7,45 +7,47 @@ desc: The Point field type stores coordinates in the database. Learn how to use keywords: point, geolocation, geospatial, geojson, 2dsphere, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express --- - - The Point field type saves a pair of coordinates in the database and assigns an index for location related queries. + + The Point field type saves a pair of coordinates in the database and assigns an index for location + related queries. - The data structure in the database matches the GeoJSON structure to represent point. The Payload APIs simplifies the object data to only the [longitude, latitude] location. ### Config -| Option | Description | -| ---------------- | ----------- | -| **`name`** * | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | -| **`label`** | Used as a field label in the Admin panel and to name the generated GraphQL type. | -| **`unique`** | Enforce that each entry in the Collection has a unique value for this field. | -| **`index`** | Build a [MongoDB index](https://docs.mongodb.com/manual/indexes/) for this field to produce faster queries. To support location queries, point index defaults to `2dsphere`, to disable the index set to `false`. | -| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) | -| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. | -| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) | -| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) | -| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. | -| **`defaultValue`** | Provide data to be used for this field's default value. [More](/docs/fields/overview#default-values) | -| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. | -| **`required`** | Require this field to have a value. | -| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). | -| **`custom`** | Extension point for adding custom data (e.g. for plugins) | +| Option | Description | +| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`name`** \* | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | +| **`label`** | Used as a field label in the Admin panel and to name the generated GraphQL type. | +| **`unique`** | Enforce that each entry in the Collection has a unique value for this field. | +| **`index`** | Build a [MongoDB index](https://docs.mongodb.com/manual/indexes/) for this field to produce faster queries. To support location queries, point index defaults to `2dsphere`, to disable the index set to `false`. | +| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) | +| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. | +| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) | +| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) | +| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. | +| **`defaultValue`** | Provide data to be used for this field's default value. [More](/docs/fields/overview#default-values) | +| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. | +| **`required`** | Require this field to have a value. | +| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). | +| **`custom`** | Extension point for adding custom data (e.g. for plugins) | -*\* An asterisk denotes that a property is required.* +_\* An asterisk denotes that a property is required._ ### Example `collections/ExampleCollection.ts` + ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', @@ -55,8 +57,8 @@ export const ExampleCollection: CollectionConfig = { type: 'point', label: 'Location', }, - ] -}; + ], +} ``` ### Querying diff --git a/docs/fields/radio.mdx b/docs/fields/radio.mdx index 46f93561e..29e520c8c 100644 --- a/docs/fields/radio.mdx +++ b/docs/fields/radio.mdx @@ -6,41 +6,46 @@ desc: The Radio field type allows for the selection of one value from a predefin keywords: radio, fields, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express --- - - The Radio Group field type allows for the selection of one value from a predefined set of possible values and presents a radio group-style set of inputs to the Admin panel. + + The Radio Group field type allows for the selection of one value from a predefined set of possible + values and presents a radio group-style set of inputs to the Admin panel. - ### Config -| Option | Description | -| ---------------- | ----------- | -| **`name`** * | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | -| **`options`** * | Array of options to allow the field to store. Can either be an array of strings, or an array of objects containing an `label` string and a `value` string. | -| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. | -| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) | -| **`index`** | Build a [MongoDB index](https://docs.mongodb.com/manual/indexes/) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. | -| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. | -| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) | -| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) | -| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. | -| **`defaultValue`** | Provide data to be used for this field's default value. The default value must exist within provided values in `options`. [More](/docs/fields/overview#default-values) | -| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. | -| **`required`** | Require this field to have a value. | -| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). | -| **`custom`** | Extension point for adding custom data (e.g. for plugins) | +| Option | Description | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`name`** \* | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | +| **`options`** \* | Array of options to allow the field to store. Can either be an array of strings, or an array of objects containing an `label` string and a `value` string. | +| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. | +| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) | +| **`index`** | Build a [MongoDB index](https://docs.mongodb.com/manual/indexes/) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. | +| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. | +| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) | +| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) | +| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. | +| **`defaultValue`** | Provide data to be used for this field's default value. The default value must exist within provided values in `options`. [More](/docs/fields/overview#default-values) | +| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. | +| **`required`** | Require this field to have a value. | +| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). | +| **`custom`** | Extension point for adding custom data (e.g. for plugins) | -*\* An asterisk denotes that a property is required.* +_\* An asterisk denotes that a property is required._ - Important:
- Option values should be strings that do not contain hyphens or special characters due to GraphQL enumeration naming constraints. Underscores are allowed. If you determine you need your option values to be non-strings or contain special characters, they will be formatted accordingly before being used as a GraphQL enum. + Important: +
+ Option values should be strings that do not contain hyphens or special characters due to GraphQL + enumeration naming constraints. Underscores are allowed. If you determine you need your option + values to be non-strings or contain special characters, they will be formatted accordingly before + being used as a GraphQL enum.
### Admin config @@ -54,8 +59,9 @@ The `layout` property allows for the radio group to be styled as a horizonally o ### Example `collections/ExampleCollection.ts` + ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', @@ -63,7 +69,8 @@ export const ExampleCollection: CollectionConfig = { { name: 'color', // required type: 'radio', // required - options: [ // required + options: [ + // required { label: 'Mint', value: 'mint', @@ -76,8 +83,8 @@ export const ExampleCollection: CollectionConfig = { defaultValue: 'mint', // The first value in options. admin: { layout: 'horizontal', - } - } - ] + }, + }, + ], } ``` diff --git a/docs/fields/relationship.mdx b/docs/fields/relationship.mdx index ae13e95f9..864ade0b1 100644 --- a/docs/fields/relationship.mdx +++ b/docs/fields/relationship.mdx @@ -7,15 +7,15 @@ keywords: relationship, fields, config, configuration, documentation, Content Ma --- - The Relationship field is one of the most powerful fields Payload features. It - provides for the ability to easily relate documents together. + The Relationship field is one of the most powerful fields Payload features. It provides for the + ability to easily relate documents together. - **Example uses:** @@ -54,8 +54,8 @@ _\* An asterisk denotes that a property is required._ Tip:
- The [Depth](/docs/getting-started/concepts#depth) parameter can be used to - automatically populate related documents that are returned by the API. + The [Depth](/docs/getting-started/concepts#depth) parameter can be used to automatically populate + related documents that are returned by the API.
### Admin config @@ -87,32 +87,32 @@ The `filterOptions` property can either be a `Where` query directly, or a functi ### Example ```ts -import { CollectionConfig } from "payload/types"; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { - slug: "example-collection", + slug: 'example-collection', fields: [ { - name: "purchase", - type: "relationship", - relationTo: ["products", "services"], + name: 'purchase', + type: 'relationship', + relationTo: ['products', 'services'], filterOptions: ({ relationTo, siblingData }) => { // returns a Where query dynamically by the type of relationship - if (relationTo === "products") { + if (relationTo === 'products') { return { stock: { greater_than: siblingData.quantity }, - }; + } } - if (relationTo === "services") { + if (relationTo === 'services') { return { isAvailable: { equals: true }, - }; + } } }, }, ], -}; +} ``` You can learn more about writing queries [here](/docs/queries/overview). @@ -120,11 +120,10 @@ You can learn more about writing queries [here](/docs/queries/overview). Note:
- When a relationship field has both filterOptions and a custom{" "} - validate function, the api will not validate{" "} - filterOptions unless you call the default relationship field - validation function imported from payload/fields/validations{" "} - in your validate function. + When a relationship field has both filterOptions and a custom{' '} + validate function, the api will not validate filterOptions{' '} + unless you call the default relationship field validation function imported from{' '} + payload/fields/validations in your validate function.
### How the data is saved diff --git a/docs/fields/rich-text.mdx b/docs/fields/rich-text.mdx index a23c38321..7501665e9 100644 --- a/docs/fields/rich-text.mdx +++ b/docs/fields/rich-text.mdx @@ -7,20 +7,27 @@ keywords: rich text, fields, config, configuration, documentation, Content Manag --- - The Rich Text field is a powerful way to allow editors to write dynamic content. The content is saved as JSON in the database and can be converted into any format, including HTML, that you need. + The Rich Text field is a powerful way to allow editors to write dynamic content. The content is + saved as JSON in the database and can be converted into any format, including HTML, that you need. - The Admin component is built on the powerful [`slatejs`](https://docs.slatejs.org/) editor and is meant to be as extensible and customizable as possible. - Consistent with Payload's goal of making you learn as little of Payload as possible, customizing and using the Rich Text Editor does not involve learning how to develop for a Payload rich text editor. Instead, you can invest your time and effort into learning Slate, an open-source tool that will allow you to apply your learnings elsewhere as well. + + Consistent with Payload's goal of making you learn as little of Payload as possible, customizing + and using the Rich Text Editor does not involve learning how to develop for a Payload{' '} + rich text editor. + {' '} + Instead, you can invest your time and effort into learning Slate, an open-source tool that will + allow you to apply your learnings elsewhere as well. ### Config @@ -120,7 +127,12 @@ The built-in `relationship` element is a powerful way to reference other Documen Similar to the `relationship` element, the `upload` element is a user-friendly way to reference [Upload-enabled collections](/docs/upload/overview) with a UI specifically designed for media / image-based uploads. - Tip:
Collections are automatically allowed to be selected within the Rich Text relationship and upload elements by default. If you want to disable a collection from being able to be referenced in Rich Text fields, set the collection admin options of enableRichTextLink and enableRichTextRelationship to false. + Tip: +
+ Collections are automatically allowed to be selected within the Rich Text relationship and upload + elements by default. If you want to disable a collection from being able to be referenced in Rich + Text fields, set the collection admin options of enableRichTextLink and{' '} + enableRichTextRelationship to false.
Relationship and Upload elements are populated dynamically into your Rich Text field' content. Within the REST and Local APIs, any present RichText `relationship` or `upload` elements will respect the `depth` option that you pass, and will be populated accordingly. In GraphQL, each `richText` field accepts an argument of `depth` for you to utilize. @@ -159,29 +171,29 @@ Specifying custom `Type`s let you extend your custom elements by adding addition `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from "payload/types"; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { - slug: "example-collection", + slug: 'example-collection', fields: [ { - name: "content", // required - type: "richText", // required + name: 'content', // required + type: 'richText', // required defaultValue: [ { - children: [{ text: "Here is some default content for this field" }], + children: [{ text: 'Here is some default content for this field' }], }, ], required: true, admin: { elements: [ - "h2", - "h3", - "h4", - "link", - "blockquote", + 'h2', + 'h3', + 'h4', + 'link', + 'blockquote', { - name: "cta", + name: 'cta', Button: CustomCallToActionButton, Element: CustomCallToActionElement, plugins: [ @@ -190,10 +202,10 @@ export const ExampleCollection: CollectionConfig = { }, ], leaves: [ - "bold", - "italic", + 'bold', + 'italic', { - name: "highlight", + name: 'highlight', Button: CustomHighlightButton, Leaf: CustomHighlightLeaf, plugins: [ @@ -205,11 +217,11 @@ export const ExampleCollection: CollectionConfig = { // Inject your own fields into the Link element fields: [ { - name: "rel", - label: "Rel Attribute", - type: "select", + name: 'rel', + label: 'Rel Attribute', + type: 'select', hasMany: true, - options: ["noopener", "noreferrer", "nofollow"], + options: ['noopener', 'noreferrer', 'nofollow'], }, ], }, @@ -226,7 +238,7 @@ export const ExampleCollection: CollectionConfig = { }, }, ], -}; +} ``` For more examples regarding how to define your own elements and leaves, check out the example [`RichText` field](https://github.com/payloadcms/public-demo/blob/master/src/fields/hero.ts) within the Public Demo source code. @@ -296,7 +308,10 @@ const serialize = (children) => ``` - Note:
The above example is for how to render to JSX, although for plain HTML the pattern is similar. Just remove the JSX and return HTML strings instead! + Note: +
+ The above example is for how to render to JSX, although for plain HTML the pattern is similar. + Just remove the JSX and return HTML strings instead!
### Built-in SlateJS Plugins @@ -312,26 +327,26 @@ If you want to utilize this functionality within your own custom elements, you c `customLargeBodyElement.js`: ```ts -import Button from "./Button"; -import Element from "./Element"; -import withLargeBody from "./plugin"; +import Button from './Button' +import Element from './Element' +import withLargeBody from './plugin' export default { - name: "large-body", + name: 'large-body', Button, Element, plugins: [ (incomingEditor) => { - const editor = incomingEditor; - const { shouldBreakOutOnEnter } = editor; + const editor = incomingEditor + const { shouldBreakOutOnEnter } = editor editor.shouldBreakOutOnEnter = (element) => - element.type === "large-body" ? true : shouldBreakOutOnEnter(element); + element.type === 'large-body' ? true : shouldBreakOutOnEnter(element) - return editor; + return editor }, ], -}; +} ``` Above, you can see that we are creating a custom SlateJS element with a name of `large-body`. This might render a slightly larger body copy on the frontend of your app(s). We pass it a name, button, and element—but additionally, we pass it a `plugins` array containing a single SlateJS plugin. @@ -343,5 +358,5 @@ The plugin itself extends Payload's built-in `shouldBreakOutOnEnter` Slate funct If you are building your own custom Rich Text elements or leaves, you may benefit from importing the following types: ```ts -import type { RichTextCustomElement, RichTextCustomLeaf } from "payload/types"; +import type { RichTextCustomElement, RichTextCustomLeaf } from 'payload/types' ``` diff --git a/docs/fields/row.mdx b/docs/fields/row.mdx index b6cfee864..9b1514135 100644 --- a/docs/fields/row.mdx +++ b/docs/fields/row.mdx @@ -6,39 +6,42 @@ desc: With the Row field you can arrange fields next to each other in the Admin keywords: row, fields, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express --- - - The Row field is presentational-only and only affects the Admin panel. By using it, you can arrange fields next to each other horizontally. + + The Row field is presentational-only and only affects the Admin panel. By using it, you can + arrange fields next to each other horizontally. - ### Config -| Option | Description | -| ---------------- | ----------- | -| **`fields`** * | Array of field types to nest within this Row. | -| **`admin`** | Admin-specific configuration excluding `description`, `readOnly`, and `hidden`. See the [default field admin config](/docs/fields/overview#admin-config) for more details. | -| **`custom`** | Extension point for adding custom data (e.g. for plugins) | +| Option | Description | +| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`fields`** \* | Array of field types to nest within this Row. | +| **`admin`** | Admin-specific configuration excluding `description`, `readOnly`, and `hidden`. See the [default field admin config](/docs/fields/overview#admin-config) for more details. | +| **`custom`** | Extension point for adding custom data (e.g. for plugins) | -*\* An asterisk denotes that a property is required.* +_\* An asterisk denotes that a property is required._ ### Example `collections/ExampleCollection.ts` + ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', fields: [ { type: 'row', // required - fields: [ // required + fields: [ + // required { name: 'label', type: 'text', @@ -56,8 +59,7 @@ export const ExampleCollection: CollectionConfig = { }, }, ], - } - ] + }, + ], } - ``` diff --git a/docs/fields/select.mdx b/docs/fields/select.mdx index 4c87ae88f..0868db554 100644 --- a/docs/fields/select.mdx +++ b/docs/fields/select.mdx @@ -7,21 +7,21 @@ keywords: select, multi-select, fields, config, configuration, documentation, Co --- - The Select field provides a dropdown-style interface for choosing options from - a predefined list as an enumeration. + The Select field provides a dropdown-style interface for choosing options from a predefined list + as an enumeration. - ### Config | Option | Description | -| ------------------ |-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **`name`** \* | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | | **`options`** \* | Array of options to allow the field to store. Can either be an array of strings, or an array of objects containing a `label` string and a `value` string. | | **`hasMany`** | Boolean when, if set to `true`, allows this field to have many selections instead of only one. | @@ -44,11 +44,10 @@ _\* An asterisk denotes that a property is required._ Important:
- Option values should be strings that do not contain hyphens or special - characters due to GraphQL enumeration naming constraints. Underscores are - allowed. If you determine you need your option values to be non-strings or - contain special characters, they will be formatted accordingly before being - used as a GraphQL enum. + Option values should be strings that do not contain hyphens or special characters due to GraphQL + enumeration naming constraints. Underscores are allowed. If you determine you need your option + values to be non-strings or contain special characters, they will be formatted accordingly before + being used as a GraphQL enum.
### Admin config @@ -66,8 +65,9 @@ Set to `true` if you'd like this field to be sortable within the Admin UI using ### Example `collections/ExampleCollection.ts` + ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', @@ -94,8 +94,7 @@ export const ExampleCollection: CollectionConfig = { value: 'carbon_fiber_dashboard', }, ], - } - ] + }, + ], } - ``` diff --git a/docs/fields/tabs.mdx b/docs/fields/tabs.mdx index afc7cb8d2..7a62a0c4f 100644 --- a/docs/fields/tabs.mdx +++ b/docs/fields/tabs.mdx @@ -7,19 +7,18 @@ keywords: tabs, fields, config, configuration, documentation, Content Management --- - The Tabs field is presentational-only and only affects the Admin panel (unless - a tab is named). By using it, you can place fields within a nice layout - component that separates certain sub-fields by a tabbed interface. + The Tabs field is presentational-only and only affects the Admin panel (unless a tab is named). By + using it, you can place fields within a nice layout component that separates certain sub-fields by + a tabbed interface. - - ### Config | Option | Description | @@ -32,12 +31,12 @@ keywords: tabs, fields, config, configuration, documentation, Content Management Each tab must have either a `name` or `label` and the required `fields` array. You can also optionally pass a `description` to render within each individual tab. -| Option | Description | -| ---------------- |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **`name`** | Groups field data into an object when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | -| **`label`** | The label to render on the tab itself. Required when name is undefined, defaults to name converted to words. | -| **`fields`** \* | The fields to render within this tab. | -| **`description`** | Optionally render a description within this tab to describe the contents of the tab itself. | +| Option | Description | +| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| **`name`** | Groups field data into an object when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | +| **`label`** | The label to render on the tab itself. Required when name is undefined, defaults to name converted to words. | +| **`fields`** \* | The fields to render within this tab. | +| **`description`** | Optionally render a description within this tab to describe the contents of the tab itself. | | **`interfaceName`** | Create a top level, reusable [Typescript interface](/docs/typescript/generating-types#custom-field-interfaces) & [GraphQL type](/docs/graphql/graphql-schema#custom-field-schemas). (`name` must be present) | _\* An asterisk denotes that a property is required._ @@ -47,36 +46,36 @@ _\* An asterisk denotes that a property is required._ `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from "payload/types"; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { - slug: "example-collection", + slug: 'example-collection', fields: [ { - type: "tabs", // required + type: 'tabs', // required tabs: [ // required { - label: "Tab One Label", // required - description: "This will appear within the tab above the fields.", + label: 'Tab One Label', // required + description: 'This will appear within the tab above the fields.', fields: [ // required { - name: "someTextField", - type: "text", + name: 'someTextField', + type: 'text', required: true, }, ], }, { - name: "tabTwo", - label: "Tab Two Label", // required - interfaceName: "TabTwo", // optional (`name` must be present) + name: 'tabTwo', + label: 'Tab Two Label', // required + interfaceName: 'TabTwo', // optional (`name` must be present) fields: [ // required { - name: "numberField", // accessible via tabTwo.numberField - type: "number", + name: 'numberField', // accessible via tabTwo.numberField + type: 'number', required: true, }, ], @@ -84,5 +83,5 @@ export const ExampleCollection: CollectionConfig = { ], }, ], -}; +} ``` diff --git a/docs/fields/text.mdx b/docs/fields/text.mdx index 5df281b8e..9c27159e6 100644 --- a/docs/fields/text.mdx +++ b/docs/fields/text.mdx @@ -6,39 +6,40 @@ desc: Text field types simply save a string to the database and provide the Admi keywords: text, fields, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express --- - - The Text field type is one of the most commonly used fields. It saves a string to the database and provides the Admin panel with a simple text input. + + The Text field type is one of the most commonly used fields. It saves a string to the database and + provides the Admin panel with a simple text input. - ### Config -| Option | Description | -| ---------------- | ----------- | -| **`name`** * | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | -| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. | -| **`unique`** | Enforce that each entry in the Collection has a unique value for this field. | -| **`minLength`** | Used by the default validation function to ensure values are of a minimum character length. | -| **`maxLength`** | Used by the default validation function to ensure values are of a maximum character length. | -| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) | -| **`index`** | Build a [MongoDB index](https://docs.mongodb.com/manual/indexes/) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. | -| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. | -| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) | -| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) | -| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. | -| **`defaultValue`** | Provide data to be used for this field's default value. [More](/docs/fields/overview#default-values) | -| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. | -| **`required`** | Require this field to have a value. | -| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). | -| **`custom`** | Extension point for adding custom data (e.g. for plugins) | +| Option | Description | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`name`** \* | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | +| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. | +| **`unique`** | Enforce that each entry in the Collection has a unique value for this field. | +| **`minLength`** | Used by the default validation function to ensure values are of a minimum character length. | +| **`maxLength`** | Used by the default validation function to ensure values are of a maximum character length. | +| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) | +| **`index`** | Build a [MongoDB index](https://docs.mongodb.com/manual/indexes/) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. | +| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. | +| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) | +| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) | +| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. | +| **`defaultValue`** | Provide data to be used for this field's default value. [More](/docs/fields/overview#default-values) | +| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. | +| **`required`** | Require this field to have a value. | +| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). | +| **`custom`** | Extension point for adding custom data (e.g. for plugins) | -*\* An asterisk denotes that a property is required.* +_\* An asterisk denotes that a property is required._ ### Admin config @@ -59,8 +60,9 @@ Override the default text direction of the Admin panel for this field. Set to `t ### Example `collections/ExampleCollection.ts` + ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', @@ -69,8 +71,7 @@ export const ExampleCollection: CollectionConfig = { name: 'pageTitle', // required type: 'text', // required required: true, - } - ] + }, + ], } - ``` diff --git a/docs/fields/textarea.mdx b/docs/fields/textarea.mdx index 9dfd367ea..96a9b8258 100644 --- a/docs/fields/textarea.mdx +++ b/docs/fields/textarea.mdx @@ -6,39 +6,40 @@ desc: Textarea field types save a string to the database, similar to the Text fi keywords: textarea, fields, config, configuration, documentation, Content Management System, cms, headless, javascript, node, react, express --- - - The Textarea field is almost identical to the Text field but it features a slightly larger input that is better suited to edit longer text. + + The Textarea field is almost identical to the Text field but it features a slightly larger input + that is better suited to edit longer text. - ### Config -| Option | Description | -| ---------------- | ----------- | -| **`name`** * | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | -| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. | -| **`unique`** | Enforce that each entry in the Collection has a unique value for this field. | -| **`minLength`** | Used by the default validation function to ensure values are of a minimum character length. | -| **`maxLength`** | Used by the default validation function to ensure values are of a maximum character length. | -| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) | -| **`index`** | Build a [MongoDB index](https://docs.mongodb.com/manual/indexes/) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. | -| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. | -| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) | -| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) | -| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. | -| **`defaultValue`** | Provide data to be used for this field's default value. [More](/docs/fields/overview#default-values)| -| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. | -| **`required`** | Require this field to have a value. | -| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). | -| **`custom`** | Extension point for adding custom data (e.g. for plugins) | +| Option | Description | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **`name`** \* | To be used as the property name when stored and retrieved from the database. [More](/docs/fields/overview#field-names) | +| **`label`** | Text used as a field label in the Admin panel or an object with keys for each language. | +| **`unique`** | Enforce that each entry in the Collection has a unique value for this field. | +| **`minLength`** | Used by the default validation function to ensure values are of a minimum character length. | +| **`maxLength`** | Used by the default validation function to ensure values are of a maximum character length. | +| **`validate`** | Provide a custom validation function that will be executed on both the Admin panel and the backend. [More](/docs/fields/overview#validation) | +| **`index`** | Build a [MongoDB index](https://docs.mongodb.com/manual/indexes/) for this field to produce faster queries. Set this field to `true` if your users will perform queries on this field's data often. | +| **`saveToJWT`** | If this field is top-level and nested in a config supporting [Authentication](/docs/authentication/config), include its data in the user JWT. | +| **`hooks`** | Provide field-based hooks to control logic for this field. [More](/docs/fields/overview#field-level-hooks) | +| **`access`** | Provide field-based access control to denote what users can see and do with this field's data. [More](/docs/fields/overview#field-level-access-control) | +| **`hidden`** | Restrict this field's visibility from all APIs entirely. Will still be saved to the database, but will not appear in any API or the Admin panel. | +| **`defaultValue`** | Provide data to be used for this field's default value. [More](/docs/fields/overview#default-values) | +| **`localized`** | Enable localization for this field. Requires [localization to be enabled](/docs/configuration/localization) in the Base config. | +| **`required`** | Require this field to have a value. | +| **`admin`** | Admin-specific configuration. See below for [more detail](#admin-config). | +| **`custom`** | Extension point for adding custom data (e.g. for plugins) | -*\* An asterisk denotes that a property is required.* +_\* An asterisk denotes that a property is required._ ### Admin config @@ -59,8 +60,9 @@ Override the default text direction of the Admin panel for this field. Set to `t ### Example `collections/ExampleCollection.ts` + ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { slug: 'example-collection', @@ -69,8 +71,7 @@ export const ExampleCollection: CollectionConfig = { name: 'metaDescription', // required type: 'textarea', // required required: true, - } - ] + }, + ], } - ``` diff --git a/docs/fields/ui.mdx b/docs/fields/ui.mdx index 2a10c878c..6609c792f 100644 --- a/docs/fields/ui.mdx +++ b/docs/fields/ui.mdx @@ -7,10 +7,9 @@ keywords: custom field, react component, fields, config, configuration, document --- - The UI (user interface) field gives you a ton of power to add your own React - components directly into the Admin panel, nested directly within your other - fields. It has absolutely no effect on the data of your documents. It is - presentational-only. + The UI (user interface) field gives you a ton of power to add your own React components directly + into the Admin panel, nested directly within your other fields. It has absolutely no effect on the + data of your documents. It is presentational-only. This field is helpful if you need to build in custom functionality via React components within the Admin panel. Think of it as a way for you to "plug in" your own React components directly within your other fields, so you can provide your editors with new controls exactly where you want them to go. @@ -41,14 +40,14 @@ _\* An asterisk denotes that a property is required._ `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from "payload/types"; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { - slug: "example-collection", + slug: 'example-collection', fields: [ { - name: "myCustomUIField", // required - type: "ui", // required + name: 'myCustomUIField', // required + type: 'ui', // required admin: { components: { Field: MyCustomUIField, @@ -57,5 +56,5 @@ export const ExampleCollection: CollectionConfig = { }, }, ], -}; +} ``` diff --git a/docs/fields/upload.mdx b/docs/fields/upload.mdx index 5fe888a3e..17458f9a6 100644 --- a/docs/fields/upload.mdx +++ b/docs/fields/upload.mdx @@ -7,19 +7,23 @@ keywords: upload, images media, fields, config, configuration, documentation, Co --- - The Upload field allows for the selection of a Document from a collection supporting Uploads, and formats the selection as a thumbnail in the Admin panel. + The Upload field allows for the selection of a Document from a collection supporting Uploads, and + formats the selection as a thumbnail in the Admin panel. - Important:
- To use this field, you need to have a Collection configured to allow Uploads. For more information, [click here](/docs/upload/overview) to read about how to enable Uploads on a collection by collection basis. + Important: +
+ To use this field, you need to have a Collection configured to allow Uploads. For more + information, [click here](/docs/upload/overview) to read about how to enable Uploads on a + collection by collection basis.
- **Example uses:** @@ -57,19 +61,19 @@ _\* An asterisk denotes that a property is required._ `collections/ExampleCollection.ts` ```ts -import { CollectionConfig } from "payload/types"; +import { CollectionConfig } from 'payload/types' export const ExampleCollection: CollectionConfig = { - slug: "example-collection", + slug: 'example-collection', fields: [ { - name: "backgroundImage", // required - type: "upload", // required - relationTo: "media", // required + name: 'backgroundImage', // required + type: 'upload', // required + relationTo: 'media', // required required: true, }, ], -}; +} ``` ### Filtering upload options @@ -90,18 +94,22 @@ The `filterOptions` property can either be a `Where` query directly, or a functi ```ts const uploadField = { - name: "image", - type: "upload", - relationTo: "media", + name: 'image', + type: 'upload', + relationTo: 'media', filterOptions: { - mimeType: { contains: "image" }, + mimeType: { contains: 'image' }, }, -}; +} ``` You can learn more about writing queries [here](/docs/queries/overview). - Note:
- When an upload field has both filterOptions and a custom validate function, the api will not validate filterOptions unless you call the default upload field validation function imported from payload/fields/validations in your validate function. + Note: +
+ When an upload field has both filterOptions and a custom{' '} + validate function, the api will not validate filterOptions{' '} + unless you call the default upload field validation function imported from{' '} + payload/fields/validations in your validate function.
diff --git a/docs/getting-started/concepts.mdx b/docs/getting-started/concepts.mdx index ef88409bc..b87bee24e 100644 --- a/docs/getting-started/concepts.mdx +++ b/docs/getting-started/concepts.mdx @@ -10,16 +10,14 @@ Payload is based around a small and intuitive set of concepts. Before starting t ### Config - - The Payload config is where you configure everything that Payload does. - +The Payload config is where you configure everything that Payload does. By default, the Payload config lives in the root folder of your code and is named `payload.config.js` (`payload.config.ts` if you're using TypeScript), but you can customize its name and where you store it. You can write full functions and even full React components right into your config. ### Collections - A Collection represents a type of content that Payload will store and can contain many documents. + A Collection represents a type of content that Payload will store and can contain many documents. Collections define the shape of your data as well as all functionalities attached to that data. They will contain one or many "documents", all corresponding with the same fields and functionalities that you define. @@ -29,7 +27,8 @@ They can represent anything you can store in a database - for example - pages, p ### Globals - A Global is a "one-off" piece of content that is perfect for storing navigational structures, themes, top-level meta data, and more. + A Global is a "one-off" piece of content that is perfect for storing navigational structures, + themes, top-level meta data, and more. Globals are in many ways similar to Collections, but there is only ever **one** instance of a Global, whereas Collections can contain many documents. @@ -37,7 +36,8 @@ Globals are in many ways similar to Collections, but there is only ever **one** ### Fields - Fields are the building blocks of Payload. Collections and Globals both use Fields to define the shape of the data that they store. + Fields are the building blocks of Payload. Collections and Globals both use Fields to define the + shape of the data that they store. Payload comes with [many different field types](../fields/overview) that give you a ton of flexibility while designing your API. Each Field type has its own potential properties that allow you to customize how they work. @@ -45,7 +45,8 @@ Payload comes with [many different field types](../fields/overview) that give yo ### Hooks - Hooks are where you can "tie in" to existing Payload actions to perform your own additional logic or modify how Payload operates altogether. + Hooks are where you can "tie in" to existing Payload actions to perform your own additional logic + or modify how Payload operates altogether. Hooks are an extremely powerful concept and are central to extending and customizing your app. Payload provides a wide variety of hooks which you can utilize. For example, imagine if you'd like to send an email every time a document is created in your Orders collection. To do so, you can add an `afterChange` hook function to your Orders collection that receives the Order data and allows you to send an email accordingly. @@ -65,10 +66,11 @@ For more, visit the [Access Control documentation](/docs/access-control/overview ### Depth - "Depth" gives you control over how many levels down related documents should be automatically populated when retrieved. + "Depth" gives you control over how many levels down related documents should be automatically + populated when retrieved. -You can specify population `depth` via query parameter in the REST API and by an option in the local API. *Depth has no effect in the GraphQL API, because there, depth is based on the shape of your queries.* +You can specify population `depth` via query parameter in the REST API and by an option in the local API. _Depth has no effect in the GraphQL API, because there, depth is based on the shape of your queries._ It is also possible to limit the depth for specific `relation` and `upload` fields using the `maxDepth` property in your configuration. **For example, let's look at the following Collections:** `departments`, `users`, `posts` @@ -155,6 +157,8 @@ To populate `user.author.department` in it's entirety you could specify `?depth= ``` - Note:
- When access control on collections prevents relationship fields from populating, the API response will contain the relationship id instead of the full document. + Note: +
+ When access control on collections prevents relationship fields from populating, the API response + will contain the relationship id instead of the full document.
diff --git a/docs/getting-started/installation.mdx b/docs/getting-started/installation.mdx index fe25be642..69d93a2d7 100644 --- a/docs/getting-started/installation.mdx +++ b/docs/getting-started/installation.mdx @@ -15,8 +15,7 @@ Payload requires the following software: - A MongoDB Database - Before proceeding any further, please ensure that you have the above - requirements met. + Before proceeding any further, please ensure that you have the above requirements met. ## Quickstart with create-payload-app @@ -36,13 +35,13 @@ Adding Payload to either a new or existing TypeScript + Express app is super str From there, the first step is writing a baseline config. Create a new `payload.config.ts` in your project's `/src` directory (or whatever your root TS dir is). The simplest config contains the following: ```js -import { buildConfig } from "payload/config"; +import { buildConfig } from 'payload/config' export default buildConfig({ // By default, Payload will boot up normally // and you will be provided with a base `User` collection. // But, here is where you define how you'd like Payload to work! -}); +}) ``` Write the above code into your newly created config file. This baseline config will automatically provide you with a default `User` collection. For more information about users and authentication, including how to provide your own user config, jump to the [Authentication](/docs/authentication/config) section. @@ -58,15 +57,13 @@ Now that you've got a baseline Payload config, it's time to initialize Payload. 1. Add the following code to `server.ts`: ```ts -import express from "express"; +import express from 'express' -const app = express(); +const app = express() app.listen(3000, async () => { - console.log( - "Express is now listening for incoming connections on port 3000." - ); -}); + console.log('Express is now listening for incoming connections on port 3000.') +}) ``` This server doesn't do anything just yet. But, after you have this in place, we can initialize Payload via its asynchronous `init()` method, which accepts a small set of arguments to tell it how to operate. @@ -74,27 +71,25 @@ This server doesn't do anything just yet. But, after you have this in place, we To initialize Payload, update your `server.ts` file to reflect the following code: ```ts -import express from "express"; -import payload from "payload"; +import express from 'express' +import payload from 'payload' -require("dotenv").config(); -const app = express(); +require('dotenv').config() +const app = express() const start = async () => { await payload.init({ secret: process.env.PAYLOAD_SECRET, mongoURL: process.env.MONGODB_URI, express: app, - }); + }) app.listen(3000, async () => { - console.log( - "Express is now listening for incoming connections on port 3000." - ); - }); -}; + console.log('Express is now listening for incoming connections on port 3000.') + }) +} -start(); +start() ``` A quick reminder: in this configuration, we're making use of two environmental variables, `process.env.PAYLOAD_SECRET` and `process.env.MONGODB_URI`. Often, it's smart to store these values in an `.env` file at the root of your directory and set different values for each of your environments (local, stage, prod, etc). The `dotenv` package is very handy and works well alongside of Payload. A typical `.env` file will look like this: diff --git a/docs/getting-started/what-is-payload.mdx b/docs/getting-started/what-is-payload.mdx index 3a2f4ea07..9f0d55223 100644 --- a/docs/getting-started/what-is-payload.mdx +++ b/docs/getting-started/what-is-payload.mdx @@ -12,9 +12,8 @@ keywords: documentation, getting started, guide, Content Management System, cms, /> - Payload is a headless CMS and application framework. It’s meant to provide a - massive boost to your development process, but importantly, stay out of your - way as your apps get more complex. + Payload is a headless CMS and application framework. It’s meant to provide a massive boost to your + development process, but importantly, stay out of your way as your apps get more complex. Out of the box, Payload gives you a lot of the things that you often need when developing a new website, web app, or native app: diff --git a/docs/graphql/extending.mdx b/docs/graphql/extending.mdx index 984c613e5..ad8050e98 100644 --- a/docs/graphql/extending.mdx +++ b/docs/graphql/extending.mdx @@ -10,10 +10,10 @@ You can add your own GraphQL queries and mutations to Payload, making use of all To do so, add your queries and mutations to the main Payload config as follows: -| Config Path | Description | -| -------------------- | -------------| -| `graphQL.queries` | Function that returns an object containing keys to custom GraphQL queries | -| `graphQL.mutations` | Function that returns an object containing keys to custom GraphQL mutations | +| Config Path | Description | +| ------------------- | --------------------------------------------------------------------------- | +| `graphQL.queries` | Function that returns an object containing keys to custom GraphQL queries | +| `graphQL.mutations` | Function that returns an object containing keys to custom GraphQL mutations | The above properties each receive a function that is defined with the following arguments: @@ -34,8 +34,8 @@ Both `graphQL.queries` and `graphQL.mutations` functions should return an object `payload.config.js`: ```ts -import { buildConfig } from 'payload/config'; -import myCustomQueryResolver from './graphQL/resolvers/myCustomQueryResolver'; +import { buildConfig } from 'payload/config' +import myCustomQueryResolver from './graphQL/resolvers/myCustomQueryResolver' export default buildConfig({ graphQL: { @@ -57,14 +57,14 @@ export default buildConfig({ args: { argNameHere: { type: new GraphQL.GraphQLNonNull(GraphQLString), - } + }, }, resolve: myCustomQueryResolver, - } + }, } - } + }, // highlight-end - } + }, }) ``` @@ -77,10 +77,10 @@ Your function will receive four arguments you can make use of: Example ```ts -async (obj, args, context, info) => { } +;async (obj, args, context, info) => {} ``` -**`obj`** +**`obj`** The previous object. Not very often used and usually discarded. diff --git a/docs/graphql/overview.mdx b/docs/graphql/overview.mdx index 7028591ba..e6523edf2 100644 --- a/docs/graphql/overview.mdx +++ b/docs/graphql/overview.mdx @@ -102,8 +102,13 @@ GraphQL Playground is enabled by default for development purposes, but disabled You can even log in using the `login[collection-singular-label-here]` mutation to use the Playground as an authenticated user. - Tip:
- To see more regarding how the above queries and mutations are used, visit your GraphQL playground (by default at [http://localhost:3000/api/graphql-playground](http://localhost:3000/api/graphql-playground)) while your server is running. There, you can use the "Schema" and "Docs" buttons on the right to see a ton of detail about how GraphQL operates within Payload. + Tip: +
+ To see more regarding how the above queries and mutations are used, visit your GraphQL playground + (by default at + [http://localhost:3000/api/graphql-playground](http://localhost:3000/api/graphql-playground)) + while your server is running. There, you can use the "Schema" and "Docs" buttons on the right to + see a ton of detail about how GraphQL operates within Payload.
## Query complexity limits diff --git a/docs/hooks/collections.mdx b/docs/hooks/collections.mdx index b998dd9a0..9f3c65f42 100644 --- a/docs/hooks/collections.mdx +++ b/docs/hooks/collections.mdx @@ -70,14 +70,14 @@ The `beforeOperation` hook can be used to modify the arguments that operations a Available Collection operations include `create`, `read`, `update`, `delete`, `login`, `refresh`, and `forgotPassword`. ```ts -import { CollectionBeforeOperationHook } from "payload/types"; +import { CollectionBeforeOperationHook } from 'payload/types' const beforeOperationHook: CollectionBeforeOperationHook = async ({ args, // original arguments passed into the operation operation, // name of the operation }) => { - return args; // return modified operation arguments as necessary -}; + return args // return modified operation arguments as necessary +} ``` ### beforeValidate @@ -91,7 +91,7 @@ Please do note that this does not run before the client-side validation. If you 3. `validate` runs on the server ```ts -import { CollectionBeforeOperationHook } from "payload/types"; +import { CollectionBeforeOperationHook } from 'payload/types' const beforeValidateHook: CollectionBeforeValidateHook = async ({ data, // incoming data to update or create with @@ -99,8 +99,8 @@ const beforeValidateHook: CollectionBeforeValidateHook = async ({ operation, // name of the operation ie. 'create', 'update' originalDoc, // original document }) => { - return data; // Return data to either create or update a document with -}; + return data // Return data to either create or update a document with +} ``` ### beforeChange @@ -108,7 +108,7 @@ const beforeValidateHook: CollectionBeforeValidateHook = async ({ Immediately following validation, `beforeChange` hooks will run within `create` and `update` operations. At this stage, you can be confident that the data that will be saved to the document is valid in accordance to your field validations. You can optionally modify the shape of data to be saved. ```ts -import { CollectionBeforeChangeHook } from "payload/types"; +import { CollectionBeforeChangeHook } from 'payload/types' const beforeChangeHook: CollectionBeforeChangeHook = async ({ data, // incoming data to update or create with @@ -116,8 +116,8 @@ const beforeChangeHook: CollectionBeforeChangeHook = async ({ operation, // name of the operation ie. 'create', 'update' originalDoc, // original document }) => { - return data; // Return data to either create or update a document with -}; + return data // Return data to either create or update a document with +} ``` ### afterChange @@ -125,7 +125,7 @@ const beforeChangeHook: CollectionBeforeChangeHook = async ({ After a document is created or updated, the `afterChange` hook runs. This hook is helpful to recalculate statistics such as total sales within a global, syncing user profile changes to a CRM, and more. ```ts -import { CollectionAfterChangeHook } from "payload/types"; +import { CollectionAfterChangeHook } from 'payload/types' const afterChangeHook: CollectionAfterChangeHook = async ({ doc, // full document data @@ -133,8 +133,8 @@ const afterChangeHook: CollectionAfterChangeHook = async ({ previousDoc, // document data before updating the collection operation, // name of the operation ie. 'create', 'update' }) => { - return doc; -}; + return doc +} ``` ### beforeRead @@ -142,15 +142,15 @@ const afterChangeHook: CollectionAfterChangeHook = async ({ Runs before `find` and `findByID` operations are transformed for output by `afterRead`. This hook fires before hidden fields are removed and before localized fields are flattened into the requested locale. Using this Hook will provide you with all locales and all hidden fields via the `doc` argument. ```ts -import { CollectionBeforeReadHook } from "payload/types"; +import { CollectionBeforeReadHook } from 'payload/types' const beforeReadHook: CollectionBeforeReadHook = async ({ doc, // full document data req, // full express request query, // JSON formatted query }) => { - return doc; -}; + return doc +} ``` ### afterRead @@ -158,7 +158,7 @@ const beforeReadHook: CollectionBeforeReadHook = async ({ Runs as the last step before documents are returned. Flattens locales, hides protected fields, and removes fields that users do not have access to. ```ts -import { CollectionAfterReadHook } from "payload/types"; +import { CollectionAfterReadHook } from 'payload/types' const afterReadHook: CollectionAfterReadHook = async ({ doc, // full document data @@ -166,8 +166,8 @@ const afterReadHook: CollectionAfterReadHook = async ({ query, // JSON formatted query findMany, // boolean to denote if this hook is running against finding one, or finding many }) => { - return doc; -}; + return doc +} ``` ### beforeDelete @@ -204,15 +204,15 @@ The `afterOperation` hook can be used to modify the result of operations or exec Available Collection operations include `create`, `find`, `findByID`, `update`, `updateByID`, `delete`, `deleteByID`, `login`, `refresh`, and `forgotPassword`. ```ts -import { CollectionAfterOperationHook } from "payload/types"; +import { CollectionAfterOperationHook } from 'payload/types' const afterOperationHook: CollectionAfterOperationHook = async ({ args, // arguments passed into the operation operation, // name of the operation result, // the result of the operation, before modifications }) => { - return result; // return modified result as necessary -}; + return result // return modified result as necessary +} ``` ### beforeLogin @@ -220,14 +220,14 @@ const afterOperationHook: CollectionAfterOperationHook = async ({ For auth-enabled Collections, this hook runs during `login` operations where a user with the provided credentials exist, but before a token is generated and added to the response. You can optionally modify the user that is returned, or throw an error in order to deny the login operation. ```ts -import { CollectionBeforeLoginHook } from "payload/types"; +import { CollectionBeforeLoginHook } from 'payload/types' const beforeLoginHook: CollectionBeforeLoginHook = async ({ req, // full express request user, // user being logged in }) => { - return user; -}; + return user +} ``` ### afterLogin @@ -288,15 +288,15 @@ const afterMeHook: CollectionAfterMeHook = async ({ For auth-enabled Collections, this hook runs after successful `forgotPassword` operations. Returned values are discarded. ```ts -import { CollectionAfterForgotPasswordHook } from "payload/types"; +import { CollectionAfterForgotPasswordHook } from 'payload/types' const afterLoginHook: CollectionAfterForgotPasswordHook = async ({ req, // full express request user, // user being logged in token, // user token }) => { - return user; -}; + return user +} ``` ## TypeScript @@ -319,5 +319,5 @@ import type { CollectionAfterRefreshHook, CollectionAfterMeHook, CollectionAfterForgotPasswordHook, -} from "payload/types"; +} from 'payload/types' ``` diff --git a/docs/hooks/context.mdx b/docs/hooks/context.mdx index 303a1b057..ed13616c3 100644 --- a/docs/hooks/context.mdx +++ b/docs/hooks/context.mdx @@ -31,24 +31,30 @@ For example: const Customer: CollectionConfig = { slug: 'customers', hooks: { - beforeChange: [async ({ context, data }) => { - // assign the customerData to context for use later - context.customerData = await fetchCustomerData(data.customerID); - return { - ...data, - // some data we use here - name: context.customerData.name - }; - }], - afterChange: [async ({ context, doc, req }) => { - // use context.customerData without needing to fetch it again - if (context.customerData.contacted === false) { - createTodo('Call Customer', context.customerData) - } - }], + beforeChange: [ + async ({ context, data }) => { + // assign the customerData to context for use later + context.customerData = await fetchCustomerData(data.customerID) + return { + ...data, + // some data we use here + name: context.customerData.name, + } + }, + ], + afterChange: [ + async ({ context, doc, req }) => { + // use context.customerData without needing to fetch it again + if (context.customerData.contacted === false) { + createTodo('Call Customer', context.customerData) + } + }, + ], }, - fields: [ /* ... */ ], -}; + fields: [ + /* ... */ + ], +} ``` ### Preventing infinite loops @@ -61,19 +67,23 @@ Bad example: const Customer: CollectionConfig = { slug: 'customers', hooks: { - afterChange: [async ({ doc }) => { - await payload.update({ - // DANGER: updating the same slug as the collection in an afterChange will create an infinite loop! - collection: 'customers', - id: doc.id, - data: { - ...(await fetchCustomerData(data.customerID)) - }, - }); - }], + afterChange: [ + async ({ doc }) => { + await payload.update({ + // DANGER: updating the same slug as the collection in an afterChange will create an infinite loop! + collection: 'customers', + id: doc.id, + data: { + ...(await fetchCustomerData(data.customerID)), + }, + }) + }, + ], }, - fields: [ /* ... */ ], -}; + fields: [ + /* ... */ + ], +} ``` Instead of the above, we need to tell the `afterChange` hook to not run again if it performs the update (and thus not update itself again). We can solve that with context. @@ -84,26 +94,30 @@ Fixed example: const MyCollection: CollectionConfig = { slug: 'slug', hooks: { - afterChange: [async ({ context, doc }) => { - // return if flag was previously set - if (context.triggerAfterChange === false) { - return; - } - await payload.update({ - collection: contextHooksSlug, - id: doc.id, - data: { - ...(await fetchCustomerData(data.customerID)) - }, - context: { - // set a flag to prevent from running again - triggerAfterChange: false, - }, - }); - }], + afterChange: [ + async ({ context, doc }) => { + // return if flag was previously set + if (context.triggerAfterChange === false) { + return + } + await payload.update({ + collection: contextHooksSlug, + id: doc.id, + data: { + ...(await fetchCustomerData(data.customerID)), + }, + context: { + // set a flag to prevent from running again + triggerAfterChange: false, + }, + }) + }, + ], }, - fields: [ /* ... */ ], -}; + fields: [ + /* ... */ + ], +} ``` ## Typing context @@ -113,12 +127,12 @@ The default typescript interface for `context` is `{ [key: string]: unknown }`. This is known as "type augmentation" - a TypeScript feature which allows us to add types to existing objects. Simply put this in any .ts or .d.ts file: ```ts -import { RequestContext as OriginalRequestContext } from 'payload'; +import { RequestContext as OriginalRequestContext } from 'payload' declare module 'payload' { // Create a new interface that merges your additional fields with the original one export interface RequestContext extends OriginalRequestContext { - myObject?: string; + myObject?: string // ... } } diff --git a/docs/hooks/fields.mdx b/docs/hooks/fields.mdx index 298e5e175..aec5d55aa 100644 --- a/docs/hooks/fields.mdx +++ b/docs/hooks/fields.mdx @@ -26,6 +26,7 @@ Field-level hooks offer incredible potential for encapsulating your logic. They ## Config Example field configuration: + ```ts import { Field } from 'payload/types'; @@ -48,8 +49,12 @@ const ExampleField: Field = { All field-level hooks are formatted to accept the same arguments, although some arguments may be `undefined` based on which field hook you are utilizing. - Tip:
- It's a good idea to conditionally scope your logic based on which operation is executing. For example, if you are writing a beforeChange hook, you may want to perform different logic based on if the current operation is create or update. + Tip: +
+ It's a good idea to conditionally scope your logic based on which operation is executing. For + example, if you are writing a beforeChange hook, you may want to perform + different logic based on if the current operation is create or{' '} + update.
#### Arguments @@ -57,7 +62,7 @@ All field-level hooks are formatted to accept the same arguments, although some Field Hooks receive one `args` argument that contains the following properties: | Option | Description | -|--------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **`data`** | The data passed to update the document within `create` and `update` operations, and the full document itself in the `afterRead` hook. | | **`siblingData`** | The sibling data passed to a field that the hook is running against. | | **`findMany`** | Boolean to denote if this hook is running against finding one, or finding many within the `afterRead` hook. | @@ -74,8 +79,11 @@ Field Hooks receive one `args` argument that contains the following properties: All field hooks can optionally modify the return value of the field before the operation continues. Field Hooks may optionally return the value that should be used within the field. - Important
- Due to GraphQL's typed nature, you should never change the type of data that you return from a field, otherwise GraphQL will produce errors. If you need to change the shape or type of data, reconsider Field Hooks and instead evaluate if Collection / Global hooks might suit you better. + Important +
+ Due to GraphQL's typed nature, you should never change the type of data that you return from a + field, otherwise GraphQL will produce errors. If you need to change the shape or type of data, + reconsider Field Hooks and instead evaluate if Collection / Global hooks might suit you better.
## TypeScript @@ -83,14 +91,14 @@ All field hooks can optionally modify the return value of the field before the o Payload exports a type for field hooks which can be accessed and used as follows: ```ts -import type { FieldHook } from 'payload/types'; +import type { FieldHook } from 'payload/types' // Field hook type is a generic that takes three arguments: // 1: The document type // 2: The value type // 3: The sibling data type -type ExampleFieldHook = FieldHook; +type ExampleFieldHook = FieldHook const exampleFieldHook: ExampleFieldHook = (args) => { const { @@ -100,10 +108,10 @@ const exampleFieldHook: ExampleFieldHook = (args) => { originalDoc, // Typed as ExampleDocumentType operation, req, - } = args; + } = args // Do something here... - return value; // should return a string as typed above, undefined, or null + return value // should return a string as typed above, undefined, or null } ``` diff --git a/docs/hooks/globals.mdx b/docs/hooks/globals.mdx index 2b095c149..4314d3996 100644 --- a/docs/hooks/globals.mdx +++ b/docs/hooks/globals.mdx @@ -19,6 +19,7 @@ Globals feature the ability to define the following hooks: All Global Hook properties accept arrays of synchronous or asynchronous functions. Each Hook type receives specific arguments and has the ability to modify specific outputs. `globals/example-hooks.js` + ```ts import { GlobalConfig } from 'payload/types'; @@ -49,7 +50,7 @@ const beforeValidateHook: GlobalBeforeValidateHook = async ({ req, // full express request originalDoc, // original document }) => { - return data; // Return data to update the document with + return data // Return data to update the document with } ``` @@ -65,7 +66,7 @@ const beforeChangeHook: GlobalBeforeChangeHook = async ({ req, // full express request originalDoc, // original document }) => { - return data; // Return data to update the document with + return data // Return data to update the document with } ``` @@ -81,7 +82,7 @@ const afterChangeHook: GlobalAfterChangeHook = async ({ previousDoc, // document data before updating the collection req, // full express request }) => { - return data; + return data } ``` @@ -123,5 +124,5 @@ import type { GlobalAfterChangeHook, GlobalBeforeReadHook, GlobalAfterReadHook, -} from 'payload/types'; +} from 'payload/types' ``` diff --git a/docs/hooks/overview.mdx b/docs/hooks/overview.mdx index b27fe40cb..9f3f84b3b 100644 --- a/docs/hooks/overview.mdx +++ b/docs/hooks/overview.mdx @@ -7,7 +7,9 @@ keywords: hooks, overview, config, configuration, documentation, Content Managem --- - Hooks are powerful ways to tie into existing Payload actions in order to add your own logic like integrating with third-party APIs, adding auto-generated data, or modifing Payload's base functionality. + Hooks are powerful ways to tie into existing Payload actions in order to add your own logic like + integrating with third-party APIs, adding auto-generated data, or modifing Payload's base + functionality. **With Hooks, you can transform Payload from a traditional CMS into a fully-fledged application framework.** diff --git a/docs/integrations/vercel-visual-editing.mdx b/docs/integrations/vercel-visual-editing.mdx index 101b0100b..f06467c94 100644 --- a/docs/integrations/vercel-visual-editing.mdx +++ b/docs/integrations/vercel-visual-editing.mdx @@ -11,10 +11,9 @@ keywords: vercel, vercel visual editing, visual editing, content source maps, Co ![Versions](/images/docs/vercel-visual-editing.jpg) - Vercel Visual Editing is an enterprise-only feature and only available for - deployments hosted on Vercel. If you are an existing enterprise customer, - [contact our sales team](https://payloadcms.com/for-enterprise) for help with - your integration. + Vercel Visual Editing is an enterprise-only feature and only available for deployments hosted on + Vercel. If you are an existing enterprise customer, [contact our sales + team](https://payloadcms.com/for-enterprise) for help with your integration. ### How it works @@ -66,10 +65,10 @@ export default config Now in your Next.js app, include the `?encodeSourceMaps=true` parameter in any of your API requests. For performance reasons, this should only be done when in draft mode or on preview deployments. ```ts -if (isDraftMode || process.env.VERCEL_ENV === "preview") { +if (isDraftMode || process.env.VERCEL_ENV === 'preview') { const res = await fetch( - `${process.env.NEXT_PUBLIC_PAYLOAD_CMS_URL}/api/pages?where[slug][equals]=${slug}&encodeSourceMaps=true` - ); + `${process.env.NEXT_PUBLIC_PAYLOAD_CMS_URL}/api/pages?where[slug][equals]=${slug}&encodeSourceMaps=true`, + ) } ``` @@ -88,8 +87,8 @@ To see Visual Editing on your site, you first need to visit any preview deployme The plugin does not encode `date` fields by default, but for some cases like text that uses negative CSS letter-spacing, it may be necessary to split the encoded data out from the rendered text. This way you can safely use the cleaned data as expected. ```ts -import { vercelStegaSplit } from "@vercel/stega"; -const { cleaned, encoded } = vercelStegaSplit(text); +import { vercelStegaSplit } from '@vercel/stega' +const { cleaned, encoded } = vercelStegaSplit(text) ``` ##### Blocks diff --git a/docs/local-api/overview.mdx b/docs/local-api/overview.mdx index 142038117..21f3254d2 100644 --- a/docs/local-api/overview.mdx +++ b/docs/local-api/overview.mdx @@ -11,11 +11,10 @@ The Payload Local API gives you the ability to execute the same operations that Tip:
- The Local API is incredibly powerful when used with server-side rendering app - frameworks like NextJS. With other headless CMS, you need to request your data - from third-party servers which can add significant loading time to your - server-rendered pages. With Payload, you don't have to leave your server to - gather the data you need. It can be incredibly fast and is definitely a game + The Local API is incredibly powerful when used with server-side rendering app frameworks like + NextJS. With other headless CMS, you need to request your data from third-party servers which can + add significant loading time to your server-rendered pages. With Payload, you don't have to leave + your server to gather the data you need. It can be incredibly fast and is definitely a game changer.
@@ -36,14 +35,14 @@ You can import or require `payload` into your own files after it's been initiali Example: ```ts -import payload from "payload"; -import { CollectionAfterChangeHook } from "payload/types"; +import payload from 'payload' +import { CollectionAfterChangeHook } from 'payload/types' const afterChangeHook: CollectionAfterChangeHook = async () => { const posts = await payload.find({ - collection: "posts", - }); -}; + collection: 'posts', + }) +} ``` ##### Accessing from the `req` @@ -53,40 +52,37 @@ Payload is available anywhere you have access to the Express `req` - including w Example: ```ts -const afterChangeHook: CollectionAfterChangeHook = async ({ - req: { payload }, -}) => { +const afterChangeHook: CollectionAfterChangeHook = async ({ req: { payload } }) => { const posts = await payload.find({ - collection: "posts", - }); -}; + collection: 'posts', + }) +} ``` ### Local options available You can specify more options within the Local API vs. REST or GraphQL due to the server-only context that they are executed in. -| Local Option | Description | -| ------------------ | -------------------------------------------------------------------------------------------------------------------- | -| `collection` | Required for Collection operations. Specifies the Collection slug to operate against. | -| `data` | The data to use within the operation. Required for `create`, `update`. | -| `depth` | [Control auto-population](/docs/getting-started/concepts#depth) of nested relationship and upload fields. | -| `locale` | Specify [locale](/docs/configuration/localization) for any returned documents. | -| `fallbackLocale` | Specify a [fallback locale](/docs/configuration/localization) to use for any returned documents. | -| `overrideAccess` | Skip access control. By default, this property is set to true within all Local API operations. | -| `user` | If you set `overrideAccess` to `false`, you can pass a user to use against the access control checks. | -| `showHiddenFields` | Opt-in to receiving hidden fields. By default, they are hidden from returned documents in accordance to your config. | -| `pagination` | Set to false to return all documents and avoid querying for document counts. | -| `context` | [Context](/docs/hooks/context), which will then be passed to `context` and `req.context`, which can be read by hooks. Useful if you want to pass additional information to the hooks which shouldn't be necessarily part of the document, for example a `triggerBeforeChange` option which can be read by the BeforeChange hook to determine if it should run or not. | +| Local Option | Description | +| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `collection` | Required for Collection operations. Specifies the Collection slug to operate against. | +| `data` | The data to use within the operation. Required for `create`, `update`. | +| `depth` | [Control auto-population](/docs/getting-started/concepts#depth) of nested relationship and upload fields. | +| `locale` | Specify [locale](/docs/configuration/localization) for any returned documents. | +| `fallbackLocale` | Specify a [fallback locale](/docs/configuration/localization) to use for any returned documents. | +| `overrideAccess` | Skip access control. By default, this property is set to true within all Local API operations. | +| `user` | If you set `overrideAccess` to `false`, you can pass a user to use against the access control checks. | +| `showHiddenFields` | Opt-in to receiving hidden fields. By default, they are hidden from returned documents in accordance to your config. | +| `pagination` | Set to false to return all documents and avoid querying for document counts. | +| `context` | [Context](/docs/hooks/context), which will then be passed to `context` and `req.context`, which can be read by hooks. Useful if you want to pass additional information to the hooks which shouldn't be necessarily part of the document, for example a `triggerBeforeChange` option which can be read by the BeforeChange hook to determine if it should run or not. | _There are more options available on an operation by operation basis outlined below._ Note:
- By default, all access control checks are disabled in the Local API, but you - can re-enable them if you'd like, as well as pass a specific user to run the - operation with. + By default, all access control checks are disabled in the Local API, but you can re-enable them if + you'd like, as well as pass a specific user to run the operation with.
## Collections @@ -98,13 +94,13 @@ The following Collection operations are available through the Local API: ```js // The created Post document is returned const post = await payload.create({ - collection: "posts", // required + collection: 'posts', // required data: { // required - title: "sure", - description: "maybe", + title: 'sure', + description: 'maybe', }, - locale: "en", + locale: 'en', fallbackLocale: false, user: dummyUserDoc, overrideAccess: true, @@ -117,12 +113,12 @@ const post = await payload.create({ // If your collection supports uploads, you can upload // a file directly through the Local API by providing // its full, absolute file path. - filePath: path.resolve(__dirname, "./path-to-image.jpg"), + filePath: path.resolve(__dirname, './path-to-image.jpg'), // Alternatively, you can directly pass a File, // if file is provided, filePath will be omitted file: uploadedFile, -}); +}) ``` #### Find @@ -131,18 +127,18 @@ const post = await payload.create({ // Result will be a paginated set of Posts. // See /docs/queries/pagination for more. const result = await payload.find({ - collection: "posts", // required + collection: 'posts', // required depth: 2, page: 1, limit: 10, where: {}, // pass a `where` query here - sort: "-title", - locale: "en", + sort: '-title', + locale: 'en', fallbackLocale: false, user: dummyUser, overrideAccess: false, showHiddenFields: true, -}); +}) ``` #### Find by ID @@ -150,15 +146,15 @@ const result = await payload.find({ ```js // Result will be a Post document. const result = await payload.findByID({ - collection: "posts", // required - id: "507f1f77bcf86cd799439011", // required + collection: 'posts', // required + id: '507f1f77bcf86cd799439011', // required depth: 2, - locale: "en", + locale: 'en', fallbackLocale: false, user: dummyUser, overrideAccess: false, showHiddenFields: true, -}); +}) ``` #### Update by ID @@ -166,15 +162,15 @@ const result = await payload.findByID({ ```js // Result will be the updated Post document. const result = await payload.update({ - collection: "posts", // required - id: "507f1f77bcf86cd799439011", // required + collection: 'posts', // required + id: '507f1f77bcf86cd799439011', // required data: { // required - title: "sure", - description: "maybe", + title: 'sure', + description: 'maybe', }, depth: 2, - locale: "en", + locale: 'en', fallbackLocale: false, user: dummyUser, overrideAccess: false, @@ -183,13 +179,13 @@ const result = await payload.update({ // If your collection supports uploads, you can upload // a file directly through the Local API by providing // its full, absolute file path. - filePath: path.resolve(__dirname, "./path-to-image.jpg"), + filePath: path.resolve(__dirname, './path-to-image.jpg'), // If you are uploading a file and would like to replace // the existing file instead of generating a new filename, // you can set the following property to `true` overwriteExistingFiles: true, -}); +}) ``` #### Update Many @@ -201,18 +197,18 @@ const result = await payload.update({ // errors: [], // each error also includes the id of the document // } const result = await payload.update({ - collection: "posts", // required + collection: 'posts', // required where: { // required - fieldName: { equals: "value" }, + fieldName: { equals: 'value' }, }, data: { // required - title: "sure", - description: "maybe", + title: 'sure', + description: 'maybe', }, depth: 0, - locale: "en", + locale: 'en', fallbackLocale: false, user: dummyUser, overrideAccess: false, @@ -221,13 +217,13 @@ const result = await payload.update({ // If your collection supports uploads, you can upload // a file directly through the Local API by providing // its full, absolute file path. - filePath: path.resolve(__dirname, "./path-to-image.jpg"), + filePath: path.resolve(__dirname, './path-to-image.jpg'), // If you are uploading a file and would like to replace // the existing file instead of generating a new filename, // you can set the following property to `true` overwriteExistingFiles: true, -}); +}) ``` #### Delete @@ -235,15 +231,15 @@ const result = await payload.update({ ```js // Result will be the now-deleted Post document. const result = await payload.delete({ - collection: "posts", // required - id: "507f1f77bcf86cd799439011", // required + collection: 'posts', // required + id: '507f1f77bcf86cd799439011', // required depth: 2, - locale: "en", + locale: 'en', fallbackLocale: false, user: dummyUser, overrideAccess: false, showHiddenFields: true, -}); +}) ``` #### Delete Many @@ -255,18 +251,18 @@ const result = await payload.delete({ // errors: [], // any errors that occurred, including the id of the errored on document // } const result = await payload.delete({ - collection: "posts", // required + collection: 'posts', // required where: { // required - fieldName: { equals: "value" }, + fieldName: { equals: 'value' }, }, depth: 0, - locale: "en", + locale: 'en', fallbackLocale: false, user: dummyUser, overrideAccess: false, showHiddenFields: true, -}); +}) ``` ## Auth Operations @@ -284,20 +280,20 @@ If a collection has [`Authentication`](/docs/authentication/overview) enabled, a // } const result = await payload.login({ - collection: "users", // required + collection: 'users', // required data: { // required - email: "dev@payloadcms.com", - password: "rip", + email: 'dev@payloadcms.com', + password: 'rip', }, req: req, // pass an Express `req` which will be provided to all hooks res: res, // used to automatically set an HTTP-only auth cookie depth: 2, - locale: "en", + locale: 'en', fallbackLocale: false, overrideAccess: false, showHiddenFields: true, -}); +}) ``` #### Forgot Password @@ -305,13 +301,13 @@ const result = await payload.login({ ```js // Returned token will allow for a password reset const token = await payload.forgotPassword({ - collection: "users", // required + collection: 'users', // required data: { // required - email: "dev@payloadcms.com", + email: 'dev@payloadcms.com', }, req: req, // pass an Express `req` which will be provided to all hooks -}); +}) ``` #### Reset Password @@ -323,14 +319,14 @@ const token = await payload.forgotPassword({ // user: { ... } // the user document that just logged in // } const result = await payload.forgotPassword({ - collection: "users", // required + collection: 'users', // required data: { // required - token: "afh3o2jf2p3f...", // the token generated from the forgotPassword operation + token: 'afh3o2jf2p3f...', // the token generated from the forgotPassword operation }, req: req, // pass an Express `req` which will be provided to all hooks res: res, // used to automatically set an HTTP-only auth cookie -}); +}) ``` #### Unlock @@ -338,14 +334,14 @@ const result = await payload.forgotPassword({ ```js // Returned result will be a boolean representing success or failure const result = await payload.unlock({ - collection: "users", // required + collection: 'users', // required data: { // required - email: "dev@payloadcms.com", + email: 'dev@payloadcms.com', }, req: req, // pass an Express `req` which will be provided to all hooks overrideAccess: true, -}); +}) ``` #### Verify @@ -353,9 +349,9 @@ const result = await payload.unlock({ ```js // Returned result will be a boolean representing success or failure const result = await payload.verify({ - collection: "users", // required - token: "afh3o2jf2p3f...", // the token saved on the user as `_verificationToken` -}); + collection: 'users', // required + token: 'afh3o2jf2p3f...', // the token saved on the user as `_verificationToken` +}) ``` ## Globals @@ -367,14 +363,14 @@ The following Global operations are available through the Local API: ```js // Result will be the Header Global. const result = await payload.findGlobal({ - slug: "header", // required + slug: 'header', // required depth: 2, - locale: "en", + locale: 'en', fallbackLocale: false, user: dummyUser, overrideAccess: false, showHiddenFields: true, -}); +}) ``` #### Update @@ -382,25 +378,25 @@ const result = await payload.findGlobal({ ```js // Result will be the updated Header Global. const result = await payload.updateGlobal({ - slug: "header", // required + slug: 'header', // required data: { // required nav: [ { - url: "https://google.com", + url: 'https://google.com', }, { - url: "https://payloadcms.com", + url: 'https://payloadcms.com', }, ], }, depth: 2, - locale: "en", + locale: 'en', fallbackLocale: false, user: dummyUser, overrideAccess: false, showHiddenFields: true, -}); +}) ``` ## Example Script using Local API @@ -408,36 +404,36 @@ const result = await payload.updateGlobal({ The Local API is especially useful for running scripts ```ts -import payload from "payload"; -import path from "path"; -import dotenv from "dotenv"; +import payload from 'payload' +import path from 'path' +import dotenv from 'dotenv' dotenv.config({ - path: path.resolve(__dirname, "../.env"), -}); + path: path.resolve(__dirname, '../.env'), +}) -const { PAYLOAD_SECRET, MONGODB_URI } = process.env; +const { PAYLOAD_SECRET, MONGODB_URI } = process.env const doAction = async (): Promise => { await payload.init({ secret: PAYLOAD_SECRET, mongoURL: MONGODB_URI, local: true, // Enables local mode, doesn't spin up a server or frontend - }); + }) // Perform any Local API operations here await payload.find({ - collection: "posts", + collection: 'posts', // where: {} // optional - }); + }) await payload.create({ - collection: "posts", + collection: 'posts', data: {}, - }); -}; + }) +} -doAction(); +doAction() ``` ## TypeScript @@ -449,12 +445,12 @@ Here is an example of usage: ```ts // Properly inferred as `Post` type const post = await payload.create({ - collection: "posts", + collection: 'posts', // Data will now be typed as Post and give you type hints data: { - title: "my title", - description: "my description", + title: 'my title', + description: 'my description', }, -}); +}) ``` diff --git a/docs/plugins/overview.mdx b/docs/plugins/overview.mdx index 82578a21e..75d526db0 100644 --- a/docs/plugins/overview.mdx +++ b/docs/plugins/overview.mdx @@ -9,7 +9,9 @@ keywords: plugins, config, configuration, extensions, custom, documentation, Con Payload comes with a built-in Plugins infrastructure that allows developers to build their own modular and easily reusable sets of functionality. - Because we rely on a simple config-based structure, Payload plugins simply take in a user's existing config and return a modified config with new fields, hooks, collections, admin views, or anything else you can think of. + Because we rely on a simple config-based structure, Payload plugins simply take in a user's + existing config and return a modified config with new fields, hooks, collections, admin views, or + anything else you can think of. Writing plugins is no more complex than writing regular JavaScript. If you know how [spread syntax](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax) works and are up to speed with Payload concepts, writing a plugin will be a breeze. @@ -30,30 +32,30 @@ Writing plugins is no more complex than writing regular JavaScript. If you know The base Payload config allows for a `plugins` property which takes an `array` of [`Plugins`](https://github.com/payloadcms/payload/blob/master/src/config/types.ts#L21). ```js -import { buildConfig } from 'payload/config'; +import { buildConfig } from 'payload/config' // note: these plugins are not real (yet?) -import addLastModified from 'payload-add-last-modified'; -import passwordProtect from 'payload-password-protect'; +import addLastModified from 'payload-add-last-modified' +import passwordProtect from 'payload-password-protect' const config = buildConfig({ - collections: [ - { - slug: 'pages', - fields: [ - { - name: 'title', - type: 'text', - required: true, - }, - { - name: 'content', - type: 'richText', - required: true, - } - ] - } - ], + collections: [ + { + slug: 'pages', + fields: [ + { + name: 'title', + type: 'text', + required: true, + }, + { + name: 'content', + type: 'richText', + required: true, + }, + ], + }, + ], plugins: [ // Many plugins require options to be passed. // In the following example, we call the function @@ -67,10 +69,10 @@ const config = buildConfig({ // .. // To understand how to use the plugins you're interested in, // consult their corresponding documentation - ] -}); + ], +}) -export default config; +export default config ``` #### When Plugins are initialized @@ -84,21 +86,20 @@ After all plugins are executed, the full config with all plugins will be sanitiz Here is an example for how to automatically add a `lastModifiedBy` field to all Payload collections using a Plugin written in TypeScript. ```ts -import { Config, Plugin } from 'payload/config'; +import { Config, Plugin } from 'payload/config' const addLastModified: Plugin = (incomingConfig: Config): Config => { // Find all incoming auth-enabled collections // so we can create a lastModifiedBy relationship field // to all auth collections - const authEnabledCollections = incomingConfig.collections.filter( - collection => Boolean(collection.auth) - ); + const authEnabledCollections = incomingConfig.collections.filter((collection) => + Boolean(collection.auth), + ) // Spread the existing config const config: Config = { ...incomingConfig, collections: incomingConfig.collections.map((collection) => { - // Spread each item that we are modifying, // and add our new field - complete with // hooks and proper admin UI config @@ -116,7 +117,7 @@ const addLastModified: Plugin = (incomingConfig: Config): Config => { value: req?.user?.id, relationTo: req?.user?.collection, }), - ] + ], }, admin: { position: 'sidebar', @@ -124,14 +125,14 @@ const addLastModified: Plugin = (incomingConfig: Config): Config => { }, }, ], - }; + } }), - }; + } - return config; -}; + return config +} -export default addLastModified; +export default addLastModified ``` ### Available Plugins diff --git a/docs/production/deployment.mdx b/docs/production/deployment.mdx index e7b5fab6b..15a77ab20 100644 --- a/docs/production/deployment.mdx +++ b/docs/production/deployment.mdx @@ -7,7 +7,8 @@ keywords: deployment, production, config, configuration, documentation, Content --- - So you've developed a Payload app, it's fully tested, and running great locally. Now it's time to launch. Awesome! Great work! Now, what's next? + So you've developed a Payload app, it's fully tested, and running great locally. Now it's time to + launch. Awesome! Great work! Now, what's next? There are many ways to deploy Payload to a production environment. When evaluating how you will deploy Payload, you need to consider these main aspects: @@ -35,7 +36,13 @@ When you initialize Payload, you provide it with a `secret` property. This prope Because _**you**_ are in complete control of who can do what with your data, you should double and triple-check that you wield that power responsibly before deploying to Production. - By default, all Access Control functions require that a user is successfully logged in to Payload to create, read, update, or delete data. But, if you allow public user registration, for example, you will want to make sure that your access control functions are more strict - permitting only appropriate users to perform appropriate actions. + + By default, all Access Control functions require that a user is successfully logged in to + Payload to create, read, update, or delete data. + {' '} + But, if you allow public user registration, for example, you will want to make sure that your + access control functions are more strict - permitting only appropriate users to + perform appropriate actions. ##### Building the Admin panel @@ -83,8 +90,13 @@ If you are using a [persistent filesystem-based cloud host](#persistent-vs-ephem Alternatively, you can rely on a third-party MongoDB host such as [MongoDB Atlas](https://www.mongodb.com/). With Atlas or a similar cloud provider, you can trust them to take care of your database's availability, security, redundancy, and backups. - Note:
- If versions are enabled and a collection has many documents you may need a minimum of an m10 mongoDB atlas cluster if you reach a sorting `exceeded memory limit` error to view a collection list in the admin UI. The limitations of the m2 and m5 tier clusters are here: [Atlas M0 (Free Cluster), M2, and M5 Limitations](https://www.mongodb.com/docs/atlas/reference/free-shared-limitations/?_ga=2.176267877.1329169847.1677683154-860992573.1647438381#operational-limitations). + Note: +
+ If versions are enabled and a collection has many documents you may need a minimum of an m10 + mongoDB atlas cluster if you reach a sorting `exceeded memory limit` error to view a collection + list in the admin UI. The limitations of the m2 and m5 tier clusters are here: [Atlas M0 (Free + Cluster), M2, and M5 + Limitations](https://www.mongodb.com/docs/atlas/reference/free-shared-limitations/?_ga=2.176267877.1329169847.1677683154-860992573.1647438381#operational-limitations).
##### DocumentDB @@ -118,8 +130,10 @@ Alternatively, persistent filesystems will never delete your files and can be tr - Many other more traditional web hosts - Warning:
- If you rely on Payload's Upload functionality, make sure you either use a host with a persistent filesystem or have an integration with a third-party file host like Amazon S3. + Warning: +
+ If you rely on Payload's Upload functionality, make sure you either use a host + with a persistent filesystem or have an integration with a third-party file host like Amazon S3.
##### Using ephemeral filesystem providers like Heroku @@ -184,13 +198,13 @@ CMD ["node", "dist/server.js"] Here is an example of a docker-compose.yml file that can be used for development ```yml -version: "3" +version: '3' services: payload: image: node:18-alpine ports: - - "3000:3000" + - '3000:3000' volumes: - .:/home/node/app - node_modules:/home/node/app/node_modules @@ -207,7 +221,7 @@ services: mongo: image: mongo:latest ports: - - "27017:27017" + - '27017:27017' command: - --storageEngine=wiredTiger volumes: diff --git a/docs/production/preventing-abuse.mdx b/docs/production/preventing-abuse.mdx index 5cc0b7dbc..a83820b5b 100644 --- a/docs/production/preventing-abuse.mdx +++ b/docs/production/preventing-abuse.mdx @@ -18,16 +18,21 @@ Set the max number of failed login attempts before a user account is locked out To prevent DDoS, brute-force, and similar attacks, you can set IP-based rate limits so that once a certain threshold of requests has been hit by a single IP, further requests from the same IP will be ignored. The Payload config `rateLimit` property accepts an object with the following properties: -| Option | Description | -| ---------------------------- | ----------- | -| **`window`** | Time in milliseconds to track requests per IP. Defaults to `90000` (15 minutes). | -| **`max`** | Number of requests served from a single IP before limiting. Defaults to `500`. | -| **`skip`** | Express middleware function that can return true (or promise resulting in true) that will bypass limit. | -| **`trustProxy`** | True or false, to enable to allow requests to pass through a proxy such as a load balancer or an `nginx` reverse proxy. | +| Option | Description | +| ---------------- | ----------------------------------------------------------------------------------------------------------------------- | +| **`window`** | Time in milliseconds to track requests per IP. Defaults to `90000` (15 minutes). | +| **`max`** | Number of requests served from a single IP before limiting. Defaults to `500`. | +| **`skip`** | Express middleware function that can return true (or promise resulting in true) that will bypass limit. | +| **`trustProxy`** | True or false, to enable to allow requests to pass through a proxy such as a load balancer or an `nginx` reverse proxy. | - Warning:
- Very commonly, NodeJS apps are served behind `nginx` reverse proxies and similar. If you use rate-limiting while you're behind a proxy, all IP addresses from everyone that uses your API will appear as if they are from a local origin (127.0.0.1), and your users will get rate-limited very quickly without cause. If you plan to host your app behind a proxy, make sure you set trustProxy to true. + Warning: +
+ Very commonly, NodeJS apps are served behind `nginx` reverse proxies and similar. If you use + rate-limiting while you're behind a proxy, all IP addresses from everyone that + uses your API will appear as if they are from a local origin (127.0.0.1), and your users will get + rate-limited very quickly without cause. If you plan to host your app behind a proxy, make sure + you set trustProxy to true.
### Max Depth diff --git a/docs/queries/overview.mdx b/docs/queries/overview.mdx index bdfabad6e..d54148159 100644 --- a/docs/queries/overview.mdx +++ b/docs/queries/overview.mdx @@ -9,7 +9,11 @@ keywords: query, documents, overview, documentation, Content Management System, Payload provides an extremely granular querying language through all APIs. Each API takes the same syntax and fully supports all options. - Here, "querying" relates to filtering or searching through documents within a Collection. You can build queries to pass to Find operations as well as to [restrict which documents certain users can access](/docs/access-control/overview) via access control functions. + + Here, "querying" relates to filtering or searching through documents within a Collection. + {' '} + You can build queries to pass to Find operations as well as to [restrict which documents certain + users can access](/docs/access-control/overview) via access control functions. ### Simple queries @@ -17,22 +21,22 @@ Payload provides an extremely granular querying language through all APIs. Each For example, say you have a collection as follows: ```ts -import { CollectionConfig } from "payload/types"; +import { CollectionConfig } from 'payload/types' export const Post: CollectionConfig = { - slug: "posts", + slug: 'posts', fields: [ { - name: "color", - type: "select", - options: ["mint", "dark-gray", "white"], + name: 'color', + type: 'select', + options: ['mint', 'dark-gray', 'white'], }, { - name: "featured", - type: "checkbox", + name: 'featured', + type: 'checkbox', }, ], -}; +} ``` You may eventually have a lot of documents within this Collection. If you wanted to find only documents with `color` equal to `mint`, you could write a query as follows: @@ -41,9 +45,9 @@ You may eventually have a lot of documents within this Collection. If you wanted const query = { color: { // property name to filter on - equals: "mint", // operator to use and value to compare against + equals: 'mint', // operator to use and value to compare against }, -}; +} ``` The above example demonstrates a simple query but you can get much more complex. @@ -68,7 +72,9 @@ The above example demonstrates a simple query but you can get much more complex. Tip:
- If you know your users will be querying on certain fields a lot, you can add index: true to a field's config which will speed up searches using that field immensely. + If you know your users will be querying on certain fields a lot, you can add + index: true + to a field's config which will speed up searches using that field immensely.
### And / Or Logic @@ -81,7 +87,7 @@ const query = { // array of OR conditions { color: { - equals: "mint", + equals: 'mint', }, }, { @@ -89,7 +95,7 @@ const query = { // nested array of AND conditions { color: { - equals: "white", + equals: 'white', }, }, { @@ -100,7 +106,7 @@ const query = { ], }, ], -}; +} ``` Written in plain English, if the above query were passed to a `find` operation, it would translate to finding posts where either the `color` is `mint` OR the `color` is `white` AND `featured` is set to false. @@ -111,11 +117,11 @@ When working with nested properties, which can happen when using relational fiel ```js const query = { - "artists.featured": { + 'artists.featured': { // nested property name to filter on exists: true, // operator to use and boolean value that needs to be true }, -}; +} ``` ### GraphQL Find Queries @@ -148,29 +154,27 @@ This one isn't too bad, but more complex queries get unavoidably more difficult **For example, using fetch:** ```js -import qs from "qs"; +import qs from 'qs' const query = { color: { - equals: "mint", + equals: 'mint', }, // This query could be much more complex // and QS would handle it beautifully -}; +} const getPosts = async () => { const stringifiedQuery = qs.stringify( { where: query, // ensure that `qs` adds the `where` property, too! }, - { addQueryPrefix: true } - ); + { addQueryPrefix: true }, + ) - const response = await fetch( - `http://localhost:3000/api/posts${stringifiedQuery}` - ); + const response = await fetch(`http://localhost:3000/api/posts${stringifiedQuery}`) // Continue to handle the response below... -}; +} ``` ### Local API Queries @@ -180,16 +184,16 @@ The Local API's `find` operation accepts an object exactly how you write it. For ```js const getPosts = async () => { const posts = await payload.find({ - collection: "posts", + collection: 'posts', where: { color: { - equals: "mint", + equals: 'mint', }, }, - }); + }) - return posts; -}; + return posts +} ``` ## Sort @@ -216,10 +220,10 @@ query { ```js const getPosts = async () => { const posts = await payload.find({ - collection: "posts", - sort: "-createdAt", - }); + collection: 'posts', + sort: '-createdAt', + }) - return posts; -}; + return posts +} ``` diff --git a/docs/queries/pagination.mdx b/docs/queries/pagination.mdx index ef9cbd299..67215cf9c 100644 --- a/docs/queries/pagination.mdx +++ b/docs/queries/pagination.mdx @@ -10,20 +10,21 @@ All collection `find` queries are paginated automatically. Responses are returne **`Find` response properties:** -| Property | Description | -| ------------- | ---------------------------------------------------------- | -| docs | Array of documents in the collection | -| totalDocs | Total available documents within the collection | -| limit | Limit query parameter - defaults to `10` | -| totalPages | Total pages available, based upon the `limit` queried for | -| page | Current page number | -| pagingCounter | `number` of the first doc on the current page | -| hasPrevPage | `true/false` if previous page exists | -| hasNextPage | `true/false` if next page exists | -| prevPage | `number` of previous page, `null` if it doesn't exist | -| nextPage | `number` of next page, `null` if it doesn't exist | +| Property | Description | +| ------------- | --------------------------------------------------------- | +| docs | Array of documents in the collection | +| totalDocs | Total available documents within the collection | +| limit | Limit query parameter - defaults to `10` | +| totalPages | Total pages available, based upon the `limit` queried for | +| page | Current page number | +| pagingCounter | `number` of the first doc on the current page | +| hasPrevPage | `true/false` if previous page exists | +| hasNextPage | `true/false` if next page exists | +| prevPage | `number` of previous page, `null` if it doesn't exist | +| nextPage | `number` of next page, `null` if it doesn't exist | **Example response:** + ```json { // Document Array // highlight-line @@ -54,7 +55,7 @@ All collection `find` queries are paginated automatically. Responses are returne All Payload APIs support the pagination controls below. With them, you can create paginated lists of documents within your application: -| Control | Description | -| --------- | ----------------------------------------------------------------------------------------- | -| `limit` | Limits the number of documents returned | -| `page` | Get a specific page number | +| Control | Description | +| ------- | --------------------------------------- | +| `limit` | Limits the number of documents returned | +| `page` | Get a specific page number | diff --git a/docs/rest-api/overview.mdx b/docs/rest-api/overview.mdx index 81d9f65bb..bafd594b9 100644 --- a/docs/rest-api/overview.mdx +++ b/docs/rest-api/overview.mdx @@ -7,8 +7,7 @@ keywords: rest, api, documentation, Content Management System, cms, headless, ja --- - A fully functional REST API is automatically generated from your Collection - and Global configs. + A fully functional REST API is automatically generated from your Collection and Global configs. All Payload API routes are mounted prefixed to your config's `routes.api` URL segment (default: `/api`). @@ -439,45 +438,45 @@ Globals cannot be created or deleted, so there are only two REST endpoints opene { - const tracking = await getTrackingInfo(req.params.id); + const tracking = await getTrackingInfo(req.params.id) if (tracking) { - res.status(200).send({ tracking }); + res.status(200).send({ tracking }) } else { - res.status(404).send({ error: "not found" }); + res.status(404).send({ error: 'not found' }) } }, }, ], // highlight-end -}; +} ``` Note:
- **req** will have the **payload** object and can be used inside your endpoint - handlers for making calls like req.payload.find() that will make use of access - control and hooks. + **req** will have the **payload** object and can be used inside your endpoint handlers for making + calls like req.payload.find() that will make use of access control and hooks.
diff --git a/docs/troubleshooting/troubleshooting.mdx b/docs/troubleshooting/troubleshooting.mdx index ee2d811a4..51c65ff64 100644 --- a/docs/troubleshooting/troubleshooting.mdx +++ b/docs/troubleshooting/troubleshooting.mdx @@ -12,7 +12,7 @@ keywords: admin, components, custom, customize, documentation, Content Managemen This means that your auth cookie is not being set or accepted correctly upon logging in. To resolve heck the following settings in your Payload config: -- CORS - If you are using the '*', try to explicitly only allow certain domains instead including the one you have specified. +- CORS - If you are using the '\*', try to explicitly only allow certain domains instead including the one you have specified. - CSRF - Do you have this set? if so, make sure your domain is whitelisted within the csrf domains. If not, probably not the issue, but probably can't hurt to whitelist it anyway. - Cookie settings. If these are completely undefined, then that's fine. but if you have cookie domain set, or anything similar, make sure you don't have the domain misconfigured diff --git a/docs/typescript/generating-types.mdx b/docs/typescript/generating-types.mdx index 0618dd50d..900bd1a55 100644 --- a/docs/typescript/generating-types.mdx +++ b/docs/typescript/generating-types.mdx @@ -102,19 +102,19 @@ By generating types, we'll end up with a file containing the following two TypeS ```ts export interface User { - id: string; - name: string; - email?: string; - resetPasswordToken?: string; - resetPasswordExpiration?: string; - loginAttempts?: number; - lockUntil?: string; + id: string + name: string + email?: string + resetPasswordToken?: string + resetPasswordExpiration?: string + loginAttempts?: number + lockUntil?: string } export interface Post { - id: string; - title?: string; - author?: string | User; + id: string + title?: string + author?: string | User } ``` @@ -145,25 +145,24 @@ will generate: ```ts // a top level reusable interface!! export interface SharedMeta { - title?: string; - description?: string; + title?: string + description?: string } // example usage inside collection interface export interface Collection1 { // ...other fields - meta?: SharedMeta; + meta?: SharedMeta } ``` Naming Collisions
- Since these types are hoisted to the top level, you need to be aware that - naming collisions can occur. For example, if you have a collection with the - name of `Meta` and you also create a interface with the name `Meta` they will - collide. It is recommended to scope your interfaces by appending the field - type to the end, i.e. `MetaGroup` or similar. + Since these types are hoisted to the top level, you need to be aware that naming collisions can + occur. For example, if you have a collection with the name of `Meta` and you also create a + interface with the name `Meta` they will collide. It is recommended to scope your interfaces by + appending the field type to the end, i.e. `MetaGroup` or similar.
### Using your types diff --git a/docs/upload/overview.mdx b/docs/upload/overview.mdx index 65f1334ae..1e5f2f6d9 100644 --- a/docs/upload/overview.mdx +++ b/docs/upload/overview.mdx @@ -7,9 +7,8 @@ keywords: uploads, images, media, overview, documentation, Content Management Sy --- - Payload provides for everything you need to enable file upload, storage, and - management directly on your server—including extremely powerful file access - control. + Payload provides for everything you need to enable file upload, storage, and management directly + on your server—including extremely powerful file access control. ![Upload admin panel functionality](https://payloadcms.com/images/docs/upload-admin.jpg) @@ -34,31 +33,32 @@ Every Payload Collection can opt-in to supporting Uploads by specifying the `upl Tip: -
A common pattern is to create a Media collection and enable{" "} - upload on that collection. +
A common pattern is to create a Media collection and enable + upload + on that collection.
#### Collection Upload Options -| Option | Description | -| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | +| Option | Description | +| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **`staticURL`** \* | The URL path to use to access your uploads. Relative path like `/media` will be served by payload. Full path like `https://example.com/media` needs to be served by another web server. | -| **`staticDir`** \* | The folder directory to use to store media in. Can be either an absolute path or relative to the directory that contains your config. | -| **`imageSizes`** | If specified, image uploads will be automatically resized in accordance to these image sizes. [More](#image-sizes) | -| **`formatOptions`** | An object with `format` and `options` that are used with the Sharp image library to format the upload file. [More](https://sharp.pixelplumbing.com/api-output#toformat) | -| **`resizeOptions`** | An object passed to the the Sharp image library to resize the uploaded file. [More](https://sharp.pixelplumbing.com/api-resize) | -| **`adminThumbnail`** | Set the way that the Admin panel will display thumbnails for this Collection. [More](#admin-thumbnails) | -| **`mimeTypes`** | Restrict mimeTypes in the file picker. Array of valid mimetypes or mimetype wildcards [More](#mimetypes) | -| **`disableLocalStorage`** | Completely disable uploading files to disk locally. [More](#disabling-local-upload-storage) | -| **`staticOptions`** | Set options for `express.static` to use while serving your static files. [More](http://expressjs.com/en/resources/middleware/serve-static.html) | -| **`handlers`** | Array of Express request handlers to execute before the built-in Payload static middleware executes. | +| **`staticDir`** \* | The folder directory to use to store media in. Can be either an absolute path or relative to the directory that contains your config. | +| **`imageSizes`** | If specified, image uploads will be automatically resized in accordance to these image sizes. [More](#image-sizes) | +| **`formatOptions`** | An object with `format` and `options` that are used with the Sharp image library to format the upload file. [More](https://sharp.pixelplumbing.com/api-output#toformat) | +| **`resizeOptions`** | An object passed to the the Sharp image library to resize the uploaded file. [More](https://sharp.pixelplumbing.com/api-resize) | +| **`adminThumbnail`** | Set the way that the Admin panel will display thumbnails for this Collection. [More](#admin-thumbnails) | +| **`mimeTypes`** | Restrict mimeTypes in the file picker. Array of valid mimetypes or mimetype wildcards [More](#mimetypes) | +| **`disableLocalStorage`** | Completely disable uploading files to disk locally. [More](#disabling-local-upload-storage) | +| **`staticOptions`** | Set options for `express.static` to use while serving your static files. [More](http://expressjs.com/en/resources/middleware/serve-static.html) | +| **`handlers`** | Array of Express request handlers to execute before the built-in Payload static middleware executes. | _An asterisk denotes that a property above is required._ **Example Upload collection:** ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const Media: CollectionConfig = { slug: 'media', @@ -98,7 +98,7 @@ export const Media: CollectionConfig = { type: 'text', }, ], -}; +} ``` ### Payload-wide Upload Options @@ -108,7 +108,7 @@ Payload relies on the [`express-fileupload`](https://www.npmjs.com/package/expre A common example of what you might want to customize within Payload-wide Upload options would be to increase the allowed `fileSize` of uploads sent to Payload: ```ts -import { buildConfig } from 'payload/config'; +import { buildConfig } from 'payload/config' export default buildConfig({ collections: [ @@ -128,7 +128,7 @@ export default buildConfig({ fileSize: 5000000, // 5MB, written in bytes }, }, -}); +}) ``` ### Image Sizes @@ -152,11 +152,10 @@ If you are using a plugin to send your files off to a third-party file storage h Note:
- This is a fairly advanced feature. If you do disable local file storage, by - default, your admin panel's thumbnails will be broken as you will not have - stored a file. It will be totally up to you to use either a plugin or your own - hooks to store your files in a permanent manner, as well as provide your own - admin thumbnail using upload.adminThumbnail. + This is a fairly advanced feature. If you do disable local file storage, by default, your admin + panel's thumbnails will be broken as you will not have stored a file. It will be totally up to you + to use either a plugin or your own hooks to store your files in a permanent manner, as well as + provide your own admin thumbnail using upload.adminThumbnail.
### Admin Thumbnails @@ -169,7 +168,7 @@ You can specify how Payload retrieves admin thumbnails for your upload-enabled C **Example custom Admin thumbnail:** ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const Media: CollectionConfig = { slug: 'media', @@ -180,17 +179,17 @@ export const Media: CollectionConfig = { // ... image sizes here ], // highlight-start - adminThumbnail: ({ doc }) => - `https://google.com/custom-path-to-file/${doc.filename}`, + adminThumbnail: ({ doc }) => `https://google.com/custom-path-to-file/${doc.filename}`, // highlight-end }, -}; +} ``` Note:
- This function runs in the browser. If your function returns `null` or `false` Payload will show the default generic file thumbnail instead. + This function runs in the browser. If your function returns `null` or `false` Payload will show + the default generic file thumbnail instead.
### MimeTypes @@ -202,7 +201,7 @@ Some example values are: `image/*`, `audio/*`, `video/*`, `image/png`, `applicat **Example mimeTypes usage:** ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const Media: CollectionConfig = { slug: 'media', @@ -211,7 +210,7 @@ export const Media: CollectionConfig = { staticDir: 'media', mimeTypes: ['image/*', 'application/pdf'], // highlight-line }, -}; +} ``` ### Uploading Files @@ -219,9 +218,8 @@ export const Media: CollectionConfig = { Important:
- Uploading files is currently only possible through the REST and Local APIs due - to how GraphQL works. It's difficult and fairly nonsensical to support - uploading files through GraphQL. + Uploading files is currently only possible through the REST and Local APIs due to how GraphQL + works. It's difficult and fairly nonsensical to support uploading files through GraphQL.
To upload a file, use your collection's [`create`](/docs/rest-api/overview#collections) endpoint. Send it all the data that your Collection requires, as well as a `file` key containing the file that you'd like to upload. diff --git a/docs/versions/autosave.mdx b/docs/versions/autosave.mdx index a01ea4f1c..f5edcb777 100644 --- a/docs/versions/autosave.mdx +++ b/docs/versions/autosave.mdx @@ -9,24 +9,24 @@ keywords: version history, revisions, audit log, draft, publish, autosave, Conte Extending on Payload's [Draft](/docs/versions/drafts) functionality, you can configure your collections and globals to autosave changes as drafts, and publish only you're ready. The Admin UI will automatically adapt to autosaving progress at an interval that you define, and will store all autosaved changes as a new Draft version. Never lose your work - and publish changes to the live document only when you're ready. - Autosave relies on Versions and Drafts being enabled in order to function. + Autosave relies on Versions and Drafts being enabled in order to function. ![Autosave Enabled](/images/docs/autosave-enabled.png) -*If Autosave is enabled, drafts will be created automatically as the document is modified and the Admin UI adds an indicator describing when the document was last saved to the top right of the sidebar.* +_If Autosave is enabled, drafts will be created automatically as the document is modified and the Admin UI adds an indicator describing when the document was last saved to the top right of the sidebar._ ### Options Collections and Globals both support the same options for configuring autosave. You can either set `versions.drafts.autosave` to `true`, or pass an object to configure autosave properties. -| Drafts Autosave Options | Description | -| ---------------------------- | -------------| -| `interval` | Define an `interval` in milliseconds to automatically save progress while documents are edited. Document updates are "debounced" at this interval. Defaults to `2000`. | +| Drafts Autosave Options | Description | +| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `interval` | Define an `interval` in milliseconds to automatically save progress while documents are edited. Document updates are "debounced" at this interval. Defaults to `2000`. | **Example config with versions, drafts, and autosave enabled:** ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const Pages: CollectionConfig = { slug: 'pages', @@ -34,7 +34,7 @@ export const Pages: CollectionConfig = { read: ({ req }) => { // If there is a user logged in, // let them retrieve all documents - if (req.user) return true; + if (req.user) return true // If there is no user, // restrict the documents that are returned @@ -43,7 +43,7 @@ export const Pages: CollectionConfig = { _status: { equals: 'published', }, - }; + } }, }, versions: { @@ -54,7 +54,7 @@ export const Pages: CollectionConfig = { // autosave: { // interval: 1500, // }, - } + }, }, //.. the rest of the Pages config here } @@ -69,5 +69,7 @@ When `autosave` is enabled, all `update` operations within Payload expose a new If we created a new version for each autosave, you'd quickly find a ton of autosaves that clutter up your `_versions` collection within the database. That would be messy quick because `autosave` is typically set to save a document every ~2000ms or so. - Instead of creating a new version each time a document is autosaved, Payload smartly only creates one autosave version, and then updates that specific version with each autosave performed. This makes sure that your versions remain nice and tidy. + Instead of creating a new version each time a document is autosaved, Payload smartly only creates{' '} + one autosave version, and then updates that specific version with each autosave + performed. This makes sure that your versions remain nice and tidy. diff --git a/docs/versions/drafts.mdx b/docs/versions/drafts.mdx index af08dcc26..5b850ff6a 100644 --- a/docs/versions/drafts.mdx +++ b/docs/versions/drafts.mdx @@ -8,22 +8,20 @@ keywords: version history, drafts, preview, draft, restore, publish, autosave, C Payload's Draft functionality builds on top of the Versions functionality to allow you to make changes to your collection documents and globals, but publish only when you're ready. This functionality allows you to build powerful Preview environments for your data, where you can make sure your changes look good before publishing documents. - - Drafts rely on Versions being enabled in order to function. - +Drafts rely on Versions being enabled in order to function. By enabling Versions with Drafts, your collections and globals can maintain _newer_, and _unpublished_ versions of your documents. It's perfect for cases where you might want to work on a document, update it and save your progress, but not necessarily make it publicly published right away. Drafts are extremely helpful when building preview implementations. ![Drafts Enabled](/images/docs/drafts-enabled.png) -*If Drafts are enabled, the typical Save button is replaced with new actions which allow you to either save a draft, or publish your changes.* +_If Drafts are enabled, the typical Save button is replaced with new actions which allow you to either save a draft, or publish your changes._ ### Options Collections and Globals both support the same options for configuring drafts. You can either set `versions.drafts` to `true`, or pass an object to configure draft properties. -| Draft Option | Description | -| ---------------------------- | -------------| -| `autosave` | Enable `autosave` to automatically save progress while documents are edited. To enable, set to `true` or pass an object with [options](/docs/versions/autosave). | +| Draft Option | Description | +| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `autosave` | Enable `autosave` to automatically save progress while documents are edited. To enable, set to `true` or pass an object with [options](/docs/versions/autosave). | ### Database changes @@ -33,14 +31,18 @@ By enabling drafts on a collection or a global, Payload will automatical Within the Admin UI, if drafts are enabled, a document can be shown with one of three "statuses": -1. Draft - if a document has never been published, and only draft versions of the document are present +1. Draft - if a document has never been published, and only draft versions of the document + are present 1. Published - if a document is published and there are no newer drafts available -1. Changed - if a document has been published, but there are newer drafts available and not yet published +1. Changed - if a document has been published, but there are newer drafts available + and not yet published ### Draft API - If drafts are enabled on your collection or global, important and powerful changes are made to your REST, GraphQL, and Local APIs that allow you to specify if you are interacting with drafts or with live documents. + If drafts are enabled on your collection or global, important and powerful changes are made to + your REST, GraphQL, and Local APIs that allow you to specify if you are interacting with drafts or + with live documents. ##### Updating or creating drafts @@ -72,7 +74,9 @@ But, if you specify `draft` as `true`, Payload will automatically replace your p ### Controlling who can see Collection drafts - If you're using the drafts feature, it's important for you to consider who can view your drafts, and who can view only published documents. Luckily, Payload makes this extremely simple and puts the power completely in your hands. + If you're using the drafts feature, it's important for you to consider who can + view your drafts, and who can view only published documents. Luckily, Payload makes this extremely + simple and puts the power completely in your hands. ##### Restricting draft access @@ -82,7 +86,7 @@ You can use the `read` [Access Control](/docs/access-control/collections#read) m Here is an example that utilizes the `_status` field to require a user to be logged in to retrieve drafts: ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const Pages: CollectionConfig = { slug: 'pages', @@ -90,7 +94,7 @@ export const Pages: CollectionConfig = { read: ({ req }) => { // If there is a user logged in, // let them retrieve all documents - if (req.user) return true; + if (req.user) return true // If there is no user, // restrict the documents that are returned @@ -99,25 +103,32 @@ export const Pages: CollectionConfig = { _status: { equals: 'published', }, - }; + } }, }, versions: { - drafts: true + drafts: true, }, //.. the rest of the Pages config here } ``` - Note regarding adding versions to an existing collection
- If you already have a collection with documents, and you opt in to draft functionality after you have already created existing documents, all of your old documents will not have a _status field until you resave them. For this reason, if you are adding versions into an existing collection, you might want to write your access control function to allow for users to read both documents where _status is equal to "published" as well as where _status does not exist. + Note regarding adding versions to an existing collection +
+ If you already have a collection with documents, and you opt in to draft functionality + after you have already created existing documents, all of your old documents{' '} + will not have a _status field until you resave them. For this reason, if you are{' '} + adding versions into an existing collection, you might want to write your access control + function to allow for users to read both documents where{' '} + _status is equal to "published" as well as where{' '} + _status does not exist.
Here is an example for how to write an access control function that grants access to both documents where `_status` is equal to "published" and where `_status` does not exist: ```ts -import { CollectionConfig } from 'payload/types'; +import { CollectionConfig } from 'payload/types' export const Pages: CollectionConfig = { slug: 'pages', @@ -125,7 +136,7 @@ export const Pages: CollectionConfig = { read: ({ req }) => { // If there is a user logged in, // let them retrieve all documents - if (req.user) return true; + if (req.user) return true // If there is no user, // restrict the documents that are returned @@ -141,14 +152,14 @@ export const Pages: CollectionConfig = { { _status: { exists: false, - } - } - ] - }; + }, + }, + ], + } }, }, versions: { - drafts: true + drafts: true, }, //.. the rest of the Pages config here } @@ -161,4 +172,3 @@ If a document is published, the Payload Admin UI will be updated to show an "unp ### Reverting to published If a document is published, and you have made further changes which are saved as a draft, Payload will show a "revert to published" button at the top of the sidebar which will allow you to reject your draft changes and "revert" back to the published state of the document. Your drafts will still be saved, but a new version will be created that will reflect the last published state of the document. - diff --git a/docs/versions/overview.mdx b/docs/versions/overview.mdx index af67c7745..0b00fafea 100644 --- a/docs/versions/overview.mdx +++ b/docs/versions/overview.mdx @@ -7,8 +7,8 @@ keywords: version history, revisions, audit log, draft, publish, restore, autosa --- - Payload's powerful Versions functionality allows you to keep a running history - of changes over time and extensible to fit any content publishing workflow. + Payload's powerful Versions functionality allows you to keep a running history of changes over + time and extensible to fit any content publishing workflow. When enabled, Payload will automatically scaffold a new Collection in your database to store versions of your document(s) over time, and the Admin UI will be extended with additional views that allow you to browse document versions, view diffs in order to see exactly what has changed in your documents (and when they changed), and restore documents back to prior versions easily. @@ -26,9 +26,9 @@ _Comparing an old version to a newer version of a document_ - Build a powerful publishing schedule mechanism to create documents and have them become publicly readable automatically at a future date - Versions are extremely performant and totally opt-in. They don't change the - shape of your data at all. All versions are stored in a separate Collection - and can be turned on and off easily at your discretion. + Versions are extremely performant and totally opt-in. They don't change the shape of your data at + all. All versions are stored in a separate Collection and can be turned on and off easily at your + discretion. ### Options @@ -126,18 +126,18 @@ Versions expose new operations for both collections and globals. They allow you // Result will be a paginated set of Versions. // See /docs/queries/pagination for more. const result = await payload.findVersions({ - collection: "posts", // required + collection: 'posts', // required depth: 2, page: 1, limit: 10, where: {}, // pass a `where` query here - sort: "-createdAt", - locale: "en", + sort: '-createdAt', + locale: 'en', fallbackLocale: false, user: dummyUser, overrideAccess: false, showHiddenFields: true, -}); +}) ``` #### Find by ID @@ -145,15 +145,15 @@ const result = await payload.findVersions({ ```js // Result will be a Post document. const result = await payload.findVersionByID({ - collection: "posts", // required - id: "507f1f77bcf86cd799439013", // required + collection: 'posts', // required + id: '507f1f77bcf86cd799439013', // required depth: 2, - locale: "en", + locale: 'en', fallbackLocale: false, user: dummyUser, overrideAccess: false, showHiddenFields: true, -}); +}) ``` #### Restore @@ -161,13 +161,13 @@ const result = await payload.findVersionByID({ ```js // Result will be the restored global document. const result = await payload.restoreVersion({ - collection: "posts", // required - id: "507f1f77bcf86cd799439013", // required + collection: 'posts', // required + id: '507f1f77bcf86cd799439013', // required depth: 2, user: dummyUser, overrideAccess: false, showHiddenFields: true, -}); +}) ``` **Global REST endpoints:** @@ -199,18 +199,18 @@ const result = await payload.restoreVersion({ // Result will be a paginated set of Versions. // See /docs/queries/pagination for more. const result = await payload.findGlobalVersions({ - slug: "header", // required + slug: 'header', // required depth: 2, page: 1, limit: 10, where: {}, // pass a `where` query here - sort: "-createdAt", - locale: "en", + sort: '-createdAt', + locale: 'en', fallbackLocale: false, user: dummyUser, overrideAccess: false, showHiddenFields: true, -}); +}) ``` #### Find by ID @@ -218,15 +218,15 @@ const result = await payload.findGlobalVersions({ ```js // Result will be a Post document. const result = await payload.findGlobalVersionByID({ - slug: "header", // required - id: "507f1f77bcf86cd799439013", // required + slug: 'header', // required + id: '507f1f77bcf86cd799439013', // required depth: 2, - locale: "en", + locale: 'en', fallbackLocale: false, user: dummyUser, overrideAccess: false, showHiddenFields: true, -}); +}) ``` #### Restore @@ -234,13 +234,13 @@ const result = await payload.findGlobalVersionByID({ ```js // Result will be the restored global document. const result = await payload.restoreGlobalVersion({ - slug: "header", // required - id: "507f1f77bcf86cd799439013", // required + slug: 'header', // required + id: '507f1f77bcf86cd799439013', // required depth: 2, user: dummyUser, overrideAccess: false, showHiddenFields: true, -}); +}) ``` ### Access Control diff --git a/errors.d.ts b/errors.d.ts deleted file mode 100644 index ce2f65193..000000000 --- a/errors.d.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './dist/errors/types'; diff --git a/errors.js b/errors.js deleted file mode 100644 index 67919c7d5..000000000 --- a/errors.js +++ /dev/null @@ -1,39 +0,0 @@ -const { - APIError, - AuthenticationError, - DuplicateCollection, - DuplicateGlobal, - ErrorDeletingFile, - FileUploadError, - Forbidden, - InvalidConfiguration, - InvalidFieldName, - InvalidFieldRelationship, - LockedAuth, - MissingCollectionLabel, - MissingFieldInputOptions, - MissingFieldType, - MissingFile, - NotFound, - ValidationError, -} = require('./dist/errors'); - -module.exports = { - APIError, - AuthenticationError, - DuplicateCollection, - DuplicateGlobal, - ErrorDeletingFile, - FileUploadError, - Forbidden, - InvalidConfiguration, - InvalidFieldName, - InvalidFieldRelationship, - LockedAuth, - MissingCollectionLabel, - MissingFieldInputOptions, - MissingFieldType, - MissingFile, - NotFound, - ValidationError, -}; diff --git a/eslint-config/configs/base/index.js b/eslint-config/configs/base/index.js deleted file mode 100644 index 742bd1d00..000000000 --- a/eslint-config/configs/base/index.js +++ /dev/null @@ -1,17 +0,0 @@ -module.exports = { - plugins: [ - 'node', - ], - env: { - node: true, - }, - extends: [ - './rules/best-practices', - './rules/errors', - './rules/es6', - './rules/imports', - './rules/style', - './rules/variables', - ].map(require.resolve), - rules: {}, -}; diff --git a/eslint-config/configs/base/rules/best-practices.js b/eslint-config/configs/base/rules/best-practices.js deleted file mode 100644 index 9b76b7aa5..000000000 --- a/eslint-config/configs/base/rules/best-practices.js +++ /dev/null @@ -1,356 +0,0 @@ -module.exports = { - rules: { - // enforces getter/setter pairs in objects - 'accessor-pairs': 'off', - - // enforces return statements in callbacks of array's methods - // https://eslint.org/docs/rules/array-callback-return - 'array-callback-return': ['error', { allowImplicit: true }], - - // treat var statements as if they were block scoped - 'block-scoped-var': 'error', - - // specify the maximum cyclomatic complexity allowed in a program - complexity: ['off', 11], - - // enforce that class methods use "this" - // https://eslint.org/docs/rules/class-methods-use-this - 'class-methods-use-this': ['error', { - exceptMethods: [], - }], - - // require return statements to either always or never specify values - 'consistent-return': 'error', - - // specify curly brace conventions for all control statements - curly: ['error', 'multi-line'], // multiline - - // require default case in switch statements - 'default-case': ['error', { commentPattern: '^no default$' }], - - // https://eslint.org/docs/rules/default-param-last - // TODO: enable, semver-minor, when eslint v6.4 is required (which is a major) - 'default-param-last': 'off', - - // encourages use of dot notation whenever possible - 'dot-notation': ['error', { allowKeywords: true }], - - // enforces consistent newlines before or after dots - // https://eslint.org/docs/rules/dot-location - 'dot-location': ['error', 'property'], - - // require the use of === and !== - // https://eslint.org/docs/rules/eqeqeq - eqeqeq: ['error', 'always', { null: 'ignore' }], - - // Require grouped accessor pairs in object literals and classes - // https://eslint.org/docs/rules/grouped-accessor-pairs - // TODO: enable in next major, altho the guide forbids getters/setters anyways - 'grouped-accessor-pairs': 'off', - - // make sure for-in loops have an if statement - 'guard-for-in': 'error', - - // enforce a maximum number of classes per file - // https://eslint.org/docs/rules/max-classes-per-file - 'max-classes-per-file': ['error', 1], - - // disallow the use of alert, confirm, and prompt - 'no-alert': 'warn', - - // disallow use of arguments.caller or arguments.callee - 'no-caller': 'error', - - // disallow lexical declarations in case/default clauses - // https://eslint.org/docs/rules/no-case-declarations.html - 'no-case-declarations': 'error', - - // Disallow returning value in constructor - // https://eslint.org/docs/rules/no-constructor-return - // TODO: enable, semver-major - 'no-constructor-return': 'off', - - // disallow division operators explicitly at beginning of regular expression - // https://eslint.org/docs/rules/no-div-regex - 'no-div-regex': 'off', - - // disallow else after a return in an if - // https://eslint.org/docs/rules/no-else-return - 'no-else-return': ['error', { allowElseIf: false }], - - // disallow empty functions, except for standalone funcs/arrows - // https://eslint.org/docs/rules/no-empty-function - 'no-empty-function': ['error', { - allow: [ - 'arrowFunctions', - 'functions', - 'methods', - ], - }], - - // disallow empty destructuring patterns - // https://eslint.org/docs/rules/no-empty-pattern - 'no-empty-pattern': 'error', - - // disallow comparisons to null without a type-checking operator - 'no-eq-null': 'off', - - // disallow use of eval() - 'no-eval': 'error', - - // disallow adding to native types - 'no-extend-native': 'error', - - // disallow unnecessary function binding - 'no-extra-bind': 'error', - - // disallow Unnecessary Labels - // https://eslint.org/docs/rules/no-extra-label - 'no-extra-label': 'error', - - // disallow fallthrough of case statements - 'no-fallthrough': 'error', - - // disallow the use of leading or trailing decimal points in numeric literals - 'no-floating-decimal': 'error', - - // disallow reassignments of native objects or read-only globals - // https://eslint.org/docs/rules/no-global-assign - 'no-global-assign': ['error', { exceptions: [] }], - // deprecated in favor of no-global-assign - 'no-native-reassign': 'off', - - // disallow implicit type conversions - // https://eslint.org/docs/rules/no-implicit-coercion - 'no-implicit-coercion': ['off', { - boolean: false, - number: true, - string: true, - allow: [], - }], - - // disallow var and named functions in global scope - // https://eslint.org/docs/rules/no-implicit-globals - 'no-implicit-globals': 'off', - - // disallow use of eval()-like methods - 'no-implied-eval': 'error', - - // disallow this keywords outside of classes or class-like objects - 'no-invalid-this': 'off', - - // disallow usage of __iterator__ property - 'no-iterator': 'error', - - // disallow use of labels for anything other then loops and switches - 'no-labels': ['error', { allowLoop: false, allowSwitch: false }], - - // disallow unnecessary nested blocks - 'no-lone-blocks': 'error', - - // disallow creation of functions within loops - 'no-loop-func': 'error', - - // disallow magic numbers - // https://eslint.org/docs/rules/no-magic-numbers - 'no-magic-numbers': ['off', { - ignore: [], - ignoreArrayIndexes: true, - enforceConst: true, - detectObjects: false, - }], - - // disallow use of multiple spaces - 'no-multi-spaces': ['error', { - ignoreEOLComments: false, - }], - - // disallow use of multiline strings - 'no-multi-str': 'error', - - // disallow use of new operator when not part of the assignment or comparison - 'no-new': 'error', - - // disallow use of new operator for Function object - 'no-new-func': 'error', - - // disallows creating new instances of String, Number, and Boolean - 'no-new-wrappers': 'error', - - // disallow use of (old style) octal literals - 'no-octal': 'error', - - // disallow use of octal escape sequences in string literals, such as - // var foo = 'Copyright \251'; - 'no-octal-escape': 'error', - - // disallow reassignment of function parameters - // disallow parameter object manipulation except for specific exclusions - // rule: https://eslint.org/docs/rules/no-param-reassign.html - 'no-param-reassign': ['error', { - props: true, - ignorePropertyModificationsFor: [ - 'acc', // for reduce accumulators - 'accumulator', // for reduce accumulators - 'e', // for e.returnvalue - 'ctx', // for Koa routing - 'req', // for Express requests - 'request', // for Express requests - 'res', // for Express responses - 'response', // for Express responses - '$scope', // for Angular 1 scopes - 'staticContext', // for ReactRouter context - ], - }], - - // disallow usage of __proto__ property - 'no-proto': 'error', - - // disallow declaring the same variable more then once - 'no-redeclare': 'error', - - // disallow certain object properties - // https://eslint.org/docs/rules/no-restricted-properties - 'no-restricted-properties': ['error', - { - object: 'arguments', - property: 'callee', - message: 'arguments.callee is deprecated', - }, { - object: 'global', - property: 'isFinite', - message: 'Please use Number.isFinite instead', - }, { - object: 'self', - property: 'isFinite', - message: 'Please use Number.isFinite instead', - }, { - object: 'window', - property: 'isFinite', - message: 'Please use Number.isFinite instead', - }, { - object: 'global', - property: 'isNaN', - message: 'Please use Number.isNaN instead', - }, { - object: 'self', - property: 'isNaN', - message: 'Please use Number.isNaN instead', - }, { - object: 'window', - property: 'isNaN', - message: 'Please use Number.isNaN instead', - }, { - property: '__defineGetter__', - message: 'Please use Object.defineProperty instead.', - }, { - property: '__defineSetter__', - message: 'Please use Object.defineProperty instead.', - }, { - object: 'Math', - property: 'pow', - message: 'Use the exponentiation operator (**) instead.', - }], - - // disallow use of assignment in return statement - 'no-return-assign': ['error', 'always'], - - // disallow redundant `return await` - 'no-return-await': 'error', - - // disallow use of `javascript:` urls. - 'no-script-url': 'error', - - // disallow self assignment - // https://eslint.org/docs/rules/no-self-assign - 'no-self-assign': ['error', { - props: true, - }], - - // disallow comparisons where both sides are exactly the same - 'no-self-compare': 'error', - - // disallow use of comma operator - 'no-sequences': 'error', - - // restrict what can be thrown as an exception - 'no-throw-literal': 'error', - - // disallow unmodified conditions of loops - // https://eslint.org/docs/rules/no-unmodified-loop-condition - 'no-unmodified-loop-condition': 'off', - - // disallow usage of expressions in statement position - 'no-unused-expressions': ['error', { - allowShortCircuit: false, - allowTernary: false, - allowTaggedTemplates: false, - }], - - // disallow unused labels - // https://eslint.org/docs/rules/no-unused-labels - 'no-unused-labels': 'error', - - // disallow unnecessary .call() and .apply() - 'no-useless-call': 'off', - - // Disallow unnecessary catch clauses - // https://eslint.org/docs/rules/no-useless-catch - 'no-useless-catch': 'error', - - // disallow useless string concatenation - // https://eslint.org/docs/rules/no-useless-concat - 'no-useless-concat': 'error', - - // disallow unnecessary string escaping - // https://eslint.org/docs/rules/no-useless-escape - 'no-useless-escape': 'error', - - // disallow redundant return; keywords - // https://eslint.org/docs/rules/no-useless-return - 'no-useless-return': 'error', - - // disallow use of void operator - // https://eslint.org/docs/rules/no-void - 'no-void': 'error', - - // disallow usage of configurable warning terms in comments: e.g. todo - 'no-warning-comments': ['off', { terms: ['todo', 'fixme', 'xxx'], location: 'start' }], - - // disallow use of the with statement - 'no-with': 'error', - - // require using Error objects as Promise rejection reasons - // https://eslint.org/docs/rules/prefer-promise-reject-errors - 'prefer-promise-reject-errors': ['error', { allowEmptyReject: true }], - - // Suggest using named capture group in regular expression - // https://eslint.org/docs/rules/prefer-named-capture-group - 'prefer-named-capture-group': 'off', - - // https://eslint.org/docs/rules/prefer-regex-literals - // TODO; enable, semver-minor, once eslint v6.4 is required (which is a major) - 'prefer-regex-literals': 'off', - - // require use of the second argument for parseInt() - radix: 'error', - - // require `await` in `async function` (note: this is a horrible rule that should never be used) - // https://eslint.org/docs/rules/require-await - 'require-await': 'off', - - // Enforce the use of u flag on RegExp - // https://eslint.org/docs/rules/require-unicode-regexp - 'require-unicode-regexp': 'off', - - // requires to declare all vars on top of their containing scope - 'vars-on-top': 'error', - - // require immediate function invocation to be wrapped in parentheses - // https://eslint.org/docs/rules/wrap-iife.html - 'wrap-iife': ['error', 'outside', { functionPrototypeMethods: false }], - - // require or disallow Yoda conditions - yoda: 'error', - }, -}; diff --git a/eslint-config/configs/base/rules/errors.js b/eslint-config/configs/base/rules/errors.js deleted file mode 100644 index 8ca3a1cff..000000000 --- a/eslint-config/configs/base/rules/errors.js +++ /dev/null @@ -1,154 +0,0 @@ -module.exports = { - rules: { - // Enforce “for” loop update clause moving the counter in the right direction - // https://eslint.org/docs/rules/for-direction - 'for-direction': 'error', - - // Enforces that a return statement is present in property getters - // https://eslint.org/docs/rules/getter-return - 'getter-return': ['error', { allowImplicit: true }], - - // disallow using an async function as a Promise executor - // https://eslint.org/docs/rules/no-async-promise-executor - 'no-async-promise-executor': 'error', - - // Disallow await inside of loops - // https://eslint.org/docs/rules/no-await-in-loop - 'no-await-in-loop': 'error', - - // Disallow comparisons to negative zero - // https://eslint.org/docs/rules/no-compare-neg-zero - 'no-compare-neg-zero': 'error', - - // disallow assignment in conditional expressions - 'no-cond-assign': ['error', 'always'], - - // disallow use of console - 'no-console': ['warn', { allow: ['warn', 'error'] }], - - // disallow use of constant expressions in conditions - 'no-constant-condition': 'warn', - - // disallow control characters in regular expressions - 'no-control-regex': 'error', - - // disallow use of debugger - 'no-debugger': 'error', - - // disallow duplicate arguments in functions - 'no-dupe-args': 'error', - - // Disallow duplicate conditions in if-else-if chains - // https://eslint.org/docs/rules/no-dupe-else-if - // TODO: enable, semver-major - 'no-dupe-else-if': 'off', - - // disallow duplicate keys when creating object literals - 'no-dupe-keys': 'error', - - // disallow a duplicate case label. - 'no-duplicate-case': 'error', - - // disallow empty statements - 'no-empty': 'error', - - // disallow the use of empty character classes in regular expressions - 'no-empty-character-class': 'error', - - // disallow assigning to the exception in a catch block - 'no-ex-assign': 'error', - - // disallow double-negation boolean casts in a boolean context - // https://eslint.org/docs/rules/no-extra-boolean-cast - 'no-extra-boolean-cast': 'error', - - // disallow unnecessary parentheses - // https://eslint.org/docs/rules/no-extra-parens - 'no-extra-parens': ['off', 'all', { - conditionalAssign: true, - nestedBinaryExpressions: false, - returnAssign: false, - ignoreJSX: 'all', // delegate to eslint-plugin-react - enforceForArrowConditionals: false, - }], - - // disallow unnecessary semicolons - 'no-extra-semi': 'error', - - // disallow overwriting functions written as function declarations - 'no-func-assign': 'error', - - // https://eslint.org/docs/rules/no-import-assign - // TODO: enable, semver-minor, once eslint v6.4 is required (which is a major) - 'no-import-assign': 'off', - - // disallow function or variable declarations in nested blocks - 'no-inner-declarations': 'error', - - // disallow invalid regular expression strings in the RegExp constructor - 'no-invalid-regexp': 'error', - - // disallow irregular whitespace outside of strings and comments - 'no-irregular-whitespace': 'error', - - // Disallow characters which are made with multiple code points in character class syntax - // https://eslint.org/docs/rules/no-misleading-character-class - 'no-misleading-character-class': 'error', - - // disallow the use of object properties of the global object (Math and JSON) as functions - 'no-obj-calls': 'error', - - // disallow use of Object.prototypes builtins directly - // https://eslint.org/docs/rules/no-prototype-builtins - 'no-prototype-builtins': 'error', - - // disallow multiple spaces in a regular expression literal - 'no-regex-spaces': 'error', - - // Disallow returning values from setters - // https://eslint.org/docs/rules/no-setter-return - // TODO: enable, semver-major (altho the guide forbids getters/setters already) - 'no-setter-return': 'off', - - // disallow sparse arrays - 'no-sparse-arrays': 'error', - - // Disallow template literal placeholder syntax in regular strings - // https://eslint.org/docs/rules/no-template-curly-in-string - 'no-template-curly-in-string': 'error', - - // Avoid code that looks like two expressions but is actually one - // https://eslint.org/docs/rules/no-unexpected-multiline - 'no-unexpected-multiline': 'error', - - // disallow unreachable statements after a return, throw, continue, or break statement - 'no-unreachable': 'error', - - // disallow return/throw/break/continue inside finally blocks - // https://eslint.org/docs/rules/no-unsafe-finally - 'no-unsafe-finally': 'error', - - // disallow negating the left operand of relational operators - // https://eslint.org/docs/rules/no-unsafe-negation - 'no-unsafe-negation': 'error', - // disallow negation of the left operand of an in expression - // deprecated in favor of no-unsafe-negation - 'no-negated-in-lhs': 'off', - - // Disallow assignments that can lead to race conditions due to usage of await or yield - // https://eslint.org/docs/rules/require-atomic-updates - // TODO: enable, semver-major - 'require-atomic-updates': 'off', - - // disallow comparisons with the value NaN - 'use-isnan': 'error', - - // ensure JSDoc comments are valid - // https://eslint.org/docs/rules/valid-jsdoc - 'valid-jsdoc': 'off', - - // ensure that the results of typeof are compared against a valid string - // https://eslint.org/docs/rules/valid-typeof - 'valid-typeof': ['error', { requireStringLiterals: true }], - }, -}; diff --git a/eslint-config/configs/base/rules/es6.js b/eslint-config/configs/base/rules/es6.js deleted file mode 100644 index c27ca1d64..000000000 --- a/eslint-config/configs/base/rules/es6.js +++ /dev/null @@ -1,176 +0,0 @@ -module.exports = { - env: { - es6: true, - }, - parserOptions: { - ecmaVersion: 6, - sourceType: 'module', - ecmaFeatures: { - generators: false, - objectLiteralDuplicateProperties: false, - }, - }, - rules: { - // enforces no braces where they can be omitted - // https://eslint.org/docs/rules/arrow-body-style - 'arrow-body-style': ['error', 'as-needed', { - requireReturnForObjectLiteral: false, - }], - - // require parens in arrow function arguments - // https://eslint.org/docs/rules/arrow-parens - 'arrow-parens': ['error', 'always'], - - // require space before/after arrow function's arrow - // https://eslint.org/docs/rules/arrow-spacing - 'arrow-spacing': ['error', { before: true, after: true }], - - // verify super() callings in constructors - 'constructor-super': 'error', - - // enforce the spacing around the * in generator functions - // https://eslint.org/docs/rules/generator-star-spacing - 'generator-star-spacing': ['error', { before: false, after: true }], - - // disallow modifying variables of class declarations - // https://eslint.org/docs/rules/no-class-assign - 'no-class-assign': 'error', - - // disallow arrow functions where they could be confused with comparisons - // https://eslint.org/docs/rules/no-confusing-arrow - 'no-confusing-arrow': ['error', { - allowParens: true, - }], - - // disallow modifying variables that are declared using const - 'no-const-assign': 'error', - - // disallow duplicate class members - // https://eslint.org/docs/rules/no-dupe-class-members - 'no-dupe-class-members': 'error', - - // disallow importing from the same path more than once - // https://eslint.org/docs/rules/no-duplicate-imports - // replaced by https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md - 'no-duplicate-imports': 'off', - - // disallow symbol constructor - // https://eslint.org/docs/rules/no-new-symbol - 'no-new-symbol': 'error', - - // disallow specific imports - // https://eslint.org/docs/rules/no-restricted-imports - 'no-restricted-imports': ['off', { - paths: [], - patterns: [], - }], - - // disallow to use this/super before super() calling in constructors. - // https://eslint.org/docs/rules/no-this-before-super - 'no-this-before-super': 'error', - - // disallow useless computed property keys - // https://eslint.org/docs/rules/no-useless-computed-key - 'no-useless-computed-key': 'error', - - // disallow unnecessary constructor - // https://eslint.org/docs/rules/no-useless-constructor - 'no-useless-constructor': 'error', - - // disallow renaming import, export, and destructured assignments to the same name - // https://eslint.org/docs/rules/no-useless-rename - 'no-useless-rename': ['error', { - ignoreDestructuring: false, - ignoreImport: false, - ignoreExport: false, - }], - - // require let or const instead of var - 'no-var': 'error', - - // require method and property shorthand syntax for object literals - // https://eslint.org/docs/rules/object-shorthand - 'object-shorthand': ['error', 'always', { - ignoreConstructors: false, - avoidQuotes: true, - }], - - // suggest using arrow functions as callbacks - 'prefer-arrow-callback': ['error', { - allowNamedFunctions: false, - allowUnboundThis: true, - }], - - // suggest using of const declaration for variables that are never modified after declared - 'prefer-const': ['error', { - destructuring: 'any', - ignoreReadBeforeAssign: true, - }], - - // Prefer destructuring from arrays and objects - // https://eslint.org/docs/rules/prefer-destructuring - 'prefer-destructuring': ['error', - { - VariableDeclarator: { - array: false, - object: true, - }, - AssignmentExpression: { - array: true, - object: false, - }, - }, { - enforceForRenamedProperties: false, - }, - ], - - // disallow parseInt() in favor of binary, octal, and hexadecimal literals - // https://eslint.org/docs/rules/prefer-numeric-literals - 'prefer-numeric-literals': 'error', - - // suggest using Reflect methods where applicable - // https://eslint.org/docs/rules/prefer-reflect - 'prefer-reflect': 'off', - - // use rest parameters instead of arguments - // https://eslint.org/docs/rules/prefer-rest-params - 'prefer-rest-params': 'error', - - // suggest using the spread operator instead of .apply() - // https://eslint.org/docs/rules/prefer-spread - 'prefer-spread': 'error', - - // suggest using template literals instead of string concatenation - // https://eslint.org/docs/rules/prefer-template - 'prefer-template': 'error', - - // disallow generator functions that do not have yield - // https://eslint.org/docs/rules/require-yield - 'require-yield': 'error', - - // enforce spacing between object rest-spread - // https://eslint.org/docs/rules/rest-spread-spacing - 'rest-spread-spacing': ['error', 'never'], - - // import sorting - // https://eslint.org/docs/rules/sort-imports - 'sort-imports': ['off', { - ignoreCase: false, - ignoreDeclarationSort: false, - ignoreMemberSort: false, - memberSyntaxSortOrder: ['none', 'all', 'multiple', 'single'], - }], - - // require a Symbol description - // https://eslint.org/docs/rules/symbol-description - 'symbol-description': 'error', - - // enforce usage of spacing in template strings - // https://eslint.org/docs/rules/template-curly-spacing - 'template-curly-spacing': 'error', - - // enforce spacing around the * in yield* expressions - // https://eslint.org/docs/rules/yield-star-spacing - 'yield-star-spacing': ['error', 'after'], - }, -}; diff --git a/eslint-config/configs/base/rules/imports.js b/eslint-config/configs/base/rules/imports.js deleted file mode 100644 index 287c91f04..000000000 --- a/eslint-config/configs/base/rules/imports.js +++ /dev/null @@ -1,234 +0,0 @@ -module.exports = { - env: { - es6: true, - }, - parserOptions: { - ecmaVersion: 6, - sourceType: 'module', - }, - plugins: [ - 'import', - ], - settings: { - 'import/resolver': { - node: { - extensions: ['.mjs', '.js', '.json'], - }, - }, - 'import/extensions': [ - '.js', - '.mjs', - '.jsx', - ], - 'import/core-modules': [], - 'import/ignore': [ - 'node_modules', - '\\.(coffee|scss|css|less|hbs|svg|json)$', - ], - }, - rules: { - // Static analysis: - - // ensure imports point to files/modules that can be resolved - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unresolved.md - 'import/no-unresolved': ['error', { commonjs: true, caseSensitive: true }], - - // ensure named imports coupled with named exports - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/named.md#when-not-to-use-it - 'import/named': 'error', - - // ensure default import coupled with default export - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/default.md#when-not-to-use-it - 'import/default': 'off', - - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/namespace.md - 'import/namespace': 'off', - - // Helpful warnings: - - // disallow invalid exports, e.g. multiple defaults - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/export.md - 'import/export': 'error', - - // do not allow a default import name to match a named export - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default.md - 'import/no-named-as-default': 'error', - - // warn on accessing default export property names that are also named exports - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-as-default-member.md - 'import/no-named-as-default-member': 'error', - - // disallow use of jsdoc-marked-deprecated imports - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-deprecated.md - 'import/no-deprecated': 'off', - - // Forbid the use of extraneous packages - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-extraneous-dependencies.md - // paths are treated both as absolute paths, and relative to process.cwd() - 'import/no-extraneous-dependencies': ['error'], - - // Forbid mutable exports - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-mutable-exports.md - 'import/no-mutable-exports': 'error', - - // Module systems: - - // disallow require() - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-commonjs.md - 'import/no-commonjs': 'off', - - // disallow AMD require/define - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-amd.md - 'import/no-amd': 'error', - - // No Node.js builtin modules - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-nodejs-modules.md - // TODO: enable? - 'import/no-nodejs-modules': 'off', - - // Style guide: - - // disallow non-import statements appearing before import statements - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/first.md - 'import/first': 'error', - - // disallow non-import statements appearing before import statements - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/imports-first.md - // deprecated: use `import/first` - 'import/imports-first': 'off', - - // disallow duplicate imports - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-duplicates.md - 'import/no-duplicates': 'error', - - // disallow namespace imports - // TODO: enable? - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-namespace.md - 'import/no-namespace': 'off', - - // Ensure consistent use of file extension within the import path - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/extensions.md - 'import/extensions': ['error', 'ignorePackages', { - js: 'never', - mjs: 'never', - jsx: 'never', - }], - - // ensure absolute imports are above relative imports and that unassigned imports are ignored - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/order.md - // TODO: enforce a stricter convention in module import order? - 'import/order': ['error', { groups: [['builtin', 'external', 'internal']] }], - - // Require a newline after the last import/require in a group - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/newline-after-import.md - 'import/newline-after-import': 'error', - - // Require modules with a single export to use a default export - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/prefer-default-export.md - 'import/prefer-default-export': 'error', - - // Restrict which files can be imported in a given folder - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-restricted-paths.md - 'import/no-restricted-paths': 'off', - - // Forbid modules to have too many dependencies - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/max-dependencies.md - 'import/max-dependencies': ['off', { max: 10 }], - - // Forbid import of modules using absolute paths - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-absolute-path.md - 'import/no-absolute-path': 'error', - - // Forbid require() calls with expressions - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-dynamic-require.md - 'import/no-dynamic-require': 'error', - - // prevent importing the submodules of other modules - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-internal-modules.md - 'import/no-internal-modules': ['off', { - allow: [], - }], - - // Warn if a module could be mistakenly parsed as a script by a consumer - // leveraging Unambiguous JavaScript Grammar - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/unambiguous.md - // this should not be enabled until this proposal has at least been *presented* to TC39. - // At the moment, it's not a thing. - 'import/unambiguous': 'off', - - // Forbid Webpack loader syntax in imports - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-webpack-loader-syntax.md - 'import/no-webpack-loader-syntax': 'error', - - // Prevent unassigned imports - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-unassigned-import.md - // importing for side effects is perfectly acceptable, if you need side effects. - 'import/no-unassigned-import': 'off', - - // Prevent importing the default as if it were named - // https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-named-default.md - 'import/no-named-default': 'error', - - // Reports if a module's default export is unnamed - // https://github.com/benmosher/eslint-plugin-import/blob/d9b712ac7fd1fddc391f7b234827925c160d956f/docs/rules/no-anonymous-default-export.md - 'import/no-anonymous-default-export': ['off', { - allowArray: false, - allowArrowFunction: false, - allowAnonymousClass: false, - allowAnonymousFunction: false, - allowLiteral: false, - allowObject: false, - }], - - // This rule enforces that all exports are declared at the bottom of the file. - // https://github.com/benmosher/eslint-plugin-import/blob/98acd6afd04dcb6920b81330114e146dc8532ea4/docs/rules/exports-last.md - // TODO: enable? - 'import/exports-last': 'off', - - // Reports when named exports are not grouped together in a single export declaration - // or when multiple assignments to CommonJS module.exports or exports object are present - // in a single file. - // https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/group-exports.md - 'import/group-exports': 'off', - - // forbid default exports. this is a terrible rule, do not use it. - // https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/no-default-export.md - 'import/no-default-export': 'off', - - // Prohibit named exports. this is a terrible rule, do not use it. - // https://github.com/benmosher/eslint-plugin-import/blob/1ec80fa35fa1819e2d35a70e68fb6a149fb57c5e/docs/rules/no-named-export.md - 'import/no-named-export': 'off', - - // Forbid a module from importing itself - // https://github.com/benmosher/eslint-plugin-import/blob/44a038c06487964394b1e15b64f3bd34e5d40cde/docs/rules/no-self-import.md - 'import/no-self-import': 'error', - - // Forbid cyclical dependencies between modules - // https://github.com/benmosher/eslint-plugin-import/blob/d81f48a2506182738409805f5272eff4d77c9348/docs/rules/no-cycle.md - 'import/no-cycle': ['error', { maxDepth: Infinity }], - - // Ensures that there are no useless path segments - // https://github.com/benmosher/eslint-plugin-import/blob/ebafcbf59ec9f653b2ac2a0156ca3bcba0a7cf57/docs/rules/no-useless-path-segments.md - 'import/no-useless-path-segments': ['error', { commonjs: true }], - - // dynamic imports require a leading comment with a webpackChunkName - // https://github.com/benmosher/eslint-plugin-import/blob/ebafcbf59ec9f653b2ac2a0156ca3bcba0a7cf57/docs/rules/dynamic-import-chunkname.md - 'import/dynamic-import-chunkname': ['off', { - importFunctions: [], - webpackChunknameFormat: '[0-9a-zA-Z-_/.]+', - }], - - // Use this rule to prevent imports to folders in relative parent paths. - // https://github.com/benmosher/eslint-plugin-import/blob/c34f14f67f077acd5a61b3da9c0b0de298d20059/docs/rules/no-relative-parent-imports.md - 'import/no-relative-parent-imports': 'off', - - // Reports modules without any exports, or with unused exports - // https://github.com/benmosher/eslint-plugin-import/blob/f63dd261809de6883b13b6b5b960e6d7f42a7813/docs/rules/no-unused-modules.md - // TODO: enable, semver-major - 'import/no-unused-modules': ['off', { - ignoreExports: [], - missingExports: true, - unusedExports: true, - }], - }, -}; diff --git a/eslint-config/configs/base/rules/style.js b/eslint-config/configs/base/rules/style.js deleted file mode 100644 index 49ffef474..000000000 --- a/eslint-config/configs/base/rules/style.js +++ /dev/null @@ -1,525 +0,0 @@ -module.exports = { - rules: { - // enforce line breaks after opening and before closing array brackets - // https://eslint.org/docs/rules/array-bracket-newline - // TODO: enable? semver-major - 'array-bracket-newline': ['off', 'consistent'], // object option alternative: { multiline: true, minItems: 3 } - - // enforce line breaks between array elements - // https://eslint.org/docs/rules/array-element-newline - // TODO: enable? semver-major - 'array-element-newline': ['off', { multiline: true, minItems: 3 }], - - // enforce spacing inside array brackets - 'array-bracket-spacing': ['error', 'never'], - - // enforce spacing inside single-line blocks - // https://eslint.org/docs/rules/block-spacing - 'block-spacing': ['error', 'always'], - - // enforce one true brace style - 'brace-style': ['error', '1tbs', { allowSingleLine: true }], - - // require camel case names - camelcase: ['error', { properties: 'never', ignoreDestructuring: false }], - - // enforce or disallow capitalization of the first letter of a comment - // https://eslint.org/docs/rules/capitalized-comments - 'capitalized-comments': ['off', 'never', { - line: { - ignorePattern: '.*', - ignoreInlineComments: true, - ignoreConsecutiveComments: true, - }, - block: { - ignorePattern: '.*', - ignoreInlineComments: true, - ignoreConsecutiveComments: true, - }, - }], - - // require trailing commas in multiline object literals - 'comma-dangle': ['error', { - arrays: 'always-multiline', - objects: 'always-multiline', - imports: 'always-multiline', - exports: 'always-multiline', - functions: 'always-multiline', - }], - - // enforce spacing before and after comma - 'comma-spacing': ['error', { before: false, after: true }], - - // enforce one true comma style - 'comma-style': ['error', 'last', { - exceptions: { - ArrayExpression: false, - ArrayPattern: false, - ArrowFunctionExpression: false, - CallExpression: false, - FunctionDeclaration: false, - FunctionExpression: false, - ImportDeclaration: false, - ObjectExpression: false, - ObjectPattern: false, - VariableDeclaration: false, - NewExpression: false, - }, - }], - - // disallow padding inside computed properties - 'computed-property-spacing': ['error', 'never'], - - // enforces consistent naming when capturing the current execution context - 'consistent-this': 'off', - - // enforce newline at the end of file, with no multiple empty lines - 'eol-last': ['error', 'always'], - - // https://eslint.org/docs/rules/function-call-argument-newline - // TODO: enable, semver-minor, once eslint v6.2 is required (which is a major) - 'function-call-argument-newline': ['off', 'consistent'], - - // enforce spacing between functions and their invocations - // https://eslint.org/docs/rules/func-call-spacing - 'func-call-spacing': ['error', 'never'], - - // requires function names to match the name of the variable or property to which they are - // assigned - // https://eslint.org/docs/rules/func-name-matching - 'func-name-matching': ['off', 'always', { - includeCommonJSModuleExports: false, - considerPropertyDescriptor: true, - }], - - // require function expressions to have a name - // https://eslint.org/docs/rules/func-names - 'func-names': 'warn', - - // enforces use of function declarations or expressions - // https://eslint.org/docs/rules/func-style - // TODO: enable - 'func-style': ['off', 'expression'], - - // enforce consistent line breaks inside function parentheses - // https://eslint.org/docs/rules/function-paren-newline - 'function-paren-newline': ['error', 'consistent'], - - // Blacklist certain identifiers to prevent them being used - // https://eslint.org/docs/rules/id-blacklist - 'id-blacklist': 'off', - - // this option enforces minimum and maximum identifier lengths - // (variable names, property names etc.) - 'id-length': 'off', - - // require identifiers to match the provided regular expression - 'id-match': 'off', - - // Enforce the location of arrow function bodies with implicit returns - // https://eslint.org/docs/rules/implicit-arrow-linebreak - 'implicit-arrow-linebreak': ['error', 'beside'], - - // this option sets a specific tab width for your code - // https://eslint.org/docs/rules/indent - indent: ['error', 2, { - SwitchCase: 1, - VariableDeclarator: 1, - outerIIFEBody: 1, - // MemberExpression: null, - FunctionDeclaration: { - parameters: 1, - body: 1, - }, - FunctionExpression: { - parameters: 1, - body: 1, - }, - CallExpression: { - arguments: 1, - }, - ArrayExpression: 1, - ObjectExpression: 1, - ImportDeclaration: 1, - flatTernaryExpressions: false, - // list derived from https://github.com/benjamn/ast-types/blob/HEAD/def/jsx.js - ignoredNodes: ['JSXElement', 'JSXElement > *', 'JSXAttribute', 'JSXIdentifier', 'JSXNamespacedName', 'JSXMemberExpression', 'JSXSpreadAttribute', 'JSXExpressionContainer', 'JSXOpeningElement', 'JSXClosingElement', 'JSXText', 'JSXEmptyExpression', 'JSXSpreadChild'], - ignoreComments: false, - }], - - // specify whether double or single quotes should be used in JSX attributes - // https://eslint.org/docs/rules/jsx-quotes - 'jsx-quotes': ['off', 'prefer-double'], - - // enforces spacing between keys and values in object literal properties - 'key-spacing': ['error', { beforeColon: false, afterColon: true }], - - // require a space before & after certain keywords - 'keyword-spacing': ['error', { - before: true, - after: true, - overrides: { - return: { after: true }, - throw: { after: true }, - case: { after: true }, - }, - }], - - // enforce position of line comments - // https://eslint.org/docs/rules/line-comment-position - // TODO: enable? - 'line-comment-position': ['off', { - position: 'above', - ignorePattern: '', - applyDefaultPatterns: true, - }], - - // disallow mixed 'LF' and 'CRLF' as linebreaks - // https://eslint.org/docs/rules/linebreak-style - 'linebreak-style': ['error', 'unix'], - - // require or disallow an empty line between class members - // https://eslint.org/docs/rules/lines-between-class-members - 'lines-between-class-members': ['error', 'always', { exceptAfterSingleLine: false }], - - // enforces empty lines around comments - 'lines-around-comment': 'off', - - // require or disallow newlines around directives - // https://eslint.org/docs/rules/lines-around-directive - 'lines-around-directive': ['error', { - before: 'always', - after: 'always', - }], - - // specify the maximum depth that blocks can be nested - 'max-depth': ['off', 4], - - // specify the maximum length of a line in your program - // https://eslint.org/docs/rules/max-len - 'max-len': ['off'], - - // specify the max number of lines in a file - // https://eslint.org/docs/rules/max-lines - 'max-lines': ['off', { - max: 300, - skipBlankLines: true, - skipComments: true, - }], - - // enforce a maximum function length - // https://eslint.org/docs/rules/max-lines-per-function - 'max-lines-per-function': ['off', { - max: 50, - skipBlankLines: true, - skipComments: true, - IIFEs: true, - }], - - // specify the maximum depth callbacks can be nested - 'max-nested-callbacks': 'off', - - // limits the number of parameters that can be used in the function declaration. - 'max-params': ['off', 3], - - // specify the maximum number of statement allowed in a function - 'max-statements': ['off', 10], - - // restrict the number of statements per line - // https://eslint.org/docs/rules/max-statements-per-line - 'max-statements-per-line': ['off', { max: 1 }], - - // enforce a particular style for multiline comments - // https://eslint.org/docs/rules/multiline-comment-style - 'multiline-comment-style': ['off', 'starred-block'], - - // require multiline ternary - // https://eslint.org/docs/rules/multiline-ternary - // TODO: enable? - 'multiline-ternary': ['off', 'never'], - - // require a capital letter for constructors - 'new-cap': ['error', { - newIsCap: true, - newIsCapExceptions: [], - capIsNew: false, - capIsNewExceptions: ['Immutable.Map', 'Immutable.Set', 'Immutable.List'], - }], - - // disallow the omission of parentheses when invoking a constructor with no arguments - // https://eslint.org/docs/rules/new-parens - 'new-parens': 'error', - - // allow/disallow an empty newline after var statement - 'newline-after-var': 'off', - - // https://eslint.org/docs/rules/newline-before-return - 'newline-before-return': 'off', - - // enforces new line after each method call in the chain to make it - // more readable and easy to maintain - // https://eslint.org/docs/rules/newline-per-chained-call - 'newline-per-chained-call': ['error', { ignoreChainWithDepth: 4 }], - - // disallow use of the Array constructor - 'no-array-constructor': 'error', - - // disallow use of bitwise operators - // https://eslint.org/docs/rules/no-bitwise - 'no-bitwise': 'error', - - // disallow use of the continue statement - // https://eslint.org/docs/rules/no-continue - 'no-continue': 'error', - - // disallow comments inline after code - 'no-inline-comments': 'off', - - // disallow if as the only statement in an else block - // https://eslint.org/docs/rules/no-lonely-if - 'no-lonely-if': 'error', - - // disallow un-paren'd mixes of different operators - // https://eslint.org/docs/rules/no-mixed-operators - 'no-mixed-operators': ['error', { - // the list of arthmetic groups disallows mixing `%` and `**` - // with other arithmetic operators. - groups: [ - ['%', '**'], - ['%', '+'], - ['%', '-'], - ['%', '*'], - ['%', '/'], - ['/', '*'], - ['&', '|', '<<', '>>', '>>>'], - ['==', '!=', '===', '!=='], - ['&&', '||'], - ], - allowSamePrecedence: false, - }], - - // disallow mixed spaces and tabs for indentation - 'no-mixed-spaces-and-tabs': 'error', - - // disallow use of chained assignment expressions - // https://eslint.org/docs/rules/no-multi-assign - 'no-multi-assign': ['error'], - - // disallow multiple empty lines, only one newline at the end, and no new lines at the beginning - // https://eslint.org/docs/rules/no-multiple-empty-lines - 'no-multiple-empty-lines': ['error', { max: 2, maxBOF: 1, maxEOF: 0 }], - - // disallow negated conditions - // https://eslint.org/docs/rules/no-negated-condition - 'no-negated-condition': 'off', - - // disallow nested ternary expressions - 'no-nested-ternary': 'error', - - // disallow use of the Object constructor - 'no-new-object': 'error', - - // disallow use of unary operators, ++ and -- - // https://eslint.org/docs/rules/no-plusplus - 'no-plusplus': 'error', - - // disallow certain syntax forms - // https://eslint.org/docs/rules/no-restricted-syntax - 'no-restricted-syntax': [ - 'error', - { - selector: 'ForInStatement', - message: 'for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array.', - }, - { - selector: 'ForOfStatement', - message: 'iterators/generators require regenerator-runtime, which is too heavyweight for this guide to allow them. Separately, loops should be avoided in favor of array iterations.', - }, - { - selector: 'LabeledStatement', - message: 'Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.', - }, - { - selector: 'WithStatement', - message: '`with` is disallowed in strict mode because it makes code impossible to predict and optimize.', - }, - ], - - // disallow space between function identifier and application - 'no-spaced-func': 'error', - - // disallow tab characters entirely - 'no-tabs': 'error', - - // disallow the use of ternary operators - 'no-ternary': 'off', - - // disallow trailing whitespace at the end of lines - 'no-trailing-spaces': ['error', { - skipBlankLines: false, - ignoreComments: false, - }], - - // disallow dangling underscores in identifiers - // https://eslint.org/docs/rules/no-underscore-dangle - 'no-underscore-dangle': ['error', { - allow: [], - allowAfterThis: false, - allowAfterSuper: false, - enforceInMethodNames: true, - }], - - // disallow the use of Boolean literals in conditional expressions - // also, prefer `a || b` over `a ? a : b` - // https://eslint.org/docs/rules/no-unneeded-ternary - 'no-unneeded-ternary': ['error', { defaultAssignment: false }], - - // disallow whitespace before properties - // https://eslint.org/docs/rules/no-whitespace-before-property - 'no-whitespace-before-property': 'error', - - // enforce the location of single-line statements - // https://eslint.org/docs/rules/nonblock-statement-body-position - 'nonblock-statement-body-position': ['error', 'beside', { overrides: {} }], - - // require padding inside curly braces - 'object-curly-spacing': ['error', 'always'], - - // enforce line breaks between braces - // https://eslint.org/docs/rules/object-curly-newline - 'object-curly-newline': ['error', { - ObjectExpression: { multiline: true, consistent: true }, - ObjectPattern: { multiline: true, consistent: true }, - ImportDeclaration: { multiline: true, consistent: true }, - ExportDeclaration: { multiline: true, consistent: true }, - }], - - // enforce "same line" or "multiple line" on object properties. - // https://eslint.org/docs/rules/object-property-newline - 'object-property-newline': ['error', { - allowAllPropertiesOnSameLine: true, - }], - - // allow just one var statement per function - 'one-var': ['error', 'never'], - - // require a newline around variable declaration - // https://eslint.org/docs/rules/one-var-declaration-per-line - 'one-var-declaration-per-line': ['error', 'always'], - - // require assignment operator shorthand where possible or prohibit it entirely - // https://eslint.org/docs/rules/operator-assignment - 'operator-assignment': ['error', 'always'], - - // Requires operator at the beginning of the line in multiline statements - // https://eslint.org/docs/rules/operator-linebreak - 'operator-linebreak': ['error', 'before', { overrides: { '=': 'none' } }], - - // disallow padding within blocks - 'padded-blocks': ['error', - { - blocks: 'never', - classes: 'never', - switches: 'never', - }, - { - allowSingleLineBlocks: true, - }, - ], - - // Require or disallow padding lines between statements - // https://eslint.org/docs/rules/padding-line-between-statements - 'padding-line-between-statements': 'off', - - // Disallow the use of Math.pow in favor of the ** operator - // https://eslint.org/docs/rules/prefer-exponentiation-operator - // TODO: enable, semver-major when eslint 5 is dropped - 'prefer-exponentiation-operator': 'off', - - // Prefer use of an object spread over Object.assign - // https://eslint.org/docs/rules/prefer-object-spread - 'prefer-object-spread': 'error', - - // require quotes around object literal property names - // https://eslint.org/docs/rules/quote-props.html - 'quote-props': ['error', 'as-needed', { keywords: false, unnecessary: true, numbers: false }], - - // specify whether double or single quotes should be used - quotes: ['error', 'single', { avoidEscape: true }], - - // do not require jsdoc - // https://eslint.org/docs/rules/require-jsdoc - 'require-jsdoc': 'off', - - // require or disallow use of semicolons instead of ASI - semi: ['error', 'always'], - - // enforce spacing before and after semicolons - 'semi-spacing': ['error', { before: false, after: true }], - - // Enforce location of semicolons - // https://eslint.org/docs/rules/semi-style - 'semi-style': ['error', 'last'], - - // requires object keys to be sorted - 'sort-keys': ['off', 'asc', { caseSensitive: false, natural: true }], - - // sort variables within the same declaration block - 'sort-vars': 'off', - - // require or disallow space before blocks - 'space-before-blocks': 'error', - - // require or disallow space before function opening parenthesis - // https://eslint.org/docs/rules/space-before-function-paren - 'space-before-function-paren': ['error', { - anonymous: 'always', - named: 'never', - asyncArrow: 'always', - }], - - // require or disallow spaces inside parentheses - 'space-in-parens': ['error', 'never'], - - // require spaces around operators - 'space-infix-ops': 'error', - - // Require or disallow spaces before/after unary operators - // https://eslint.org/docs/rules/space-unary-ops - 'space-unary-ops': ['error', { - words: true, - nonwords: false, - overrides: { - }, - }], - - // require or disallow a space immediately following the // or /* in a comment - // https://eslint.org/docs/rules/spaced-comment - 'spaced-comment': ['error', 'always', { - line: { - exceptions: ['-', '+'], - markers: ['=', '!'], // space here to support sprockets directives - }, - block: { - exceptions: ['-', '+'], - markers: ['=', '!', ':', '::'], // space here to support sprockets directives and flow comment types - balanced: true, - }, - }], - - // Enforce spacing around colons of switch statements - // https://eslint.org/docs/rules/switch-colon-spacing - 'switch-colon-spacing': ['error', { after: true, before: false }], - - // Require or disallow spacing between template tags and their literals - // https://eslint.org/docs/rules/template-tag-spacing - 'template-tag-spacing': ['error', 'never'], - - // require or disallow the Unicode Byte Order Mark - // https://eslint.org/docs/rules/unicode-bom - 'unicode-bom': ['error', 'never'], - - // require regex literals to be wrapped in parentheses - 'wrap-regex': 'off', - }, -}; diff --git a/eslint-config/configs/base/rules/variables.js b/eslint-config/configs/base/rules/variables.js deleted file mode 100644 index 96408bd41..000000000 --- a/eslint-config/configs/base/rules/variables.js +++ /dev/null @@ -1,44 +0,0 @@ -const confusingBrowserGlobals = require('confusing-browser-globals'); - -module.exports = { - rules: { - // enforce or disallow variable initializations at definition - 'init-declarations': 'off', - - // disallow the catch clause parameter name being the same as a variable in the outer scope - 'no-catch-shadow': 'off', - - // disallow deletion of variables - 'no-delete-var': 'error', - - // disallow labels that share a name with a variable - // https://eslint.org/docs/rules/no-label-var - 'no-label-var': 'error', - - // disallow specific globals - 'no-restricted-globals': ['error', 'isFinite', 'isNaN'].concat(confusingBrowserGlobals), - - // disallow declaration of variables already declared in the outer scope - 'no-shadow': 'error', - - // disallow shadowing of names such as arguments - 'no-shadow-restricted-names': 'error', - - // disallow use of undeclared variables unless mentioned in a /*global */ block - 'no-undef': 'error', - - // disallow use of undefined when initializing variables - 'no-undef-init': 'error', - - // disallow use of undefined variable - // https://eslint.org/docs/rules/no-undefined - // TODO: enable? - 'no-undefined': 'off', - - // disallow declaration of variables that are not used in the code - 'no-unused-vars': ['error', { vars: 'all', args: 'after-used', ignoreRestSiblings: true }], - - // disallow use of variables before they are defined - 'no-use-before-define': ['error', { functions: true, classes: true, variables: true }], - }, -}; diff --git a/eslint-config/configs/jest/index.js b/eslint-config/configs/jest/index.js deleted file mode 100644 index d2dc3a9af..000000000 --- a/eslint-config/configs/jest/index.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - env: { - jest: true, - }, - plugins: [ - 'jest', - 'jest-dom', - ], - extends: [ - './rules/jest', - './rules/jest-dom', - ].map(require.resolve), - rules: {}, -}; diff --git a/eslint-config/configs/jest/rules/jest-dom.js b/eslint-config/configs/jest/rules/jest-dom.js deleted file mode 100644 index e9b28f5b2..000000000 --- a/eslint-config/configs/jest/rules/jest-dom.js +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - rules: { - 'jest-dom/prefer-checked': 'error', - 'jest-dom/prefer-enabled-disabled': 'error', - 'jest-dom/prefer-focus': 'error', - 'jest-dom/prefer-required': 'error', - 'jest-dom/prefer-to-have-attribute': 'error', - }, -}; diff --git a/eslint-config/configs/jest/rules/jest.js b/eslint-config/configs/jest/rules/jest.js deleted file mode 100644 index 309f5e83f..000000000 --- a/eslint-config/configs/jest/rules/jest.js +++ /dev/null @@ -1,37 +0,0 @@ -module.exports = { - rules: { - 'jest/consistent-test-it': ['error', { fn: 'it' }], - 'jest/expect-expect': 'error', - 'jest/prefer-lowercase-title': ['error', { ignore: ['describe'] }], - 'jest/no-alias-methods': 'error', - 'jest/no-commented-out-tests': 'off', - 'jest/no-disabled-tests': 'off', - 'jest/no-duplicate-hooks': 'error', - 'jest/no-export': 'error', - 'jest/no-focused-tests': 'error', - 'jest/no-hooks': 'off', - 'jest/no-identical-title': 'error', - 'jest/no-if': 'error', - 'jest/no-jasmine-globals': 'error', - 'jest/no-large-snapshots': 'error', - 'jest/no-mocks-import': 'error', - 'jest/no-standalone-expect': 'error', - 'jest/no-done-callback': 'error', - 'jest/no-test-prefixes': 'error', - 'jest/no-test-return-statement': 'error', - 'jest/prefer-called-with': 'error', - 'jest/prefer-expect-assertions': 'off', - 'jest/prefer-hooks-on-top': 'error', - 'jest/prefer-spy-on': 'error', - 'jest/prefer-strict-equal': 'error', - 'jest/prefer-to-contain': 'error', - 'jest/prefer-to-have-length': 'error', - 'jest/prefer-todo': 'error', - 'jest/require-top-level-describe': 'error', - 'jest/require-to-throw-message': 'error', - 'jest/valid-describe-callback': 'error', - 'jest/valid-expect-in-promise': 'error', - 'jest/valid-expect': 'error', - 'jest/valid-title': 'error', - }, -}; diff --git a/eslint-config/configs/react/index.js b/eslint-config/configs/react/index.js deleted file mode 100644 index d753fcef8..000000000 --- a/eslint-config/configs/react/index.js +++ /dev/null @@ -1,26 +0,0 @@ -module.exports = { - env: { - browser: true, - }, - plugins: [ - 'jsx-a11y', - 'react-hooks', - 'react', - ], - settings: { - react: { - version: 'detect', - }, - }, - parserOptions: { - ecmaFeatures: { - jsx: true, - }, - }, - extends: [ - './rules/react-a11y', - './rules/react-hooks', - './rules/react', - ].map(require.resolve), - rules: {}, -}; diff --git a/eslint-config/configs/react/rules/react-a11y.js b/eslint-config/configs/react/rules/react-a11y.js deleted file mode 100644 index f5f83d6bb..000000000 --- a/eslint-config/configs/react/rules/react-a11y.js +++ /dev/null @@ -1,229 +0,0 @@ -module.exports = { - rules: { - // Enforce that anchors have content - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-has-content.md - 'jsx-a11y/anchor-has-content': ['error', { components: [] }], - - // Require ARIA roles to be valid and non-abstract - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md - 'jsx-a11y/aria-role': ['error', { ignoreNonDom: false }], - - // Enforce all aria-* props are valid. - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-props.md - 'jsx-a11y/aria-props': 'error', - - // Enforce ARIA state and property values are valid. - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-proptypes.md - 'jsx-a11y/aria-proptypes': 'error', - - // Enforce that elements that do not support ARIA roles, states, and - // properties do not have those attributes. - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-unsupported-elements.md - 'jsx-a11y/aria-unsupported-elements': 'error', - - // Enforce that all elements that require alternative text have meaningful information - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/alt-text.md - 'jsx-a11y/alt-text': ['error', { - elements: ['img', 'object', 'area', 'input[type="image"]'], - img: [], - object: [], - area: [], - 'input[type="image"]': [], - }], - - // Prevent img alt text from containing redundant words like "image", "picture", or "photo" - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-redundant-alt.md - 'jsx-a11y/img-redundant-alt': 'error', - - // require that JSX labels use "htmlFor" - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-has-for.md - // deprecated: replaced by `label-has-associated-control` rule - 'jsx-a11y/label-has-for': ['off', { - components: [], - required: { - every: ['nesting', 'id'], - }, - allowChildren: false, - }], - - // Enforce that a label tag has a text label and an associated control. - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/b800f40a2a69ad48015ae9226fbe879f946757ed/docs/rules/label-has-associated-control.md - 'jsx-a11y/label-has-associated-control': ['error', { - labelComponents: [], - labelAttributes: [], - controlComponents: [], - assert: 'both', - depth: 25, - }], - - // Enforce that a control (an interactive element) has a text label. - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/control-has-associated-label.md - 'jsx-a11y/control-has-associated-label': ['error', { - labelAttributes: ['label'], - controlComponents: [], - ignoreElements: [ - 'audio', - 'canvas', - 'embed', - 'input', - 'textarea', - 'tr', - 'video', - ], - ignoreRoles: [ - 'grid', - 'listbox', - 'menu', - 'menubar', - 'radiogroup', - 'row', - 'tablist', - 'toolbar', - 'tree', - 'treegrid', - ], - depth: 5, - }], - - // require that mouseover/out come with focus/blur, for keyboard-only users - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/mouse-events-have-key-events.md - 'jsx-a11y/mouse-events-have-key-events': 'error', - - // Prevent use of `accessKey` - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-access-key.md - 'jsx-a11y/no-access-key': 'error', - - // require onBlur instead of onChange - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-onchange.md - 'jsx-a11y/no-onchange': 'off', - - // Elements with an interactive role and interaction handlers must be focusable - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/interactive-supports-focus.md - 'jsx-a11y/interactive-supports-focus': 'error', - - // Enforce that elements with ARIA roles must have all required attributes - // for that role. - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-has-required-aria-props.md - 'jsx-a11y/role-has-required-aria-props': 'error', - - // Enforce that elements with explicit or implicit roles defined contain - // only aria-* properties supported by that role. - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-supports-aria-props.md - 'jsx-a11y/role-supports-aria-props': 'error', - - // Enforce tabIndex value is not greater than zero. - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/tabindex-no-positive.md - 'jsx-a11y/tabindex-no-positive': 'error', - - // ensure tags have content and are not aria-hidden - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/heading-has-content.md - 'jsx-a11y/heading-has-content': ['error', { components: [''] }], - - // require HTML elements to have a "lang" prop - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/html-has-lang.md - 'jsx-a11y/html-has-lang': 'error', - - // require HTML element's lang prop to be valid - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/lang.md - 'jsx-a11y/lang': 'error', - - // prevent distracting elements, like and - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-distracting-elements.md - 'jsx-a11y/no-distracting-elements': ['error', { - elements: ['marquee', 'blink'], - }], - - // only allow to have the "scope" attr - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/scope.md - 'jsx-a11y/scope': 'error', - - // require onClick be accompanied by onKeyUp/onKeyDown/onKeyPress - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/click-events-have-key-events.md - 'jsx-a11y/click-events-have-key-events': 'error', - - // Enforce that DOM elements without semantic behavior not have interaction handlers - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-static-element-interactions.md - 'jsx-a11y/no-static-element-interactions': ['error', { - handlers: [ - 'onClick', - 'onMouseDown', - 'onMouseUp', - 'onKeyPress', - 'onKeyDown', - 'onKeyUp', - ], - }], - - // A non-interactive element does not support event handlers (mouse and key handlers) - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-element-interactions.md - 'jsx-a11y/no-noninteractive-element-interactions': ['error', { - handlers: [ - 'onClick', - 'onMouseDown', - 'onMouseUp', - 'onKeyPress', - 'onKeyDown', - 'onKeyUp', - ], - }], - - // ensure emoji are accessible - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/accessible-emoji.md - 'jsx-a11y/accessible-emoji': 'error', - - // elements with aria-activedescendant must be tabbable - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-activedescendant-has-tabindex.md - 'jsx-a11y/aria-activedescendant-has-tabindex': 'error', - - // ensure iframe elements have a unique title - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/iframe-has-title.md - 'jsx-a11y/iframe-has-title': 'error', - - // prohibit autoFocus prop - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-autofocus.md - 'jsx-a11y/no-autofocus': ['error', { ignoreNonDOM: true }], - - // ensure HTML elements do not specify redundant ARIA roles - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-redundant-roles.md - 'jsx-a11y/no-redundant-roles': 'error', - - // media elements must have captions - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/media-has-caption.md - 'jsx-a11y/media-has-caption': ['error', { - audio: [], - video: [], - track: [], - }], - - // WAI-ARIA roles should not be used to convert an interactive element to non-interactive - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-interactive-element-to-noninteractive-role.md - 'jsx-a11y/no-interactive-element-to-noninteractive-role': ['error', { - tr: ['none', 'presentation'], - }], - - // WAI-ARIA roles should not be used to convert a non-interactive element to interactive - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-element-to-interactive-role.md - 'jsx-a11y/no-noninteractive-element-to-interactive-role': ['error', { - ul: ['listbox', 'menu', 'menubar', 'radiogroup', 'tablist', 'tree', 'treegrid'], - ol: ['listbox', 'menu', 'menubar', 'radiogroup', 'tablist', 'tree', 'treegrid'], - li: ['menuitem', 'option', 'row', 'tab', 'treeitem'], - table: ['grid'], - td: ['gridcell'], - }], - - // Tab key navigation should be limited to elements on the page that can be interacted with. - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-tabindex.md - 'jsx-a11y/no-noninteractive-tabindex': ['error', { - tags: [], - roles: ['tabpanel'], - }], - - // ensure tags are valid - // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/0745af376cdc8686d85a361ce36952b1fb1ccf6e/docs/rules/anchor-is-valid.md - 'jsx-a11y/anchor-is-valid': ['error', { - components: ['Link'], - specialLink: ['to'], - aspects: ['noHref', 'invalidHref', 'preferButton'], - }], - }, -}; diff --git a/eslint-config/configs/react/rules/react-hooks.js b/eslint-config/configs/react/rules/react-hooks.js deleted file mode 100644 index 26ca87538..000000000 --- a/eslint-config/configs/react/rules/react-hooks.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - rules: { - // Enforce Rules of Hooks - // https://github.com/facebook/react/blob/c11015ff4f610ac2924d1fc6d569a17657a404fd/packages/eslint-plugin-react-hooks/src/RulesOfHooks.js - 'react-hooks/rules-of-hooks': 'error', - - // Verify the list of the dependencies for Hooks like useEffect and similar - // https://github.com/facebook/react/blob/1204c789776cb01fbaf3e9f032e7e2ba85a44137/packages/eslint-plugin-react-hooks/src/ExhaustiveDeps.js - 'react-hooks/exhaustive-deps': 'error', - }, -}; diff --git a/eslint-config/configs/react/rules/react.js b/eslint-config/configs/react/rules/react.js deleted file mode 100644 index d8db48bec..000000000 --- a/eslint-config/configs/react/rules/react.js +++ /dev/null @@ -1,499 +0,0 @@ -module.exports = { - rules: { - // View link below for react rules documentation - // https://github.com/yannickcr/eslint-plugin-react#list-of-supported-rules - - // Specify whether double or single quotes should be used in JSX attributes - // https://eslint.org/docs/rules/jsx-quotes - 'jsx-quotes': ['error', 'prefer-double'], - - 'class-methods-use-this': ['error', { - exceptMethods: [ - 'render', - 'getInitialState', - 'getDefaultProps', - 'getChildContext', - 'componentWillMount', - 'UNSAFE_componentWillMount', - 'componentDidMount', - 'componentWillReceiveProps', - 'UNSAFE_componentWillReceiveProps', - 'shouldComponentUpdate', - 'componentWillUpdate', - 'UNSAFE_componentWillUpdate', - 'componentDidUpdate', - 'componentWillUnmount', - 'componentDidCatch', - 'getSnapshotBeforeUpdate', - ], - }], - - // Prevent missing displayName in a React component definition - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md - 'react/display-name': ['off', { ignoreTranspilerName: false }], - - // Forbid certain propTypes (any, array, object) - // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/forbid-prop-types.md - 'react/forbid-prop-types': ['error', { - forbid: ['any', 'array', 'object'], - checkContextTypes: true, - checkChildContextTypes: true, - }], - - // Forbid certain props on DOM Nodes - // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/forbid-dom-props.md - 'react/forbid-dom-props': ['off', { forbid: [] }], - - // Enforce boolean attributes notation in JSX - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md - 'react/jsx-boolean-value': ['error', 'never', { always: [] }], - - // Validate closing bracket location in JSX - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md - 'react/jsx-closing-bracket-location': ['error', 'line-aligned'], - - // Validate closing tag location in JSX - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-tag-location.md - 'react/jsx-closing-tag-location': 'error', - - // Enforce or disallow spaces inside of curly braces in JSX attributes - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md - 'react/jsx-curly-spacing': ['error', 'never', { allowMultiline: true }], - - // Enforce event handler naming conventions in JSX - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-handler-names.md - 'react/jsx-handler-names': ['off', { - eventHandlerPrefix: 'handle', - eventHandlerPropPrefix: 'on', - }], - - // Validate props indentation in JSX - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-indent-props.md - 'react/jsx-indent-props': ['error', 2], - - // Validate JSX has key prop when in array or iterator - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-key.md - 'react/jsx-key': 'off', - - // Limit maximum of props on a single line in JSX - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-max-props-per-line.md - 'react/jsx-max-props-per-line': ['error', { maximum: 1 }], - - // Prevent usage of .bind() in JSX props - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md - 'react/jsx-no-bind': ['error', { - ignoreRefs: true, - allowArrowFunctions: true, - allowFunctions: false, - allowBind: false, - ignoreDOMComponents: true, - }], - - // Prevent duplicate props in JSX - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md - 'react/jsx-no-duplicate-props': ['error', { ignoreCase: true }], - - // Prevent usage of unwrapped JSX strings - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-literals.md - 'react/jsx-no-literals': ['off', { noStrings: true }], - - // Disallow undeclared variables in JSX - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md - 'react/jsx-no-undef': 'error', - - // Enforce PascalCase for user-defined JSX components - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md - 'react/jsx-pascal-case': ['error', { - allowAllCaps: true, - ignore: [], - }], - - // Enforce propTypes declarations alphabetical sorting - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-prop-types.md - 'react/sort-prop-types': ['off', { - ignoreCase: true, - callbacksLast: false, - requiredFirst: false, - sortShapeProp: true, - }], - - // Deprecated in favor of react/jsx-sort-props - 'react/jsx-sort-prop-types': 'off', - - // Enforce props alphabetical sorting - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md - 'react/jsx-sort-props': ['off', { - ignoreCase: true, - callbacksLast: false, - shorthandFirst: false, - shorthandLast: false, - noSortAlphabetically: false, - reservedFirst: true, - }], - - // Enforce defaultProps declarations alphabetical sorting - // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-sort-default-props.md - 'react/jsx-sort-default-props': ['off', { - ignoreCase: true, - }], - - // Prevent React to be incorrectly marked as unused - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md - 'react/jsx-uses-react': ['error'], - - // Prevent variables used in JSX to be incorrectly marked as unused - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md - 'react/jsx-uses-vars': 'error', - - // Prevent usage of dangerous JSX properties - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-danger.md - 'react/no-danger': 'off', - - // Prevent usage of deprecated methods - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-deprecated.md - 'react/no-deprecated': ['error'], - - // Prevent usage of setState in componentDidMount - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md - // this is necessary for server-rendering - 'react/no-did-mount-set-state': 'off', - - // Prevent usage of setState in componentDidUpdate - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md - 'react/no-did-update-set-state': 'off', - - // Prevent usage of setState in componentWillUpdate - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-will-update-set-state.md - 'react/no-will-update-set-state': 'error', - - // Prevent direct mutation of this.state - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-direct-mutation-state.md - 'react/no-direct-mutation-state': 'off', - - // Prevent usage of isMounted - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md - 'react/no-is-mounted': 'error', - - // Prevent multiple component definition per file - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md - 'react/no-multi-comp': 'off', - - // Prevent usage of setState - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-set-state.md - 'react/no-set-state': 'off', - - // Prevent using string references - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-string-refs.md - 'react/no-string-refs': 'error', - - // Prevent usage of unknown DOM property - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md - 'react/no-unknown-property': 'error', - - // Require ES6 class declarations over React.createClass - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md - 'react/prefer-es6-class': ['error', 'always'], - - // Require stateless functions when not using lifecycle methods, setState or ref - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md - 'react/prefer-stateless-function': ['error', { ignorePureComponents: true }], - - // Prevent missing props validation in a React component definition - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md - 'react/prop-types': ['error', { - ignore: [], - customValidators: [], - skipUndeclared: false, - }], - - // Prevent missing React when using JSX - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md - 'react/react-in-jsx-scope': 'error', - - // Require render() methods to return something - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-render-return.md - 'react/require-render-return': 'error', - - // Prevent extra closing tags for components without children - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md - 'react/self-closing-comp': 'error', - - // Enforce component methods order - // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/sort-comp.md - 'react/sort-comp': ['error', { - order: [ - 'static-variables', - 'static-methods', - 'instance-variables', - 'lifecycle', - '/^on.+$/', - 'getters', - 'setters', - '/^(get|set)(?!(InitialState$|DefaultProps$|ChildContext$)).+$/', - 'instance-methods', - 'everything-else', - 'rendering', - ], - groups: { - lifecycle: [ - 'displayName', - 'propTypes', - 'contextTypes', - 'childContextTypes', - 'mixins', - 'statics', - 'defaultProps', - 'constructor', - 'getDefaultProps', - 'getInitialState', - 'state', - 'getChildContext', - 'getDerivedStateFromProps', - 'componentWillMount', - 'UNSAFE_componentWillMount', - 'componentDidMount', - 'componentWillReceiveProps', - 'UNSAFE_componentWillReceiveProps', - 'shouldComponentUpdate', - 'componentWillUpdate', - 'UNSAFE_componentWillUpdate', - 'getSnapshotBeforeUpdate', - 'componentDidUpdate', - 'componentDidCatch', - 'componentWillUnmount', - ], - rendering: [ - '/^render.+$/', - 'render', - ], - }, - }], - - // Prevent missing parentheses around multilines JSX - // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-wrap-multilines.md - 'react/jsx-wrap-multilines': ['error', { - declaration: 'parens-new-line', - assignment: 'parens-new-line', - return: 'parens-new-line', - arrow: 'parens-new-line', - condition: 'parens-new-line', - logical: 'parens-new-line', - prop: 'parens-new-line', - }], - - // Require that the first prop in a JSX element be on a new line when the element is multiline - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-first-prop-new-line.md - 'react/jsx-first-prop-new-line': ['error', 'multiline-multiprop'], - - // Enforce spacing around jsx equals signs - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-equals-spacing.md - 'react/jsx-equals-spacing': ['error', 'never'], - - // Enforce JSX indentation - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-indent.md - 'react/jsx-indent': ['error', 2], - - // Disallow target="_blank" on links - // https://github.com/yannickcr/eslint-plugin-react/blob/ac102885765be5ff37847a871f239c6703e1c7cc/docs/rules/jsx-no-target-blank.md - 'react/jsx-no-target-blank': ['error', { enforceDynamicLinks: 'always' }], - - // only .jsx files may have JSX - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-filename-extension.md - 'react/jsx-filename-extension': ['error', { extensions: ['.js', '.jsx', '.ts', '.tsx'] }], - - // prevent accidental JS comments from being injected into JSX as text - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-comment-textnodes.md - 'react/jsx-no-comment-textnodes': 'error', - - // disallow using React.render/ReactDOM.render's return value - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-render-return-value.md - 'react/no-render-return-value': 'error', - - // require a shouldComponentUpdate method, or PureRenderMixin - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-optimization.md - 'react/require-optimization': ['off', { allowDecorators: [] }], - - // warn against using findDOMNode() - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-find-dom-node.md - 'react/no-find-dom-node': 'error', - - // Forbid certain props on Components - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-component-props.md - 'react/forbid-component-props': ['off', { forbid: [] }], - - // Forbid certain elements - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-elements.md - 'react/forbid-elements': ['off', { forbid: [] }], - - // Prevent problem with children and props.dangerouslySetInnerHTML - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-danger-with-children.md - 'react/no-danger-with-children': 'error', - - // Prevent unused propType definitions - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unused-prop-types.md - 'react/no-unused-prop-types': ['error', { - customValidators: [ - ], - skipShapeProps: true, - }], - - // Require style prop value be an object or var - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/style-prop-object.md - 'react/style-prop-object': 'error', - - // Prevent invalid characters from appearing in markup - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unescaped-entities.md - 'react/no-unescaped-entities': 'error', - - // Prevent passing of children as props - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-children-prop.md - 'react/no-children-prop': 'error', - - // Validate whitespace in and around the JSX opening and closing brackets - // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-tag-spacing.md - 'react/jsx-tag-spacing': ['error', { - closingSlash: 'never', - beforeSelfClosing: 'always', - afterOpening: 'never', - beforeClosing: 'never', - }], - - // Enforce spaces before the closing bracket of self-closing JSX elements - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-space-before-closing.md - // Deprecated in favor of jsx-tag-spacing - 'react/jsx-space-before-closing': ['off', 'always'], - - // Prevent usage of Array index in keys - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-array-index-key.md - 'react/no-array-index-key': 'off', - - // Enforce a defaultProps definition for every prop that is not a required prop - // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/require-default-props.md - 'react/require-default-props': ['error', { - forbidDefaultForRequired: true, - }], - - // Forbids using non-exported propTypes - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-foreign-prop-types.md - // this is intentionally set to "warn". it would be "error", - // but it's only critical if you're stripping propTypes in production. - 'react/forbid-foreign-prop-types': ['warn', { allowInPropTypes: true }], - - // Prevent void DOM elements from receiving children - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/void-dom-elements-no-children.md - 'react/void-dom-elements-no-children': 'error', - - // Enforce all defaultProps have a corresponding non-required PropType - // https://github.com/yannickcr/eslint-plugin-react/blob/9e13ae2c51e44872b45cc15bf1ac3a72105bdd0e/docs/rules/default-props-match-prop-types.md - 'react/default-props-match-prop-types': ['error', { allowRequiredDefaults: false }], - - // Prevent usage of shouldComponentUpdate when extending React.PureComponent - // https://github.com/yannickcr/eslint-plugin-react/blob/9e13ae2c51e44872b45cc15bf1ac3a72105bdd0e/docs/rules/no-redundant-should-component-update.md - 'react/no-redundant-should-component-update': 'error', - - // Prevent unused state values - // https://github.com/yannickcr/eslint-plugin-react/pull/1103/ - 'react/no-unused-state': 'error', - - // Enforces consistent naming for boolean props - // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/boolean-prop-naming.md - 'react/boolean-prop-naming': ['off', { - propTypeNames: ['bool', 'mutuallyExclusiveTrueProps'], - rule: '^(is|has)[A-Z]([A-Za-z0-9]?)+', - message: '', - }], - - // Prevents common casing typos - // https://github.com/yannickcr/eslint-plugin-react/blob/73abadb697034b5ccb514d79fb4689836fe61f91/docs/rules/no-typos.md - 'react/no-typos': 'error', - - // Enforce curly braces or disallow unnecessary curly braces in JSX props and/or children - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-brace-presence.md - 'react/jsx-curly-brace-presence': ['error', { props: 'never', children: 'never' }], - - // One JSX Element Per Line - // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-one-expression-per-line.md - 'react/jsx-one-expression-per-line': ['error', { allow: 'single-child' }], - - // Enforce consistent usage of destructuring assignment of props, state, and context - // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/destructuring-assignment.md - 'react/destructuring-assignment': ['error', 'always'], - - // Prevent using this.state within a this.setState - // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/no-access-state-in-setstate.md - 'react/no-access-state-in-setstate': 'error', - - // Prevent usage of button elements without an explicit type attribute - // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/button-has-type.md - 'react/button-has-type': ['error', { - button: true, - submit: true, - reset: false, - }], - - // Ensures inline tags are not rendered without spaces between them - 'react/jsx-child-element-spacing': 'off', - - // Prevent this from being used in stateless functional components - // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/no-this-in-sfc.md - 'react/no-this-in-sfc': 'error', - - // Validate JSX maximum depth - // https://github.com/yannickcr/eslint-plugin-react/blob/abe8381c0d6748047224c430ce47f02e40160ed0/docs/rules/jsx-max-depth.md - 'react/jsx-max-depth': 'off', - - // Disallow multiple spaces between inline JSX props - // https://github.com/yannickcr/eslint-plugin-react/blob/ac102885765be5ff37847a871f239c6703e1c7cc/docs/rules/jsx-props-no-multi-spaces.md - 'react/jsx-props-no-multi-spaces': 'error', - - // Prevent usage of UNSAFE_ methods - // https://github.com/yannickcr/eslint-plugin-react/blob/157cc932be2cfaa56b3f5b45df6f6d4322a2f660/docs/rules/no-unsafe.md - 'react/no-unsafe': 'off', - - // Enforce shorthand or standard form for React fragments - // https://github.com/yannickcr/eslint-plugin-react/blob/bc976b837abeab1dffd90ac6168b746a83fc83cc/docs/rules/jsx-fragments.md - 'react/jsx-fragments': ['error', 'element'], - - // Enforce linebreaks in curly braces in JSX attributes and expressions. - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-newline.md - 'react/jsx-curly-newline': ['error', { - multiline: 'consistent', - singleline: 'consistent', - }], - - // Enforce state initialization style - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/state-in-constructor.md - // TODO: set to "never" once babel-preset-airbnb supports public class fields - 'react/state-in-constructor': ['error', 'always'], - - // Enforces where React component static properties should be positioned - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/static-property-placement.md - // TODO: set to "static public field" once babel-preset-airbnb supports public class fields - 'react/static-property-placement': ['error', 'property assignment'], - - // Disallow JSX props spreading - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-props-no-spreading.md - 'react/jsx-props-no-spreading': 'off', - - // Enforce that props are read-only - // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-read-only-props.md - 'react/prefer-read-only-props': 'off', - }, - - settings: { - 'import/resolver': { - node: { - extensions: ['.js', '.jsx', '.json'], - }, - }, - react: { - pragma: 'React', - version: 'detect', - }, - propWrapperFunctions: [ - 'forbidExtraProps', // https://www.npmjs.com/package/airbnb-prop-types - 'exact', // https://www.npmjs.com/package/prop-types-exact - 'Object.freeze', // https://tc39.github.io/ecma262/#sec-object.freeze - ], - }, -}; diff --git a/eslint-config/index.js b/eslint-config/index.js deleted file mode 100644 index efc05b0e8..000000000 --- a/eslint-config/index.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - extends: [ - './configs/base', - './configs/jest', - './configs/react', - ].map(require.resolve), - rules: {}, -}; diff --git a/fields/validations.js b/fields/validations.js deleted file mode 100644 index b4b882119..000000000 --- a/fields/validations.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('../dist/fields/validations'); diff --git a/fields/validations.ts b/fields/validations.ts deleted file mode 100644 index b24ba908b..000000000 --- a/fields/validations.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '../dist/fields/validations'; diff --git a/graphql.d.ts b/graphql.d.ts deleted file mode 100644 index d6aafcefb..000000000 --- a/graphql.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { default as buildPaginatedListType } from './dist/graphql/schema/buildPaginatedListType'; -export { default as GraphQL } from 'graphql'; diff --git a/graphql.js b/graphql.js deleted file mode 100644 index eedd2ce65..000000000 --- a/graphql.js +++ /dev/null @@ -1,4 +0,0 @@ -exports.buildPaginatedListType = - require('./dist/graphql/schema/buildPaginatedListType').default; - -exports.GraphQL = require('graphql'); diff --git a/jest.components.config.js b/jest.components.config.js index 783e75409..eac17bfda 100644 --- a/jest.components.config.js +++ b/jest.components.config.js @@ -1,18 +1,16 @@ module.exports = { - verbose: true, - testTimeout: 15000, + moduleNameMapper: { + '\\.(css|scss)$': '/packages/payload/src/bundlers/mocks/emptyModule.js', + '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': + '/packages/payload/src/bundlers/mocks/fileMock.js', + }, + setupFilesAfterEnv: ['./test/componentsSetup.js'], testEnvironment: 'jsdom', + testPathIgnorePatterns: ['node_modules', 'dist'], testRegex: '(/src/admin/.*\\.(test|spec))\\.[jt]sx?$', - setupFilesAfterEnv: ['/test/componentsSetup.js'], + testTimeout: 15000, transform: { '^.+\\.(t|j)sx?$': ['@swc/jest'], }, - testPathIgnorePatterns: [ - 'node_modules', - 'dist', - ], - moduleNameMapper: { - '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '/src/bundlers/mocks/fileMock.js', - '\\.(css|scss)$': '/src/bundlers/mocks/emptyModule.js', - }, -}; + verbose: true, +} diff --git a/jest.config.js b/jest.config.js index 127842e15..29ff91fc6 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,17 +1,15 @@ module.exports = { - verbose: true, + globalSetup: './test/jest.setup.ts', + moduleNameMapper: { + '\\.(css|scss)$': '/packages/payload/src/bundlers/mocks/emptyModule.js', + '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': + '/packages/payload/src/bundlers/mocks/fileMock.js', + }, testEnvironment: 'node', - testMatch: [ - '**/src/**/*.spec.ts', - '**/test/**/*int.spec.ts', - ], + testMatch: ['**/packages/payload/src/**/*.spec.ts', '**/test/**/*int.spec.ts'], + testTimeout: 90000, transform: { '^.+\\.(t|j)sx?$': ['@swc/jest'], }, - globalSetup: './test/jest.setup.ts', - testTimeout: 90000, - moduleNameMapper: { - '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '/src/bundlers/mocks/fileMock.js', - '\\.(css|scss)$': '/src/bundlers/mocks/emptyModule.js', - }, -}; + verbose: true, +} diff --git a/nodemon.json b/nodemon.json deleted file mode 100644 index e88a0eb69..000000000 --- a/nodemon.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "ignore": [ - ".git", - "node_modules", - "node_modules/**/node_modules", - "src/admin", - "src/**/*.spec.ts", - "test/**/payload-types.ts" - ], - "watch": [ - "src/**/*.ts", - "test/" - ], - "ext": "ts,js,json", - "exec": "ts-node ./test/dev.ts" -} diff --git a/package.json b/package.json index 1b9e67751..27d0b182e 100644 --- a/package.json +++ b/package.json @@ -1,66 +1,97 @@ { - "name": "payload", - "version": "1.14.0", + "name": "payload-monorepo", "description": "Node, React and MongoDB Headless CMS and Application Framework", - "license": "MIT", - "engines": { - "node": ">=14", - "yarn": ">=1.22 <2" - }, + "sideEffects": false, + "typings": "./dist/index.d.ts", + "version": "0.0.0", + "workspaces:": [ + "packages/*" + ], "author": { "email": "info@payloadcms.com", "name": "Payload", "url": "https://payloadcms.com" }, + "bin": { + "payload": "bin.js" + }, + "bugs": { + "url": "https://github.com/payloadcms/payload" + }, + "engines": { + "node": ">=14", + "pnpm": ">=8" + }, + "homepage": "https://payloadcms.com", + "license": "MIT", + "main": "./dist/index.js", "maintainers": [ { - "name": "Payload", "email": "info@payloadcms.com", + "name": "Payload", "url": "https://payloadcms.com" } ], + "private": true, + "publishConfig": { + "registry": "https://registry.npmjs.org/" + }, "repository": { "type": "git", "url": "https://github.com/payloadcms/payload.git" }, - "homepage": "https://payloadcms.com", - "main": "./dist/index.js", - "typings": "./dist/index.d.ts", - "sideEffects": false, - "bin": { - "payload": "bin.js" + "dependencies": { + "turbo": "^1.10.13" }, "scripts": { - "copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png}\" dist/", - "build:tsc": "tsc", - "build:components": "webpack --config dist/bundlers/webpack/components.config.js", - "build": "yarn copyfiles && yarn build:tsc && yarn build:components", - "build:watch": "nodemon --watch 'src/**' --ext 'ts,tsx' --exec \"yarn build:tsc\"", - "dev": "nodemon", - "dev:postgres": "cross-env PAYLOAD_DATABASE=postgres nodemon", - "dev:generate-types": "ts-node -T ./test/generateTypes.ts", + "build": "pnpm --filter payload run build", + "build:all": "turbo build", + "clean": "rimraf dist && rimraf packages/payload/dist", + "clean:cache": "rimraf node_modules/.cache && rimraf packages/payload/node_modules/.cache", + "clean:unix": "find . \\( -type d \\( -name node_modules -o -name dist -o -name .cache \\) -o -type f -name tsconfig.tsbuildinfo \\) -exec rm -rf {} +", + "dev": "pnpm --filter payload run dev", "dev:generate-graphql-schema": "ts-node -T ./test/generateGraphQLSchema.ts", - "pretest": "yarn build", - "test": "yarn test:int && yarn test:components && yarn test:e2e", - "test:int": "cross-env DISABLE_LOGGING=true jest --forceExit --detectOpenHandles", "test:int:postgres": "cross-env PAYLOAD_DATABASE=postgres yarn test:int", - "test:e2e": "ts-node -T ./test/runE2E.ts", - "test:e2e:headed": "cross-env DISABLE_LOGGING=true playwright test --headed", - "test:e2e:debug": "cross-env PWDEBUG=1 DISABLE_LOGGING=true playwright test", - "test:components": "cross-env jest --config=jest.components.config.js", - "translateNewKeys": "ts-node -T ./scripts/translateNewKeys.ts", - "clean:cache": "rimraf node_modules/.cache", - "clean": "rimraf dist", - "release:patch": "release-it patch", - "release:minor": "release-it minor", - "release:major": "release-it major", + "dev:generate-types": "pnpm --filter payload run dev:generate-types", + "dev:postgres": "pnpm --filter payload run dev:postgres", + "fix": "eslint \"src/**/*.ts\" --fix", + "lint": "eslint \"src/**/*.ts\"", + "pretest": "pnpm build", "release:beta": "release-it pre --preReleaseId=beta --npm.tag=beta --config .release-it.pre.json", "release:canary": "release-it pre --preReleaseId=canary --npm.tag=canary --config .release-it.pre.json", - "fix": "eslint \"src/**/*.ts\" --fix", - "lint": "eslint \"src/**/*.ts\"" + "release:major": "release-it major", + "release:minor": "release-it minor", + "release:patch": "release-it patch", + "test": "pnpm test:int && pnpm test:components && pnpm test:e2e", + "test:components": "cross-env jest --config=jest.components.config.js", + "test:e2e": "ts-node -T ./test/runE2E.ts", + "test:e2e:debug": "cross-env PWDEBUG=1 DISABLE_LOGGING=true playwright test", + "test:e2e:headed": "cross-env DISABLE_LOGGING=true playwright test --headed", + "test:int": "cross-env DISABLE_LOGGING=true jest --forceExit --detectOpenHandles", + "translateNewKeys": "pnpm --filter payload run translateNewKeys" }, - "bugs": { - "url": "https://github.com/payloadcms/payload" + "devDependencies": { + "@payloadcms/eslint-config": "workspace:*", + "@playwright/test": "1.37.1", + "@swc/cli": "^0.1.62", + "@swc/jest": "0.2.29", + "@swc/register": "0.1.10", + "@testing-library/jest-dom": "5.17.0", + "@testing-library/react": "13.4.0", + "@types/jest": "29.5.4", + "@types/node": "20.5.7", + "@types/testing-library__jest-dom": "5.14.8", + "copyfiles": "2.4.1", + "cross-env": "7.0.3", + "express": "4.18.2", + "get-port": "5.1.1", + "jest": "29.6.4", + "jest-environment-jsdom": "29.6.4", + "prettier": "^3.0.3", + "shelljs": "0.8.5", + "ts-node": "10.9.1", + "typescript": "5.2.2", + "uuid": "^9.0.0" }, "keywords": [ "payload", @@ -83,208 +114,6 @@ "react", "auth" ], - "dependencies": { - "@date-io/date-fns": "^2.16.0", - "@dnd-kit/core": "^6.0.7", - "@dnd-kit/sortable": "^7.0.2", - "@faceless-ui/modal": "^2.0.1", - "@faceless-ui/scroll-info": "^1.3.0", - "@faceless-ui/window-info": "^2.1.1", - "@monaco-editor/react": "^4.5.1", - "@swc/core": "^1.3.76", - "@swc/register": "^0.1.10", - "@types/sharp": "^0.31.1", - "body-parser": "^1.20.1", - "bson-objectid": "^2.0.4", - "compression": "^1.7.4", - "conf": "^10.2.0", - "connect-history-api-fallback": "^1.6.0", - "console-table-printer": "^2.11.2", - "css-loader": "^5.2.7", - "css-minimizer-webpack-plugin": "^5.0.0", - "dataloader": "^2.1.0", - "date-fns": "^2.29.3", - "deep-equal": "^2.2.0", - "deepmerge": "^4.2.2", - "dotenv": "^8.6.0", - "express": "^4.18.2", - "express-fileupload": "1.4.0", - "express-rate-limit": "^5.5.1", - "file-loader": "^6.2.0", - "file-type": "16.5.4", - "find-up": "4.1.0", - "flatley": "^5.2.0", - "fs-extra": "^10.1.0", - "get-tsconfig": "^4.4.0", - "graphql": "^16.6.0", - "graphql-http": "^1.17.1", - "graphql-playground-middleware-express": "^1.7.23", - "graphql-query-complexity": "^0.12.0", - "graphql-scalars": "^1.20.1", - "graphql-type-json": "^0.3.2", - "html-webpack-plugin": "^5.5.0", - "http-status": "^1.6.2", - "i18next": "^22.4.9", - "i18next-browser-languagedetector": "^6.1.8", - "i18next-http-middleware": "^3.2.2", - "is-hotkey": "^0.2.0", - "is-plain-object": "^5.0.0", - "isomorphic-fetch": "^3.0.0", - "joi": "^17.7.0", - "json-schema-to-typescript": "11.0.3", - "jsonwebtoken": "^9.0.0", - "jwt-decode": "^3.1.2", - "md5": "^2.3.0", - "method-override": "^3.0.0", - "micro-memoize": "^4.0.14", - "mini-css-extract-plugin": "1.6.2", - "minimist": "^1.2.7", - "mkdirp": "^1.0.4", - "monaco-editor": "^0.38.0", - "nodemailer": "^6.9.0", - "object-to-formdata": "^4.4.2", - "passport": "^0.6.0", - "passport-anonymous": "^1.0.1", - "passport-headerapikey": "^1.2.2", - "passport-jwt": "^4.0.1", - "passport-local": "^1.0.0", - "path-browserify": "^1.0.1", - "pino": "^8.15.0", - "pino-pretty": "^10.2.0", - "pluralize": "^8.0.0", - "postcss": "^8.4.21", - "postcss-loader": "^6.2.1", - "postcss-preset-env": "^9.0.0", - "probe-image-size": "^6.0.0", - "process": "^0.11.10", - "qs": "^6.11.0", - "qs-middleware": "^1.0.3", - "react": "^18.2.0", - "react-animate-height": "^2.1.2", - "react-datepicker": "^4.10.0", - "react-diff-viewer-continued": "^3.2.6", - "react-dom": "^18.2.0", - "react-helmet": "^6.1.0", - "react-i18next": "^11.18.6", - "react-router-dom": "^5.3.4", - "react-router-navigation-prompt": "^1.9.6", - "react-select": "^5.7.3", - "react-toastify": "^8.2.0", - "sanitize-filename": "^1.6.3", - "sass": "^1.57.1", - "sass-loader": "^12.6.0", - "scheduler": "^0.23.0", - "scmp": "^2.1.0", - "sharp": "^0.31.3", - "slate": "^0.91.4", - "slate-history": "^0.86.0", - "slate-hyperscript": "^0.81.3", - "slate-react": "^0.92.0", - "style-loader": "^2.0.0", - "swc-loader": "^0.2.3", - "swc-minify-webpack-plugin": "^2.1.0", - "terser-webpack-plugin": "^5.3.6", - "ts-essentials": "^7.0.3", - "url-loader": "^4.1.1", - "use-context-selector": "^1.4.1", - "uuid": "^8.3.2", - "webpack": "^5.78.0", - "webpack-bundle-analyzer": "^4.8.0", - "webpack-cli": "^4.10.0", - "webpack-dev-middleware": "6.0.1", - "webpack-hot-middleware": "^2.25.3" - }, - "devDependencies": { - "@playwright/test": "1.33.0", - "@release-it/conventional-changelog": "^7.0.0", - "@swc/jest": "^0.2.24", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@trbl/eslint-config": "^3.0.1", - "@types/asap": "^2.0.0", - "@types/body-parser": "^1.19.2", - "@types/compression": "^1.7.2", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/eslint": "^7.29.0", - "@types/express": "^4.17.15", - "@types/express-fileupload": "^1.4.1", - "@types/express-rate-limit": "^5.1.3", - "@types/extract-text-webpack-plugin": "^3.0.7", - "@types/file-loader": "^4.2.1", - "@types/hapi__joi": "~17.1.9", - "@types/html-webpack-plugin": "^3.2.6", - "@types/ignore-styles": "^5.0.0", - "@types/is-hotkey": "^0.1.7", - "@types/isomorphic-fetch": "^0.0.36", - "@types/jest": "^26.0.24", - "@types/joi": "^14.3.4", - "@types/json-schema": "^7.0.11", - "@types/jsonwebtoken": "^8.5.9", - "@types/method-override": "^0.0.32", - "@types/mime": "^2.0.3", - "@types/mini-css-extract-plugin": "^1.4.3", - "@types/minimist": "^1.2.2", - "@types/mkdirp": "^1.0.2", - "@types/node": "^20.1.3", - "@types/node-fetch": "^2.6.2", - "@types/nodemailer": "^6.4.7", - "@types/optimize-css-assets-webpack-plugin": "^5.0.5", - "@types/passport": "^1.0.11", - "@types/passport-anonymous": "^1.0.3", - "@types/passport-jwt": "^3.0.8", - "@types/passport-local": "^1.0.35", - "@types/pluralize": "^0.0.29", - "@types/prismjs": "^1.26.0", - "@types/probe-image-size": "^7.2.0", - "@types/prop-types": "^15.7.5", - "@types/qs": "^6.9.7", - "@types/qs-middleware": "^1.0.1", - "@types/react": "^18.0.26", - "@types/react-datepicker": "^4.8.0", - "@types/react-dom": "^18.0.10", - "@types/react-helmet": "^6.1.6", - "@types/react-router-dom": "^5.3.3", - "@types/shelljs": "^0.8.11", - "@types/testing-library__jest-dom": "^5.14.5", - "@types/uuid": "^8.3.4", - "@types/webpack-bundle-analyzer": "^4.6.0", - "@types/webpack-env": "^1.18.0", - "@types/webpack-hot-middleware": "2.25.6", - "@typescript-eslint/eslint-plugin": "^5.59.1", - "@typescript-eslint/parser": "^5.59.1", - "better-sqlite3": "^8.5.0", - "confusing-browser-globals": "^1.0.9", - "copyfiles": "^2.4.1", - "cross-env": "^7.0.3", - "eslint": "^8.39.0", - "eslint-plugin-import": "^2.27.5", - "eslint-plugin-jest": "^27.2.1", - "eslint-plugin-jest-dom": "^4.0.3", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-playwright": "^0.12.0", - "eslint-plugin-react": "^7.32.2", - "eslint-plugin-react-hooks": "^4.6.0", - "form-data": "^3.0.1", - "get-port": "5.1.1", - "glob": "^8.1.0", - "graphql-request": "^3.7.0", - "jest": "^29.3.1", - "jest-environment-jsdom": "^29.3.1", - "mongodb-memory-server": "^8.12.2", - "node-fetch": "2", - "nodemon": "^3.0.1", - "object.assign": "^4.1.0", - "object.entries": "^1.1.1", - "passport-strategy": "^1.0.0", - "release-it": "^16.1.3", - "rimraf": "^3.0.2", - "serve-static": "^1.15.0", - "shelljs": "^0.8.5", - "slash": "^3.0.0", - "ts-node": "^10.9.1", - "typescript": "^4.9.4" - }, "files": [ "bin.js", "dist", @@ -295,8 +124,5 @@ "*.d.ts", "!jest.config.js", "!jest.components.config.js" - ], - "publishConfig": { - "registry": "https://registry.npmjs.org/" - } + ] } diff --git a/packages/db-mongodb/.eslintignore b/packages/db-mongodb/.eslintignore new file mode 100644 index 000000000..247f3f12d --- /dev/null +++ b/packages/db-mongodb/.eslintignore @@ -0,0 +1,10 @@ +.tmp +**/.git +**/.hg +**/.pnp.* +**/.svn +**/.yarn/** +**/build +**/dist/** +**/node_modules +**/temp diff --git a/packages/db-mongodb/.eslintrc.cjs b/packages/db-mongodb/.eslintrc.cjs new file mode 100644 index 000000000..638d7f813 --- /dev/null +++ b/packages/db-mongodb/.eslintrc.cjs @@ -0,0 +1,15 @@ +/** @type {import('prettier').Config} */ +module.exports = { + extends: ['@payloadcms'], + overrides: [ + { + extends: ['plugin:@typescript-eslint/disable-type-checked'], + files: ['*.js', '*.cjs', '*.json', '*.md', '*.yml', '*.yaml'], + }, + ], + parserOptions: { + project: ['./tsconfig.json'], + tsconfigRootDir: __dirname, + }, + root: true, +} diff --git a/packages/db-mongodb/.prettierignore b/packages/db-mongodb/.prettierignore new file mode 100644 index 000000000..247f3f12d --- /dev/null +++ b/packages/db-mongodb/.prettierignore @@ -0,0 +1,10 @@ +.tmp +**/.git +**/.hg +**/.pnp.* +**/.svn +**/.yarn/** +**/build +**/dist/** +**/node_modules +**/temp diff --git a/packages/db-mongodb/.swcrc b/packages/db-mongodb/.swcrc new file mode 100644 index 000000000..d46b555fe --- /dev/null +++ b/packages/db-mongodb/.swcrc @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/swcrc", + "sourceMaps": "inline", + "jsc": { + "target": "esnext", + "parser": { + "syntax": "typescript", + "tsx": true, + "dts": true + } + }, + "module": { + "type": "commonjs" + } +} diff --git a/packages/db-mongodb/package.json b/packages/db-mongodb/package.json index 9cd431c26..658649482 100644 --- a/packages/db-mongodb/package.json +++ b/packages/db-mongodb/package.json @@ -1,25 +1,35 @@ { "name": "@payloadcms/db-mongodb", - "version": "0.0.1", "description": "The officially supported MongoDB database adapter for Payload", - "main": "index.js", - "repository": "https://github.com/payloadcms/payload", "author": "Payload CMS, Inc.", "license": "MIT", - "scripts": { - "build": "tsc" - }, - "devDependencies": { - "mongodb-memory-server": "^8.13.0", - "payload": "payloadcms/payload#build/chore/update-2.0", - "typescript": "^4.9.4" - }, "dependencies": { - "bson-objectid": "^2.0.4", - "deepmerge": "^4.3.1", + "bson-objectid": "2.0.4", + "deepmerge": "4.3.1", "get-port": "5.1.1", "mongoose": "6.11.4", + "mongoose-aggregate-paginate-v2": "1.0.6", "mongoose-paginate-v2": "1.7.22", - "uuid": "^9.0.0" - } + "uuid": "9.0.0" + }, + "devDependencies": { + "@payloadcms/eslint-config": "workspace:*", + "@types/mongoose-aggregate-paginate-v2": "1.0.9", + "mongodb-memory-server": "8.13.0", + "payload": "workspace:*" + }, + "main": "./src/index.ts", + "types": "./src/index.ts", + "publishConfig": { + "registry": "https://registry.npmjs.org/", + "main": "./dist/index.js", + "types": "./dist/index.d.ts" + }, + "scripts": { + "build": "pnpm build:swc && pnpm build:types", + "build:swc": "swc ./src -d ./dist --config-file .swcrc", + "build:types": "tsc --emitDeclarationOnly --outDir dist" + }, + "version": "0.0.1", + "repository": "https://github.com/payloadcms/payload" } diff --git a/packages/db-mongodb/src/connect.ts b/packages/db-mongodb/src/connect.ts index d1fc863df..7ec257952 100644 --- a/packages/db-mongodb/src/connect.ts +++ b/packages/db-mongodb/src/connect.ts @@ -1,67 +1,61 @@ /* eslint-disable @typescript-eslint/no-var-requires */ -import type { ConnectOptions } from 'mongoose'; -import mongoose from 'mongoose'; -import type { Connect } from 'payload/dist/database/types'; -import type { MongooseAdapter } from '.'; +import type { ConnectOptions } from 'mongoose' +import type { Connect } from 'payload/database' -export const connect: Connect = async function connect( - this: MongooseAdapter, - payload, -) { +import mongoose from 'mongoose' + +import type { MongooseAdapter } from '.' + +export const connect: Connect = async function connect(this: MongooseAdapter, payload) { if (this.url === false) { - return; + return } if (!payload.local && typeof this.url !== 'string') { - throw new Error('Error: missing MongoDB connection URL.'); + throw new Error('Error: missing MongoDB connection URL.') } - let urlToConnect = this.url; - let successfulConnectionMessage = 'Connected to MongoDB server successfully!'; + let urlToConnect = this.url + let successfulConnectionMessage = 'Connected to MongoDB server successfully!' const connectionOptions: ConnectOptions & { useFacet: undefined } = { autoIndex: true, ...this.connectOptions, useFacet: undefined, - }; + } if (process.env.NODE_ENV === 'test') { if (process.env.PAYLOAD_TEST_MONGO_URL) { - urlToConnect = process.env.PAYLOAD_TEST_MONGO_URL; + urlToConnect = process.env.PAYLOAD_TEST_MONGO_URL } else { - connectionOptions.dbName = 'payloadmemory'; - const { MongoMemoryServer } = require('mongodb-memory-server'); - const getPort = require('get-port'); + connectionOptions.dbName = 'payloadmemory' + const { MongoMemoryServer } = require('mongodb-memory-server') + const getPort = require('get-port') - const port = await getPort(); + const port = await getPort() this.mongoMemoryServer = await MongoMemoryServer.create({ instance: { dbName: 'payloadmemory', port, }, - }); + }) - urlToConnect = this.mongoMemoryServer.getUri(); - successfulConnectionMessage = 'Connected to in-memory MongoDB server successfully!'; + urlToConnect = this.mongoMemoryServer.getUri() + successfulConnectionMessage = 'Connected to in-memory MongoDB server successfully!' } } try { - this.connection = ( - await mongoose.connect(urlToConnect, connectionOptions) - ).connection; + this.connection = (await mongoose.connect(urlToConnect, connectionOptions)).connection if (process.env.PAYLOAD_DROP_DATABASE === 'true') { - this.payload.logger.info('---- DROPPING DATABASE ----'); - await mongoose.connection.dropDatabase(); - this.payload.logger.info('---- DROPPED DATABASE ----'); + this.payload.logger.info('---- DROPPING DATABASE ----') + await mongoose.connection.dropDatabase() + this.payload.logger.info('---- DROPPED DATABASE ----') } - this.payload.logger.info(successfulConnectionMessage); + this.payload.logger.info(successfulConnectionMessage) } catch (err) { - this.payload.logger.error( - `Error: cannot connect to MongoDB. Details: ${err.message}`, - err, - ); - process.exit(1); + this.payload.logger.error(`Error: cannot connect to MongoDB. Details: ${err.message}`, err) + process.exit(1) } -}; +} diff --git a/packages/db-mongodb/src/create.ts b/packages/db-mongodb/src/create.ts index 0a54c1154..ba7133c21 100644 --- a/packages/db-mongodb/src/create.ts +++ b/packages/db-mongodb/src/create.ts @@ -1,27 +1,29 @@ -import { Create } from 'payload/dist/database/types'; -import type { Document } from 'payload/types'; -import { PayloadRequest } from 'payload/dist/express/types'; -import type { MongooseAdapter } from '.'; -import { withSession } from './withSession'; +import type { Create } from 'payload/database' +import type { PayloadRequest } from 'payload/types' +import type { Document } from 'payload/types' + +import type { MongooseAdapter } from '.' + +import { withSession } from './withSession' export const create: Create = async function create( this: MongooseAdapter, { collection, data, req = {} as PayloadRequest }, ) { - const Model = this.collections[collection]; - const options = withSession(this, req.transactionID); + const Model = this.collections[collection] + const options = withSession(this, req.transactionID) - const [doc] = await Model.create([data], options); + const [doc] = await Model.create([data], options) // doc.toJSON does not do stuff like converting ObjectIds to string, or date strings to date objects. That's why we use JSON.parse/stringify here - const result: Document = JSON.parse(JSON.stringify(doc)); - const verificationToken = doc._verificationToken; + const result: Document = JSON.parse(JSON.stringify(doc)) + const verificationToken = doc._verificationToken // custom id type reset - result.id = result._id; + result.id = result._id if (verificationToken) { - result._verificationToken = verificationToken; + result._verificationToken = verificationToken } - return result; -}; + return result +} diff --git a/packages/db-mongodb/src/createGlobal.ts b/packages/db-mongodb/src/createGlobal.ts index 486707076..828e369fd 100644 --- a/packages/db-mongodb/src/createGlobal.ts +++ b/packages/db-mongodb/src/createGlobal.ts @@ -1,27 +1,29 @@ -import { PayloadRequest } from 'payload/types'; -import { CreateGlobal } from 'payload/dist/database/types'; -import sanitizeInternalFields from './utilities/sanitizeInternalFields'; -import { withSession } from './withSession'; -import type { MongooseAdapter } from '.'; +import type { CreateGlobal } from 'payload/database' +import type { PayloadRequest } from 'payload/types' + +import type { MongooseAdapter } from '.' + +import sanitizeInternalFields from './utilities/sanitizeInternalFields' +import { withSession } from './withSession' export const createGlobal: CreateGlobal = async function createGlobal( this: MongooseAdapter, - { data, slug, req = {} as PayloadRequest }, + { data, req = {} as PayloadRequest, slug }, ) { - const Model = this.globals; + const Model = this.globals const global = { globalType: slug, ...data, - }; - const options = withSession(this, req.transactionID); + } + const options = withSession(this, req.transactionID) - let [result] = (await Model.create([global], options)) as any; + let [result] = (await Model.create([global], options)) as any - result = JSON.parse(JSON.stringify(result)); + result = JSON.parse(JSON.stringify(result)) // custom id type reset - result.id = result._id; - result = sanitizeInternalFields(result); + result.id = result._id + result = sanitizeInternalFields(result) - return result; -}; + return result +} diff --git a/packages/db-mongodb/src/createVersion.ts b/packages/db-mongodb/src/createVersion.ts index e06438011..cee989cff 100644 --- a/packages/db-mongodb/src/createVersion.ts +++ b/packages/db-mongodb/src/createVersion.ts @@ -1,38 +1,40 @@ -import type { CreateVersion } from 'payload/dist/database/types'; -import { PayloadRequest } from 'payload/dist/express/types'; -import type { Document } from 'payload/types'; -import type { MongooseAdapter } from '.'; -import { withSession } from './withSession'; +import type { CreateVersion } from 'payload/database' +import type { PayloadRequest } from 'payload/types' +import type { Document } from 'payload/types' + +import type { MongooseAdapter } from '.' + +import { withSession } from './withSession' export const createVersion: CreateVersion = async function createVersion( this: MongooseAdapter, { - collectionSlug, - parent, - versionData, autosave, + collectionSlug, createdAt, - updatedAt, + parent, req = {} as PayloadRequest, + updatedAt, + versionData, }, ) { - const VersionModel = this.versions[collectionSlug]; - const options = withSession(this, req.transactionID); + const VersionModel = this.versions[collectionSlug] + const options = withSession(this, req.transactionID) const [doc] = await VersionModel.create( [ { - parent, - version: versionData, latest: true, autosave, createdAt, + parent, updatedAt, + version: versionData, }, ], options, req, - ); + ) await VersionModel.updateMany({ $and: [ @@ -58,9 +60,9 @@ export const createVersion: CreateVersion = async function createVersion( const verificationToken = doc._verificationToken; // custom id type reset - result.id = result._id; + result.id = result._id if (verificationToken) { - result._verificationToken = verificationToken; + result._verificationToken = verificationToken } - return result; -}; + return result +} diff --git a/packages/db-mongodb/src/deleteMany.ts b/packages/db-mongodb/src/deleteMany.ts index dce0e0eb1..5d4104f65 100644 --- a/packages/db-mongodb/src/deleteMany.ts +++ b/packages/db-mongodb/src/deleteMany.ts @@ -1,20 +1,24 @@ -import { DeleteMany } from 'payload/dist/database/types'; -import { PayloadRequest } from 'payload/dist/express/types'; -import type { MongooseAdapter } from '.'; -import { withSession } from './withSession'; +import type { DeleteMany } from 'payload/database' +import type { PayloadRequest } from 'payload/types' -export const deleteMany: DeleteMany = async function deleteMany(this: MongooseAdapter, - { collection, where, req = {} as PayloadRequest }) { - const Model = this.collections[collection]; +import type { MongooseAdapter } from '.' + +import { withSession } from './withSession' + +export const deleteMany: DeleteMany = async function deleteMany( + this: MongooseAdapter, + { collection, req = {} as PayloadRequest, where }, +) { + const Model = this.collections[collection] const options = { ...withSession(this, req.transactionID), lean: true, - }; + } const query = await Model.buildQuery({ payload: this.payload, where, - }); + }) - await Model.deleteMany(query, options); -}; + await Model.deleteMany(query, options) +} diff --git a/packages/db-mongodb/src/deleteOne.ts b/packages/db-mongodb/src/deleteOne.ts index 38a8c521b..3bb4d8879 100644 --- a/packages/db-mongodb/src/deleteOne.ts +++ b/packages/db-mongodb/src/deleteOne.ts @@ -1,29 +1,31 @@ -import { DeleteOne } from 'payload/dist/database/types'; -import type { Document } from 'payload/types'; -import { PayloadRequest } from 'payload/dist/express/types'; -import sanitizeInternalFields from './utilities/sanitizeInternalFields'; -import type { MongooseAdapter } from '.'; -import { withSession } from './withSession'; +import type { DeleteOne } from 'payload/database' +import type { PayloadRequest } from 'payload/types' +import type { Document } from 'payload/types' + +import type { MongooseAdapter } from '.' + +import sanitizeInternalFields from './utilities/sanitizeInternalFields' +import { withSession } from './withSession' export const deleteOne: DeleteOne = async function deleteOne( this: MongooseAdapter, - { collection, where, req = {} as PayloadRequest }, + { collection, req = {} as PayloadRequest, where }, ) { - const Model = this.collections[collection]; - const options = withSession(this, req.transactionID); + const Model = this.collections[collection] + const options = withSession(this, req.transactionID) const query = await Model.buildQuery({ payload: this.payload, where, - }); + }) - const doc = await Model.findOneAndDelete(query, options).lean(); + const doc = await Model.findOneAndDelete(query, options).lean() - let result: Document = JSON.parse(JSON.stringify(doc)); + let result: Document = JSON.parse(JSON.stringify(doc)) // custom id type reset - result.id = result._id; - result = sanitizeInternalFields(result); + result.id = result._id + result = sanitizeInternalFields(result) - return result; -}; + return result +} diff --git a/packages/db-mongodb/src/deleteVersions.ts b/packages/db-mongodb/src/deleteVersions.ts index 90d53fe34..0f906139e 100644 --- a/packages/db-mongodb/src/deleteVersions.ts +++ b/packages/db-mongodb/src/deleteVersions.ts @@ -1,21 +1,25 @@ -import { DeleteVersions } from 'payload/dist/database/types'; -import { PayloadRequest } from 'payload/dist/express/types'; -import type { MongooseAdapter } from '.'; -import { withSession } from './withSession'; +import type { DeleteVersions } from 'payload/database' +import type { PayloadRequest } from 'payload/types' -export const deleteVersions: DeleteVersions = async function deleteVersions(this: MongooseAdapter, - { collection, where, locale, req = {} as PayloadRequest }) { - const VersionsModel = this.versions[collection]; +import type { MongooseAdapter } from '.' + +import { withSession } from './withSession' + +export const deleteVersions: DeleteVersions = async function deleteVersions( + this: MongooseAdapter, + { collection, locale, req = {} as PayloadRequest, where }, +) { + const VersionsModel = this.versions[collection] const options = { ...withSession(this, req.transactionID), lean: true, - }; + } const query = await VersionsModel.buildQuery({ - payload: this.payload, locale, + payload: this.payload, where, - }); + }) - await VersionsModel.deleteMany(query, options); -}; + await VersionsModel.deleteMany(query, options) +} diff --git a/packages/db-mongodb/src/destroy.ts b/packages/db-mongodb/src/destroy.ts index d68760595..8f0ebe3b5 100644 --- a/packages/db-mongodb/src/destroy.ts +++ b/packages/db-mongodb/src/destroy.ts @@ -1,13 +1,13 @@ -import mongoose from 'mongoose'; -import { Destroy } from 'payload/dist/database/types'; -import { MongooseAdapter } from './index'; +import type { Destroy } from 'payload/database' -export const destroy: Destroy = async function destroy( - this: MongooseAdapter, -) { +import mongoose from 'mongoose' + +import type { MongooseAdapter } from './index' + +export const destroy: Destroy = async function destroy(this: MongooseAdapter) { if (this.mongoMemoryServer) { - await mongoose.connection.dropDatabase(); - await mongoose.connection.close(); - await this.mongoMemoryServer.stop(); + await mongoose.connection.dropDatabase() + await mongoose.connection.close() + await this.mongoMemoryServer.stop() } -}; +} diff --git a/packages/db-mongodb/src/find.ts b/packages/db-mongodb/src/find.ts index 5c23bda7c..a0440d25b 100644 --- a/packages/db-mongodb/src/find.ts +++ b/packages/db-mongodb/src/find.ts @@ -1,79 +1,73 @@ -import type { PaginateOptions } from 'mongoose'; -import type { Find } from 'payload/dist/database/types'; -import flattenWhereToOperators from 'payload/dist/database/flattenWhereToOperators'; -import { PayloadRequest } from 'payload/dist/express/types'; -import sanitizeInternalFields from './utilities/sanitizeInternalFields'; -import { buildSortParam } from './queries/buildSortParam'; -import type { MongooseAdapter } from '.'; -import { withSession } from './withSession'; +import type { PaginateOptions } from 'mongoose' +import type { Find } from 'payload/database' +import type { PayloadRequest } from 'payload/types' + +import { flattenWhereToOperators } from 'payload/database' + +import type { MongooseAdapter } from '.' + +import { buildSortParam } from './queries/buildSortParam' +import sanitizeInternalFields from './utilities/sanitizeInternalFields' +import { withSession } from './withSession' export const find: Find = async function find( this: MongooseAdapter, - { - collection, - where, - page, - limit, - sort: sortArg, - locale, - pagination, - req = {} as PayloadRequest, - }, + { collection, limit, locale, page, pagination, req = {} as PayloadRequest, sort: sortArg, where }, ) { - const Model = this.collections[collection]; - const collectionConfig = this.payload.collections[collection].config; - const options = withSession(this, req.transactionID); + const Model = this.collections[collection] + const collectionConfig = this.payload.collections[collection].config + const options = withSession(this, req.transactionID) - let hasNearConstraint = false; + let hasNearConstraint = false if (where) { - const constraints = flattenWhereToOperators(where); - hasNearConstraint = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near')); + const constraints = flattenWhereToOperators(where) + hasNearConstraint = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near')) } - let sort; + let sort if (!hasNearConstraint) { sort = buildSortParam({ - sort: sortArg || collectionConfig.defaultSort, - fields: collectionConfig.fields, - timestamps: true, config: this.payload.config, + fields: collectionConfig.fields, locale, - }); + sort: sortArg || collectionConfig.defaultSort, + timestamps: true, + }) } const query = await Model.buildQuery({ - payload: this.payload, locale, + payload: this.payload, where, - }); + }) const paginationOptions: PaginateOptions = { - page, - sort, + forceCountFn: hasNearConstraint, lean: true, leanWithId: true, - useEstimatedCount: hasNearConstraint, - forceCountFn: hasNearConstraint, - pagination, options, - }; - - if (limit > 0) { - paginationOptions.limit = limit; - // limit must also be set here, it's ignored when pagination is false - paginationOptions.options.limit = limit; + page, + pagination, + sort, + useEstimatedCount: hasNearConstraint, } - const result = await Model.paginate(query, paginationOptions); - const docs = JSON.parse(JSON.stringify(result.docs)); + if (limit > 0) { + paginationOptions.limit = limit + // limit must also be set here, it's ignored when pagination is false + paginationOptions.options.limit = limit + } + + const result = await Model.paginate(query, paginationOptions) + const docs = JSON.parse(JSON.stringify(result.docs)) return { ...result, docs: docs.map((doc) => { // eslint-disable-next-line no-param-reassign - doc.id = doc._id; - return sanitizeInternalFields(doc); + doc.id = doc._id + return sanitizeInternalFields(doc) }), - }; -}; + } +} diff --git a/packages/db-mongodb/src/findGlobal.ts b/packages/db-mongodb/src/findGlobal.ts index efd37537d..4519c8e34 100644 --- a/packages/db-mongodb/src/findGlobal.ts +++ b/packages/db-mongodb/src/findGlobal.ts @@ -1,39 +1,42 @@ -import { combineQueries } from 'payload/dist/database/combineQueries'; -import type { FindGlobal } from 'payload/dist/database/types'; -import { PayloadRequest } from 'payload/dist/express/types'; -import sanitizeInternalFields from './utilities/sanitizeInternalFields'; -import type { MongooseAdapter } from '.'; -import { withSession } from './withSession'; +import type { FindGlobal } from 'payload/database' +import type { PayloadRequest } from 'payload/types' + +import { combineQueries } from 'payload/database' + +import type { MongooseAdapter } from '.' + +import sanitizeInternalFields from './utilities/sanitizeInternalFields' +import { withSession } from './withSession' export const findGlobal: FindGlobal = async function findGlobal( this: MongooseAdapter, - { slug, locale, where, req = {} as PayloadRequest }, + { locale, req = {} as PayloadRequest, slug, where }, ) { - const Model = this.globals; + const Model = this.globals const options = { ...withSession(this, req.transactionID), lean: true, - }; + } const query = await Model.buildQuery({ - where: combineQueries({ globalType: { equals: slug } }, where), - payload: this.payload, - locale, globalSlug: slug, - }); + locale, + payload: this.payload, + where: combineQueries({ globalType: { equals: slug } }, where), + }) - let doc = (await Model.findOne(query, {}, options)) as any; + let doc = (await Model.findOne(query, {}, options)) as any if (!doc) { - return null; + return null } if (doc._id) { - doc.id = doc._id; - delete doc._id; + doc.id = doc._id + delete doc._id } - doc = JSON.parse(JSON.stringify(doc)); - doc = sanitizeInternalFields(doc); + doc = JSON.parse(JSON.stringify(doc)) + doc = sanitizeInternalFields(doc) - return doc; -}; + return doc +} diff --git a/packages/db-mongodb/src/findGlobalVersions.ts b/packages/db-mongodb/src/findGlobalVersions.ts index a88f4c4fd..b915a7933 100644 --- a/packages/db-mongodb/src/findGlobalVersions.ts +++ b/packages/db-mongodb/src/findGlobalVersions.ts @@ -1,89 +1,92 @@ -import { PaginateOptions } from 'mongoose'; -import type { FindGlobalVersions } from 'payload/dist/database/types'; -import flattenWhereToOperators from 'payload/dist/database/flattenWhereToOperators'; -import { buildVersionGlobalFields } from 'payload/dist/versions/buildGlobalFields'; -import { PayloadRequest } from 'payload/dist/express/types'; -import sanitizeInternalFields from './utilities/sanitizeInternalFields'; -import type { MongooseAdapter } from '.'; -import { buildSortParam } from './queries/buildSortParam'; -import { withSession } from './withSession'; +import type { PaginateOptions } from 'mongoose' +import type { FindGlobalVersions } from 'payload/database' +import type { PayloadRequest } from 'payload/types' + +import { flattenWhereToOperators } from 'payload/database' +import { buildVersionGlobalFields } from 'payload/versions' + +import type { MongooseAdapter } from '.' + +import { buildSortParam } from './queries/buildSortParam' +import sanitizeInternalFields from './utilities/sanitizeInternalFields' +import { withSession } from './withSession' export const findGlobalVersions: FindGlobalVersions = async function findGlobalVersions( this: MongooseAdapter, { global, - where, - page, limit, - sort: sortArg, locale, + page, pagination, - skip, req = {} as PayloadRequest, + skip, + sort: sortArg, + where, }, ) { - const Model = this.versions[global]; + const Model = this.versions[global] const versionFields = buildVersionGlobalFields( this.payload.globals.config.find(({ slug }) => slug === global), - ); + ) const options = { ...withSession(this, req.transactionID), - skip, limit, - }; - - let hasNearConstraint = false; - - if (where) { - const constraints = flattenWhereToOperators(where); - hasNearConstraint = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near')); + skip, } - let sort; + let hasNearConstraint = false + + if (where) { + const constraints = flattenWhereToOperators(where) + hasNearConstraint = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near')) + } + + let sort if (!hasNearConstraint) { sort = buildSortParam({ - sort: sortArg || '-updatedAt', - fields: versionFields, - timestamps: true, config: this.payload.config, + fields: versionFields, locale, - }); + sort: sortArg || '-updatedAt', + timestamps: true, + }) } const query = await Model.buildQuery({ - payload: this.payload, - locale, - where, globalSlug: global, - }); + locale, + payload: this.payload, + where, + }) const paginationOptions: PaginateOptions = { - page, - sort, + forceCountFn: hasNearConstraint, lean: true, leanWithId: true, - pagination, offset: skip, - useEstimatedCount: hasNearConstraint, - forceCountFn: hasNearConstraint, options, - }; - - if (limit > 0) { - paginationOptions.limit = limit; - // limit must also be set here, it's ignored when pagination is false - paginationOptions.options.limit = limit; + page, + pagination, + sort, + useEstimatedCount: hasNearConstraint, } - const result = await Model.paginate(query, paginationOptions); - const docs = JSON.parse(JSON.stringify(result.docs)); + if (limit > 0) { + paginationOptions.limit = limit + // limit must also be set here, it's ignored when pagination is false + paginationOptions.options.limit = limit + } + + const result = await Model.paginate(query, paginationOptions) + const docs = JSON.parse(JSON.stringify(result.docs)) return { ...result, docs: docs.map((doc) => { // eslint-disable-next-line no-param-reassign - doc.id = doc._id; - return sanitizeInternalFields(doc); + doc.id = doc._id + return sanitizeInternalFields(doc) }), - }; -}; + } +} diff --git a/packages/db-mongodb/src/findOne.ts b/packages/db-mongodb/src/findOne.ts index a1386c776..7d8f9bbe2 100644 --- a/packages/db-mongodb/src/findOne.ts +++ b/packages/db-mongodb/src/findOne.ts @@ -1,38 +1,40 @@ -import type { MongooseQueryOptions } from 'mongoose'; -import type { FindOne } from 'payload/dist/database/types'; -import type { Document } from 'payload/types'; -import { PayloadRequest } from 'payload/dist/express/types'; -import sanitizeInternalFields from './utilities/sanitizeInternalFields'; -import type { MongooseAdapter } from '.'; -import { withSession } from './withSession'; +import type { MongooseQueryOptions } from 'mongoose' +import type { FindOne } from 'payload/database' +import type { PayloadRequest } from 'payload/types' +import type { Document } from 'payload/types' + +import type { MongooseAdapter } from '.' + +import sanitizeInternalFields from './utilities/sanitizeInternalFields' +import { withSession } from './withSession' export const findOne: FindOne = async function findOne( this: MongooseAdapter, - { collection, where, locale, req = {} as PayloadRequest }, + { collection, locale, req = {} as PayloadRequest, where }, ) { - const Model = this.collections[collection]; + const Model = this.collections[collection] const options: MongooseQueryOptions = { ...withSession(this, req.transactionID), lean: true, - }; - - const query = await Model.buildQuery({ - payload: this.payload, - locale, - where, - }); - - const doc = await Model.findOne(query, {}, options); - - if (!doc) { - return null; } - let result: Document = JSON.parse(JSON.stringify(doc)); + const query = await Model.buildQuery({ + locale, + payload: this.payload, + where, + }) + + const doc = await Model.findOne(query, {}, options) + + if (!doc) { + return null + } + + let result: Document = JSON.parse(JSON.stringify(doc)) // custom id type reset - result.id = result._id; - result = sanitizeInternalFields(result); + result.id = result._id + result = sanitizeInternalFields(result) - return result; -}; + return result +} diff --git a/packages/db-mongodb/src/findVersions.ts b/packages/db-mongodb/src/findVersions.ts index d0b8e501f..f8b86cec8 100644 --- a/packages/db-mongodb/src/findVersions.ts +++ b/packages/db-mongodb/src/findVersions.ts @@ -1,86 +1,89 @@ -import { PaginateOptions } from 'mongoose'; -import type { FindVersions } from 'payload/dist/database/types'; -import flattenWhereToOperators from 'payload/dist/database/flattenWhereToOperators'; -import { PayloadRequest } from 'payload/dist/express/types'; -import sanitizeInternalFields from './utilities/sanitizeInternalFields'; -import type { MongooseAdapter } from '.'; -import { buildSortParam } from './queries/buildSortParam'; -import { withSession } from './withSession'; +import type { PaginateOptions } from 'mongoose' +import type { FindVersions } from 'payload/database' +import type { PayloadRequest } from 'payload/types' + +import { flattenWhereToOperators } from 'payload/database' + +import type { MongooseAdapter } from '.' + +import { buildSortParam } from './queries/buildSortParam' +import sanitizeInternalFields from './utilities/sanitizeInternalFields' +import { withSession } from './withSession' export const findVersions: FindVersions = async function findVersions( this: MongooseAdapter, { collection, - where, - page, limit, - sort: sortArg, locale, + page, pagination, - skip, req = {} as PayloadRequest, + skip, + sort: sortArg, + where, }, ) { - const Model = this.versions[collection]; - const collectionConfig = this.payload.collections[collection].config; + const Model = this.versions[collection] + const collectionConfig = this.payload.collections[collection].config const options = { ...withSession(this, req.transactionID), - skip, limit, - }; - - let hasNearConstraint = false; - - if (where) { - const constraints = flattenWhereToOperators(where); - hasNearConstraint = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near')); + skip, } - let sort; + let hasNearConstraint = false + + if (where) { + const constraints = flattenWhereToOperators(where) + hasNearConstraint = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near')) + } + + let sort if (!hasNearConstraint) { sort = buildSortParam({ - sort: sortArg || '-updatedAt', - fields: collectionConfig.fields, - timestamps: true, config: this.payload.config, + fields: collectionConfig.fields, locale, - }); + sort: sortArg || '-updatedAt', + timestamps: true, + }) } const query = await Model.buildQuery({ - payload: this.payload, locale, + payload: this.payload, where, - }); + }) const paginationOptions: PaginateOptions = { - page, - sort, - limit, + forceCountFn: hasNearConstraint, lean: true, leanWithId: true, - pagination, + limit, offset: skip, - useEstimatedCount: hasNearConstraint, - forceCountFn: hasNearConstraint, options, - }; - - if (limit > 0) { - paginationOptions.limit = limit; - // limit must also be set here, it's ignored when pagination is false - paginationOptions.options.limit = limit; + page, + pagination, + sort, + useEstimatedCount: hasNearConstraint, } - const result = await Model.paginate(query, paginationOptions); - const docs = JSON.parse(JSON.stringify(result.docs)); + if (limit > 0) { + paginationOptions.limit = limit + // limit must also be set here, it's ignored when pagination is false + paginationOptions.options.limit = limit + } + + const result = await Model.paginate(query, paginationOptions) + const docs = JSON.parse(JSON.stringify(result.docs)) return { ...result, docs: docs.map((doc) => { // eslint-disable-next-line no-param-reassign - doc.id = doc._id; - return sanitizeInternalFields(doc); + doc.id = doc._id + return sanitizeInternalFields(doc) }), - }; -}; + } +} diff --git a/packages/db-mongodb/src/index.ts b/packages/db-mongodb/src/index.ts index 33e1bf68a..7cdf0539d 100644 --- a/packages/db-mongodb/src/index.ts +++ b/packages/db-mongodb/src/index.ts @@ -1,108 +1,111 @@ -import type { ClientSession, Connection, ConnectOptions } from 'mongoose'; -import mongoose from 'mongoose'; -import { createMigration } from 'payload/dist/database/migrations/createMigration'; -import type { Payload } from 'payload'; -import type { DatabaseAdapter } from 'payload/dist/database/types'; -import { createDatabaseAdapter } from 'payload/dist/database/createAdapter'; -import { connect } from './connect'; -import { init } from './init'; -import { webpack } from './webpack'; -import { createGlobal } from './createGlobal'; -import { createVersion } from './createVersion'; -import { beginTransaction } from './transactions/beginTransaction'; -import { rollbackTransaction } from './transactions/rollbackTransaction'; -import { commitTransaction } from './transactions/commitTransaction'; -import { queryDrafts } from './queryDrafts'; -import { find } from './find'; -import { findGlobalVersions } from './findGlobalVersions'; -import { findVersions } from './findVersions'; -import { create } from './create'; -import { deleteOne } from './deleteOne'; -import { deleteVersions } from './deleteVersions'; -import { findGlobal } from './findGlobal'; -import { findOne } from './findOne'; -import { updateGlobal } from './updateGlobal'; -import { updateOne } from './updateOne'; -import { updateVersion } from './updateVersion'; -import { deleteMany } from './deleteMany'; -import { destroy } from './destroy'; -import type { CollectionModel, GlobalModel } from './types'; +import type { ClientSession, ConnectOptions, Connection } from 'mongoose' +import type { Payload } from 'payload' +import type { DatabaseAdapter } from 'payload/database' + +import mongoose from 'mongoose' +import { createDatabaseAdapter } from 'payload/database' +import { createMigration } from 'payload/database' + +import type { CollectionModel, GlobalModel } from './types' + +import { connect } from './connect' +import { create } from './create' +import { createGlobal } from './createGlobal' +import { createVersion } from './createVersion' +import { deleteMany } from './deleteMany' +import { deleteOne } from './deleteOne' +import { deleteVersions } from './deleteVersions' +import { destroy } from './destroy' +import { find } from './find' +import { findGlobal } from './findGlobal' +import { findGlobalVersions } from './findGlobalVersions' +import { findOne } from './findOne' +import { findVersions } from './findVersions' +import { init } from './init' +import { queryDrafts } from './queryDrafts' +import { beginTransaction } from './transactions/beginTransaction' +import { commitTransaction } from './transactions/commitTransaction' +import { rollbackTransaction } from './transactions/rollbackTransaction' +import { updateGlobal } from './updateGlobal' +import { updateOne } from './updateOne' +import { updateVersion } from './updateVersion' +import { webpack } from './webpack' export interface Args { - /** The URL to connect to MongoDB or false to start payload and prevent connecting */ - url: string | false; - migrationDir?: string; + /** Set to false to disable auto-pluralization of collection names, Defaults to true */ + autoPluralization?: boolean /** Extra configuration options */ connectOptions?: ConnectOptions & { /** Set false to disable $facet aggregation in non-supporting databases, Defaults to true */ - useFacet?: boolean; - }; - /** Set to false to disable auto-pluralization of collection names, Defaults to true */ - autoPluralization?: boolean; + useFacet?: boolean + } + migrationDir?: string + /** The URL to connect to MongoDB or false to start payload and prevent connecting */ + url: false | string } export type MongooseAdapter = DatabaseAdapter & Args & { - mongoMemoryServer: any; collections: { - [slug: string]: CollectionModel; - }; - globals: GlobalModel; + [slug: string]: CollectionModel + } + connection: Connection + globals: GlobalModel + mongoMemoryServer: any + sessions: Record versions: { [slug: string]: CollectionModel } - sessions: Record - connection: Connection } type MongooseAdapterResult = (args: { payload: Payload }) => MongooseAdapter export function mongooseAdapter({ - url, + autoPluralization = true, connectOptions, migrationDir, - autoPluralization = true, + url, }: Args): MongooseAdapterResult { function adapter({ payload }: { payload: Payload }) { - mongoose.set('strictQuery', false); + mongoose.set('strictQuery', false) return createDatabaseAdapter({ - payload, - migrationDir, - connection: undefined, - mongoMemoryServer: undefined, - sessions: {}, - url, - connectOptions: connectOptions || {}, autoPluralization, - globals: undefined, - collections: {}, - versions: {}, - connect, - destroy, - init, - webpack, - createMigration, beginTransaction, - rollbackTransaction, + collections: {}, commitTransaction, - queryDrafts, - findOne, - find, + connect, + connectOptions: connectOptions || {}, + connection: undefined, create, - updateOne, - deleteOne, - deleteMany, - findGlobal, createGlobal, - updateGlobal, - findVersions, - findGlobalVersions, + createMigration, createVersion, - updateVersion, + deleteMany, + deleteOne, deleteVersions, - }); + destroy, + find, + findGlobal, + findGlobalVersions, + findOne, + findVersions, + globals: undefined, + init, + migrationDir, + mongoMemoryServer: undefined, + payload, + queryDrafts, + rollbackTransaction, + sessions: {}, + updateGlobal, + updateOne, + updateVersion, + url, + versions: {}, + webpack, + }) } - return adapter; + return adapter } diff --git a/packages/db-mongodb/src/init.ts b/packages/db-mongodb/src/init.ts index 20c57572c..4b4f4a92b 100644 --- a/packages/db-mongodb/src/init.ts +++ b/packages/db-mongodb/src/init.ts @@ -1,121 +1,118 @@ /* eslint-disable no-param-reassign */ -import mongoose, { PaginateOptions } from 'mongoose'; -import paginate from 'mongoose-paginate-v2'; -import { buildVersionCollectionFields } from 'payload/dist/versions/buildCollectionFields'; -import { SanitizedCollectionConfig } from 'payload/dist/collections/config/types'; -import { getVersionsModelName } from 'payload/dist/versions/getVersionsModelName'; -import { buildVersionGlobalFields } from 'payload/dist/versions/buildGlobalFields'; -import type { Init } from 'payload/dist/database/types'; -import getBuildQueryPlugin from './queries/buildQuery'; -import buildCollectionSchema from './models/buildCollectionSchema'; -import buildSchema from './models/buildSchema'; -import type { MongooseAdapter } from '.'; -import { buildGlobalModel } from './models/buildGlobalModel'; -import { CollectionModel } from './types'; +import type { PaginateOptions } from 'mongoose' +import type { Init } from 'payload/database' +import type { SanitizedCollectionConfig } from 'payload/types' -export const init: Init = async function init( - this: MongooseAdapter, -) { - this.payload.config.collections.forEach( - (collection: SanitizedCollectionConfig) => { - const schema = buildCollectionSchema(collection, this.payload.config); +import mongoose from 'mongoose' +import mongooseAggregatePaginate from 'mongoose-aggregate-paginate-v2' +import paginate from 'mongoose-paginate-v2' +import { buildVersionGlobalFields } from 'payload/versions' +import { buildVersionCollectionFields } from 'payload/versions' +import { getVersionsModelName } from 'payload/versions' - if (collection.versions) { - const versionModelName = getVersionsModelName(collection); +import type { MongooseAdapter } from '.' +import type { CollectionModel } from './types' - const versionCollectionFields = buildVersionCollectionFields(collection); +import buildCollectionSchema from './models/buildCollectionSchema' +import { buildGlobalModel } from './models/buildGlobalModel' +import buildSchema from './models/buildSchema' +import getBuildQueryPlugin from './queries/buildQuery' - const versionSchema = buildSchema( - this.payload.config, - versionCollectionFields, - { - disableUnique: true, - draftsEnabled: true, - options: { - timestamps: false, - minimize: false, - }, - }, - ); +export const init: Init = async function init(this: MongooseAdapter) { + this.payload.config.collections.forEach((collection: SanitizedCollectionConfig) => { + const schema = buildCollectionSchema(collection, this.payload.config) - if (collection.indexes) { - collection.indexes.forEach((index) => { - // prefix 'version.' to each field in the index - const versionIndex = { - fields: {}, - options: index.options, - }; - Object.entries(index.fields) - .forEach(([key, value]) => { - versionIndex.fields[`version.${key}`] = value; - }); - versionSchema.index(versionIndex.fields, versionIndex.options); - }); - } + if (collection.versions) { + const versionModelName = getVersionsModelName(collection) - versionSchema.plugin(paginate, { useEstimatedCount: true }) - .plugin( - getBuildQueryPlugin({ - collectionSlug: collection.slug, - versionsFields: versionCollectionFields, - }), - ); + const versionCollectionFields = buildVersionCollectionFields(collection) - const model = mongoose.model( - versionModelName, - versionSchema, - versionModelName, - ) as CollectionModel; - // this.payload.versions[collection.slug] = model; - this.versions[collection.slug] = model; + const versionSchema = buildSchema(this.payload.config, versionCollectionFields, { + disableUnique: true, + draftsEnabled: true, + options: { + minimize: false, + timestamps: false, + }, + }) + + if (collection.indexes) { + collection.indexes.forEach((index) => { + // prefix 'version.' to each field in the index + const versionIndex = { + fields: {}, + options: index.options, + } + Object.entries(index.fields).forEach(([key, value]) => { + versionIndex.fields[`version.${key}`] = value + }) + versionSchema.index(versionIndex.fields, versionIndex.options) + }) + } + + versionSchema.plugin(paginate, { useEstimatedCount: true }).plugin( + getBuildQueryPlugin({ + collectionSlug: collection.slug, + versionsFields: versionCollectionFields, + }), + ) + + if (collection.versions?.drafts) { + versionSchema.plugin(mongooseAggregatePaginate) } const model = mongoose.model( - collection.slug, - schema, - this.autoPluralization === true ? undefined : collection.slug, - ) as CollectionModel; - this.collections[collection.slug] = model; + versionModelName, + versionSchema, + versionModelName, + ) as CollectionModel + // this.payload.versions[collection.slug] = model; + this.versions[collection.slug] = model + } - this.payload.collections[collection.slug] = { - config: collection, - }; - }, - ); + const model = mongoose.model( + collection.slug, + schema, + this.autoPluralization === true ? undefined : collection.slug, + ) as CollectionModel + this.collections[collection.slug] = model - const model = buildGlobalModel(this.payload.config); - this.globals = model; + // TS expect error only needed until we launch 2.0.0 + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + this.payload.collections[collection.slug] = { + config: collection, + } + }) + + const model = buildGlobalModel(this.payload.config) + this.globals = model this.payload.config.globals.forEach((global) => { if (global.versions) { - const versionModelName = getVersionsModelName(global); + const versionModelName = getVersionsModelName(global) - const versionGlobalFields = buildVersionGlobalFields(global); + const versionGlobalFields = buildVersionGlobalFields(global) - const versionSchema = buildSchema( - this.payload.config, - versionGlobalFields, - { - indexSortableFields: this.payload.config.indexSortableFields, - disableUnique: true, - draftsEnabled: true, - options: { - timestamps: false, - minimize: false, - }, + const versionSchema = buildSchema(this.payload.config, versionGlobalFields, { + disableUnique: true, + draftsEnabled: true, + indexSortableFields: this.payload.config.indexSortableFields, + options: { + minimize: false, + timestamps: false, }, - ); + }) versionSchema .plugin(paginate, { useEstimatedCount: true }) - .plugin(getBuildQueryPlugin({ versionsFields: versionGlobalFields })); + .plugin(getBuildQueryPlugin({ versionsFields: versionGlobalFields })) const versionsModel = mongoose.model( versionModelName, versionSchema, versionModelName, - ) as CollectionModel; - this.versions[global.slug] = versionsModel; + ) as CollectionModel + this.versions[global.slug] = versionsModel } - }); -}; + }) +} diff --git a/packages/db-mongodb/src/mock.js b/packages/db-mongodb/src/mock.js index b883de34a..5deea8137 100644 --- a/packages/db-mongodb/src/mock.js +++ b/packages/db-mongodb/src/mock.js @@ -1 +1 @@ -exports.mongooseAdapter = () => ({}); +exports.mongooseAdapter = () => ({}) diff --git a/packages/db-mongodb/src/models/buildCollectionSchema.ts b/packages/db-mongodb/src/models/buildCollectionSchema.ts index 18679f117..b1bd5eb00 100644 --- a/packages/db-mongodb/src/models/buildCollectionSchema.ts +++ b/packages/db-mongodb/src/models/buildCollectionSchema.ts @@ -1,38 +1,41 @@ -import paginate from 'mongoose-paginate-v2'; -import { PaginateOptions, Schema } from 'mongoose'; -import { SanitizedConfig } from 'payload/dist/config/types'; -import { SanitizedCollectionConfig } from 'payload/dist/collections/config/types'; -import getBuildQueryPlugin from '../queries/buildQuery'; -import buildSchema from './buildSchema'; +import type { PaginateOptions, Schema } from 'mongoose' +import type { SanitizedConfig } from 'payload/config' +import type { SanitizedCollectionConfig } from 'payload/types' -const buildCollectionSchema = (collection: SanitizedCollectionConfig, config: SanitizedConfig, schemaOptions = {}): Schema => { - const schema = buildSchema( - config, - collection.fields, - { - draftsEnabled: Boolean(typeof collection?.versions === 'object' && collection.versions.drafts), - options: { - timestamps: collection.timestamps !== false, - minimize: false, - ...schemaOptions, - }, - indexSortableFields: config.indexSortableFields, +import paginate from 'mongoose-paginate-v2' + +import getBuildQueryPlugin from '../queries/buildQuery' +import buildSchema from './buildSchema' + +const buildCollectionSchema = ( + collection: SanitizedCollectionConfig, + config: SanitizedConfig, + schemaOptions = {}, +): Schema => { + const schema = buildSchema(config, collection.fields, { + draftsEnabled: Boolean(typeof collection?.versions === 'object' && collection.versions.drafts), + indexSortableFields: config.indexSortableFields, + options: { + minimize: false, + timestamps: collection.timestamps !== false, + ...schemaOptions, }, - ); + }) if (config.indexSortableFields && collection.timestamps !== false) { - schema.index({ updatedAt: 1 }); - schema.index({ createdAt: 1 }); + schema.index({ updatedAt: 1 }) + schema.index({ createdAt: 1 }) } if (collection.indexes) { collection.indexes.forEach((index) => { - schema.index(index.fields, index.options); - }); + schema.index(index.fields, index.options) + }) } - schema.plugin(paginate, { useEstimatedCount: true }) - .plugin(getBuildQueryPlugin({ collectionSlug: collection.slug })); + schema + .plugin(paginate, { useEstimatedCount: true }) + .plugin(getBuildQueryPlugin({ collectionSlug: collection.slug })) - return schema; -}; + return schema +} -export default buildCollectionSchema; +export default buildCollectionSchema diff --git a/packages/db-mongodb/src/models/buildGlobalModel.ts b/packages/db-mongodb/src/models/buildGlobalModel.ts index 3576111d0..e3c6f8e0d 100644 --- a/packages/db-mongodb/src/models/buildGlobalModel.ts +++ b/packages/db-mongodb/src/models/buildGlobalModel.ts @@ -1,32 +1,34 @@ -import mongoose from 'mongoose'; -import { SanitizedConfig } from 'payload/dist/config/types'; -import buildSchema from './buildSchema'; -import getBuildQueryPlugin from '../queries/buildQuery'; -import type { GlobalModel } from '../types'; +import type { SanitizedConfig } from 'payload/config' + +import mongoose from 'mongoose' + +import type { GlobalModel } from '../types' + +import getBuildQueryPlugin from '../queries/buildQuery' +import buildSchema from './buildSchema' export const buildGlobalModel = (config: SanitizedConfig): GlobalModel | null => { if (config.globals && config.globals.length > 0) { - const globalsSchema = new mongoose.Schema({}, { discriminatorKey: 'globalType', timestamps: true, minimize: false }); + const globalsSchema = new mongoose.Schema( + {}, + { discriminatorKey: 'globalType', minimize: false, timestamps: true }, + ) - globalsSchema.plugin(getBuildQueryPlugin()); + globalsSchema.plugin(getBuildQueryPlugin()) - const Globals = mongoose.model('globals', globalsSchema, 'globals') as unknown as GlobalModel; + const Globals = mongoose.model('globals', globalsSchema, 'globals') as unknown as GlobalModel Object.values(config.globals).forEach((globalConfig) => { - const globalSchema = buildSchema( - config, - globalConfig.fields, - { - options: { - minimize: false, - }, + const globalSchema = buildSchema(config, globalConfig.fields, { + options: { + minimize: false, }, - ); - Globals.discriminator(globalConfig.slug, globalSchema); - }); + }) + Globals.discriminator(globalConfig.slug, globalSchema) + }) - return Globals; + return Globals } - return null; -}; + return null +} diff --git a/packages/db-mongodb/src/models/buildSchema.ts b/packages/db-mongodb/src/models/buildSchema.ts index 8e4827f61..619e399e0 100644 --- a/packages/db-mongodb/src/models/buildSchema.ts +++ b/packages/db-mongodb/src/models/buildSchema.ts @@ -2,9 +2,9 @@ /* eslint-disable class-methods-use-this */ /* eslint-disable @typescript-eslint/no-use-before-define */ /* eslint-disable no-use-before-define */ -import { IndexOptions, Schema, SchemaOptions, SchemaTypeOptions } from 'mongoose'; -import { SanitizedConfig, SanitizedLocalizationConfig } from 'payload/dist/config/types'; -import { +import type { IndexOptions, SchemaOptions, SchemaTypeOptions } from 'mongoose' +import type { SanitizedConfig, SanitizedLocalizationConfig } from 'payload/config' +import type { ArrayField, Block, BlockField, @@ -14,13 +14,8 @@ import { DateField, EmailField, Field, - FieldAffectingData, - fieldAffectsData, - fieldIsLocalized, - fieldIsPresentationalOnly, GroupField, JSONField, - NonPresentationalField, NumberField, PointField, RadioField, @@ -28,401 +23,480 @@ import { RichTextField, RowField, SelectField, - Tab, - tabHasName, TabsField, - TextareaField, TextField, - UnnamedTab, + TextareaField, UploadField, -} from 'payload/dist/fields/config/types'; +} from 'payload/types' +import type { FieldAffectingData, NonPresentationalField, Tab, UnnamedTab } from 'payload/types' + +import { Schema } from 'mongoose' +import { + fieldAffectsData, + fieldIsLocalized, + fieldIsPresentationalOnly, + tabHasName, +} from 'payload/types' export type BuildSchemaOptions = { - options?: SchemaOptions allowIDField?: boolean disableUnique?: boolean draftsEnabled?: boolean indexSortableFields?: boolean + options?: SchemaOptions } -type FieldSchemaGenerator = (field: Field, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions) => void; +type FieldSchemaGenerator = ( + field: Field, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, +) => void const formatBaseSchema = (field: FieldAffectingData, buildSchemaOptions: BuildSchemaOptions) => { - const { disableUnique, draftsEnabled, indexSortableFields } = buildSchemaOptions; + const { disableUnique, draftsEnabled, indexSortableFields } = buildSchemaOptions const schema: SchemaTypeOptions = { - unique: (!disableUnique && field.unique) || false, - required: false, index: field.index || (!disableUnique && field.unique) || indexSortableFields || false, - }; + required: false, + unique: (!disableUnique && field.unique) || false, + } - if ((schema.unique && (field.localized || draftsEnabled))) { - schema.sparse = true; + if (schema.unique && (field.localized || draftsEnabled)) { + schema.sparse = true } if (field.hidden) { - schema.hidden = true; + schema.hidden = true } - return schema; -}; + return schema +} -const localizeSchema = (entity: NonPresentationalField | Tab, schema, localization: false | SanitizedLocalizationConfig) => { +const localizeSchema = ( + entity: NonPresentationalField | Tab, + schema, + localization: SanitizedLocalizationConfig | false, +) => { if (fieldIsLocalized(entity) && localization && Array.isArray(localization.locales)) { return { - type: localization.localeCodes.reduce((localeSchema, locale) => ({ - ...localeSchema, - [locale]: schema, - }), { - _id: false, - }), localized: true, - }; + type: localization.localeCodes.reduce( + (localeSchema, locale) => ({ + ...localeSchema, + [locale]: schema, + }), + { + _id: false, + }, + ), + } } - return schema; -}; + return schema +} -const buildSchema = (config: SanitizedConfig, configFields: Field[], buildSchemaOptions: BuildSchemaOptions = {}): Schema => { - const { allowIDField, options } = buildSchemaOptions; - let fields = {}; +const buildSchema = ( + config: SanitizedConfig, + configFields: Field[], + buildSchemaOptions: BuildSchemaOptions = {}, +): Schema => { + const { allowIDField, options } = buildSchemaOptions + let fields = {} - let schemaFields = configFields; + let schemaFields = configFields if (!allowIDField) { - const idField = schemaFields.find((field) => fieldAffectsData(field) && field.name === 'id'); + const idField = schemaFields.find((field) => fieldAffectsData(field) && field.name === 'id') if (idField) { fields = { _id: idField.type === 'number' ? Number : String, - }; - schemaFields = schemaFields.filter((field) => !(fieldAffectsData(field) && field.name === 'id')); + } + schemaFields = schemaFields.filter( + (field) => !(fieldAffectsData(field) && field.name === 'id'), + ) } } - const schema = new Schema(fields, options); + const schema = new Schema(fields, options) schemaFields.forEach((field) => { if (!fieldIsPresentationalOnly(field)) { - const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[field.type]; + const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[field.type] if (addFieldSchema) { - addFieldSchema(field, schema, config, buildSchemaOptions); + addFieldSchema(field, schema, config, buildSchemaOptions) } } - }); + }) - return schema; -}; + return schema +} const fieldToSchemaMap: Record = { - number: (field: NumberField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions): void => { - const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: field.hasMany ? [Number] : Number }; - - schema.add({ - [field.name]: localizeSchema(field, baseSchema, config.localization), - }); - }, - text: (field: TextField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions): void => { - const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: String }; - - schema.add({ - [field.name]: localizeSchema(field, baseSchema, config.localization), - }); - }, - email: (field: EmailField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions): void => { - const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: String }; - - schema.add({ - [field.name]: localizeSchema(field, baseSchema, config.localization), - }); - }, - textarea: (field: TextareaField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions): void => { - const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: String }; - - schema.add({ - [field.name]: localizeSchema(field, baseSchema, config.localization), - }); - }, - richText: (field: RichTextField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions): void => { - const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: Schema.Types.Mixed }; - - schema.add({ - [field.name]: localizeSchema(field, baseSchema, config.localization), - }); - }, - code: (field: CodeField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions): void => { - const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: String }; - - schema.add({ - [field.name]: localizeSchema(field, baseSchema, config.localization), - }); - }, - json: (field: JSONField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions): void => { - const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: Schema.Types.Mixed }; - - schema.add({ - [field.name]: localizeSchema(field, baseSchema, config.localization), - }); - }, - point: (field: PointField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions): void => { - const baseSchema: SchemaTypeOptions = { - type: { - type: String, - enum: ['Point'], - }, - coordinates: { - type: [Number], - required: false, - default: field.defaultValue || undefined, - }, - }; - if (buildSchemaOptions.disableUnique && field.unique && field.localized) { - baseSchema.coordinates.sparse = true; + array: ( + field: ArrayField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ) => { + const baseSchema = { + ...formatBaseSchema(field, buildSchemaOptions), + default: undefined, + type: [ + buildSchema(config, field.fields, { + allowIDField: true, + disableUnique: buildSchemaOptions.disableUnique, + draftsEnabled: buildSchemaOptions.draftsEnabled, + options: { + _id: false, + id: false, + minimize: false, + }, + }), + ], } schema.add({ [field.name]: localizeSchema(field, baseSchema, config.localization), - }); + }) + }, + blocks: ( + field: BlockField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ): void => { + const fieldSchema = { + default: undefined, + type: [new Schema({}, { _id: false, discriminatorKey: 'blockType' })], + } + + schema.add({ + [field.name]: localizeSchema(field, fieldSchema, config.localization), + }) + + field.blocks.forEach((blockItem: Block) => { + const blockSchema = new Schema({}, { _id: false, id: false }) + + blockItem.fields.forEach((blockField) => { + const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[blockField.type] + if (addFieldSchema) { + addFieldSchema(blockField, blockSchema, config, buildSchemaOptions) + } + }) + + if (field.localized && config.localization) { + config.localization.localeCodes.forEach((localeCode) => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore Possible incorrect typing in mongoose types, this works + schema.path(`${field.name}.${localeCode}`).discriminator(blockItem.slug, blockSchema) + }) + } else { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore Possible incorrect typing in mongoose types, this works + schema.path(field.name).discriminator(blockItem.slug, blockSchema) + } + }) + }, + checkbox: ( + field: CheckboxField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ): void => { + const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: Boolean } + + schema.add({ + [field.name]: localizeSchema(field, baseSchema, config.localization), + }) + }, + code: ( + field: CodeField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ): void => { + const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: String } + + schema.add({ + [field.name]: localizeSchema(field, baseSchema, config.localization), + }) + }, + collapsible: ( + field: CollapsibleField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ): void => { + field.fields.forEach((subField: Field) => { + const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type] + + if (addFieldSchema) { + addFieldSchema(subField, schema, config, buildSchemaOptions) + } + }) + }, + date: ( + field: DateField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ): void => { + const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: Date } + + schema.add({ + [field.name]: localizeSchema(field, baseSchema, config.localization), + }) + }, + email: ( + field: EmailField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ): void => { + const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: String } + + schema.add({ + [field.name]: localizeSchema(field, baseSchema, config.localization), + }) + }, + group: ( + field: GroupField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ): void => { + const formattedBaseSchema = formatBaseSchema(field, buildSchemaOptions) + + // carry indexSortableFields through to versions if drafts enabled + const indexSortableFields = + buildSchemaOptions.indexSortableFields && + field.name === 'version' && + buildSchemaOptions.draftsEnabled + + const baseSchema = { + ...formattedBaseSchema, + type: buildSchema(config, field.fields, { + disableUnique: buildSchemaOptions.disableUnique, + draftsEnabled: buildSchemaOptions.draftsEnabled, + indexSortableFields, + options: { + _id: false, + id: false, + minimize: false, + }, + }), + } + + schema.add({ + [field.name]: localizeSchema(field, baseSchema, config.localization), + }) + }, + json: ( + field: JSONField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ): void => { + const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: Schema.Types.Mixed } + + schema.add({ + [field.name]: localizeSchema(field, baseSchema, config.localization), + }) + }, + number: ( + field: NumberField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ): void => { + const baseSchema = { + ...formatBaseSchema(field, buildSchemaOptions), + type: field.hasMany ? [Number] : Number, + } + + schema.add({ + [field.name]: localizeSchema(field, baseSchema, config.localization), + }) + }, + point: ( + field: PointField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ): void => { + const baseSchema: SchemaTypeOptions = { + coordinates: { + default: field.defaultValue || undefined, + required: false, + type: [Number], + }, + type: { + enum: ['Point'], + type: String, + }, + } + if (buildSchemaOptions.disableUnique && field.unique && field.localized) { + baseSchema.coordinates.sparse = true + } + + schema.add({ + [field.name]: localizeSchema(field, baseSchema, config.localization), + }) if (field.index === true || field.index === undefined) { - const indexOptions: IndexOptions = {}; + const indexOptions: IndexOptions = {} if (!buildSchemaOptions.disableUnique && field.unique) { - indexOptions.sparse = true; - indexOptions.unique = true; + indexOptions.sparse = true + indexOptions.unique = true } if (field.localized && config.localization) { config.localization.locales.forEach((locale) => { - schema.index({ [`${field.name}.${locale}`]: '2dsphere' }, indexOptions); - }); + schema.index({ [`${field.name}.${locale}`]: '2dsphere' }, indexOptions) + }) } else { - schema.index({ [field.name]: '2dsphere' }, indexOptions); + schema.index({ [field.name]: '2dsphere' }, indexOptions) } } }, - radio: (field: RadioField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions): void => { + radio: ( + field: RadioField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ): void => { const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), - type: String, enum: field.options.map((option) => { - if (typeof option === 'object') return option.value; - return option; + if (typeof option === 'object') return option.value + return option }), - }; + type: String, + } schema.add({ [field.name]: localizeSchema(field, baseSchema, config.localization), - }); + }) }, - checkbox: (field: CheckboxField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions): void => { - const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: Boolean }; - - schema.add({ - [field.name]: localizeSchema(field, baseSchema, config.localization), - }); - }, - date: (field: DateField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions): void => { - const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: Date }; - - schema.add({ - [field.name]: localizeSchema(field, baseSchema, config.localization), - }); - }, - upload: (field: UploadField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions): void => { - const baseSchema = { - ...formatBaseSchema(field, buildSchemaOptions), - type: Schema.Types.Mixed, - ref: field.relationTo, - }; - - schema.add({ - [field.name]: localizeSchema(field, baseSchema, config.localization), - }); - }, - relationship: (field: RelationshipField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions) => { - const hasManyRelations = Array.isArray(field.relationTo); - let schemaToReturn: { [key: string]: any } = {}; + relationship: ( + field: RelationshipField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ) => { + const hasManyRelations = Array.isArray(field.relationTo) + let schemaToReturn: { [key: string]: any } = {} if (field.localized && config.localization) { schemaToReturn = { + localized: true, type: config.localization.localeCodes.reduce((locales, locale) => { - let localeSchema: { [key: string]: any } = {}; + let localeSchema: { [key: string]: any } = {} if (hasManyRelations) { localeSchema = { ...formatBaseSchema(field, buildSchemaOptions), - type: Schema.Types.Mixed, _id: false, + relationTo: { enum: field.relationTo, type: String }, + type: Schema.Types.Mixed, value: { - type: Schema.Types.Mixed, refPath: `${field.name}.${locale}.relationTo`, + type: Schema.Types.Mixed, }, - relationTo: { type: String, enum: field.relationTo }, - }; + } } else { localeSchema = { ...formatBaseSchema(field, buildSchemaOptions), - type: Schema.Types.Mixed, ref: field.relationTo, - }; + type: Schema.Types.Mixed, + } } return { ...locales, - [locale]: field.hasMany ? { type: [localeSchema], default: undefined } : localeSchema, - }; + [locale]: field.hasMany ? { default: undefined, type: [localeSchema] } : localeSchema, + } }, {}), - localized: true, - }; + } } else if (hasManyRelations) { schemaToReturn = { ...formatBaseSchema(field, buildSchemaOptions), - type: Schema.Types.Mixed, _id: false, + relationTo: { enum: field.relationTo, type: String }, + type: Schema.Types.Mixed, value: { - type: Schema.Types.Mixed, refPath: `${field.name}.relationTo`, + type: Schema.Types.Mixed, }, - relationTo: { type: String, enum: field.relationTo }, - }; + } if (field.hasMany) { schemaToReturn = { - type: [schemaToReturn], default: undefined, - }; + type: [schemaToReturn], + } } } else { schemaToReturn = { ...formatBaseSchema(field, buildSchemaOptions), - type: Schema.Types.Mixed, ref: field.relationTo, - }; + type: Schema.Types.Mixed, + } if (field.hasMany) { schemaToReturn = { - type: [schemaToReturn], default: undefined, - }; + type: [schemaToReturn], + } } } schema.add({ [field.name]: schemaToReturn, - }); + }) }, - row: (field: RowField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions): void => { - field.fields.forEach((subField: Field) => { - const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type]; - - if (addFieldSchema) { - addFieldSchema(subField, schema, config, buildSchemaOptions); - } - }); - }, - collapsible: (field: CollapsibleField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions): void => { - field.fields.forEach((subField: Field) => { - const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type]; - - if (addFieldSchema) { - addFieldSchema(subField, schema, config, buildSchemaOptions); - } - }); - }, - tabs: (field: TabsField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions): void => { - field.tabs.forEach((tab) => { - if (tabHasName(tab)) { - const baseSchema = { - type: buildSchema( - config, - tab.fields, - { - options: { - _id: false, - id: false, - minimize: false, - }, - disableUnique: buildSchemaOptions.disableUnique, - draftsEnabled: buildSchemaOptions.draftsEnabled, - }, - ), - }; - - schema.add({ - [tab.name]: localizeSchema(tab, baseSchema, config.localization), - }); - } else { - (tab as UnnamedTab).fields.forEach((subField: Field) => { - const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type]; - - if (addFieldSchema) { - addFieldSchema(subField, schema, config, buildSchemaOptions); - } - }); - } - }); - }, - array: (field: ArrayField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions) => { - const baseSchema = { - ...formatBaseSchema(field, buildSchemaOptions), - default: undefined, - type: [buildSchema( - config, - field.fields, - { - options: { - _id: false, - id: false, - minimize: false, - }, - allowIDField: true, - disableUnique: buildSchemaOptions.disableUnique, - draftsEnabled: buildSchemaOptions.draftsEnabled, - }, - )], - }; + richText: ( + field: RichTextField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ): void => { + const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: Schema.Types.Mixed } schema.add({ [field.name]: localizeSchema(field, baseSchema, config.localization), - }); + }) }, - group: (field: GroupField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions): void => { - const formattedBaseSchema = formatBaseSchema(field, buildSchemaOptions); + row: ( + field: RowField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ): void => { + field.fields.forEach((subField: Field) => { + const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type] - // carry indexSortableFields through to versions if drafts enabled - const indexSortableFields = (buildSchemaOptions.indexSortableFields && field.name === 'version' && buildSchemaOptions.draftsEnabled); - - const baseSchema = { - ...formattedBaseSchema, - type: buildSchema( - config, - field.fields, - { - options: { - _id: false, - id: false, - minimize: false, - }, - indexSortableFields, - disableUnique: buildSchemaOptions.disableUnique, - draftsEnabled: buildSchemaOptions.draftsEnabled, - }, - ), - }; - - schema.add({ - [field.name]: localizeSchema(field, baseSchema, config.localization), - }); + if (addFieldSchema) { + addFieldSchema(subField, schema, config, buildSchemaOptions) + } + }) }, - select: (field: SelectField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions): void => { + select: ( + field: SelectField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ): void => { const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), - type: String, enum: field.options.map((option) => { - if (typeof option === 'object') return option.value; - return option; + if (typeof option === 'object') return option.value + return option }), - }; + type: String, + } if (buildSchemaOptions.draftsEnabled || !field.required) { - baseSchema.enum.push(null); + baseSchema.enum.push(null) } schema.add({ @@ -431,41 +505,82 @@ const fieldToSchemaMap: Record = { field.hasMany ? [baseSchema] : baseSchema, config.localization, ), - }); + }) }, - blocks: (field: BlockField, schema: Schema, config: SanitizedConfig, buildSchemaOptions: BuildSchemaOptions): void => { - const fieldSchema = { - default: undefined, - type: [new Schema({}, { _id: false, discriminatorKey: 'blockType' })], - }; + tabs: ( + field: TabsField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ): void => { + field.tabs.forEach((tab) => { + if (tabHasName(tab)) { + const baseSchema = { + type: buildSchema(config, tab.fields, { + disableUnique: buildSchemaOptions.disableUnique, + draftsEnabled: buildSchemaOptions.draftsEnabled, + options: { + _id: false, + id: false, + minimize: false, + }, + }), + } + + schema.add({ + [tab.name]: localizeSchema(tab, baseSchema, config.localization), + }) + } else { + tab.fields.forEach((subField: Field) => { + const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[subField.type] + + if (addFieldSchema) { + addFieldSchema(subField, schema, config, buildSchemaOptions) + } + }) + } + }) + }, + text: ( + field: TextField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ): void => { + const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: String } schema.add({ - [field.name]: localizeSchema(field, fieldSchema, config.localization), - }); - - field.blocks.forEach((blockItem: Block) => { - const blockSchema = new Schema({}, { _id: false, id: false }); - - blockItem.fields.forEach((blockField) => { - const addFieldSchema: FieldSchemaGenerator = fieldToSchemaMap[blockField.type]; - if (addFieldSchema) { - addFieldSchema(blockField, blockSchema, config, buildSchemaOptions); - } - }); - - if (field.localized && config.localization) { - config.localization.localeCodes.forEach((localeCode) => { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore Possible incorrect typing in mongoose types, this works - schema.path(`${field.name}.${localeCode}`).discriminator(blockItem.slug, blockSchema); - }); - } else { - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore Possible incorrect typing in mongoose types, this works - schema.path(field.name).discriminator(blockItem.slug, blockSchema); - } - }); + [field.name]: localizeSchema(field, baseSchema, config.localization), + }) }, -}; + textarea: ( + field: TextareaField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ): void => { + const baseSchema = { ...formatBaseSchema(field, buildSchemaOptions), type: String } -export default buildSchema; + schema.add({ + [field.name]: localizeSchema(field, baseSchema, config.localization), + }) + }, + upload: ( + field: UploadField, + schema: Schema, + config: SanitizedConfig, + buildSchemaOptions: BuildSchemaOptions, + ): void => { + const baseSchema = { + ...formatBaseSchema(field, buildSchemaOptions), + ref: field.relationTo, + type: Schema.Types.Mixed, + } + + schema.add({ + [field.name]: localizeSchema(field, baseSchema, config.localization), + }) + }, +} + +export default buildSchema diff --git a/packages/db-mongodb/src/queries/buildAndOrConditions.ts b/packages/db-mongodb/src/queries/buildAndOrConditions.ts index 5a3b5effa..340f6ad3c 100644 --- a/packages/db-mongodb/src/queries/buildAndOrConditions.ts +++ b/packages/db-mongodb/src/queries/buildAndOrConditions.ts @@ -1,24 +1,24 @@ -import { Where } from 'payload/types'; -import { Field } from 'payload/dist/fields/config/types'; -import { Payload } from 'payload'; -import { parseParams } from './parseParams'; +import type { Payload } from 'payload' +import type { Field, Where } from 'payload/types' + +import { parseParams } from './parseParams' export async function buildAndOrConditions({ - where, collectionSlug, - globalSlug, - payload, - locale, fields, + globalSlug, + locale, + payload, + where, }: { - where: Where[], - collectionSlug?: string, - globalSlug?: string, - payload: Payload, - locale?: string, - fields: Field[], + collectionSlug?: string + fields: Field[] + globalSlug?: string + locale?: string + payload: Payload + where: Where[] }): Promise[]> { - const completedConditions = []; + const completedConditions = [] // Loop over all AND / OR operations and add them to the AND / OR query param // Operations should come through as an array // eslint-disable-next-line no-restricted-syntax @@ -27,17 +27,17 @@ export async function buildAndOrConditions({ if (typeof condition === 'object') { // eslint-disable-next-line no-await-in-loop const result = await parseParams({ - where: condition, collectionSlug, - globalSlug, - payload, - locale, fields, - }); + globalSlug, + locale, + payload, + where: condition, + }) if (Object.keys(result).length > 0) { - completedConditions.push(result); + completedConditions.push(result) } } } - return completedConditions; + return completedConditions } diff --git a/packages/db-mongodb/src/queries/buildQuery.ts b/packages/db-mongodb/src/queries/buildQuery.ts index 30c884d33..f250d5f88 100644 --- a/packages/db-mongodb/src/queries/buildQuery.ts +++ b/packages/db-mongodb/src/queries/buildQuery.ts @@ -1,8 +1,9 @@ -import { Where } from 'payload/dist/types'; -import { Field } from 'payload/dist/fields/config/types'; -import QueryError from 'payload/dist/errors/QueryError'; -import { Payload } from 'payload'; -import { parseParams } from './parseParams'; +import type { Payload } from 'payload' +import type { Field, Where } from 'payload/types' + +import { QueryError } from 'payload/errors' + +import { parseParams } from './parseParams' type GetBuildQueryPluginArgs = { collectionSlug?: string @@ -10,50 +11,52 @@ type GetBuildQueryPluginArgs = { } export type BuildQueryArgs = { - payload: Payload - locale?: string - where: Where globalSlug?: string + locale?: string + payload: Payload + where: Where } // This plugin asynchronously builds a list of Mongoose query constraints // which can then be used in subsequent Mongoose queries. -const getBuildQueryPlugin = ({ - collectionSlug, - versionsFields, -}: GetBuildQueryPluginArgs = {}) => { +const getBuildQueryPlugin = ({ collectionSlug, versionsFields }: GetBuildQueryPluginArgs = {}) => { return function buildQueryPlugin(schema) { - const modifiedSchema = schema; - async function buildQuery({ payload, locale, where, globalSlug }: BuildQueryArgs): Promise> { - let fields = versionsFields; + const modifiedSchema = schema + async function buildQuery({ + globalSlug, + locale, + payload, + where, + }: BuildQueryArgs): Promise> { + let fields = versionsFields if (!fields) { if (globalSlug) { - const globalConfig = payload.globals.config.find(({ slug }) => slug === globalSlug); - fields = globalConfig.fields; + const globalConfig = payload.globals.config.find(({ slug }) => slug === globalSlug) + fields = globalConfig.fields } if (collectionSlug) { - const collectionConfig = payload.collections[collectionSlug].config; - fields = collectionConfig.fields; + const collectionConfig = payload.collections[collectionSlug].config + fields = collectionConfig.fields } } - const errors = []; + const errors = [] const result = await parseParams({ collectionSlug, fields, globalSlug, - payload, locale, + payload, where, - }); + }) if (errors.length > 0) { - throw new QueryError(errors); + throw new QueryError(errors) } - return result; + return result } - modifiedSchema.statics.buildQuery = buildQuery; - }; -}; + modifiedSchema.statics.buildQuery = buildQuery + } +} -export default getBuildQueryPlugin; +export default getBuildQueryPlugin diff --git a/packages/db-mongodb/src/queries/buildSearchParams.ts b/packages/db-mongodb/src/queries/buildSearchParams.ts index 2ebeaed34..59df2b770 100644 --- a/packages/db-mongodb/src/queries/buildSearchParams.ts +++ b/packages/db-mongodb/src/queries/buildSearchParams.ts @@ -1,238 +1,247 @@ -import mongoose from 'mongoose'; -import objectID from 'bson-objectid'; -import { getLocalizedPaths } from 'payload/dist/database/getLocalizedPaths'; -import { Field, fieldAffectsData } from 'payload/dist/fields/config/types'; -import { PathToQuery } from 'payload/dist/database/queryValidation/types'; -import { validOperators } from 'payload/dist/types/constants'; -import { Payload } from 'payload'; -import { Operator } from 'payload/types'; -import { operatorMap } from './operatorMap'; -import { sanitizeQueryValue } from './sanitizeQueryValue'; -import { MongooseAdapter } from '..'; +import type { Payload } from 'payload' +import type { PathToQuery } from 'payload/database' +import type { Field } from 'payload/types' +import type { Operator } from 'payload/types' + +import objectID from 'bson-objectid' +import mongoose from 'mongoose' +import { getLocalizedPaths } from 'payload/database' +import { fieldAffectsData } from 'payload/types' +import { validOperators } from 'payload/types' + +import type { MongooseAdapter } from '..' + +import { operatorMap } from './operatorMap' +import { sanitizeQueryValue } from './sanitizeQueryValue' type SearchParam = { - path?: string, - value: unknown, + path?: string + value: unknown } const subQueryOptions = { - limit: 50, lean: true, -}; + limit: 50, +} /** * Convert the Payload key / value / operator into a MongoDB query */ export async function buildSearchParam({ - fields, - incomingPath, - val, - operator, collectionSlug, + fields, globalSlug, - payload, + incomingPath, locale, + operator, + payload, + val, }: { - fields: Field[], - incomingPath: string, - val: unknown, - operator: string - collectionSlug?: string, - globalSlug?: string, - payload: Payload, + collectionSlug?: string + fields: Field[] + globalSlug?: string + incomingPath: string locale?: string + operator: string + payload: Payload + val: unknown }): Promise { // Replace GraphQL nested field double underscore formatting - let sanitizedPath = incomingPath.replace(/__/gi, '.'); - if (sanitizedPath === 'id') sanitizedPath = '_id'; + let sanitizedPath = incomingPath.replace(/__/g, '.') + if (sanitizedPath === 'id') sanitizedPath = '_id' - let paths: PathToQuery[] = []; + let paths: PathToQuery[] = [] - let hasCustomID = false; + let hasCustomID = false if (sanitizedPath === '_id') { - const customIDfield = payload.collections[collectionSlug]?.config.fields.find((field) => fieldAffectsData(field) && field.name === 'id'); + const customIDfield = payload.collections[collectionSlug]?.config.fields.find( + (field) => fieldAffectsData(field) && field.name === 'id', + ) - let idFieldType: 'text' | 'number' = 'text'; + let idFieldType: 'number' | 'text' = 'text' if (customIDfield) { if (customIDfield?.type === 'text' || customIDfield?.type === 'number') { - idFieldType = customIDfield.type; + idFieldType = customIDfield.type } - hasCustomID = true; + hasCustomID = true } paths.push({ - path: '_id', + collectionSlug, + complete: true, field: { name: 'id', type: idFieldType, } as Field, - complete: true, - collectionSlug, - }); + path: '_id', + }) } else { paths = await getLocalizedPaths({ - payload, - locale, collectionSlug, - globalSlug, fields, + globalSlug, incomingPath: sanitizedPath, - }); + locale, + payload, + }) } - const [{ - path, - field, - }] = paths; + const [{ field, path }] = paths if (path) { const formattedValue = sanitizeQueryValue({ field, - path, - operator, - val, hasCustomID, - }); + operator, + path, + val, + }) // If there are multiple collections to search through, // Recursively build up a list of query constraints if (paths.length > 1) { // Remove top collection and reverse array // to work backwards from top - const pathsToQuery = paths.slice(1) - .reverse(); + const pathsToQuery = paths.slice(1).reverse() const initialRelationshipQuery = { value: {}, - } as SearchParam; + } as SearchParam - const relationshipQuery = await pathsToQuery.reduce(async (priorQuery, { - path: subPath, - collectionSlug: slug, - }, i) => { - const priorQueryResult = await priorQuery; + const relationshipQuery = await pathsToQuery.reduce( + async (priorQuery, { collectionSlug: slug, path: subPath }, i) => { + const priorQueryResult = await priorQuery - const SubModel = (payload.db as MongooseAdapter).collections[slug]; + const SubModel = (payload.db as MongooseAdapter).collections[slug] - // On the "deepest" collection, - // Search on the value passed through the query - if (i === 0) { - const subQuery = await SubModel.buildQuery({ - where: { - [subPath]: { - [operator]: val, + // On the "deepest" collection, + // Search on the value passed through the query + if (i === 0) { + const subQuery = await SubModel.buildQuery({ + locale, + payload, + where: { + [subPath]: { + [operator]: val, + }, }, - }, - payload, - locale, - }); + }) - const result = await SubModel.find(subQuery, subQueryOptions); + const result = await SubModel.find(subQuery, subQueryOptions) - const $in: unknown[] = []; + const $in: unknown[] = [] - result.forEach((doc) => { - const stringID = doc._id.toString(); - $in.push(stringID); + result.forEach((doc) => { + const stringID = doc._id.toString() + $in.push(stringID) - if (mongoose.Types.ObjectId.isValid(stringID)) { - $in.push(doc._id); + if (mongoose.Types.ObjectId.isValid(stringID)) { + $in.push(doc._id) + } + }) + + if (pathsToQuery.length === 1) { + return { + path, + value: { $in }, + } } - }); - if (pathsToQuery.length === 1) { + const nextSubPath = pathsToQuery[i + 1].path + + return { + value: { [nextSubPath]: { $in } }, + } + } + + const subQuery = priorQueryResult.value + const result = await SubModel.find(subQuery, subQueryOptions) + + const $in = result.map((doc) => doc._id.toString()) + + // If it is the last recursion + // then pass through the search param + if (i + 1 === pathsToQuery.length) { return { path, value: { $in }, - }; + } } - const nextSubPath = pathsToQuery[i + 1].path; - return { - value: { [nextSubPath]: { $in } }, - }; - } + value: { + _id: { $in }, + }, + } + }, + Promise.resolve(initialRelationshipQuery), + ) - const subQuery = priorQueryResult.value; - const result = await SubModel.find(subQuery, subQueryOptions); - - const $in = result.map((doc) => doc._id.toString()); - - // If it is the last recursion - // then pass through the search param - if (i + 1 === pathsToQuery.length) { - return { - path, - value: { $in }, - }; - } - - return { - value: { - _id: { $in }, - }, - }; - }, Promise.resolve(initialRelationshipQuery)); - - return relationshipQuery; + return relationshipQuery } if (operator && validOperators.includes(operator as Operator)) { - const operatorKey = operatorMap[operator]; + const operatorKey = operatorMap[operator] if (field.type === 'relationship' || field.type === 'upload') { - let hasNumberIDRelation; + let hasNumberIDRelation const result = { value: { - $or: [ - { [path]: { [operatorKey]: formattedValue } }, - ], + $or: [{ [path]: { [operatorKey]: formattedValue } }], }, - }; + } if (typeof formattedValue === 'string') { if (mongoose.Types.ObjectId.isValid(formattedValue)) { - result.value.$or.push({ [path]: { [operatorKey]: objectID(formattedValue) } }); + result.value.$or.push({ [path]: { [operatorKey]: objectID(formattedValue) } }) } else { - (Array.isArray(field.relationTo) ? field.relationTo : [field.relationTo]).forEach((relationTo) => { - const isRelatedToCustomNumberID = payload.collections[relationTo]?.config?.fields.find((relatedField) => { - return fieldAffectsData(relatedField) && relatedField.name === 'id' && relatedField.type === 'number'; - }); + ;(Array.isArray(field.relationTo) ? field.relationTo : [field.relationTo]).forEach( + (relationTo) => { + const isRelatedToCustomNumberID = payload.collections[ + relationTo + ]?.config?.fields.find((relatedField) => { + return ( + fieldAffectsData(relatedField) && + relatedField.name === 'id' && + relatedField.type === 'number' + ) + }) - if (isRelatedToCustomNumberID) { - if (isRelatedToCustomNumberID.type === 'number') hasNumberIDRelation = true; - } - }); + if (isRelatedToCustomNumberID) { + if (isRelatedToCustomNumberID.type === 'number') hasNumberIDRelation = true + } + }, + ) - if (hasNumberIDRelation) result.value.$or.push({ [path]: { [operatorKey]: parseFloat(formattedValue) } }); + if (hasNumberIDRelation) + result.value.$or.push({ [path]: { [operatorKey]: parseFloat(formattedValue) } }) } } if (result.value.$or.length > 1) { - return result; + return result } } if (operator === 'like' && typeof formattedValue === 'string') { - const words = formattedValue.split(' '); + const words = formattedValue.split(' ') const result = { value: { $and: words.map((word) => ({ [path]: { - $regex: word.replace(/[\\^$*+?\\.()|[\]{}]/g, '\\$&'), $options: 'i', + $regex: word.replace(/[\\^$*+?.()|[\]{}]/g, '\\$&'), }, })), }, - }; + } - return result; + return result } // Some operators like 'near' need to define a full query @@ -241,14 +250,14 @@ export async function buildSearchParam({ return { path, value: formattedValue, - }; + } } return { path, value: { [operatorKey]: formattedValue }, - }; + } } } - return undefined; + return undefined } diff --git a/packages/db-mongodb/src/queries/buildSortParam.ts b/packages/db-mongodb/src/queries/buildSortParam.ts index 6d1d54bd1..eeed37905 100644 --- a/packages/db-mongodb/src/queries/buildSortParam.ts +++ b/packages/db-mongodb/src/queries/buildSortParam.ts @@ -1,50 +1,57 @@ -import { PaginateOptions } from 'mongoose'; -import { SanitizedConfig } from 'payload/dist/config/types'; -import { Field } from 'payload/dist/fields/config/types'; -import { getLocalizedSortProperty } from './getLocalizedSortProperty'; +import type { PaginateOptions } from 'mongoose' +import type { SanitizedConfig } from 'payload/config' +import type { Field } from 'payload/types' + +import { getLocalizedSortProperty } from './getLocalizedSortProperty' type Args = { - sort: string config: SanitizedConfig fields: Field[] - timestamps: boolean locale: string + sort: string + timestamps: boolean } export type SortArgs = { - property: string direction: SortDirection + property: string }[] -export type SortDirection = 'asc' | 'desc'; +export type SortDirection = 'asc' | 'desc' -export const buildSortParam = ({ sort, config, fields, timestamps, locale }: Args): PaginateOptions['sort'] => { - let sortProperty: string; - let sortDirection: SortDirection = 'desc'; +export const buildSortParam = ({ + config, + fields, + locale, + sort, + timestamps, +}: Args): PaginateOptions['sort'] => { + let sortProperty: string + let sortDirection: SortDirection = 'desc' if (!sort) { if (timestamps) { - sortProperty = 'createdAt'; + sortProperty = 'createdAt' } else { - sortProperty = '_id'; + sortProperty = '_id' } } else if (sort.indexOf('-') === 0) { - sortProperty = sort.substring(1); + sortProperty = sort.substring(1) } else { - sortProperty = sort; - sortDirection = 'asc'; + sortProperty = sort + sortDirection = 'asc' } if (sortProperty === 'id') { - sortProperty = '_id'; + sortProperty = '_id' } else { sortProperty = getLocalizedSortProperty({ - segments: sortProperty.split('.'), config, fields, locale, - }); + segments: sortProperty.split('.'), + }) } - return { [sortProperty]: sortDirection }; -}; + return { [sortProperty]: sortDirection } +} diff --git a/packages/db-mongodb/src/queries/getLocalizedSortProperty.spec.ts b/packages/db-mongodb/src/queries/getLocalizedSortProperty.spec.ts index 2737ea47b..92c311b5d 100644 --- a/packages/db-mongodb/src/queries/getLocalizedSortProperty.spec.ts +++ b/packages/db-mongodb/src/queries/getLocalizedSortProperty.spec.ts @@ -1,12 +1,12 @@ -import { sanitizeConfig } from 'payload/dist/config/sanitize'; -import { Config } from 'payload/dist/config/types'; -import { getLocalizedSortProperty } from './getLocalizedSortProperty'; +import { sanitizeConfig } from 'payload/config' +import { Config } from 'payload/config' +import { getLocalizedSortProperty } from './getLocalizedSortProperty' const config = { localization: { locales: ['en', 'es'], }, -} as Config; +} as Config describe('get localized sort property', () => { it('passes through a non-localized sort property', () => { @@ -20,10 +20,10 @@ describe('get localized sort property', () => { }, ], locale: 'en', - }); + }) - expect(result).toStrictEqual('title'); - }); + expect(result).toStrictEqual('title') + }) it('properly localizes an un-localized sort property', () => { const result = getLocalizedSortProperty({ @@ -37,10 +37,10 @@ describe('get localized sort property', () => { }, ], locale: 'en', - }); + }) - expect(result).toStrictEqual('title.en'); - }); + expect(result).toStrictEqual('title.en') + }) it('keeps specifically asked-for localized sort properties', () => { const result = getLocalizedSortProperty({ @@ -54,10 +54,10 @@ describe('get localized sort property', () => { }, ], locale: 'en', - }); + }) - expect(result).toStrictEqual('title.es'); - }); + expect(result).toStrictEqual('title.es') + }) it('properly localizes nested sort properties', () => { const result = getLocalizedSortProperty({ @@ -77,10 +77,10 @@ describe('get localized sort property', () => { }, ], locale: 'en', - }); + }) - expect(result).toStrictEqual('group.title.en'); - }); + expect(result).toStrictEqual('group.title.en') + }) it('keeps requested locale with nested sort properties', () => { const result = getLocalizedSortProperty({ @@ -100,10 +100,10 @@ describe('get localized sort property', () => { }, ], locale: 'en', - }); + }) - expect(result).toStrictEqual('group.title.es'); - }); + expect(result).toStrictEqual('group.title.es') + }) it('properly localizes field within row', () => { const result = getLocalizedSortProperty({ @@ -122,10 +122,10 @@ describe('get localized sort property', () => { }, ], locale: 'en', - }); + }) - expect(result).toStrictEqual('title.en'); - }); + expect(result).toStrictEqual('title.en') + }) it('properly localizes field within named tab', () => { const result = getLocalizedSortProperty({ @@ -149,10 +149,10 @@ describe('get localized sort property', () => { }, ], locale: 'en', - }); + }) - expect(result).toStrictEqual('tab.title.en'); - }); + expect(result).toStrictEqual('tab.title.en') + }) it('properly localizes field within unnamed tab', () => { const result = getLocalizedSortProperty({ @@ -176,8 +176,8 @@ describe('get localized sort property', () => { }, ], locale: 'en', - }); + }) - expect(result).toStrictEqual('title.en'); - }); -}); + expect(result).toStrictEqual('title.en') + }) +}) diff --git a/packages/db-mongodb/src/queries/getLocalizedSortProperty.ts b/packages/db-mongodb/src/queries/getLocalizedSortProperty.ts index 8fdee83e5..915046fed 100644 --- a/packages/db-mongodb/src/queries/getLocalizedSortProperty.ts +++ b/packages/db-mongodb/src/queries/getLocalizedSortProperty.ts @@ -1,89 +1,103 @@ -import { SanitizedConfig } from 'payload/dist/config/types'; -import { Field, fieldAffectsData, fieldIsPresentationalOnly } from 'payload/dist/fields/config/types'; -import flattenTopLevelFields from 'payload/dist/utilities/flattenTopLevelFields'; +import type { SanitizedConfig } from 'payload/config' +import type { Field } from 'payload/types' + +import { fieldAffectsData, fieldIsPresentationalOnly } from 'payload/types' +import { flattenTopLevelFields } from 'payload/utilities' type Args = { - segments: string[] config: SanitizedConfig fields: Field[] locale: string result?: string + segments: string[] } export const getLocalizedSortProperty = ({ - segments: incomingSegments, config, fields: incomingFields, locale, result: incomingResult, + segments: incomingSegments, }: Args): string => { // If localization is not enabled, accept exactly // what is sent in if (!config.localization) { - return incomingSegments.join('.'); + return incomingSegments.join('.') } // Flatten incoming fields (row, etc) - const fields = flattenTopLevelFields(incomingFields); + const fields = flattenTopLevelFields(incomingFields) - const segments = [...incomingSegments]; + const segments = [...incomingSegments] // Retrieve first segment, and remove from segments - const firstSegment = segments.shift(); + const firstSegment = segments.shift() // Attempt to find a matched field - const matchedField = fields.find((field) => fieldAffectsData(field) && field.name === firstSegment); + const matchedField = fields.find( + (field) => fieldAffectsData(field) && field.name === firstSegment, + ) if (matchedField && !fieldIsPresentationalOnly(matchedField)) { - let nextFields: Field[]; - const remainingSegments = [...segments]; - let localizedSegment = matchedField.name; + let nextFields: Field[] + const remainingSegments = [...segments] + let localizedSegment = matchedField.name if (matchedField.localized) { // Check to see if next segment is a locale if (segments.length > 0) { - const nextSegmentIsLocale = config.localization.localeCodes.includes(remainingSegments[0]); + const nextSegmentIsLocale = config.localization.localeCodes.includes(remainingSegments[0]) // If next segment is locale, remove it from remaining segments // and use it to localize the current segment if (nextSegmentIsLocale) { - const nextSegment = remainingSegments.shift(); - localizedSegment = `${matchedField.name}.${nextSegment}`; + const nextSegment = remainingSegments.shift() + localizedSegment = `${matchedField.name}.${nextSegment}` } } else { // If no more segments, but field is localized, use default locale - localizedSegment = `${matchedField.name}.${locale}`; + localizedSegment = `${matchedField.name}.${locale}` } } // If there are subfields, pass them through - if (matchedField.type === 'tab' || matchedField.type === 'group' || matchedField.type === 'array') { - nextFields = matchedField.fields; + if ( + matchedField.type === 'tab' || + matchedField.type === 'group' || + matchedField.type === 'array' + ) { + nextFields = matchedField.fields } if (matchedField.type === 'blocks') { nextFields = matchedField.blocks.reduce((flattenedBlockFields, block) => { return [ ...flattenedBlockFields, - ...block.fields.filter((blockField) => (fieldAffectsData(blockField) && (blockField.name !== 'blockType' && blockField.name !== 'blockName')) || !fieldAffectsData(blockField)), - ]; - }, []); + ...block.fields.filter( + (blockField) => + (fieldAffectsData(blockField) && + blockField.name !== 'blockType' && + blockField.name !== 'blockName') || + !fieldAffectsData(blockField), + ), + ] + }, []) } - const result = incomingResult ? `${incomingResult}.${localizedSegment}` : localizedSegment; + const result = incomingResult ? `${incomingResult}.${localizedSegment}` : localizedSegment if (nextFields) { return getLocalizedSortProperty({ - segments: remainingSegments, config, fields: nextFields, locale, result, - }); + segments: remainingSegments, + }) } - return result; + return result } - return incomingSegments.join('.'); -}; + return incomingSegments.join('.') +} diff --git a/packages/db-mongodb/src/queries/operatorMap.ts b/packages/db-mongodb/src/queries/operatorMap.ts index 280defb35..e4352149d 100644 --- a/packages/db-mongodb/src/queries/operatorMap.ts +++ b/packages/db-mongodb/src/queries/operatorMap.ts @@ -1,15 +1,15 @@ export const operatorMap = { - greater_than_equal: '$gte', - less_than_equal: '$lte', - less_than: '$lt', - greater_than: '$gt', - in: '$in', all: '$all', - not_in: '$nin', - not_equals: '$ne', - exists: '$exists', equals: '$eq', - near: '$near', - within: '$geoWithin', + exists: '$exists', + greater_than: '$gt', + greater_than_equal: '$gte', + in: '$in', intersects: '$geoIntersects', -}; + less_than: '$lt', + less_than_equal: '$lte', + near: '$near', + not_equals: '$ne', + not_in: '$nin', + within: '$geoWithin', +} diff --git a/packages/db-mongodb/src/queries/parseParams.ts b/packages/db-mongodb/src/queries/parseParams.ts index 6f8bec55d..d65edb568 100644 --- a/packages/db-mongodb/src/queries/parseParams.ts +++ b/packages/db-mongodb/src/queries/parseParams.ts @@ -1,78 +1,80 @@ /* eslint-disable no-restricted-syntax */ /* eslint-disable no-await-in-loop */ -import { FilterQuery } from 'mongoose'; -import deepmerge from 'deepmerge'; -import { Operator, Where } from 'payload/types'; -import { combineMerge } from 'payload/dist/utilities/combineMerge'; -import { Field } from 'payload/dist/fields/config/types'; -import { validOperators } from 'payload/dist/types/constants'; -import { Payload } from 'payload'; -import { buildSearchParam } from './buildSearchParams'; -import { buildAndOrConditions } from './buildAndOrConditions'; +import type { FilterQuery } from 'mongoose' +import type { Payload } from 'payload' +import type { Operator, Where } from 'payload/types' +import type { Field } from 'payload/types' + +import deepmerge from 'deepmerge' +import { validOperators } from 'payload/types' +import { combineMerge } from 'payload/utilities' + +import { buildAndOrConditions } from './buildAndOrConditions' +import { buildSearchParam } from './buildSearchParams' export async function parseParams({ - where, collectionSlug, - globalSlug, - payload, - locale, fields, + globalSlug, + locale, + payload, + where, }: { - where: Where, - collectionSlug?: string, - globalSlug?: string, - payload: Payload, - locale: string, - fields: Field[], + collectionSlug?: string + fields: Field[] + globalSlug?: string + locale: string + payload: Payload + where: Where }): Promise> { - let result = {} as FilterQuery; + let result = {} as FilterQuery if (typeof where === 'object') { // We need to determine if the whereKey is an AND, OR, or a schema path for (const relationOrPath of Object.keys(where)) { - const condition = where[relationOrPath]; - let conditionOperator: '$and' | '$or'; + const condition = where[relationOrPath] + let conditionOperator: '$and' | '$or' if (relationOrPath.toLowerCase() === 'and') { - conditionOperator = '$and'; + conditionOperator = '$and' } else if (relationOrPath.toLowerCase() === 'or') { - conditionOperator = '$or'; + conditionOperator = '$or' } if (Array.isArray(condition)) { const builtConditions = await buildAndOrConditions({ collectionSlug, fields, globalSlug, - payload, locale, + payload, where: condition, - }); - if (builtConditions.length > 0) result[conditionOperator] = builtConditions; + }) + if (builtConditions.length > 0) result[conditionOperator] = builtConditions } else { // It's a path - and there can be multiple comparisons on a single path. // For example - title like 'test' and title not equal to 'tester' // So we need to loop on keys again here to handle each operator independently - const pathOperators = where[relationOrPath]; + const pathOperators = where[relationOrPath] if (typeof pathOperators === 'object') { for (const operator of Object.keys(pathOperators)) { if (validOperators.includes(operator as Operator)) { const searchParam = await buildSearchParam({ collectionSlug, - globalSlug, - payload, - locale, fields, + globalSlug, incomingPath: relationOrPath, - val: pathOperators[operator], + locale, operator, - }); + payload, + val: pathOperators[operator], + }) if (searchParam?.value && searchParam?.path) { result = { ...result, [searchParam.path]: searchParam.value, - }; + } } else if (typeof searchParam?.value === 'object') { - result = deepmerge(result, searchParam.value, { arrayMerge: combineMerge }); + result = deepmerge(result, searchParam.value, { arrayMerge: combineMerge }) } } } @@ -81,5 +83,5 @@ export async function parseParams({ } } - return result; + return result } diff --git a/packages/db-mongodb/src/queries/sanitizeQueryValue.ts b/packages/db-mongodb/src/queries/sanitizeQueryValue.ts index 65fecb102..1210c4b92 100644 --- a/packages/db-mongodb/src/queries/sanitizeQueryValue.ts +++ b/packages/db-mongodb/src/queries/sanitizeQueryValue.ts @@ -1,127 +1,132 @@ -import mongoose from 'mongoose'; -import { Field, TabAsField } from 'payload/dist/fields/config/types'; -import { createArrayFromCommaDelineated } from 'payload/dist/utilities/createArrayFromCommaDelineated'; +import type { Field, TabAsField } from 'payload/types' + +import mongoose from 'mongoose' + +import { createArrayFromCommaDelineated } from '../utilities/createArrayFromCommaDelineated' type SanitizeQueryValueArgs = { field: Field | TabAsField - path: string - operator: string, - val: any hasCustomID: boolean + operator: string + path: string + val: any } -export const sanitizeQueryValue = ({ field, path, operator, val, hasCustomID }: SanitizeQueryValueArgs): unknown => { - let formattedValue = val; +export const sanitizeQueryValue = ({ + field, + hasCustomID, + operator, + path, + val, +}: SanitizeQueryValueArgs): unknown => { + let formattedValue = val // Disregard invalid _ids if (path === '_id' && typeof val === 'string' && val.split(',').length === 1) { if (!hasCustomID) { - const isValid = mongoose.Types.ObjectId.isValid(val); + const isValid = mongoose.Types.ObjectId.isValid(val) if (!isValid) { - return undefined; + return undefined } } if (field.type === 'number') { - const parsedNumber = parseFloat(val); + const parsedNumber = parseFloat(val) if (Number.isNaN(parsedNumber)) { - return undefined; + return undefined } } } // Cast incoming values as proper searchable types if (field.type === 'checkbox' && typeof val === 'string') { - if (val.toLowerCase() === 'true') formattedValue = true; - if (val.toLowerCase() === 'false') formattedValue = false; + if (val.toLowerCase() === 'true') formattedValue = true + if (val.toLowerCase() === 'false') formattedValue = false } - if (['all', 'not_in', 'in'].includes(operator) && typeof formattedValue === 'string') { - formattedValue = createArrayFromCommaDelineated(formattedValue); + if (['all', 'in', 'not_in'].includes(operator) && typeof formattedValue === 'string') { + formattedValue = createArrayFromCommaDelineated(formattedValue) if (field.type === 'number') { - formattedValue = formattedValue.map((arrayVal) => parseFloat(arrayVal)); + formattedValue = formattedValue.map((arrayVal) => parseFloat(arrayVal)) } } if (field.type === 'number' && typeof formattedValue === 'string') { - formattedValue = Number(val); + formattedValue = Number(val) } if (field.type === 'date' && typeof val === 'string') { - formattedValue = new Date(val); + formattedValue = new Date(val) if (Number.isNaN(Date.parse(formattedValue))) { - return undefined; + return undefined } } - if (['relationship', 'upload'].includes(field.type)) { if (val === 'null') { - formattedValue = null; + formattedValue = null } if (operator === 'in' && Array.isArray(formattedValue)) { formattedValue = formattedValue.reduce((formattedValues, inVal) => { - const newValues = [inVal]; - if (mongoose.Types.ObjectId.isValid(inVal)) newValues.push(new mongoose.Types.ObjectId(inVal)); + const newValues = [inVal] + if (mongoose.Types.ObjectId.isValid(inVal)) + newValues.push(new mongoose.Types.ObjectId(inVal)) - const parsedNumber = parseFloat(inVal); - if (!Number.isNaN(parsedNumber)) newValues.push(parsedNumber); + const parsedNumber = parseFloat(inVal) + if (!Number.isNaN(parsedNumber)) newValues.push(parsedNumber) - return [ - ...formattedValues, - ...newValues, - ]; - }, []); + return [...formattedValues, ...newValues] + }, []) } } // Set up specific formatting necessary by operators if (operator === 'near') { - let lng; - let lat; - let maxDistance; - let minDistance; + let lng + let lat + let maxDistance + let minDistance if (Array.isArray(formattedValue)) { - [lng, lat, maxDistance, minDistance] = formattedValue; + ;[lng, lat, maxDistance, minDistance] = formattedValue } if (typeof formattedValue === 'string') { - [lng, lat, maxDistance, minDistance] = createArrayFromCommaDelineated(formattedValue); + ;[lng, lat, maxDistance, minDistance] = createArrayFromCommaDelineated(formattedValue) } if (lng == null || lat == null || (maxDistance == null && minDistance == null)) { - formattedValue = undefined; + formattedValue = undefined } else { formattedValue = { - $geometry: { type: 'Point', coordinates: [parseFloat(lng), parseFloat(lat)] }, - }; + $geometry: { coordinates: [parseFloat(lng), parseFloat(lat)], type: 'Point' }, + } - if (maxDistance) formattedValue.$maxDistance = parseFloat(maxDistance); - if (minDistance) formattedValue.$minDistance = parseFloat(minDistance); + if (maxDistance) formattedValue.$maxDistance = parseFloat(maxDistance) + if (minDistance) formattedValue.$minDistance = parseFloat(minDistance) } } if (operator === 'within' || operator === 'intersects') { formattedValue = { $geometry: formattedValue, - }; + } } if (path !== '_id' || (path === '_id' && hasCustomID && field.type === 'text')) { if (operator === 'contains') { - formattedValue = { $regex: formattedValue, $options: 'i' }; + formattedValue = { $options: 'i', $regex: formattedValue } } } if (operator === 'exists') { - formattedValue = (formattedValue === 'true' || formattedValue === true); + formattedValue = formattedValue === 'true' || formattedValue === true } - return formattedValue; -}; + return formattedValue +} diff --git a/packages/db-mongodb/src/queryDrafts.ts b/packages/db-mongodb/src/queryDrafts.ts index f0e0ba73f..4cf4fc844 100644 --- a/packages/db-mongodb/src/queryDrafts.ts +++ b/packages/db-mongodb/src/queryDrafts.ts @@ -1,46 +1,39 @@ -import type { PaginateOptions } from 'mongoose'; -import type { QueryDrafts } from 'payload/dist/database/types'; -import flattenWhereToOperators from 'payload/dist/database/flattenWhereToOperators'; -import { PayloadRequest } from 'payload/dist/express/types'; -import { combineQueries } from 'payload/dist/database/combineQueries'; -import sanitizeInternalFields from './utilities/sanitizeInternalFields'; -import type { MongooseAdapter } from '.'; -import { buildSortParam } from './queries/buildSortParam'; -import { withSession } from './withSession'; +import type { PaginateOptions } from 'mongoose' +import type { QueryDrafts } from 'payload/database' +import type { PayloadRequest } from 'payload/types' -export const queryDrafts: QueryDrafts = async function queryDrafts( +import { flattenWhereToOperators, combineQueries } from 'payload/database' + +import type { MongooseAdapter } from '.' + +import { buildSortParam } from './queries/buildSortParam' +import sanitizeInternalFields from './utilities/sanitizeInternalFields' +import { withSession } from './withSession' + +export const queryDrafts: QueryDrafts = async function queryDrafts( this: MongooseAdapter, - { - collection, - where, - page, - limit, - sort: sortArg, - locale, - pagination, - req = {} as PayloadRequest, - }, + { collection, limit, locale, page, pagination, req = {} as PayloadRequest, sort: sortArg, where }, ) { - const VersionModel = this.versions[collection]; - const collectionConfig = this.payload.collections[collection].config; - const options = withSession(this, req.transactionID); + const VersionModel = this.versions[collection] + const collectionConfig = this.payload.collections[collection].config + const options = withSession(this, req.transactionID) let hasNearConstraint; let sort; if (where) { - const constraints = flattenWhereToOperators(where); - hasNearConstraint = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near')); + const constraints = flattenWhereToOperators(where) + hasNearConstraint = constraints.some((prop) => Object.keys(prop).some((key) => key === 'near')) } if (!hasNearConstraint) { sort = buildSortParam({ - sort: sortArg || collectionConfig.defaultSort, - fields: collectionConfig.fields, - timestamps: true, config: this.payload.config, + fields: collectionConfig.fields, locale, - }); + sort: sortArg || collectionConfig.defaultSort, + timestamps: true, + }) } const combinedWhere = combineQueries({ latest: { equals: true } }, where); @@ -79,11 +72,11 @@ export const queryDrafts: QueryDrafts = async function queryDrafts( _id: doc.parent, id: doc.parent, ...doc.version, - updatedAt: doc.updatedAt, createdAt: doc.createdAt, - }; + updatedAt: doc.updatedAt, + } - return sanitizeInternalFields(doc); + return sanitizeInternalFields(doc) }), - }; -}; + } +} diff --git a/packages/db-mongodb/src/testCredentials.ts b/packages/db-mongodb/src/testCredentials.ts index 86a943821..ac966c89b 100644 --- a/packages/db-mongodb/src/testCredentials.ts +++ b/packages/db-mongodb/src/testCredentials.ts @@ -1,7 +1,7 @@ -export const email = 'test@test.com'; -export const password = 'test123'; +export const email = 'test@test.com' +export const password = 'test123' export const connection = { - url: 'mongodb://127.0.0.1', - port: 27018, name: 'payloadmemory', -}; + port: 27018, + url: 'mongodb://127.0.0.1', +} diff --git a/packages/db-mongodb/src/transactions/beginTransaction.ts b/packages/db-mongodb/src/transactions/beginTransaction.ts index 9767bfce2..9af96ea96 100644 --- a/packages/db-mongodb/src/transactions/beginTransaction.ts +++ b/packages/db-mongodb/src/transactions/beginTransaction.ts @@ -1,32 +1,36 @@ -import type { TransactionOptions } from 'mongodb'; -import { v4 as uuid } from 'uuid'; -import { BeginTransaction } from 'payload/dist/database/types'; -import { APIError } from 'payload/errors'; +// @ts-expect-error // TODO: Fix this import +import type { TransactionOptions } from 'mongodb' +import type { BeginTransaction } from 'payload/database' -let transactionsNotAvailable: boolean; +import { APIError } from 'payload/errors' +import { v4 as uuid } from 'uuid' + +let transactionsNotAvailable: boolean export const beginTransaction: BeginTransaction = async function beginTransaction( options: TransactionOptions = {}, ) { - let id = null; + let id = null if (!this.connection) { - throw new APIError('beginTransaction called while no connection to the database exists'); + throw new APIError('beginTransaction called while no connection to the database exists') } - if (transactionsNotAvailable) return id; + if (transactionsNotAvailable) return id if (!this.connection.get('replicaSet')) { - transactionsNotAvailable = true; - this.payload.logger.warn('Database transactions for MongoDB are only available when connecting to a replica set. Operations will continue without using transactions.'); + transactionsNotAvailable = true + this.payload.logger.warn( + 'Database transactions for MongoDB are only available when connecting to a replica set. Operations will continue without using transactions.', + ) } else { - id = uuid(); + id = uuid() if (!this.sessions[id]) { - this.sessions[id] = await this.connection.getClient().startSession(); + this.sessions[id] = await this.connection.getClient().startSession() } if (this.sessions[id].inTransaction()) { - this.payload.logger.warn('beginTransaction called while transaction already exists'); + this.payload.logger.warn('beginTransaction called while transaction already exists') } else { - await this.sessions[id].startTransaction(options); + await this.sessions[id].startTransaction(options) } } - return id; -}; + return id +} diff --git a/packages/db-mongodb/src/transactions/commitTransaction.ts b/packages/db-mongodb/src/transactions/commitTransaction.ts index 74a9ff5ea..43869c3d9 100644 --- a/packages/db-mongodb/src/transactions/commitTransaction.ts +++ b/packages/db-mongodb/src/transactions/commitTransaction.ts @@ -1,15 +1,14 @@ -import { CommitTransaction } from 'payload/dist/database/types'; - +import type { CommitTransaction } from 'payload/database' export const commitTransaction: CommitTransaction = async function commitTransaction(id) { if (!this.connection.get('replicaSet')) { - return; + return } if (!this.session[id]?.inTransaction()) { - this.payload.logger.warn('commitTransaction called when no transaction exists'); - return; + this.payload.logger.warn('commitTransaction called when no transaction exists') + return } - await this.session[id].commitTransaction(); - await this.session[id].endSession(); - delete this.session[id]; -}; + await this.session[id].commitTransaction() + await this.session[id].endSession() + delete this.session[id] +} diff --git a/packages/db-mongodb/src/transactions/rollbackTransaction.ts b/packages/db-mongodb/src/transactions/rollbackTransaction.ts index efcd94c04..ec30a865e 100644 --- a/packages/db-mongodb/src/transactions/rollbackTransaction.ts +++ b/packages/db-mongodb/src/transactions/rollbackTransaction.ts @@ -1,12 +1,13 @@ -import { RollbackTransaction } from 'payload/dist/database/types'; +import type { RollbackTransaction } from 'payload/database' - -export const rollbackTransaction: RollbackTransaction = async function rollbackTransaction(id = '') { +export const rollbackTransaction: RollbackTransaction = async function rollbackTransaction( + id = '', +) { if (!this.session[id]?.inTransaction()) { - this.payload.logger.warn('rollbackTransaction called when no transaction exists'); - return; + this.payload.logger.warn('rollbackTransaction called when no transaction exists') + return } - await this.session[id].abortTransaction(); - await this.session[id].endSession(); - delete this.session[id]; -}; + await this.session[id].abortTransaction() + await this.session[id].endSession() + delete this.session[id] +} diff --git a/packages/db-mongodb/src/types.ts b/packages/db-mongodb/src/types.ts index 02b09bbbc..66a06fa9c 100644 --- a/packages/db-mongodb/src/types.ts +++ b/packages/db-mongodb/src/types.ts @@ -1,23 +1,56 @@ -import type { AggregatePaginateModel, IndexDefinition, IndexOptions, Model, PaginateModel, SchemaOptions } from 'mongoose'; -import { SanitizedConfig } from 'payload/dist/config/types'; -import { ArrayField, BlockField, CheckboxField, CodeField, CollapsibleField, DateField, EmailField, Field, GroupField, JSONField, NumberField, PointField, RadioField, RelationshipField, RichTextField, RowField, SelectField, TabsField, TextField, TextareaField, UploadField } from 'payload/dist/fields/config/types'; -import type { BuildQueryArgs } from './queries/buildQuery'; +import type { + AggregatePaginateModel, + IndexDefinition, + IndexOptions, + Model, + PaginateModel, + SchemaOptions, +} from 'mongoose' +import type { SanitizedConfig } from 'payload/config' +import type { + ArrayField, + BlockField, + CheckboxField, + CodeField, + CollapsibleField, + DateField, + EmailField, + Field, + GroupField, + JSONField, + NumberField, + PointField, + RadioField, + RelationshipField, + RichTextField, + RowField, + SelectField, + TabsField, + TextField, + TextareaField, + UploadField, +} from 'payload/types' -export interface CollectionModel extends Model, PaginateModel, AggregatePaginateModel, PassportLocalModel { +import type { BuildQueryArgs } from './queries/buildQuery' + +export interface CollectionModel + extends Model, + PaginateModel, + AggregatePaginateModel, + PassportLocalModel { /** buildQuery is used to transform payload's where operator into what can be used by mongoose (e.g. id => _id) */ buildQuery: (args: BuildQueryArgs) => Promise> // TODO: Delete this } -type Register = (doc: T, password: string) => T; +type Register = (doc: T, password: string) => T interface PassportLocalModel { - register: Register authenticate: any + register: Register } - export interface AuthCollectionModel extends CollectionModel { - resetPasswordToken: string; - resetPasswordExpiration: Date; + resetPasswordExpiration: Date + resetPasswordToken: string } export type TypeOfIndex = { @@ -25,80 +58,82 @@ export type TypeOfIndex = { options?: IndexOptions } - export interface GlobalModel extends Model { buildQuery: (query: unknown, locale?: string) => Promise> } export type BuildSchema = (args: { - config: SanitizedConfig, - fields: Field[], - options: BuildSchemaOptions, + config: SanitizedConfig + fields: Field[] + options: BuildSchemaOptions }) => TSchema export type BuildSchemaOptions = { - options?: SchemaOptions allowIDField?: boolean disableUnique?: boolean draftsEnabled?: boolean indexSortableFields?: boolean + options?: SchemaOptions } export type FieldGenerator = { - field: TField, - schema: TSchema, - config: SanitizedConfig, - options: BuildSchemaOptions, + config: SanitizedConfig + field: TField + options: BuildSchemaOptions + schema: TSchema } /** * Field config types that need representation in the database */ -type FieldType = 'number' - | 'text' - | 'email' - | 'textarea' - | 'richText' +type FieldType = + | 'array' + | 'blocks' + | 'checkbox' | 'code' + | 'collapsible' + | 'date' + | 'email' + | 'group' | 'json' + | 'number' | 'point' | 'radio' - | 'checkbox' - | 'date' - | 'upload' | 'relationship' + | 'richText' | 'row' - | 'collapsible' - | 'tabs' - | 'array' - | 'group' | 'select' - | 'blocks' + | 'tabs' + | 'text' + | 'textarea' + | 'upload' -export type FieldGeneratorFunction = (args: FieldGenerator) => void +export type FieldGeneratorFunction = ( + args: FieldGenerator, +) => void /** * Object mapping types to a schema based on TSchema */ export type FieldToSchemaMap = { - number: FieldGeneratorFunction - text: FieldGeneratorFunction - email: FieldGeneratorFunction - textarea: FieldGeneratorFunction - richText: FieldGeneratorFunction + array: FieldGeneratorFunction + blocks: FieldGeneratorFunction + checkbox: FieldGeneratorFunction code: FieldGeneratorFunction + collapsible: FieldGeneratorFunction + date: FieldGeneratorFunction + email: FieldGeneratorFunction + group: FieldGeneratorFunction json: FieldGeneratorFunction + number: FieldGeneratorFunction point: FieldGeneratorFunction radio: FieldGeneratorFunction - checkbox: FieldGeneratorFunction - date: FieldGeneratorFunction - upload: FieldGeneratorFunction relationship: FieldGeneratorFunction + richText: FieldGeneratorFunction row: FieldGeneratorFunction - collapsible: FieldGeneratorFunction - tabs: FieldGeneratorFunction - array: FieldGeneratorFunction - group: FieldGeneratorFunction select: FieldGeneratorFunction - blocks: FieldGeneratorFunction + tabs: FieldGeneratorFunction + text: FieldGeneratorFunction + textarea: FieldGeneratorFunction + upload: FieldGeneratorFunction } diff --git a/packages/db-mongodb/src/updateGlobal.ts b/packages/db-mongodb/src/updateGlobal.ts index facbb8a21..f26af9152 100644 --- a/packages/db-mongodb/src/updateGlobal.ts +++ b/packages/db-mongodb/src/updateGlobal.ts @@ -1,32 +1,30 @@ -import type { UpdateGlobal } from 'payload/dist/database/types'; -import sanitizeInternalFields from './utilities/sanitizeInternalFields'; -import type { PayloadRequest } from 'payload/dist/express/types'; -import type { MongooseAdapter } from '.'; -import { withSession } from './withSession'; +import type { UpdateGlobal } from 'payload/database' +import type { PayloadRequest } from 'payload/types' + +import type { MongooseAdapter } from '.' + +import sanitizeInternalFields from './utilities/sanitizeInternalFields' +import { withSession } from './withSession' export const updateGlobal: UpdateGlobal = async function updateGlobal( this: MongooseAdapter, - { slug, data, req = {} as PayloadRequest }, + { data, req = {} as PayloadRequest, slug }, ) { - const Model = this.globals; + const Model = this.globals const options = { ...withSession(this, req.transactionID), - new: true, lean: true, - }; + new: true, + } - let result; - result = await Model.findOneAndUpdate( - { globalType: slug }, - data, - options, - ); + let result + result = await Model.findOneAndUpdate({ globalType: slug }, data, options) - result = JSON.parse(JSON.stringify(result)); + result = JSON.parse(JSON.stringify(result)) // custom id type reset - result.id = result._id; - result = sanitizeInternalFields(result); + result.id = result._id + result = sanitizeInternalFields(result) - return result; -}; + return result +} diff --git a/packages/db-mongodb/src/updateOne.ts b/packages/db-mongodb/src/updateOne.ts index 0bf533e49..b855f71b9 100644 --- a/packages/db-mongodb/src/updateOne.ts +++ b/packages/db-mongodb/src/updateOne.ts @@ -1,50 +1,53 @@ -import { ValidationError } from 'payload/errors'; -import type { PayloadRequest } from 'payload/types'; -import type { UpdateOne } from 'payload/dist/database/types'; -import i18nInit from 'payload/dist/translations/init'; -import sanitizeInternalFields from './utilities/sanitizeInternalFields'; -import type { MongooseAdapter } from '.'; -import { withSession } from './withSession'; +import type { UpdateOne } from 'payload/database' +import type { PayloadRequest } from 'payload/types' + +import { ValidationError } from 'payload/errors' +import { i18nInit } from 'payload/utilities' + +import type { MongooseAdapter } from '.' + +import sanitizeInternalFields from './utilities/sanitizeInternalFields' +import { withSession } from './withSession' export const updateOne: UpdateOne = async function updateOne( this: MongooseAdapter, - { collection, data, where: whereArg, id, locale, req = {} as PayloadRequest }, + { collection, data, id, locale, req = {} as PayloadRequest, where: whereArg }, ) { - const where = id ? { id: { equals: id } } : whereArg; - const Model = this.collections[collection]; + const where = id ? { id: { equals: id } } : whereArg + const Model = this.collections[collection] const options = { ...withSession(this, req.transactionID), - new: true, lean: true, - }; + new: true, + } const query = await Model.buildQuery({ - payload: this.payload, locale, + payload: this.payload, where, - }); + }) - let result; + let result try { - result = await Model.findOneAndUpdate(query, data, options); + result = await Model.findOneAndUpdate(query, data, options) } catch (error) { // Handle uniqueness error from MongoDB throw error.code === 11000 && error.keyValue ? new ValidationError( - [ - { - message: 'Value must be unique', - field: Object.keys(error.keyValue)[0], - }, - ], - req?.t ?? i18nInit(this.payload.config.i18n).t, - ) - : error; + [ + { + field: Object.keys(error.keyValue)[0], + message: 'Value must be unique', + }, + ], + req?.t ?? i18nInit(this.payload.config.i18n).t, + ) + : error } - result = JSON.parse(JSON.stringify(result)); - result.id = result._id; - result = sanitizeInternalFields(result); + result = JSON.parse(JSON.stringify(result)) + result.id = result._id + result = sanitizeInternalFields(result) - return result; -}; + return result +} diff --git a/packages/db-mongodb/src/updateVersion.ts b/packages/db-mongodb/src/updateVersion.ts index 9dae4d4c0..b24c6dd3e 100644 --- a/packages/db-mongodb/src/updateVersion.ts +++ b/packages/db-mongodb/src/updateVersion.ts @@ -1,35 +1,37 @@ -import type { UpdateVersion } from 'payload/dist/database/types'; -import type { PayloadRequest } from 'payload/dist/express/types'; -import type { MongooseAdapter } from '.'; -import { withSession } from './withSession'; +import type { UpdateVersion } from 'payload/database' +import type { PayloadRequest } from 'payload/types' + +import type { MongooseAdapter } from '.' + +import { withSession } from './withSession' export const updateVersion: UpdateVersion = async function updateVersion( this: MongooseAdapter, - { collectionSlug, where, locale, versionData, req = {} as PayloadRequest }, + { collectionSlug, locale, req = {} as PayloadRequest, versionData, where }, ) { - const VersionModel = this.versions[collectionSlug]; + const VersionModel = this.versions[collectionSlug] const options = { ...withSession(this, req.transactionID), - new: true, lean: true, - }; + new: true, + } const query = await VersionModel.buildQuery({ - payload: this.payload, locale, + payload: this.payload, where, - }); + }) - const doc = await VersionModel.findOneAndUpdate(query, versionData, options); + const doc = await VersionModel.findOneAndUpdate(query, versionData, options) - const result = JSON.parse(JSON.stringify(doc)); + const result = JSON.parse(JSON.stringify(doc)) - const verificationToken = doc._verificationToken; + const verificationToken = doc._verificationToken // custom id type reset - result.id = result._id; + result.id = result._id if (verificationToken) { - result._verificationToken = verificationToken; + result._verificationToken = verificationToken } - return result; -}; + return result +} diff --git a/packages/db-mongodb/src/utilities/sanitizeInternalFields.ts b/packages/db-mongodb/src/utilities/sanitizeInternalFields.ts index 66f3d8e47..6877cde86 100644 --- a/packages/db-mongodb/src/utilities/sanitizeInternalFields.ts +++ b/packages/db-mongodb/src/utilities/sanitizeInternalFields.ts @@ -1,21 +1,22 @@ -const internalFields = ['__v']; +const internalFields = ['__v'] + +const sanitizeInternalFields = >(incomingDoc: T): T => + Object.entries(incomingDoc).reduce((newDoc, [key, val]): T => { + if (key === '_id') { + return { + ...newDoc, + id: val, + } + } + + if (internalFields.indexOf(key) > -1) { + return newDoc + } -const sanitizeInternalFields = >(incomingDoc: T): T => Object.entries(incomingDoc).reduce((newDoc, [key, val]): T => { - if (key === '_id') { return { ...newDoc, - id: val, - }; - } + [key]: val, + } + }, {} as T) - if (internalFields.indexOf(key) > -1) { - return newDoc; - } - - return { - ...newDoc, - [key]: val, - }; -}, {} as T); - -export default sanitizeInternalFields; +export default sanitizeInternalFields diff --git a/packages/db-mongodb/src/webpack.ts b/packages/db-mongodb/src/webpack.ts index 82a02c195..e60d64609 100644 --- a/packages/db-mongodb/src/webpack.ts +++ b/packages/db-mongodb/src/webpack.ts @@ -1,15 +1,16 @@ -import path from 'path'; -import type { Webpack } from 'payload/dist/database/types'; +import type { Webpack } from 'payload/database' + +import path from 'path' export const webpack: Webpack = (config) => { return { ...config, resolve: { - ...config.resolve || {}, + ...(config.resolve || {}), alias: { - ...config.resolve?.alias || {}, + ...(config.resolve?.alias || {}), [path.resolve(__dirname, './index')]: path.resolve(__dirname, 'mock'), }, }, - }; -}; + } +} diff --git a/packages/db-mongodb/src/withSession.ts b/packages/db-mongodb/src/withSession.ts index 2c957961c..d7aff267f 100644 --- a/packages/db-mongodb/src/withSession.ts +++ b/packages/db-mongodb/src/withSession.ts @@ -1,10 +1,14 @@ -import type { ClientSession } from 'mongoose'; -import { MongooseAdapter } from './index'; +import type { ClientSession } from 'mongoose' + +import type { MongooseAdapter } from './index' /** * returns the session belonging to the transaction of the req.session if exists * @returns ClientSession */ -export function withSession(db: MongooseAdapter, transactionID?: string | number): { session: ClientSession } | object { - return db.sessions[transactionID] ? { session: db.sessions[transactionID] } : {}; +export function withSession( + db: MongooseAdapter, + transactionID?: number | string, +): { session: ClientSession } | object { + return db.sessions[transactionID] ? { session: db.sessions[transactionID] } : {} } diff --git a/packages/db-mongodb/tsconfig.json b/packages/db-mongodb/tsconfig.json index 09df301cd..3120f0840 100644 --- a/packages/db-mongodb/tsconfig.json +++ b/packages/db-mongodb/tsconfig.json @@ -1,11 +1,24 @@ { + "extends": "../../tsconfig.json", "compilerOptions": { - "declaration": true, /* Generates corresponding '.d.ts' file. */ - "module": "commonjs", /* Specify what module code is generated. */ - "rootDir": "./src", /* Specify the root folder within your source files. */ - "outDir": "./dist", /* Specify an output folder for all emitted files. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } + "composite": true, // Make sure typescript knows that this module depends on their references + "noEmit": false /* Do not emit outputs. */, + "emitDeclarationOnly": true, + "outDir": "./dist" /* Specify an output folder for all emitted files. */, + "rootDir": "./src" /* Specify the root folder within your source files. */ + }, + "exclude": [ + "dist", + "build", + "tests", + "test", + "node_modules", + ".eslintrc.js", + "src/**/*.spec.js", + "src/**/*.spec.jsx", + "src/**/*.spec.ts", + "src/**/*.spec.tsx" + ], + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.d.ts", "src/**/*.json"], + "references": [{ "path": "../payload" }] // db-mongodb depends on payload } diff --git a/packages/db-mongodb/yarn.lock b/packages/db-mongodb/yarn.lock deleted file mode 100644 index 148a85a5e..000000000 --- a/packages/db-mongodb/yarn.lock +++ /dev/null @@ -1,6872 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-crypto/crc32@3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz#07300eca214409c33e3ff769cd5697b57fdd38fa" - integrity sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/ie11-detection@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz#640ae66b4ec3395cee6a8e94ebcd9f80c24cd688" - integrity sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/sha256-browser@3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz#05f160138ab893f1c6ba5be57cfd108f05827766" - integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== - dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/sha256-js" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz#f06b84d550d25521e60d2a0e2a90139341e007c2" - integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== - dependencies: - "@aws-crypto/util" "^3.0.0" - "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" - -"@aws-crypto/supports-web-crypto@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz#5d1bf825afa8072af2717c3e455f35cda0103ec2" - integrity sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/util@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz#1c7ca90c29293f0883468ad48117937f0fe5bfb0" - integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-sdk/client-cognito-identity@3.379.1": - version "3.379.1" - resolved "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.379.1.tgz#a79d022c533ba1bb4d9f9e0ffcd7c2711d84415b" - integrity sha512-aONC8IyC54OMcdoRCqI+Fw4VIIlonWmFdLDyZPfGoqwYpe/Vqz7DPF7s/ohqiZBSpEt2SzZeKHEpmkBPR8fpkw== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.379.1" - "@aws-sdk/credential-provider-node" "3.379.1" - "@aws-sdk/middleware-host-header" "3.379.1" - "@aws-sdk/middleware-logger" "3.378.0" - "@aws-sdk/middleware-recursion-detection" "3.378.0" - "@aws-sdk/middleware-signing" "3.379.1" - "@aws-sdk/middleware-user-agent" "3.379.1" - "@aws-sdk/types" "3.378.0" - "@aws-sdk/util-endpoints" "3.378.0" - "@aws-sdk/util-user-agent-browser" "3.378.0" - "@aws-sdk/util-user-agent-node" "3.378.0" - "@smithy/config-resolver" "^2.0.1" - "@smithy/fetch-http-handler" "^2.0.1" - "@smithy/hash-node" "^2.0.1" - "@smithy/invalid-dependency" "^2.0.1" - "@smithy/middleware-content-length" "^2.0.1" - "@smithy/middleware-endpoint" "^2.0.1" - "@smithy/middleware-retry" "^2.0.1" - "@smithy/middleware-serde" "^2.0.1" - "@smithy/middleware-stack" "^2.0.0" - "@smithy/node-config-provider" "^2.0.1" - "@smithy/node-http-handler" "^2.0.1" - "@smithy/protocol-http" "^2.0.1" - "@smithy/smithy-client" "^2.0.1" - "@smithy/types" "^2.0.2" - "@smithy/url-parser" "^2.0.1" - "@smithy/util-base64" "^2.0.0" - "@smithy/util-body-length-browser" "^2.0.0" - "@smithy/util-body-length-node" "^2.0.0" - "@smithy/util-defaults-mode-browser" "^2.0.1" - "@smithy/util-defaults-mode-node" "^2.0.1" - "@smithy/util-retry" "^2.0.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.5.0" - -"@aws-sdk/client-sso-oidc@3.379.1": - version "3.379.1" - resolved "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.379.1.tgz#065dbf089c26dd25f9657f46fc07e6c4f7640aa4" - integrity sha512-B6hZ2ysPyvafCMf6gls1jHI/IUviVZ4+TURpNfUBqThg/hZ1IMxc4BLkXca6VlgzYR+bWU8GKiClS9fFH6mu0g== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/middleware-host-header" "3.379.1" - "@aws-sdk/middleware-logger" "3.378.0" - "@aws-sdk/middleware-recursion-detection" "3.378.0" - "@aws-sdk/middleware-user-agent" "3.379.1" - "@aws-sdk/types" "3.378.0" - "@aws-sdk/util-endpoints" "3.378.0" - "@aws-sdk/util-user-agent-browser" "3.378.0" - "@aws-sdk/util-user-agent-node" "3.378.0" - "@smithy/config-resolver" "^2.0.1" - "@smithy/fetch-http-handler" "^2.0.1" - "@smithy/hash-node" "^2.0.1" - "@smithy/invalid-dependency" "^2.0.1" - "@smithy/middleware-content-length" "^2.0.1" - "@smithy/middleware-endpoint" "^2.0.1" - "@smithy/middleware-retry" "^2.0.1" - "@smithy/middleware-serde" "^2.0.1" - "@smithy/middleware-stack" "^2.0.0" - "@smithy/node-config-provider" "^2.0.1" - "@smithy/node-http-handler" "^2.0.1" - "@smithy/protocol-http" "^2.0.1" - "@smithy/smithy-client" "^2.0.1" - "@smithy/types" "^2.0.2" - "@smithy/url-parser" "^2.0.1" - "@smithy/util-base64" "^2.0.0" - "@smithy/util-body-length-browser" "^2.0.0" - "@smithy/util-body-length-node" "^2.0.0" - "@smithy/util-defaults-mode-browser" "^2.0.1" - "@smithy/util-defaults-mode-node" "^2.0.1" - "@smithy/util-retry" "^2.0.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.5.0" - -"@aws-sdk/client-sso@3.379.1": - version "3.379.1" - resolved "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.379.1.tgz#8e177ce38773c7c97243a5532eb80cc02c20dc02" - integrity sha512-2N16TPnRcq+seNP8VY/Zq7kfnrUOrJMbVNpyDZWGe5Qglua3n8v/FzxmXFNI87MiSODq8IHtiXhggWhefCd+TA== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/middleware-host-header" "3.379.1" - "@aws-sdk/middleware-logger" "3.378.0" - "@aws-sdk/middleware-recursion-detection" "3.378.0" - "@aws-sdk/middleware-user-agent" "3.379.1" - "@aws-sdk/types" "3.378.0" - "@aws-sdk/util-endpoints" "3.378.0" - "@aws-sdk/util-user-agent-browser" "3.378.0" - "@aws-sdk/util-user-agent-node" "3.378.0" - "@smithy/config-resolver" "^2.0.1" - "@smithy/fetch-http-handler" "^2.0.1" - "@smithy/hash-node" "^2.0.1" - "@smithy/invalid-dependency" "^2.0.1" - "@smithy/middleware-content-length" "^2.0.1" - "@smithy/middleware-endpoint" "^2.0.1" - "@smithy/middleware-retry" "^2.0.1" - "@smithy/middleware-serde" "^2.0.1" - "@smithy/middleware-stack" "^2.0.0" - "@smithy/node-config-provider" "^2.0.1" - "@smithy/node-http-handler" "^2.0.1" - "@smithy/protocol-http" "^2.0.1" - "@smithy/smithy-client" "^2.0.1" - "@smithy/types" "^2.0.2" - "@smithy/url-parser" "^2.0.1" - "@smithy/util-base64" "^2.0.0" - "@smithy/util-body-length-browser" "^2.0.0" - "@smithy/util-body-length-node" "^2.0.0" - "@smithy/util-defaults-mode-browser" "^2.0.1" - "@smithy/util-defaults-mode-node" "^2.0.1" - "@smithy/util-retry" "^2.0.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.5.0" - -"@aws-sdk/client-sts@3.379.1": - version "3.379.1" - resolved "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.379.1.tgz#f18550006be741a41341cfa2e984c188145eb45f" - integrity sha512-gEnKuk9bYjThvmxCgOgCn1qa+rRX8IgIRE2+xhbWhlpDanozhkDq9aMB5moX4tBNYQEmi1LtGD+JOvOoZRnToQ== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/credential-provider-node" "3.379.1" - "@aws-sdk/middleware-host-header" "3.379.1" - "@aws-sdk/middleware-logger" "3.378.0" - "@aws-sdk/middleware-recursion-detection" "3.378.0" - "@aws-sdk/middleware-sdk-sts" "3.379.1" - "@aws-sdk/middleware-signing" "3.379.1" - "@aws-sdk/middleware-user-agent" "3.379.1" - "@aws-sdk/types" "3.378.0" - "@aws-sdk/util-endpoints" "3.378.0" - "@aws-sdk/util-user-agent-browser" "3.378.0" - "@aws-sdk/util-user-agent-node" "3.378.0" - "@smithy/config-resolver" "^2.0.1" - "@smithy/fetch-http-handler" "^2.0.1" - "@smithy/hash-node" "^2.0.1" - "@smithy/invalid-dependency" "^2.0.1" - "@smithy/middleware-content-length" "^2.0.1" - "@smithy/middleware-endpoint" "^2.0.1" - "@smithy/middleware-retry" "^2.0.1" - "@smithy/middleware-serde" "^2.0.1" - "@smithy/middleware-stack" "^2.0.0" - "@smithy/node-config-provider" "^2.0.1" - "@smithy/node-http-handler" "^2.0.1" - "@smithy/protocol-http" "^2.0.1" - "@smithy/smithy-client" "^2.0.1" - "@smithy/types" "^2.0.2" - "@smithy/url-parser" "^2.0.1" - "@smithy/util-base64" "^2.0.0" - "@smithy/util-body-length-browser" "^2.0.0" - "@smithy/util-body-length-node" "^2.0.0" - "@smithy/util-defaults-mode-browser" "^2.0.1" - "@smithy/util-defaults-mode-node" "^2.0.1" - "@smithy/util-retry" "^2.0.0" - "@smithy/util-utf8" "^2.0.0" - fast-xml-parser "4.2.5" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-cognito-identity@3.379.1": - version "3.379.1" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.379.1.tgz#ddcdc02a8bd46e5dfe5a8d4fe7bebc012c6f5cc7" - integrity sha512-29X4nxo+47TeENgCpaTeMaK66cn7Uv7Fo4HPvGoevtWljqMqlSSNwQgmvpvqkQWGNtG6Ma/7GXkPMBuoqpwC8g== - dependencies: - "@aws-sdk/client-cognito-identity" "3.379.1" - "@aws-sdk/types" "3.378.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-env@3.378.0": - version "3.378.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.378.0.tgz#a0f6291eff4e002c140599acede2433f58e4f4cb" - integrity sha512-B2OVdO9kBClDwGgWTBLAQwFV8qYTYGyVujg++1FZFSFMt8ORFdZ5fNpErvJtiSjYiOOQMzyBeSNhKyYNXCiJjQ== - dependencies: - "@aws-sdk/types" "3.378.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-ini@3.379.1": - version "3.379.1" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.379.1.tgz#912a0922be00deb2d77772f68bb41fad40269d61" - integrity sha512-YhEsJIskzCFwIIKiMN9GSHQkgWwj/b7rq0ofhsXsCRimFtdVkmMlB9veE6vtFAuXpX/WOGWdlWek1az0V22uuw== - dependencies: - "@aws-sdk/credential-provider-env" "3.378.0" - "@aws-sdk/credential-provider-process" "3.378.0" - "@aws-sdk/credential-provider-sso" "3.379.1" - "@aws-sdk/credential-provider-web-identity" "3.378.0" - "@aws-sdk/types" "3.378.0" - "@smithy/credential-provider-imds" "^2.0.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/shared-ini-file-loader" "^2.0.0" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-node@3.379.1": - version "3.379.1" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.379.1.tgz#687eecb7c2e378229e675c9df511cfada63b4d60" - integrity sha512-39Y4OHKn6a8lY8YJhSLLw08aZytWxfvSjM4ObIEnE6hjLl8gsL9vROKKITsh3q6iGQ1EDSWMWZL50aOh3LJUIg== - dependencies: - "@aws-sdk/credential-provider-env" "3.378.0" - "@aws-sdk/credential-provider-ini" "3.379.1" - "@aws-sdk/credential-provider-process" "3.378.0" - "@aws-sdk/credential-provider-sso" "3.379.1" - "@aws-sdk/credential-provider-web-identity" "3.378.0" - "@aws-sdk/types" "3.378.0" - "@smithy/credential-provider-imds" "^2.0.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/shared-ini-file-loader" "^2.0.0" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-process@3.378.0": - version "3.378.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.378.0.tgz#8fd594c9600f9e4b7121f3cf2cea13b4d37f09e5" - integrity sha512-KFTIy7u+wXj3eDua4rgS0tODzMnXtXhAm1RxzCW9FL5JLBBrd82ymCj1Dp72217Sw5Do6NjCnDTTNkCHZMA77w== - dependencies: - "@aws-sdk/types" "3.378.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/shared-ini-file-loader" "^2.0.0" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-sso@3.379.1": - version "3.379.1" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.379.1.tgz#522dfb8b7cca455d5b226072d2ee1ac9fb317cdc" - integrity sha512-PhGtu1+JbUntYP/5CSfazQhWsjUBiksEuhg9fLhYl5OAgZVjVygbgoNVUz/gM7gZJSEMsasTazkn7yZVzO/k7w== - dependencies: - "@aws-sdk/client-sso" "3.379.1" - "@aws-sdk/token-providers" "3.379.1" - "@aws-sdk/types" "3.378.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/shared-ini-file-loader" "^2.0.0" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-web-identity@3.378.0": - version "3.378.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.378.0.tgz#019db9f17bd9fb2fd9a4171fe3b443c9e049a70a" - integrity sha512-GWjydOszhc4xDF8xuPtBvboglXQr0gwCW1oHAvmLcOT38+Hd6qnKywnMSeoXYRPgoKfF9TkWQgW1jxplzCG0UA== - dependencies: - "@aws-sdk/types" "3.378.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/credential-providers@^3.186.0": - version "3.379.1" - resolved "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.379.1.tgz#9e3fa81addc28568e3a4931dfcd8ba6aaa7cc0a4" - integrity sha512-srPdRQmavvWAwtrlYqo5GaIhIH0bhMl0knzxIDUf81aBfitNKACWwnbML7TpL/dWSPH2b7ciOBWneK1o1GKNLg== - dependencies: - "@aws-sdk/client-cognito-identity" "3.379.1" - "@aws-sdk/client-sso" "3.379.1" - "@aws-sdk/client-sts" "3.379.1" - "@aws-sdk/credential-provider-cognito-identity" "3.379.1" - "@aws-sdk/credential-provider-env" "3.378.0" - "@aws-sdk/credential-provider-ini" "3.379.1" - "@aws-sdk/credential-provider-node" "3.379.1" - "@aws-sdk/credential-provider-process" "3.378.0" - "@aws-sdk/credential-provider-sso" "3.379.1" - "@aws-sdk/credential-provider-web-identity" "3.378.0" - "@aws-sdk/types" "3.378.0" - "@smithy/credential-provider-imds" "^2.0.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/middleware-host-header@3.379.1": - version "3.379.1" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.379.1.tgz#26d8af6100de4e03d201553360dfe16e10ae1aa5" - integrity sha512-LI4KpAFWNWVr2aH2vRVblr0Y8tvDz23lj8LOmbDmCrzd5M21nxuocI/8nEAQj55LiTIf9Zs+dHCdsyegnFXdrA== - dependencies: - "@aws-sdk/types" "3.378.0" - "@smithy/protocol-http" "^2.0.1" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/middleware-logger@3.378.0": - version "3.378.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.378.0.tgz#f27fe3a979f3ef49034a860aa2c38c8a16faa879" - integrity sha512-l1DyaDLm3KeBMNMuANI3scWh8Xvu248x+vw6Z7ExWOhGXFmQ1MW7YvASg/SdxWkhlF9HmkkTif1LdMB22x6QDA== - dependencies: - "@aws-sdk/types" "3.378.0" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/middleware-recursion-detection@3.378.0": - version "3.378.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.378.0.tgz#706f505f608a766d617fbdad20ca30a7abccb311" - integrity sha512-mUMfHAz0oGNIWiTZHTVJb+I515Hqs2zx1j36Le4MMiiaMkPW1SRUF1FIwGuc1wh6E8jB5q+XfEMriDjRi4TZRA== - dependencies: - "@aws-sdk/types" "3.378.0" - "@smithy/protocol-http" "^2.0.1" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/middleware-sdk-sts@3.379.1": - version "3.379.1" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.379.1.tgz#4238aa2fa4ad4b0f7e0f6bb08d7c131b7d6a2baa" - integrity sha512-SK3gSyT0XbLiY12+AjLFYL9YngxOXHnZF3Z33Cdd4a+AUYrVBV7JBEEGD1Nlwrcmko+3XgaKlmgUaR5s91MYvg== - dependencies: - "@aws-sdk/middleware-signing" "3.379.1" - "@aws-sdk/types" "3.378.0" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/middleware-signing@3.379.1": - version "3.379.1" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.379.1.tgz#ebb7912868076babec851f9f703862dae6583a89" - integrity sha512-kBk2ZUvR84EM4fICjr8K+Ykpf8SI1UzzPp2/UVYZ0X+4H/ZCjfSqohGRwHykMqeplne9qHSL7/rGJs1H3l3gPg== - dependencies: - "@aws-sdk/types" "3.378.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/protocol-http" "^2.0.1" - "@smithy/signature-v4" "^2.0.0" - "@smithy/types" "^2.0.2" - "@smithy/util-middleware" "^2.0.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-user-agent@3.379.1": - version "3.379.1" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.379.1.tgz#61ca273aa1f505f4d0b389fb72c3b0dbd1078aae" - integrity sha512-4zIGeAIuutcRieAvovs82uBNhJBHuxfxaAUqrKiw49xUBG7xeNVUl+DYPSpbALbEIy4ujfwWCBOOWVCt6dyUZg== - dependencies: - "@aws-sdk/types" "3.378.0" - "@aws-sdk/util-endpoints" "3.378.0" - "@smithy/protocol-http" "^2.0.1" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/token-providers@3.379.1": - version "3.379.1" - resolved "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.379.1.tgz#d85692017b357743eb729e05728fef000f3685ea" - integrity sha512-NlYPkArJ7A/txCrjqqkje+4hsv7pSOqm+Qdx3BUIOc7PRYrBVs/XwThxUkGceSntVXoNlO8g9DFL0NY53/wb8Q== - dependencies: - "@aws-sdk/client-sso-oidc" "3.379.1" - "@aws-sdk/types" "3.378.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/shared-ini-file-loader" "^2.0.0" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/types@3.378.0", "@aws-sdk/types@^3.222.0": - version "3.378.0" - resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.378.0.tgz#93a811ccdf15c81b1947f1cd67922c4690792189" - integrity sha512-qP0CvR/ItgktmN8YXpGQglzzR/6s0nrsQ4zIfx3HMwpsBTwuouYahcCtF1Vr82P4NFcoDA412EJahJ2pIqEd+w== - dependencies: - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/util-endpoints@3.378.0": - version "3.378.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.378.0.tgz#93eeac35656ee949ab42cbc1181dfcbdb1e3e95c" - integrity sha512-NU5C2l2xAXxpyB5nT0fIhahLPlJoJdzHWw4uC53KH9b4PrjHtgvgCN8beIsD3QxyfgeoM4A5J9Auo6WurfRnLw== - dependencies: - "@aws-sdk/types" "3.378.0" - tslib "^2.5.0" - -"@aws-sdk/util-locate-window@^3.0.0": - version "3.310.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz#b071baf050301adee89051032bd4139bba32cc40" - integrity sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/util-user-agent-browser@3.378.0": - version "3.378.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.378.0.tgz#e756215da5bd1654a308b4e5383ebdcfc938fb0a" - integrity sha512-FSCpagzftK1W+m7Ar6lpX7/Gr9y5P56nhFYz8U4EYQ4PkufS6czWX9YW+/FA5OYV0vlQ/SvPqMnzoHIPUNhZrQ== - dependencies: - "@aws-sdk/types" "3.378.0" - "@smithy/types" "^2.0.2" - bowser "^2.11.0" - tslib "^2.5.0" - -"@aws-sdk/util-user-agent-node@3.378.0": - version "3.378.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.378.0.tgz#7af728f1823e860853998166a2bda0f0044251ef" - integrity sha512-IdwVJV0E96MkJeFte4dlWqvB+oiqCiZ5lOlheY3W9NynTuuX0GGYNC8Y9yIsV8Oava1+ujpJq0ww6qXdYxmO4A== - dependencies: - "@aws-sdk/types" "3.378.0" - "@smithy/node-config-provider" "^2.0.1" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/util-utf8-browser@^3.0.0": - version "3.259.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz#3275a6f5eb334f96ca76635b961d3c50259fd9ff" - integrity sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw== - dependencies: - tslib "^2.3.1" - -"@babel/code-frame@^7.0.0": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3" - integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA== - dependencies: - "@babel/highlight" "^7.22.10" - chalk "^2.4.2" - -"@babel/helper-module-imports@^7.16.7": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" - integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" - integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== - -"@babel/highlight@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7" - integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ== - dependencies: - "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/runtime@^7.1.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.19.0", "@babel/runtime@^7.20.6", "@babel/runtime@^7.21.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682" - integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/types@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03" - integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - to-fast-properties "^2.0.0" - -"@bcherny/json-schema-ref-parser@9.0.9": - version "9.0.9" - resolved "https://registry.yarnpkg.com/@bcherny/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#09899d405bc708c0acac0066ae8db5b94d465ca4" - integrity sha512-vmEmnJCfpkLdas++9OYg6riIezTYqTHpqUTODJzHLzs5UnXujbOJW9VwcVCnyo1mVRt32FRr23iXBx/sX8YbeQ== - dependencies: - "@jsdevtools/ono" "^7.1.3" - "@types/json-schema" "^7.0.6" - call-me-maybe "^1.0.1" - js-yaml "^4.1.0" - -"@csstools/cascade-layer-name-parser@^1.0.3", "@csstools/cascade-layer-name-parser@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.4.tgz#3ff490b84660dc0592b4315029f22908f3de0577" - integrity sha512-zXMGsJetbLoXe+gjEES07MEGjL0Uy3hMxmnGtVBrRpVKr5KV9OgCB09zr/vLrsEtoVQTgJFewxaU8IYSAE4tjg== - -"@csstools/color-helpers@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-3.0.0.tgz#b64a9d86663b6d843b169f5da300f78c0242efc2" - integrity sha512-rBODd1rY01QcenD34QxbQxLc1g+Uh7z1X/uzTHNQzJUnFCT9/EZYI7KWq+j0YfWMXJsRJ8lVkqBcB0R/qLr+yg== - -"@csstools/css-calc@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-1.1.3.tgz#75e07eec075f1f3df0ce25575dab3d63da2bd680" - integrity sha512-7mJZ8gGRtSQfQKBQFi5N0Z+jzNC0q8bIkwojP1W0w+APzEqHu5wJoGVsvKxVnVklu9F8tW1PikbBRseYnAdv+g== - -"@csstools/css-color-parser@^1.2.2": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-1.2.3.tgz#0cd0f72c50894a623ae09f19e30bbfb298769f59" - integrity sha512-YaEnCoPTdhE4lPQFH3dU4IEk8S+yCnxS88wMv45JzlnMfZp57hpqA6qf2gX8uv7IJTJ/43u6pTQmhy7hCjlz7g== - dependencies: - "@csstools/color-helpers" "^3.0.0" - "@csstools/css-calc" "^1.1.3" - -"@csstools/css-parser-algorithms@^2.3.0", "@csstools/css-parser-algorithms@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz#ec4fc764ba45d2bb7ee2774667e056aa95003f3a" - integrity sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA== - -"@csstools/css-tokenizer@^2.1.1", "@csstools/css-tokenizer@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz#9d70e6dcbe94e44c7400a2929928db35c4de32b5" - integrity sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA== - -"@csstools/media-query-list-parser@^2.1.2", "@csstools/media-query-list-parser@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz#0017f99945f6c16dd81a7aacf6821770933c3a5c" - integrity sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw== - -"@csstools/postcss-cascade-layers@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.0.tgz#21f8556de640f9f9ccfb950c49a886280fe5497e" - integrity sha512-dVPVVqQG0FixjM9CG/+8eHTsCAxRKqmNh6H69IpruolPlnEF1611f2AoLK8TijTSAsqBSclKd4WHs1KUb/LdJw== - dependencies: - "@csstools/selector-specificity" "^3.0.0" - postcss-selector-parser "^6.0.13" - -"@csstools/postcss-color-function@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-3.0.1.tgz#2f688783f9e8b2496bd0df6edbfb47b8300f01af" - integrity sha512-+vrvCQeUifpMeyd42VQ3JPWGQ8cO19+TnGbtfq1SDSgZzRapCQO4aK9h/jhMOKPnxGzbA57oS0aHgP/12N9gSQ== - dependencies: - "@csstools/css-color-parser" "^1.2.2" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - -"@csstools/postcss-color-mix-function@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.1.tgz#51c5656bcbee9d02d00d10ddcdb0a55486573fd4" - integrity sha512-Z5cXkLiccKIVcUTe+fAfjUD7ZUv0j8rq3dSoBpM6I49dcw+50318eYrwUZa3nyb4xNx7ntNNUPmesAc87kPE2Q== - dependencies: - "@csstools/css-color-parser" "^1.2.2" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - -"@csstools/postcss-exponential-functions@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.0.tgz#2e558ad2856e0c737d9cb98a5d91cfe8d785c9f6" - integrity sha512-FPndJ/7oGlML7/4EhLi902wGOukO0Nn37PjwOQGc0BhhjQPy3np3By4d3M8s9Cfmp9EHEKgUHRN2DQ5HLT/hTw== - dependencies: - "@csstools/css-calc" "^1.1.3" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - -"@csstools/postcss-font-format-keywords@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-3.0.0.tgz#9ca3a3ca67122862addf8a1c0c61a6db02dea1cc" - integrity sha512-ntkGj+1uDa/u6lpjPxnkPcjJn7ChO/Kcy08YxctOZI7vwtrdYvFhmE476dq8bj1yna306+jQ9gzXIG/SWfOaRg== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-gradients-interpolation-method@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.1.tgz#abbe5ec9992b850c4330da2f1b57e73d2f5f5086" - integrity sha512-IHeFIcksjI8xKX7PWLzAyigM3UvJdZ4btejeNa7y/wXxqD5dyPPZuY55y8HGTrS6ETVTRqfIznoCPtTzIX7ygQ== - dependencies: - "@csstools/css-color-parser" "^1.2.2" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - -"@csstools/postcss-hwb-function@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.1.tgz#72f47fae09e0dc48be4bd94cab15e6e98cc6de00" - integrity sha512-FYe2K8EOYlL1BUm2HTXVBo6bWAj0xl4khOk6EFhQHy/C5p3rlr8OcetzQuwMeNQ3v25nB06QTgqUHoOUwoEqhA== - dependencies: - "@csstools/css-color-parser" "^1.2.2" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - -"@csstools/postcss-ic-unit@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.0.tgz#bbc55170d880daa3cc096ee160e8f2492a48e881" - integrity sha512-FH3+zfOfsgtX332IIkRDxiYLmgwyNk49tfltpC6dsZaO4RV2zWY6x9VMIC5cjvmjlDO7DIThpzqaqw2icT8RbQ== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-is-pseudo-class@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.0.tgz#954c489cf207a7cfeaf4d96d39fac50757dc48cf" - integrity sha512-0I6siRcDymG3RrkNTSvHDMxTQ6mDyYE8awkcaHNgtYacd43msl+4ZWDfQ1yZQ/viczVWjqJkLmPiRHSgxn5nZA== - dependencies: - "@csstools/selector-specificity" "^3.0.0" - postcss-selector-parser "^6.0.13" - -"@csstools/postcss-logical-float-and-clear@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-2.0.0.tgz#15e1b5d16dce01ad1e676167d0909e3958234eb5" - integrity sha512-Wki4vxsF6icRvRz8eF9bPpAvwaAt0RHwhVOyzfoFg52XiIMjb6jcbHkGxwpJXP4DVrnFEwpwmrz5aTRqOW82kg== - -"@csstools/postcss-logical-resize@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-resize/-/postcss-logical-resize-2.0.0.tgz#751bd5aab335c9973e346e3edacb2a0a16fa8296" - integrity sha512-lCQ1aX8c5+WI4t5EoYf3alTzJNNocMqTb+u1J9CINdDhFh1fjovqK+0aHalUHsNstZmzFPNzIkU4Mb3eM9U8SA== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-logical-viewport-units@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.1.tgz#2921034d11d60ea7340ebe795bb4fe60f32ebbae" - integrity sha512-R5s19SscS7CHoxvdYNMu2Y3WDwG4JjdhsejqjunDB1GqfzhtHSvL7b5XxCkUWqm2KRl35hI6kJ4HEaCDd/3BXg== - dependencies: - "@csstools/css-tokenizer" "^2.2.0" - -"@csstools/postcss-media-minmax@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.0.7.tgz#6701cf1141d28b5240de9bfae083c8a0af0daa00" - integrity sha512-5LGLdu8cJgRPmvkjUNqOPKIKeHbyQmoGKooB5Rh0mp5mLaNI9bl+IjFZ2keY0cztZYsriJsGf6Lu8R5XetuwoQ== - dependencies: - "@csstools/css-calc" "^1.1.3" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - "@csstools/media-query-list-parser" "^2.1.4" - -"@csstools/postcss-media-queries-aspect-ratio-number-values@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.2.tgz#8cb8865ad6311756b5de5179fb65b9c008406b69" - integrity sha512-kQJR6NvTRidsaRjCdHGjra2+fLoFiDQOm5B2aZrhmXqng/hweXjruboKzB326rxQO2L0m0T+gCKbZgyuncyhLg== - dependencies: - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - "@csstools/media-query-list-parser" "^2.1.4" - -"@csstools/postcss-nested-calc@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-3.0.0.tgz#b9069f5e1c2ea08de3840a5922e39af4e0ecf4b1" - integrity sha512-HsB66aDWAouOwD/GcfDTS0a7wCuVWaTpXcjl5VKP0XvFxDiU+r0T8FG7xgb6ovZNZ+qzvGIwRM+CLHhDgXrYgQ== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-normalize-display-values@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-3.0.0.tgz#de995eeafe217ac1854a7135b1db44c57487e9ea" - integrity sha512-6Nw55PRXEKEVqn3bzA8gRRPYxr5tf5PssvcE5DRA/nAxKgKtgNZMCHCSd1uxTCWeyLnkf6h5tYRSB0P1Vh/K/A== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-oklab-function@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.1.tgz#2e33ed1761ce78d59a9156f1201a52fda7c75899" - integrity sha512-3TIz+dCPlQPzz4yAEYXchUpfuU2gRYK4u1J+1xatNX85Isg4V+IbLyppblWLV4Vb6npFF8qsHN17rNuxOIy/6w== - dependencies: - "@csstools/css-color-parser" "^1.2.2" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - -"@csstools/postcss-progressive-custom-properties@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.0.tgz#bb86ae4bb7f2206b0cf6e9b8f0bfc191f67271d8" - integrity sha512-2/D3CCL9DN2xhuUTP8OKvKnaqJ1j4yZUxuGLsCUOQ16wnDAuMLKLkflOmZF5tsPh/02VPeXRmqIN+U595WAulw== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-relative-color-syntax@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.1.tgz#b7e928fdef9366e1060e2bf4d95cab605855446b" - integrity sha512-9B8br/7q0bjD1fV3yE22izjc7Oy5hDbDgwdFEz207cdJHYC9yQneJzP3H+/w3RgC7uyfEVhyyhkGRx5YAfJtmg== - dependencies: - "@csstools/css-color-parser" "^1.2.2" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - -"@csstools/postcss-scope-pseudo-class@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-3.0.0.tgz#23f32181b7de9a33e7c7c71f7620b78284955b82" - integrity sha512-GFNVsD97OuEcfHmcT0/DAZWAvTM/FFBDQndIOLawNc1Wq8YqpZwBdHa063Lq+Irk7azygTT+Iinyg3Lt76p7rg== - dependencies: - postcss-selector-parser "^6.0.13" - -"@csstools/postcss-stepped-value-functions@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.1.tgz#c337a8ae09bec13cdf6c95f63a58b407f6965557" - integrity sha512-y1sykToXorFE+5cjtp//xAMWEAEple0kcZn2QhzEFIZDDNvGOCp5JvvmmPGsC3eDlj6yQp70l9uXZNLnimEYfA== - dependencies: - "@csstools/css-calc" "^1.1.3" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - -"@csstools/postcss-text-decoration-shorthand@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.0.tgz#468800a47fcb4760df8c60bbf1ba7999f44b4dd4" - integrity sha512-BAa1MIMJmEZlJ+UkPrkyoz3DC7kLlIl2oDya5yXgvUrelpwxddgz8iMp69qBStdXwuMyfPx46oZcSNx8Z0T2eA== - dependencies: - "@csstools/color-helpers" "^3.0.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-trigonometric-functions@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.1.tgz#06148aa8624b69a6573adb40ed27d3d019875caa" - integrity sha512-hW+JPv0MPQfWC1KARgvJI6bisEUFAZWSvUNq/khGCupYV/h6Z9R2ZFz0Xc633LXBst0ezbXpy7NpnPurSx5Klw== - dependencies: - "@csstools/css-calc" "^1.1.3" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - -"@csstools/postcss-unset-value@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-3.0.0.tgz#6d2f08140b41d3e70d805ccd2baaf64a6f59fdac" - integrity sha512-P0JD1WHh3avVyKKRKjd0dZIjCEeaBer8t1BbwGMUDtSZaLhXlLNBqZ8KkqHzYWXOJgHleXAny2/sx8LYl6qhEA== - -"@csstools/selector-specificity@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz#798622546b63847e82389e473fd67f2707d82247" - integrity sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g== - -"@date-io/core@^2.17.0": - version "2.17.0" - resolved "https://registry.yarnpkg.com/@date-io/core/-/core-2.17.0.tgz#360a4d0641f069776ed22e457876e8a8a58c205e" - integrity sha512-+EQE8xZhRM/hsY0CDTVyayMDDY5ihc4MqXCrPxooKw19yAzUIC6uUqsZeaOFNL9YKTNxYKrJP5DFgE8o5xRCOw== - -"@date-io/date-fns@^2.16.0": - version "2.17.0" - resolved "https://registry.yarnpkg.com/@date-io/date-fns/-/date-fns-2.17.0.tgz#1d9d0a02e0137524331819c9576a4e8e19a6142b" - integrity sha512-L0hWZ/mTpy3Gx/xXJ5tq5CzHo0L7ry6KEO9/w/JWiFWFLZgiNVo3ex92gOl3zmzjHqY/3Ev+5sehAr8UnGLEng== - dependencies: - "@date-io/core" "^2.17.0" - -"@discoveryjs/json-ext@0.5.7", "@discoveryjs/json-ext@^0.5.0": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== - -"@dnd-kit/accessibility@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@dnd-kit/accessibility/-/accessibility-3.0.1.tgz#3ccbefdfca595b0a23a5dc57d3de96bc6935641c" - integrity sha512-HXRrwS9YUYQO9lFRc/49uO/VICbM+O+ZRpFDe9Pd1rwVv2PCNkRiTZRdxrDgng/UkvdC3Re9r2vwPpXXrWeFzg== - dependencies: - tslib "^2.0.0" - -"@dnd-kit/core@^6.0.7": - version "6.0.8" - resolved "https://registry.yarnpkg.com/@dnd-kit/core/-/core-6.0.8.tgz#040ae13fea9787ee078e5f0361f3b49b07f3f005" - integrity sha512-lYaoP8yHTQSLlZe6Rr9qogouGUz9oRUj4AHhDQGQzq/hqaJRpFo65X+JKsdHf8oUFBzx5A+SJPUvxAwTF2OabA== - dependencies: - "@dnd-kit/accessibility" "^3.0.0" - "@dnd-kit/utilities" "^3.2.1" - tslib "^2.0.0" - -"@dnd-kit/sortable@^7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@dnd-kit/sortable/-/sortable-7.0.2.tgz#791d550872457f3f3c843e00d159b640f982011c" - integrity sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA== - dependencies: - "@dnd-kit/utilities" "^3.2.0" - tslib "^2.0.0" - -"@dnd-kit/utilities@^3.2.0", "@dnd-kit/utilities@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@dnd-kit/utilities/-/utilities-3.2.1.tgz#53f9e2016fd2506ec49e404c289392cfff30332a" - integrity sha512-OOXqISfvBw/1REtkSK2N3Fi2EQiLMlWUlqnOK/UpOISqBZPWpE6TqL+jcPtMOkE8TqYGiURvRdPSI9hltNUjEA== - dependencies: - tslib "^2.0.0" - -"@emotion/babel-plugin@^11.11.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c" - integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/runtime" "^7.18.3" - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/serialize" "^1.1.2" - babel-plugin-macros "^3.1.0" - convert-source-map "^1.5.0" - escape-string-regexp "^4.0.0" - find-root "^1.1.0" - source-map "^0.5.7" - stylis "4.2.0" - -"@emotion/cache@^11.11.0", "@emotion/cache@^11.4.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" - integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== - dependencies: - "@emotion/memoize" "^0.8.1" - "@emotion/sheet" "^1.2.2" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - stylis "4.2.0" - -"@emotion/css@^11.10.5": - version "11.11.2" - resolved "https://registry.yarnpkg.com/@emotion/css/-/css-11.11.2.tgz#e5fa081d0c6e335352e1bc2b05953b61832dca5a" - integrity sha512-VJxe1ucoMYMS7DkiMdC2T7PWNbrEI0a39YRiyDvK2qq4lXwjRbVP/z4lpG+odCsRzadlR+1ywwrTzhdm5HNdew== - dependencies: - "@emotion/babel-plugin" "^11.11.0" - "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.2" - "@emotion/sheet" "^1.2.2" - "@emotion/utils" "^1.2.1" - -"@emotion/hash@^0.9.1": - version "0.9.1" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" - integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== - -"@emotion/memoize@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" - integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== - -"@emotion/react@^11.8.1": - version "11.11.1" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.1.tgz#b2c36afac95b184f73b08da8c214fdf861fa4157" - integrity sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.11.0" - "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.2" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - hoist-non-react-statics "^3.3.1" - -"@emotion/serialize@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.2.tgz#017a6e4c9b8a803bd576ff3d52a0ea6fa5a62b51" - integrity sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA== - dependencies: - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/unitless" "^0.8.1" - "@emotion/utils" "^1.2.1" - csstype "^3.0.2" - -"@emotion/sheet@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" - integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== - -"@emotion/unitless@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" - integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== - -"@emotion/use-insertion-effect-with-fallbacks@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963" - integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw== - -"@emotion/utils@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" - integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== - -"@emotion/weak-memoize@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" - integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== - -"@faceless-ui/modal@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@faceless-ui/modal/-/modal-2.0.1.tgz#8a47299442eff450c09432cfaef35c5471becad6" - integrity sha512-z1PaaLxwuX+1In4vhUxODZndGKdCY+WIqzvtnas3CaYGGCVJBSJ4jfv9UEEGZzcahmSy+71bEL89cUT6d36j1Q== - dependencies: - body-scroll-lock "^3.1.5" - focus-trap "^6.9.2" - qs "^6.9.1" - react-transition-group "^4.4.2" - -"@faceless-ui/scroll-info@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@faceless-ui/scroll-info/-/scroll-info-1.3.0.tgz#4d9f76afa4c004018697424f77f8bc362ccaae08" - integrity sha512-X+doJMzQqyVGpwV/YgXUAalNWepP2W8ThgZspKZLFG43zTYLVTU17BYCjjY+ggKuA3b0W3JyXZ2M8f247AdmHw== - -"@faceless-ui/window-info@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@faceless-ui/window-info/-/window-info-2.1.1.tgz#ed1474a60ab794295bca4c29e295b1e11a584d22" - integrity sha512-gMAgda7beR4CNpBIXjgRVn97ek0LG3PAj9lxmoYdg574IEzLFZAh3eAYtTaS2XLKgb4+IHhsuBzlGmHbeOo2Aw== - -"@floating-ui/core@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.4.1.tgz#0d633f4b76052668afb932492ac452f7ebe97f17" - integrity sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ== - dependencies: - "@floating-ui/utils" "^0.1.1" - -"@floating-ui/dom@^1.0.1": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.1.tgz#88b70defd002fe851f17b4a25efb2d3c04d7a8d7" - integrity sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw== - dependencies: - "@floating-ui/core" "^1.4.1" - "@floating-ui/utils" "^0.1.1" - -"@floating-ui/utils@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.1.tgz#1a5b1959a528e374e8037c4396c3e825d6cf4a83" - integrity sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw== - -"@hapi/hoek@^9.0.0": - version "9.3.0" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" - integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== - -"@hapi/topo@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" - integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.0": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jsdevtools/ono@^7.1.3": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" - integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== - -"@juggle/resize-observer@^3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" - integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== - -"@monaco-editor/loader@^1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.3.3.tgz#7f1742bd3cc21c0362a46a4056317f6e5215cfca" - integrity sha512-6KKF4CTzcJiS8BJwtxtfyYt9shBiEv32ateQ9T4UVogwn4HM/uPo9iJd2Dmbkpz8CM6Y0PDUpjnZzCwC+eYo2Q== - dependencies: - state-local "^1.0.6" - -"@monaco-editor/react@^4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.5.1.tgz#fbc76c692aee9a33b9ab24ae0c5f219b8f002fdb" - integrity sha512-NNDFdP+2HojtNhCkRfE6/D6ro6pBNihaOzMbGK84lNWzRu+CfBjwzGt4jmnqimLuqp5yE5viHS2vi+QOAnD5FQ== - dependencies: - "@monaco-editor/loader" "^1.3.3" - -"@polka/url@^1.0.0-next.20": - version "1.0.0-next.21" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" - integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== - -"@popperjs/core@^2.11.8": - version "2.11.8" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" - integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== - -"@sideway/address@^4.1.3": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" - integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@sideway/formula@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" - integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== - -"@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@smithy/abort-controller@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.1.tgz#ddb5dd8c37016e8fcf772bd9c80e900860d74ae6" - integrity sha512-0s7XjIbsTwZyUW9OwXQ8J6x1UiA1TNCh60Vaw56nHahL7kUZsLhmTlWiaxfLkFtO2Utkj8YewcpHTYpxaTzO+w== - dependencies: - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@smithy/config-resolver@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.1.tgz#ea7981f4716961889d1c7d16aaa956cf7dae2b79" - integrity sha512-l83Pm7hV+8CBQOCmBRopWDtF+CURUJol7NsuPYvimiDhkC2F8Ba9T1imSFE+pD1UIJ9jlsDPAnZfPJT5cjnuEw== - dependencies: - "@smithy/types" "^2.0.2" - "@smithy/util-config-provider" "^2.0.0" - "@smithy/util-middleware" "^2.0.0" - tslib "^2.5.0" - -"@smithy/credential-provider-imds@^2.0.0", "@smithy/credential-provider-imds@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.1.tgz#e034f3d8ee6ad178becb267886056233870661d0" - integrity sha512-8VxriuRINNEfVZjEFKBY75y9ZWAx73DZ5K/u+3LmB6r8WR2h3NaFxFKMlwlq0uzNdGhD1ouKBn9XWEGYHKiPLw== - dependencies: - "@smithy/node-config-provider" "^2.0.1" - "@smithy/property-provider" "^2.0.1" - "@smithy/types" "^2.0.2" - "@smithy/url-parser" "^2.0.1" - tslib "^2.5.0" - -"@smithy/eventstream-codec@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.1.tgz#b84e224db346066e817ca9ca23260798a1aa071e" - integrity sha512-/IiNB7gQM2y2ZC/GAWOWDa8+iXfhr1g9Xe5979cQEOdCWDISvrAiv18cn3OtIQUhbYOR3gm7QtCpkq1to2takQ== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@smithy/types" "^2.0.2" - "@smithy/util-hex-encoding" "^2.0.0" - tslib "^2.5.0" - -"@smithy/fetch-http-handler@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.0.1.tgz#5c8903897d3fd7ae3758ed7760d559d72d27e902" - integrity sha512-/SoU/ClazgcdOxgE4zA7RX8euiELwpsrKCSvulVQvu9zpmqJRyEJn8ZTWYFV17/eHOBdHTs9kqodhNhsNT+cUw== - dependencies: - "@smithy/protocol-http" "^2.0.1" - "@smithy/querystring-builder" "^2.0.1" - "@smithy/types" "^2.0.2" - "@smithy/util-base64" "^2.0.0" - tslib "^2.5.0" - -"@smithy/hash-node@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.1.tgz#458b74378cbfecf6dcd1ffc6b7ec7d29a4247efd" - integrity sha512-oTKYimQdF4psX54ZonpcIE+MXjMUWFxLCNosjPkJPFQ9whRX0K/PFX/+JZGRQh3zO9RlEOEUIbhy9NO+Wha6hw== - dependencies: - "@smithy/types" "^2.0.2" - "@smithy/util-buffer-from" "^2.0.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.5.0" - -"@smithy/invalid-dependency@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.1.tgz#bb49b297e2141ec2ba6e131e0946af0ba59509e2" - integrity sha512-2q/Eb0AE662zwyMV+z+TL7deBwcHCgaZZGc0RItamBE8kak3MzCi/EZCNoFWoBfxgQ4jfR12wm8KKsSXhJzJtQ== - dependencies: - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@smithy/is-array-buffer@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz#8fa9b8040651e7ba0b2f6106e636a91354ff7d34" - integrity sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug== - dependencies: - tslib "^2.5.0" - -"@smithy/middleware-content-length@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.1.tgz#86005cd4cb45eff5420730abe88e08d22c582d79" - integrity sha512-IZhRSk5GkVBcrKaqPXddBS2uKhaqwBgaSgbBb1OJyGsKe7SxRFbclWS0LqOR9fKUkDl+3lL8E2ffpo6EQg0igw== - dependencies: - "@smithy/protocol-http" "^2.0.1" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@smithy/middleware-endpoint@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.1.tgz#4e992dd2c9dedbff776150045904c5455df4eaf7" - integrity sha512-uz/KI1MBd9WHrrkVFZO4L4Wyv24raf0oR4EsOYEeG5jPJO5U+C7MZGLcMxX8gWERDn1sycBDqmGv8fjUMLxT6w== - dependencies: - "@smithy/middleware-serde" "^2.0.1" - "@smithy/types" "^2.0.2" - "@smithy/url-parser" "^2.0.1" - "@smithy/util-middleware" "^2.0.0" - tslib "^2.5.0" - -"@smithy/middleware-retry@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.1.tgz#d6c0aa9d117140a429951c8a1a92e05d9d0c218c" - integrity sha512-NKHF4i0gjSyjO6C0ZyjEpNqzGgIu7s8HOK6oT/1Jqws2Q1GynR1xV8XTUs1gKXeaNRzbzKQRewHHmfPwZjOtHA== - dependencies: - "@smithy/protocol-http" "^2.0.1" - "@smithy/service-error-classification" "^2.0.0" - "@smithy/types" "^2.0.2" - "@smithy/util-middleware" "^2.0.0" - "@smithy/util-retry" "^2.0.0" - tslib "^2.5.0" - uuid "^8.3.2" - -"@smithy/middleware-serde@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.1.tgz#daa38ebc5873f1f7d0430e7a75b7255b69c70016" - integrity sha512-uKxPaC6ItH9ZXdpdqNtf8sda7GcU4SPMp0tomq/5lUg9oiMa/Q7+kD35MUrpKaX3IVXVrwEtkjCU9dogZ/RAUA== - dependencies: - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@smithy/middleware-stack@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz#cd9f442c2788b1ef0ea6b32236d80c76b3c342e9" - integrity sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ== - dependencies: - tslib "^2.5.0" - -"@smithy/node-config-provider@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.1.tgz#5a17c2564dc9689d523408c9a6dea9ca1330c47f" - integrity sha512-Zoel4CPkKRTQ2XxmozZUfqBYqjPKL53/SvTDhJHj+VBSiJy6MXRav1iDCyFPS92t40Uh+Yi+Km5Ch3hQ+c/zSA== - dependencies: - "@smithy/property-provider" "^2.0.1" - "@smithy/shared-ini-file-loader" "^2.0.1" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@smithy/node-http-handler@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.0.1.tgz#7a1b23e30c5125ec31062a8b5edbc9fdd96ac651" - integrity sha512-Zv3fxk3p9tsmPT2CKMsbuwbbxnq2gzLDIulxv+yI6aE+02WPYorObbbe9gh7SW3weadMODL1vTfOoJ9yFypDzg== - dependencies: - "@smithy/abort-controller" "^2.0.1" - "@smithy/protocol-http" "^2.0.1" - "@smithy/querystring-builder" "^2.0.1" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@smithy/property-provider@^2.0.0", "@smithy/property-provider@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.1.tgz#4c359f5063a9c664599f88be00e3f9b3e1021d4d" - integrity sha512-pmJRyY9SF6sutWIktIhe+bUdSQDxv/qZ4mYr3/u+u45riTPN7nmRxPo+e4sjWVoM0caKFjRSlj3tf5teRFy0Vg== - dependencies: - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@smithy/protocol-http@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.1.tgz#4257b9b8803f1e7638022a9cc6be8ea0abacac26" - integrity sha512-mrkMAp0wtaDEIkgRObWYxI1Kun1tm6Iu6rK+X4utb6Ah7Uc3Kk4VIWwK/rBHdYGReiLIrxFCB1rq4a2gyZnSgg== - dependencies: - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@smithy/querystring-builder@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.1.tgz#c8326d27e3796cac8b46f580bb067e83f50b4375" - integrity sha512-bp+93WFzx1FojVEIeFPtG0A1pKsFdCUcZvVdZdRlmNooOUrz9Mm9bneRd8hDwAQ37pxiZkCOxopSXXRQN10mYw== - dependencies: - "@smithy/types" "^2.0.2" - "@smithy/util-uri-escape" "^2.0.0" - tslib "^2.5.0" - -"@smithy/querystring-parser@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.1.tgz#915872aa7983218da3e87144a5b729dd6ae6f50f" - integrity sha512-h+e7k1z+IvI2sSbUBG9Aq46JsgLl4UqIUl6aigAlRBj+P6ocNXpM6Yn1vMBw5ijtXeZbYpd1YvCxwDgdw3jhmg== - dependencies: - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@smithy/service-error-classification@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz#bbce07c9c529d9333d40db881fd4a1795dd84892" - integrity sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw== - -"@smithy/shared-ini-file-loader@^2.0.0", "@smithy/shared-ini-file-loader@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.1.tgz#47278552cf9462e731077da2f66a32d21b775e15" - integrity sha512-a463YiZrPGvM+F336rIF8pLfQsHAdCRAn/BiI/EWzg5xLoxbC7GSxIgliDDXrOu0z8gT3nhVsif85eU6jyct3A== - dependencies: - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@smithy/signature-v4@^2.0.0": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.1.tgz#1f9e72930def3c25a3918ee7b562044fecbdaef4" - integrity sha512-jztv5Mirca42ilxmMDjzLdXcoAmRhZskGafGL49sRo5u7swEZcToEFrq6vtX5YMbSyTVrE9Teog5EFexY5Ff2Q== - dependencies: - "@smithy/eventstream-codec" "^2.0.1" - "@smithy/is-array-buffer" "^2.0.0" - "@smithy/types" "^2.0.2" - "@smithy/util-hex-encoding" "^2.0.0" - "@smithy/util-middleware" "^2.0.0" - "@smithy/util-uri-escape" "^2.0.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.5.0" - -"@smithy/smithy-client@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.0.1.tgz#34572ada6eccb62e6f0b38b6a9dc261e2cdf4d24" - integrity sha512-LHC5m6tYpEu1iNbONfvMbwtErboyTZJfEIPoD78Ei5MVr36vZQCaCla5mvo36+q/a2NAk2//fA5Rx3I1Kf7+lQ== - dependencies: - "@smithy/middleware-stack" "^2.0.0" - "@smithy/types" "^2.0.2" - "@smithy/util-stream" "^2.0.1" - tslib "^2.5.0" - -"@smithy/types@^2.0.2": - version "2.0.2" - resolved "https://registry.npmjs.org/@smithy/types/-/types-2.0.2.tgz#49d42724c909e845bfd80a2e195740614ce497f3" - integrity sha512-wcymEjIXQ9+NEfE5Yt5TInAqe1o4n+Nh+rh00AwoazppmUt8tdo6URhc5gkDcOYrcvlDVAZE7uG69nDpEGUKxw== - dependencies: - tslib "^2.5.0" - -"@smithy/url-parser@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.1.tgz#c0712fd7bde198644ffd57b202aa5d54bd437520" - integrity sha512-NpHVOAwddo+OyyIoujDL9zGL96piHWrTNXqltWmBvlUoWgt1HPyBuKs6oHjioyFnNZXUqveTOkEEq0U5w6Uv8A== - dependencies: - "@smithy/querystring-parser" "^2.0.1" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@smithy/util-base64@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz#1beeabfb155471d1d41c8d0603be1351f883c444" - integrity sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA== - dependencies: - "@smithy/util-buffer-from" "^2.0.0" - tslib "^2.5.0" - -"@smithy/util-body-length-browser@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz#5447853003b4c73da3bc5f3c5e82c21d592d1650" - integrity sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg== - dependencies: - tslib "^2.5.0" - -"@smithy/util-body-length-node@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.0.0.tgz#4870b71cb9ded0123d984898ce952ce56896bc53" - integrity sha512-ZV7Z/WHTMxHJe/xL/56qZwSUcl63/5aaPAGjkfynJm4poILjdD4GmFI+V+YWabh2WJIjwTKZ5PNsuvPQKt93Mg== - dependencies: - tslib "^2.5.0" - -"@smithy/util-buffer-from@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz#7eb75d72288b6b3001bc5f75b48b711513091deb" - integrity sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw== - dependencies: - "@smithy/is-array-buffer" "^2.0.0" - tslib "^2.5.0" - -"@smithy/util-config-provider@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz#4dd6a793605559d94267312fd06d0f58784b4c38" - integrity sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg== - dependencies: - tslib "^2.5.0" - -"@smithy/util-defaults-mode-browser@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.1.tgz#650805fc2f308dee8efcf812392a6578ebcc652d" - integrity sha512-w72Qwsb+IaEYEFtYICn0Do42eFju78hTaBzzJfT107lFOPdbjWjKnFutV+6GL/nZd5HWXY7ccAKka++C3NrjHw== - dependencies: - "@smithy/property-provider" "^2.0.1" - "@smithy/types" "^2.0.2" - bowser "^2.11.0" - tslib "^2.5.0" - -"@smithy/util-defaults-mode-node@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.1.tgz#3a8fc607735481878c7c4c739da358bd0bb9bcae" - integrity sha512-dNF45caelEBambo0SgkzQ0v76m4YM+aFKZNTtSafy7P5dVF8TbjZuR2UX1A5gJABD9XK6lzN+v/9Yfzj/EDgGg== - dependencies: - "@smithy/config-resolver" "^2.0.1" - "@smithy/credential-provider-imds" "^2.0.1" - "@smithy/node-config-provider" "^2.0.1" - "@smithy/property-provider" "^2.0.1" - "@smithy/types" "^2.0.2" - tslib "^2.5.0" - -"@smithy/util-hex-encoding@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz#0aa3515acd2b005c6d55675e377080a7c513b59e" - integrity sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA== - dependencies: - tslib "^2.5.0" - -"@smithy/util-middleware@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz#706681d4a1686544a2275f68266304233f372c99" - integrity sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA== - dependencies: - tslib "^2.5.0" - -"@smithy/util-retry@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz#7ac5d5f12383a9d9b2a43f9ff25f3866c8727c24" - integrity sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg== - dependencies: - "@smithy/service-error-classification" "^2.0.0" - tslib "^2.5.0" - -"@smithy/util-stream@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.1.tgz#cbe2af5704a6050b9075835a8e7251185901864b" - integrity sha512-2a0IOtwIKC46EEo7E7cxDN8u2jwOiYYJqcFKA6rd5rdXqKakHT2Gc+AqHWngr0IEHUfW92zX12wRQKwyoqZf2Q== - dependencies: - "@smithy/fetch-http-handler" "^2.0.1" - "@smithy/node-http-handler" "^2.0.1" - "@smithy/types" "^2.0.2" - "@smithy/util-base64" "^2.0.0" - "@smithy/util-buffer-from" "^2.0.0" - "@smithy/util-hex-encoding" "^2.0.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.5.0" - -"@smithy/util-uri-escape@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz#19955b1a0f517a87ae77ac729e0e411963dfda95" - integrity sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw== - dependencies: - tslib "^2.5.0" - -"@smithy/util-utf8@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz#b4da87566ea7757435e153799df9da717262ad42" - integrity sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ== - dependencies: - "@smithy/util-buffer-from" "^2.0.0" - tslib "^2.5.0" - -"@swc/core-darwin-arm64@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.78.tgz#352c39630f97376b9de367eb1955965c6d2cef64" - integrity sha512-596KRua/d5Gx1buHKKchSyHuwoIL4S1BRD/wCvYNLNZ3xOzcuBBmXOjrDVigKi1ztNDeS07p30RO5UyYur0XAA== - -"@swc/core-darwin-x64@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.78.tgz#0279831884f3275eea67c34a87fb503b35a6f6c7" - integrity sha512-w0RsD1onQAj0vuLAoOVi48HgnW6D6oBEIZP17l0HYejCDBZ+FRZLjml7wgNAWMqHcd2qNRqgtZ+v7aLza2JtBQ== - -"@swc/core-linux-arm-gnueabihf@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.78.tgz#4268cac6945329f47216ae57e8ad17bf0e5cc294" - integrity sha512-v1CpRn+H6fha1WIqmdRvJM40pFdjUHrGfhf4Ygci72nlAU41l5XimN8Iwkm8FgIwf2wnv0lLzedSM4IHvpq/yA== - -"@swc/core-linux-arm64-gnu@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.78.tgz#dcedcc8fb3addaca8660c8c712376850a04d5251" - integrity sha512-Sis17dz9joJRFVvR/gteOZSUNrrrioo81RQzani0Zr5ZZOfWLMTB9DA+0MVlfnVa2taYcsJHJZFoAv9JkLwbzg== - -"@swc/core-linux-arm64-musl@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.78.tgz#c09c29419879e819a1790994da614887714fa675" - integrity sha512-E5F8/qp+QupnfBnsP4vN1PKyCmAHYHDG1GMyPE/zLFOUYLgw+jK4C9rfyLBR0o2bWo1ay2WCIjusBZD9XHGOSA== - -"@swc/core-linux-x64-gnu@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.78.tgz#e295812b2c871a559fda2314c7063f965d7a3139" - integrity sha512-iDxa+RknnTQlyy+WfPor1FM6y44ERNI2E0xiUV6gV6uPwegCngi8LFC+E7IvP6+p+yXtAkesunAaiZ8nn0s+rw== - -"@swc/core-linux-x64-musl@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.78.tgz#e9742111dc62b857492559491cff277ce7f952f2" - integrity sha512-dWtIYUFL5sMTE2UKshkXTusHcK8+zAhhGzvqWq1wJS45pqTlrAbzpyqB780fle880x3A6DMitWmsAFARdNzpuQ== - -"@swc/core-win32-arm64-msvc@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.78.tgz#59d76fbd58e0efcc003cf2a08984e697d285be8d" - integrity sha512-CXFaGEc2M9Su3UoUMC8AnzKb9g+GwPxXfakLWZsjwS448h6jcreExq3nwtBNdVGzQ26xqeVLMFfb1l/oK99Hwg== - -"@swc/core-win32-ia32-msvc@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.78.tgz#5aac382bc8e1d3c74228f823033e19d04720cb28" - integrity sha512-FaH1jwWnJpWkdImpMoiZpMg9oy9UUyZwltzN7hFwjR48e3Li82cRFb+9PifIBHCUSBM+CrrsJXbHP213IMVAyw== - -"@swc/core-win32-x64-msvc@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.78.tgz#3ee7a3bd46503bf81a88343d545d7e1aca8d57de" - integrity sha512-oYxa+tPdhlx1aH14AIoF6kvVjo49tEOW0drNqoEaVHufvgH0y43QU2Jum3b2+xXztmMRtzK2CSN3GPOAXDKKKg== - -"@swc/core@^1.3.76": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.78.tgz#2c4bd7c397b85c021271043c76433e553446fe95" - integrity sha512-y6DQP571v7fbUUY7nz5G4lNIRGofuO48K5pGhD9VnuOCTuptfooCdi8wnigIrIhM/M4zQ53m/YCMDCbOtDgEww== - optionalDependencies: - "@swc/core-darwin-arm64" "1.3.78" - "@swc/core-darwin-x64" "1.3.78" - "@swc/core-linux-arm-gnueabihf" "1.3.78" - "@swc/core-linux-arm64-gnu" "1.3.78" - "@swc/core-linux-arm64-musl" "1.3.78" - "@swc/core-linux-x64-gnu" "1.3.78" - "@swc/core-linux-x64-musl" "1.3.78" - "@swc/core-win32-arm64-msvc" "1.3.78" - "@swc/core-win32-ia32-msvc" "1.3.78" - "@swc/core-win32-x64-msvc" "1.3.78" - -"@swc/register@^0.1.10": - version "0.1.10" - resolved "https://registry.yarnpkg.com/@swc/register/-/register-0.1.10.tgz#74a20b7559669e03479b05e9e5c6d1524d4d92a2" - integrity sha512-6STwH/q4dc3pitXLVkV7sP0Hiy+zBsU2wOF1aXpXR95pnH3RYHKIsDC+gvesfyB7jxNT9OOZgcqOp9RPxVTx9A== - dependencies: - lodash.clonedeep "^4.5.0" - pirates "^4.0.1" - source-map-support "^0.5.13" - -"@tokenizer/token@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" - integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== - -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - -"@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.44.2" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.2.tgz#0d21c505f98a89b8dd4d37fa162b09da6089199a" - integrity sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== - -"@types/glob@^7.1.3": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/html-minifier-terser@^6.0.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" - integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== - -"@types/is-hotkey@^0.1.1": - version "0.1.7" - resolved "https://registry.yarnpkg.com/@types/is-hotkey/-/is-hotkey-0.1.7.tgz#30ec6d4234895230b576728ef77e70a52962f3b3" - integrity sha512-yB5C7zcOM7idwYZZ1wKQ3pTfjA9BbvFqRWvKB46GFddxnJtHwi/b9y84ykQtxQPg5qhdpg4Q/kWU3EGoCTmLzQ== - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/json-schema@*", "@types/json-schema@^7.0.11", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== - -"@types/lodash@^4.14.149", "@types/lodash@^4.14.182": - version "4.14.197" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.197.tgz#e95c5ddcc814ec3e84c891910a01e0c8a378c54b" - integrity sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g== - -"@types/minimatch@*": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== - -"@types/node@*": - version "20.4.5" - resolved "https://registry.npmjs.org/@types/node/-/node-20.4.5.tgz#9dc0a5cb1ccce4f7a731660935ab70b9c00a5d69" - integrity sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/prettier@^2.6.1": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - -"@types/prop-types@*": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== - -"@types/react-transition-group@^4.4.0": - version "4.4.6" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.6.tgz#18187bcda5281f8e10dfc48f0943e2fdf4f75e2e" - integrity sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew== - dependencies: - "@types/react" "*" - -"@types/react@*": - version "18.2.20" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.20.tgz#1605557a83df5c8a2cc4eeb743b3dfc0eb6aaeb2" - integrity sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/scheduler@*": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" - integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== - -"@types/sharp@^0.31.1": - version "0.31.1" - resolved "https://registry.yarnpkg.com/@types/sharp/-/sharp-0.31.1.tgz#db768461455dbcf9ff11d69277fd70564483c4df" - integrity sha512-5nWwamN9ZFHXaYEincMSuza8nNfOof8nmO+mcI+Agx1uMUk4/pQnNIcix+9rLPXzKrm1pS34+6WRDbDV0Jn7ag== - dependencies: - "@types/node" "*" - -"@types/webidl-conversions@*": - version "7.0.0" - resolved "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz#2b8e60e33906459219aa587e9d1a612ae994cfe7" - integrity sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog== - -"@types/whatwg-url@^8.2.1": - version "8.2.2" - resolved "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz#749d5b3873e845897ada99be4448041d4cc39e63" - integrity sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA== - dependencies: - "@types/node" "*" - "@types/webidl-conversions" "*" - -"@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^17.0.8": - version "17.0.24" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" - integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== - dependencies: - "@types/yargs-parser" "*" - -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== - -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== - -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== - -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== - -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" - -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webpack-cli/configtest@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" - integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== - -"@webpack-cli/info@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" - integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== - dependencies: - envinfo "^7.7.3" - -"@webpack-cli/serve@^1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" - integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== - -acorn-walk@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv-keywords@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== - dependencies: - fast-deep-equal "^3.1.3" - -ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.6.3, ajv@^8.9.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-html-community@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -async-mutex@^0.3.2: - version "0.3.2" - resolved "https://registry.npmjs.org/async-mutex/-/async-mutex-0.3.2.tgz#1485eda5bda1b0ec7c8df1ac2e815757ad1831df" - integrity sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA== - dependencies: - tslib "^2.3.1" - -atomic-sleep@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" - integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== - -atomically@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/atomically/-/atomically-1.7.0.tgz#c07a0458432ea6dbc9a3506fffa424b48bccaafe" - integrity sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w== - -autoprefixer@^10.4.14: - version "10.4.15" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.15.tgz#a1230f4aeb3636b89120b34a1f513e2f6834d530" - integrity sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew== - dependencies: - browserslist "^4.21.10" - caniuse-lite "^1.0.30001520" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -babel-plugin-macros@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" - integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== - dependencies: - "@babel/runtime" "^7.12.5" - cosmiconfig "^7.0.0" - resolve "^1.19.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -body-parser@^1.20.1: - version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -body-scroll-lock@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-3.1.5.tgz#c1392d9217ed2c3e237fee1e910f6cdd80b7aaec" - integrity sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg== - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -bowser@^2.11.0: - version "2.11.0" - resolved "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" - integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.21.10, browserslist@^4.21.4: - version "4.21.10" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" - integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== - dependencies: - caniuse-lite "^1.0.30001517" - electron-to-chromium "^1.4.477" - node-releases "^2.0.13" - update-browserslist-db "^1.0.11" - -bson-objectid@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/bson-objectid/-/bson-objectid-2.0.4.tgz#339211572ef97dc98f2d68eaee7b99b7be59a089" - integrity sha512-vgnKAUzcDoa+AeyYwXCoHyF2q6u/8H46dxu5JN+4/TZeq/Dlinn0K6GvxsCLb3LHUJl0m/TLiEK31kUwtgocMQ== - -bson@^4.7.2: - version "4.7.2" - resolved "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz#320f4ad0eaf5312dd9b45dc369cc48945e2a5f2e" - integrity sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ== - dependencies: - buffer "^5.6.0" - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -call-me-maybe@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" - integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -camelcase@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001520: - version "1.0.30001522" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz#44b87a406c901269adcdb834713e23582dd71856" - integrity sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg== - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -charenc@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== - -"chokidar@>=3.0.0 <4.0.0": - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== - -classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" - integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== - -clean-css@^5.2.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" - integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== - dependencies: - source-map "~0.6.0" - -cli-color@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-2.0.3.tgz#73769ba969080629670f3f2ef69a4bf4e7cc1879" - integrity sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ== - dependencies: - d "^1.0.1" - es5-ext "^0.10.61" - es6-iterator "^2.0.3" - memoizee "^0.4.15" - timers-ext "^0.1.7" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clsx@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" - integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" - integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== - dependencies: - color-convert "^2.0.1" - color-string "^1.9.0" - -colord@^2.9.1: - version "2.9.3" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - -colorette@^2.0.10, colorette@^2.0.14, colorette@^2.0.7: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -commander@^2.20.0, commander@^2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^7.0.0, commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -compute-scroll-into-view@^1.0.20: - version "1.0.20" - resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz#1768b5522d1172754f5d0c9b02de3af6be506a43" - integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -conf@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/conf/-/conf-10.2.0.tgz#838e757be963f1a2386dfe048a98f8f69f7b55d6" - integrity sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg== - dependencies: - ajv "^8.6.3" - ajv-formats "^2.1.1" - atomically "^1.7.0" - debounce-fn "^4.0.0" - dot-prop "^6.0.1" - env-paths "^2.2.1" - json-schema-typed "^7.0.3" - onetime "^5.1.2" - pkg-up "^3.1.0" - semver "^7.3.5" - -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== - -console-table-printer@^2.11.2: - version "2.11.2" - resolved "https://registry.yarnpkg.com/console-table-printer/-/console-table-printer-2.11.2.tgz#549757033a7e3cde7e26e030038c9392ce600ee5" - integrity sha512-uuUHie0sfPP542TKGzPFal0W1wo1beuKAqIZdaavcONx8OoqdnJRKjkinbRTOta4FaCa1RcIL+7mMJWX3pQGVg== - dependencies: - simple-wcswidth "^1.0.1" - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-source-map@^1.5.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -cosmiconfig@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypt@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== - -css-blank-pseudo@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-6.0.0.tgz#2bc6f812a5f60296c04c55b1696bad4300dcdbcc" - integrity sha512-VbfLlOWO7sBHBTn6pwDQzc07Z0SDydgDBfNfCE0nvrehdBNv9RKsuupIRa/qal0+fBZhAALyQDPMKz5lnvcchw== - dependencies: - postcss-selector-parser "^6.0.13" - -css-declaration-sorter@^6.3.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71" - integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== - -css-has-pseudo@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-6.0.0.tgz#b8c8f39a19bc83c5be59fd251510a7e443c47968" - integrity sha512-X+r+JBuoO37FBOWVNhVJhxtSBUFHgHbrcc0CjFT28JEdOw1qaDwABv/uunyodUuSy2hMPe9j/HjssxSlvUmKjg== - dependencies: - "@csstools/selector-specificity" "^3.0.0" - postcss-selector-parser "^6.0.13" - postcss-value-parser "^4.2.0" - -css-loader@^5.2.7: - version "5.2.7" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.7.tgz#9b9f111edf6fb2be5dc62525644cbc9c232064ae" - integrity sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg== - dependencies: - icss-utils "^5.1.0" - loader-utils "^2.0.0" - postcss "^8.2.15" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^3.0.0" - semver "^7.3.5" - -css-minimizer-webpack-plugin@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz#33effe662edb1a0bf08ad633c32fa75d0f7ec565" - integrity sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - cssnano "^6.0.1" - jest-worker "^29.4.3" - postcss "^8.4.24" - schema-utils "^4.0.1" - serialize-javascript "^6.0.1" - -css-prefers-color-scheme@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-9.0.0.tgz#7e9b74062655ea15490e359cb456a3b9f4c93327" - integrity sha512-03QGAk/FXIRseDdLb7XAiu6gidQ0Nd8945xuM7VFVPpc6goJsG9uIO8xQjTxwbPdPIIV4o4AJoOJyt8gwDl67g== - -css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== - dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" - -css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== - dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" - -css-tree@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" - integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== - dependencies: - mdn-data "2.0.30" - source-map-js "^1.0.1" - -css-tree@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" - integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== - dependencies: - mdn-data "2.0.28" - source-map-js "^1.0.1" - -css-what@^6.0.1, css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssdb@^7.7.0: - version "7.7.1" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.7.1.tgz#759e333f516e47f26dd2c7be06147d4f4716356d" - integrity sha512-kM+Fs0BFyhJNeE6wbOrlnRsugRdL6vn7QcON0aBDZ7XRd7RI2pMlk+nxoHuTb4Et+aBobXgK0I+6NGLA0LLgTw== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssfilter@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" - integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== - -cssnano-preset-default@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz#2a93247140d214ddb9f46bc6a3562fa9177fe301" - integrity sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ== - dependencies: - css-declaration-sorter "^6.3.1" - cssnano-utils "^4.0.0" - postcss-calc "^9.0.0" - postcss-colormin "^6.0.0" - postcss-convert-values "^6.0.0" - postcss-discard-comments "^6.0.0" - postcss-discard-duplicates "^6.0.0" - postcss-discard-empty "^6.0.0" - postcss-discard-overridden "^6.0.0" - postcss-merge-longhand "^6.0.0" - postcss-merge-rules "^6.0.1" - postcss-minify-font-values "^6.0.0" - postcss-minify-gradients "^6.0.0" - postcss-minify-params "^6.0.0" - postcss-minify-selectors "^6.0.0" - postcss-normalize-charset "^6.0.0" - postcss-normalize-display-values "^6.0.0" - postcss-normalize-positions "^6.0.0" - postcss-normalize-repeat-style "^6.0.0" - postcss-normalize-string "^6.0.0" - postcss-normalize-timing-functions "^6.0.0" - postcss-normalize-unicode "^6.0.0" - postcss-normalize-url "^6.0.0" - postcss-normalize-whitespace "^6.0.0" - postcss-ordered-values "^6.0.0" - postcss-reduce-initial "^6.0.0" - postcss-reduce-transforms "^6.0.0" - postcss-svgo "^6.0.0" - postcss-unique-selectors "^6.0.0" - -cssnano-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.0.tgz#d1da885ec04003ab19505ff0e62e029708d36b08" - integrity sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw== - -cssnano@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-6.0.1.tgz#87c38c4cd47049c735ab756d7e77ac3ca855c008" - integrity sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg== - dependencies: - cssnano-preset-default "^6.0.1" - lilconfig "^2.1.0" - -csso@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" - integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== - dependencies: - css-tree "~2.2.0" - -csstype@^3.0.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -dataloader@^2.1.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.2.2.tgz#216dc509b5abe39d43a9b9d97e6e5e473dfbe3e0" - integrity sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g== - -date-fns@^2.29.3, date-fns@^2.30.0: - version "2.30.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" - integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== - dependencies: - "@babel/runtime" "^7.21.0" - -dateformat@^4.6.3: - version "4.6.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" - integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== - -debounce-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7" - integrity sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ== - dependencies: - mimic-fn "^3.0.0" - -debug@2, debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@4, debug@4.x, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^3.2.6: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-equal@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.2.tgz#9b2635da569a13ba8e1cc159c2f744071b115daa" - integrity sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.1" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deepmerge@^4.0.0, deepmerge@^4.2.2, deepmerge@^4.3.1: - version "4.3.1" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-libc@^2.0.0, detect-libc@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" - integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== - -diff@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== - -direction@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/direction/-/direction-1.0.4.tgz#2b86fb686967e987088caf8b89059370d4837442" - integrity sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ== - -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-helpers@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" - integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== - dependencies: - "@babel/runtime" "^7.8.7" - csstype "^3.0.2" - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -domutils@^2.5.2, domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -domutils@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" - integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dot-prop@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -dotenv@^8.6.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" - integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== - -duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.477: - version "1.4.498" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.498.tgz#cef35341123f62a35ba7084e439c911d25e0d81b" - integrity sha512-4LODxAzKGVy7CJyhhN5mebwe7U2L29P+0G+HUriHnabm0d7LSff8Yn7t+Wq+2/9ze2Fu1dhX7mww090xfv7qXQ== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.15.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@^4.2.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -env-paths@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -envinfo@^7.7.3: - version "7.10.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" - integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - -es-module-lexer@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f" - integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA== - -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.53, es5-ext@^0.10.61, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: - version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -es6-weak-map@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" - integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== - dependencies: - d "1" - es5-ext "^0.10.46" - es6-iterator "^2.0.3" - es6-symbol "^3.1.1" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-scope@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -event-emitter@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== - dependencies: - d "1" - es5-ext "~0.10.14" - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -events@^3.2.0, events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -express-fileupload@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/express-fileupload/-/express-fileupload-1.4.0.tgz#be9d70a881d6c2b1ce668df86e4f89ddbf238ec7" - integrity sha512-RjzLCHxkv3umDeZKeFeMg8w7qe0V09w3B7oGZprr/oO2H/ISCgNzuqzn7gV3HRWb37GjRk429CCpSLS2KNTqMQ== - dependencies: - busboy "^1.6.0" - -express-rate-limit@^5.5.1: - version "5.5.1" - resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-5.5.1.tgz#110c23f6a65dfa96ab468eda95e71697bc6987a2" - integrity sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg== - -express@^4.18.2: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -ext@^1.1.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - -fast-copy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-3.0.1.tgz#9e89ef498b8c04c1cd76b33b8e14271658a732aa" - integrity sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-redact@^3.1.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.3.0.tgz#7c83ce3a7be4898241a46560d51de10f653f7634" - integrity sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== - -fast-safe-stringify@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" - integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== - -fast-xml-parser@4.2.5: - version "4.2.5" - resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz#a6747a09296a6cb34f2ae634019bf1738f3b421f" - integrity sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g== - dependencies: - strnum "^1.0.5" - -fastest-levenshtein@^1.0.12: - version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" - integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - -file-loader@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -file-type@16.5.4: - version "16.5.4" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-16.5.4.tgz#474fb4f704bee427681f98dd390058a172a6c2fd" - integrity sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw== - dependencies: - readable-web-to-node-stream "^3.0.0" - strtok3 "^6.2.4" - token-types "^4.1.1" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-cache-dir@^3.3.2: - version "3.3.2" - resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-root@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - -find-up@4.1.0, find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -flatley@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/flatley/-/flatley-5.2.0.tgz#3a645837c669be8d978335e37ae3afffcfbdedb7" - integrity sha512-vsb0/03uIHu7/3jRqABweblFUJMLokz1uMrcgFlvx6OAr6V3FiSic2iXeiJCj+cciTiQeumSDsIFAAnN1yvu4w== - dependencies: - is-buffer "^1.1.6" - -focus-trap@^6.9.2: - version "6.9.4" - resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-6.9.4.tgz#436da1a1d935c48b97da63cd8f361c6f3aa16444" - integrity sha512-v2NTsZe2FF59Y+sDykKY+XjqZ0cPfhq/hikWVL88BqLivnNiEffAsac6rP6H45ff9wG9LL5ToiDqrLEP9GX9mw== - dependencies: - tabbable "^5.3.3" - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fraction.js@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.1.tgz#14b4cc886575a5684f8d5fd5759c5db376bb7bb8" - integrity sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-monkey@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.4.tgz#ee8c1b53d3fe8bb7e5d2c5c5dfc0168afdd2f747" - integrity sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" - -get-port@5.1.1, get-port@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" - integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== - -get-stdin@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" - integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== - -get-tsconfig@^4.4.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.0.tgz#06ce112a1463e93196aa90320c35df5039147e34" - integrity sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw== - dependencies: - resolve-pkg-maps "^1.0.0" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-promise@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-4.2.2.tgz#15f44bcba0e14219cd93af36da6bb905ff007877" - integrity sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw== - dependencies: - "@types/glob" "^7.1.3" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@^7.1.6: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphql-http@^1.17.1: - version "1.21.0" - resolved "https://registry.yarnpkg.com/graphql-http/-/graphql-http-1.21.0.tgz#04d1606e663acd3f422e86e2e85f4ae7a8b0881b" - integrity sha512-yrItPfHj5WeT4n7iusbVin+vGSQjXFAX6U/GnYytdCJRXVad1TWGtYFDZ2ROjCKpXQzIwvfbiWCEwfuXgR3B6A== - -graphql-playground-html@^1.6.30: - version "1.6.30" - resolved "https://registry.yarnpkg.com/graphql-playground-html/-/graphql-playground-html-1.6.30.tgz#14c2a8eb7fc17bfeb1a746bbb28a11e34bf0b391" - integrity sha512-tpCujhsJMva4aqE8ULnF7/l3xw4sNRZcSHu+R00VV+W0mfp+Q20Plvcrp+5UXD+2yS6oyCXncA+zoQJQqhGCEw== - dependencies: - xss "^1.0.6" - -graphql-playground-middleware-express@^1.7.23: - version "1.7.23" - resolved "https://registry.yarnpkg.com/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.23.tgz#95aba44d801ff3c08b2246917d2901d2e7c35d3d" - integrity sha512-M/zbTyC1rkgiQjFSgmzAv6umMHOphYLNWZp6Ye5QrD77WfGOOoSqDsVmGUczc2pDkEPEzzGB/bvBO5rdzaTRgw== - dependencies: - graphql-playground-html "^1.6.30" - -graphql-query-complexity@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/graphql-query-complexity/-/graphql-query-complexity-0.12.0.tgz#5f636ccc54da82225f31e898e7f27192fe074b4c" - integrity sha512-fWEyuSL6g/+nSiIRgIipfI6UXTI7bAxrpPlCY1c0+V3pAEUo1ybaKmSBgNr1ed2r+agm1plJww8Loig9y6s2dw== - dependencies: - lodash.get "^4.4.2" - -graphql-scalars@^1.20.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/graphql-scalars/-/graphql-scalars-1.22.2.tgz#6326e6fe2d0ad4228a9fea72a977e2bf26b86362" - integrity sha512-my9FB4GtghqXqi/lWSVAOPiTzTnnEzdOXCsAC2bb5V7EFNQjVjwy3cSSbUvgYOtDuDibd+ZsCDhz+4eykYOlhQ== - dependencies: - tslib "^2.5.0" - -graphql-type-json@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/graphql-type-json/-/graphql-type-json-0.3.2.tgz#f53a851dbfe07bd1c8157d24150064baab41e115" - integrity sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg== - -graphql@^16.6.0: - version "16.8.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.0.tgz#374478b7f27b2dc6153c8f42c1b80157f79d79d4" - integrity sha512-0oKGaR+y3qcS5mCu1vb7KG+a89vjn06C7Ihq/dDl3jA+A8B3TKomvi3CiEcVLJQGalbu8F52LxkOym7U5sSfbg== - -gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== - dependencies: - duplexer "^0.1.2" - -has-bigints@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -help-me@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/help-me/-/help-me-4.2.0.tgz#50712bfd799ff1854ae1d312c36eafcea85b0563" - integrity sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA== - dependencies: - glob "^8.0.0" - readable-stream "^3.6.0" - -history@^4.9.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" - integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== - dependencies: - "@babel/runtime" "^7.1.2" - loose-envify "^1.2.0" - resolve-pathname "^3.0.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^1.0.1" - -hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - -html-entities@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" - integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== - -html-minifier-terser@^6.0.2: - version "6.1.0" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== - dependencies: - camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.10.0" - -html-parse-stringify@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" - integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== - dependencies: - void-elements "3.1.0" - -html-webpack-plugin@^5.5.0: - version "5.5.3" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz#72270f4a78e222b5825b296e5e3e1328ad525a3e" - integrity sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg== - dependencies: - "@types/html-minifier-terser" "^6.0.0" - html-minifier-terser "^6.0.2" - lodash "^4.17.21" - pretty-error "^4.0.0" - tapable "^2.0.0" - -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-status@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/http-status/-/http-status-1.6.2.tgz#6dc05188a9856d67d96e48e8b4fd645c719ce82a" - integrity sha512-oUExvfNckrpTpDazph7kNG8sQi5au3BeTo0idaZFXEhTaJKu7GNJCLHI0rYY2wljm548MSTM+Ljj/c6anqu2zQ== - -https-proxy-agent@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -i18next-browser-languagedetector@^6.1.8: - version "6.1.8" - resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-6.1.8.tgz#8e9c61b32a4dfe9b959b38bc9d2a8b95f799b27c" - integrity sha512-Svm+MduCElO0Meqpj1kJAriTC6OhI41VhlT/A0UPjGoPZBhAHIaGE5EfsHlTpgdH09UVX7rcc72pSDDBeKSQQA== - dependencies: - "@babel/runtime" "^7.19.0" - -i18next-http-middleware@^3.2.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/i18next-http-middleware/-/i18next-http-middleware-3.3.2.tgz#6a24fee6bde44952a5af24364d43fa32f6c1b9b6" - integrity sha512-PSeLXQXr9Qiv9Q3GCWCoIJenKVbxCcVsXb7VMp/mOprV4gu+AMJT7VHw4+QEf6oYW6GU31QSLnfDpLNoSMtx3g== - -i18next@^22.4.9: - version "22.5.1" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-22.5.1.tgz#99df0b318741a506000c243429a7352e5f44d424" - integrity sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA== - dependencies: - "@babel/runtime" "^7.20.6" - -iconv-lite@0.4.24, iconv-lite@^0.4.4: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -immer@^9.0.6: - version "9.0.21" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" - integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== - -immutable@^4.0.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.2.tgz#f89d910f8dfb6e15c03b2cae2faaf8c1f66455fe" - integrity sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -internal-slot@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== - dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" - side-channel "^1.0.4" - -interpret@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== - -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^1.1.6, is-buffer@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.3: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hotkey@^0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.1.8.tgz#6b1f4b2d0e5639934e20c05ed24d623a21d36d25" - integrity sha512-qs3NZ1INIS+H+yeo7cD9pDfwYV/jqRh1JG9S9zYrNudkoUQg7OL7ziXqRKu+InFjUIDoP2o6HIkLYMh1pcWgyQ== - -is-hotkey@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.2.0.tgz#1835a68171a91e5c9460869d96336947c8340cef" - integrity sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw== - -is-map@^2.0.1, is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-promise@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-set@^2.0.1, is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: - which-typed-array "^1.1.11" - -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -isomorphic-fetch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" - integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== - dependencies: - node-fetch "^2.6.1" - whatwg-fetch "^3.4.1" - -jest-util@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.3.tgz#e15c3eac8716440d1ed076f09bc63ace1aebca63" - integrity sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest-worker@^29.4.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.6.3.tgz#7b1a47bbb6559f3c0882d16595938590e63915d5" - integrity sha512-wacANXecZ/GbQakpf2CClrqrlwsYYDSXFd4fIGdL+dXpM2GWoJ+6bhQ7vR3TKi3+gkSfBkjy1/khH/WrYS4Q6g== - dependencies: - "@types/node" "*" - jest-util "^29.6.3" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -joi@^17.7.0: - version "17.9.2" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.2.tgz#8b2e4724188369f55451aebd1d0b1d9482470690" - integrity sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw== - dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.3" - "@sideway/formula" "^3.0.1" - "@sideway/pinpoint" "^2.0.0" - -joycon@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" - integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-to-typescript@11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/json-schema-to-typescript/-/json-schema-to-typescript-11.0.3.tgz#9b401c2b78329959f1c4c4e0639a6bdcf6a6ed77" - integrity sha512-EaEE9Y4VZ8b9jW5zce5a9L3+p4C9AqgIRHbNVDJahfMnoKzcd4sDb98BLxLdQhJEuRAXyKLg4H66NKm80W8ilg== - dependencies: - "@bcherny/json-schema-ref-parser" "9.0.9" - "@types/json-schema" "^7.0.11" - "@types/lodash" "^4.14.182" - "@types/prettier" "^2.6.1" - cli-color "^2.0.2" - get-stdin "^8.0.0" - glob "^7.1.6" - glob-promise "^4.2.2" - is-glob "^4.0.3" - lodash "^4.17.21" - minimist "^1.2.6" - mkdirp "^1.0.4" - mz "^2.7.0" - prettier "^2.6.2" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-schema-typed@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9" - integrity sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A== - -json5@^2.1.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonwebtoken@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz#81d8c901c112c24e497a55daf6b2be1225b40145" - integrity sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg== - dependencies: - jws "^3.2.2" - lodash "^4.17.21" - ms "^2.1.1" - semver "^7.3.8" - -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - -jwt-decode@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-3.1.2.tgz#3fb319f3675a2df0c2895c8f5e9fa4b67b04ed59" - integrity sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A== - -kareem@2.5.1: - version "2.5.1" - resolved "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz#7b8203e11819a8e77a34b3517d3ead206764d15d" - integrity sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA== - -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -klona@^2.0.4, klona@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" - integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== - -lilconfig@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -loader-utils@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== - -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" - integrity sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ== - dependencies: - es5-ext "~0.10.2" - -make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -md5-file@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/md5-file/-/md5-file-5.0.0.tgz#e519f631feca9c39e7f9ea1780b63c4745012e20" - integrity sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw== - -md5@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" - integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== - dependencies: - charenc "0.0.2" - crypt "0.0.2" - is-buffer "~1.1.6" - -mdn-data@2.0.28: - version "2.0.28" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" - integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== - -mdn-data@2.0.30: - version "2.0.30" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" - integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memfs@^3.4.12: - version "3.6.0" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" - integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== - dependencies: - fs-monkey "^1.0.4" - -memoize-one@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" - integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== - -memoizee@^0.4.15: - version "0.4.15" - resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72" - integrity sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ== - dependencies: - d "^1.0.1" - es5-ext "^0.10.53" - es6-weak-map "^2.0.3" - event-emitter "^0.3.5" - is-promise "^2.2.2" - lru-queue "^0.1.0" - next-tick "^1.1.0" - timers-ext "^0.1.7" - -memory-pager@^1.0.2: - version "1.5.0" - resolved "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" - integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -method-override@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/method-override/-/method-override-3.0.0.tgz#6ab0d5d574e3208f15b0c9cf45ab52000468d7a2" - integrity sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA== - dependencies: - debug "3.1.0" - methods "~1.1.2" - parseurl "~1.3.2" - vary "~1.1.2" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micro-memoize@^4.0.14: - version "4.1.2" - resolved "https://registry.yarnpkg.com/micro-memoize/-/micro-memoize-4.1.2.tgz#ce719c1ba1e41592f1cd91c64c5f41dcbf135f36" - integrity sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g== - -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" - integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -mini-css-extract-plugin@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz#83172b4fd812f8fc4a09d6f6d16f924f53990ca8" - integrity sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - webpack-sources "^1.1.0" - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6, minimist@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -monaco-editor@^0.38.0: - version "0.38.0" - resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.38.0.tgz#7b3cd16f89b1b8867fcd3c96e67fccee791ff05c" - integrity sha512-11Fkh6yzEmwx7O0YoLxeae0qEGFwmyPRlVxpg7oF9czOOCB/iCjdJrG5I67da5WiXK3YJCxoz9TJFE8Tfq/v9A== - -mongodb-connection-string-url@^2.5.4: - version "2.6.0" - resolved "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz#57901bf352372abdde812c81be47b75c6b2ec5cf" - integrity sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ== - dependencies: - "@types/whatwg-url" "^8.2.1" - whatwg-url "^11.0.0" - -mongodb-memory-server-core@8.13.0: - version "8.13.0" - resolved "https://registry.npmjs.org/mongodb-memory-server-core/-/mongodb-memory-server-core-8.13.0.tgz#3aabf0faa2ad0eaf986dd047bfb9d599a285d4ed" - integrity sha512-4NTOzYOlRUilwb8CxOKix/XbZmac4cLpmEU03eaHx90lgEp+ARZM2PQtIOEg3nhHo97r9THIEv6Gs4LECokp0Q== - dependencies: - async-mutex "^0.3.2" - camelcase "^6.3.0" - debug "^4.3.4" - find-cache-dir "^3.3.2" - get-port "^5.1.1" - https-proxy-agent "^5.0.1" - md5-file "^5.0.0" - mongodb "^4.16.0" - new-find-package-json "^2.0.0" - semver "^7.5.1" - tar-stream "^2.1.4" - tslib "^2.5.3" - uuid "^9.0.0" - yauzl "^2.10.0" - -mongodb-memory-server@^8.13.0: - version "8.13.0" - resolved "https://registry.npmjs.org/mongodb-memory-server/-/mongodb-memory-server-8.13.0.tgz#c3302c72972220f2d7f8e48dc1919eb75c8585a8" - integrity sha512-CyrKMwEmRePn8iQ3LtWQiOJxlGK0eM+NNTq3Yg8m7gaywepFu24mF7s13q87Kfuq0WgBuCJQ4t6VcUZJ4m+KWQ== - dependencies: - mongodb-memory-server-core "8.13.0" - tslib "^2.5.3" - -mongodb@4.16.0, mongodb@^4.16.0: - version "4.16.0" - resolved "https://registry.npmjs.org/mongodb/-/mongodb-4.16.0.tgz#8b0043de7b577c6a7e0ce44a2ca7315b9c0a7927" - integrity sha512-0EB113Fsucaq1wsY0dOhi1fmZOwFtLOtteQkiqOXGklvWMnSH3g2QS53f0KTP+/6qOkuoXE2JksubSZNmxeI+g== - dependencies: - bson "^4.7.2" - mongodb-connection-string-url "^2.5.4" - socks "^2.7.1" - optionalDependencies: - "@aws-sdk/credential-providers" "^3.186.0" - saslprep "^1.0.3" - -mongoose-paginate-v2@1.7.22: - version "1.7.22" - resolved "https://registry.npmjs.org/mongoose-paginate-v2/-/mongoose-paginate-v2-1.7.22.tgz#9f178fe5fb71597e231639adac84d3ab9a96c62a" - integrity sha512-xW5GugkE21DJiu9e13EOxKt4ejEKQkRP/S1PkkXRjnk2rRZVKBcld1nPV+VJ/YCPfm8hb3sz9OvI7O38RmixkA== - -mongoose@6.11.4: - version "6.11.4" - resolved "https://registry.npmjs.org/mongoose/-/mongoose-6.11.4.tgz#7bab3a32eca8a43715057ae5f78d5515ecf94d7d" - integrity sha512-q9NaW9/BBYZofx80SqlR7uoSR09CS3g02y+KMj1lNLUxcFFsPshupY3WWisNFauYG9gyuDF4L/RgyIK3obSghg== - dependencies: - bson "^4.7.2" - kareem "2.5.1" - mongodb "4.16.0" - mpath "0.9.0" - mquery "4.0.3" - ms "2.1.3" - sift "16.0.1" - -mpath@0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz#0c122fe107846e31fc58c75b09c35514b3871904" - integrity sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew== - -mquery@4.0.3: - version "4.0.3" - resolved "https://registry.npmjs.org/mquery/-/mquery-4.0.3.tgz#4d15f938e6247d773a942c912d9748bd1965f89d" - integrity sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA== - dependencies: - debug "4.x" - -mrmime@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" - integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -needle@^2.5.2: - version "2.9.1" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684" - integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -new-find-package-json@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/new-find-package-json/-/new-find-package-json-2.0.0.tgz#96553638781db35061f351e8ccb4d07126b6407d" - integrity sha512-lDcBsjBSMlj3LXH2v/FW3txlh2pYTjmbOXPYJD93HI5EwuLzI11tdHSIpUMmfq/IOsldj4Ps8M8flhm+pCK4Ew== - dependencies: - debug "^4.3.4" - -next-tick@1, next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-abi@^3.3.0: - version "3.47.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.47.0.tgz#6cbfa2916805ae25c2b7156ca640131632eb05e8" - integrity sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A== - dependencies: - semver "^7.3.5" - -node-addon-api@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" - integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== - -node-fetch@^2.6.1: - version "2.6.13" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.13.tgz#a20acbbec73c2e09f9007de5cda17104122e0010" - integrity sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA== - dependencies: - whatwg-url "^5.0.0" - -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -nodemailer@^6.9.0: - version "6.9.4" - resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.9.4.tgz#93bd4a60eb0be6fa088a0483340551ebabfd2abf" - integrity sha512-CXjQvrQZV4+6X5wP6ZIgdehJamI63MFoYFGGPtHudWym9qaEHDNdPzaj5bfMCvxG1vhAileSWW90q7nL0N36mA== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -object-assign@^4.0.1, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-to-formdata@^4.4.2: - version "4.5.1" - resolved "https://registry.yarnpkg.com/object-to-formdata/-/object-to-formdata-4.5.1.tgz#b6955a9c505b58df15852fee5f844b418b3eb6fe" - integrity sha512-QiM9D0NiU5jV6J6tjE1g7b4Z2tcUnKs1OPUi4iMb2zH+7jwlcUrASghgkFk9GtzqNNq8rTQJtT8AzjBAvLoNMw== - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -on-exit-leak-free@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz#5c703c968f7e7f851885f6459bf8a8a57edc9cc4" - integrity sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -opener@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -passport-anonymous@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/passport-anonymous/-/passport-anonymous-1.0.1.tgz#241e37274ec44dfb7f6cad234b41c438386bc117" - integrity sha512-Mk2dls97nLTzHpsWCYQ54IVGucWaiWSHHr3+IhWYAebg4dRgRQIfyoeYrixoxB2z2z4+EM7p9yjC+a3yMB5z5A== - dependencies: - passport-strategy "1.x.x" - -passport-headerapikey@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/passport-headerapikey/-/passport-headerapikey-1.2.2.tgz#b71960523999c9864151b8535c919e3ff5ba75ce" - integrity sha512-4BvVJRrWsNJPrd3UoZfcnnl4zvUWYKEtfYkoDsaOKBsrWHYmzTApCjs7qUbncOLexE9ul0IRiYBFfBG0y9IVQA== - dependencies: - lodash "^4.17.15" - passport-strategy "^1.0.0" - -passport-jwt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/passport-jwt/-/passport-jwt-4.0.1.tgz#c443795eff322c38d173faa0a3c481479646ec3d" - integrity sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ== - dependencies: - jsonwebtoken "^9.0.0" - passport-strategy "^1.0.0" - -passport-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/passport-local/-/passport-local-1.0.0.tgz#1fe63268c92e75606626437e3b906662c15ba6ee" - integrity sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow== - dependencies: - passport-strategy "1.x.x" - -passport-strategy@1.x.x, passport-strategy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" - integrity sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA== - -passport@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/passport/-/passport-0.6.0.tgz#e869579fab465b5c0b291e841e6cc95c005fac9d" - integrity sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug== - dependencies: - passport-strategy "1.x.x" - pause "0.0.1" - utils-merge "^1.0.1" - -path-browserify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pause@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" - integrity sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg== - -payload@payloadcms/payload#build/chore/update-2.0: - version "1.14.0" - resolved "https://codeload.github.com/payloadcms/payload/tar.gz/76b46b5f4529080a4e42a970529430ea8859d0b8" - dependencies: - "@date-io/date-fns" "^2.16.0" - "@dnd-kit/core" "^6.0.7" - "@dnd-kit/sortable" "^7.0.2" - "@faceless-ui/modal" "^2.0.1" - "@faceless-ui/scroll-info" "^1.3.0" - "@faceless-ui/window-info" "^2.1.1" - "@monaco-editor/react" "^4.5.1" - "@swc/core" "^1.3.76" - "@swc/register" "^0.1.10" - "@types/sharp" "^0.31.1" - body-parser "^1.20.1" - bson-objectid "^2.0.4" - compression "^1.7.4" - conf "^10.2.0" - connect-history-api-fallback "^1.6.0" - console-table-printer "^2.11.2" - css-loader "^5.2.7" - css-minimizer-webpack-plugin "^5.0.0" - dataloader "^2.1.0" - date-fns "^2.29.3" - deep-equal "^2.2.0" - deepmerge "^4.2.2" - dotenv "^8.6.0" - express "^4.18.2" - express-fileupload "1.4.0" - express-rate-limit "^5.5.1" - file-loader "^6.2.0" - file-type "16.5.4" - find-up "4.1.0" - flatley "^5.2.0" - fs-extra "^10.1.0" - get-tsconfig "^4.4.0" - graphql "^16.6.0" - graphql-http "^1.17.1" - graphql-playground-middleware-express "^1.7.23" - graphql-query-complexity "^0.12.0" - graphql-scalars "^1.20.1" - graphql-type-json "^0.3.2" - html-webpack-plugin "^5.5.0" - http-status "^1.6.2" - i18next "^22.4.9" - i18next-browser-languagedetector "^6.1.8" - i18next-http-middleware "^3.2.2" - is-hotkey "^0.2.0" - is-plain-object "^5.0.0" - isomorphic-fetch "^3.0.0" - joi "^17.7.0" - json-schema-to-typescript "11.0.3" - jsonwebtoken "^9.0.0" - jwt-decode "^3.1.2" - md5 "^2.3.0" - method-override "^3.0.0" - micro-memoize "^4.0.14" - mini-css-extract-plugin "1.6.2" - minimist "^1.2.7" - mkdirp "^1.0.4" - monaco-editor "^0.38.0" - nodemailer "^6.9.0" - object-to-formdata "^4.4.2" - passport "^0.6.0" - passport-anonymous "^1.0.1" - passport-headerapikey "^1.2.2" - passport-jwt "^4.0.1" - passport-local "^1.0.0" - path-browserify "^1.0.1" - pino "^8.15.0" - pino-pretty "^10.2.0" - pluralize "^8.0.0" - postcss "^8.4.21" - postcss-loader "^6.2.1" - postcss-preset-env "^9.0.0" - probe-image-size "^6.0.0" - process "^0.11.10" - qs "^6.11.0" - qs-middleware "^1.0.3" - react "^18.2.0" - react-animate-height "^2.1.2" - react-datepicker "^4.10.0" - react-diff-viewer-continued "^3.2.6" - react-dom "^18.2.0" - react-helmet "^6.1.0" - react-i18next "^11.18.6" - react-router-dom "^5.3.4" - react-router-navigation-prompt "^1.9.6" - react-select "^5.7.3" - react-toastify "^8.2.0" - sanitize-filename "^1.6.3" - sass "^1.57.1" - sass-loader "^12.6.0" - scheduler "^0.23.0" - scmp "^2.1.0" - sharp "^0.31.3" - slate "^0.91.4" - slate-history "^0.86.0" - slate-hyperscript "^0.81.3" - slate-react "^0.92.0" - style-loader "^2.0.0" - swc-loader "^0.2.3" - swc-minify-webpack-plugin "^2.1.0" - terser-webpack-plugin "^5.3.6" - ts-essentials "^7.0.3" - url-loader "^4.1.1" - use-context-selector "^1.4.1" - uuid "^8.3.2" - webpack "^5.78.0" - webpack-bundle-analyzer "^4.8.0" - webpack-cli "^4.10.0" - webpack-dev-middleware "6.0.1" - webpack-hot-middleware "^2.25.3" - -peek-readable@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-4.1.0.tgz#4ece1111bf5c2ad8867c314c81356847e8a62e72" - integrity sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg== - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pino-abstract-transport@^1.0.0, pino-abstract-transport@v1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz#cc0d6955fffcadb91b7b49ef220a6cc111d48bb3" - integrity sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA== - dependencies: - readable-stream "^4.0.0" - split2 "^4.0.0" - -pino-pretty@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-10.2.0.tgz#c674a153e15c08d7032a826d0051d786feace1d9" - integrity sha512-tRvpyEmGtc2D+Lr3FulIZ+R1baggQ4S3xD2Ar93KixFEDx6SEAUP3W5aYuEw1C73d6ROrNcB2IXLteW8itlwhA== - dependencies: - colorette "^2.0.7" - dateformat "^4.6.3" - fast-copy "^3.0.0" - fast-safe-stringify "^2.1.1" - help-me "^4.0.1" - joycon "^3.1.1" - minimist "^1.2.6" - on-exit-leak-free "^2.1.0" - pino-abstract-transport "^1.0.0" - pump "^3.0.0" - readable-stream "^4.0.0" - secure-json-parse "^2.4.0" - sonic-boom "^3.0.0" - strip-json-comments "^3.1.1" - -pino-std-serializers@^6.0.0: - version "6.2.2" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz#d9a9b5f2b9a402486a5fc4db0a737570a860aab3" - integrity sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA== - -pino@^8.15.0: - version "8.15.0" - resolved "https://registry.yarnpkg.com/pino/-/pino-8.15.0.tgz#67c61d5e397bf297e5a0433976a7f7b8aa6f876b" - integrity sha512-olUADJByk4twxccmAxb1RiGKOSvddHugCV3wkqjyv+3Sooa2KLrmXrKEWOKi0XPCLasRR5jBXxioE1jxUa4KzQ== - dependencies: - atomic-sleep "^1.0.0" - fast-redact "^3.1.1" - on-exit-leak-free "^2.1.0" - pino-abstract-transport v1.0.0 - pino-std-serializers "^6.0.0" - process-warning "^2.0.0" - quick-format-unescaped "^4.0.3" - real-require "^0.2.0" - safe-stable-stringify "^2.3.1" - sonic-boom "^3.1.0" - thread-stream "^2.0.0" - -pirates@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== - dependencies: - find-up "^3.0.0" - -pluralize@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" - integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== - -postcss-attribute-case-insensitive@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.2.tgz#e843091859323342e461878d201ee70278809e01" - integrity sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-calc@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-9.0.1.tgz#a744fd592438a93d6de0f1434c572670361eb6c6" - integrity sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ== - dependencies: - postcss-selector-parser "^6.0.11" - postcss-value-parser "^4.2.0" - -postcss-clamp@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" - integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-functional-notation@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.0.tgz#dcc1b8b6273099c597a790dc484d89e2573f5f17" - integrity sha512-kaWTgnhRKFtfMF8H0+NQBFxgr5CGg05WGe07Mc1ld6XHwwRWlqSbHOW0zwf+BtkBQpsdVUu7+gl9dtdvhWMedw== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - postcss-value-parser "^4.2.0" - -postcss-color-hex-alpha@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.2.tgz#6d3ed50342802469880981a1999515d003ff7d79" - integrity sha512-SfPjgr//VQ/DOCf80STIAsdAs7sbIbxATvVmd+Ec7JvR8onz9pjawhq3BJM3Pie40EE3TyB0P6hft16D33Nlyg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-rebeccapurple@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.0.tgz#317bf718962c70b779efacf3dc040c56f05d03ce" - integrity sha512-RmUFL+foS05AKglkEoqfx+KFdKRVmqUAxlHNz4jLqIi7046drIPyerdl4B6j/RA2BSP8FI8gJcHmLRrwJOMnHw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-colormin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.0.0.tgz#d4250652e952e1c0aca70c66942da93d3cdeaafe" - integrity sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - colord "^2.9.1" - postcss-value-parser "^4.2.0" - -postcss-convert-values@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz#ec94a954957e5c3f78f0e8f65dfcda95280b8996" - integrity sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw== - dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" - -postcss-custom-media@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-10.0.0.tgz#299781f67d043de7d3eaa13923c26c586d9cd57a" - integrity sha512-NxDn7C6GJ7X8TsWOa8MbCdq9rLERRLcPfQSp856k1jzMreL8X9M6iWk35JjPRIb9IfRnVohmxAylDRx7n4Rv4g== - dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.3" - "@csstools/css-parser-algorithms" "^2.3.0" - "@csstools/css-tokenizer" "^2.1.1" - "@csstools/media-query-list-parser" "^2.1.2" - -postcss-custom-properties@^13.3.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-13.3.0.tgz#53361280a9ec57c2ac448c0877ba25c4978241ee" - integrity sha512-q4VgtIKSy5+KcUvQ0WxTjDy9DZjQ5VCXAZ9+tT9+aPMbA0z6s2t1nMw0QHszru1ib5ElkXl9JUpYYU37VVUs7g== - dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.4" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - postcss-value-parser "^4.2.0" - -postcss-custom-selectors@^7.1.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-7.1.4.tgz#5980972353119af0d9725bdcccad46be8cfc9011" - integrity sha512-TU2xyUUBTlpiLnwyE2ZYMUIYB41MKMkBZ8X8ntkqRDQ8sdBLhFFsPgNcOliBd5+/zcK51C9hRnSE7hKUJMxQSw== - dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.3" - "@csstools/css-parser-algorithms" "^2.3.0" - "@csstools/css-tokenizer" "^2.1.1" - postcss-selector-parser "^6.0.13" - -postcss-dir-pseudo-class@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-8.0.0.tgz#9e4e37d170f672520d3f38fd8376db0ca04d4e9c" - integrity sha512-Oy5BBi0dWPwij/IA+yDYj+/OBMQ9EPqAzTHeSNUYrUWdll/PRJmcbiUj0MNcsBi681I1gcSTLvMERPaXzdbvJg== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-discard-comments@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz#9ca335e8b68919f301b24ba47dde226a42e535fe" - integrity sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw== - -postcss-discard-duplicates@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz#c26177a6c33070922e67e9a92c0fd23d443d1355" - integrity sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA== - -postcss-discard-empty@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz#06c1c4fce09e22d2a99e667c8550eb8a3a1b9aee" - integrity sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ== - -postcss-discard-overridden@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz#49c5262db14e975e349692d9024442de7cd8e234" - integrity sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw== - -postcss-double-position-gradients@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.0.tgz#cdc11e1210c3fbd3f7bc242a5ee83e5b9d7db8fa" - integrity sha512-wR8npIkrIVUTicUpCWSSo1f/g7gAEIH70FMqCugY4m4j6TX4E0T2Q5rhfO0gqv00biBZdLyb+HkW8x6as+iJNQ== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - postcss-value-parser "^4.2.0" - -postcss-focus-visible@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-9.0.0.tgz#a81227428d6f1e524099c6581f7c7132f987e382" - integrity sha512-zA4TbVaIaT8npZBEROhZmlc+GBKE8AELPHXE7i4TmIUEQhw/P/mSJfY9t6tBzpQ1rABeGtEOHYrW4SboQeONMQ== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-focus-within@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-8.0.0.tgz#8304380dd2dadc1c2dcfa52816ff86be7736fc16" - integrity sha512-E7+J9nuQzZaA37D/MUZMX1K817RZGDab8qw6pFwzAkDd/QtlWJ9/WTKmzewNiuxzeq6WWY7ATiRePVoDKp+DnA== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-font-variant@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" - integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== - -postcss-gap-properties@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-5.0.0.tgz#3bd77f3d51facb1da404b4edd72b8203929385a5" - integrity sha512-YjsEEL6890P7MCv6fch6Am1yq0EhQCJMXyT4LBohiu87+4/WqR7y5W3RIv53WdA901hhytgRvjlrAhibhW4qsA== - -postcss-image-set-function@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-6.0.0.tgz#a5aba4a805ae903ab8200b584242149c48c481fb" - integrity sha512-bg58QnJexFpPBU4IGPAugAPKV0FuFtX5rHYNSKVaV91TpHN7iwyEzz1bkIPCiSU5+BUN00e+3fV5KFrwIgRocw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-initial@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" - integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== - -postcss-lab-function@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-6.0.1.tgz#46dc530a242972d47018c6627128d8e9e96b82c8" - integrity sha512-/Xl6JitDh7jWkcOLxrHcAlEaqkxyaG3g4iDMy5RyhNaiQPJ9Egf2+Mxp1W2qnH5jB2bj59f3RbdKmC6qx1IcXA== - dependencies: - "@csstools/css-color-parser" "^1.2.2" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - -postcss-loader@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef" - integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" - semver "^7.3.5" - -postcss-logical@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-7.0.0.tgz#9a83426e716e3c8f957dda3fd874edbcf22c754e" - integrity sha512-zYf3vHkoW82f5UZTEXChTJvH49Yl9X37axTZsJGxrCG2kOUwtaAoz9E7tqYg0lsIoJLybaL8fk/2mOi81zVIUw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-merge-longhand@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz#6f627b27db939bce316eaa97e22400267e798d69" - integrity sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^6.0.0" - -postcss-merge-rules@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz#39f165746404e646c0f5c510222ccde4824a86aa" - integrity sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - cssnano-utils "^4.0.0" - postcss-selector-parser "^6.0.5" - -postcss-minify-font-values@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz#68d4a028f9fa5f61701974724b2cc9445d8e6070" - integrity sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-minify-gradients@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz#22b5c88cc63091dadbad34e31ff958404d51d679" - integrity sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA== - dependencies: - colord "^2.9.1" - cssnano-utils "^4.0.0" - postcss-value-parser "^4.2.0" - -postcss-minify-params@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz#2b3a85a9e3b990d7a16866f430f5fd1d5961b539" - integrity sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ== - dependencies: - browserslist "^4.21.4" - cssnano-utils "^4.0.0" - postcss-value-parser "^4.2.0" - -postcss-minify-selectors@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz#5046c5e8680a586e5a0cad52cc9aa36d6be5bda2" - integrity sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" - integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-nesting@^12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-12.0.1.tgz#abb76d15dfd59a9f7d03b4464f53b60a4d3795c4" - integrity sha512-6LCqCWP9pqwXw/njMvNK0hGY44Fxc4B2EsGbn6xDcxbNRzP8GYoxT7yabVVMLrX3quqOJ9hg2jYMsnkedOf8pA== - dependencies: - "@csstools/selector-specificity" "^3.0.0" - postcss-selector-parser "^6.0.13" - -postcss-normalize-charset@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz#36cc12457259064969fb96f84df491652a4b0975" - integrity sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ== - -postcss-normalize-display-values@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz#8d2961415078644d8c6bbbdaf9a2fdd60f546cd4" - integrity sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-positions@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz#25b96df99a69f8925f730eaee0be74416865e301" - integrity sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-repeat-style@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz#ddf30ad8762feb5b1eb97f39f251acd7b8353299" - integrity sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-string@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz#948282647a51e409d69dde7910f0ac2ff97cb5d8" - integrity sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-timing-functions@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz#5f13e650b8c43351989fc5de694525cc2539841c" - integrity sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-unicode@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz#741b3310f874616bdcf07764f5503695d3604730" - integrity sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg== - dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" - -postcss-normalize-url@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz#d0a31e962a16401fb7deb7754b397a323fb650b4" - integrity sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz#accb961caa42e25ca4179b60855b79b1f7129d4d" - integrity sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-opacity-percentage@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-2.0.0.tgz#c0a56060cd4586e3f954dbde1efffc2deed53002" - integrity sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ== - -postcss-ordered-values@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz#374704cdff25560d44061d17ba3c6308837a3218" - integrity sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg== - dependencies: - cssnano-utils "^4.0.0" - postcss-value-parser "^4.2.0" - -postcss-overflow-shorthand@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-5.0.0.tgz#1ed6d6c532cdf52b5dabec06662dc63f9207855c" - integrity sha512-2rlxDyeSics/hC2FuMdPnWiP9WUPZ5x7FTuArXLFVpaSQ2woPSfZS4RD59HuEokbZhs/wPUQJ1E3MT6zVv94MQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-page-break@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" - integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== - -postcss-place@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-9.0.0.tgz#7e47851bf40d16ce06f6013453b706100ca6c102" - integrity sha512-qLEPD9VPH5opDVemwmRaujODF9nExn24VOC3ghgVLEvfYN7VZLwJHes0q/C9YR5hI2UC3VgBE8Wkdp1TxCXhtg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-preset-env@^9.0.0: - version "9.1.1" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-9.1.1.tgz#0217fd0d41b9f62f10e1e2c8c5502bbdcb1a76b1" - integrity sha512-rMPEqyTLm8JLbvaHnDAdQg6SN4Z/NDOsm+CRefg4HmSOiNpTcBXaw4RAaQbfTNe8BB75l4NpoQ6sMdrutdEpdQ== - dependencies: - "@csstools/postcss-cascade-layers" "^4.0.0" - "@csstools/postcss-color-function" "^3.0.1" - "@csstools/postcss-color-mix-function" "^2.0.1" - "@csstools/postcss-exponential-functions" "^1.0.0" - "@csstools/postcss-font-format-keywords" "^3.0.0" - "@csstools/postcss-gradients-interpolation-method" "^4.0.1" - "@csstools/postcss-hwb-function" "^3.0.1" - "@csstools/postcss-ic-unit" "^3.0.0" - "@csstools/postcss-is-pseudo-class" "^4.0.0" - "@csstools/postcss-logical-float-and-clear" "^2.0.0" - "@csstools/postcss-logical-resize" "^2.0.0" - "@csstools/postcss-logical-viewport-units" "^2.0.1" - "@csstools/postcss-media-minmax" "^1.0.7" - "@csstools/postcss-media-queries-aspect-ratio-number-values" "^2.0.2" - "@csstools/postcss-nested-calc" "^3.0.0" - "@csstools/postcss-normalize-display-values" "^3.0.0" - "@csstools/postcss-oklab-function" "^3.0.1" - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - "@csstools/postcss-relative-color-syntax" "^2.0.1" - "@csstools/postcss-scope-pseudo-class" "^3.0.0" - "@csstools/postcss-stepped-value-functions" "^3.0.1" - "@csstools/postcss-text-decoration-shorthand" "^3.0.0" - "@csstools/postcss-trigonometric-functions" "^3.0.1" - "@csstools/postcss-unset-value" "^3.0.0" - autoprefixer "^10.4.14" - browserslist "^4.21.10" - css-blank-pseudo "^6.0.0" - css-has-pseudo "^6.0.0" - css-prefers-color-scheme "^9.0.0" - cssdb "^7.7.0" - postcss-attribute-case-insensitive "^6.0.2" - postcss-clamp "^4.1.0" - postcss-color-functional-notation "^6.0.0" - postcss-color-hex-alpha "^9.0.2" - postcss-color-rebeccapurple "^9.0.0" - postcss-custom-media "^10.0.0" - postcss-custom-properties "^13.3.0" - postcss-custom-selectors "^7.1.4" - postcss-dir-pseudo-class "^8.0.0" - postcss-double-position-gradients "^5.0.0" - postcss-focus-visible "^9.0.0" - postcss-focus-within "^8.0.0" - postcss-font-variant "^5.0.0" - postcss-gap-properties "^5.0.0" - postcss-image-set-function "^6.0.0" - postcss-initial "^4.0.1" - postcss-lab-function "^6.0.1" - postcss-logical "^7.0.0" - postcss-nesting "^12.0.1" - postcss-opacity-percentage "^2.0.0" - postcss-overflow-shorthand "^5.0.0" - postcss-page-break "^3.0.4" - postcss-place "^9.0.0" - postcss-pseudo-class-any-link "^9.0.0" - postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^7.0.1" - postcss-value-parser "^4.2.0" - -postcss-pseudo-class-any-link@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.0.tgz#5fb5b700e0ecdc845a94eb433b8ccff756cbf660" - integrity sha512-QNCYIL98VKFKY6HGDEJpF6+K/sg9bxcUYnOmNHJxZS5wsFDFaVoPeG68WAuhsqwbIBSo/b9fjEnTwY2mTSD+uA== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-reduce-initial@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz#7d16e83e60e27e2fa42f56ec0b426f1da332eca7" - integrity sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - -postcss-reduce-transforms@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz#28ff2601a6d9b96a2f039b3501526e1f4d584a46" - integrity sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-replace-overflow-wrap@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" - integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== - -postcss-selector-not@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-7.0.1.tgz#8142e90c8eb6c8c5faecb3e9d96d4353d02e94fb" - integrity sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-svgo@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.0.tgz#7b18742d38d4505a0455bbe70d52b49f00eaf69d" - integrity sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw== - dependencies: - postcss-value-parser "^4.2.0" - svgo "^3.0.2" - -postcss-unique-selectors@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz#c94e9b0f7bffb1203894e42294b5a1b3fb34fbe1" - integrity sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^8.2.15, postcss@^8.4.21, postcss@^8.4.24: - version "8.4.28" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.28.tgz#c6cc681ed00109072816e1557f889ef51cf950a5" - integrity sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -prebuild-install@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" - integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - -prettier@^2.6.2: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -pretty-error@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" - integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== - dependencies: - lodash "^4.17.20" - renderkid "^3.0.0" - -probe-image-size@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/probe-image-size/-/probe-image-size-6.0.0.tgz#4a85b19d5af4e29a8de7d53a9aa036f6fd02f5f4" - integrity sha512-99PZ5+RU4gqiTfK5ZDMDkZtn6eL4WlKfFyVJV7lFQvH3iGmQ85DqMTOdxorERO26LHkevR2qsxnHp0x/2UDJPA== - dependencies: - deepmerge "^4.0.0" - needle "^2.5.2" - stream-parser "~0.3.1" - -process-warning@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-2.2.0.tgz#008ec76b579820a8e5c35d81960525ca64feb626" - integrity sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -qs-middleware@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/qs-middleware/-/qs-middleware-1.0.3.tgz#84f3535275ba20fd00c2122efacce6ab01092c19" - integrity sha512-ymlixxD/0Bj3BMY9x1z8ENdQdhkmsIbDNyVvfM8soHn5p/CRFlLPrmtxmE5aG//q1PzHHSGuLi+6QlHezivseg== - dependencies: - qs "~6.4.0" - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@^6.11.0, qs@^6.9.1: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - -qs@~6.4.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.1.tgz#2bad97710a5b661c366b378b1e3a44a592ff45e6" - integrity sha512-LQy1Q1fcva/UsnP/6Iaa4lVeM49WiOitu2T4hZCyA/elLKu37L99qcBJk4VCCk+rdLvnMzfKyiN3SZTqdAZGSQ== - -quick-format-unescaped@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" - integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-animate-height@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/react-animate-height/-/react-animate-height-2.1.2.tgz#9b450fc64d46f10f5e07da8d0d5e2c47b9f15030" - integrity sha512-A9jfz/4CTdsIsE7WCQtO9UkOpMBcBRh8LxyHl2eoZz1ki02jpyUL5xt58gabd0CyeLQ8fRyQ+s2lyV2Ufu8Owg== - dependencies: - classnames "^2.2.5" - prop-types "^15.6.1" - -react-datepicker@^4.10.0: - version "4.16.0" - resolved "https://registry.yarnpkg.com/react-datepicker/-/react-datepicker-4.16.0.tgz#b9dd389bb5611a1acc514bba1dd944be21dd877f" - integrity sha512-hNQ0PAg/LQoVbDUO/RWAdm/RYmPhN3cz7LuQ3hqbs24OSp69QCiKOJRrQ4jk1gv1jNR5oYu8SjjgfDh8q6Q1yw== - dependencies: - "@popperjs/core" "^2.11.8" - classnames "^2.2.6" - date-fns "^2.30.0" - prop-types "^15.7.2" - react-onclickoutside "^6.12.2" - react-popper "^2.3.0" - -react-diff-viewer-continued@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/react-diff-viewer-continued/-/react-diff-viewer-continued-3.2.6.tgz#96382463b5de6838d95323c407442349b1c3a26e" - integrity sha512-GrzyqQnjIMoej+jMjWvtVSsQqhXgzEGqpXlJ2dAGfOk7Q26qcm8Gu6xtI430PBUyZsERe8BJSQf+7VZZo8IBNQ== - dependencies: - "@emotion/css" "^11.10.5" - classnames "^2.3.1" - diff "^5.1.0" - memoize-one "^6.0.0" - prop-types "^15.8.1" - -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" - -react-fast-compare@^3.0.1, react-fast-compare@^3.1.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" - integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== - -react-helmet@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.1.0.tgz#a750d5165cb13cf213e44747502652e794468726" - integrity sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw== - dependencies: - object-assign "^4.1.1" - prop-types "^15.7.2" - react-fast-compare "^3.1.1" - react-side-effect "^2.1.0" - -react-i18next@^11.18.6: - version "11.18.6" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.18.6.tgz#e159c2960c718c1314f1e8fcaa282d1c8b167887" - integrity sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA== - dependencies: - "@babel/runtime" "^7.14.5" - html-parse-stringify "^3.0.1" - -react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-onclickoutside@^6.12.2: - version "6.13.0" - resolved "https://registry.yarnpkg.com/react-onclickoutside/-/react-onclickoutside-6.13.0.tgz#e165ea4e5157f3da94f4376a3ab3e22a565f4ffc" - integrity sha512-ty8So6tcUpIb+ZE+1HAhbLROvAIJYyJe/1vRrrcmW+jLsaM+/powDRqxzo6hSh9CuRZGSL1Q8mvcF5WRD93a0A== - -react-popper@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.3.0.tgz#17891c620e1320dce318bad9fede46a5f71c70ba" - integrity sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q== - dependencies: - react-fast-compare "^3.0.1" - warning "^4.0.2" - -react-router-dom@^5.3.4: - version "5.3.4" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" - integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-router "5.3.4" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-router-navigation-prompt@^1.9.6: - version "1.9.6" - resolved "https://registry.yarnpkg.com/react-router-navigation-prompt/-/react-router-navigation-prompt-1.9.6.tgz#a949252dfbae8c40508671beb6d5995f0b089ac4" - integrity sha512-l0sAtbroHK8i1/Eyy29XcrMpBEt0R08BaScgMUt8r5vWWbLz7G0ChOikayTCQm7QgDFsHw8gVnxDJb7TBZCAKg== - -react-router@5.3.4: - version "5.3.4" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5" - integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - hoist-non-react-statics "^3.1.0" - loose-envify "^1.3.1" - path-to-regexp "^1.7.0" - prop-types "^15.6.2" - react-is "^16.6.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-select@^5.7.3: - version "5.7.4" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.7.4.tgz#d8cad96e7bc9d6c8e2709bdda8f4363c5dd7ea7d" - integrity sha512-NhuE56X+p9QDFh4BgeygHFIvJJszO1i1KSkg/JPcIJrbovyRtI+GuOEa4XzFCEpZRAEoEI8u/cAHK+jG/PgUzQ== - dependencies: - "@babel/runtime" "^7.12.0" - "@emotion/cache" "^11.4.0" - "@emotion/react" "^11.8.1" - "@floating-ui/dom" "^1.0.1" - "@types/react-transition-group" "^4.4.0" - memoize-one "^6.0.0" - prop-types "^15.6.0" - react-transition-group "^4.3.0" - use-isomorphic-layout-effect "^1.1.2" - -react-side-effect@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.2.tgz#dc6345b9e8f9906dc2eeb68700b615e0b4fe752a" - integrity sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw== - -react-toastify@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-8.2.0.tgz#ef7d56bdfdc6272ca6b228368ab564721c3a3244" - integrity sha512-Pg2Ju7NngAamarFvLwqrFomJ57u/Ay6i6zfLurt/qPynWkAkOthu6vxfqYpJCyNhHRhR4hu7+bySSeWWJu6PAg== - dependencies: - clsx "^1.1.1" - -react-transition-group@^4.3.0, react-transition-group@^4.4.2: - version "4.4.5" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" - integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== - dependencies: - "@babel/runtime" "^7.5.5" - dom-helpers "^5.0.1" - loose-envify "^1.4.0" - prop-types "^15.6.2" - -react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" - -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^4.0.0: - version "4.4.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.2.tgz#e6aced27ad3b9d726d8308515b9a1b98dc1b9d13" - integrity sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - -readable-web-to-node-stream@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" - integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== - dependencies: - readable-stream "^3.6.0" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -real-require@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" - integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== - -rechoir@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" - integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== - dependencies: - resolve "^1.9.0" - -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - -regexp.prototype.flags@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - functions-have-names "^1.2.3" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - -renderkid@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" - integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^6.0.1" - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-pathname@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" - integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== - -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -resolve@^1.19.0, resolve@^1.9.0: - version "1.22.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" - integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -safe-buffer@5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-stable-stringify@^2.3.1: - version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sanitize-filename@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" - integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== - dependencies: - truncate-utf8-bytes "^1.0.0" - -saslprep@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" - integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== - dependencies: - sparse-bitfield "^3.0.3" - -sass-loader@^12.6.0: - version "12.6.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb" - integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== - dependencies: - klona "^2.0.4" - neo-async "^2.6.2" - -sass@^1.57.1: - version "1.66.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.66.1.tgz#04b51c4671e4650aa393740e66a4e58b44d055b1" - integrity sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA== - dependencies: - chokidar ">=3.0.0 <4.0.0" - immutable "^4.0.0" - source-map-js ">=0.6.2 <2.0.0" - -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" - -schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0, schema-utils@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" - integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.9.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.1.0" - -scmp@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/scmp/-/scmp-2.1.0.tgz#37b8e197c425bdeb570ab91cc356b311a11f9c9a" - integrity sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q== - -scroll-into-view-if-needed@^2.2.20: - version "2.2.31" - resolved "https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz#d3c482959dc483e37962d1521254e3295d0d1587" - integrity sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA== - dependencies: - compute-scroll-into-view "^1.0.20" - -secure-json-parse@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" - integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== - -semver@^6.0.0: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.5, semver@^7.3.8, semver@^7.5.1: - version "7.5.4" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== - dependencies: - randombytes "^2.1.0" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -sharp@^0.31.3: - version "0.31.3" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.31.3.tgz#60227edc5c2be90e7378a210466c99aefcf32688" - integrity sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg== - dependencies: - color "^4.2.3" - detect-libc "^2.0.1" - node-addon-api "^5.0.0" - prebuild-install "^7.1.1" - semver "^7.3.8" - simple-get "^4.0.1" - tar-fs "^2.1.1" - tunnel-agent "^0.6.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -sift@16.0.1: - version "16.0.1" - resolved "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz#e9c2ccc72191585008cf3e36fc447b2d2633a053" - integrity sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0, simple-get@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - -simple-wcswidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-wcswidth/-/simple-wcswidth-1.0.1.tgz#8ab18ac0ae342f9d9b629604e54d2aa1ecb018b2" - integrity sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg== - -sirv@^1.0.7: - version "1.0.19" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" - integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== - dependencies: - "@polka/url" "^1.0.0-next.20" - mrmime "^1.0.0" - totalist "^1.0.0" - -slate-history@^0.86.0: - version "0.86.0" - resolved "https://registry.yarnpkg.com/slate-history/-/slate-history-0.86.0.tgz#5554612271d2fc1018a7918be3961bb66e620c58" - integrity sha512-OxObL9tbhgwvSlnKSCpGIh7wnuaqvOj5jRExGjEyCU2Ke8ctf22HjT+jw7GEi9ttLzNTUmTEU3YIzqKGeqN+og== - dependencies: - is-plain-object "^5.0.0" - -slate-hyperscript@^0.81.3: - version "0.81.3" - resolved "https://registry.yarnpkg.com/slate-hyperscript/-/slate-hyperscript-0.81.3.tgz#0c8f446d6bef717d2fe855239fb86a000ba2d0d2" - integrity sha512-A/jvoLTAgeRcJaUPQCYOikCJxSws6+/jkL7mM+QuZljNd7EA5YqafGA7sVBJRFpcoSsDRUIah1yNiC/7vxZPYg== - dependencies: - is-plain-object "^5.0.0" - -slate-react@^0.92.0: - version "0.92.0" - resolved "https://registry.yarnpkg.com/slate-react/-/slate-react-0.92.0.tgz#eb158ac2a33d962f48c466c4c8cc7bc14c1c6633" - integrity sha512-xEDKu5RKw5f0N95l1UeNQnrB0Pxh4JPjpIZR/BVsMo0ININnLAknR99gLo46bl/Ffql4mr7LeaxQRoXxbFtJOQ== - dependencies: - "@juggle/resize-observer" "^3.4.0" - "@types/is-hotkey" "^0.1.1" - "@types/lodash" "^4.14.149" - direction "^1.0.3" - is-hotkey "^0.1.6" - is-plain-object "^5.0.0" - lodash "^4.17.4" - scroll-into-view-if-needed "^2.2.20" - tiny-invariant "1.0.6" - -slate@^0.91.4: - version "0.91.4" - resolved "https://registry.yarnpkg.com/slate/-/slate-0.91.4.tgz#759764d63c8a8a7aff29a29e598e593ed80277f9" - integrity sha512-aUJ3rpjrdi5SbJ5G1Qjr3arytfRkEStTmHjBfWq2A2Q8MybacIzkScSvGJjQkdTk3djCK9C9SEOt39sSeZFwTw== - dependencies: - immer "^9.0.6" - is-plain-object "^5.0.0" - tiny-warning "^1.0.3" - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks@^2.7.1: - version "2.7.1" - resolved "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - -sonic-boom@^3.0.0, sonic-boom@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.3.0.tgz#cffab6dafee3b2bcb88d08d589394198bee1838c" - integrity sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g== - dependencies: - atomic-sleep "^1.0.0" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-support@^0.5.13, source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -source-map@^0.6.0, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -sparse-bitfield@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" - integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ== - dependencies: - memory-pager "^1.0.2" - -split2@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -state-local@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/state-local/-/state-local-1.0.7.tgz#da50211d07f05748d53009bee46307a37db386d5" - integrity sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - dependencies: - internal-slot "^1.0.4" - -stream-parser@~0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/stream-parser/-/stream-parser-0.3.1.tgz#1618548694420021a1182ff0af1911c129761773" - integrity sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ== - dependencies: - debug "2" - -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - -string_decoder@^1.1.1, string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -strnum@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" - integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== - -strtok3@^6.2.4: - version "6.3.0" - resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-6.3.0.tgz#358b80ffe6d5d5620e19a073aa78ce947a90f9a0" - integrity sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw== - dependencies: - "@tokenizer/token" "^0.3.0" - peek-readable "^4.1.0" - -style-loader@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" - integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -stylehacks@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.0.0.tgz#9fdd7c217660dae0f62e14d51c89f6c01b3cb738" - integrity sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw== - dependencies: - browserslist "^4.21.4" - postcss-selector-parser "^6.0.4" - -stylis@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" - integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svgo@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.0.2.tgz#5e99eeea42c68ee0dc46aa16da093838c262fe0a" - integrity sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^5.1.0" - css-tree "^2.2.1" - csso "^5.0.5" - picocolors "^1.0.0" - -swc-loader@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/swc-loader/-/swc-loader-0.2.3.tgz#6792f1c2e4c9ae9bf9b933b3e010210e270c186d" - integrity sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A== - -swc-minify-webpack-plugin@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/swc-minify-webpack-plugin/-/swc-minify-webpack-plugin-2.1.1.tgz#2c63fe592d49541733d7557b3af8f97c7ffa78b9" - integrity sha512-/9ud/libNWUC5p71vXWhW/O2Nc0essW8D9pY4P4ol0ceM8OcFbNr41R9YFqTkmktqUL2t0WwXau+FkR4T1+PJA== - -tabbable@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-5.3.3.tgz#aac0ff88c73b22d6c3c5a50b1586310006b47fbf" - integrity sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA== - -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar-fs@^2.0.0, tar-fs@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -terser-webpack-plugin@^5.3.6, terser-webpack-plugin@^5.3.7: - version "5.3.9" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.16.8" - -terser@^5.10.0, terser@^5.16.8: - version "5.19.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.2.tgz#bdb8017a9a4a8de4663a7983f45c506534f9234e" - integrity sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -thread-stream@^2.0.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.4.0.tgz#5def29598d1d4171ba3bace7e023a71d87d99c07" - integrity sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw== - dependencies: - real-require "^0.2.0" - -timers-ext@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" - integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ== - dependencies: - es5-ext "~0.10.46" - next-tick "1" - -tiny-invariant@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" - integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== - -tiny-invariant@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" - integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== - -tiny-warning@^1.0.0, tiny-warning@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -token-types@^4.1.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/token-types/-/token-types-4.2.1.tgz#0f897f03665846982806e138977dbe72d44df753" - integrity sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ== - dependencies: - "@tokenizer/token" "^0.3.0" - ieee754 "^1.2.1" - -totalist@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" - integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== - -tr46@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" - integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== - dependencies: - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -truncate-utf8-bytes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" - integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== - dependencies: - utf8-byte-length "^1.0.1" - -ts-essentials@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" - integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== - -tslib@^1.11.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.0, tslib@^2.0.3: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tslib@^2.3.1, tslib@^2.5.0, tslib@^2.5.3: - version "2.6.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" - integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== - -typescript@^4.9.4: - version "4.9.5" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-loader@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" - integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== - dependencies: - loader-utils "^2.0.0" - mime-types "^2.1.27" - schema-utils "^3.0.0" - -use-context-selector@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/use-context-selector/-/use-context-selector-1.4.1.tgz#eb96279965846b72915d7f899b8e6ef1d768b0ae" - integrity sha512-Io2ArvcRO+6MWIhkdfMFt+WKQX+Vb++W8DS2l03z/Vw/rz3BclKpM0ynr4LYGyU85Eke+Yx5oIhTY++QR0ZDoA== - -use-isomorphic-layout-effect@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" - integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== - -utf8-byte-length@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" - integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== - -utils-merge@1.0.1, utils-merge@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -uuid@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" - integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== - -value-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" - integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -void-elements@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" - integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== - -warning@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" - integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== - dependencies: - loose-envify "^1.0.0" - -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -webidl-conversions@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" - integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== - -webpack-bundle-analyzer@^4.8.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz#fc093c4ab174fd3dcbd1c30b763f56d10141209d" - integrity sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw== - dependencies: - "@discoveryjs/json-ext" "0.5.7" - acorn "^8.0.4" - acorn-walk "^8.0.0" - chalk "^4.1.0" - commander "^7.2.0" - gzip-size "^6.0.0" - lodash "^4.17.20" - opener "^1.5.2" - sirv "^1.0.7" - ws "^7.3.1" - -webpack-cli@^4.10.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" - integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== - dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.2.0" - "@webpack-cli/info" "^1.5.0" - "@webpack-cli/serve" "^1.7.0" - colorette "^2.0.14" - commander "^7.0.0" - cross-spawn "^7.0.3" - fastest-levenshtein "^1.0.12" - import-local "^3.0.2" - interpret "^2.2.0" - rechoir "^0.7.0" - webpack-merge "^5.7.3" - -webpack-dev-middleware@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-6.0.1.tgz#fd585127ed44dab3f253daf0d98f4d58a5088cc2" - integrity sha512-PZPZ6jFinmqVPJZbisfggDiC+2EeGZ1ZByyMP5sOFJcPPWSexalISz+cvm+j+oYPT7FIJyxT76esjnw9DhE5sw== - dependencies: - colorette "^2.0.10" - memfs "^3.4.12" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-hot-middleware@^2.25.3: - version "2.25.4" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.4.tgz#d8bc9e9cb664fc3105c8e83d2b9ed436bee4e193" - integrity sha512-IRmTspuHM06aZh98OhBJtqLpeWFM8FXJS5UYpKYxCJzyFoyWj1w6VGFfomZU7OPA55dMLrQK0pRT1eQ3PACr4w== - dependencies: - ansi-html-community "0.0.8" - html-entities "^2.1.0" - strip-ansi "^6.0.0" - -webpack-merge@^5.7.3: - version "5.9.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" - integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== - dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" - -webpack-sources@^1.1.0: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5.78.0: - version "5.88.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.2.tgz#f62b4b842f1c6ff580f3fcb2ed4f0b579f4c210e" - integrity sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.15.0" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -whatwg-fetch@^3.4.1: - version "3.6.17" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.17.tgz#009bbbfc122b227b74ba1ff31536b3a1a0e0e212" - integrity sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ== - -whatwg-url@^11.0.0: - version "11.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" - integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== - dependencies: - tr46 "^3.0.0" - webidl-conversions "^7.0.0" - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" - -which-typed-array@^1.1.11, which-typed-array@^1.1.9: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wildcard@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" - integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@^7.3.1: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -xss@^1.0.6: - version "1.0.14" - resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.14.tgz#4f3efbde75ad0d82e9921cc3c95e6590dd336694" - integrity sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw== - dependencies: - commander "^2.20.3" - cssfilter "0.0.10" - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" diff --git a/packages/db-postgres/.eslintignore b/packages/db-postgres/.eslintignore new file mode 100644 index 000000000..247f3f12d --- /dev/null +++ b/packages/db-postgres/.eslintignore @@ -0,0 +1,10 @@ +.tmp +**/.git +**/.hg +**/.pnp.* +**/.svn +**/.yarn/** +**/build +**/dist/** +**/node_modules +**/temp diff --git a/packages/db-postgres/.eslintrc.cjs b/packages/db-postgres/.eslintrc.cjs new file mode 100644 index 000000000..638d7f813 --- /dev/null +++ b/packages/db-postgres/.eslintrc.cjs @@ -0,0 +1,15 @@ +/** @type {import('prettier').Config} */ +module.exports = { + extends: ['@payloadcms'], + overrides: [ + { + extends: ['plugin:@typescript-eslint/disable-type-checked'], + files: ['*.js', '*.cjs', '*.json', '*.md', '*.yml', '*.yaml'], + }, + ], + parserOptions: { + project: ['./tsconfig.json'], + tsconfigRootDir: __dirname, + }, + root: true, +} diff --git a/packages/db-postgres/.prettierignore b/packages/db-postgres/.prettierignore new file mode 100644 index 000000000..247f3f12d --- /dev/null +++ b/packages/db-postgres/.prettierignore @@ -0,0 +1,10 @@ +.tmp +**/.git +**/.hg +**/.pnp.* +**/.svn +**/.yarn/** +**/build +**/dist/** +**/node_modules +**/temp diff --git a/packages/db-postgres/.swcrc b/packages/db-postgres/.swcrc new file mode 100644 index 000000000..d46b555fe --- /dev/null +++ b/packages/db-postgres/.swcrc @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/swcrc", + "sourceMaps": "inline", + "jsc": { + "target": "esnext", + "parser": { + "syntax": "typescript", + "tsx": true, + "dts": true + } + }, + "module": { + "type": "commonjs" + } +} diff --git a/packages/db-postgres/package.json b/packages/db-postgres/package.json index 6fce48bfd..9842cd466 100644 --- a/packages/db-postgres/package.json +++ b/packages/db-postgres/package.json @@ -1,30 +1,38 @@ { "name": "@payloadcms/db-postgres", - "version": "0.0.1", "description": "The officially supported Postgres database adapter for Payload", - "main": "index.js", - "repository": "https://github.com/payloadcms/payload", - "author": "Payload CMS, Inc.", "license": "MIT", - "scripts": { - "build": "tsc" - }, + "author": "Payload CMS, Inc.", "peerDependencies": { "better-sqlite3": "^8.5.0" }, "dependencies": { "@libsql/client": "^0.3.1", - "drizzle-kit": "^0.19.13-a511135", - "drizzle-orm": "^0.28.0", - "pg": "^8.11.1", - "prompts": "^2.4.2", - "to-snake-case": "^1.0.0" + "drizzle-kit": "0.19.13-e99bac1", + "drizzle-orm": "0.28.5", + "pg": "8.11.3", + "prompts": "2.4.2", + "to-snake-case": "1.0.0" }, "devDependencies": { - "@types/pg": "^8.10.2", - "@types/to-snake-case": "^1.0.0", + "@payloadcms/eslint-config": "workspace:*", + "@types/pg": "8.10.2", + "@types/to-snake-case": "1.0.0", "better-sqlite3": "^8.5.0", - "payload": "payloadcms/payload#build/chore/update-2.0", - "typescript": "^4.9.4" - } + "payload": "workspace:*" + }, + "main": "./src/index.ts", + "types": "./src/index.ts", + "publishConfig": { + "registry": "https://registry.npmjs.org/", + "main": "./dist/index.js", + "types": "./dist/index.d.ts" + }, + "repository": "https://github.com/payloadcms/payload", + "scripts": { + "build:swc": "swc ./src -d ./dist --config-file .swcrc", + "build:types": "tsc --emitDeclarationOnly --outDir dist", + "builddisabled": "pnpm build:swc && pnpm build:types" + }, + "version": "0.0.1" } diff --git a/packages/db-postgres/src/connect.ts b/packages/db-postgres/src/connect.ts index b7120747d..0d91151fd 100644 --- a/packages/db-postgres/src/connect.ts +++ b/packages/db-postgres/src/connect.ts @@ -13,133 +13,133 @@ import { DrizzleDB } from './types'; // Migration table def in order to use query using drizzle const migrationsSchema = pgTable('payload_migrations', { - name: varchar('name'), batch: numeric('batch'), + name: varchar('name'), schema: jsonb('schema'), -}); +}) -export const connect: Connect = async function connect( - this: PostgresAdapter, - payload, -) { - let db: DrizzleDB; +export const connect: Connect = async function connect(this: PostgresAdapter, payload) { + let db: DrizzleDB this.schema = { ...this.tables, ...this.relations, ...this.enums, - }; + } try { if ('pool' in this && this.pool !== false) { - const pool = new Pool(this.pool); - db = drizzle(pool, { schema: this.schema }); - await pool.connect(); + const pool = new Pool(this.pool) + db = drizzle(pool, { schema: this.schema }) + await pool.connect() } if ('client' in this && this.client !== false) { - const client = new Client(this.client); - db = drizzle(client, { schema: this.schema }); - await client.connect(); + const client = new Client(this.client) + db = drizzle(client, { schema: this.schema }) + await client.connect() } if (process.env.PAYLOAD_DROP_DATABASE === 'true') { - this.payload.logger.info('---- DROPPING TABLES ----'); - await db.execute(sql`drop schema public cascade;\ncreate schema public;`); - this.payload.logger.info('---- DROPPED TABLES ----'); + this.payload.logger.info('---- DROPPING TABLES ----') + await db.execute(sql`drop schema public cascade;\ncreate schema public;`) + this.payload.logger.info('---- DROPPED TABLES ----') } } catch (err) { - payload.logger.error( - `Error: cannot connect to Postgres. Details: ${err.message}`, - err, - ); - process.exit(1); + payload.logger.error(`Error: cannot connect to Postgres. Details: ${err.message}`, err) + process.exit(1) } - this.payload.logger.info('Connected to Postgres successfully'); - this.db = db; + this.payload.logger.info('Connected to Postgres successfully') + this.db = db // Only push schema if not in production - if (process.env.NODE_ENV === 'production') return; + if (process.env.NODE_ENV === 'production') return // This will prompt if clarifications are needed for Drizzle to push new schema - const { hasDataLoss, warnings, statementsToExecute, apply } = await pushSchema(this.schema, this.db); + const { apply, hasDataLoss, statementsToExecute, warnings } = await pushSchema( + this.schema, + this.db, + ) this.payload.logger.debug({ - msg: 'Schema push results', hasDataLoss, - warnings, + msg: 'Schema push results', statementsToExecute, - }); + warnings, + }) if (warnings.length) { this.payload.logger.warn({ msg: `Warnings detected during schema push: ${warnings.join('\n')}`, warnings, - }); + }) if (hasDataLoss) { this.payload.logger.warn({ msg: 'DATA LOSS WARNING: Possible data loss detected if schema is pushed.', - }); + }) } const { confirm: acceptWarnings } = await prompts( { - type: 'confirm', - name: 'confirm', - message: 'Accept warnings and push schema to database?', initial: false, + message: 'Accept warnings and push schema to database?', + name: 'confirm', + type: 'confirm', }, { onCancel: () => { - process.exit(0); + process.exit(0) }, }, - ); + ) // Exit if user does not accept warnings. // Q: Is this the right type of exit for this interaction? if (!acceptWarnings) { - process.exit(0); + process.exit(0) } } - this.migrationDir = '.migrations'; + this.migrationDir = '.migrations' // Create drizzle snapshot if it doesn't exist if (!fs.existsSync(`${this.migrationDir}/drizzle-snapshot.json`)) { // Ensure migration dir exists if (!fs.existsSync(this.migrationDir)) { - fs.mkdirSync(this.migrationDir); + fs.mkdirSync(this.migrationDir) } - const drizzleJSON = generateDrizzleJson(this.schema); + const drizzleJSON = generateDrizzleJson(this.schema) - fs.writeFileSync(`${this.migrationDir}/drizzle-snapshot.json`, JSON.stringify(drizzleJSON, null, 2)); + fs.writeFileSync( + `${this.migrationDir}/drizzle-snapshot.json`, + JSON.stringify(drizzleJSON, null, 2), + ) } - const jsonSchema = configToJSONSchema(this.payload.config); + const jsonSchema = configToJSONSchema(this.payload.config) - await apply(); + await apply() const devPush = await this.db .select() .from(migrationsSchema) - .where(eq(migrationsSchema.batch, '-1')); + .where(eq(migrationsSchema.batch, '-1')) if (!devPush.length) { await this.db.insert(migrationsSchema).values({ - name: 'dev', batch: '-1', + name: 'dev', schema: JSON.stringify(jsonSchema), - }); + }) } else { await this.db .update(migrationsSchema) .set({ schema: JSON.stringify(jsonSchema), }) - .where(eq(migrationsSchema.batch, '-1')); + .where(eq(migrationsSchema.batch, '-1')) } -}; +} diff --git a/packages/db-postgres/src/create/index.ts b/packages/db-postgres/src/create/index.ts index 7c45c4567..90e4c150e 100644 --- a/packages/db-postgres/src/create/index.ts +++ b/packages/db-postgres/src/create/index.ts @@ -1,13 +1,11 @@ -import { Create } from 'payload/dist/database/types'; -import toSnakeCase from 'to-snake-case'; -import { upsertRow } from '../upsertRow'; +import type { Create } from 'payload/database' -export const create: Create = async function create({ - collection: collectionSlug, - data, - req, -}) { - const collection = this.payload.collections[collectionSlug].config; +import toSnakeCase from 'to-snake-case' + +import { upsertRow } from '../upsertRow' + +export const create: Create = async function create({ collection: collectionSlug, data, req }) { + const collection = this.payload.collections[collectionSlug].config const result = await upsertRow({ adapter: this, @@ -15,7 +13,7 @@ export const create: Create = async function create({ fields: collection.fields, operation: 'create', tableName: toSnakeCase(collectionSlug), - }); + }) - return result; -}; + return result +} diff --git a/packages/db-postgres/src/createMigration.ts b/packages/db-postgres/src/createMigration.ts index 65b3b23f0..48997924a 100644 --- a/packages/db-postgres/src/createMigration.ts +++ b/packages/db-postgres/src/createMigration.ts @@ -1,16 +1,18 @@ /* eslint-disable no-restricted-syntax, no-await-in-loop */ -import fs from 'fs'; -import { CreateMigration } from 'payload/dist/database/types'; +import type { CreateMigration } from 'payload/database' +import type { DatabaseAdapter, Init } from 'payload/database' -import { generateDrizzleJson, generateMigration } from 'drizzle-kit/utils'; -import { eq } from 'drizzle-orm'; -import { jsonb, numeric, pgEnum, pgTable, varchar } from 'drizzle-orm/pg-core'; -import { SanitizedCollectionConfig } from 'payload/dist/collections/config/types'; -import type { DatabaseAdapter, Init } from 'payload/dist/database/types'; -import { configToJSONSchema } from 'payload/dist/utilities/configToJSONSchema'; -import prompts from 'prompts'; -import { buildTable } from './schema/build'; -import type { GenericEnum, GenericRelation, GenericTable, PostgresAdapter } from './types'; +import { generateDrizzleJson, generateMigration } from 'drizzle-kit/utils' +import { eq } from 'drizzle-orm' +import { jsonb, numeric, pgEnum, pgTable, varchar } from 'drizzle-orm/pg-core' +import fs from 'fs' +import { SanitizedCollectionConfig } from 'payload/types' +import { configToJSONSchema } from 'payload/utilities' +import prompts from 'prompts' + +import type { GenericEnum, GenericRelation, GenericTable, PostgresAdapter } from './types' + +import { buildTable } from './schema/build' const migrationTemplate = (upSQL?: string) => ` import payload, { Payload } from 'payload'; @@ -22,7 +24,7 @@ export async function up(payload: Payload): Promise { export async function down(payload: Payload): Promise { // Migration code }; -`; +` export const createMigration: CreateMigration = async function createMigration( this: PostgresAdapter, @@ -30,27 +32,30 @@ export const createMigration: CreateMigration = async function createMigration( migrationDir, migrationName, ) { - payload.logger.info({ msg: 'Creating migration from postgres adapter...' }); - const dir = migrationDir || '.migrations'; // TODO: Verify path after linking + payload.logger.info({ msg: 'Creating migration from postgres adapter...' }) + const dir = migrationDir || '.migrations' // TODO: Verify path after linking if (!fs.existsSync(dir)) { - fs.mkdirSync(dir); + fs.mkdirSync(dir) } - const [yyymmdd, hhmmss] = new Date().toISOString().split('T'); - const formattedDate = yyymmdd.replace(/\D/g, ''); - const formattedTime = hhmmss.split('.')[0].replace(/\D/g, ''); + const [yyymmdd, hhmmss] = new Date().toISOString().split('T') + const formattedDate = yyymmdd.replace(/\D/g, '') + const formattedTime = hhmmss.split('.')[0].replace(/\D/g, '') - const timestamp = `${formattedDate}_${formattedTime}`; + const timestamp = `${formattedDate}_${formattedTime}` - const formattedName = migrationName.replace(/\W/g, '_'); - const fileName = `${timestamp}_${formattedName}.ts`; - const filePath = `${dir}/${fileName}`; + const formattedName = migrationName.replace(/\W/g, '_') + const fileName = `${timestamp}_${formattedName}.ts` + const filePath = `${dir}/${fileName}` - const snapshotJSON = fs.readFileSync(`${dir}/drizzle-snapshot.json`, 'utf8'); - const drizzleJsonBefore = generateDrizzleJson(JSON.parse(snapshotJSON)); - const drizzleJsonAfter = generateDrizzleJson(this.schema, drizzleJsonBefore.id); - const sqlStatements = await generateMigration(drizzleJsonBefore, drizzleJsonAfter); - fs.writeFileSync(filePath, migrationTemplate(sqlStatements.length ? sqlStatements?.join('\n') : undefined)); + const snapshotJSON = fs.readFileSync(`${dir}/drizzle-snapshot.json`, 'utf8') + const drizzleJsonBefore = generateDrizzleJson(JSON.parse(snapshotJSON)) + const drizzleJsonAfter = generateDrizzleJson(this.schema, drizzleJsonBefore.id) + const sqlStatements = await generateMigration(drizzleJsonBefore, drizzleJsonAfter) + fs.writeFileSync( + filePath, + migrationTemplate(sqlStatements.length ? sqlStatements?.join('\n') : undefined), + ) // TODO: // Get the most recent migration schema from the file system @@ -61,4 +66,4 @@ export const createMigration: CreateMigration = async function createMigration( // and then inject them each into the `migrationTemplate` above, // outputting the file into the migrations folder accordingly // also make sure to output the JSON schema snapshot into a `./migrationsDir/meta` folder like Drizzle does -}; +} diff --git a/packages/db-postgres/src/find/buildFindManyArgs.ts b/packages/db-postgres/src/find/buildFindManyArgs.ts index a0d2fb8d0..4c978f77b 100644 --- a/packages/db-postgres/src/find/buildFindManyArgs.ts +++ b/packages/db-postgres/src/find/buildFindManyArgs.ts @@ -22,14 +22,15 @@ export const buildFindManyArgs = ({ }: BuildFindQueryArgs): Record => { const result: Result = { with: {}, - }; + } const _locales: Result = { columns: { - id: false, _parentID: false, + id: false, }, - }; + where: createLocaleWhereQuery({ fallbackLocale, locale }), + } if (adapter.tables[`${tableName}_relationships`]) { result.with._relationships = { @@ -42,13 +43,14 @@ export const buildFindManyArgs = ({ } if (adapter.tables[`${tableName}_locales`]) { - result.with._locales = _locales; + result.with._locales = _locales } - const locatedBlocks: Block[] = []; - const locatedArrays: { [path: string]: ArrayField } = {}; + const locatedBlocks: Block[] = [] + const locatedArrays: { [path: string]: ArrayField } = {} traverseFields({ + _locales, adapter, currentArgs: result, currentTableName: tableName, @@ -60,7 +62,7 @@ export const buildFindManyArgs = ({ path: '', topLevelArgs: result, topLevelTableName: tableName, - }); + }) - return result; -}; + return result +} diff --git a/packages/db-postgres/src/find/buildWithFromDepth.ts b/packages/db-postgres/src/find/buildWithFromDepth.ts index 3ce96d24e..f4c79d140 100644 --- a/packages/db-postgres/src/find/buildWithFromDepth.ts +++ b/packages/db-postgres/src/find/buildWithFromDepth.ts @@ -1,13 +1,15 @@ /* eslint-disable no-param-reassign */ -import { SanitizedConfig } from 'payload/config'; -import { buildFindManyArgs } from './buildFindManyArgs'; -import { PostgresAdapter } from '../types'; +import type { SanitizedConfig } from 'payload/config' + +import type { PostgresAdapter } from '../types' + +import { buildFindManyArgs } from './buildFindManyArgs' type BuildWithFromDepthArgs = { adapter: PostgresAdapter config: SanitizedConfig depth: number - fallbackLocale?: string | false + fallbackLocale?: false | string locale?: string } @@ -19,23 +21,23 @@ export const buildWithFromDepth = ({ locale, }: BuildWithFromDepthArgs): Record | undefined => { const result = config.collections.reduce((slugs, coll) => { - const { slug } = coll; + const { slug } = coll if (depth >= 1) { const args = buildFindManyArgs({ adapter, - config, collection: coll, + config, depth: depth - 1, fallbackLocale, locale, - }); + }) - slugs[`${slug}ID`] = args; + slugs[`${slug}ID`] = args } - return slugs; - }, {}); + return slugs + }, {}) - return result; -}; + return result +} diff --git a/packages/db-postgres/src/find/traverseFields.ts b/packages/db-postgres/src/find/traverseFields.ts index 7556220e4..3b401d62d 100644 --- a/packages/db-postgres/src/find/traverseFields.ts +++ b/packages/db-postgres/src/find/traverseFields.ts @@ -12,20 +12,26 @@ type TraverseFieldArgs = { depth?: number, fields: Field[] _locales: Record - locatedArrays: { [path: string]: ArrayField }, - locatedBlocks: Block[], - path: string, - topLevelArgs: Record, + adapter: PostgresAdapter + config: SanitizedConfig + currentArgs: Record + currentTableName: string + depth?: number + fields: Field[] + locatedArrays: { [path: string]: ArrayField } + locatedBlocks: Block[] + path: string + topLevelArgs: Record topLevelTableName: string } export const traverseFields = ({ + _locales, adapter, currentArgs, currentTableName, depth, fields, - _locales, locatedArrays, locatedBlocks, path, @@ -37,39 +43,39 @@ export const traverseFields = ({ switch (field.type) { case 'array': { const withArray: Result = { - orderBy: ({ _order }, { asc }) => [asc(_order)], columns: { - _parentID: false, _order: false, + _parentID: false, }, + orderBy: ({ _order }, { asc }) => [asc(_order)], with: {}, - }; + } - const arrayTableName = `${currentTableName}_${toSnakeCase(field.name)}`; + const arrayTableName = `${currentTableName}_${toSnakeCase(field.name)}` - if (adapter.tables[`${arrayTableName}_locales`]) withArray.with._locales = _locales; - currentArgs.with[`${path}${field.name}`] = withArray; + if (adapter.tables[`${arrayTableName}_locales`]) withArray.with._locales = _locales + currentArgs.with[`${path}${field.name}`] = withArray traverseFields({ + _locales, adapter, currentArgs: withArray, currentTableName: arrayTableName, depth, fields: field.fields, - _locales, locatedArrays, locatedBlocks, path: '', topLevelArgs, topLevelTableName, - }); + }) - break; + break } case 'blocks': field.blocks.forEach((block) => { - const blockKey = `_blocks_${block.slug}`; + const blockKey = `_blocks_${block.slug}` if (!topLevelArgs[blockKey]) { const withBlock: Result = { @@ -78,52 +84,52 @@ export const traverseFields = ({ }, orderBy: ({ _order }, { asc }) => [asc(_order)], with: {}, - }; + } if (adapter.tables[`${topLevelTableName}_${toSnakeCase(block.slug)}_locales`]) withBlock.with._locales = _locales; topLevelArgs.with[blockKey] = withBlock; traverseFields({ + _locales, adapter, currentArgs: withBlock, currentTableName, depth, fields: block.fields, - _locales, locatedArrays, locatedBlocks, path, topLevelArgs, topLevelTableName, - }); + }) } - }); + }) - break; + break case 'group': traverseFields({ + _locales, adapter, currentArgs, currentTableName, depth, fields: field.fields, - _locales, locatedArrays, locatedBlocks, path: `${path}${field.name}_`, topLevelArgs, topLevelTableName, - }); + }) - break; + break default: { - break; + break } } } - }); + }) - return topLevelArgs; -}; + return topLevelArgs +} diff --git a/packages/db-postgres/src/findOne.ts b/packages/db-postgres/src/findOne.ts index f1822a68c..be82886c1 100644 --- a/packages/db-postgres/src/findOne.ts +++ b/packages/db-postgres/src/findOne.ts @@ -1,19 +1,22 @@ -import toSnakeCase from 'to-snake-case'; -import type { FindOne } from 'payload/dist/database/types'; -import type { PayloadRequest } from 'payload/dist/express/types'; -import type { SanitizedCollectionConfig } from 'payload/dist/collections/config/types'; -import buildQuery from './queries/buildQuery'; -import { buildFindManyArgs } from './find/buildFindManyArgs'; -import { transform } from './transform/read'; +import type { FindOne } from 'payload/database' +import type { SanitizedCollectionConfig } from 'payload/types' +import type { PayloadRequest } from 'payload/types' + +import toSnakeCase from 'to-snake-case' + +import { buildFindManyArgs } from './find/buildFindManyArgs' +import buildQuery from './queries/buildQuery' +import { transform } from './transform/read' export const findOne: FindOne = async function findOne({ collection, where: incomingWhere, locale, req = {} as PayloadRequest, + where, }) { - const collectionConfig: SanitizedCollectionConfig = this.payload.collections[collection].config; - const tableName = toSnakeCase(collection); + const collectionConfig: SanitizedCollectionConfig = this.payload.collections[collection].config + const tableName = toSnakeCase(collection) const { where } = await buildQuery({ adapter: this, @@ -32,11 +35,12 @@ export const findOne: FindOne = async function findOne({ findManyArgs.where = where; - const doc = await this.db.query[tableName].findFirst(findManyArgs); + const doc = await this.db.query[tableName].findFirst(findManyArgs) return transform({ config: this.payload.config, data: doc, + fallbackLocale: req.fallbackLocale, fields: collectionConfig.fields, }); }; diff --git a/packages/db-postgres/src/index.ts b/packages/db-postgres/src/index.ts index 2902f61c5..893bc3c90 100644 --- a/packages/db-postgres/src/index.ts +++ b/packages/db-postgres/src/index.ts @@ -31,16 +31,17 @@ export function postgresAdapter(args: Args): PostgresAdapterResult { // @ts-expect-error return createDatabaseAdapter({ ...args, - enums: {}, - relations: {}, - tables: {}, - payload, connect, + create, + createMigration, db: undefined, + enums: {}, + find, + // queryDrafts, + findOne, // destroy, init, - webpack, - createMigration, + payload, // beginTransaction, // rollbackTransaction, // commitTransaction, @@ -59,8 +60,8 @@ export function postgresAdapter(args: Args): PostgresAdapterResult { createVersion, // updateVersion, // deleteVersions, - }); + }) } - return adapter; + return adapter } diff --git a/packages/db-postgres/src/mock.js b/packages/db-postgres/src/mock.js index 2d27fcce3..10c24eb11 100644 --- a/packages/db-postgres/src/mock.js +++ b/packages/db-postgres/src/mock.js @@ -1 +1 @@ -exports.postgresAdapter = () => ({}); +exports.postgresAdapter = () => ({}) diff --git a/packages/db-postgres/src/queries/buildAndOrConditions.ts b/packages/db-postgres/src/queries/buildAndOrConditions.ts index a8451d32f..f2d034f10 100644 --- a/packages/db-postgres/src/queries/buildAndOrConditions.ts +++ b/packages/db-postgres/src/queries/buildAndOrConditions.ts @@ -9,7 +9,7 @@ export async function buildAndOrConditions({ joins, where, adapter, - locale, + collectionSlug, fields, tableName, selectFields, @@ -24,7 +24,7 @@ export async function buildAndOrConditions({ tableName: string, selectFields: Record }): Promise { - const completedConditions = []; + const completedConditions = [] // Loop over all AND / OR operations and add them to the AND / OR query param // Operations should come through as an array // eslint-disable-next-line no-restricted-syntax @@ -36,7 +36,7 @@ export async function buildAndOrConditions({ joins, where: condition, adapter, - locale, + collectionSlug, fields, tableName, selectFields, @@ -46,5 +46,5 @@ export async function buildAndOrConditions({ } } } - return completedConditions; + return completedConditions } diff --git a/packages/db-postgres/src/queries/buildQuery.ts b/packages/db-postgres/src/queries/buildQuery.ts index ed8277547..782ffd2a4 100644 --- a/packages/db-postgres/src/queries/buildQuery.ts +++ b/packages/db-postgres/src/queries/buildQuery.ts @@ -96,4 +96,4 @@ const buildQuery = async function buildQuery({ }; }; -export default buildQuery; +export default buildQuery diff --git a/packages/db-postgres/src/queries/operatorMap.ts b/packages/db-postgres/src/queries/operatorMap.ts index 411d6c940..a9b20a0d8 100644 --- a/packages/db-postgres/src/queries/operatorMap.ts +++ b/packages/db-postgres/src/queries/operatorMap.ts @@ -1,10 +1,14 @@ import { and, eq, gt, gte, ilike, inArray, isNotNull, isNull, lt, lte, ne, notInArray, or } from 'drizzle-orm'; export const operatorMap = { - greater_than_equal: gte, - less_than_equal: lte, - less_than: lt, + // near: near, + and, + equals: eq, + // TODO: isNotNull isn't right as it depends on if the query value is true or false + exists: isNotNull, greater_than: gt, + greater_than_equal: gte, + // TODO: in: inArray, like: ilike, // TODO: @@ -20,4 +24,4 @@ export const operatorMap = { // intersects: intersects, and, or, -}; +} diff --git a/packages/db-postgres/src/queries/parseParams.ts b/packages/db-postgres/src/queries/parseParams.ts index f9765b0a3..593498b04 100644 --- a/packages/db-postgres/src/queries/parseParams.ts +++ b/packages/db-postgres/src/queries/parseParams.ts @@ -1,4 +1,5 @@ /* eslint-disable no-restricted-syntax */ +import type { SQL } from 'drizzle-orm' /* eslint-disable no-await-in-loop */ import { Operator, Where } from 'payload/types'; import { Field } from 'payload/dist/fields/config/types'; @@ -25,7 +26,7 @@ export async function parseParams({ joins, where, adapter, - locale, + collectionSlug, fields, tableName, selectFields, @@ -118,5 +119,5 @@ export async function parseParams({ [result] = constraints; } - return result; + return result } diff --git a/packages/db-postgres/src/reference.ts b/packages/db-postgres/src/reference.ts index 5c4726480..d445c4471 100644 --- a/packages/db-postgres/src/reference.ts +++ b/packages/db-postgres/src/reference.ts @@ -4,40 +4,37 @@ // type PushDiff = (schema: DrizzleSchemaExports) => Promise<{ warnings: string[], apply: () => Promise }> - // drizzle-kit@utils -import { generateDrizzleJson, generateMigration, pushSchema } from 'drizzle-kit/utils'; -import { drizzle } from 'drizzle-orm/node-postgres'; -import { Pool } from 'pg'; +import { generateDrizzleJson, generateMigration, pushSchema } from 'drizzle-kit/utils' +import { drizzle } from 'drizzle-orm/node-postgres' +import { Pool } from 'pg' async function generateUsage() { - const schema = await import('./data/users'); - const schemaAfter = await import('./data/users-after'); + const schema = await import('./data/users') + const schemaAfter = await import('./data/users-after') - const drizzleJsonBefore = generateDrizzleJson(schema); - const drizzleJsonAfter = generateDrizzleJson(schemaAfter); + const drizzleJsonBefore = generateDrizzleJson(schema) + const drizzleJsonAfter = generateDrizzleJson(schemaAfter) - const sqlStatements = await generateMigration(drizzleJsonBefore, drizzleJsonAfter); + const sqlStatements = await generateMigration(drizzleJsonBefore, drizzleJsonAfter) - console.log(sqlStatements); + console.log(sqlStatements) } async function pushUsage() { - const schemaAfter = await import('./data/users-after'); + const schemaAfter = await import('./data/users-after') - const db = drizzle( - new Pool({ connectionString: '' }), - ); + const db = drizzle(new Pool({ connectionString: '' })) - const response = await pushSchema(schemaAfter, db); + const response = await pushSchema(schemaAfter, db) - console.log('\n'); - console.log('hasDataLoss: ', response.hasDataLoss); - console.log('warnings: ', response.warnings); - console.log('statements: ', response.statementsToExecute); + console.log('\n') + console.log('hasDataLoss: ', response.hasDataLoss) + console.log('warnings: ', response.warnings) + console.log('statements: ', response.statementsToExecute) - await response.apply(); + await response.apply() - process.exit(0); + process.exit(0) } diff --git a/packages/db-postgres/src/schema/build.ts b/packages/db-postgres/src/schema/build.ts index b9f98ae82..58da1c8d3 100644 --- a/packages/db-postgres/src/schema/build.ts +++ b/packages/db-postgres/src/schema/build.ts @@ -1,14 +1,16 @@ /* eslint-disable no-param-reassign */ +import type { Relation } from 'drizzle-orm' +import type { AnyPgColumnBuilder, IndexBuilder } from 'drizzle-orm/pg-core' +import type { Field } from 'payload/types' + +import { relations } from 'drizzle-orm' import { - AnyPgColumnBuilder, + index, integer, + numeric, pgTable, serial, - varchar, - index, - numeric, timestamp, - IndexBuilder, unique, UniqueConstraintBuilder, } from 'drizzle-orm/pg-core'; @@ -46,35 +48,35 @@ export const buildTable = ({ const columns: Record = baseColumns; const indexes: Record IndexBuilder> = {}; - let hasLocalizedField = false; - let hasLocalizedRelationshipField = false; - const localesColumns: Record = {}; - const localesIndexes: Record IndexBuilder> = {}; - let localesTable: GenericTable; + let hasLocalizedField = false + let hasLocalizedRelationshipField = false + const localesColumns: Record = {} + const localesIndexes: Record IndexBuilder> = {} + let localesTable: GenericTable - const relationships: Set = new Set(); - let relationshipsTable: GenericTable; + const relationships: Set = new Set() + let relationshipsTable: GenericTable - const arrayBlockRelations: Map = new Map(); + const arrayBlockRelations: Map = new Map() - const idField = fields.find((field) => fieldAffectsData(field) && field.name === 'id'); - let idColType = 'integer'; + const idField = fields.find((field) => fieldAffectsData(field) && field.name === 'id') + let idColType = 'integer' if (idField) { if (idField.type === 'number') { - idColType = 'numeric'; - columns.id = numeric('id').primaryKey(); + idColType = 'numeric' + columns.id = numeric('id').primaryKey() } if (idField.type === 'text') { - idColType = 'varchar'; - columns.id = varchar('id').primaryKey(); + idColType = 'varchar' + columns.id = varchar('id').primaryKey() } } else { - columns.id = serial('id').primaryKey(); + columns.id = serial('id').primaryKey() } - ({ hasLocalizedField, hasLocalizedRelationshipField } = traverseFields({ + ;({ hasLocalizedField, hasLocalizedRelationshipField } = traverseFields({ adapter, arrayBlockRelations, buildRelationships, @@ -86,11 +88,11 @@ export const buildTable = ({ newTableName: tableName, parentTableName: tableName, relationships, - })); + })) if (timestamps) { - columns.createdAt = timestamp('created_at').defaultNow().notNull(); - columns.updatedAt = timestamp('updated_at').defaultNow().notNull(); + columns.createdAt = timestamp('created_at').defaultNow().notNull() + columns.updatedAt = timestamp('updated_at').defaultNow().notNull() } const table = pgTable(tableName, columns, (cols) => { @@ -114,24 +116,27 @@ export const buildTable = ({ localesColumns._parentID = parentIDColumnMap[idColType]('_parent_id').references(() => table.id, { onDelete: 'cascade' }).notNull(); localesTable = pgTable(localeTableName, localesColumns, (cols) => { - return Object.entries(localesIndexes).reduce((acc, [colName, func]) => { - acc[colName] = func(cols); - return acc; - }, { - _localeParent: unique().on(cols._locale, cols._parentID), - }); - }); + return Object.entries(localesIndexes).reduce( + (acc, [colName, func]) => { + acc[colName] = func(cols) + return acc + }, + { + _localeParent: unique().on(cols._locale, cols._parentID), + }, + ) + }) - adapter.tables[localeTableName] = localesTable; + adapter.tables[localeTableName] = localesTable const localesTableRelations = relations(localesTable, ({ one }) => ({ _parentID: one(table, { fields: [localesTable._parentID], references: [table.id], }), - })); + })) - adapter.relations[`relations_${localeTableName}`] = localesTableRelations; + adapter.relations[`relations_${localeTableName}`] = localesTableRelations } if (buildRelationships) { @@ -141,21 +146,29 @@ export const buildTable = ({ parent: parentIDColumnMap[idColType]('parent_id').references(() => table.id, { onDelete: 'cascade' }).notNull(), path: varchar('path').notNull(), order: integer('order'), - }; + parent: parentIDColumnMap[idColType]('parent_id') + .references(() => table.id) + .notNull(), + path: varchar('path').notNull(), + } if (hasLocalizedRelationshipField) { relationshipColumns.locale = adapter.enums._locales('locale'); } relationships.forEach((relationTo) => { - const formattedRelationTo = toSnakeCase(relationTo); - let colType = 'integer'; - const relatedCollectionCustomID = adapter.payload.collections[relationTo].config.fields.find((field) => fieldAffectsData(field) && field.name === 'id'); - if (relatedCollectionCustomID?.type === 'number') colType = 'numeric'; - if (relatedCollectionCustomID?.type === 'text') colType = 'varchar'; + const formattedRelationTo = toSnakeCase(relationTo) + let colType = 'integer' + const relatedCollectionCustomID = adapter.payload.collections[ + relationTo + ].config.fields.find((field) => fieldAffectsData(field) && field.name === 'id') + if (relatedCollectionCustomID?.type === 'number') colType = 'numeric' + if (relatedCollectionCustomID?.type === 'text') colType = 'varchar' - relationshipColumns[`${relationTo}ID`] = parentIDColumnMap[colType](`${formattedRelationTo}_id`).references(() => adapter.tables[formattedRelationTo].id); - }); + relationshipColumns[`${relationTo}ID`] = parentIDColumnMap[colType]( + `${formattedRelationTo}_id`, + ).references(() => adapter.tables[formattedRelationTo].id) + }) const relationshipsTableName = `${tableName}_relationships`; @@ -172,54 +185,54 @@ export const buildTable = ({ return result; }); - adapter.tables[relationshipsTableName] = relationshipsTable; + adapter.tables[relationshipsTableName] = relationshipsTable const relationshipsTableRelations = relations(relationshipsTable, ({ one }) => { const result: Record> = { parent: one(table, { - relationName: '_relationships', fields: [relationshipsTable.parent], references: [table.id], + relationName: '_relationships', }), - }; + } relationships.forEach((relationTo) => { - const relatedTableName = toSnakeCase(relationTo); - const idColumnName = `${relationTo}ID`; + const relatedTableName = toSnakeCase(relationTo) + const idColumnName = `${relationTo}ID` result[idColumnName] = one(adapter.tables[relatedTableName], { fields: [relationshipsTable[idColumnName]], references: [adapter.tables[relatedTableName].id], - }); - }); + }) + }) - return result; - }); + return result + }) - adapter.relations[`relations_${relationshipsTableName}`] = relationshipsTableRelations; + adapter.relations[`relations_${relationshipsTableName}`] = relationshipsTableRelations } } const tableRelations = relations(table, ({ many }) => { - const result: Record> = {}; + const result: Record> = {} arrayBlockRelations.forEach((val, key) => { - result[key] = many(adapter.tables[val]); - }); + result[key] = many(adapter.tables[val]) + }) if (hasLocalizedField) { - result._locales = many(localesTable); + result._locales = many(localesTable) } if (relationships.size && relationshipsTable) { result._relationships = many(relationshipsTable, { relationName: '_relationships', - }); + }) } - return result; - }); + return result + }) adapter.relations[`relations_${tableName}`] = tableRelations; - return { arrayBlockRelations }; -}; + return { arrayBlockRelations } +} diff --git a/packages/db-postgres/src/schema/createIndex.ts b/packages/db-postgres/src/schema/createIndex.ts index 75b797ebe..30e59cf9d 100644 --- a/packages/db-postgres/src/schema/createIndex.ts +++ b/packages/db-postgres/src/schema/createIndex.ts @@ -1,16 +1,17 @@ /* eslint-disable no-param-reassign */ -import { uniqueIndex, index } from 'drizzle-orm/pg-core'; -import { GenericColumn } from '../types'; +import { index, uniqueIndex } from 'drizzle-orm/pg-core' + +import type { GenericColumn } from '../types' type CreateIndexArgs = { - name: string columnName: string + name: string unique?: boolean } -export const createIndex = ({ name, columnName, unique }: CreateIndexArgs) => { +export const createIndex = ({ columnName, name, unique }: CreateIndexArgs) => { return (table: { [x: string]: GenericColumn }) => { - if (unique) return uniqueIndex(`${columnName}_idx`).on(table[name]); - return index(`${columnName}_idx`).on(table[name]); - }; -}; + if (unique) return uniqueIndex(`${columnName}_idx`).on(table[name]) + return index(`${columnName}_idx`).on(table[name]) + } +} diff --git a/packages/db-postgres/src/schema/parentIDColumnMap.ts b/packages/db-postgres/src/schema/parentIDColumnMap.ts index e6e3965b9..eba60e8d0 100644 --- a/packages/db-postgres/src/schema/parentIDColumnMap.ts +++ b/packages/db-postgres/src/schema/parentIDColumnMap.ts @@ -1,7 +1,7 @@ -import { integer, numeric, varchar } from 'drizzle-orm/pg-core'; +import { integer, numeric, varchar } from 'drizzle-orm/pg-core' export const parentIDColumnMap = { integer, - varchar, numeric, -}; + varchar, +} diff --git a/packages/db-postgres/src/schema/traverseFields.ts b/packages/db-postgres/src/schema/traverseFields.ts index cc17f4228..3a488b0b0 100644 --- a/packages/db-postgres/src/schema/traverseFields.ts +++ b/packages/db-postgres/src/schema/traverseFields.ts @@ -26,8 +26,8 @@ type Args = { adapter: PostgresAdapter arrayBlockRelations: Map buildRelationships: boolean - columns: Record columnPrefix?: string + columns: Record fieldPrefix?: string fields: Field[] forceLocalized?: boolean @@ -60,22 +60,22 @@ export const traverseFields = ({ parentTableName, relationships, }: Args): Result => { - let hasLocalizedField = false; - let hasLocalizedRelationshipField = false; + let hasLocalizedField = false + let hasLocalizedRelationshipField = false - let parentIDColType = 'integer'; - if (columns.id instanceof PgNumericBuilder) parentIDColType = 'numeric'; - if (columns.id instanceof PgVarcharBuilder) parentIDColType = 'varchar'; + let parentIDColType = 'integer' + if (columns.id instanceof PgNumericBuilder) parentIDColType = 'numeric' + if (columns.id instanceof PgVarcharBuilder) parentIDColType = 'varchar' fields.forEach((field) => { - if ('name' in field && field.name === 'id') return; - let columnName: string; + if ('name' in field && field.name === 'id') return + let columnName: string - let targetTable = columns; - let targetIndexes = indexes; + let targetTable = columns + let targetIndexes = indexes if (fieldAffectsData(field)) { - columnName = `${columnPrefix || ''}${toSnakeCase(field.name)}`; + columnName = `${columnPrefix || ''}${toSnakeCase(field.name)}` // If field is localized, // add the column to the locale table instead of main table @@ -97,37 +97,37 @@ export const traverseFields = ({ case 'textarea': { // TODO: handle hasMany // TODO: handle min / max length - targetTable[`${fieldPrefix || ''}${field.name}`] = varchar(columnName); - break; + targetTable[`${fieldPrefix || ''}${field.name}`] = varchar(columnName) + break } case 'number': { // TODO: handle hasMany // TODO: handle min / max - targetTable[`${fieldPrefix || ''}${field.name}`] = numeric(columnName); - break; + targetTable[`${fieldPrefix || ''}${field.name}`] = numeric(columnName) + break } case 'richText': case 'json': { - targetTable[`${fieldPrefix || ''}${field.name}`] = jsonb(columnName); - break; + targetTable[`${fieldPrefix || ''}${field.name}`] = jsonb(columnName) + break } case 'date': { - break; + break } case 'point': { - break; + break } case 'radio': { - break; + break } case 'select': { - break; + break } case 'array': { @@ -145,7 +145,11 @@ export const traverseFields = ({ baseExtraConfig._parentOrder = (cols) => unique().on(cols._parentID, cols._order); } - const arrayTableName = `${newTableName}_${toSnakeCase(field.name)}`; + if (field.localized && adapter.payload.config.localization) { + baseColumns._locale = adapter.enums._locales('_locale').notNull() + } + + const arrayTableName = `${newTableName}_${toSnakeCase(field.name)}` const { arrayBlockRelations: subArrayBlockRelations } = buildTable({ adapter, @@ -153,9 +157,9 @@ export const traverseFields = ({ baseExtraConfig, fields: field.fields, tableName: arrayTableName, - }); + }) - arrayBlockRelations.set(`${fieldPrefix || ''}${field.name}`, arrayTableName); + arrayBlockRelations.set(`${fieldPrefix || ''}${field.name}`, arrayTableName) const arrayTableRelations = relations(adapter.tables[arrayTableName], ({ many, one }) => { const result: Record> = { @@ -163,22 +167,22 @@ export const traverseFields = ({ fields: [adapter.tables[arrayTableName]._parentID], references: [adapter.tables[parentTableName].id], }), - }; + } if (hasLocalesTable(field.fields)) { - result._locales = many(adapter.tables[`${arrayTableName}_locales`]); + result._locales = many(adapter.tables[`${arrayTableName}_locales`]) } subArrayBlockRelations.forEach((val, key) => { - result[key] = many(adapter.tables[val]); - }); + result[key] = many(adapter.tables[val]) + }) - return result; - }); + return result + }) - adapter.relations[`relations_${arrayTableName}`] = arrayTableRelations; + adapter.relations[`relations_${arrayTableName}`] = arrayTableRelations - break; + break } case 'blocks': { @@ -206,34 +210,37 @@ export const traverseFields = ({ baseExtraConfig, fields: block.fields, tableName: blockTableName, - }); + }) - const blockTableRelations = relations(adapter.tables[blockTableName], ({ many, one }) => { - const result: Record> = { - _parentID: one(adapter.tables[parentTableName], { - fields: [adapter.tables[blockTableName]._parentID], - references: [adapter.tables[parentTableName].id], - }), - }; + const blockTableRelations = relations( + adapter.tables[blockTableName], + ({ many, one }) => { + const result: Record> = { + _parentID: one(adapter.tables[parentTableName], { + fields: [adapter.tables[blockTableName]._parentID], + references: [adapter.tables[parentTableName].id], + }), + } - if (hasLocalesTable(block.fields)) { - result._locales = many(adapter.tables[`${blockTableName}_locales`]); - } + if (hasLocalesTable(block.fields)) { + result._locales = many(adapter.tables[`${blockTableName}_locales`]) + } - subArrayBlockRelations.forEach((val, key) => { - result[key] = many(adapter.tables[val]); - }); + subArrayBlockRelations.forEach((val, key) => { + result[key] = many(adapter.tables[val]) + }) - return result; - }); + return result + }, + ) - adapter.relations[`relations_${blockTableName}`] = blockTableRelations; + adapter.relations[`relations_${blockTableName}`] = blockTableRelations } - arrayBlockRelations.set(`_blocks_${block.slug}`, blockTableName); - }); + arrayBlockRelations.set(`_blocks_${block.slug}`, blockTableName) + }) - break; + break } case 'group': { @@ -255,11 +262,11 @@ export const traverseFields = ({ newTableName: `${parentTableName}_${toSnakeCase(field.name)}`, parentTableName, relationships, - }); + }) - if (groupHasLocalizedField) hasLocalizedField = true; - if (groupHasLocalizedRelationshipField) hasLocalizedRelationshipField = true; - break; + if (groupHasLocalizedField) hasLocalizedField = true + if (groupHasLocalizedRelationshipField) hasLocalizedRelationshipField = true + break } case 'tabs': { @@ -282,15 +289,12 @@ export const traverseFields = ({ newTableName: `${parentTableName}_${toSnakeCase(tab.name)}`, parentTableName, relationships, - }); + }) - if (tabHasLocalizedField) hasLocalizedField = true; - if (tabHasLocalizedRelationshipField) hasLocalizedRelationshipField = true; + if (tabHasLocalizedField) hasLocalizedField = true + if (tabHasLocalizedRelationshipField) hasLocalizedRelationshipField = true } else { - ({ - hasLocalizedField, - hasLocalizedRelationshipField, - } = traverseFields({ + ;({ hasLocalizedField, hasLocalizedRelationshipField } = traverseFields({ adapter, arrayBlockRelations, buildRelationships, @@ -302,18 +306,15 @@ export const traverseFields = ({ newTableName: parentTableName, parentTableName, relationships, - })); + })) } - }); - break; + }) + break } case 'row': case 'collapsible': { - ({ - hasLocalizedField, - hasLocalizedRelationshipField, - } = traverseFields({ + ;({ hasLocalizedField, hasLocalizedRelationshipField } = traverseFields({ adapter, arrayBlockRelations, buildRelationships, @@ -325,27 +326,27 @@ export const traverseFields = ({ newTableName: parentTableName, parentTableName, relationships, - })); - break; + })) + break } case 'relationship': case 'upload': if (Array.isArray(field.relationTo)) { - field.relationTo.forEach((relation) => relationships.add(relation)); + field.relationTo.forEach((relation) => relationships.add(relation)) } else { - relationships.add(field.relationTo); + relationships.add(field.relationTo) } if (field.localized && adapter.payload.config.localization) { hasLocalizedRelationshipField = true; } - break; + break default: - break; + break } - }); + }) - return { hasLocalizedField, hasLocalizedRelationshipField }; -}; + return { hasLocalizedField, hasLocalizedRelationshipField } +} diff --git a/packages/db-postgres/src/transform/read/index.ts b/packages/db-postgres/src/transform/read/index.ts index 1d467a2e8..70766b6a0 100644 --- a/packages/db-postgres/src/transform/read/index.ts +++ b/packages/db-postgres/src/transform/read/index.ts @@ -9,7 +9,7 @@ import { createBlocksMap } from '../../utilities/createBlocksMap'; type TransformArgs = { config: SanitizedConfig data: Record - fallbackLocale?: string | false + fallbackLocale?: false | string fields: Field[] locale?: string } @@ -21,14 +21,14 @@ export const transform = ({ data, fields, }: TransformArgs): T => { - let relationships: Record[]> = {}; + let relationships: Record[]> = {} if ('_relationships' in data) { - relationships = createRelationshipMap(data._relationships); - delete data._relationships; + relationships = createRelationshipMap(data._relationships) + delete data._relationships } - const blocks = createBlocksMap(data); + const blocks = createBlocksMap(data) const result = traverseFields({ blocks, diff --git a/packages/db-postgres/src/transform/read/traverseFields.ts b/packages/db-postgres/src/transform/read/traverseFields.ts index 594ae9c7f..bf3d4cb6e 100644 --- a/packages/db-postgres/src/transform/read/traverseFields.ts +++ b/packages/db-postgres/src/transform/read/traverseFields.ts @@ -55,7 +55,7 @@ export const traverseFields = >({ siblingData, table, }: TraverseFieldsArgs): T => { - const sanitizedPath = path ? `${path}.` : path; + const sanitizedPath = path ? `${path}.` : path const formatted = fields.reduce((result, field) => { if (fieldAffectsData(field)) { @@ -160,8 +160,8 @@ export const traverseFields = >({ }); } - return {}; - }); + return {} + }) } } @@ -181,7 +181,7 @@ export const traverseFields = >({ if (!relationsByLocale[row.locale]) relationsByLocale[row.locale] = []; relationsByLocale[row.locale].push(row); } - }); + }) Object.entries(relationsByLocale).forEach(([locale, relations]) => { transformRelationship({ @@ -233,7 +233,7 @@ export const traverseFields = >({ delete table[subFieldKey]; } } - }); + }) if (field.localized) { Object.entries(ref).forEach(([groupLocale, groupLocaleData]) => { @@ -310,11 +310,11 @@ export const traverseFields = >({ result[field.name] = localizedFieldData; } - return result; + return result } - return siblingData; - }, siblingData); + return siblingData + }, siblingData) - return formatted as T; -}; + return formatted as T +} diff --git a/packages/db-postgres/src/transform/write/index.ts b/packages/db-postgres/src/transform/write/index.ts index 942be8023..4a3167755 100644 --- a/packages/db-postgres/src/transform/write/index.ts +++ b/packages/db-postgres/src/transform/write/index.ts @@ -1,7 +1,9 @@ /* eslint-disable no-param-reassign */ -import { Field } from 'payload/types'; -import { traverseFields } from './traverseFields'; -import { RowToInsert } from './types'; +import type { Field } from 'payload/types' + +import type { RowToInsert } from './types' + +import { traverseFields } from './traverseFields' type Args = { data: Record @@ -22,9 +24,8 @@ export const transformForWrite = ({ row: {}, locales: {}, relationships: [], - blocks: {}, - arrays: {}, - }; + row: {}, + } // This function is responsible for building up the // above rowToInsert @@ -40,7 +41,7 @@ export const transformForWrite = ({ path, relationships: rowToInsert.relationships, row: rowToInsert.row, - }); + }) - return rowToInsert; -}; + return rowToInsert +} diff --git a/packages/db-postgres/src/transform/write/traverseFields.ts b/packages/db-postgres/src/transform/write/traverseFields.ts index 6a3af2b67..93fc82c3d 100644 --- a/packages/db-postgres/src/transform/write/traverseFields.ts +++ b/packages/db-postgres/src/transform/write/traverseFields.ts @@ -159,7 +159,7 @@ export const traverseFields = ({ path: `${path || ''}${field.name}.`, relationships, row, - }); + }) } } @@ -320,5 +320,5 @@ export const traverseFields = ({ } }); } - }); -}; + }) +} diff --git a/packages/db-postgres/src/transform/write/types.ts b/packages/db-postgres/src/transform/write/types.ts index b9545abe8..524091ae8 100644 --- a/packages/db-postgres/src/transform/write/types.ts +++ b/packages/db-postgres/src/transform/write/types.ts @@ -7,6 +7,9 @@ export type ArrayRowToInsert = { arrays: { [tableName: string]: ArrayRowToInsert[] } + columnName: string + locale: Record + row: Record } export type BlockRowToInsert = { @@ -17,6 +20,8 @@ export type BlockRowToInsert = { arrays: { [tableName: string]: ArrayRowToInsert[] } + locale: Record + row: Record } export type RowToInsert = { @@ -31,4 +36,10 @@ export type RowToInsert = { arrays: { [tableName: string]: ArrayRowToInsert[] } + blocks: { + [blockType: string]: BlockRowToInsert[] + } + locale: Record + relationships: Record[] + row: Record } diff --git a/packages/db-postgres/src/types.ts b/packages/db-postgres/src/types.ts index b08b4ee0d..b0459af93 100644 --- a/packages/db-postgres/src/types.ts +++ b/packages/db-postgres/src/types.ts @@ -1,20 +1,20 @@ -import { ColumnBaseConfig, ColumnDataType, Relation, Relations } from 'drizzle-orm'; -import { NodePgDatabase } from 'drizzle-orm/node-postgres'; -import { PgColumn, PgEnum, PgTableWithColumns } from 'drizzle-orm/pg-core'; -import { Payload } from 'payload'; -import { DatabaseAdapter } from 'payload/dist/database/types'; -import { ClientConfig, PoolConfig } from 'pg'; +import type { ColumnBaseConfig, ColumnDataType, Relation, Relations } from 'drizzle-orm' +import type { NodePgDatabase } from 'drizzle-orm/node-postgres' +import type { PgColumn, PgEnum, PgTableWithColumns } from 'drizzle-orm/pg-core' +import type { Payload } from 'payload' +import type { DatabaseAdapter } from 'payload/database' +import type { ClientConfig, PoolConfig } from 'pg' export type DrizzleDB = NodePgDatabase> type BaseArgs = { - migrationDir?: string; - migrationName?: string; + migrationDir?: string + migrationName?: string } type ClientArgs = { /** Client connection options for the Node package `pg` */ - client?: ClientConfig | string | false + client?: ClientConfig | false | string } & BaseArgs type PoolArgs = { @@ -24,26 +24,33 @@ type PoolArgs = { export type Args = ClientArgs | PoolArgs -export type GenericColumn = PgColumn, Record> +export type GenericColumn = PgColumn< + ColumnBaseConfig, + Record +> export type GenericColumns = { [x: string]: GenericColumn } export type GenericTable = PgTableWithColumns<{ - name: string, schema: undefined, columns: GenericColumns, dialect: string + columns: GenericColumns + dialect: string + name: string + schema: undefined }> export type GenericEnum = PgEnum<[string, ...string[]]> export type GenericRelation = Relations>> -export type PostgresAdapter = DatabaseAdapter & Args & { - db: DrizzleDB - enums: Record - relations: Record - tables: Record - schema: Record -} +export type PostgresAdapter = DatabaseAdapter & + Args & { + db: DrizzleDB + enums: Record + relations: Record + schema: Record + tables: Record + } export type PostgresAdapterResult = (args: { payload: Payload }) => PostgresAdapter diff --git a/packages/db-postgres/src/update/index.ts b/packages/db-postgres/src/update/index.ts index 4fe78da09..481e4a256 100644 --- a/packages/db-postgres/src/update/index.ts +++ b/packages/db-postgres/src/update/index.ts @@ -1,8 +1,10 @@ -import { UpdateOne } from 'payload/dist/database/types'; -import toSnakeCase from 'to-snake-case'; -import { SQL } from 'drizzle-orm'; -import buildQuery from '../queries/buildQuery'; -import { upsertRow } from '../upsertRow'; +import type { SQL } from 'drizzle-orm' +import type { UpdateOne } from 'payload/database' + +import toSnakeCase from 'to-snake-case' + +import buildQuery from '../queries/buildQuery' +import { upsertRow } from '../upsertRow' export const updateOne: UpdateOne = async function updateOne({ collection: collectionSlug, @@ -13,9 +15,9 @@ export const updateOne: UpdateOne = async function updateOne({ req, where, }) { - const collection = this.payload.collections[collectionSlug].config; + const collection = this.payload.collections[collectionSlug].config - let query: SQL; + let query: SQL if (where) { query = await buildQuery({ @@ -23,7 +25,7 @@ export const updateOne: UpdateOne = async function updateOne({ collectionSlug, locale, where, - }); + }) } const result = await upsertRow({ @@ -35,7 +37,7 @@ export const updateOne: UpdateOne = async function updateOne({ operation: 'update', tableName: toSnakeCase(collectionSlug), where: query, - }); + }) - return result; -}; + return result +} diff --git a/packages/db-postgres/src/upsertRow/index.ts b/packages/db-postgres/src/upsertRow/index.ts index 74e9c1e77..0c1c82fd4 100644 --- a/packages/db-postgres/src/upsertRow/index.ts +++ b/packages/db-postgres/src/upsertRow/index.ts @@ -27,29 +27,33 @@ export const upsertRow = async ({ fields, path, tableName, - }); + }) // First, we insert the main row - let insertedRow: Record; + let insertedRow: Record if (operation === 'update') { - const target = upsertTarget || adapter.tables[tableName].id; + const target = upsertTarget || adapter.tables[tableName].id if (id) { - rowToInsert.row.id = id; - [insertedRow] = await adapter.db.insert(adapter.tables[tableName]) + rowToInsert.row.id = id + ;[insertedRow] = await adapter.db + .insert(adapter.tables[tableName]) .values(rowToInsert.row) - .onConflictDoUpdate({ target, set: rowToInsert.row }) - .returning(); + .onConflictDoUpdate({ set: rowToInsert.row, target }) + .returning() } else { - [insertedRow] = await adapter.db.insert(adapter.tables[tableName]) + ;[insertedRow] = await adapter.db + .insert(adapter.tables[tableName]) .values(rowToInsert.row) - .onConflictDoUpdate({ target, set: rowToInsert.row, where }) - .returning(); + .onConflictDoUpdate({ set: rowToInsert.row, target, where }) + .returning() } } else { - [insertedRow] = await adapter.db.insert(adapter.tables[tableName]) - .values(rowToInsert.row).returning(); + ;[insertedRow] = await adapter.db + .insert(adapter.tables[tableName]) + .values(rowToInsert.row) + .returning() } const localesToInsert: Record[] = []; @@ -58,7 +62,7 @@ export const upsertRow = async ({ // Maintain a list of promises to run locale, blocks, and relationships // all in parallel - const promises = []; + const promises = [] // If there are locale rows with data, add the parent and locale to each if (Object.keys(rowToInsert.locales).length > 0) { @@ -72,20 +76,20 @@ export const upsertRow = async ({ // If there are relationships, add parent to each if (rowToInsert.relationships.length > 0) { rowToInsert.relationships.forEach((relation) => { - relation.parent = insertedRow.id; - relationsToInsert.push(relation); - }); + relation.parent = insertedRow.id + relationsToInsert.push(relation) + }) } // If there are blocks, add parent to each, and then // store by table name and rows Object.keys(rowToInsert.blocks).forEach((blockName) => { rowToInsert.blocks[blockName].forEach((blockRow) => { - blockRow.row._parentID = insertedRow.id; - if (!blocksToInsert[blockName]) blocksToInsert[blockName] = []; - blocksToInsert[blockName].push(blockRow); - }); - }); + blockRow.row._parentID = insertedRow.id + if (!blocksToInsert[blockName]) blocksToInsert[blockName] = [] + blocksToInsert[blockName].push(blockRow) + }) + }) // ////////////////////////////////// // INSERT LOCALES @@ -131,7 +135,7 @@ export const upsertRow = async ({ // INSERT BLOCKS // ////////////////////////////////// - const insertedBlockRows: Record[]> = {}; + const insertedBlockRows: Record[]> = {} Object.entries(blocksToInsert).forEach(([blockName, blockRows]) => { // For each block, push insert into promises to run parallel @@ -153,7 +157,7 @@ export const upsertRow = async ({ blockRows[i].row = row; }); - const blockLocaleIndexMap: number[] = []; + const blockLocaleIndexMap: number[] = [] const blockLocaleRowsToInsert = blockRows.reduce((acc, blockRow, i) => { if (Object.entries(blockRow.locales).length > 0) { @@ -167,8 +171,8 @@ export const upsertRow = async ({ }); } - return acc; - }, []); + return acc + }, []) if (blockLocaleRowsToInsert.length > 0) { await adapter.db.insert(adapter.tables[`${tableName}_${blockName}_locales`]) @@ -179,9 +183,9 @@ export const upsertRow = async ({ adapter, arrays: blockRows.map(({ arrays }) => arrays), parentRows: insertedBlockRows[blockName], - }); - }); - }); + }) + }) + }) // ////////////////////////////////// // INSERT ARRAYS RECURSIVELY @@ -202,10 +206,10 @@ export const upsertRow = async ({ adapter, arrays: [rowToInsert.arrays], parentRows: [insertedRow], - }); - }); + }) + }) - await Promise.all(promises.map((promise) => promise())); + await Promise.all(promises.map((promise) => promise())) // ////////////////////////////////// // RETRIEVE NEWLY UPDATED ROW @@ -232,5 +236,5 @@ export const upsertRow = async ({ fields, }); - return result; -}; + return result +} diff --git a/packages/db-postgres/src/upsertRow/insertArrays.ts b/packages/db-postgres/src/upsertRow/insertArrays.ts index 89bc1181d..cc3b0362d 100644 --- a/packages/db-postgres/src/upsertRow/insertArrays.ts +++ b/packages/db-postgres/src/upsertRow/insertArrays.ts @@ -26,7 +26,7 @@ export const insertArrays = async ({ parentRows, }: Args): Promise => { // Maintain a map of flattened rows by table - const rowsByTable: RowsByTable = {}; + const rowsByTable: RowsByTable = {} arrays.forEach((arraysByTable, parentRowIndex) => { Object.entries(arraysByTable).forEach(([tableName, arrayRows]) => { @@ -39,13 +39,13 @@ export const insertArrays = async ({ }; } - const parentID = parentRows[parentRowIndex].id; + const parentID = parentRows[parentRowIndex].id // Add any sub arrays that need to be created // We will call this recursively below arrayRows.forEach((arrayRow) => { if (Object.keys(arrayRow.arrays).length > 0) { - rowsByTable[tableName].arrays.push(arrayRow.arrays); + rowsByTable[tableName].arrays.push(arrayRow.arrays) } // Set up parent IDs for both row and locale row diff --git a/packages/db-postgres/src/upsertRow/types.ts b/packages/db-postgres/src/upsertRow/types.ts index cf7897f03..7b2d99199 100644 --- a/packages/db-postgres/src/upsertRow/types.ts +++ b/packages/db-postgres/src/upsertRow/types.ts @@ -1,6 +1,7 @@ -import { Field } from 'payload/types'; -import { SQL } from 'drizzle-orm'; -import { GenericColumn, PostgresAdapter } from '../types'; +import type { SQL } from 'drizzle-orm' +import type { Field } from 'payload/types' + +import type { GenericColumn, PostgresAdapter } from '../types' type BaseArgs = { adapter: PostgresAdapter @@ -11,17 +12,17 @@ type BaseArgs = { } type CreateArgs = BaseArgs & { - upsertTarget?: never - where?: never id?: never operation: 'create' + upsertTarget?: never + where?: never } type UpdateArgs = BaseArgs & { - upsertTarget?: GenericColumn + id?: number | string operation: 'update' + upsertTarget?: GenericColumn where?: SQL - id?: string | number } export type Args = CreateArgs | UpdateArgs diff --git a/packages/db-postgres/src/utilities/createBlocksMap.ts b/packages/db-postgres/src/utilities/createBlocksMap.ts index 44366c4fe..ac48014f9 100644 --- a/packages/db-postgres/src/utilities/createBlocksMap.ts +++ b/packages/db-postgres/src/utilities/createBlocksMap.ts @@ -4,38 +4,38 @@ export type BlocksMap = { } export const createBlocksMap = (data: Record): BlocksMap => { - const blocksMap: BlocksMap = {}; + const blocksMap: BlocksMap = {} Object.entries(data).forEach(([key, rows]) => { if (key.startsWith('_blocks_') && Array.isArray(rows)) { - const blockType = key.replace('_blocks_', ''); + const blockType = key.replace('_blocks_', '') rows.forEach((row) => { if ('_path' in row) { - if (!(row._path in blocksMap)) blocksMap[row._path] = []; + if (!(row._path in blocksMap)) blocksMap[row._path] = [] - row.blockType = blockType; - blocksMap[row._path].push(row); + row.blockType = blockType + blocksMap[row._path].push(row) delete row._path; } - }); + }) - delete data[key]; + delete data[key] } - }); + }) Object.entries(blocksMap).reduce((sortedBlocksMap, [path, blocks]) => { sortedBlocksMap[path] = blocks.sort((a, b) => { if (typeof a._order === 'number' && typeof b._order === 'number') { - return a._order - b._order; + return a._order - b._order } - return 0; - }); + return 0 + }) - return sortedBlocksMap; - }, {}); + return sortedBlocksMap + }, {}) - return blocksMap; -}; + return blocksMap +} diff --git a/packages/db-postgres/src/utilities/createRelationshipMap.ts b/packages/db-postgres/src/utilities/createRelationshipMap.ts index e2f1cca16..2ea7b2766 100644 --- a/packages/db-postgres/src/utilities/createRelationshipMap.ts +++ b/packages/db-postgres/src/utilities/createRelationshipMap.ts @@ -1,22 +1,24 @@ // Flatten relationships to object with path keys // for easier retrieval -export const createRelationshipMap = (rawRelationships: unknown): Record[]> => { - let relationships = {}; +export const createRelationshipMap = ( + rawRelationships: unknown, +): Record[]> => { + let relationships = {} if (Array.isArray(rawRelationships)) { relationships = rawRelationships.reduce((res, relation) => { const formattedRelation = { ...relation, - }; + } - delete formattedRelation.path; + delete formattedRelation.path - if (!res[relation.path]) res[relation.path] = []; - res[relation.path].push(formattedRelation); + if (!res[relation.path]) res[relation.path] = [] + res[relation.path].push(formattedRelation) - return res; - }, {}); + return res + }, {}) } - return relationships; -}; + return relationships +} diff --git a/packages/db-postgres/src/utilities/hasLocalesTable.ts b/packages/db-postgres/src/utilities/hasLocalesTable.ts index 460a611c7..ef4963124 100644 --- a/packages/db-postgres/src/utilities/hasLocalesTable.ts +++ b/packages/db-postgres/src/utilities/hasLocalesTable.ts @@ -1,11 +1,12 @@ -import { fieldAffectsData, fieldHasSubFields } from 'payload/dist/fields/config/types'; -import { Field } from 'payload/types'; +import type { Field } from 'payload/types' + +import { fieldAffectsData, fieldHasSubFields } from 'payload/types' export const hasLocalesTable = (fields: Field[]): boolean => { return fields.some((field) => { - if (fieldAffectsData(field) && field.localized) return true; - if (fieldHasSubFields(field) && field.type !== 'array') return hasLocalesTable(field.fields); - if (field.type === 'tabs') return field.tabs.some((tab) => hasLocalesTable(tab.fields)); - return false; - }); -}; + if (fieldAffectsData(field) && field.localized) return true + if (fieldHasSubFields(field) && field.type !== 'array') return hasLocalesTable(field.fields) + if (field.type === 'tabs') return field.tabs.some((tab) => hasLocalesTable(tab.fields)) + return false + }) +} diff --git a/packages/db-postgres/src/utilities/isArrayOfRows.ts b/packages/db-postgres/src/utilities/isArrayOfRows.ts index 3390d6773..ef8528bfa 100644 --- a/packages/db-postgres/src/utilities/isArrayOfRows.ts +++ b/packages/db-postgres/src/utilities/isArrayOfRows.ts @@ -1,3 +1,3 @@ export function isArrayOfRows(data: unknown): data is Record[] { - return Array.isArray(data); + return Array.isArray(data) } diff --git a/packages/db-postgres/src/webpack.ts b/packages/db-postgres/src/webpack.ts index 82a02c195..e60d64609 100644 --- a/packages/db-postgres/src/webpack.ts +++ b/packages/db-postgres/src/webpack.ts @@ -1,15 +1,16 @@ -import path from 'path'; -import type { Webpack } from 'payload/dist/database/types'; +import type { Webpack } from 'payload/database' + +import path from 'path' export const webpack: Webpack = (config) => { return { ...config, resolve: { - ...config.resolve || {}, + ...(config.resolve || {}), alias: { - ...config.resolve?.alias || {}, + ...(config.resolve?.alias || {}), [path.resolve(__dirname, './index')]: path.resolve(__dirname, 'mock'), }, }, - }; -}; + } +} diff --git a/packages/db-postgres/tsconfig.json b/packages/db-postgres/tsconfig.json index 09df301cd..8aa2b2102 100644 --- a/packages/db-postgres/tsconfig.json +++ b/packages/db-postgres/tsconfig.json @@ -1,11 +1,24 @@ { + "extends": "../../tsconfig.json", "compilerOptions": { - "declaration": true, /* Generates corresponding '.d.ts' file. */ - "module": "commonjs", /* Specify what module code is generated. */ - "rootDir": "./src", /* Specify the root folder within your source files. */ - "outDir": "./dist", /* Specify an output folder for all emitted files. */ - "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ - "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } + "composite": true, // Make sure typescript knows that this module depends on their references + "noEmit": false /* Do not emit outputs. */, + "emitDeclarationOnly": true, + "outDir": "./dist" /* Specify an output folder for all emitted files. */, + "rootDir": "./src" /* Specify the root folder within your source files. */ + }, + "exclude": [ + "dist", + "build", + "tests", + "test", + "node_modules", + ".eslintrc.js", + "src/**/*.spec.js", + "src/**/*.spec.jsx", + "src/**/*.spec.ts", + "src/**/*.spec.tsx" + ], + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.d.ts", "src/**/*.json"], + "references": [{ "path": "../payload" }] // db-postgres depends on payload } diff --git a/packages/db-postgres/yarn.lock b/packages/db-postgres/yarn.lock deleted file mode 100644 index 1cf3c4e87..000000000 --- a/packages/db-postgres/yarn.lock +++ /dev/null @@ -1,6496 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3" - integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA== - dependencies: - "@babel/highlight" "^7.22.10" - chalk "^2.4.2" - -"@babel/helper-module-imports@^7.16.7": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" - integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" - integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== - -"@babel/helper-validator-identifier@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" - integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== - -"@babel/highlight@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7" - integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ== - dependencies: - "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/runtime@^7.1.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.19.0", "@babel/runtime@^7.20.6", "@babel/runtime@^7.21.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682" - integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/types@^7.22.5": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03" - integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg== - dependencies: - "@babel/helper-string-parser" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.5" - to-fast-properties "^2.0.0" - -"@bcherny/json-schema-ref-parser@9.0.9": - version "9.0.9" - resolved "https://registry.yarnpkg.com/@bcherny/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz#09899d405bc708c0acac0066ae8db5b94d465ca4" - integrity sha512-vmEmnJCfpkLdas++9OYg6riIezTYqTHpqUTODJzHLzs5UnXujbOJW9VwcVCnyo1mVRt32FRr23iXBx/sX8YbeQ== - dependencies: - "@jsdevtools/ono" "^7.1.3" - "@types/json-schema" "^7.0.6" - call-me-maybe "^1.0.1" - js-yaml "^4.1.0" - -"@csstools/cascade-layer-name-parser@^1.0.3", "@csstools/cascade-layer-name-parser@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.4.tgz#3ff490b84660dc0592b4315029f22908f3de0577" - integrity sha512-zXMGsJetbLoXe+gjEES07MEGjL0Uy3hMxmnGtVBrRpVKr5KV9OgCB09zr/vLrsEtoVQTgJFewxaU8IYSAE4tjg== - -"@csstools/color-helpers@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-3.0.0.tgz#b64a9d86663b6d843b169f5da300f78c0242efc2" - integrity sha512-rBODd1rY01QcenD34QxbQxLc1g+Uh7z1X/uzTHNQzJUnFCT9/EZYI7KWq+j0YfWMXJsRJ8lVkqBcB0R/qLr+yg== - -"@csstools/css-calc@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-1.1.3.tgz#75e07eec075f1f3df0ce25575dab3d63da2bd680" - integrity sha512-7mJZ8gGRtSQfQKBQFi5N0Z+jzNC0q8bIkwojP1W0w+APzEqHu5wJoGVsvKxVnVklu9F8tW1PikbBRseYnAdv+g== - -"@csstools/css-color-parser@^1.2.2": - version "1.2.3" - resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-1.2.3.tgz#0cd0f72c50894a623ae09f19e30bbfb298769f59" - integrity sha512-YaEnCoPTdhE4lPQFH3dU4IEk8S+yCnxS88wMv45JzlnMfZp57hpqA6qf2gX8uv7IJTJ/43u6pTQmhy7hCjlz7g== - dependencies: - "@csstools/color-helpers" "^3.0.0" - "@csstools/css-calc" "^1.1.3" - -"@csstools/css-parser-algorithms@^2.3.0", "@csstools/css-parser-algorithms@^2.3.1": - version "2.3.1" - resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.1.tgz#ec4fc764ba45d2bb7ee2774667e056aa95003f3a" - integrity sha512-xrvsmVUtefWMWQsGgFffqWSK03pZ1vfDki4IVIIUxxDKnGBzqNgv0A7SB1oXtVNEkcVO8xi1ZrTL29HhSu5kGA== - -"@csstools/css-tokenizer@^2.1.1", "@csstools/css-tokenizer@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.0.tgz#9d70e6dcbe94e44c7400a2929928db35c4de32b5" - integrity sha512-wErmsWCbsmig8sQKkM6pFhr/oPha1bHfvxsUY5CYSQxwyhA9Ulrs8EqCgClhg4Tgg2XapVstGqSVcz0xOYizZA== - -"@csstools/media-query-list-parser@^2.1.2", "@csstools/media-query-list-parser@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.4.tgz#0017f99945f6c16dd81a7aacf6821770933c3a5c" - integrity sha512-V/OUXYX91tAC1CDsiY+HotIcJR+vPtzrX8pCplCpT++i8ThZZsq5F5dzZh/bDM3WUOjrvC1ljed1oSJxMfjqhw== - -"@csstools/postcss-cascade-layers@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.0.tgz#21f8556de640f9f9ccfb950c49a886280fe5497e" - integrity sha512-dVPVVqQG0FixjM9CG/+8eHTsCAxRKqmNh6H69IpruolPlnEF1611f2AoLK8TijTSAsqBSclKd4WHs1KUb/LdJw== - dependencies: - "@csstools/selector-specificity" "^3.0.0" - postcss-selector-parser "^6.0.13" - -"@csstools/postcss-color-function@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-3.0.1.tgz#2f688783f9e8b2496bd0df6edbfb47b8300f01af" - integrity sha512-+vrvCQeUifpMeyd42VQ3JPWGQ8cO19+TnGbtfq1SDSgZzRapCQO4aK9h/jhMOKPnxGzbA57oS0aHgP/12N9gSQ== - dependencies: - "@csstools/css-color-parser" "^1.2.2" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - -"@csstools/postcss-color-mix-function@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.1.tgz#51c5656bcbee9d02d00d10ddcdb0a55486573fd4" - integrity sha512-Z5cXkLiccKIVcUTe+fAfjUD7ZUv0j8rq3dSoBpM6I49dcw+50318eYrwUZa3nyb4xNx7ntNNUPmesAc87kPE2Q== - dependencies: - "@csstools/css-color-parser" "^1.2.2" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - -"@csstools/postcss-exponential-functions@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.0.tgz#2e558ad2856e0c737d9cb98a5d91cfe8d785c9f6" - integrity sha512-FPndJ/7oGlML7/4EhLi902wGOukO0Nn37PjwOQGc0BhhjQPy3np3By4d3M8s9Cfmp9EHEKgUHRN2DQ5HLT/hTw== - dependencies: - "@csstools/css-calc" "^1.1.3" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - -"@csstools/postcss-font-format-keywords@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-3.0.0.tgz#9ca3a3ca67122862addf8a1c0c61a6db02dea1cc" - integrity sha512-ntkGj+1uDa/u6lpjPxnkPcjJn7ChO/Kcy08YxctOZI7vwtrdYvFhmE476dq8bj1yna306+jQ9gzXIG/SWfOaRg== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-gradients-interpolation-method@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.1.tgz#abbe5ec9992b850c4330da2f1b57e73d2f5f5086" - integrity sha512-IHeFIcksjI8xKX7PWLzAyigM3UvJdZ4btejeNa7y/wXxqD5dyPPZuY55y8HGTrS6ETVTRqfIznoCPtTzIX7ygQ== - dependencies: - "@csstools/css-color-parser" "^1.2.2" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - -"@csstools/postcss-hwb-function@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.1.tgz#72f47fae09e0dc48be4bd94cab15e6e98cc6de00" - integrity sha512-FYe2K8EOYlL1BUm2HTXVBo6bWAj0xl4khOk6EFhQHy/C5p3rlr8OcetzQuwMeNQ3v25nB06QTgqUHoOUwoEqhA== - dependencies: - "@csstools/css-color-parser" "^1.2.2" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - -"@csstools/postcss-ic-unit@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.0.tgz#bbc55170d880daa3cc096ee160e8f2492a48e881" - integrity sha512-FH3+zfOfsgtX332IIkRDxiYLmgwyNk49tfltpC6dsZaO4RV2zWY6x9VMIC5cjvmjlDO7DIThpzqaqw2icT8RbQ== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-is-pseudo-class@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.0.tgz#954c489cf207a7cfeaf4d96d39fac50757dc48cf" - integrity sha512-0I6siRcDymG3RrkNTSvHDMxTQ6mDyYE8awkcaHNgtYacd43msl+4ZWDfQ1yZQ/viczVWjqJkLmPiRHSgxn5nZA== - dependencies: - "@csstools/selector-specificity" "^3.0.0" - postcss-selector-parser "^6.0.13" - -"@csstools/postcss-logical-float-and-clear@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-2.0.0.tgz#15e1b5d16dce01ad1e676167d0909e3958234eb5" - integrity sha512-Wki4vxsF6icRvRz8eF9bPpAvwaAt0RHwhVOyzfoFg52XiIMjb6jcbHkGxwpJXP4DVrnFEwpwmrz5aTRqOW82kg== - -"@csstools/postcss-logical-resize@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-resize/-/postcss-logical-resize-2.0.0.tgz#751bd5aab335c9973e346e3edacb2a0a16fa8296" - integrity sha512-lCQ1aX8c5+WI4t5EoYf3alTzJNNocMqTb+u1J9CINdDhFh1fjovqK+0aHalUHsNstZmzFPNzIkU4Mb3eM9U8SA== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-logical-viewport-units@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.1.tgz#2921034d11d60ea7340ebe795bb4fe60f32ebbae" - integrity sha512-R5s19SscS7CHoxvdYNMu2Y3WDwG4JjdhsejqjunDB1GqfzhtHSvL7b5XxCkUWqm2KRl35hI6kJ4HEaCDd/3BXg== - dependencies: - "@csstools/css-tokenizer" "^2.2.0" - -"@csstools/postcss-media-minmax@^1.0.7": - version "1.0.7" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.0.7.tgz#6701cf1141d28b5240de9bfae083c8a0af0daa00" - integrity sha512-5LGLdu8cJgRPmvkjUNqOPKIKeHbyQmoGKooB5Rh0mp5mLaNI9bl+IjFZ2keY0cztZYsriJsGf6Lu8R5XetuwoQ== - dependencies: - "@csstools/css-calc" "^1.1.3" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - "@csstools/media-query-list-parser" "^2.1.4" - -"@csstools/postcss-media-queries-aspect-ratio-number-values@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.2.tgz#8cb8865ad6311756b5de5179fb65b9c008406b69" - integrity sha512-kQJR6NvTRidsaRjCdHGjra2+fLoFiDQOm5B2aZrhmXqng/hweXjruboKzB326rxQO2L0m0T+gCKbZgyuncyhLg== - dependencies: - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - "@csstools/media-query-list-parser" "^2.1.4" - -"@csstools/postcss-nested-calc@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-3.0.0.tgz#b9069f5e1c2ea08de3840a5922e39af4e0ecf4b1" - integrity sha512-HsB66aDWAouOwD/GcfDTS0a7wCuVWaTpXcjl5VKP0XvFxDiU+r0T8FG7xgb6ovZNZ+qzvGIwRM+CLHhDgXrYgQ== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-normalize-display-values@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-3.0.0.tgz#de995eeafe217ac1854a7135b1db44c57487e9ea" - integrity sha512-6Nw55PRXEKEVqn3bzA8gRRPYxr5tf5PssvcE5DRA/nAxKgKtgNZMCHCSd1uxTCWeyLnkf6h5tYRSB0P1Vh/K/A== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-oklab-function@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.1.tgz#2e33ed1761ce78d59a9156f1201a52fda7c75899" - integrity sha512-3TIz+dCPlQPzz4yAEYXchUpfuU2gRYK4u1J+1xatNX85Isg4V+IbLyppblWLV4Vb6npFF8qsHN17rNuxOIy/6w== - dependencies: - "@csstools/css-color-parser" "^1.2.2" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - -"@csstools/postcss-progressive-custom-properties@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.0.tgz#bb86ae4bb7f2206b0cf6e9b8f0bfc191f67271d8" - integrity sha512-2/D3CCL9DN2xhuUTP8OKvKnaqJ1j4yZUxuGLsCUOQ16wnDAuMLKLkflOmZF5tsPh/02VPeXRmqIN+U595WAulw== - dependencies: - postcss-value-parser "^4.2.0" - -"@csstools/postcss-relative-color-syntax@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.1.tgz#b7e928fdef9366e1060e2bf4d95cab605855446b" - integrity sha512-9B8br/7q0bjD1fV3yE22izjc7Oy5hDbDgwdFEz207cdJHYC9yQneJzP3H+/w3RgC7uyfEVhyyhkGRx5YAfJtmg== - dependencies: - "@csstools/css-color-parser" "^1.2.2" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - -"@csstools/postcss-scope-pseudo-class@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-3.0.0.tgz#23f32181b7de9a33e7c7c71f7620b78284955b82" - integrity sha512-GFNVsD97OuEcfHmcT0/DAZWAvTM/FFBDQndIOLawNc1Wq8YqpZwBdHa063Lq+Irk7azygTT+Iinyg3Lt76p7rg== - dependencies: - postcss-selector-parser "^6.0.13" - -"@csstools/postcss-stepped-value-functions@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.1.tgz#c337a8ae09bec13cdf6c95f63a58b407f6965557" - integrity sha512-y1sykToXorFE+5cjtp//xAMWEAEple0kcZn2QhzEFIZDDNvGOCp5JvvmmPGsC3eDlj6yQp70l9uXZNLnimEYfA== - dependencies: - "@csstools/css-calc" "^1.1.3" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - -"@csstools/postcss-text-decoration-shorthand@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.0.tgz#468800a47fcb4760df8c60bbf1ba7999f44b4dd4" - integrity sha512-BAa1MIMJmEZlJ+UkPrkyoz3DC7kLlIl2oDya5yXgvUrelpwxddgz8iMp69qBStdXwuMyfPx46oZcSNx8Z0T2eA== - dependencies: - "@csstools/color-helpers" "^3.0.0" - postcss-value-parser "^4.2.0" - -"@csstools/postcss-trigonometric-functions@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.1.tgz#06148aa8624b69a6573adb40ed27d3d019875caa" - integrity sha512-hW+JPv0MPQfWC1KARgvJI6bisEUFAZWSvUNq/khGCupYV/h6Z9R2ZFz0Xc633LXBst0ezbXpy7NpnPurSx5Klw== - dependencies: - "@csstools/css-calc" "^1.1.3" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - -"@csstools/postcss-unset-value@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-3.0.0.tgz#6d2f08140b41d3e70d805ccd2baaf64a6f59fdac" - integrity sha512-P0JD1WHh3avVyKKRKjd0dZIjCEeaBer8t1BbwGMUDtSZaLhXlLNBqZ8KkqHzYWXOJgHleXAny2/sx8LYl6qhEA== - -"@csstools/selector-specificity@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz#798622546b63847e82389e473fd67f2707d82247" - integrity sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g== - -"@date-io/core@^2.17.0": - version "2.17.0" - resolved "https://registry.yarnpkg.com/@date-io/core/-/core-2.17.0.tgz#360a4d0641f069776ed22e457876e8a8a58c205e" - integrity sha512-+EQE8xZhRM/hsY0CDTVyayMDDY5ihc4MqXCrPxooKw19yAzUIC6uUqsZeaOFNL9YKTNxYKrJP5DFgE8o5xRCOw== - -"@date-io/date-fns@^2.16.0": - version "2.17.0" - resolved "https://registry.yarnpkg.com/@date-io/date-fns/-/date-fns-2.17.0.tgz#1d9d0a02e0137524331819c9576a4e8e19a6142b" - integrity sha512-L0hWZ/mTpy3Gx/xXJ5tq5CzHo0L7ry6KEO9/w/JWiFWFLZgiNVo3ex92gOl3zmzjHqY/3Ev+5sehAr8UnGLEng== - dependencies: - "@date-io/core" "^2.17.0" - -"@discoveryjs/json-ext@0.5.7", "@discoveryjs/json-ext@^0.5.0": - version "0.5.7" - resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" - integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== - -"@dnd-kit/accessibility@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@dnd-kit/accessibility/-/accessibility-3.0.1.tgz#3ccbefdfca595b0a23a5dc57d3de96bc6935641c" - integrity sha512-HXRrwS9YUYQO9lFRc/49uO/VICbM+O+ZRpFDe9Pd1rwVv2PCNkRiTZRdxrDgng/UkvdC3Re9r2vwPpXXrWeFzg== - dependencies: - tslib "^2.0.0" - -"@dnd-kit/core@^6.0.7": - version "6.0.8" - resolved "https://registry.yarnpkg.com/@dnd-kit/core/-/core-6.0.8.tgz#040ae13fea9787ee078e5f0361f3b49b07f3f005" - integrity sha512-lYaoP8yHTQSLlZe6Rr9qogouGUz9oRUj4AHhDQGQzq/hqaJRpFo65X+JKsdHf8oUFBzx5A+SJPUvxAwTF2OabA== - dependencies: - "@dnd-kit/accessibility" "^3.0.0" - "@dnd-kit/utilities" "^3.2.1" - tslib "^2.0.0" - -"@dnd-kit/sortable@^7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@dnd-kit/sortable/-/sortable-7.0.2.tgz#791d550872457f3f3c843e00d159b640f982011c" - integrity sha512-wDkBHHf9iCi1veM834Gbk1429bd4lHX4RpAwT0y2cHLf246GAvU2sVw/oxWNpPKQNQRQaeGXhAVgrOl1IT+iyA== - dependencies: - "@dnd-kit/utilities" "^3.2.0" - tslib "^2.0.0" - -"@dnd-kit/utilities@^3.2.0", "@dnd-kit/utilities@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@dnd-kit/utilities/-/utilities-3.2.1.tgz#53f9e2016fd2506ec49e404c289392cfff30332a" - integrity sha512-OOXqISfvBw/1REtkSK2N3Fi2EQiLMlWUlqnOK/UpOISqBZPWpE6TqL+jcPtMOkE8TqYGiURvRdPSI9hltNUjEA== - dependencies: - tslib "^2.0.0" - -"@drizzle-team/studio@^0.0.5": - version "0.0.5" - resolved "https://registry.yarnpkg.com/@drizzle-team/studio/-/studio-0.0.5.tgz#d2488ab4e8e755cc69287e2267cc4033a0e6ca35" - integrity sha512-ps5qF0tMxWRVu+V5gvCRrQNqlY92aTnIKdq27gm9LZMSdaKYZt6AVvSK1dlUMzs6Rt0Jm80b+eWct6xShBKhIw== - -"@emotion/babel-plugin@^11.11.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c" - integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ== - dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/runtime" "^7.18.3" - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/serialize" "^1.1.2" - babel-plugin-macros "^3.1.0" - convert-source-map "^1.5.0" - escape-string-regexp "^4.0.0" - find-root "^1.1.0" - source-map "^0.5.7" - stylis "4.2.0" - -"@emotion/cache@^11.11.0", "@emotion/cache@^11.4.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" - integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== - dependencies: - "@emotion/memoize" "^0.8.1" - "@emotion/sheet" "^1.2.2" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - stylis "4.2.0" - -"@emotion/css@^11.10.5": - version "11.11.2" - resolved "https://registry.yarnpkg.com/@emotion/css/-/css-11.11.2.tgz#e5fa081d0c6e335352e1bc2b05953b61832dca5a" - integrity sha512-VJxe1ucoMYMS7DkiMdC2T7PWNbrEI0a39YRiyDvK2qq4lXwjRbVP/z4lpG+odCsRzadlR+1ywwrTzhdm5HNdew== - dependencies: - "@emotion/babel-plugin" "^11.11.0" - "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.2" - "@emotion/sheet" "^1.2.2" - "@emotion/utils" "^1.2.1" - -"@emotion/hash@^0.9.1": - version "0.9.1" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" - integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== - -"@emotion/memoize@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" - integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== - -"@emotion/react@^11.8.1": - version "11.11.1" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.1.tgz#b2c36afac95b184f73b08da8c214fdf861fa4157" - integrity sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA== - dependencies: - "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.11.0" - "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.2" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" - hoist-non-react-statics "^3.3.1" - -"@emotion/serialize@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.2.tgz#017a6e4c9b8a803bd576ff3d52a0ea6fa5a62b51" - integrity sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA== - dependencies: - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/unitless" "^0.8.1" - "@emotion/utils" "^1.2.1" - csstype "^3.0.2" - -"@emotion/sheet@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" - integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== - -"@emotion/unitless@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" - integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== - -"@emotion/use-insertion-effect-with-fallbacks@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963" - integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw== - -"@emotion/utils@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" - integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== - -"@emotion/weak-memoize@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" - integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== - -"@esbuild-kit/core-utils@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@esbuild-kit/core-utils/-/core-utils-3.1.0.tgz#49945d533dbd5e1b7620aa0fc522c15e6ec089c5" - integrity sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw== - dependencies: - esbuild "~0.17.6" - source-map-support "^0.5.21" - -"@esbuild-kit/esm-loader@^2.5.5": - version "2.5.5" - resolved "https://registry.yarnpkg.com/@esbuild-kit/esm-loader/-/esm-loader-2.5.5.tgz#b82da14fcee3fc1d219869756c06f43f67d1ca71" - integrity sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw== - dependencies: - "@esbuild-kit/core-utils" "^3.0.0" - get-tsconfig "^4.4.0" - -"@esbuild/android-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" - integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== - -"@esbuild/android-arm64@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.19.tgz#8735b552b8e0b9a943460d37fbc976b9d9cd4b4e" - integrity sha512-4+jkUFQxZkQfQOOxfGVZB38YUWHMJX2ihZwF+2nh8m7bHdWXpixiurgGRN3c/KMSwlltbYI0/i929jwBRMFzbA== - -"@esbuild/android-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" - integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== - -"@esbuild/android-arm@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.19.tgz#efd1f33583a893c0cc57f25b1d081af8cdc6bfd9" - integrity sha512-1uOoDurJYh5MNqPqpj3l/TQCI1V25BXgChEldCB7D6iryBYqYKrbZIhYO5AI9fulf66sM8UJpc3UcCly2Tv28w== - -"@esbuild/android-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" - integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== - -"@esbuild/android-x64@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.19.tgz#d9f35722701a97a2ef69c7a84f1ee2aef2a306a7" - integrity sha512-ae5sHYiP/Ogj2YNrLZbWkBmyHIDOhPgpkGvFnke7XFGQldBDWvc/AyYwSLpNuKw9UNkgnLlB/jPpnBmlF3G9Bg== - -"@esbuild/darwin-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" - integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== - -"@esbuild/darwin-arm64@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.19.tgz#8cb81b971ee5231acc7de07225f6e18562c359e4" - integrity sha512-HIpQvNQWFYROmWDANMRL+jZvvTQGOiTuwWBIuAsMaQrnStedM+nEKJBzKQ6bfT9RFKH2wZ+ej+DY7+9xHBTFPg== - -"@esbuild/darwin-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" - integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== - -"@esbuild/darwin-x64@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.19.tgz#81024ab64232dd323f03796d449f018b59f04ca9" - integrity sha512-m6JdvXJQt0thNLIcWOeG079h2ivhYH4B5sVCgqb/B29zTcFd7EE8/J1nIUHhdtwGeItdUeqKaqqb4towwxvglQ== - -"@esbuild/freebsd-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" - integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== - -"@esbuild/freebsd-arm64@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.19.tgz#9fa91e3b08d10c0adfa71b37372a7627b26e9686" - integrity sha512-G0p4EFMPZhGn/xVNspUyMQbORH3nlKTV0bFNHPIwLraBuAkTeMyxNviTe0ZXUbIXQrR1lrwniFjNFU4s+x7veQ== - -"@esbuild/freebsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" - integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== - -"@esbuild/freebsd-x64@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.19.tgz#ef6f5a85c1bb029fb0076da5b223e50b353e615c" - integrity sha512-hBxgRlG42+W+j/1/cvlnSa+3+OBKeDCyO7OG2ICya1YJaSCYfSpuG30KfOnQHI7Ytgu4bRqCgrYXxQEzy0zM5Q== - -"@esbuild/linux-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" - integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== - -"@esbuild/linux-arm64@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.19.tgz#0cef913dcdc1efb1bb04406a8e5f5668b721d89e" - integrity sha512-X8g33tczY0GsJq3lhyBrjnFtaKjWVpp1gMq5IlF9BQJ3TUfSK74nQnz9mRIEejmcV+OIYn6bkOJeUaU1Knrljg== - -"@esbuild/linux-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" - integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== - -"@esbuild/linux-arm@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.19.tgz#39ea874c8e5177b83903bec1883a43f3c163627a" - integrity sha512-qtWyoQskfJlb9MD45mvzCEKeO4uCnDZ7lPFeNqbfaaJHqBiH9qA5Vu2EuckqYZuFMJWy1l4dxTf9NOulCVfUjg== - -"@esbuild/linux-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" - integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== - -"@esbuild/linux-ia32@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.19.tgz#283cd3c3d8380e8fab90583fa86ca1fcc9b9ec57" - integrity sha512-SAkRWJgb+KN+gOhmbiE6/wu23D6HRcGQi15cB13IVtBZZgXxygTV5GJlUAKLQ5Gcx0gtlmt+XIxEmSqA6sZTOw== - -"@esbuild/linux-loong64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" - integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== - -"@esbuild/linux-loong64@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.19.tgz#1c69d7928a55b26326398d31d2ac9c82d2297f1b" - integrity sha512-YLAslaO8NsB9UOxBchos82AOMRDbIAWChwDKfjlGrHSzS3v1kxce7dGlSTsrb0PJwo1KYccypN3VNjQVLtz7LA== - -"@esbuild/linux-mips64el@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" - integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== - -"@esbuild/linux-mips64el@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.19.tgz#b25b352e7645885fa1d01182116c506a78fe4733" - integrity sha512-vSYFtlYds/oTI8aflEP65xo3MXChMwBOG1eWPGGKs/ev9zkTeXVvciU+nifq8J1JYMz+eQ4J9JDN0O2RKF8+1Q== - -"@esbuild/linux-ppc64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" - integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== - -"@esbuild/linux-ppc64@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.19.tgz#568b5a051f47af732c4314e697bb559a14b3d811" - integrity sha512-tgG41lRVwlzqO9tv9l7aXYVw35BxKXLtPam1qALScwSqPivI8hjkZLNH0deaaSCYCFT9cBIdB+hUjWFlFFLL9A== - -"@esbuild/linux-riscv64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" - integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== - -"@esbuild/linux-riscv64@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.19.tgz#020729b47ca63321667297d1610bab81cd08a65c" - integrity sha512-EgBZFLoN1S5RuB4cCJI31pBPsjE1nZ+3+fHRjguq9Ibrzo29bOLSBcH1KZJvRNh5qtd+fcYIGiIUia8Jw5r1lQ== - -"@esbuild/linux-s390x@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" - integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== - -"@esbuild/linux-s390x@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.19.tgz#ed5cca8dac130d2f736914f9efad5fa15c238c20" - integrity sha512-q1V1rtHRojAzjSigZEqrcLkpfh5K09ShCoIsdTakozVBnM5rgV58PLFticqDp5UJ9uE0HScov9QNbbl8HBo6QQ== - -"@esbuild/linux-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" - integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== - -"@esbuild/linux-x64@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.19.tgz#f8023a38ae02b46c60a134ccbc7ae377b3bec66f" - integrity sha512-D0IiYjpZRXxGZLQfsydeAD7ZWqdGyFLBj5f2UshJpy09WPs3qizDCsEr8zyzcym6Woj/UI9ZzMIXwvoXVtyt0A== - -"@esbuild/netbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" - integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== - -"@esbuild/netbsd-x64@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.19.tgz#8fd667c535db0a5b346afa2d74ff1fb53477427f" - integrity sha512-3tt3SOS8L3D54R8oER41UdDshlBIAjYhdWRPiZCTZ1E41+shIZBpTjaW5UaN/jD1ENE/Ok5lkeqhoNMbxstyxw== - -"@esbuild/openbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" - integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== - -"@esbuild/openbsd-x64@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.19.tgz#354d5b54a6bffa381cb513e878880192e07004be" - integrity sha512-MxbhcuAYQPlfln1EMc4T26OUoeg/YQc6wNoEV8xvktDKZhLtBxjkoeESSo9BbPaGKhAPzusXYj5n8n5A8iZSrA== - -"@esbuild/sunos-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" - integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== - -"@esbuild/sunos-x64@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.19.tgz#e2de98bd961e04f76f6acf5970263efc7051def5" - integrity sha512-m0/UOq1wj25JpWqOJxoWBRM9VWc3c32xiNzd+ERlYstUZ6uwx5SZsQUtkiFHaYmcaoj+f6+Tfcl7atuAz3idwQ== - -"@esbuild/win32-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" - integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== - -"@esbuild/win32-arm64@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.19.tgz#9dca55f0dcbbdb50bf36353d1114f5f71c269275" - integrity sha512-L4vb6pcoB1cEcXUHU6EPnUhUc4+/tcz4OqlXTWPcSQWxegfmcOprhmIleKKwmMNQVc4wrx/+jB7tGkjjDmiupg== - -"@esbuild/win32-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" - integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== - -"@esbuild/win32-ia32@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.19.tgz#db6ea4467e87e6d3fc2177dea35e81f26f7a061d" - integrity sha512-rQng7LXSKdrDlNDb7/v0fujob6X0GAazoK/IPd9C3oShr642ri8uIBkgM37/l8B3Rd5sBQcqUXoDdEy75XC/jg== - -"@esbuild/win32-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" - integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== - -"@esbuild/win32-x64@0.18.19": - version "0.18.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.19.tgz#6105755d7097e0d7e22f893c3e62f143d8137bd0" - integrity sha512-z69jhyG20Gq4QL5JKPLqUT+eREuqnDAFItLbza4JCmpvUnIlY73YNjd5djlO7kBiiZnvTnJuAbOjIoZIOa1GjA== - -"@faceless-ui/modal@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@faceless-ui/modal/-/modal-2.0.1.tgz#8a47299442eff450c09432cfaef35c5471becad6" - integrity sha512-z1PaaLxwuX+1In4vhUxODZndGKdCY+WIqzvtnas3CaYGGCVJBSJ4jfv9UEEGZzcahmSy+71bEL89cUT6d36j1Q== - dependencies: - body-scroll-lock "^3.1.5" - focus-trap "^6.9.2" - qs "^6.9.1" - react-transition-group "^4.4.2" - -"@faceless-ui/scroll-info@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@faceless-ui/scroll-info/-/scroll-info-1.3.0.tgz#4d9f76afa4c004018697424f77f8bc362ccaae08" - integrity sha512-X+doJMzQqyVGpwV/YgXUAalNWepP2W8ThgZspKZLFG43zTYLVTU17BYCjjY+ggKuA3b0W3JyXZ2M8f247AdmHw== - -"@faceless-ui/window-info@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@faceless-ui/window-info/-/window-info-2.1.1.tgz#ed1474a60ab794295bca4c29e295b1e11a584d22" - integrity sha512-gMAgda7beR4CNpBIXjgRVn97ek0LG3PAj9lxmoYdg574IEzLFZAh3eAYtTaS2XLKgb4+IHhsuBzlGmHbeOo2Aw== - -"@floating-ui/core@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.4.1.tgz#0d633f4b76052668afb932492ac452f7ebe97f17" - integrity sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ== - dependencies: - "@floating-ui/utils" "^0.1.1" - -"@floating-ui/dom@^1.0.1": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.1.tgz#88b70defd002fe851f17b4a25efb2d3c04d7a8d7" - integrity sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw== - dependencies: - "@floating-ui/core" "^1.4.1" - "@floating-ui/utils" "^0.1.1" - -"@floating-ui/utils@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.1.tgz#1a5b1959a528e374e8037c4396c3e825d6cf4a83" - integrity sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw== - -"@hapi/hoek@^9.0.0": - version "9.3.0" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" - integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== - -"@hapi/topo@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" - integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.0": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jsdevtools/ono@^7.1.3": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796" - integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg== - -"@juggle/resize-observer@^3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" - integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== - -"@libsql/client@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@libsql/client/-/client-0.3.1.tgz#55227ba35186845924665aad7f60585bfd385fde" - integrity sha512-43/zF8fJguXd6ENwYhddpbR05bDVx3BQQUZ/BsJ0b4zLJge+WFa2smC3ILVGqvVu4ZoixbC0sfLTdVPdd2NjDA== - dependencies: - "@libsql/hrana-client" "^0.4.3" - better-sqlite3 "^8.0.1" - js-base64 "^3.7.5" - -"@libsql/hrana-client@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@libsql/hrana-client/-/hrana-client-0.4.3.tgz#c1001fe27b4780083fb161f1a2295b85e59fae75" - integrity sha512-ZlAXy3PpB8B93iu8MyDyMpzbu1b4G4oa5KOjbABHe7iBybx7yC+t3U/sK7c37QsmpRZQXi0S+vNPpGTlje3bCA== - dependencies: - "@libsql/isomorphic-fetch" "^0.1.1" - "@libsql/isomorphic-ws" "^0.1.2" - js-base64 "^3.7.5" - -"@libsql/isomorphic-fetch@^0.1.1": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@libsql/isomorphic-fetch/-/isomorphic-fetch-0.1.4.tgz#38d060b75ae88373daebf24c755ea4f8f7f67bb0" - integrity sha512-eRgV4b1d6RVLciafGEKZghDOvrQ7fDuPgfGzelsfPz1HxFERaTQuOwL5FthZcKBtHI6Wqu5zmhUu5bREZr1mpA== - dependencies: - "@types/node-fetch" "^2.2.6" - node-fetch "^2.2.6" - -"@libsql/isomorphic-ws@^0.1.2": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@libsql/isomorphic-ws/-/isomorphic-ws-0.1.3.tgz#b66e88af15c44175f8828406aaddc9ed552afbc9" - integrity sha512-54dZXgYwWDKsnfWv8GCVYvhn6RDlqFDGAc8EQMd941yvGMsGzo06Gn6Iyjw//nJ1iJO97FbXgoQ1apikoFD/WA== - dependencies: - "@types/ws" "^8.5.4" - ws "^8.13.0" - -"@monaco-editor/loader@^1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.3.3.tgz#7f1742bd3cc21c0362a46a4056317f6e5215cfca" - integrity sha512-6KKF4CTzcJiS8BJwtxtfyYt9shBiEv32ateQ9T4UVogwn4HM/uPo9iJd2Dmbkpz8CM6Y0PDUpjnZzCwC+eYo2Q== - dependencies: - state-local "^1.0.6" - -"@monaco-editor/react@^4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.5.1.tgz#fbc76c692aee9a33b9ab24ae0c5f219b8f002fdb" - integrity sha512-NNDFdP+2HojtNhCkRfE6/D6ro6pBNihaOzMbGK84lNWzRu+CfBjwzGt4jmnqimLuqp5yE5viHS2vi+QOAnD5FQ== - dependencies: - "@monaco-editor/loader" "^1.3.3" - -"@polka/url@^1.0.0-next.20": - version "1.0.0-next.21" - resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" - integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== - -"@popperjs/core@^2.11.8": - version "2.11.8" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" - integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== - -"@sideway/address@^4.1.3": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" - integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== - dependencies: - "@hapi/hoek" "^9.0.0" - -"@sideway/formula@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" - integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== - -"@sideway/pinpoint@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" - integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@swc/core-darwin-arm64@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.78.tgz#352c39630f97376b9de367eb1955965c6d2cef64" - integrity sha512-596KRua/d5Gx1buHKKchSyHuwoIL4S1BRD/wCvYNLNZ3xOzcuBBmXOjrDVigKi1ztNDeS07p30RO5UyYur0XAA== - -"@swc/core-darwin-x64@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.78.tgz#0279831884f3275eea67c34a87fb503b35a6f6c7" - integrity sha512-w0RsD1onQAj0vuLAoOVi48HgnW6D6oBEIZP17l0HYejCDBZ+FRZLjml7wgNAWMqHcd2qNRqgtZ+v7aLza2JtBQ== - -"@swc/core-linux-arm-gnueabihf@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.78.tgz#4268cac6945329f47216ae57e8ad17bf0e5cc294" - integrity sha512-v1CpRn+H6fha1WIqmdRvJM40pFdjUHrGfhf4Ygci72nlAU41l5XimN8Iwkm8FgIwf2wnv0lLzedSM4IHvpq/yA== - -"@swc/core-linux-arm64-gnu@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.78.tgz#dcedcc8fb3addaca8660c8c712376850a04d5251" - integrity sha512-Sis17dz9joJRFVvR/gteOZSUNrrrioo81RQzani0Zr5ZZOfWLMTB9DA+0MVlfnVa2taYcsJHJZFoAv9JkLwbzg== - -"@swc/core-linux-arm64-musl@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.78.tgz#c09c29419879e819a1790994da614887714fa675" - integrity sha512-E5F8/qp+QupnfBnsP4vN1PKyCmAHYHDG1GMyPE/zLFOUYLgw+jK4C9rfyLBR0o2bWo1ay2WCIjusBZD9XHGOSA== - -"@swc/core-linux-x64-gnu@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.78.tgz#e295812b2c871a559fda2314c7063f965d7a3139" - integrity sha512-iDxa+RknnTQlyy+WfPor1FM6y44ERNI2E0xiUV6gV6uPwegCngi8LFC+E7IvP6+p+yXtAkesunAaiZ8nn0s+rw== - -"@swc/core-linux-x64-musl@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.78.tgz#e9742111dc62b857492559491cff277ce7f952f2" - integrity sha512-dWtIYUFL5sMTE2UKshkXTusHcK8+zAhhGzvqWq1wJS45pqTlrAbzpyqB780fle880x3A6DMitWmsAFARdNzpuQ== - -"@swc/core-win32-arm64-msvc@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.78.tgz#59d76fbd58e0efcc003cf2a08984e697d285be8d" - integrity sha512-CXFaGEc2M9Su3UoUMC8AnzKb9g+GwPxXfakLWZsjwS448h6jcreExq3nwtBNdVGzQ26xqeVLMFfb1l/oK99Hwg== - -"@swc/core-win32-ia32-msvc@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.78.tgz#5aac382bc8e1d3c74228f823033e19d04720cb28" - integrity sha512-FaH1jwWnJpWkdImpMoiZpMg9oy9UUyZwltzN7hFwjR48e3Li82cRFb+9PifIBHCUSBM+CrrsJXbHP213IMVAyw== - -"@swc/core-win32-x64-msvc@1.3.78": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.78.tgz#3ee7a3bd46503bf81a88343d545d7e1aca8d57de" - integrity sha512-oYxa+tPdhlx1aH14AIoF6kvVjo49tEOW0drNqoEaVHufvgH0y43QU2Jum3b2+xXztmMRtzK2CSN3GPOAXDKKKg== - -"@swc/core@^1.3.76": - version "1.3.78" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.78.tgz#2c4bd7c397b85c021271043c76433e553446fe95" - integrity sha512-y6DQP571v7fbUUY7nz5G4lNIRGofuO48K5pGhD9VnuOCTuptfooCdi8wnigIrIhM/M4zQ53m/YCMDCbOtDgEww== - optionalDependencies: - "@swc/core-darwin-arm64" "1.3.78" - "@swc/core-darwin-x64" "1.3.78" - "@swc/core-linux-arm-gnueabihf" "1.3.78" - "@swc/core-linux-arm64-gnu" "1.3.78" - "@swc/core-linux-arm64-musl" "1.3.78" - "@swc/core-linux-x64-gnu" "1.3.78" - "@swc/core-linux-x64-musl" "1.3.78" - "@swc/core-win32-arm64-msvc" "1.3.78" - "@swc/core-win32-ia32-msvc" "1.3.78" - "@swc/core-win32-x64-msvc" "1.3.78" - -"@swc/register@^0.1.10": - version "0.1.10" - resolved "https://registry.yarnpkg.com/@swc/register/-/register-0.1.10.tgz#74a20b7559669e03479b05e9e5c6d1524d4d92a2" - integrity sha512-6STwH/q4dc3pitXLVkV7sP0Hiy+zBsU2wOF1aXpXR95pnH3RYHKIsDC+gvesfyB7jxNT9OOZgcqOp9RPxVTx9A== - dependencies: - lodash.clonedeep "^4.5.0" - pirates "^4.0.1" - source-map-support "^0.5.13" - -"@tokenizer/token@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" - integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== - -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - -"@types/eslint-scope@^3.7.3": - version "3.7.4" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" - integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.44.2" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.2.tgz#0d21c505f98a89b8dd4d37fa162b09da6089199a" - integrity sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*", "@types/estree@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" - integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== - -"@types/glob@^7.1.3": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" - integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/html-minifier-terser@^6.0.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" - integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== - -"@types/is-hotkey@^0.1.1": - version "0.1.7" - resolved "https://registry.yarnpkg.com/@types/is-hotkey/-/is-hotkey-0.1.7.tgz#30ec6d4234895230b576728ef77e70a52962f3b3" - integrity sha512-yB5C7zcOM7idwYZZ1wKQ3pTfjA9BbvFqRWvKB46GFddxnJtHwi/b9y84ykQtxQPg5qhdpg4Q/kWU3EGoCTmLzQ== - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/json-schema@*", "@types/json-schema@^7.0.11", "@types/json-schema@^7.0.6", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.12" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" - integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== - -"@types/lodash@^4.14.149", "@types/lodash@^4.14.182": - version "4.14.197" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.197.tgz#e95c5ddcc814ec3e84c891910a01e0c8a378c54b" - integrity sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g== - -"@types/minimatch@*": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" - integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== - -"@types/node-fetch@^2.2.6": - version "2.6.4" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.4.tgz#1bc3a26de814f6bf466b25aeb1473fa1afe6a660" - integrity sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg== - dependencies: - "@types/node" "*" - form-data "^3.0.0" - -"@types/node@*": - version "20.4.8" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.8.tgz#b5dda19adaa473a9bf0ab5cbd8f30ec7d43f5c85" - integrity sha512-0mHckf6D2DiIAzh8fM8f3HQCvMKDpK94YQ0DSVkfWTG9BZleYIWudw9cJxX8oCk9bM+vAkDyujDV6dmKHbvQpg== - -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - -"@types/pg@^8.10.2": - version "8.10.2" - resolved "https://registry.yarnpkg.com/@types/pg/-/pg-8.10.2.tgz#7814d1ca02c8071f4d0864c1b17c589b061dba43" - integrity sha512-MKFs9P6nJ+LAeHLU3V0cODEOgyThJ3OAnmOlsZsxux6sfQs3HRXR5bBn7xG5DjckEFhTAxsXi7k7cd0pCMxpJw== - dependencies: - "@types/node" "*" - pg-protocol "*" - pg-types "^4.0.1" - -"@types/prettier@^2.6.1": - version "2.7.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" - integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== - -"@types/prop-types@*": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== - -"@types/react-transition-group@^4.4.0": - version "4.4.6" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.6.tgz#18187bcda5281f8e10dfc48f0943e2fdf4f75e2e" - integrity sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew== - dependencies: - "@types/react" "*" - -"@types/react@*": - version "18.2.20" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.20.tgz#1605557a83df5c8a2cc4eeb743b3dfc0eb6aaeb2" - integrity sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/scheduler@*": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" - integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== - -"@types/sharp@^0.31.1": - version "0.31.1" - resolved "https://registry.yarnpkg.com/@types/sharp/-/sharp-0.31.1.tgz#db768461455dbcf9ff11d69277fd70564483c4df" - integrity sha512-5nWwamN9ZFHXaYEincMSuza8nNfOof8nmO+mcI+Agx1uMUk4/pQnNIcix+9rLPXzKrm1pS34+6WRDbDV0Jn7ag== - dependencies: - "@types/node" "*" - -"@types/to-snake-case@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@types/to-snake-case/-/to-snake-case-1.0.0.tgz#1b32f1b5ad8ea907b6c847346cdd3782e486654e" - integrity sha512-9YtLP+wuIL2EwOqyUjwTzWK6CGVnsP13vJ3i0U8S7O+SLAxrsi1jwC2TkHkdqVqfGLQWnk5H+Z+sSPT7SJeGYg== - -"@types/ws@^8.5.4": - version "8.5.5" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.5.tgz#af587964aa06682702ee6dcbc7be41a80e4b28eb" - integrity sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg== - dependencies: - "@types/node" "*" - -"@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^17.0.8": - version "17.0.24" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" - integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== - dependencies: - "@types/yargs-parser" "*" - -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== - dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== - -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== - -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== - -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== - -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== - -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" - -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webpack-cli/configtest@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" - integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== - -"@webpack-cli/info@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" - integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== - dependencies: - envinfo "^7.7.3" - -"@webpack-cli/serve@^1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" - integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -accepts@~1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== - -acorn-walk@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== - -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv-keywords@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" - integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== - dependencies: - fast-deep-equal "^3.1.3" - -ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.6.3, ajv@^8.9.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-html-community@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" - integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -atomic-sleep@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" - integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== - -atomically@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/atomically/-/atomically-1.7.0.tgz#c07a0458432ea6dbc9a3506fffa424b48bccaafe" - integrity sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w== - -autoprefixer@^10.4.14: - version "10.4.15" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.15.tgz#a1230f4aeb3636b89120b34a1f513e2f6834d530" - integrity sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew== - dependencies: - browserslist "^4.21.10" - caniuse-lite "^1.0.30001520" - fraction.js "^4.2.0" - normalize-range "^0.1.2" - picocolors "^1.0.0" - postcss-value-parser "^4.2.0" - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -babel-plugin-macros@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" - integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== - dependencies: - "@babel/runtime" "^7.12.5" - cosmiconfig "^7.0.0" - resolve "^1.19.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -better-sqlite3@^8.0.1, better-sqlite3@^8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-8.5.0.tgz#b13d12d0e477be69191a39628fc8b723ee1c79d4" - integrity sha512-vbPcv/Hx5WYdyNg/NbcfyaBZyv9s/NVbxb7yCeC5Bq1pVocNxeL2tZmSu3Rlm4IEOTjYdGyzWQgyx0OSdORBzw== - dependencies: - bindings "^1.5.0" - prebuild-install "^7.1.0" - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -body-parser@^1.20.1: - version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -body-scroll-lock@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-3.1.5.tgz#c1392d9217ed2c3e237fee1e910f6cdd80b7aaec" - integrity sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg== - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.21.10, browserslist@^4.21.4: - version "4.21.10" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" - integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== - dependencies: - caniuse-lite "^1.0.30001517" - electron-to-chromium "^1.4.477" - node-releases "^2.0.13" - update-browserslist-db "^1.0.11" - -bson-objectid@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/bson-objectid/-/bson-objectid-2.0.4.tgz#339211572ef97dc98f2d68eaee7b99b7be59a089" - integrity sha512-vgnKAUzcDoa+AeyYwXCoHyF2q6u/8H46dxu5JN+4/TZeq/Dlinn0K6GvxsCLb3LHUJl0m/TLiEK31kUwtgocMQ== - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-writer@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" - integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== - -buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -call-me-maybe@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" - integrity sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -camelcase@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" - integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001517, caniuse-lite@^1.0.30001520: - version "1.0.30001522" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001522.tgz#44b87a406c901269adcdb834713e23582dd71856" - integrity sha512-TKiyTVZxJGhsTszLuzb+6vUZSjVOAhClszBr2Ta2k9IwtNBT/4dzmL6aywt0HCgEZlmwJzXJd8yNiob6HgwTRg== - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== - -charenc@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== - -"chokidar@>=3.0.0 <4.0.0": - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== - -classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" - integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== - -clean-css@^5.2.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" - integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== - dependencies: - source-map "~0.6.0" - -cli-color@^2.0.0, cli-color@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-2.0.3.tgz#73769ba969080629670f3f2ef69a4bf4e7cc1879" - integrity sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ== - dependencies: - d "^1.0.1" - es5-ext "^0.10.61" - es6-iterator "^2.0.3" - memoizee "^0.4.15" - timers-ext "^0.1.7" - -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - -clsx@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" - integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a" - integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== - dependencies: - color-convert "^2.0.1" - color-string "^1.9.0" - -colord@^2.9.1: - version "2.9.3" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" - integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== - -colorette@^2.0.10, colorette@^2.0.14, colorette@^2.0.7: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.20.0, commander@^2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^7.0.0, commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -commander@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" - integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== - -commander@^9.4.1: - version "9.5.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" - integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -compute-scroll-into-view@^1.0.20: - version "1.0.20" - resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz#1768b5522d1172754f5d0c9b02de3af6be506a43" - integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -conf@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/conf/-/conf-10.2.0.tgz#838e757be963f1a2386dfe048a98f8f69f7b55d6" - integrity sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg== - dependencies: - ajv "^8.6.3" - ajv-formats "^2.1.1" - atomically "^1.7.0" - debounce-fn "^4.0.0" - dot-prop "^6.0.1" - env-paths "^2.2.1" - json-schema-typed "^7.0.3" - onetime "^5.1.2" - pkg-up "^3.1.0" - semver "^7.3.5" - -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== - -console-table-printer@^2.11.2: - version "2.11.2" - resolved "https://registry.yarnpkg.com/console-table-printer/-/console-table-printer-2.11.2.tgz#549757033a7e3cde7e26e030038c9392ce600ee5" - integrity sha512-uuUHie0sfPP542TKGzPFal0W1wo1beuKAqIZdaavcONx8OoqdnJRKjkinbRTOta4FaCa1RcIL+7mMJWX3pQGVg== - dependencies: - simple-wcswidth "^1.0.1" - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-source-map@^1.5.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -cosmiconfig@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" - integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypt@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== - -css-blank-pseudo@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-6.0.0.tgz#2bc6f812a5f60296c04c55b1696bad4300dcdbcc" - integrity sha512-VbfLlOWO7sBHBTn6pwDQzc07Z0SDydgDBfNfCE0nvrehdBNv9RKsuupIRa/qal0+fBZhAALyQDPMKz5lnvcchw== - dependencies: - postcss-selector-parser "^6.0.13" - -css-declaration-sorter@^6.3.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71" - integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== - -css-has-pseudo@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-6.0.0.tgz#b8c8f39a19bc83c5be59fd251510a7e443c47968" - integrity sha512-X+r+JBuoO37FBOWVNhVJhxtSBUFHgHbrcc0CjFT28JEdOw1qaDwABv/uunyodUuSy2hMPe9j/HjssxSlvUmKjg== - dependencies: - "@csstools/selector-specificity" "^3.0.0" - postcss-selector-parser "^6.0.13" - postcss-value-parser "^4.2.0" - -css-loader@^5.2.7: - version "5.2.7" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.7.tgz#9b9f111edf6fb2be5dc62525644cbc9c232064ae" - integrity sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg== - dependencies: - icss-utils "^5.1.0" - loader-utils "^2.0.0" - postcss "^8.2.15" - postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" - postcss-modules-scope "^3.0.0" - postcss-modules-values "^4.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^3.0.0" - semver "^7.3.5" - -css-minimizer-webpack-plugin@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz#33effe662edb1a0bf08ad633c32fa75d0f7ec565" - integrity sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - cssnano "^6.0.1" - jest-worker "^29.4.3" - postcss "^8.4.24" - schema-utils "^4.0.1" - serialize-javascript "^6.0.1" - -css-prefers-color-scheme@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-9.0.0.tgz#7e9b74062655ea15490e359cb456a3b9f4c93327" - integrity sha512-03QGAk/FXIRseDdLb7XAiu6gidQ0Nd8945xuM7VFVPpc6goJsG9uIO8xQjTxwbPdPIIV4o4AJoOJyt8gwDl67g== - -css-select@^4.1.3: - version "4.3.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" - integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== - dependencies: - boolbase "^1.0.0" - css-what "^6.0.1" - domhandler "^4.3.1" - domutils "^2.8.0" - nth-check "^2.0.1" - -css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== - dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" - -css-tree@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" - integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== - dependencies: - mdn-data "2.0.30" - source-map-js "^1.0.1" - -css-tree@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" - integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== - dependencies: - mdn-data "2.0.28" - source-map-js "^1.0.1" - -css-what@^6.0.1, css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssdb@^7.7.0: - version "7.7.1" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.7.1.tgz#759e333f516e47f26dd2c7be06147d4f4716356d" - integrity sha512-kM+Fs0BFyhJNeE6wbOrlnRsugRdL6vn7QcON0aBDZ7XRd7RI2pMlk+nxoHuTb4Et+aBobXgK0I+6NGLA0LLgTw== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssfilter@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" - integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== - -cssnano-preset-default@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz#2a93247140d214ddb9f46bc6a3562fa9177fe301" - integrity sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ== - dependencies: - css-declaration-sorter "^6.3.1" - cssnano-utils "^4.0.0" - postcss-calc "^9.0.0" - postcss-colormin "^6.0.0" - postcss-convert-values "^6.0.0" - postcss-discard-comments "^6.0.0" - postcss-discard-duplicates "^6.0.0" - postcss-discard-empty "^6.0.0" - postcss-discard-overridden "^6.0.0" - postcss-merge-longhand "^6.0.0" - postcss-merge-rules "^6.0.1" - postcss-minify-font-values "^6.0.0" - postcss-minify-gradients "^6.0.0" - postcss-minify-params "^6.0.0" - postcss-minify-selectors "^6.0.0" - postcss-normalize-charset "^6.0.0" - postcss-normalize-display-values "^6.0.0" - postcss-normalize-positions "^6.0.0" - postcss-normalize-repeat-style "^6.0.0" - postcss-normalize-string "^6.0.0" - postcss-normalize-timing-functions "^6.0.0" - postcss-normalize-unicode "^6.0.0" - postcss-normalize-url "^6.0.0" - postcss-normalize-whitespace "^6.0.0" - postcss-ordered-values "^6.0.0" - postcss-reduce-initial "^6.0.0" - postcss-reduce-transforms "^6.0.0" - postcss-svgo "^6.0.0" - postcss-unique-selectors "^6.0.0" - -cssnano-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.0.tgz#d1da885ec04003ab19505ff0e62e029708d36b08" - integrity sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw== - -cssnano@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-6.0.1.tgz#87c38c4cd47049c735ab756d7e77ac3ca855c008" - integrity sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg== - dependencies: - cssnano-preset-default "^6.0.1" - lilconfig "^2.1.0" - -csso@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" - integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== - dependencies: - css-tree "~2.2.0" - -csstype@^3.0.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" - integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -dataloader@^2.1.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.2.2.tgz#216dc509b5abe39d43a9b9d97e6e5e473dfbe3e0" - integrity sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g== - -date-fns@^2.29.3, date-fns@^2.30.0: - version "2.30.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" - integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== - dependencies: - "@babel/runtime" "^7.21.0" - -dateformat@^4.6.3: - version "4.6.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-4.6.3.tgz#556fa6497e5217fedb78821424f8a1c22fa3f4b5" - integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== - -debounce-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7" - integrity sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ== - dependencies: - mimic-fn "^3.0.0" - -debug@2, debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@^3.2.6: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-equal@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.2.tgz#9b2635da569a13ba8e1cc159c2f744071b115daa" - integrity sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.1" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.9" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deepmerge@^4.0.0, deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-libc@^2.0.0, detect-libc@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" - integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== - -diff@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== - -difflib@~0.2.1: - version "0.2.4" - resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" - integrity sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w== - dependencies: - heap ">= 0.2.0" - -direction@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/direction/-/direction-1.0.4.tgz#2b86fb686967e987088caf8b89059370d4837442" - integrity sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ== - -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-helpers@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" - integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== - dependencies: - "@babel/runtime" "^7.8.7" - csstype "^3.0.2" - -dom-serializer@^1.0.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" - integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" - integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== - dependencies: - domelementtype "^2.2.0" - -domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -domutils@^2.5.2, domutils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -domutils@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" - integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dot-prop@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -dotenv@^8.6.0: - version "8.6.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" - integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== - -dreamopt@~0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/dreamopt/-/dreamopt-0.8.0.tgz#5bcc80be7097e45fc489c342405ab68140a8c1d9" - integrity sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg== - dependencies: - wordwrap ">=0.0.2" - -drizzle-kit@^0.19.13-a511135: - version "0.19.13-e99bac1" - resolved "https://registry.yarnpkg.com/drizzle-kit/-/drizzle-kit-0.19.13-e99bac1.tgz#150e37b3b28d1e614eb63cd623367183902167b3" - integrity sha512-25Ahwm7CoaXCcrSuDjNqNH7vwrjt1s+I4O1yXVDBwYnyRe4RY8ZD57s5iA9PE5C+IJwBJtxBSXYWkat+efb3ug== - dependencies: - "@drizzle-team/studio" "^0.0.5" - "@esbuild-kit/esm-loader" "^2.5.5" - camelcase "^7.0.1" - chalk "^5.2.0" - commander "^9.4.1" - esbuild "^0.18.6" - esbuild-register "^3.4.2" - glob "^8.1.0" - hanji "^0.0.5" - json-diff "0.9.0" - minimatch "^7.4.3" - zod "^3.20.2" - -drizzle-orm@^0.28.0: - version "0.28.0" - resolved "https://registry.npmjs.org/drizzle-orm/-/drizzle-orm-0.28.0.tgz#8412b32077028b664ce21fe946de0578af6a5837" - integrity sha512-iNNNtWM6YwXWI5vAkgFx+FPtZvo/ZnLh8uZV1e7+Alhan5ZS0q3tqbGFP8uCMngW+hNbJqsaHsxPw6AN87urmw== - -duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.477: - version "1.4.498" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.498.tgz#cef35341123f62a35ba7084e439c911d25e0d81b" - integrity sha512-4LODxAzKGVy7CJyhhN5mebwe7U2L29P+0G+HUriHnabm0d7LSff8Yn7t+Wq+2/9ze2Fu1dhX7mww090xfv7qXQ== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.15.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -entities@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" - integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== - -entities@^4.2.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -env-paths@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -envinfo@^7.7.3: - version "7.10.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" - integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - -es-module-lexer@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f" - integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA== - -es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.53, es5-ext@^0.10.61, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: - version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -es6-weak-map@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" - integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== - dependencies: - d "1" - es5-ext "^0.10.46" - es6-iterator "^2.0.3" - es6-symbol "^3.1.1" - -esbuild-register@^3.4.2: - version "3.4.2" - resolved "https://registry.yarnpkg.com/esbuild-register/-/esbuild-register-3.4.2.tgz#1e39ee0a77e8f320a9790e68c64c3559620b9175" - integrity sha512-kG/XyTDyz6+YDuyfB9ZoSIOOmgyFCH+xPRtsCa8W85HLRV5Csp+o3jWVbOSHgSLfyLc5DmP+KFDNwty4mEjC+Q== - dependencies: - debug "^4.3.4" - -esbuild@^0.18.6: - version "0.18.19" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.19.tgz#c763ccfd50b7b1322d13232cd91f2bd36ffde56b" - integrity sha512-ra3CaIKCzJp5bU5BDfrCc0FRqKj71fQi+gbld0aj6lN0ifuX2fWJYPgLVLGwPfA+ruKna+OWwOvf/yHj6n+i0g== - optionalDependencies: - "@esbuild/android-arm" "0.18.19" - "@esbuild/android-arm64" "0.18.19" - "@esbuild/android-x64" "0.18.19" - "@esbuild/darwin-arm64" "0.18.19" - "@esbuild/darwin-x64" "0.18.19" - "@esbuild/freebsd-arm64" "0.18.19" - "@esbuild/freebsd-x64" "0.18.19" - "@esbuild/linux-arm" "0.18.19" - "@esbuild/linux-arm64" "0.18.19" - "@esbuild/linux-ia32" "0.18.19" - "@esbuild/linux-loong64" "0.18.19" - "@esbuild/linux-mips64el" "0.18.19" - "@esbuild/linux-ppc64" "0.18.19" - "@esbuild/linux-riscv64" "0.18.19" - "@esbuild/linux-s390x" "0.18.19" - "@esbuild/linux-x64" "0.18.19" - "@esbuild/netbsd-x64" "0.18.19" - "@esbuild/openbsd-x64" "0.18.19" - "@esbuild/sunos-x64" "0.18.19" - "@esbuild/win32-arm64" "0.18.19" - "@esbuild/win32-ia32" "0.18.19" - "@esbuild/win32-x64" "0.18.19" - -esbuild@~0.17.6: - version "0.17.19" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" - integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== - optionalDependencies: - "@esbuild/android-arm" "0.17.19" - "@esbuild/android-arm64" "0.17.19" - "@esbuild/android-x64" "0.17.19" - "@esbuild/darwin-arm64" "0.17.19" - "@esbuild/darwin-x64" "0.17.19" - "@esbuild/freebsd-arm64" "0.17.19" - "@esbuild/freebsd-x64" "0.17.19" - "@esbuild/linux-arm" "0.17.19" - "@esbuild/linux-arm64" "0.17.19" - "@esbuild/linux-ia32" "0.17.19" - "@esbuild/linux-loong64" "0.17.19" - "@esbuild/linux-mips64el" "0.17.19" - "@esbuild/linux-ppc64" "0.17.19" - "@esbuild/linux-riscv64" "0.17.19" - "@esbuild/linux-s390x" "0.17.19" - "@esbuild/linux-x64" "0.17.19" - "@esbuild/netbsd-x64" "0.17.19" - "@esbuild/openbsd-x64" "0.17.19" - "@esbuild/sunos-x64" "0.17.19" - "@esbuild/win32-arm64" "0.17.19" - "@esbuild/win32-ia32" "0.17.19" - "@esbuild/win32-x64" "0.17.19" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-scope@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -event-emitter@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" - integrity sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA== - dependencies: - d "1" - es5-ext "~0.10.14" - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -events@^3.2.0, events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -express-fileupload@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/express-fileupload/-/express-fileupload-1.4.0.tgz#be9d70a881d6c2b1ce668df86e4f89ddbf238ec7" - integrity sha512-RjzLCHxkv3umDeZKeFeMg8w7qe0V09w3B7oGZprr/oO2H/ISCgNzuqzn7gV3HRWb37GjRk429CCpSLS2KNTqMQ== - dependencies: - busboy "^1.6.0" - -express-rate-limit@^5.5.1: - version "5.5.1" - resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-5.5.1.tgz#110c23f6a65dfa96ab468eda95e71697bc6987a2" - integrity sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg== - -express@^4.18.2: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -ext@^1.1.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - -fast-copy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-3.0.1.tgz#9e89ef498b8c04c1cd76b33b8e14271658a732aa" - integrity sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-redact@^3.1.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.3.0.tgz#7c83ce3a7be4898241a46560d51de10f653f7634" - integrity sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== - -fast-safe-stringify@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" - integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== - -fastest-levenshtein@^1.0.12: - version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" - integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== - -file-loader@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -file-type@16.5.4: - version "16.5.4" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-16.5.4.tgz#474fb4f704bee427681f98dd390058a172a6c2fd" - integrity sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw== - dependencies: - readable-web-to-node-stream "^3.0.0" - strtok3 "^6.2.4" - token-types "^4.1.1" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-root@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - -find-up@4.1.0, find-up@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -flatley@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/flatley/-/flatley-5.2.0.tgz#3a645837c669be8d978335e37ae3afffcfbdedb7" - integrity sha512-vsb0/03uIHu7/3jRqABweblFUJMLokz1uMrcgFlvx6OAr6V3FiSic2iXeiJCj+cciTiQeumSDsIFAAnN1yvu4w== - dependencies: - is-buffer "^1.1.6" - -focus-trap@^6.9.2: - version "6.9.4" - resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-6.9.4.tgz#436da1a1d935c48b97da63cd8f361c6f3aa16444" - integrity sha512-v2NTsZe2FF59Y+sDykKY+XjqZ0cPfhq/hikWVL88BqLivnNiEffAsac6rP6H45ff9wG9LL5ToiDqrLEP9GX9mw== - dependencies: - tabbable "^5.3.3" - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fraction.js@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.1.tgz#14b4cc886575a5684f8d5fd5759c5db376bb7bb8" - integrity sha512-/KxoyCnPM0GwYI4NN0Iag38Tqt+od3/mLuguepLgCAKPn0ZhC544nssAW0tG2/00zXEYl9W+7hwAIpLHo6Oc7Q== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-monkey@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.4.tgz#ee8c1b53d3fe8bb7e5d2c5c5dfc0168afdd2f747" - integrity sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" - -get-stdin@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" - integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== - -get-tsconfig@^4.4.0: - version "4.6.2" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.6.2.tgz#831879a5e6c2aa24fe79b60340e2233a1e0f472e" - integrity sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg== - dependencies: - resolve-pkg-maps "^1.0.0" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-promise@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/glob-promise/-/glob-promise-4.2.2.tgz#15f44bcba0e14219cd93af36da6bb905ff007877" - integrity sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw== - dependencies: - "@types/glob" "^7.1.3" - -glob-to-regexp@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" - integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== - -glob@^7.1.6: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^8.0.0, glob@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphql-http@^1.17.1: - version "1.21.0" - resolved "https://registry.yarnpkg.com/graphql-http/-/graphql-http-1.21.0.tgz#04d1606e663acd3f422e86e2e85f4ae7a8b0881b" - integrity sha512-yrItPfHj5WeT4n7iusbVin+vGSQjXFAX6U/GnYytdCJRXVad1TWGtYFDZ2ROjCKpXQzIwvfbiWCEwfuXgR3B6A== - -graphql-playground-html@^1.6.30: - version "1.6.30" - resolved "https://registry.yarnpkg.com/graphql-playground-html/-/graphql-playground-html-1.6.30.tgz#14c2a8eb7fc17bfeb1a746bbb28a11e34bf0b391" - integrity sha512-tpCujhsJMva4aqE8ULnF7/l3xw4sNRZcSHu+R00VV+W0mfp+Q20Plvcrp+5UXD+2yS6oyCXncA+zoQJQqhGCEw== - dependencies: - xss "^1.0.6" - -graphql-playground-middleware-express@^1.7.23: - version "1.7.23" - resolved "https://registry.yarnpkg.com/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.23.tgz#95aba44d801ff3c08b2246917d2901d2e7c35d3d" - integrity sha512-M/zbTyC1rkgiQjFSgmzAv6umMHOphYLNWZp6Ye5QrD77WfGOOoSqDsVmGUczc2pDkEPEzzGB/bvBO5rdzaTRgw== - dependencies: - graphql-playground-html "^1.6.30" - -graphql-query-complexity@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/graphql-query-complexity/-/graphql-query-complexity-0.12.0.tgz#5f636ccc54da82225f31e898e7f27192fe074b4c" - integrity sha512-fWEyuSL6g/+nSiIRgIipfI6UXTI7bAxrpPlCY1c0+V3pAEUo1ybaKmSBgNr1ed2r+agm1plJww8Loig9y6s2dw== - dependencies: - lodash.get "^4.4.2" - -graphql-scalars@^1.20.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/graphql-scalars/-/graphql-scalars-1.22.2.tgz#6326e6fe2d0ad4228a9fea72a977e2bf26b86362" - integrity sha512-my9FB4GtghqXqi/lWSVAOPiTzTnnEzdOXCsAC2bb5V7EFNQjVjwy3cSSbUvgYOtDuDibd+ZsCDhz+4eykYOlhQ== - dependencies: - tslib "^2.5.0" - -graphql-type-json@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/graphql-type-json/-/graphql-type-json-0.3.2.tgz#f53a851dbfe07bd1c8157d24150064baab41e115" - integrity sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg== - -graphql@^16.6.0: - version "16.8.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.0.tgz#374478b7f27b2dc6153c8f42c1b80157f79d79d4" - integrity sha512-0oKGaR+y3qcS5mCu1vb7KG+a89vjn06C7Ihq/dDl3jA+A8B3TKomvi3CiEcVLJQGalbu8F52LxkOym7U5sSfbg== - -gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== - dependencies: - duplexer "^0.1.2" - -hanji@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/hanji/-/hanji-0.0.5.tgz#22a5092e53b2a83ed6172c488ae0d68eb3119213" - integrity sha512-Abxw1Lq+TnYiL4BueXqMau222fPSPMFtya8HdpWsz/xVAhifXou71mPh/kY2+08RgFcVccjG3uZHs6K5HAe3zw== - dependencies: - lodash.throttle "^4.1.1" - sisteransi "^1.0.5" - -has-bigints@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -"heap@>= 0.2.0": - version "0.2.7" - resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" - integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== - -help-me@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/help-me/-/help-me-4.2.0.tgz#50712bfd799ff1854ae1d312c36eafcea85b0563" - integrity sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA== - dependencies: - glob "^8.0.0" - readable-stream "^3.6.0" - -history@^4.9.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" - integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== - dependencies: - "@babel/runtime" "^7.1.2" - loose-envify "^1.2.0" - resolve-pathname "^3.0.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^1.0.1" - -hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" - integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== - dependencies: - react-is "^16.7.0" - -html-entities@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" - integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== - -html-minifier-terser@^6.0.2: - version "6.1.0" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" - integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== - dependencies: - camel-case "^4.1.2" - clean-css "^5.2.2" - commander "^8.3.0" - he "^1.2.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.10.0" - -html-parse-stringify@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" - integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== - dependencies: - void-elements "3.1.0" - -html-webpack-plugin@^5.5.0: - version "5.5.3" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz#72270f4a78e222b5825b296e5e3e1328ad525a3e" - integrity sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg== - dependencies: - "@types/html-minifier-terser" "^6.0.0" - html-minifier-terser "^6.0.2" - lodash "^4.17.21" - pretty-error "^4.0.0" - tapable "^2.0.0" - -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-status@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/http-status/-/http-status-1.6.2.tgz#6dc05188a9856d67d96e48e8b4fd645c719ce82a" - integrity sha512-oUExvfNckrpTpDazph7kNG8sQi5au3BeTo0idaZFXEhTaJKu7GNJCLHI0rYY2wljm548MSTM+Ljj/c6anqu2zQ== - -i18next-browser-languagedetector@^6.1.8: - version "6.1.8" - resolved "https://registry.yarnpkg.com/i18next-browser-languagedetector/-/i18next-browser-languagedetector-6.1.8.tgz#8e9c61b32a4dfe9b959b38bc9d2a8b95f799b27c" - integrity sha512-Svm+MduCElO0Meqpj1kJAriTC6OhI41VhlT/A0UPjGoPZBhAHIaGE5EfsHlTpgdH09UVX7rcc72pSDDBeKSQQA== - dependencies: - "@babel/runtime" "^7.19.0" - -i18next-http-middleware@^3.2.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/i18next-http-middleware/-/i18next-http-middleware-3.3.2.tgz#6a24fee6bde44952a5af24364d43fa32f6c1b9b6" - integrity sha512-PSeLXQXr9Qiv9Q3GCWCoIJenKVbxCcVsXb7VMp/mOprV4gu+AMJT7VHw4+QEf6oYW6GU31QSLnfDpLNoSMtx3g== - -i18next@^22.4.9: - version "22.5.1" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-22.5.1.tgz#99df0b318741a506000c243429a7352e5f44d424" - integrity sha512-8TGPgM3pAD+VRsMtUMNknRz3kzqwp/gPALrWMsDnmC1mKqJwpWyooQRLMcbTwq8z8YwSmuj+ZYvc+xCuEpkssA== - dependencies: - "@babel/runtime" "^7.20.6" - -iconv-lite@0.4.24, iconv-lite@^0.4.4: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-utils@^5.0.0, icss-utils@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" - integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -immer@^9.0.6: - version "9.0.21" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" - integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== - -immutable@^4.0.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.2.tgz#f89d910f8dfb6e15c03b2cae2faaf8c1f66455fe" - integrity sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -internal-slot@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== - dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" - side-channel "^1.0.4" - -interpret@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^1.1.6, is-buffer@~1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.3: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== - dependencies: - has "^1.0.3" - -is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hotkey@^0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.1.8.tgz#6b1f4b2d0e5639934e20c05ed24d623a21d36d25" - integrity sha512-qs3NZ1INIS+H+yeo7cD9pDfwYV/jqRh1JG9S9zYrNudkoUQg7OL7ziXqRKu+InFjUIDoP2o6HIkLYMh1pcWgyQ== - -is-hotkey@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.2.0.tgz#1835a68171a91e5c9460869d96336947c8340cef" - integrity sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw== - -is-map@^2.0.1, is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-promise@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-set@^2.0.1, is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: - which-typed-array "^1.1.11" - -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== - -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -isomorphic-fetch@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz#0267b005049046d2421207215d45d6a262b8b8b4" - integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== - dependencies: - node-fetch "^2.6.1" - whatwg-fetch "^3.4.1" - -jest-util@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.3.tgz#e15c3eac8716440d1ed076f09bc63ace1aebca63" - integrity sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-worker@^27.4.5: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest-worker@^29.4.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.6.3.tgz#7b1a47bbb6559f3c0882d16595938590e63915d5" - integrity sha512-wacANXecZ/GbQakpf2CClrqrlwsYYDSXFd4fIGdL+dXpM2GWoJ+6bhQ7vR3TKi3+gkSfBkjy1/khH/WrYS4Q6g== - dependencies: - "@types/node" "*" - jest-util "^29.6.3" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -joi@^17.7.0: - version "17.9.2" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.2.tgz#8b2e4724188369f55451aebd1d0b1d9482470690" - integrity sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw== - dependencies: - "@hapi/hoek" "^9.0.0" - "@hapi/topo" "^5.0.0" - "@sideway/address" "^4.1.3" - "@sideway/formula" "^3.0.1" - "@sideway/pinpoint" "^2.0.0" - -joycon@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" - integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== - -js-base64@^3.7.5: - version "3.7.5" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.5.tgz#21e24cf6b886f76d6f5f165bfcd69cc55b9e3fca" - integrity sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -json-diff@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/json-diff/-/json-diff-0.9.0.tgz#e7c536798053cb409113d7403c774849e8a0d7ff" - integrity sha512-cVnggDrVkAAA3OvFfHpFEhOnmcsUpleEKq4d4O8sQWWSH40MBrWstKigVB1kGrgLWzuom+7rRdaCsnBD6VyObQ== - dependencies: - cli-color "^2.0.0" - difflib "~0.2.1" - dreamopt "~0.8.0" - -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-to-typescript@11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/json-schema-to-typescript/-/json-schema-to-typescript-11.0.3.tgz#9b401c2b78329959f1c4c4e0639a6bdcf6a6ed77" - integrity sha512-EaEE9Y4VZ8b9jW5zce5a9L3+p4C9AqgIRHbNVDJahfMnoKzcd4sDb98BLxLdQhJEuRAXyKLg4H66NKm80W8ilg== - dependencies: - "@bcherny/json-schema-ref-parser" "9.0.9" - "@types/json-schema" "^7.0.11" - "@types/lodash" "^4.14.182" - "@types/prettier" "^2.6.1" - cli-color "^2.0.2" - get-stdin "^8.0.0" - glob "^7.1.6" - glob-promise "^4.2.2" - is-glob "^4.0.3" - lodash "^4.17.21" - minimist "^1.2.6" - mkdirp "^1.0.4" - mz "^2.7.0" - prettier "^2.6.2" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-schema-typed@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9" - integrity sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A== - -json5@^2.1.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonwebtoken@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz#81d8c901c112c24e497a55daf6b2be1225b40145" - integrity sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg== - dependencies: - jws "^3.2.2" - lodash "^4.17.21" - ms "^2.1.1" - semver "^7.3.8" - -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - -jwt-decode@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-3.1.2.tgz#3fb319f3675a2df0c2895c8f5e9fa4b67b04ed59" - integrity sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A== - -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -klona@^2.0.4, klona@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" - integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== - -lilconfig@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -loader-runner@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" - integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== - -loader-utils@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" - integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== - -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.throttle@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" - integrity sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ== - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== - -lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" - integrity sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ== - dependencies: - es5-ext "~0.10.2" - -md5@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f" - integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== - dependencies: - charenc "0.0.2" - crypt "0.0.2" - is-buffer "~1.1.6" - -mdn-data@2.0.28: - version "2.0.28" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" - integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== - -mdn-data@2.0.30: - version "2.0.30" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" - integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memfs@^3.4.12: - version "3.6.0" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" - integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== - dependencies: - fs-monkey "^1.0.4" - -memoize-one@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" - integrity sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw== - -memoizee@^0.4.15: - version "0.4.15" - resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72" - integrity sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ== - dependencies: - d "^1.0.1" - es5-ext "^0.10.53" - es6-weak-map "^2.0.3" - event-emitter "^0.3.5" - is-promise "^2.2.2" - lru-queue "^0.1.0" - next-tick "^1.1.0" - timers-ext "^0.1.7" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -method-override@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/method-override/-/method-override-3.0.0.tgz#6ab0d5d574e3208f15b0c9cf45ab52000468d7a2" - integrity sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA== - dependencies: - debug "3.1.0" - methods "~1.1.2" - parseurl "~1.3.2" - vary "~1.1.2" - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micro-memoize@^4.0.14: - version "4.1.2" - resolved "https://registry.yarnpkg.com/micro-memoize/-/micro-memoize-4.1.2.tgz#ce719c1ba1e41592f1cd91c64c5f41dcbf135f36" - integrity sha512-+HzcV2H+rbSJzApgkj0NdTakkC+bnyeiUxgT6/m7mjcz1CmM22KYFKp+EVj1sWe4UYcnriJr5uqHQD/gMHLD+g== - -mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" - integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -mini-css-extract-plugin@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz#83172b4fd812f8fc4a09d6f6d16f924f53990ca8" - integrity sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - webpack-sources "^1.1.0" - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^7.4.3: - version "7.4.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" - integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6, minimist@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -monaco-editor@^0.38.0: - version "0.38.0" - resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.38.0.tgz#7b3cd16f89b1b8867fcd3c96e67fccee791ff05c" - integrity sha512-11Fkh6yzEmwx7O0YoLxeae0qEGFwmyPRlVxpg7oF9czOOCB/iCjdJrG5I67da5WiXK3YJCxoz9TJFE8Tfq/v9A== - -mrmime@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" - integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -needle@^2.5.2: - version "2.9.1" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684" - integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -neo-async@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -next-tick@1, next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -node-abi@^3.3.0: - version "3.45.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.45.0.tgz#f568f163a3bfca5aacfce1fbeee1fa2cc98441f5" - integrity sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ== - dependencies: - semver "^7.3.5" - -node-addon-api@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" - integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== - -node-fetch@^2.2.6: - version "2.6.12" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" - integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^2.6.1: - version "2.6.13" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.13.tgz#a20acbbec73c2e09f9007de5cda17104122e0010" - integrity sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA== - dependencies: - whatwg-url "^5.0.0" - -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -nodemailer@^6.9.0: - version "6.9.4" - resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-6.9.4.tgz#93bd4a60eb0be6fa088a0483340551ebabfd2abf" - integrity sha512-CXjQvrQZV4+6X5wP6ZIgdehJamI63MFoYFGGPtHudWym9qaEHDNdPzaj5bfMCvxG1vhAileSWW90q7nL0N36mA== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -object-assign@^4.0.1, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-to-formdata@^4.4.2: - version "4.5.1" - resolved "https://registry.yarnpkg.com/object-to-formdata/-/object-to-formdata-4.5.1.tgz#b6955a9c505b58df15852fee5f844b418b3eb6fe" - integrity sha512-QiM9D0NiU5jV6J6tjE1g7b4Z2tcUnKs1OPUi4iMb2zH+7jwlcUrASghgkFk9GtzqNNq8rTQJtT8AzjBAvLoNMw== - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -obuf@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-exit-leak-free@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz#5c703c968f7e7f851885f6459bf8a8a57edc9cc4" - integrity sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -opener@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -packet-reader@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" - integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== - -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -passport-anonymous@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/passport-anonymous/-/passport-anonymous-1.0.1.tgz#241e37274ec44dfb7f6cad234b41c438386bc117" - integrity sha512-Mk2dls97nLTzHpsWCYQ54IVGucWaiWSHHr3+IhWYAebg4dRgRQIfyoeYrixoxB2z2z4+EM7p9yjC+a3yMB5z5A== - dependencies: - passport-strategy "1.x.x" - -passport-headerapikey@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/passport-headerapikey/-/passport-headerapikey-1.2.2.tgz#b71960523999c9864151b8535c919e3ff5ba75ce" - integrity sha512-4BvVJRrWsNJPrd3UoZfcnnl4zvUWYKEtfYkoDsaOKBsrWHYmzTApCjs7qUbncOLexE9ul0IRiYBFfBG0y9IVQA== - dependencies: - lodash "^4.17.15" - passport-strategy "^1.0.0" - -passport-jwt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/passport-jwt/-/passport-jwt-4.0.1.tgz#c443795eff322c38d173faa0a3c481479646ec3d" - integrity sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ== - dependencies: - jsonwebtoken "^9.0.0" - passport-strategy "^1.0.0" - -passport-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/passport-local/-/passport-local-1.0.0.tgz#1fe63268c92e75606626437e3b906662c15ba6ee" - integrity sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow== - dependencies: - passport-strategy "1.x.x" - -passport-strategy@1.x.x, passport-strategy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" - integrity sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA== - -passport@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/passport/-/passport-0.6.0.tgz#e869579fab465b5c0b291e841e6cc95c005fac9d" - integrity sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug== - dependencies: - passport-strategy "1.x.x" - pause "0.0.1" - utils-merge "^1.0.1" - -path-browserify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pause@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" - integrity sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg== - -payload@payloadcms/payload#build/chore/update-2.0: - version "1.14.0" - resolved "https://codeload.github.com/payloadcms/payload/tar.gz/76b46b5f4529080a4e42a970529430ea8859d0b8" - dependencies: - "@date-io/date-fns" "^2.16.0" - "@dnd-kit/core" "^6.0.7" - "@dnd-kit/sortable" "^7.0.2" - "@faceless-ui/modal" "^2.0.1" - "@faceless-ui/scroll-info" "^1.3.0" - "@faceless-ui/window-info" "^2.1.1" - "@monaco-editor/react" "^4.5.1" - "@swc/core" "^1.3.76" - "@swc/register" "^0.1.10" - "@types/sharp" "^0.31.1" - body-parser "^1.20.1" - bson-objectid "^2.0.4" - compression "^1.7.4" - conf "^10.2.0" - connect-history-api-fallback "^1.6.0" - console-table-printer "^2.11.2" - css-loader "^5.2.7" - css-minimizer-webpack-plugin "^5.0.0" - dataloader "^2.1.0" - date-fns "^2.29.3" - deep-equal "^2.2.0" - deepmerge "^4.2.2" - dotenv "^8.6.0" - express "^4.18.2" - express-fileupload "1.4.0" - express-rate-limit "^5.5.1" - file-loader "^6.2.0" - file-type "16.5.4" - find-up "4.1.0" - flatley "^5.2.0" - fs-extra "^10.1.0" - get-tsconfig "^4.4.0" - graphql "^16.6.0" - graphql-http "^1.17.1" - graphql-playground-middleware-express "^1.7.23" - graphql-query-complexity "^0.12.0" - graphql-scalars "^1.20.1" - graphql-type-json "^0.3.2" - html-webpack-plugin "^5.5.0" - http-status "^1.6.2" - i18next "^22.4.9" - i18next-browser-languagedetector "^6.1.8" - i18next-http-middleware "^3.2.2" - is-hotkey "^0.2.0" - is-plain-object "^5.0.0" - isomorphic-fetch "^3.0.0" - joi "^17.7.0" - json-schema-to-typescript "11.0.3" - jsonwebtoken "^9.0.0" - jwt-decode "^3.1.2" - md5 "^2.3.0" - method-override "^3.0.0" - micro-memoize "^4.0.14" - mini-css-extract-plugin "1.6.2" - minimist "^1.2.7" - mkdirp "^1.0.4" - monaco-editor "^0.38.0" - nodemailer "^6.9.0" - object-to-formdata "^4.4.2" - passport "^0.6.0" - passport-anonymous "^1.0.1" - passport-headerapikey "^1.2.2" - passport-jwt "^4.0.1" - passport-local "^1.0.0" - path-browserify "^1.0.1" - pino "^8.15.0" - pino-pretty "^10.2.0" - pluralize "^8.0.0" - postcss "^8.4.21" - postcss-loader "^6.2.1" - postcss-preset-env "^9.0.0" - probe-image-size "^6.0.0" - process "^0.11.10" - qs "^6.11.0" - qs-middleware "^1.0.3" - react "^18.2.0" - react-animate-height "^2.1.2" - react-datepicker "^4.10.0" - react-diff-viewer-continued "^3.2.6" - react-dom "^18.2.0" - react-helmet "^6.1.0" - react-i18next "^11.18.6" - react-router-dom "^5.3.4" - react-router-navigation-prompt "^1.9.6" - react-select "^5.7.3" - react-toastify "^8.2.0" - sanitize-filename "^1.6.3" - sass "^1.57.1" - sass-loader "^12.6.0" - scheduler "^0.23.0" - scmp "^2.1.0" - sharp "^0.31.3" - slate "^0.91.4" - slate-history "^0.86.0" - slate-hyperscript "^0.81.3" - slate-react "^0.92.0" - style-loader "^2.0.0" - swc-loader "^0.2.3" - swc-minify-webpack-plugin "^2.1.0" - terser-webpack-plugin "^5.3.6" - ts-essentials "^7.0.3" - url-loader "^4.1.1" - use-context-selector "^1.4.1" - uuid "^8.3.2" - webpack "^5.78.0" - webpack-bundle-analyzer "^4.8.0" - webpack-cli "^4.10.0" - webpack-dev-middleware "6.0.1" - webpack-hot-middleware "^2.25.3" - -peek-readable@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-4.1.0.tgz#4ece1111bf5c2ad8867c314c81356847e8a62e72" - integrity sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg== - -pg-cloudflare@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz#e6d5833015b170e23ae819e8c5d7eaedb472ca98" - integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q== - -pg-connection-string@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475" - integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA== - -pg-int8@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" - integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== - -pg-numeric@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pg-numeric/-/pg-numeric-1.0.2.tgz#816d9a44026086ae8ae74839acd6a09b0636aa3a" - integrity sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw== - -pg-pool@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.1.tgz#5a902eda79a8d7e3c928b77abf776b3cb7d351f7" - integrity sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og== - -pg-protocol@*, pg-protocol@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833" - integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q== - -pg-types@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" - integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== - dependencies: - pg-int8 "1.0.1" - postgres-array "~2.0.0" - postgres-bytea "~1.0.0" - postgres-date "~1.0.4" - postgres-interval "^1.1.0" - -pg-types@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-4.0.1.tgz#31857e89d00a6c66b06a14e907c3deec03889542" - integrity sha512-hRCSDuLII9/LE3smys1hRHcu5QGcLs9ggT7I/TCs0IE+2Eesxi9+9RWAAwZ0yaGjxoWICF/YHLOEjydGujoJ+g== - dependencies: - pg-int8 "1.0.1" - pg-numeric "1.0.2" - postgres-array "~3.0.1" - postgres-bytea "~3.0.0" - postgres-date "~2.0.1" - postgres-interval "^3.0.0" - postgres-range "^1.1.1" - -pg@^8.11.1: - version "8.11.2" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.2.tgz#1a23f6de7bfb65ba56e4dd15df96668d319900c4" - integrity sha512-l4rmVeV8qTIrrPrIR3kZQqBgSN93331s9i6wiUiLOSk0Q7PmUxZD/m1rQI622l3NfqBby9Ar5PABfS/SulfieQ== - dependencies: - buffer-writer "2.0.0" - packet-reader "1.0.0" - pg-connection-string "^2.6.2" - pg-pool "^3.6.1" - pg-protocol "^1.6.0" - pg-types "^2.1.0" - pgpass "1.x" - optionalDependencies: - pg-cloudflare "^1.1.1" - -pgpass@1.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" - integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== - dependencies: - split2 "^4.1.0" - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pino-abstract-transport@^1.0.0, pino-abstract-transport@v1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.0.0.tgz#cc0d6955fffcadb91b7b49ef220a6cc111d48bb3" - integrity sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA== - dependencies: - readable-stream "^4.0.0" - split2 "^4.0.0" - -pino-pretty@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/pino-pretty/-/pino-pretty-10.2.0.tgz#c674a153e15c08d7032a826d0051d786feace1d9" - integrity sha512-tRvpyEmGtc2D+Lr3FulIZ+R1baggQ4S3xD2Ar93KixFEDx6SEAUP3W5aYuEw1C73d6ROrNcB2IXLteW8itlwhA== - dependencies: - colorette "^2.0.7" - dateformat "^4.6.3" - fast-copy "^3.0.0" - fast-safe-stringify "^2.1.1" - help-me "^4.0.1" - joycon "^3.1.1" - minimist "^1.2.6" - on-exit-leak-free "^2.1.0" - pino-abstract-transport "^1.0.0" - pump "^3.0.0" - readable-stream "^4.0.0" - secure-json-parse "^2.4.0" - sonic-boom "^3.0.0" - strip-json-comments "^3.1.1" - -pino-std-serializers@^6.0.0: - version "6.2.2" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz#d9a9b5f2b9a402486a5fc4db0a737570a860aab3" - integrity sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA== - -pino@^8.15.0: - version "8.15.0" - resolved "https://registry.yarnpkg.com/pino/-/pino-8.15.0.tgz#67c61d5e397bf297e5a0433976a7f7b8aa6f876b" - integrity sha512-olUADJByk4twxccmAxb1RiGKOSvddHugCV3wkqjyv+3Sooa2KLrmXrKEWOKi0XPCLasRR5jBXxioE1jxUa4KzQ== - dependencies: - atomic-sleep "^1.0.0" - fast-redact "^3.1.1" - on-exit-leak-free "^2.1.0" - pino-abstract-transport v1.0.0 - pino-std-serializers "^6.0.0" - process-warning "^2.0.0" - quick-format-unescaped "^4.0.3" - real-require "^0.2.0" - safe-stable-stringify "^2.3.1" - sonic-boom "^3.1.0" - thread-stream "^2.0.0" - -pirates@^4.0.1: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== - dependencies: - find-up "^3.0.0" - -pluralize@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" - integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== - -postcss-attribute-case-insensitive@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.2.tgz#e843091859323342e461878d201ee70278809e01" - integrity sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-calc@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-9.0.1.tgz#a744fd592438a93d6de0f1434c572670361eb6c6" - integrity sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ== - dependencies: - postcss-selector-parser "^6.0.11" - postcss-value-parser "^4.2.0" - -postcss-clamp@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363" - integrity sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-functional-notation@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.0.tgz#dcc1b8b6273099c597a790dc484d89e2573f5f17" - integrity sha512-kaWTgnhRKFtfMF8H0+NQBFxgr5CGg05WGe07Mc1ld6XHwwRWlqSbHOW0zwf+BtkBQpsdVUu7+gl9dtdvhWMedw== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - postcss-value-parser "^4.2.0" - -postcss-color-hex-alpha@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.2.tgz#6d3ed50342802469880981a1999515d003ff7d79" - integrity sha512-SfPjgr//VQ/DOCf80STIAsdAs7sbIbxATvVmd+Ec7JvR8onz9pjawhq3BJM3Pie40EE3TyB0P6hft16D33Nlyg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-color-rebeccapurple@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.0.tgz#317bf718962c70b779efacf3dc040c56f05d03ce" - integrity sha512-RmUFL+foS05AKglkEoqfx+KFdKRVmqUAxlHNz4jLqIi7046drIPyerdl4B6j/RA2BSP8FI8gJcHmLRrwJOMnHw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-colormin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.0.0.tgz#d4250652e952e1c0aca70c66942da93d3cdeaafe" - integrity sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - colord "^2.9.1" - postcss-value-parser "^4.2.0" - -postcss-convert-values@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz#ec94a954957e5c3f78f0e8f65dfcda95280b8996" - integrity sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw== - dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" - -postcss-custom-media@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-10.0.0.tgz#299781f67d043de7d3eaa13923c26c586d9cd57a" - integrity sha512-NxDn7C6GJ7X8TsWOa8MbCdq9rLERRLcPfQSp856k1jzMreL8X9M6iWk35JjPRIb9IfRnVohmxAylDRx7n4Rv4g== - dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.3" - "@csstools/css-parser-algorithms" "^2.3.0" - "@csstools/css-tokenizer" "^2.1.1" - "@csstools/media-query-list-parser" "^2.1.2" - -postcss-custom-properties@^13.3.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-13.3.0.tgz#53361280a9ec57c2ac448c0877ba25c4978241ee" - integrity sha512-q4VgtIKSy5+KcUvQ0WxTjDy9DZjQ5VCXAZ9+tT9+aPMbA0z6s2t1nMw0QHszru1ib5ElkXl9JUpYYU37VVUs7g== - dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.4" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - postcss-value-parser "^4.2.0" - -postcss-custom-selectors@^7.1.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-7.1.4.tgz#5980972353119af0d9725bdcccad46be8cfc9011" - integrity sha512-TU2xyUUBTlpiLnwyE2ZYMUIYB41MKMkBZ8X8ntkqRDQ8sdBLhFFsPgNcOliBd5+/zcK51C9hRnSE7hKUJMxQSw== - dependencies: - "@csstools/cascade-layer-name-parser" "^1.0.3" - "@csstools/css-parser-algorithms" "^2.3.0" - "@csstools/css-tokenizer" "^2.1.1" - postcss-selector-parser "^6.0.13" - -postcss-dir-pseudo-class@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-8.0.0.tgz#9e4e37d170f672520d3f38fd8376db0ca04d4e9c" - integrity sha512-Oy5BBi0dWPwij/IA+yDYj+/OBMQ9EPqAzTHeSNUYrUWdll/PRJmcbiUj0MNcsBi681I1gcSTLvMERPaXzdbvJg== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-discard-comments@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz#9ca335e8b68919f301b24ba47dde226a42e535fe" - integrity sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw== - -postcss-discard-duplicates@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz#c26177a6c33070922e67e9a92c0fd23d443d1355" - integrity sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA== - -postcss-discard-empty@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz#06c1c4fce09e22d2a99e667c8550eb8a3a1b9aee" - integrity sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ== - -postcss-discard-overridden@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz#49c5262db14e975e349692d9024442de7cd8e234" - integrity sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw== - -postcss-double-position-gradients@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.0.tgz#cdc11e1210c3fbd3f7bc242a5ee83e5b9d7db8fa" - integrity sha512-wR8npIkrIVUTicUpCWSSo1f/g7gAEIH70FMqCugY4m4j6TX4E0T2Q5rhfO0gqv00biBZdLyb+HkW8x6as+iJNQ== - dependencies: - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - postcss-value-parser "^4.2.0" - -postcss-focus-visible@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-9.0.0.tgz#a81227428d6f1e524099c6581f7c7132f987e382" - integrity sha512-zA4TbVaIaT8npZBEROhZmlc+GBKE8AELPHXE7i4TmIUEQhw/P/mSJfY9t6tBzpQ1rABeGtEOHYrW4SboQeONMQ== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-focus-within@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-8.0.0.tgz#8304380dd2dadc1c2dcfa52816ff86be7736fc16" - integrity sha512-E7+J9nuQzZaA37D/MUZMX1K817RZGDab8qw6pFwzAkDd/QtlWJ9/WTKmzewNiuxzeq6WWY7ATiRePVoDKp+DnA== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-font-variant@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66" - integrity sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA== - -postcss-gap-properties@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-5.0.0.tgz#3bd77f3d51facb1da404b4edd72b8203929385a5" - integrity sha512-YjsEEL6890P7MCv6fch6Am1yq0EhQCJMXyT4LBohiu87+4/WqR7y5W3RIv53WdA901hhytgRvjlrAhibhW4qsA== - -postcss-image-set-function@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-6.0.0.tgz#a5aba4a805ae903ab8200b584242149c48c481fb" - integrity sha512-bg58QnJexFpPBU4IGPAugAPKV0FuFtX5rHYNSKVaV91TpHN7iwyEzz1bkIPCiSU5+BUN00e+3fV5KFrwIgRocw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-initial@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-4.0.1.tgz#529f735f72c5724a0fb30527df6fb7ac54d7de42" - integrity sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ== - -postcss-lab-function@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-6.0.1.tgz#46dc530a242972d47018c6627128d8e9e96b82c8" - integrity sha512-/Xl6JitDh7jWkcOLxrHcAlEaqkxyaG3g4iDMy5RyhNaiQPJ9Egf2+Mxp1W2qnH5jB2bj59f3RbdKmC6qx1IcXA== - dependencies: - "@csstools/css-color-parser" "^1.2.2" - "@csstools/css-parser-algorithms" "^2.3.1" - "@csstools/css-tokenizer" "^2.2.0" - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - -postcss-loader@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef" - integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== - dependencies: - cosmiconfig "^7.0.0" - klona "^2.0.5" - semver "^7.3.5" - -postcss-logical@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-7.0.0.tgz#9a83426e716e3c8f957dda3fd874edbcf22c754e" - integrity sha512-zYf3vHkoW82f5UZTEXChTJvH49Yl9X37axTZsJGxrCG2kOUwtaAoz9E7tqYg0lsIoJLybaL8fk/2mOi81zVIUw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-merge-longhand@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz#6f627b27db939bce316eaa97e22400267e798d69" - integrity sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg== - dependencies: - postcss-value-parser "^4.2.0" - stylehacks "^6.0.0" - -postcss-merge-rules@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz#39f165746404e646c0f5c510222ccde4824a86aa" - integrity sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - cssnano-utils "^4.0.0" - postcss-selector-parser "^6.0.5" - -postcss-minify-font-values@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz#68d4a028f9fa5f61701974724b2cc9445d8e6070" - integrity sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-minify-gradients@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz#22b5c88cc63091dadbad34e31ff958404d51d679" - integrity sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA== - dependencies: - colord "^2.9.1" - cssnano-utils "^4.0.0" - postcss-value-parser "^4.2.0" - -postcss-minify-params@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz#2b3a85a9e3b990d7a16866f430f5fd1d5961b539" - integrity sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ== - dependencies: - browserslist "^4.21.4" - cssnano-utils "^4.0.0" - postcss-value-parser "^4.2.0" - -postcss-minify-selectors@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz#5046c5e8680a586e5a0cad52cc9aa36d6be5bda2" - integrity sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-modules-extract-imports@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" - integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== - -postcss-modules-local-by-default@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" - integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== - dependencies: - icss-utils "^5.0.0" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" - -postcss-modules-scope@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" - integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== - dependencies: - postcss-selector-parser "^6.0.4" - -postcss-modules-values@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" - integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== - dependencies: - icss-utils "^5.0.0" - -postcss-nesting@^12.0.1: - version "12.0.1" - resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-12.0.1.tgz#abb76d15dfd59a9f7d03b4464f53b60a4d3795c4" - integrity sha512-6LCqCWP9pqwXw/njMvNK0hGY44Fxc4B2EsGbn6xDcxbNRzP8GYoxT7yabVVMLrX3quqOJ9hg2jYMsnkedOf8pA== - dependencies: - "@csstools/selector-specificity" "^3.0.0" - postcss-selector-parser "^6.0.13" - -postcss-normalize-charset@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz#36cc12457259064969fb96f84df491652a4b0975" - integrity sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ== - -postcss-normalize-display-values@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz#8d2961415078644d8c6bbbdaf9a2fdd60f546cd4" - integrity sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-positions@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz#25b96df99a69f8925f730eaee0be74416865e301" - integrity sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-repeat-style@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz#ddf30ad8762feb5b1eb97f39f251acd7b8353299" - integrity sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-string@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz#948282647a51e409d69dde7910f0ac2ff97cb5d8" - integrity sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-timing-functions@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz#5f13e650b8c43351989fc5de694525cc2539841c" - integrity sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-unicode@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz#741b3310f874616bdcf07764f5503695d3604730" - integrity sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg== - dependencies: - browserslist "^4.21.4" - postcss-value-parser "^4.2.0" - -postcss-normalize-url@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz#d0a31e962a16401fb7deb7754b397a323fb650b4" - integrity sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-normalize-whitespace@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz#accb961caa42e25ca4179b60855b79b1f7129d4d" - integrity sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-opacity-percentage@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-2.0.0.tgz#c0a56060cd4586e3f954dbde1efffc2deed53002" - integrity sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ== - -postcss-ordered-values@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz#374704cdff25560d44061d17ba3c6308837a3218" - integrity sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg== - dependencies: - cssnano-utils "^4.0.0" - postcss-value-parser "^4.2.0" - -postcss-overflow-shorthand@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-5.0.0.tgz#1ed6d6c532cdf52b5dabec06662dc63f9207855c" - integrity sha512-2rlxDyeSics/hC2FuMdPnWiP9WUPZ5x7FTuArXLFVpaSQ2woPSfZS4RD59HuEokbZhs/wPUQJ1E3MT6zVv94MQ== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-page-break@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f" - integrity sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ== - -postcss-place@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-9.0.0.tgz#7e47851bf40d16ce06f6013453b706100ca6c102" - integrity sha512-qLEPD9VPH5opDVemwmRaujODF9nExn24VOC3ghgVLEvfYN7VZLwJHes0q/C9YR5hI2UC3VgBE8Wkdp1TxCXhtg== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-preset-env@^9.0.0: - version "9.1.1" - resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-9.1.1.tgz#0217fd0d41b9f62f10e1e2c8c5502bbdcb1a76b1" - integrity sha512-rMPEqyTLm8JLbvaHnDAdQg6SN4Z/NDOsm+CRefg4HmSOiNpTcBXaw4RAaQbfTNe8BB75l4NpoQ6sMdrutdEpdQ== - dependencies: - "@csstools/postcss-cascade-layers" "^4.0.0" - "@csstools/postcss-color-function" "^3.0.1" - "@csstools/postcss-color-mix-function" "^2.0.1" - "@csstools/postcss-exponential-functions" "^1.0.0" - "@csstools/postcss-font-format-keywords" "^3.0.0" - "@csstools/postcss-gradients-interpolation-method" "^4.0.1" - "@csstools/postcss-hwb-function" "^3.0.1" - "@csstools/postcss-ic-unit" "^3.0.0" - "@csstools/postcss-is-pseudo-class" "^4.0.0" - "@csstools/postcss-logical-float-and-clear" "^2.0.0" - "@csstools/postcss-logical-resize" "^2.0.0" - "@csstools/postcss-logical-viewport-units" "^2.0.1" - "@csstools/postcss-media-minmax" "^1.0.7" - "@csstools/postcss-media-queries-aspect-ratio-number-values" "^2.0.2" - "@csstools/postcss-nested-calc" "^3.0.0" - "@csstools/postcss-normalize-display-values" "^3.0.0" - "@csstools/postcss-oklab-function" "^3.0.1" - "@csstools/postcss-progressive-custom-properties" "^3.0.0" - "@csstools/postcss-relative-color-syntax" "^2.0.1" - "@csstools/postcss-scope-pseudo-class" "^3.0.0" - "@csstools/postcss-stepped-value-functions" "^3.0.1" - "@csstools/postcss-text-decoration-shorthand" "^3.0.0" - "@csstools/postcss-trigonometric-functions" "^3.0.1" - "@csstools/postcss-unset-value" "^3.0.0" - autoprefixer "^10.4.14" - browserslist "^4.21.10" - css-blank-pseudo "^6.0.0" - css-has-pseudo "^6.0.0" - css-prefers-color-scheme "^9.0.0" - cssdb "^7.7.0" - postcss-attribute-case-insensitive "^6.0.2" - postcss-clamp "^4.1.0" - postcss-color-functional-notation "^6.0.0" - postcss-color-hex-alpha "^9.0.2" - postcss-color-rebeccapurple "^9.0.0" - postcss-custom-media "^10.0.0" - postcss-custom-properties "^13.3.0" - postcss-custom-selectors "^7.1.4" - postcss-dir-pseudo-class "^8.0.0" - postcss-double-position-gradients "^5.0.0" - postcss-focus-visible "^9.0.0" - postcss-focus-within "^8.0.0" - postcss-font-variant "^5.0.0" - postcss-gap-properties "^5.0.0" - postcss-image-set-function "^6.0.0" - postcss-initial "^4.0.1" - postcss-lab-function "^6.0.1" - postcss-logical "^7.0.0" - postcss-nesting "^12.0.1" - postcss-opacity-percentage "^2.0.0" - postcss-overflow-shorthand "^5.0.0" - postcss-page-break "^3.0.4" - postcss-place "^9.0.0" - postcss-pseudo-class-any-link "^9.0.0" - postcss-replace-overflow-wrap "^4.0.0" - postcss-selector-not "^7.0.1" - postcss-value-parser "^4.2.0" - -postcss-pseudo-class-any-link@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.0.tgz#5fb5b700e0ecdc845a94eb433b8ccff756cbf660" - integrity sha512-QNCYIL98VKFKY6HGDEJpF6+K/sg9bxcUYnOmNHJxZS5wsFDFaVoPeG68WAuhsqwbIBSo/b9fjEnTwY2mTSD+uA== - dependencies: - postcss-selector-parser "^6.0.13" - -postcss-reduce-initial@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz#7d16e83e60e27e2fa42f56ec0b426f1da332eca7" - integrity sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA== - dependencies: - browserslist "^4.21.4" - caniuse-api "^3.0.0" - -postcss-reduce-transforms@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz#28ff2601a6d9b96a2f039b3501526e1f4d584a46" - integrity sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w== - dependencies: - postcss-value-parser "^4.2.0" - -postcss-replace-overflow-wrap@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319" - integrity sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw== - -postcss-selector-not@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-7.0.1.tgz#8142e90c8eb6c8c5faecb3e9d96d4353d02e94fb" - integrity sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ== - dependencies: - postcss-selector-parser "^6.0.10" - -postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.13, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-svgo@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.0.tgz#7b18742d38d4505a0455bbe70d52b49f00eaf69d" - integrity sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw== - dependencies: - postcss-value-parser "^4.2.0" - svgo "^3.0.2" - -postcss-unique-selectors@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz#c94e9b0f7bffb1203894e42294b5a1b3fb34fbe1" - integrity sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw== - dependencies: - postcss-selector-parser "^6.0.5" - -postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" - integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== - -postcss@^8.2.15, postcss@^8.4.21, postcss@^8.4.24: - version "8.4.28" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.28.tgz#c6cc681ed00109072816e1557f889ef51cf950a5" - integrity sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postgres-array@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" - integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== - -postgres-array@~3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-3.0.2.tgz#68d6182cb0f7f152a7e60dc6a6889ed74b0a5f98" - integrity sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog== - -postgres-bytea@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" - integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== - -postgres-bytea@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-3.0.0.tgz#9048dc461ac7ba70a6a42d109221619ecd1cb089" - integrity sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw== - dependencies: - obuf "~1.1.2" - -postgres-date@~1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" - integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== - -postgres-date@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-2.0.1.tgz#638b62e5c33764c292d37b08f5257ecb09231457" - integrity sha512-YtMKdsDt5Ojv1wQRvUhnyDJNSr2dGIC96mQVKz7xufp07nfuFONzdaowrMHjlAzY6GDLd4f+LUHHAAM1h4MdUw== - -postgres-interval@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" - integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== - dependencies: - xtend "^4.0.0" - -postgres-interval@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-3.0.0.tgz#baf7a8b3ebab19b7f38f07566c7aab0962f0c86a" - integrity sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw== - -postgres-range@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/postgres-range/-/postgres-range-1.1.3.tgz#9ccd7b01ca2789eb3c2e0888b3184225fa859f76" - integrity sha512-VdlZoocy5lCP0c/t66xAfclglEapXPCIVhqqJRncYpvbCgImF0w67aPKfbqUMr72tO2k5q0TdTZwCLjPTI6C9g== - -prebuild-install@^7.1.0, prebuild-install@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" - integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== - dependencies: - detect-libc "^2.0.0" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^3.3.0" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^4.0.0" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - -prettier@^2.6.2: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -pretty-error@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" - integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== - dependencies: - lodash "^4.17.20" - renderkid "^3.0.0" - -probe-image-size@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/probe-image-size/-/probe-image-size-6.0.0.tgz#4a85b19d5af4e29a8de7d53a9aa036f6fd02f5f4" - integrity sha512-99PZ5+RU4gqiTfK5ZDMDkZtn6eL4WlKfFyVJV7lFQvH3iGmQ85DqMTOdxorERO26LHkevR2qsxnHp0x/2UDJPA== - dependencies: - deepmerge "^4.0.0" - needle "^2.5.2" - stream-parser "~0.3.1" - -process-warning@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-2.2.0.tgz#008ec76b579820a8e5c35d81960525ca64feb626" - integrity sha512-/1WZ8+VQjR6avWOgHeEPd7SDQmFQ1B5mC1eRXsCm5TarlNmx/wCsa5GEaxGm05BORRtyG/Ex/3xq3TuRvq57qg== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -prompts@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -qs-middleware@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/qs-middleware/-/qs-middleware-1.0.3.tgz#84f3535275ba20fd00c2122efacce6ab01092c19" - integrity sha512-ymlixxD/0Bj3BMY9x1z8ENdQdhkmsIbDNyVvfM8soHn5p/CRFlLPrmtxmE5aG//q1PzHHSGuLi+6QlHezivseg== - dependencies: - qs "~6.4.0" - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@^6.11.0, qs@^6.9.1: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - -qs@~6.4.0: - version "6.4.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.1.tgz#2bad97710a5b661c366b378b1e3a44a592ff45e6" - integrity sha512-LQy1Q1fcva/UsnP/6Iaa4lVeM49WiOitu2T4hZCyA/elLKu37L99qcBJk4VCCk+rdLvnMzfKyiN3SZTqdAZGSQ== - -quick-format-unescaped@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" - integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-animate-height@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/react-animate-height/-/react-animate-height-2.1.2.tgz#9b450fc64d46f10f5e07da8d0d5e2c47b9f15030" - integrity sha512-A9jfz/4CTdsIsE7WCQtO9UkOpMBcBRh8LxyHl2eoZz1ki02jpyUL5xt58gabd0CyeLQ8fRyQ+s2lyV2Ufu8Owg== - dependencies: - classnames "^2.2.5" - prop-types "^15.6.1" - -react-datepicker@^4.10.0: - version "4.16.0" - resolved "https://registry.yarnpkg.com/react-datepicker/-/react-datepicker-4.16.0.tgz#b9dd389bb5611a1acc514bba1dd944be21dd877f" - integrity sha512-hNQ0PAg/LQoVbDUO/RWAdm/RYmPhN3cz7LuQ3hqbs24OSp69QCiKOJRrQ4jk1gv1jNR5oYu8SjjgfDh8q6Q1yw== - dependencies: - "@popperjs/core" "^2.11.8" - classnames "^2.2.6" - date-fns "^2.30.0" - prop-types "^15.7.2" - react-onclickoutside "^6.12.2" - react-popper "^2.3.0" - -react-diff-viewer-continued@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/react-diff-viewer-continued/-/react-diff-viewer-continued-3.2.6.tgz#96382463b5de6838d95323c407442349b1c3a26e" - integrity sha512-GrzyqQnjIMoej+jMjWvtVSsQqhXgzEGqpXlJ2dAGfOk7Q26qcm8Gu6xtI430PBUyZsERe8BJSQf+7VZZo8IBNQ== - dependencies: - "@emotion/css" "^11.10.5" - classnames "^2.3.1" - diff "^5.1.0" - memoize-one "^6.0.0" - prop-types "^15.8.1" - -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" - -react-fast-compare@^3.0.1, react-fast-compare@^3.1.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" - integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== - -react-helmet@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.1.0.tgz#a750d5165cb13cf213e44747502652e794468726" - integrity sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw== - dependencies: - object-assign "^4.1.1" - prop-types "^15.7.2" - react-fast-compare "^3.1.1" - react-side-effect "^2.1.0" - -react-i18next@^11.18.6: - version "11.18.6" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.18.6.tgz#e159c2960c718c1314f1e8fcaa282d1c8b167887" - integrity sha512-yHb2F9BiT0lqoQDt8loZ5gWP331GwctHz9tYQ8A2EIEUu+CcEdjBLQWli1USG3RdWQt3W+jqQLg/d4rrQR96LA== - dependencies: - "@babel/runtime" "^7.14.5" - html-parse-stringify "^3.0.1" - -react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-onclickoutside@^6.12.2: - version "6.13.0" - resolved "https://registry.yarnpkg.com/react-onclickoutside/-/react-onclickoutside-6.13.0.tgz#e165ea4e5157f3da94f4376a3ab3e22a565f4ffc" - integrity sha512-ty8So6tcUpIb+ZE+1HAhbLROvAIJYyJe/1vRrrcmW+jLsaM+/powDRqxzo6hSh9CuRZGSL1Q8mvcF5WRD93a0A== - -react-popper@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-2.3.0.tgz#17891c620e1320dce318bad9fede46a5f71c70ba" - integrity sha512-e1hj8lL3uM+sgSR4Lxzn5h1GxBlpa4CQz0XLF8kx4MDrDRWY0Ena4c97PUeSX9i5W3UAfDP0z0FXCTQkoXUl3Q== - dependencies: - react-fast-compare "^3.0.1" - warning "^4.0.2" - -react-router-dom@^5.3.4: - version "5.3.4" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" - integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-router "5.3.4" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-router-navigation-prompt@^1.9.6: - version "1.9.6" - resolved "https://registry.yarnpkg.com/react-router-navigation-prompt/-/react-router-navigation-prompt-1.9.6.tgz#a949252dfbae8c40508671beb6d5995f0b089ac4" - integrity sha512-l0sAtbroHK8i1/Eyy29XcrMpBEt0R08BaScgMUt8r5vWWbLz7G0ChOikayTCQm7QgDFsHw8gVnxDJb7TBZCAKg== - -react-router@5.3.4: - version "5.3.4" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5" - integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - hoist-non-react-statics "^3.1.0" - loose-envify "^1.3.1" - path-to-regexp "^1.7.0" - prop-types "^15.6.2" - react-is "^16.6.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - -react-select@^5.7.3: - version "5.7.4" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.7.4.tgz#d8cad96e7bc9d6c8e2709bdda8f4363c5dd7ea7d" - integrity sha512-NhuE56X+p9QDFh4BgeygHFIvJJszO1i1KSkg/JPcIJrbovyRtI+GuOEa4XzFCEpZRAEoEI8u/cAHK+jG/PgUzQ== - dependencies: - "@babel/runtime" "^7.12.0" - "@emotion/cache" "^11.4.0" - "@emotion/react" "^11.8.1" - "@floating-ui/dom" "^1.0.1" - "@types/react-transition-group" "^4.4.0" - memoize-one "^6.0.0" - prop-types "^15.6.0" - react-transition-group "^4.3.0" - use-isomorphic-layout-effect "^1.1.2" - -react-side-effect@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.2.tgz#dc6345b9e8f9906dc2eeb68700b615e0b4fe752a" - integrity sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw== - -react-toastify@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-8.2.0.tgz#ef7d56bdfdc6272ca6b228368ab564721c3a3244" - integrity sha512-Pg2Ju7NngAamarFvLwqrFomJ57u/Ay6i6zfLurt/qPynWkAkOthu6vxfqYpJCyNhHRhR4hu7+bySSeWWJu6PAg== - dependencies: - clsx "^1.1.1" - -react-transition-group@^4.3.0, react-transition-group@^4.4.2: - version "4.4.5" - resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" - integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== - dependencies: - "@babel/runtime" "^7.5.5" - dom-helpers "^5.0.1" - loose-envify "^1.4.0" - prop-types "^15.6.2" - -react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" - -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^4.0.0: - version "4.4.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.2.tgz#e6aced27ad3b9d726d8308515b9a1b98dc1b9d13" - integrity sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - -readable-web-to-node-stream@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" - integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== - dependencies: - readable-stream "^3.6.0" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -real-require@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" - integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== - -rechoir@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" - integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== - dependencies: - resolve "^1.9.0" - -regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== - -regexp.prototype.flags@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - functions-have-names "^1.2.3" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - -renderkid@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" - integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^6.0.1" - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-pathname@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" - integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== - -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -resolve@^1.19.0, resolve@^1.9.0: - version "1.22.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" - integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -safe-buffer@5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-stable-stringify@^2.3.1: - version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sanitize-filename@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" - integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== - dependencies: - truncate-utf8-bytes "^1.0.0" - -sass-loader@^12.6.0: - version "12.6.0" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-12.6.0.tgz#5148362c8e2cdd4b950f3c63ac5d16dbfed37bcb" - integrity sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA== - dependencies: - klona "^2.0.4" - neo-async "^2.6.2" - -sass@^1.57.1: - version "1.66.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.66.1.tgz#04b51c4671e4650aa393740e66a4e58b44d055b1" - integrity sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA== - dependencies: - chokidar ">=3.0.0 <4.0.0" - immutable "^4.0.0" - source-map-js ">=0.6.2 <2.0.0" - -sax@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" - -schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^4.0.0, schema-utils@^4.0.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" - integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== - dependencies: - "@types/json-schema" "^7.0.9" - ajv "^8.9.0" - ajv-formats "^2.1.1" - ajv-keywords "^5.1.0" - -scmp@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/scmp/-/scmp-2.1.0.tgz#37b8e197c425bdeb570ab91cc356b311a11f9c9a" - integrity sha512-o/mRQGk9Rcer/jEEw/yw4mwo3EU/NvYvp577/Btqrym9Qy5/MdWGBqipbALgd2lrdWTJ5/gqDusxfnQBxOxT2Q== - -scroll-into-view-if-needed@^2.2.20: - version "2.2.31" - resolved "https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz#d3c482959dc483e37962d1521254e3295d0d1587" - integrity sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA== - dependencies: - compute-scroll-into-view "^1.0.20" - -secure-json-parse@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" - integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== - -semver@^7.3.5, semver@^7.3.8: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== - dependencies: - randombytes "^2.1.0" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - -sharp@^0.31.3: - version "0.31.3" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.31.3.tgz#60227edc5c2be90e7378a210466c99aefcf32688" - integrity sha512-XcR4+FCLBFKw1bdB+GEhnUNXNXvnt0tDo4WsBsraKymuo/IAuPuCBVAL2wIkUw2r/dwFW5Q5+g66Kwl2dgDFVg== - dependencies: - color "^4.2.3" - detect-libc "^2.0.1" - node-addon-api "^5.0.0" - prebuild-install "^7.1.1" - semver "^7.3.8" - simple-get "^4.0.1" - tar-fs "^2.1.1" - tunnel-agent "^0.6.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0, simple-get@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - -simple-wcswidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-wcswidth/-/simple-wcswidth-1.0.1.tgz#8ab18ac0ae342f9d9b629604e54d2aa1ecb018b2" - integrity sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg== - -sirv@^1.0.7: - version "1.0.19" - resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" - integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== - dependencies: - "@polka/url" "^1.0.0-next.20" - mrmime "^1.0.0" - totalist "^1.0.0" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slate-history@^0.86.0: - version "0.86.0" - resolved "https://registry.yarnpkg.com/slate-history/-/slate-history-0.86.0.tgz#5554612271d2fc1018a7918be3961bb66e620c58" - integrity sha512-OxObL9tbhgwvSlnKSCpGIh7wnuaqvOj5jRExGjEyCU2Ke8ctf22HjT+jw7GEi9ttLzNTUmTEU3YIzqKGeqN+og== - dependencies: - is-plain-object "^5.0.0" - -slate-hyperscript@^0.81.3: - version "0.81.3" - resolved "https://registry.yarnpkg.com/slate-hyperscript/-/slate-hyperscript-0.81.3.tgz#0c8f446d6bef717d2fe855239fb86a000ba2d0d2" - integrity sha512-A/jvoLTAgeRcJaUPQCYOikCJxSws6+/jkL7mM+QuZljNd7EA5YqafGA7sVBJRFpcoSsDRUIah1yNiC/7vxZPYg== - dependencies: - is-plain-object "^5.0.0" - -slate-react@^0.92.0: - version "0.92.0" - resolved "https://registry.yarnpkg.com/slate-react/-/slate-react-0.92.0.tgz#eb158ac2a33d962f48c466c4c8cc7bc14c1c6633" - integrity sha512-xEDKu5RKw5f0N95l1UeNQnrB0Pxh4JPjpIZR/BVsMo0ININnLAknR99gLo46bl/Ffql4mr7LeaxQRoXxbFtJOQ== - dependencies: - "@juggle/resize-observer" "^3.4.0" - "@types/is-hotkey" "^0.1.1" - "@types/lodash" "^4.14.149" - direction "^1.0.3" - is-hotkey "^0.1.6" - is-plain-object "^5.0.0" - lodash "^4.17.4" - scroll-into-view-if-needed "^2.2.20" - tiny-invariant "1.0.6" - -slate@^0.91.4: - version "0.91.4" - resolved "https://registry.yarnpkg.com/slate/-/slate-0.91.4.tgz#759764d63c8a8a7aff29a29e598e593ed80277f9" - integrity sha512-aUJ3rpjrdi5SbJ5G1Qjr3arytfRkEStTmHjBfWq2A2Q8MybacIzkScSvGJjQkdTk3djCK9C9SEOt39sSeZFwTw== - dependencies: - immer "^9.0.6" - is-plain-object "^5.0.0" - tiny-warning "^1.0.3" - -sonic-boom@^3.0.0, sonic-boom@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.3.0.tgz#cffab6dafee3b2bcb88d08d589394198bee1838c" - integrity sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g== - dependencies: - atomic-sleep "^1.0.0" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.1, source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map-support@^0.5.13, source-map-support@^0.5.21, source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -source-map@^0.6.0, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -split2@^4.0.0, split2@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -state-local@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/state-local/-/state-local-1.0.7.tgz#da50211d07f05748d53009bee46307a37db386d5" - integrity sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - dependencies: - internal-slot "^1.0.4" - -stream-parser@~0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/stream-parser/-/stream-parser-0.3.1.tgz#1618548694420021a1182ff0af1911c129761773" - integrity sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ== - dependencies: - debug "2" - -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - -string_decoder@^1.1.1, string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -strtok3@^6.2.4: - version "6.3.0" - resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-6.3.0.tgz#358b80ffe6d5d5620e19a073aa78ce947a90f9a0" - integrity sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw== - dependencies: - "@tokenizer/token" "^0.3.0" - peek-readable "^4.1.0" - -style-loader@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-2.0.0.tgz#9669602fd4690740eaaec137799a03addbbc393c" - integrity sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - -stylehacks@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.0.0.tgz#9fdd7c217660dae0f62e14d51c89f6c01b3cb738" - integrity sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw== - dependencies: - browserslist "^4.21.4" - postcss-selector-parser "^6.0.4" - -stylis@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" - integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -svgo@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.0.2.tgz#5e99eeea42c68ee0dc46aa16da093838c262fe0a" - integrity sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ== - dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^5.1.0" - css-tree "^2.2.1" - csso "^5.0.5" - picocolors "^1.0.0" - -swc-loader@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/swc-loader/-/swc-loader-0.2.3.tgz#6792f1c2e4c9ae9bf9b933b3e010210e270c186d" - integrity sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A== - -swc-minify-webpack-plugin@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/swc-minify-webpack-plugin/-/swc-minify-webpack-plugin-2.1.1.tgz#2c63fe592d49541733d7557b3af8f97c7ffa78b9" - integrity sha512-/9ud/libNWUC5p71vXWhW/O2Nc0essW8D9pY4P4ol0ceM8OcFbNr41R9YFqTkmktqUL2t0WwXau+FkR4T1+PJA== - -tabbable@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-5.3.3.tgz#aac0ff88c73b22d6c3c5a50b1586310006b47fbf" - integrity sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA== - -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -tar-fs@^2.0.0, tar-fs@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -terser-webpack-plugin@^5.3.6, terser-webpack-plugin@^5.3.7: - version "5.3.9" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" - integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.17" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.16.8" - -terser@^5.10.0, terser@^5.16.8: - version "5.19.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.2.tgz#bdb8017a9a4a8de4663a7983f45c506534f9234e" - integrity sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -thread-stream@^2.0.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.4.0.tgz#5def29598d1d4171ba3bace7e023a71d87d99c07" - integrity sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw== - dependencies: - real-require "^0.2.0" - -timers-ext@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" - integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ== - dependencies: - es5-ext "~0.10.46" - next-tick "1" - -tiny-invariant@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" - integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== - -tiny-invariant@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" - integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== - -tiny-warning@^1.0.0, tiny-warning@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-no-case@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/to-no-case/-/to-no-case-1.0.2.tgz#c722907164ef6b178132c8e69930212d1b4aa16a" - integrity sha512-Z3g735FxuZY8rodxV4gH7LxClE4H0hTIyHNIHdk+vpQxjLm0cwnKXq/OFVZ76SOQmto7txVcwSCwkU5kqp+FKg== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-snake-case@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-snake-case/-/to-snake-case-1.0.0.tgz#ce746913897946019a87e62edfaeaea4c608ab8c" - integrity sha512-joRpzBAk1Bhi2eGEYBjukEWHOe/IvclOkiJl3DtA91jV6NwQ3MwXA4FHYeqk8BNp/D8bmi9tcNbRu/SozP0jbQ== - dependencies: - to-space-case "^1.0.0" - -to-space-case@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-space-case/-/to-space-case-1.0.0.tgz#b052daafb1b2b29dc770cea0163e5ec0ebc9fc17" - integrity sha512-rLdvwXZ39VOn1IxGL3V6ZstoTbwLRckQmn/U8ZDLuWwIXNpuZDhQ3AiRUlhTbOXFVE9C+dR51wM0CBDhk31VcA== - dependencies: - to-no-case "^1.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -token-types@^4.1.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/token-types/-/token-types-4.2.1.tgz#0f897f03665846982806e138977dbe72d44df753" - integrity sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ== - dependencies: - "@tokenizer/token" "^0.3.0" - ieee754 "^1.2.1" - -totalist@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" - integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -truncate-utf8-bytes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" - integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== - dependencies: - utf8-byte-length "^1.0.1" - -ts-essentials@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" - integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== - -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.5.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== - -typescript@^4.9.4: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -update-browserslist-db@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" - integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-loader@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" - integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== - dependencies: - loader-utils "^2.0.0" - mime-types "^2.1.27" - schema-utils "^3.0.0" - -use-context-selector@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/use-context-selector/-/use-context-selector-1.4.1.tgz#eb96279965846b72915d7f899b8e6ef1d768b0ae" - integrity sha512-Io2ArvcRO+6MWIhkdfMFt+WKQX+Vb++W8DS2l03z/Vw/rz3BclKpM0ynr4LYGyU85Eke+Yx5oIhTY++QR0ZDoA== - -use-isomorphic-layout-effect@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" - integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== - -utf8-byte-length@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" - integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== - -util-deprecate@^1.0.1, util-deprecate@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== - -utils-merge@1.0.1, utils-merge@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -value-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" - integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -void-elements@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" - integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== - -warning@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" - integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== - dependencies: - loose-envify "^1.0.0" - -watchpack@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" - integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== - dependencies: - glob-to-regexp "^0.4.1" - graceful-fs "^4.1.2" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -webpack-bundle-analyzer@^4.8.0: - version "4.9.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz#fc093c4ab174fd3dcbd1c30b763f56d10141209d" - integrity sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw== - dependencies: - "@discoveryjs/json-ext" "0.5.7" - acorn "^8.0.4" - acorn-walk "^8.0.0" - chalk "^4.1.0" - commander "^7.2.0" - gzip-size "^6.0.0" - lodash "^4.17.20" - opener "^1.5.2" - sirv "^1.0.7" - ws "^7.3.1" - -webpack-cli@^4.10.0: - version "4.10.0" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" - integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== - dependencies: - "@discoveryjs/json-ext" "^0.5.0" - "@webpack-cli/configtest" "^1.2.0" - "@webpack-cli/info" "^1.5.0" - "@webpack-cli/serve" "^1.7.0" - colorette "^2.0.14" - commander "^7.0.0" - cross-spawn "^7.0.3" - fastest-levenshtein "^1.0.12" - import-local "^3.0.2" - interpret "^2.2.0" - rechoir "^0.7.0" - webpack-merge "^5.7.3" - -webpack-dev-middleware@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-6.0.1.tgz#fd585127ed44dab3f253daf0d98f4d58a5088cc2" - integrity sha512-PZPZ6jFinmqVPJZbisfggDiC+2EeGZ1ZByyMP5sOFJcPPWSexalISz+cvm+j+oYPT7FIJyxT76esjnw9DhE5sw== - dependencies: - colorette "^2.0.10" - memfs "^3.4.12" - mime-types "^2.1.31" - range-parser "^1.2.1" - schema-utils "^4.0.0" - -webpack-hot-middleware@^2.25.3: - version "2.25.4" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.4.tgz#d8bc9e9cb664fc3105c8e83d2b9ed436bee4e193" - integrity sha512-IRmTspuHM06aZh98OhBJtqLpeWFM8FXJS5UYpKYxCJzyFoyWj1w6VGFfomZU7OPA55dMLrQK0pRT1eQ3PACr4w== - dependencies: - ansi-html-community "0.0.8" - html-entities "^2.1.0" - strip-ansi "^6.0.0" - -webpack-merge@^5.7.3: - version "5.9.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" - integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== - dependencies: - clone-deep "^4.0.1" - wildcard "^2.0.0" - -webpack-sources@^1.1.0: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack-sources@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" - integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== - -webpack@^5.78.0: - version "5.88.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.2.tgz#f62b4b842f1c6ff580f3fcb2ed4f0b579f4c210e" - integrity sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.15.0" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" - webpack-sources "^3.2.3" - -whatwg-fetch@^3.4.1: - version "3.6.17" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.17.tgz#009bbbfc122b227b74ba1ff31536b3a1a0e0e212" - integrity sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== - dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" - -which-typed-array@^1.1.11, which-typed-array@^1.1.9: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wildcard@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" - integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== - -wordwrap@>=0.0.2: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@^7.3.1: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -ws@^8.13.0: - version "8.13.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== - -xss@^1.0.6: - version "1.0.14" - resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.14.tgz#4f3efbde75ad0d82e9921cc3c95e6590dd336694" - integrity sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw== - dependencies: - commander "^2.20.3" - cssfilter "0.0.10" - -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== - -zod@^3.20.2: - version "3.21.4" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.21.4.tgz#10882231d992519f0a10b5dd58a38c9dabbb64db" - integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw== diff --git a/packages/eslint-config-payload/eslint-config/configs/jest/index.cjs b/packages/eslint-config-payload/eslint-config/configs/jest/index.cjs new file mode 100644 index 000000000..2dbaeaf29 --- /dev/null +++ b/packages/eslint-config-payload/eslint-config/configs/jest/index.cjs @@ -0,0 +1,8 @@ +module.exports = { + env: { + jest: true, + }, + plugins: ['jest', 'jest-dom'], + extends: ['./rules/jest.cjs', './rules/jest-dom.cjs'].map(require.resolve), + rules: {}, +} diff --git a/packages/eslint-config-payload/eslint-config/configs/jest/rules/jest-dom.cjs b/packages/eslint-config-payload/eslint-config/configs/jest/rules/jest-dom.cjs new file mode 100644 index 000000000..0850050e3 --- /dev/null +++ b/packages/eslint-config-payload/eslint-config/configs/jest/rules/jest-dom.cjs @@ -0,0 +1,9 @@ +module.exports = { + rules: { + 'jest-dom/prefer-checked': 'error', + 'jest-dom/prefer-enabled-disabled': 'error', + 'jest-dom/prefer-focus': 'error', + 'jest-dom/prefer-required': 'error', + 'jest-dom/prefer-to-have-attribute': 'error', + }, +} diff --git a/packages/eslint-config-payload/eslint-config/configs/jest/rules/jest.cjs b/packages/eslint-config-payload/eslint-config/configs/jest/rules/jest.cjs new file mode 100644 index 000000000..04db26a14 --- /dev/null +++ b/packages/eslint-config-payload/eslint-config/configs/jest/rules/jest.cjs @@ -0,0 +1,37 @@ +module.exports = { + rules: { + 'jest/consistent-test-it': ['error', { fn: 'it' }], + 'jest/expect-expect': 'error', + 'jest/prefer-lowercase-title': ['error', { ignore: ['describe'] }], + 'jest/no-alias-methods': 'error', + 'jest/no-commented-out-tests': 'off', + 'jest/no-disabled-tests': 'off', + 'jest/no-duplicate-hooks': 'error', + 'jest/no-export': 'error', + 'jest/no-focused-tests': 'error', + 'jest/no-hooks': 'off', + 'jest/no-identical-title': 'error', + 'jest/no-if': 'error', + 'jest/no-jasmine-globals': 'error', + 'jest/no-large-snapshots': 'error', + 'jest/no-mocks-import': 'error', + 'jest/no-standalone-expect': 'error', + 'jest/no-done-callback': 'error', + 'jest/no-test-prefixes': 'error', + 'jest/no-test-return-statement': 'error', + 'jest/prefer-called-with': 'error', + 'jest/prefer-expect-assertions': 'off', + 'jest/prefer-hooks-on-top': 'error', + 'jest/prefer-spy-on': 'error', + 'jest/prefer-strict-equal': 'error', + 'jest/prefer-to-contain': 'error', + 'jest/prefer-to-have-length': 'error', + 'jest/prefer-todo': 'error', + 'jest/require-top-level-describe': 'error', + 'jest/require-to-throw-message': 'error', + 'jest/valid-describe-callback': 'error', + 'jest/valid-expect-in-promise': 'error', + 'jest/valid-expect': 'error', + 'jest/valid-title': 'error', + }, +} diff --git a/packages/eslint-config-payload/eslint-config/configs/react/index.cjs b/packages/eslint-config-payload/eslint-config/configs/react/index.cjs new file mode 100644 index 000000000..3db9df807 --- /dev/null +++ b/packages/eslint-config-payload/eslint-config/configs/react/index.cjs @@ -0,0 +1,18 @@ +module.exports = { + env: { + browser: true, + }, + plugins: ['jsx-a11y', 'react-hooks', 'react'], + settings: { + react: { + version: 'detect', + }, + }, + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + extends: ['./rules/react-a11y.cjs', './rules/react.cjs'].map(require.resolve), + rules: {}, +} diff --git a/packages/eslint-config-payload/eslint-config/configs/react/rules/react-a11y.cjs b/packages/eslint-config-payload/eslint-config/configs/react/rules/react-a11y.cjs new file mode 100644 index 000000000..26902b19a --- /dev/null +++ b/packages/eslint-config-payload/eslint-config/configs/react/rules/react-a11y.cjs @@ -0,0 +1,245 @@ +// Sourced from https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb/rules/react-a11y.js + +module.exports = { + rules: { + // Enforce that anchors have content + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/anchor-has-content.md + 'jsx-a11y/anchor-has-content': ['error', { components: [] }], + + // Require ARIA roles to be valid and non-abstract + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-role.md + 'jsx-a11y/aria-role': ['error', { ignoreNonDom: false }], + + // Enforce all aria-* props are valid. + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-props.md + 'jsx-a11y/aria-props': 'error', + + // Enforce ARIA state and property values are valid. + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-proptypes.md + 'jsx-a11y/aria-proptypes': 'error', + + // Enforce that elements that do not support ARIA roles, states, and + // properties do not have those attributes. + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-unsupported-elements.md + 'jsx-a11y/aria-unsupported-elements': 'error', + + // Enforce that all elements that require alternative text have meaningful information + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/alt-text.md + 'jsx-a11y/alt-text': [ + 'error', + { + elements: ['img', 'object', 'area', 'input[type="image"]'], + img: [], + object: [], + area: [], + 'input[type="image"]': [], + }, + ], + + // Prevent img alt text from containing redundant words like "image", "picture", or "photo" + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/img-redundant-alt.md + 'jsx-a11y/img-redundant-alt': 'error', + + // require that JSX labels use "htmlFor" + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-has-for.md + // deprecated: replaced by `label-has-associated-control` rule + 'jsx-a11y/label-has-for': [ + 'off', + { + components: [], + required: { + every: ['nesting', 'id'], + }, + allowChildren: false, + }, + ], + + // Enforce that a label tag has a text label and an associated control. + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/b800f40a2a69ad48015ae9226fbe879f946757ed/docs/rules/label-has-associated-control.md + 'jsx-a11y/label-has-associated-control': [ + 'error', + { + labelComponents: [], + labelAttributes: [], + controlComponents: [], + assert: 'both', + depth: 25, + }, + ], + + // Enforce that a control (an interactive element) has a text label. + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/control-has-associated-label.md + 'jsx-a11y/control-has-associated-label': [ + 'error', + { + labelAttributes: ['label'], + controlComponents: [], + ignoreElements: ['audio', 'canvas', 'embed', 'input', 'textarea', 'tr', 'video'], + ignoreRoles: [ + 'grid', + 'listbox', + 'menu', + 'menubar', + 'radiogroup', + 'row', + 'tablist', + 'toolbar', + 'tree', + 'treegrid', + ], + depth: 5, + }, + ], + + // require that mouseover/out come with focus/blur, for keyboard-only users + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/mouse-events-have-key-events.md + 'jsx-a11y/mouse-events-have-key-events': 'error', + + // Prevent use of `accessKey` + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-access-key.md + 'jsx-a11y/no-access-key': 'error', + + // require onBlur instead of onChange + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-onchange.md + 'jsx-a11y/no-onchange': 'off', + + // Elements with an interactive role and interaction handlers must be focusable + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/interactive-supports-focus.md + 'jsx-a11y/interactive-supports-focus': 'error', + + // Enforce that elements with ARIA roles must have all required attributes + // for that role. + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-has-required-aria-props.md + 'jsx-a11y/role-has-required-aria-props': 'error', + + // Enforce that elements with explicit or implicit roles defined contain + // only aria-* properties supported by that role. + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/role-supports-aria-props.md + 'jsx-a11y/role-supports-aria-props': 'error', + + // Enforce tabIndex value is not greater than zero. + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/tabindex-no-positive.md + 'jsx-a11y/tabindex-no-positive': 'error', + + // ensure tags have content and are not aria-hidden + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/heading-has-content.md + 'jsx-a11y/heading-has-content': ['error', { components: [''] }], + + // require HTML elements to have a "lang" prop + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/html-has-lang.md + 'jsx-a11y/html-has-lang': 'error', + + // require HTML element's lang prop to be valid + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/lang.md + 'jsx-a11y/lang': 'error', + + // prevent distracting elements, like and + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-distracting-elements.md + 'jsx-a11y/no-distracting-elements': [ + 'error', + { + elements: ['marquee', 'blink'], + }, + ], + + // only allow to have the "scope" attr + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/scope.md + 'jsx-a11y/scope': 'error', + + // require onClick be accompanied by onKeyUp/onKeyDown/onKeyPress + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/click-events-have-key-events.md + 'jsx-a11y/click-events-have-key-events': 'error', + + // Enforce that DOM elements without semantic behavior not have interaction handlers + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-static-element-interactions.md + 'jsx-a11y/no-static-element-interactions': [ + 'error', + { + handlers: ['onClick', 'onMouseDown', 'onMouseUp', 'onKeyPress', 'onKeyDown', 'onKeyUp'], + }, + ], + + // A non-interactive element does not support event handlers (mouse and key handlers) + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-element-interactions.md + 'jsx-a11y/no-noninteractive-element-interactions': [ + 'error', + { + handlers: ['onClick', 'onMouseDown', 'onMouseUp', 'onKeyPress', 'onKeyDown', 'onKeyUp'], + }, + ], + + // ensure emoji are accessible + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/accessible-emoji.md + 'jsx-a11y/accessible-emoji': 'error', + + // elements with aria-activedescendant must be tabbable + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/aria-activedescendant-has-tabindex.md + 'jsx-a11y/aria-activedescendant-has-tabindex': 'error', + + // ensure iframe elements have a unique title + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/iframe-has-title.md + 'jsx-a11y/iframe-has-title': 'error', + + // prohibit autoFocus prop + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-autofocus.md + 'jsx-a11y/no-autofocus': ['error', { ignoreNonDOM: true }], + + // ensure HTML elements do not specify redundant ARIA roles + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-redundant-roles.md + 'jsx-a11y/no-redundant-roles': 'error', + + // media elements must have captions + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/media-has-caption.md + 'jsx-a11y/media-has-caption': [ + 'error', + { + audio: [], + video: [], + track: [], + }, + ], + + // WAI-ARIA roles should not be used to convert an interactive element to non-interactive + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-interactive-element-to-noninteractive-role.md + 'jsx-a11y/no-interactive-element-to-noninteractive-role': [ + 'error', + { + tr: ['none', 'presentation'], + }, + ], + + // WAI-ARIA roles should not be used to convert a non-interactive element to interactive + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-element-to-interactive-role.md + 'jsx-a11y/no-noninteractive-element-to-interactive-role': [ + 'error', + { + ul: ['listbox', 'menu', 'menubar', 'radiogroup', 'tablist', 'tree', 'treegrid'], + ol: ['listbox', 'menu', 'menubar', 'radiogroup', 'tablist', 'tree', 'treegrid'], + li: ['menuitem', 'option', 'row', 'tab', 'treeitem'], + table: ['grid'], + td: ['gridcell'], + }, + ], + + // Tab key navigation should be limited to elements on the page that can be interacted with. + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-noninteractive-tabindex.md + 'jsx-a11y/no-noninteractive-tabindex': [ + 'error', + { + tags: [], + roles: ['tabpanel'], + }, + ], + + // ensure tags are valid + // https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/0745af376cdc8686d85a361ce36952b1fb1ccf6e/docs/rules/anchor-is-valid.md + 'jsx-a11y/anchor-is-valid': [ + 'error', + { + components: ['Link'], + specialLink: ['to'], + aspects: ['noHref', 'invalidHref', 'preferButton'], + }, + ], + }, +} diff --git a/packages/eslint-config-payload/eslint-config/configs/react/rules/react.cjs b/packages/eslint-config-payload/eslint-config/configs/react/rules/react.cjs new file mode 100644 index 000000000..331248d3b --- /dev/null +++ b/packages/eslint-config-payload/eslint-config/configs/react/rules/react.cjs @@ -0,0 +1,546 @@ +module.exports = { + rules: { + // View link below for react rules documentation + // https://github.com/yannickcr/eslint-plugin-react#list-of-supported-rules + + // Specify whether double or single quotes should be used in JSX attributes + // https://eslint.org/docs/rules/jsx-quotes + 'jsx-quotes': ['error', 'prefer-double'], + + 'class-methods-use-this': [ + 'error', + { + exceptMethods: [ + 'render', + 'getInitialState', + 'getDefaultProps', + 'getChildContext', + 'componentWillMount', + 'UNSAFE_componentWillMount', + 'componentDidMount', + 'componentWillReceiveProps', + 'UNSAFE_componentWillReceiveProps', + 'shouldComponentUpdate', + 'componentWillUpdate', + 'UNSAFE_componentWillUpdate', + 'componentDidUpdate', + 'componentWillUnmount', + 'componentDidCatch', + 'getSnapshotBeforeUpdate', + ], + }, + ], + + // Prevent missing displayName in a React component definition + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/display-name.md + 'react/display-name': ['off', { ignoreTranspilerName: false }], + + // Forbid certain propTypes (any, array, object) + // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/forbid-prop-types.md + 'react/forbid-prop-types': [ + 'error', + { + forbid: ['any', 'array', 'object'], + checkContextTypes: true, + checkChildContextTypes: true, + }, + ], + + // Forbid certain props on DOM Nodes + // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/forbid-dom-props.md + 'react/forbid-dom-props': ['off', { forbid: [] }], + + // Enforce boolean attributes notation in JSX + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-boolean-value.md + 'react/jsx-boolean-value': ['error', 'never', { always: [] }], + + // Validate closing bracket location in JSX + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md + 'react/jsx-closing-bracket-location': ['error', 'line-aligned'], + + // Validate closing tag location in JSX + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-closing-tag-location.md + 'react/jsx-closing-tag-location': 'error', + + // Enforce or disallow spaces inside of curly braces in JSX attributes + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md + 'react/jsx-curly-spacing': ['error', 'never', { allowMultiline: true }], + + // Enforce event handler naming conventions in JSX + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-handler-names.md + 'react/jsx-handler-names': [ + 'off', + { + eventHandlerPrefix: 'handle', + eventHandlerPropPrefix: 'on', + }, + ], + + // Validate props indentation in JSX + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-indent-props.md + 'react/jsx-indent-props': ['error', 2], + + // Validate JSX has key prop when in array or iterator + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-key.md + 'react/jsx-key': 'off', + + // Limit maximum of props on a single line in JSX + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-max-props-per-line.md + 'react/jsx-max-props-per-line': ['error', { maximum: 1 }], + + // Prevent usage of .bind() in JSX props + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md + 'react/jsx-no-bind': [ + 'error', + { + ignoreRefs: true, + allowArrowFunctions: true, + allowFunctions: false, + allowBind: false, + ignoreDOMComponents: true, + }, + ], + + // Prevent duplicate props in JSX + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-duplicate-props.md + 'react/jsx-no-duplicate-props': ['error', { ignoreCase: true }], + + // Prevent usage of unwrapped JSX strings + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-literals.md + 'react/jsx-no-literals': ['off', { noStrings: true }], + + // Disallow undeclared variables in JSX + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-undef.md + 'react/jsx-no-undef': 'error', + + // Enforce PascalCase for user-defined JSX components + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-pascal-case.md + 'react/jsx-pascal-case': [ + 'error', + { + allowAllCaps: true, + ignore: [], + }, + ], + + // Enforce propTypes declarations alphabetical sorting + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/sort-prop-types.md + 'react/sort-prop-types': [ + 'off', + { + ignoreCase: true, + callbacksLast: false, + requiredFirst: false, + sortShapeProp: true, + }, + ], + + // Deprecated in favor of react/jsx-sort-props + 'react/jsx-sort-prop-types': 'off', + + // Enforce props alphabetical sorting + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md + 'react/jsx-sort-props': [ + 'off', + { + ignoreCase: true, + callbacksLast: false, + shorthandFirst: false, + shorthandLast: false, + noSortAlphabetically: false, + reservedFirst: true, + }, + ], + + // Enforce defaultProps declarations alphabetical sorting + // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-sort-default-props.md + 'react/jsx-sort-default-props': [ + 'off', + { + ignoreCase: true, + }, + ], + + // Prevent React to be incorrectly marked as unused + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-react.md + 'react/jsx-uses-react': ['error'], + + // Prevent variables used in JSX to be incorrectly marked as unused + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-uses-vars.md + 'react/jsx-uses-vars': 'error', + + // Prevent usage of dangerous JSX properties + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-danger.md + 'react/no-danger': 'off', + + // Prevent usage of deprecated methods + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-deprecated.md + 'react/no-deprecated': ['error'], + + // Prevent usage of setState in componentDidMount + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md + // this is necessary for server-rendering + 'react/no-did-mount-set-state': 'off', + + // Prevent usage of setState in componentDidUpdate + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-update-set-state.md + 'react/no-did-update-set-state': 'off', + + // Prevent usage of setState in componentWillUpdate + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-will-update-set-state.md + 'react/no-will-update-set-state': 'error', + + // Prevent direct mutation of this.state + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-direct-mutation-state.md + 'react/no-direct-mutation-state': 'off', + + // Prevent usage of isMounted + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-is-mounted.md + 'react/no-is-mounted': 'error', + + // Prevent multiple component definition per file + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-multi-comp.md + 'react/no-multi-comp': 'off', + + // Prevent usage of setState + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-set-state.md + 'react/no-set-state': 'off', + + // Prevent using string references + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-string-refs.md + 'react/no-string-refs': 'error', + + // Prevent usage of unknown DOM property + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unknown-property.md + 'react/no-unknown-property': 'error', + + // Require ES6 class declarations over React.createClass + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-es6-class.md + 'react/prefer-es6-class': ['error', 'always'], + + // Require stateless functions when not using lifecycle methods, setState or ref + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-stateless-function.md + 'react/prefer-stateless-function': ['error', { ignorePureComponents: true }], + + // Prevent missing props validation in a React component definition + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prop-types.md + 'react/prop-types': [ + 'error', + { + ignore: [], + customValidators: [], + skipUndeclared: false, + }, + ], + + // Prevent missing React when using JSX + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/react-in-jsx-scope.md + 'react/react-in-jsx-scope': 'error', + + // Require render() methods to return something + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-render-return.md + 'react/require-render-return': 'error', + + // Prevent extra closing tags for components without children + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/self-closing-comp.md + 'react/self-closing-comp': 'error', + + // Enforce component methods order + // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/sort-comp.md + 'react/sort-comp': [ + 'error', + { + order: [ + 'static-variables', + 'static-methods', + 'instance-variables', + 'lifecycle', + '/^on.+$/', + 'getters', + 'setters', + '/^(get|set)(?!(InitialState$|DefaultProps$|ChildContext$)).+$/', + 'instance-methods', + 'everything-else', + 'rendering', + ], + groups: { + lifecycle: [ + 'displayName', + 'propTypes', + 'contextTypes', + 'childContextTypes', + 'mixins', + 'statics', + 'defaultProps', + 'constructor', + 'getDefaultProps', + 'getInitialState', + 'state', + 'getChildContext', + 'getDerivedStateFromProps', + 'componentWillMount', + 'UNSAFE_componentWillMount', + 'componentDidMount', + 'componentWillReceiveProps', + 'UNSAFE_componentWillReceiveProps', + 'shouldComponentUpdate', + 'componentWillUpdate', + 'UNSAFE_componentWillUpdate', + 'getSnapshotBeforeUpdate', + 'componentDidUpdate', + 'componentDidCatch', + 'componentWillUnmount', + ], + rendering: ['/^render.+$/', 'render'], + }, + }, + ], + + // Prevent missing parentheses around multilines JSX + // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-wrap-multilines.md + 'react/jsx-wrap-multilines': [ + 'error', + { + declaration: 'parens-new-line', + assignment: 'parens-new-line', + return: 'parens-new-line', + arrow: 'parens-new-line', + condition: 'parens-new-line', + logical: 'parens-new-line', + prop: 'parens-new-line', + }, + ], + + // Require that the first prop in a JSX element be on a new line when the element is multiline + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-first-prop-new-line.md + 'react/jsx-first-prop-new-line': ['error', 'multiline-multiprop'], + + // Enforce spacing around jsx equals signs + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-equals-spacing.md + 'react/jsx-equals-spacing': ['error', 'never'], + + // Enforce JSX indentation + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-indent.md + 'react/jsx-indent': ['error', 2], + + // Disallow target="_blank" on links + // https://github.com/yannickcr/eslint-plugin-react/blob/ac102885765be5ff37847a871f239c6703e1c7cc/docs/rules/jsx-no-target-blank.md + 'react/jsx-no-target-blank': ['error', { enforceDynamicLinks: 'always' }], + + // only .jsx files may have JSX + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-filename-extension.md + 'react/jsx-filename-extension': ['error', { extensions: ['.js', '.jsx', '.ts', '.tsx'] }], + + // prevent accidental JS comments from being injected into JSX as text + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-comment-textnodes.md + 'react/jsx-no-comment-textnodes': 'error', + + // disallow using React.render/ReactDOM.render's return value + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-render-return-value.md + 'react/no-render-return-value': 'error', + + // require a shouldComponentUpdate method, or PureRenderMixin + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/require-optimization.md + 'react/require-optimization': ['off', { allowDecorators: [] }], + + // warn against using findDOMNode() + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-find-dom-node.md + 'react/no-find-dom-node': 'error', + + // Forbid certain props on Components + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-component-props.md + 'react/forbid-component-props': ['off', { forbid: [] }], + + // Forbid certain elements + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-elements.md + 'react/forbid-elements': ['off', { forbid: [] }], + + // Prevent problem with children and props.dangerouslySetInnerHTML + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-danger-with-children.md + 'react/no-danger-with-children': 'error', + + // Prevent unused propType definitions + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unused-prop-types.md + 'react/no-unused-prop-types': [ + 'error', + { + customValidators: [], + skipShapeProps: true, + }, + ], + + // Require style prop value be an object or var + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/style-prop-object.md + 'react/style-prop-object': 'error', + + // Prevent invalid characters from appearing in markup + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-unescaped-entities.md + 'react/no-unescaped-entities': 'error', + + // Prevent passing of children as props + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-children-prop.md + 'react/no-children-prop': 'error', + + // Validate whitespace in and around the JSX opening and closing brackets + // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-tag-spacing.md + 'react/jsx-tag-spacing': [ + 'error', + { + closingSlash: 'never', + beforeSelfClosing: 'always', + afterOpening: 'never', + beforeClosing: 'never', + }, + ], + + // Enforce spaces before the closing bracket of self-closing JSX elements + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-space-before-closing.md + // Deprecated in favor of jsx-tag-spacing + 'react/jsx-space-before-closing': ['off', 'always'], + + // Prevent usage of Array index in keys + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-array-index-key.md + 'react/no-array-index-key': 'off', + + // Enforce a defaultProps definition for every prop that is not a required prop + // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/require-default-props.md + 'react/require-default-props': [ + 'error', + { + forbidDefaultForRequired: true, + }, + ], + + // Forbids using non-exported propTypes + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/forbid-foreign-prop-types.md + // this is intentionally set to "warn". it would be "error", + // but it's only critical if you're stripping propTypes in production. + 'react/forbid-foreign-prop-types': ['warn', { allowInPropTypes: true }], + + // Prevent void DOM elements from receiving children + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/void-dom-elements-no-children.md + 'react/void-dom-elements-no-children': 'error', + + // Enforce all defaultProps have a corresponding non-required PropType + // https://github.com/yannickcr/eslint-plugin-react/blob/9e13ae2c51e44872b45cc15bf1ac3a72105bdd0e/docs/rules/default-props-match-prop-types.md + 'react/default-props-match-prop-types': ['error', { allowRequiredDefaults: false }], + + // Prevent usage of shouldComponentUpdate when extending React.PureComponent + // https://github.com/yannickcr/eslint-plugin-react/blob/9e13ae2c51e44872b45cc15bf1ac3a72105bdd0e/docs/rules/no-redundant-should-component-update.md + 'react/no-redundant-should-component-update': 'error', + + // Prevent unused state values + // https://github.com/yannickcr/eslint-plugin-react/pull/1103/ + 'react/no-unused-state': 'error', + + // Enforces consistent naming for boolean props + // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/boolean-prop-naming.md + 'react/boolean-prop-naming': [ + 'off', + { + propTypeNames: ['bool', 'mutuallyExclusiveTrueProps'], + rule: '^(is|has)[A-Z]([A-Za-z0-9]?)+', + message: '', + }, + ], + + // Prevents common casing typos + // https://github.com/yannickcr/eslint-plugin-react/blob/73abadb697034b5ccb514d79fb4689836fe61f91/docs/rules/no-typos.md + 'react/no-typos': 'error', + + // Enforce curly braces or disallow unnecessary curly braces in JSX props and/or children + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-brace-presence.md + 'react/jsx-curly-brace-presence': ['error', { props: 'never', children: 'never' }], + + // One JSX Element Per Line + // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/jsx-one-expression-per-line.md + 'react/jsx-one-expression-per-line': ['error', { allow: 'single-child' }], + + // Enforce consistent usage of destructuring assignment of props, state, and context + // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/destructuring-assignment.md + 'react/destructuring-assignment': ['error', 'always'], + + // Prevent using this.state within a this.setState + // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/no-access-state-in-setstate.md + 'react/no-access-state-in-setstate': 'error', + + // Prevent usage of button elements without an explicit type attribute + // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/button-has-type.md + 'react/button-has-type': [ + 'error', + { + button: true, + submit: true, + reset: false, + }, + ], + + // Ensures inline tags are not rendered without spaces between them + 'react/jsx-child-element-spacing': 'off', + + // Prevent this from being used in stateless functional components + // https://github.com/yannickcr/eslint-plugin-react/blob/843d71a432baf0f01f598d7cf1eea75ad6896e4b/docs/rules/no-this-in-sfc.md + 'react/no-this-in-sfc': 'error', + + // Validate JSX maximum depth + // https://github.com/yannickcr/eslint-plugin-react/blob/abe8381c0d6748047224c430ce47f02e40160ed0/docs/rules/jsx-max-depth.md + 'react/jsx-max-depth': 'off', + + // Disallow multiple spaces between inline JSX props + // https://github.com/yannickcr/eslint-plugin-react/blob/ac102885765be5ff37847a871f239c6703e1c7cc/docs/rules/jsx-props-no-multi-spaces.md + 'react/jsx-props-no-multi-spaces': 'error', + + // Prevent usage of UNSAFE_ methods + // https://github.com/yannickcr/eslint-plugin-react/blob/157cc932be2cfaa56b3f5b45df6f6d4322a2f660/docs/rules/no-unsafe.md + 'react/no-unsafe': 'off', + + // Enforce shorthand or standard form for React fragments + // https://github.com/yannickcr/eslint-plugin-react/blob/bc976b837abeab1dffd90ac6168b746a83fc83cc/docs/rules/jsx-fragments.md + 'react/jsx-fragments': ['error', 'element'], + + // Enforce linebreaks in curly braces in JSX attributes and expressions. + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-curly-newline.md + 'react/jsx-curly-newline': [ + 'error', + { + multiline: 'consistent', + singleline: 'consistent', + }, + ], + + // Enforce state initialization style + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/state-in-constructor.md + // TODO: set to "never" once babel-preset-airbnb supports public class fields + 'react/state-in-constructor': ['error', 'always'], + + // Enforces where React component static properties should be positioned + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/static-property-placement.md + // TODO: set to "static public field" once babel-preset-airbnb supports public class fields + 'react/static-property-placement': ['error', 'property assignment'], + + // Disallow JSX props spreading + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-props-no-spreading.md + 'react/jsx-props-no-spreading': 'off', + + // Enforce that props are read-only + // https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/prefer-read-only-props.md + 'react/prefer-read-only-props': 'off', + }, + + settings: { + 'import/resolver': { + node: { + extensions: ['.js', '.jsx', '.json'], + }, + }, + react: { + pragma: 'React', + version: 'detect', + }, + propWrapperFunctions: [ + 'forbidExtraProps', // https://www.npmjs.com/package/airbnb-prop-types + 'exact', // https://www.npmjs.com/package/prop-types-exact + 'Object.freeze', // https://tc39.github.io/ecma262/#sec-object.freeze + ], + }, +} diff --git a/packages/eslint-config-payload/eslint-config/index.cjs b/packages/eslint-config-payload/eslint-config/index.cjs new file mode 100644 index 000000000..4dd54a096 --- /dev/null +++ b/packages/eslint-config-payload/eslint-config/index.cjs @@ -0,0 +1,62 @@ +module.exports = { + env: { + es6: true, + browser: true, + node: true, + }, + extends: [ + 'eslint:recommended', + 'plugin:perfectionist/recommended-natural', + 'plugin:@typescript-eslint/recommended-type-checked', + 'plugin:regexp/recommended', + 'plugin:react/recommended', + 'plugin:react-hooks/recommended', + './configs/jest/index.cjs', + './configs/react/index.cjs', + 'prettier', + ], + parser: '@typescript-eslint/parser', + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + ecmaVersion: 'latest', + sourceType: 'module', + }, + plugins: ['@typescript-eslint'], + overrides: [ + { + files: ['*.js', '*.cjs'], + extends: ['plugin:@typescript-eslint/disable-type-checked'], + }, + ], + rules: { + '@typescript-eslint/ban-ts-comment': 'off', + '@typescript-eslint/consistent-type-imports': 'warn', + '@typescript-eslint/no-explicit-any': 'warn', + // Type-aware any rules: + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + // This rule doesn't work well in .tsx files + '@typescript-eslint/no-misused-promises': 'off', + // Type-aware any rules end + '@typescript-eslint/no-use-before-define': 'off', + 'arrow-body-style': 0, + 'import/prefer-default-export': 'off', + 'no-console': 'warn', + 'no-sparse-arrays': 'off', + 'no-underscore-dangle': 'off', + 'no-use-before-define': 'off', + 'react/no-unused-prop-types': 'off', + 'react/prop-types': 'off', + 'react/require-default-props': 'off', + }, + settings: { + 'import/parsers': { + '@typescript-eslint/parser': ['.ts', '.tsx'], + }, + }, +} diff --git a/packages/eslint-config-payload/index.js b/packages/eslint-config-payload/index.js new file mode 100644 index 000000000..55f3d9d2e --- /dev/null +++ b/packages/eslint-config-payload/index.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: ['./eslint-config/index.cjs'], +} diff --git a/packages/eslint-config-payload/package.json b/packages/eslint-config-payload/package.json new file mode 100644 index 000000000..de42b1976 --- /dev/null +++ b/packages/eslint-config-payload/package.json @@ -0,0 +1,30 @@ +{ + "name": "@payloadcms/eslint-config", + "version": "0.0.1", + "private": true, + "description": "Payload styles for ESLint and Prettier", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "dependencies": { + "@types/eslint": "8.44.2", + "@typescript-eslint/eslint-plugin": "6.6.0", + "@typescript-eslint/parser": "6.6.0", + "eslint": "8.48.0", + "eslint-config-prettier": "9.0.0", + "eslint-plugin-import": "2.28.1", + "eslint-plugin-jest": "27.2.3", + "eslint-plugin-jest-dom": "5.1.0", + "eslint-plugin-jsx-a11y": "6.7.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-perfectionist": "2.0.0", + "eslint-plugin-playwright": "0.16.0", + "eslint-plugin-react": "7.33.2", + "eslint-plugin-react-hooks": "4.6.0", + "eslint-plugin-regexp": "1.15.0" + }, + "keywords": [], + "author": "", + "license": "MIT" +} diff --git a/packages/payload/.eslintignore b/packages/payload/.eslintignore new file mode 100644 index 000000000..247f3f12d --- /dev/null +++ b/packages/payload/.eslintignore @@ -0,0 +1,10 @@ +.tmp +**/.git +**/.hg +**/.pnp.* +**/.svn +**/.yarn/** +**/build +**/dist/** +**/node_modules +**/temp diff --git a/packages/payload/.eslintrc.cjs b/packages/payload/.eslintrc.cjs new file mode 100644 index 000000000..70f9d200e --- /dev/null +++ b/packages/payload/.eslintrc.cjs @@ -0,0 +1,36 @@ +module.exports = { + extends: ['@payloadcms'], + ignorePatterns: ['**/payload-types.ts'], + overrides: [ + { + extends: ['plugin:@typescript-eslint/disable-type-checked'], + files: [ + '*.js', + '*.cjs', + 'playwright.config.ts', + 'playwright.bail.config.ts', + 'bin-cks.cjs', + 'bin-esm.mjs', + 'esm-loader.mjs', + 'esm-loader-playwright.mjs', + '*.json', + '*.md', + '*.yml', + '*.yaml', + ], + }, + { + files: ['*.e2e.ts'], + rules: { + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-use-before-define': 'off', + 'jest/expect-expect': 'off', + }, + }, + ], + parserOptions: { + project: ['./tsconfig.json'], + tsconfigRootDir: __dirname, + }, + root: true, +} diff --git a/packages/payload/.prettierignore b/packages/payload/.prettierignore new file mode 100644 index 000000000..247f3f12d --- /dev/null +++ b/packages/payload/.prettierignore @@ -0,0 +1,10 @@ +.tmp +**/.git +**/.hg +**/.pnp.* +**/.svn +**/.yarn/** +**/build +**/dist/** +**/node_modules +**/temp diff --git a/packages/payload/.swcrc b/packages/payload/.swcrc new file mode 100644 index 000000000..d46b555fe --- /dev/null +++ b/packages/payload/.swcrc @@ -0,0 +1,15 @@ +{ + "$schema": "https://json.schemastore.org/swcrc", + "sourceMaps": "inline", + "jsc": { + "target": "esnext", + "parser": { + "syntax": "typescript", + "tsx": true, + "dts": true + } + }, + "module": { + "type": "commonjs" + } +} diff --git a/packages/payload/bin.js b/packages/payload/bin.js new file mode 100755 index 000000000..581cf3a89 --- /dev/null +++ b/packages/payload/bin.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('./dist/bin') diff --git a/packages/payload/components/index.js b/packages/payload/components/index.js new file mode 100644 index 000000000..d4303c187 --- /dev/null +++ b/packages/payload/components/index.js @@ -0,0 +1,27 @@ +(()=>{var e={9509:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SortableContext:()=>je,arrayMove:()=>Ce,arraySwap:()=>_e,defaultAnimateLayoutChanges:()=>Ae,defaultNewIndexGetter:()=>Fe,hasSortableData:()=>Ve,horizontalListSortingStrategy:()=>Me,rectSortingStrategy:()=>Te,rectSwappingStrategy:()=>Le,sortableKeyboardCoordinates:()=>Ke,useSortable:()=>He,verticalListSortingStrategy:()=>ze});var r=n(9497),a=n.n(r);n(3730);const o="undefined"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement;function l(e){const t=Object.prototype.toString.call(e);return"[object Window]"===t||"[object global]"===t}function i(e){return"nodeType"in e}function u(e){var t,n;return e?l(e)?e:i(e)&&null!=(t=null==(n=e.ownerDocument)?void 0:n.defaultView)?t:window:window}function s(e){const{Document:t}=u(e);return e instanceof t}function c(e){return!l(e)&&e instanceof u(e).HTMLElement}function f(e){return e?l(e)?e.document:i(e)?s(e)?e:c(e)?e.ownerDocument:document:document:document}const d=o?r.useLayoutEffect:r.useEffect;function p(e){const t=(0,r.useRef)(e);return d((()=>{t.current=e})),(0,r.useCallback)((function(){for(var e=arguments.length,n=new Array(e),r=0;r{n.current!==e&&(n.current=e)}),t),n}function m(e){const t=p(e),n=(0,r.useRef)(null),a=(0,r.useCallback)((e=>{e!==n.current&&(null==t||t(e,n.current)),n.current=e}),[]);return[n,a]}let v={};function g(e,t){return(0,r.useMemo)((()=>{if(t)return t;const n=null==v[e]?0:v[e]+1;return v[e]=n,e+"-"+n}),[e,t])}function y(e){return function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),a=1;a{const r=Object.entries(n);for(const[n,a]of r){const r=t[n];null!=r&&(t[n]=r+e*a)}return t}),{...t})}}const b=y(1),w=y(-1);function k(e){if(!e)return!1;const{KeyboardEvent:t}=u(e.target);return t&&e instanceof t}function x(e){if(function(e){if(!e)return!1;const{TouchEvent:t}=u(e.target);return t&&e instanceof t}(e)){if(e.touches&&e.touches.length){const{clientX:t,clientY:n}=e.touches[0];return{x:t,y:n}}if(e.changedTouches&&e.changedTouches.length){const{clientX:t,clientY:n}=e.changedTouches[0];return{x:t,y:n}}}return function(e){return"clientX"in e&&"clientY"in e}(e)?{x:e.clientX,y:e.clientY}:null}const S=Object.freeze({Translate:{toString(e){if(!e)return;const{x:t,y:n}=e;return"translate3d("+(t?Math.round(t):0)+"px, "+(n?Math.round(n):0)+"px, 0)"}},Scale:{toString(e){if(!e)return;const{scaleX:t,scaleY:n}=e;return"scaleX("+t+") scaleY("+n+")"}},Transform:{toString(e){if(e)return[S.Translate.toString(e),S.Scale.toString(e)].join(" ")}},Transition:{toString(e){let{property:t,duration:n,easing:r}=e;return t+" "+n+"ms "+r}}});var E;function C(){}!function(e){e.DragStart="dragStart",e.DragMove="dragMove",e.DragEnd="dragEnd",e.DragCancel="dragCancel",e.DragOver="dragOver",e.RegisterDroppable="registerDroppable",e.SetDroppableDisabled="setDroppableDisabled",e.UnregisterDroppable="unregisterDroppable"}(E||(E={}));const _=Object.freeze({x:0,y:0});function P(e,t){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function N(e,t){let{data:{value:n}}=e,{data:{value:r}}=t;return n-r}function O(e){let{left:t,top:n,height:r,width:a}=e;return[{x:t,y:n},{x:t+a,y:n},{x:t,y:n+r},{x:t+a,y:n+r}]}function M(e,t){if(!e||0===e.length)return null;const[n]=e;return t?n[t]:n}function T(e){if(e.startsWith("matrix3d(")){const t=e.slice(9,-1).split(/, /);return{x:+t[12],y:+t[13],scaleX:+t[0],scaleY:+t[5]}}if(e.startsWith("matrix(")){const t=e.slice(7,-1).split(/, /);return{x:+t[4],y:+t[5],scaleX:+t[0],scaleY:+t[3]}}return null}const L={ignoreTransform:!1};function R(e,t){void 0===t&&(t=L);let n=e.getBoundingClientRect();if(t.ignoreTransform){const{transform:t,transformOrigin:r}=u(e).getComputedStyle(e);t&&(n=function(e,t,n){const r=T(t);if(!r)return e;const{scaleX:a,scaleY:o,x:l,y:i}=r,u=e.left-l-(1-a)*parseFloat(n),s=e.top-i-(1-o)*parseFloat(n.slice(n.indexOf(" ")+1)),c=a?e.width/a:e.width,f=o?e.height/o:e.height;return{width:c,height:f,top:s,right:u+c,bottom:s+f,left:u}}(n,t,r))}const{top:r,left:a,width:o,height:l,bottom:i,right:s}=n;return{top:r,left:a,width:o,height:l,bottom:i,right:s}}function z(e){return R(e,{ignoreTransform:!0})}function D(e,t){const n=[];return e?function r(a){if(null!=t&&n.length>=t)return n;if(!a)return n;if(s(a)&&null!=a.scrollingElement&&!n.includes(a.scrollingElement))return n.push(a.scrollingElement),n;if(!c(a)||function(e){return e instanceof u(e).SVGElement}(a))return n;if(n.includes(a))return n;const o=u(e).getComputedStyle(a);return a!==e&&function(e,t){void 0===t&&(t=u(e).getComputedStyle(e));const n=/(auto|scroll|overlay)/;return["overflow","overflowX","overflowY"].some((e=>{const r=t[e];return"string"==typeof r&&n.test(r)}))}(a,o)&&n.push(a),function(e,t){return void 0===t&&(t=u(e).getComputedStyle(e)),"fixed"===t.position}(a,o)?n:r(a.parentNode)}(e):n}function I(e){const[t]=D(e,1);return null!=t?t:null}var j;function F(e){return!(!o||!e)&&e===document.scrollingElement}function A(e){const t={x:0,y:0},n=F(e)?{height:window.innerHeight,width:window.innerWidth}:{height:e.clientHeight,width:e.clientWidth},r={x:e.scrollWidth-n.width,y:e.scrollHeight-n.height};return{isTop:e.scrollTop<=t.y,isLeft:e.scrollLeft<=t.x,isBottom:e.scrollTop>=r.y,isRight:e.scrollLeft>=r.x,maxScroll:r,minScroll:t}}!function(e){e[e.Forward=1]="Forward",e[e.Backward=-1]="Backward"}(j||(j={}));function $(e){if(e===document.scrollingElement){const{innerWidth:e,innerHeight:t}=window;return{top:0,left:0,right:e,bottom:t,width:e,height:t}}const{top:t,left:n,right:r,bottom:a}=e.getBoundingClientRect();return{top:t,left:n,right:r,bottom:a,width:e.clientWidth,height:e.clientHeight}}function U(e,t){if(void 0===t&&(t=R),!e)return;const{top:n,left:r,bottom:a,right:o}=t(e);I(e)&&(a<=0||o<=0||n>=window.innerHeight||r>=window.innerWidth)&&e.scrollIntoView({block:"center",inline:"center"})}class B{constructor(e){this.target=void 0,this.listeners=[],this.removeAll=()=>{this.listeners.forEach((e=>{var t;return null==(t=this.target)?void 0:t.removeEventListener(...e)}))},this.target=e}add(e,t,n){var r;null==(r=this.target)||r.addEventListener(e,t,n),this.listeners.push([e,t,n])}}function W(e,t){const n=Math.abs(e.x),r=Math.abs(e.y);return"number"==typeof t?Math.sqrt(n**2+r**2)>t:"x"in t&&"y"in t?n>t.x&&r>t.y:"x"in t?n>t.x:"y"in t&&r>t.y}var H,V;function Q(e){e.preventDefault()}function K(e){e.stopPropagation()}!function(e){e.Click="click",e.DragStart="dragstart",e.Keydown="keydown",e.ContextMenu="contextmenu",e.Resize="resize",e.SelectionChange="selectionchange",e.VisibilityChange="visibilitychange"}(H||(H={})),function(e){e.Space="Space",e.Down="ArrowDown",e.Right="ArrowRight",e.Left="ArrowLeft",e.Up="ArrowUp",e.Esc="Escape",e.Enter="Enter"}(V||(V={}));const q={start:[V.Space,V.Enter],cancel:[V.Esc],end:[V.Space,V.Enter]},Y=(e,t)=>{let{currentCoordinates:n}=t;switch(e.code){case V.Right:return{...n,x:n.x+25};case V.Left:return{...n,x:n.x-25};case V.Down:return{...n,y:n.y+25};case V.Up:return{...n,y:n.y-25}}};class X{constructor(e){this.props=void 0,this.autoScrollEnabled=!1,this.referenceCoordinates=void 0,this.listeners=void 0,this.windowListeners=void 0,this.props=e;const{event:{target:t}}=e;this.props=e,this.listeners=new B(f(t)),this.windowListeners=new B(u(t)),this.handleKeyDown=this.handleKeyDown.bind(this),this.handleCancel=this.handleCancel.bind(this),this.attach()}attach(){this.handleStart(),this.windowListeners.add(H.Resize,this.handleCancel),this.windowListeners.add(H.VisibilityChange,this.handleCancel),setTimeout((()=>this.listeners.add(H.Keydown,this.handleKeyDown)))}handleStart(){const{activeNode:e,onStart:t}=this.props,n=e.node.current;n&&U(n),t(_)}handleKeyDown(e){if(k(e)){const{active:t,context:n,options:r}=this.props,{keyboardCodes:a=q,coordinateGetter:o=Y,scrollBehavior:l="smooth"}=r,{code:i}=e;if(a.end.includes(i))return void this.handleEnd(e);if(a.cancel.includes(i))return void this.handleCancel(e);const{collisionRect:u}=n.current,s=u?{x:u.left,y:u.top}:_;this.referenceCoordinates||(this.referenceCoordinates=s);const c=o(e,{active:t,context:n.current,currentCoordinates:s});if(c){const t=w(c,s),r={x:0,y:0},{scrollableAncestors:a}=n.current;for(const n of a){const a=e.code,{isTop:o,isRight:i,isLeft:u,isBottom:s,maxScroll:f,minScroll:d}=A(n),p=$(n),h={x:Math.min(a===V.Right?p.right-p.width/2:p.right,Math.max(a===V.Right?p.left:p.left+p.width/2,c.x)),y:Math.min(a===V.Down?p.bottom-p.height/2:p.bottom,Math.max(a===V.Down?p.top:p.top+p.height/2,c.y))},m=a===V.Right&&!i||a===V.Left&&!u,v=a===V.Down&&!s||a===V.Up&&!o;if(m&&h.x!==c.x){const e=n.scrollLeft+t.x,o=a===V.Right&&e<=f.x||a===V.Left&&e>=d.x;if(o&&!t.y)return void n.scrollTo({left:e,behavior:l});r.x=o?n.scrollLeft-e:a===V.Right?n.scrollLeft-f.x:n.scrollLeft-d.x,r.x&&n.scrollBy({left:-r.x,behavior:l});break}if(v&&h.y!==c.y){const e=n.scrollTop+t.y,o=a===V.Down&&e<=f.y||a===V.Up&&e>=d.y;if(o&&!t.x)return void n.scrollTo({top:e,behavior:l});r.y=o?n.scrollTop-e:a===V.Down?n.scrollTop-f.y:n.scrollTop-d.y,r.y&&n.scrollBy({top:-r.y,behavior:l});break}}this.handleMove(e,b(w(c,this.referenceCoordinates),r))}}}handleMove(e,t){const{onMove:n}=this.props;e.preventDefault(),n(t)}handleEnd(e){const{onEnd:t}=this.props;e.preventDefault(),this.detach(),t()}handleCancel(e){const{onCancel:t}=this.props;e.preventDefault(),this.detach(),t()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll()}}function G(e){return Boolean(e&&"distance"in e)}function J(e){return Boolean(e&&"delay"in e)}X.activators=[{eventName:"onKeyDown",handler:(e,t,n)=>{let{keyboardCodes:r=q,onActivation:a}=t,{active:o}=n;const{code:l}=e.nativeEvent;if(r.start.includes(l)){const t=o.activatorNode.current;return(!t||e.target===t)&&(e.preventDefault(),null==a||a({event:e.nativeEvent}),!0)}return!1}}];class Z{constructor(e,t,n){var r;void 0===n&&(n=function(e){const{EventTarget:t}=u(e);return e instanceof t?e:f(e)}(e.event.target)),this.props=void 0,this.events=void 0,this.autoScrollEnabled=!0,this.document=void 0,this.activated=!1,this.initialCoordinates=void 0,this.timeoutId=null,this.listeners=void 0,this.documentListeners=void 0,this.windowListeners=void 0,this.props=e,this.events=t;const{event:a}=e,{target:o}=a;this.props=e,this.events=t,this.document=f(o),this.documentListeners=new B(this.document),this.listeners=new B(n),this.windowListeners=new B(u(o)),this.initialCoordinates=null!=(r=x(a))?r:_,this.handleStart=this.handleStart.bind(this),this.handleMove=this.handleMove.bind(this),this.handleEnd=this.handleEnd.bind(this),this.handleCancel=this.handleCancel.bind(this),this.handleKeydown=this.handleKeydown.bind(this),this.removeTextSelection=this.removeTextSelection.bind(this),this.attach()}attach(){const{events:e,props:{options:{activationConstraint:t}}}=this;if(this.listeners.add(e.move.name,this.handleMove,{passive:!1}),this.listeners.add(e.end.name,this.handleEnd),this.windowListeners.add(H.Resize,this.handleCancel),this.windowListeners.add(H.DragStart,Q),this.windowListeners.add(H.VisibilityChange,this.handleCancel),this.windowListeners.add(H.ContextMenu,Q),this.documentListeners.add(H.Keydown,this.handleKeydown),t){if(G(t))return;if(J(t))return void(this.timeoutId=setTimeout(this.handleStart,t.delay))}this.handleStart()}detach(){this.listeners.removeAll(),this.windowListeners.removeAll(),setTimeout(this.documentListeners.removeAll,50),null!==this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=null)}handleStart(){const{initialCoordinates:e}=this,{onStart:t}=this.props;e&&(this.activated=!0,this.documentListeners.add(H.Click,K,{capture:!0}),this.removeTextSelection(),this.documentListeners.add(H.SelectionChange,this.removeTextSelection),t(e))}handleMove(e){var t;const{activated:n,initialCoordinates:r,props:a}=this,{onMove:o,options:{activationConstraint:l}}=a;if(!r)return;const i=null!=(t=x(e))?t:_,u=w(r,i);if(!n&&l){if(J(l))return W(u,l.tolerance)?this.handleCancel():void 0;if(G(l))return null!=l.tolerance&&W(u,l.tolerance)?this.handleCancel():W(u,l.distance)?this.handleStart():void 0}e.cancelable&&e.preventDefault(),o(i)}handleEnd(){const{onEnd:e}=this.props;this.detach(),e()}handleCancel(){const{onCancel:e}=this.props;this.detach(),e()}handleKeydown(e){e.code===V.Esc&&this.handleCancel()}removeTextSelection(){var e;null==(e=this.document.getSelection())||e.removeAllRanges()}}const ee={move:{name:"pointermove"},end:{name:"pointerup"}};class te extends Z{constructor(e){const{event:t}=e,n=f(t.target);super(e,ee,n)}}te.activators=[{eventName:"onPointerDown",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;return!(!n.isPrimary||0!==n.button)&&(null==r||r({event:n}),!0)}}];const ne={move:{name:"mousemove"},end:{name:"mouseup"}};var re;!function(e){e[e.RightClick=2]="RightClick"}(re||(re={}));(class extends Z{constructor(e){super(e,ne,f(e.event.target))}}).activators=[{eventName:"onMouseDown",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;return n.button!==re.RightClick&&(null==r||r({event:n}),!0)}}];const ae={move:{name:"touchmove"},end:{name:"touchend"}};var oe,le;(class extends Z{constructor(e){super(e,ae)}static setup(){return window.addEventListener(ae.move.name,e,{capture:!1,passive:!1}),function(){window.removeEventListener(ae.move.name,e)};function e(){}}}).activators=[{eventName:"onTouchStart",handler:(e,t)=>{let{nativeEvent:n}=e,{onActivation:r}=t;const{touches:a}=n;return!(a.length>1)&&(null==r||r({event:n}),!0)}}],function(e){e[e.Pointer=0]="Pointer",e[e.DraggableRect=1]="DraggableRect"}(oe||(oe={})),function(e){e[e.TreeOrder=0]="TreeOrder",e[e.ReversedTreeOrder=1]="ReversedTreeOrder"}(le||(le={}));j.Backward,j.Forward,j.Backward,j.Forward;var ie,ue;!function(e){e[e.Always=0]="Always",e[e.BeforeDragging=1]="BeforeDragging",e[e.WhileDragging=2]="WhileDragging"}(ie||(ie={})),function(e){e.Optimized="optimized"}(ue||(ue={}));function se(e){let{callback:t,disabled:n}=e;const a=p(t),o=(0,r.useMemo)((()=>{if(n||"undefined"==typeof window||void 0===window.ResizeObserver)return;const{ResizeObserver:e}=window;return new e(a)}),[n]);return(0,r.useEffect)((()=>()=>null==o?void 0:o.disconnect()),[o]),o}const ce={draggable:{measure:z},droppable:{measure:z,strategy:ie.WhileDragging,frequency:ue.Optimized},dragOverlay:{measure:R}};class fe extends Map{get(e){var t;return null!=e&&null!=(t=super.get(e))?t:void 0}toArray(){return Array.from(this.values())}getEnabled(){return this.toArray().filter((e=>{let{disabled:t}=e;return!t}))}getNodeFor(e){var t,n;return null!=(t=null==(n=this.get(e))?void 0:n.node.current)?t:void 0}}const de={activatorEvent:null,active:null,activeNode:null,activeNodeRect:null,collisions:null,containerNodeRect:null,draggableNodes:new Map,droppableRects:new Map,droppableContainers:new fe,over:null,dragOverlay:{nodeRef:{current:null},rect:null,setRef:C},scrollableAncestors:[],scrollableAncestorRects:[],measuringConfiguration:ce,measureDroppableContainers:C,windowRect:null,measuringScheduled:!1},pe={activatorEvent:null,activators:[],active:null,activeNodeRect:null,ariaDescribedById:{draggable:""},dispatch:C,draggableNodes:new Map,over:null,measureDroppableContainers:C},he=(0,r.createContext)(pe),me=(0,r.createContext)(de);const ve=(0,r.createContext)({..._,scaleX:1,scaleY:1});var ge;!function(e){e[e.Uninitialized=0]="Uninitialized",e[e.Initializing=1]="Initializing",e[e.Initialized=2]="Initialized"}(ge||(ge={}));const ye=(0,r.createContext)(null),be="button",we="Droppable";function ke(e){let{id:t,data:n,disabled:a=!1,attributes:o}=e;const l=g(we),{activators:i,activatorEvent:u,active:s,activeNodeRect:c,ariaDescribedById:f,draggableNodes:p,over:v}=(0,r.useContext)(he),{role:y=be,roleDescription:b="draggable",tabIndex:w=0}=null!=o?o:{},k=(null==s?void 0:s.id)===t,x=(0,r.useContext)(k?ve:ye),[S,E]=m(),[C,_]=m(),P=function(e,t){return(0,r.useMemo)((()=>e.reduce(((e,n)=>{let{eventName:r,handler:a}=n;return e[r]=e=>{a(e,t)},e}),{})),[e,t])}(i,t),N=h(n);d((()=>(p.set(t,{id:t,key:l,node:S,activatorNode:C,data:N}),()=>{const e=p.get(t);e&&e.key===l&&p.delete(t)})),[p,t]);return{active:s,activatorEvent:u,activeNodeRect:c,attributes:(0,r.useMemo)((()=>({role:y,tabIndex:w,"aria-disabled":a,"aria-pressed":!(!k||y!==be)||void 0,"aria-roledescription":b,"aria-describedby":f.draggable})),[a,y,w,k,b,f.draggable]),isDragging:k,listeners:a?void 0:P,node:S,over:v,setNodeRef:E,setActivatorNodeRef:_,transform:x}}function xe(){return(0,r.useContext)(me)}const Se="Droppable",Ee={timeout:25};function Ce(e,t,n){const r=e.slice();return r.splice(n<0?r.length+n:n,0,r.splice(t,1)[0]),r}function _e(e,t,n){const r=e.slice();return r[t]=e[n],r[n]=e[t],r}function Pe(e,t){return e.reduce(((e,n,r)=>{const a=t.get(n);return a&&(e[r]=a),e}),Array(e.length))}function Ne(e){return null!==e&&e>=0}const Oe={scaleX:1,scaleY:1},Me=e=>{var t;let{rects:n,activeNodeRect:r,activeIndex:a,overIndex:o,index:l}=e;const i=null!=(t=n[a])?t:r;if(!i)return null;const u=function(e,t,n){const r=e[t],a=e[t-1],o=e[t+1];if(!r||!a&&!o)return 0;if(na&&l<=o?{x:-i.width-u,y:0,...Oe}:l=o?{x:i.width+u,y:0,...Oe}:{x:0,y:0,...Oe}};const Te=e=>{let{rects:t,activeIndex:n,overIndex:r,index:a}=e;const o=Ce(t,r,n),l=t[a],i=o[a];return i&&l?{x:i.left-l.left,y:i.top-l.top,scaleX:i.width/l.width,scaleY:i.height/l.height}:null},Le=e=>{let t,n,{activeIndex:r,index:a,rects:o,overIndex:l}=e;return a===r&&(t=o[a],n=o[l]),a===l&&(t=o[a],n=o[r]),n&&t?{x:n.left-t.left,y:n.top-t.top,scaleX:n.width/t.width,scaleY:n.height/t.height}:null},Re={scaleX:1,scaleY:1},ze=e=>{var t;let{activeIndex:n,activeNodeRect:r,index:a,rects:o,overIndex:l}=e;const i=null!=(t=o[n])?t:r;if(!i)return null;if(a===n){const e=o[l];return e?{x:0,y:nn&&a<=l?{x:0,y:-i.height-u,...Re}:a=l?{x:0,y:i.height+u,...Re}:{x:0,y:0,...Re}};const De="Sortable",Ie=a().createContext({activeIndex:-1,containerId:De,disableTransforms:!1,items:[],overIndex:-1,useDragOverlay:!1,sortedRects:[],strategy:Te,disabled:{draggable:!1,droppable:!1}});function je(e){let{children:t,id:n,items:o,strategy:l=Te,disabled:i=!1}=e;const{active:u,dragOverlay:s,droppableRects:c,over:f,measureDroppableContainers:p}=xe(),h=g(De,n),m=Boolean(null!==s.rect),v=(0,r.useMemo)((()=>o.map((e=>"object"==typeof e&&"id"in e?e.id:e))),[o]),y=null!=u,b=u?v.indexOf(u.id):-1,w=f?v.indexOf(f.id):-1,k=(0,r.useRef)(v),x=!function(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n{x&&y&&p(v)}),[x,v,y,p]),(0,r.useEffect)((()=>{k.current=v}),[v]);const C=(0,r.useMemo)((()=>({activeIndex:b,containerId:h,disabled:E,disableTransforms:S,items:v,overIndex:w,useDragOverlay:m,sortedRects:Pe(v,c),strategy:l})),[b,h,E.draggable,E.droppable,S,v,w,c,m,l]);return a().createElement(Ie.Provider,{value:C},t)}const Fe=e=>{let{id:t,items:n,activeIndex:r,overIndex:a}=e;return Ce(n,r,a).indexOf(t)},Ae=e=>{let{containerId:t,isSorting:n,wasDragging:r,index:a,items:o,newIndex:l,previousItems:i,previousContainerId:u,transition:s}=e;return!(!s||!r)&&((i===o||a!==l)&&(!!n||l!==a&&t===u))},$e={duration:200,easing:"ease"},Ue="transform",Be=S.Transition.toString({property:Ue,duration:0,easing:"linear"}),We={roleDescription:"sortable"};function He(e){let{animateLayoutChanges:t=Ae,attributes:n,disabled:a,data:o,getNewIndex:l=Fe,id:i,strategy:u,resizeObserverConfig:s,transition:c=$e}=e;const{items:f,containerId:p,activeIndex:v,disabled:y,disableTransforms:b,sortedRects:w,overIndex:x,useDragOverlay:C,strategy:_}=(0,r.useContext)(Ie),P=function(e,t){var n,r;if("boolean"==typeof e)return{draggable:e,droppable:!1};return{draggable:null!=(n=null==e?void 0:e.draggable)?n:t.draggable,droppable:null!=(r=null==e?void 0:e.droppable)?r:t.droppable}}(a,y),N=f.indexOf(i),O=(0,r.useMemo)((()=>({sortable:{containerId:p,index:N,items:f},...o})),[p,o,N,f]),M=(0,r.useMemo)((()=>f.slice(f.indexOf(i))),[f,i]),{rect:T,node:L,isOver:z,setNodeRef:D}=function(e){let{data:t,disabled:n=!1,id:a,resizeObserverConfig:o}=e;const l=g(Se),{active:i,dispatch:u,over:s,measureDroppableContainers:c}=(0,r.useContext)(he),f=(0,r.useRef)({disabled:n}),p=(0,r.useRef)(!1),v=(0,r.useRef)(null),y=(0,r.useRef)(null),{disabled:b,updateMeasurementsFor:w,timeout:k}={...Ee,...o},x=h(null!=w?w:a),S=se({callback:(0,r.useCallback)((()=>{p.current?(null!=y.current&&clearTimeout(y.current),y.current=setTimeout((()=>{c(Array.isArray(x.current)?x.current:[x.current]),y.current=null}),k)):p.current=!0}),[k]),disabled:b||!i}),C=(0,r.useCallback)(((e,t)=>{S&&(t&&(S.unobserve(t),p.current=!1),e&&S.observe(e))}),[S]),[_,P]=m(C),N=h(t);return(0,r.useEffect)((()=>{S&&_.current&&(S.disconnect(),p.current=!1,S.observe(_.current))}),[_,S]),d((()=>(u({type:E.RegisterDroppable,element:{id:a,key:l,disabled:n,node:_,rect:v,data:N}}),()=>u({type:E.UnregisterDroppable,key:l,id:a}))),[a]),(0,r.useEffect)((()=>{n!==f.current.disabled&&(u({type:E.SetDroppableDisabled,id:a,key:l,disabled:n}),f.current.disabled=n)}),[a,l,n,u]),{active:i,rect:v,isOver:(null==s?void 0:s.id)===a,node:_,over:s,setNodeRef:P}}({id:i,data:O,disabled:P.droppable,resizeObserverConfig:{updateMeasurementsFor:M,...s}}),{active:I,activatorEvent:j,activeNodeRect:F,attributes:A,setNodeRef:$,listeners:U,isDragging:B,over:W,setActivatorNodeRef:H,transform:V}=ke({id:i,data:O,attributes:{...We,...n},disabled:P.draggable}),Q=function(){for(var e=arguments.length,t=new Array(e),n=0;ne=>{t.forEach((t=>t(e)))}),t)}(D,$),K=Boolean(I),q=K&&!b&&Ne(v)&&Ne(x),Y=!C&&B,X=Y&&q?V:null,G=q?null!=X?X:(null!=u?u:_)({rects:w,activeNodeRect:F,activeIndex:v,overIndex:x,index:N}):null,J=Ne(v)&&Ne(x)?l({id:i,items:f,activeIndex:v,overIndex:x}):N,Z=null==I?void 0:I.id,ee=(0,r.useRef)({activeId:Z,items:f,newIndex:J,containerId:p}),te=f!==ee.current.items,ne=t({active:I,containerId:p,isDragging:B,isSorting:K,id:i,index:N,items:f,newIndex:ee.current.newIndex,previousItems:ee.current.items,previousContainerId:ee.current.containerId,transition:c,wasDragging:null!=ee.current.activeId}),re=function(e){let{disabled:t,index:n,node:a,rect:o}=e;const[l,i]=(0,r.useState)(null),u=(0,r.useRef)(n);return d((()=>{if(!t&&n!==u.current&&a.current){const e=o.current;if(e){const t=R(a.current,{ignoreTransform:!0}),n={x:e.left-t.left,y:e.top-t.top,scaleX:e.width/t.width,scaleY:e.height/t.height};(n.x||n.y)&&i(n)}}n!==u.current&&(u.current=n)}),[t,n,a,o]),(0,r.useEffect)((()=>{l&&i(null)}),[l]),l}({disabled:!ne,index:N,node:L,rect:T});return(0,r.useEffect)((()=>{K&&ee.current.newIndex!==J&&(ee.current.newIndex=J),p!==ee.current.containerId&&(ee.current.containerId=p),f!==ee.current.items&&(ee.current.items=f)}),[K,J,p,f]),(0,r.useEffect)((()=>{if(Z===ee.current.activeId)return;if(Z&&!ee.current.activeId)return void(ee.current.activeId=Z);const e=setTimeout((()=>{ee.current.activeId=Z}),50);return()=>clearTimeout(e)}),[Z]),{active:I,activeIndex:v,attributes:A,data:O,rect:T,index:N,newIndex:J,items:f,isOver:z,isSorting:K,isDragging:B,listeners:U,node:L,overIndex:x,over:W,setNodeRef:Q,setActivatorNodeRef:H,setDroppableNodeRef:D,setDraggableNodeRef:$,transform:null!=re?re:G,transition:function(){if(re||te&&ee.current.newIndex===N)return Be;if(Y&&!k(j)||!c)return;if(K||ne)return S.Transition.toString({...c,property:Ue});return}()}}function Ve(e){if(!e)return!1;const t=e.data.current;return!!(t&&"sortable"in t&&"object"==typeof t.sortable&&"containerId"in t.sortable&&"items"in t.sortable&&"index"in t.sortable)}const Qe=[V.Down,V.Right,V.Up,V.Left],Ke=(e,t)=>{let{context:{active:n,collisionRect:r,droppableRects:a,droppableContainers:o,over:l,scrollableAncestors:i}}=t;if(Qe.includes(e.code)){if(e.preventDefault(),!n||!r)return;const t=[];o.getEnabled().forEach((n=>{if(!n||null!=n&&n.disabled)return;const o=a.get(n.id);if(o)switch(e.code){case V.Down:r.topo.top&&t.push(n);break;case V.Left:r.left>o.left&&t.push(n);break;case V.Right:r.left{let{collisionRect:t,droppableRects:n,droppableContainers:r}=e;const a=O(t),o=[];for(const e of r){const{id:t}=e,r=n.get(t);if(r){const n=O(r),l=a.reduce(((e,t,r)=>e+P(n[r],t)),0),i=Number((l/4).toFixed(4));o.push({id:t,data:{droppableContainer:e,value:i}})}}return o.sort(N)})({active:n,collisionRect:r,droppableRects:a,droppableContainers:t,pointerCoordinates:null});let s=M(u,"id");if(s===(null==l?void 0:l.id)&&u.length>1&&(s=u[1].id),null!=s){const e=o.get(n.id),t=o.get(s),l=t?a.get(t.id):null,u=null==t?void 0:t.node.current;if(u&&l&&e&&t){const n=D(u).some(((e,t)=>i[t]!==e)),a=qe(e,t),o=function(e,t){if(!Ve(e)||!Ve(t))return!1;if(!qe(e,t))return!1;return e.data.current.sortable.index{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=(0,n(9497).createContext)({});t.default=r},2767:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n{"use strict";var r=n(9415),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},l={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},i={};function u(e){return r.isMemo(e)?l:i[e.$$typeof]||a}i[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},i[r.Memo]=l;var s=Object.defineProperty,c=Object.getOwnPropertyNames,f=Object.getOwnPropertySymbols,d=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(h){var a=p(n);a&&a!==h&&e(t,a,r)}var l=c(n);f&&(l=l.concat(f(n)));for(var i=u(t),m=u(n),v=0;v{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},7366:(e,t,n)=>{"use strict";n.r(t)},1117:(e,t,n)=>{"use strict";n.r(t)},9279:(e,t,n)=>{"use strict";n.r(t)},4717:(e,t,n)=>{"use strict";n.r(t)},4393:(e,t,n)=>{"use strict";n.r(t)},754:(e,t,n)=>{"use strict";n.r(t)},5809:(e,t,n)=>{"use strict";n.r(t)},2862:(e,t,n)=>{"use strict";n.r(t)},5734:(e,t,n)=>{"use strict";n.r(t)},4574:(e,t,n)=>{"use strict";n.r(t)},3369:(e,t,n)=>{"use strict";n.r(t)},3617:(e,t,n)=>{"use strict";n.r(t)},3174:(e,t,n)=>{"use strict";n.r(t)},254:(e,t,n)=>{"use strict";n.r(t)},7345:(e,t,n)=>{"use strict";n.r(t)},2367:(e,t,n)=>{"use strict";n.r(t)},5415:(e,t,n)=>{var r=n(8967);e.exports=p,e.exports.parse=o,e.exports.compile=function(e,t){return i(o(e,t),t)},e.exports.tokensToFunction=i,e.exports.tokensToRegExp=d;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,l=0,i="",c=t&&t.delimiter||"/";null!=(n=a.exec(e));){var f=n[0],d=n[1],p=n.index;if(i+=e.slice(l,p),l=p+f.length,d)i+=d[1];else{var h=e[l],m=n[2],v=n[3],g=n[4],y=n[5],b=n[6],w=n[7];i&&(r.push(i),i="");var k=null!=m&&null!=h&&h!==m,x="+"===b||"*"===b,S="?"===b||"*"===b,E=n[2]||c,C=g||y;r.push({name:v||o++,prefix:m||"",delimiter:E,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:C?s(C):w?".*":"[^"+u(E)+"]+?"})}}return l{"use strict";var r=n(5148);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,l){if(l!==r){var i=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw i.name="Invariant Violation",i}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},7862:(e,t,n)=>{e.exports=n(1772)()},5148:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},5565:(e,t,n)=>{"use strict";var r=n(9497),a=n(5655); +/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n}> + + {children} + + + ) + + default: + const Tag = el // eslint-disable-line no-case-declarations + + return ( + + + {children} + + + ) + } +}) + +export default Button diff --git a/packages/payload/src/admin/components/elements/Button/types.ts b/packages/payload/src/admin/components/elements/Button/types.ts new file mode 100644 index 000000000..f7534005f --- /dev/null +++ b/packages/payload/src/admin/components/elements/Button/types.ts @@ -0,0 +1,24 @@ +import type { ElementType, MouseEvent } from 'react' +import type React from 'react' + +export type Props = { + 'aria-label'?: string + buttonId?: string + buttonStyle?: 'error' | 'icon-label' | 'none' | 'primary' | 'secondary' | 'transparent' + children?: React.ReactNode + className?: string + disabled?: boolean + el?: 'anchor' | 'link' | ElementType + icon?: ['chevron' | 'edit' | 'plus' | 'x'] | React.ReactNode + iconPosition?: 'left' | 'right' + iconStyle?: 'none' | 'with-border' | 'without-border' + id?: string + newTab?: boolean + onClick?: (event: MouseEvent) => void + round?: boolean + size?: 'medium' | 'small' + to?: string + tooltip?: string + type?: 'button' | 'submit' + url?: string +} diff --git a/packages/payload/src/admin/components/elements/Card/index.scss b/packages/payload/src/admin/components/elements/Card/index.scss new file mode 100644 index 000000000..ad43d1c10 --- /dev/null +++ b/packages/payload/src/admin/components/elements/Card/index.scss @@ -0,0 +1,42 @@ +@import '../../../scss/styles'; + +.card { + background: var(--theme-elevation-50); + padding: base(1.25) $baseline; + position: relative; + + &__title { + @extend %h5; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + &__actions { + position: relative; + z-index: 2; + margin-top: base(0.5); + display: inline-flex; + + .btn { + margin: 0; + } + } + + &--has-onclick { + cursor: pointer; + + &:hover { + background: var(--theme-elevation-100); + } + } + + &__click { + position: absolute; + z-index: 1; + top: 0; + left: 0; + width: 100%; + height: 100%; + } +} diff --git a/packages/payload/src/admin/components/elements/Card/index.tsx b/packages/payload/src/admin/components/elements/Card/index.tsx new file mode 100644 index 000000000..bf15faa56 --- /dev/null +++ b/packages/payload/src/admin/components/elements/Card/index.tsx @@ -0,0 +1,33 @@ +import React from 'react' + +import type { Props } from './types' + +import Button from '../Button' +import './index.scss' + +const baseClass = 'card' + +const Card: React.FC = (props) => { + const { actions, buttonAriaLabel, id, onClick, title, titleAs } = props + + const classes = [baseClass, id, onClick && `${baseClass}--has-onclick`].filter(Boolean).join(' ') + + const Tag = titleAs ?? 'div' + + return ( +
+ {title} + {actions &&
{actions}
} + {onClick && ( +
+ ) +} + +export default Card diff --git a/packages/payload/src/admin/components/elements/Card/types.ts b/packages/payload/src/admin/components/elements/Card/types.ts new file mode 100644 index 000000000..b6bf4f027 --- /dev/null +++ b/packages/payload/src/admin/components/elements/Card/types.ts @@ -0,0 +1,10 @@ +import type { ElementType } from 'react' + +export type Props = { + actions?: React.ReactNode + buttonAriaLabel?: string + id?: string + onClick?: () => void + title: string + titleAs?: ElementType +} diff --git a/packages/payload/src/admin/components/elements/CodeEditor/CodeEditor.tsx b/packages/payload/src/admin/components/elements/CodeEditor/CodeEditor.tsx new file mode 100644 index 000000000..d43ca59db --- /dev/null +++ b/packages/payload/src/admin/components/elements/CodeEditor/CodeEditor.tsx @@ -0,0 +1,47 @@ +import Editor from '@monaco-editor/react' +import React from 'react' + +import type { Props } from './types' + +import { useTheme } from '../../utilities/Theme' +import { ShimmerEffect } from '../ShimmerEffect' +import './index.scss' + +const baseClass = 'code-editor' + +const CodeEditor: React.FC = (props) => { + const { className, height, options, readOnly, ...rest } = props + + const { theme } = useTheme() + + const classes = [ + baseClass, + className, + rest?.defaultLanguage ? `language--${rest.defaultLanguage}` : '', + ] + .filter(Boolean) + .join(' ') + + return ( + } + options={{ + detectIndentation: true, + minimap: { + enabled: false, + }, + readOnly: Boolean(readOnly), + scrollBeyondLastLine: false, + tabSize: 2, + wordWrap: 'on', + ...options, + }} + theme={theme === 'dark' ? 'vs-dark' : 'vs'} + {...rest} + /> + ) +} + +export default CodeEditor diff --git a/src/admin/components/elements/CodeEditor/index.scss b/packages/payload/src/admin/components/elements/CodeEditor/index.scss similarity index 100% rename from src/admin/components/elements/CodeEditor/index.scss rename to packages/payload/src/admin/components/elements/CodeEditor/index.scss diff --git a/packages/payload/src/admin/components/elements/CodeEditor/index.tsx b/packages/payload/src/admin/components/elements/CodeEditor/index.tsx new file mode 100644 index 000000000..21fef37da --- /dev/null +++ b/packages/payload/src/admin/components/elements/CodeEditor/index.tsx @@ -0,0 +1,18 @@ +import React, { Suspense, lazy } from 'react' + +import type { Props } from './types' + +import { ShimmerEffect } from '../ShimmerEffect' + +// @ts-expect-error Just TypeScript being broken // TODO: Open TypeScript issue +const LazyEditor = lazy(() => import('./CodeEditor')) + +export const CodeEditor: React.FC = (props) => { + const { height = '35vh' } = props + + return ( + }> + + + ) +} diff --git a/packages/payload/src/admin/components/elements/CodeEditor/types.ts b/packages/payload/src/admin/components/elements/CodeEditor/types.ts new file mode 100644 index 000000000..6914cdc22 --- /dev/null +++ b/packages/payload/src/admin/components/elements/CodeEditor/types.ts @@ -0,0 +1,5 @@ +import type { EditorProps } from '@monaco-editor/react' + +export type Props = EditorProps & { + readOnly?: boolean +} diff --git a/packages/payload/src/admin/components/elements/Collapsible/index.scss b/packages/payload/src/admin/components/elements/Collapsible/index.scss new file mode 100644 index 000000000..1c7f978bf --- /dev/null +++ b/packages/payload/src/admin/components/elements/Collapsible/index.scss @@ -0,0 +1,177 @@ +@import '../../../scss/styles.scss'; + +.collapsible { + --toggle-pad-h: #{base(0.75)}; + --toggle-pad-v: #{base(0.5)}; + + border-radius: $style-radius-m; + + &__toggle-wrap { + position: relative; + } + + &--nested { + margin-bottom: $baseline !important; + } + + &__drag { + opacity: 0.5; + position: absolute; + z-index: 1; + top: var(--toggle-pad-v); + left: base(0.5); + } + + &__toggle { + @extend %btn-reset; + @extend %body; + text-align: left; + cursor: pointer; + border-top-right-radius: $style-radius-s; + border-top-left-radius: $style-radius-s; + width: 100%; + color: transparent; + + span { + user-select: none; + } + } + + &--style-default { + border: 1px solid var(--theme-elevation-200); + &:hover { + border: 1px solid var(--theme-elevation-300); + } + + > .collapsible__toggle-wrap { + .row-label { + color: var(--theme-text); + } + .collapsible__toggle { + background: var(--theme-elevation-50); + } + } + &.collapsible--hovered { + > .collapsible__toggle-wrap .collapsible__toggle { + background: var(--theme-elevation-100); + } + } + } + + &__toggle, + &__header-wrap { + padding: var(--toggle-pad-v) var(--toggle-pad-h); + } + + &__header-wrap { + position: absolute; + top: 0; + right: base(3); + bottom: 0; + left: 0; + pointer-events: none; + + > * { + pointer-events: all; + } + } + + &__header-wrap--has-drag-handle { + left: base(0.875); + } + + &--collapsed { + .collapsible__toggle { + border-bottom-right-radius: $style-radius-s; + border-bottom-left-radius: $style-radius-s; + } + + .collapsible__indicator { + transform: rotate(0turn); + } + } + + &__actions-wrap { + position: absolute; + right: var(--toggle-pad-h); + top: var(--toggle-pad-v); + pointer-events: none; + display: flex; + } + + &__actions { + pointer-events: all; + } + + &__indicator { + transform: rotate(0.5turn); + } + + &__content { + background-color: var(--theme-elevation-0); + border-bottom-left-radius: $style-radius-s; + border-bottom-right-radius: $style-radius-s; + padding: $baseline $baseline 0 $baseline; + } + + @include small-break { + &__content { + padding: var(--gutter-h); + } + } +} + +html[data-theme='dark'] { + .collapsible { + &--style-error { + border: 1px solid var(--theme-error-400); + &:hover { + border: 1px solid var(--theme-error-500); + } + + > .collapsible__toggle-wrap { + .row-label { + color: var(--theme-error-500); + } + .collapsible__toggle { + background: var(--theme-error-100); + } + } + &.collapsible--hovered { + > .collapsible__toggle-wrap .collapsible__toggle { + background: var(--theme-error-150); + } + } + } + } +} + +html[data-theme='light'] { + .collapsible { + &--style-error { + border: 1px solid var(--theme-error-500); + &:hover { + border: 1px solid var(--theme-error-600); + } + + > .collapsible__toggle-wrap { + .row-label { + color: var(--theme-error-750); + } + .collapsible__toggle { + background: var(--theme-error-50); + } + } + &.collapsible--hovered { + > .collapsible__toggle-wrap .collapsible__toggle { + background: var(--theme-error-100); + } + } + &.error { + & input { + border-color: var(--theme-error-500); + } + } + } + } +} diff --git a/packages/payload/src/admin/components/elements/Collapsible/index.tsx b/packages/payload/src/admin/components/elements/Collapsible/index.tsx new file mode 100644 index 000000000..243ee1952 --- /dev/null +++ b/packages/payload/src/admin/components/elements/Collapsible/index.tsx @@ -0,0 +1,99 @@ +import React, { useState } from 'react' +import AnimateHeight from 'react-animate-height' +import { useTranslation } from 'react-i18next' + +import type { Props } from './types' + +import Chevron from '../../icons/Chevron' +import DragHandle from '../../icons/Drag' +import './index.scss' +import { CollapsibleProvider, useCollapsible } from './provider' + +const baseClass = 'collapsible' + +export const Collapsible: React.FC = ({ + actions, + children, + className, + collapsed: collapsedFromProps, + collapsibleStyle = 'default', + dragHandleProps, + header, + initCollapsed, + onToggle, +}) => { + const [collapsedLocal, setCollapsedLocal] = useState(Boolean(initCollapsed)) + const [hoveringToggle, setHoveringToggle] = useState(false) + const isNested = useCollapsible() + const { t } = useTranslation('fields') + + const collapsed = typeof collapsedFromProps === 'boolean' ? collapsedFromProps : collapsedLocal + + return ( +
+ +
setHoveringToggle(true)} + onMouseLeave={() => setHoveringToggle(false)} + > + {dragHandleProps && ( +
+ +
+ )} + + {header && ( +
+ {header && header} +
+ )} +
+ {actions &&
{actions}
} + +
+
+ +
{children}
+
+
+
+ ) +} diff --git a/packages/payload/src/admin/components/elements/Collapsible/provider.tsx b/packages/payload/src/admin/components/elements/Collapsible/provider.tsx new file mode 100644 index 000000000..cf6db8b5e --- /dev/null +++ b/packages/payload/src/admin/components/elements/Collapsible/provider.tsx @@ -0,0 +1,14 @@ +import React, { createContext, useContext } from 'react' + +const Context = createContext(false) + +export const CollapsibleProvider: React.FC<{ + children?: React.ReactNode + withinCollapsible?: boolean +}> = ({ children, withinCollapsible = true }) => { + return {children} +} + +export const useCollapsible = (): boolean => useContext(Context) + +export default Context diff --git a/packages/payload/src/admin/components/elements/Collapsible/types.ts b/packages/payload/src/admin/components/elements/Collapsible/types.ts new file mode 100644 index 000000000..5bfc5e4d1 --- /dev/null +++ b/packages/payload/src/admin/components/elements/Collapsible/types.ts @@ -0,0 +1,15 @@ +import type React from 'react' + +import type { DragHandleProps } from '../DraggableSortable/DraggableSortableItem/types' + +export type Props = { + actions?: React.ReactNode + children: React.ReactNode + className?: string + collapsed?: boolean + collapsibleStyle?: 'default' | 'error' + dragHandleProps?: DragHandleProps + header?: React.ReactNode + initCollapsed?: boolean + onToggle?: (collapsed: boolean) => void +} diff --git a/packages/payload/src/admin/components/elements/ColumnSelector/index.scss b/packages/payload/src/admin/components/elements/ColumnSelector/index.scss new file mode 100644 index 000000000..17c35e6cb --- /dev/null +++ b/packages/payload/src/admin/components/elements/ColumnSelector/index.scss @@ -0,0 +1,19 @@ +@import '../../../scss/styles.scss'; + +.column-selector { + display: flex; + flex-wrap: wrap; + background: var(--theme-elevation-50); + padding: base(1) base(1) base(0.5); + + &__column { + margin-right: base(0.5); + margin-bottom: base(0.5); + background-color: transparent; + box-shadow: 0 0 0 1px var(--theme-elevation-200); + + &.column-selector__column--active { + background-color: var(--theme-elevation-150); + } + } +} diff --git a/packages/payload/src/admin/components/elements/ColumnSelector/index.tsx b/packages/payload/src/admin/components/elements/ColumnSelector/index.tsx new file mode 100644 index 000000000..3000624d8 --- /dev/null +++ b/packages/payload/src/admin/components/elements/ColumnSelector/index.tsx @@ -0,0 +1,69 @@ +import React, { useId } from 'react' +import { useTranslation } from 'react-i18next' + +import type { Props } from './types' + +import { getTranslation } from '../../../../utilities/getTranslation' +import Plus from '../../icons/Plus' +import X from '../../icons/X' +import { useEditDepth } from '../../utilities/EditDepth' +import DraggableSortable from '../DraggableSortable' +import Pill from '../Pill' +import { useTableColumns } from '../TableColumns' +import './index.scss' + +const baseClass = 'column-selector' + +const ColumnSelector: React.FC = (props) => { + const { collection } = props + + const { columns, moveColumn, toggleColumn } = useTableColumns() + + const { i18n } = useTranslation() + const uuid = useId() + const editDepth = useEditDepth() + + if (!columns) { + return null + } + + return ( + col.accessor)} + onDragEnd={({ moveFromIndex, moveToIndex }) => { + moveColumn({ + fromIndex: moveFromIndex, + toIndex: moveToIndex, + }) + }} + > + {columns.map((col, i) => { + const { accessor, active, label, name } = col + + if (col.accessor === '_select') return null + + return ( + : } + id={accessor} + key={`${collection.slug}-${col.name || i}${editDepth ? `-${editDepth}-` : ''}${uuid}`} + onClick={() => { + toggleColumn(accessor) + }} + > + {getTranslation(label || name, i18n)} + + ) + })} + + ) +} + +export default ColumnSelector diff --git a/packages/payload/src/admin/components/elements/ColumnSelector/types.ts b/packages/payload/src/admin/components/elements/ColumnSelector/types.ts new file mode 100644 index 000000000..39ea4e291 --- /dev/null +++ b/packages/payload/src/admin/components/elements/ColumnSelector/types.ts @@ -0,0 +1,5 @@ +import type { SanitizedCollectionConfig } from '../../../../collections/config/types' + +export type Props = { + collection: SanitizedCollectionConfig +} diff --git a/src/admin/components/elements/CopyToClipboard/index.scss b/packages/payload/src/admin/components/elements/CopyToClipboard/index.scss similarity index 100% rename from src/admin/components/elements/CopyToClipboard/index.scss rename to packages/payload/src/admin/components/elements/CopyToClipboard/index.scss diff --git a/packages/payload/src/admin/components/elements/CopyToClipboard/index.tsx b/packages/payload/src/admin/components/elements/CopyToClipboard/index.tsx new file mode 100644 index 000000000..46bd4d318 --- /dev/null +++ b/packages/payload/src/admin/components/elements/CopyToClipboard/index.tsx @@ -0,0 +1,53 @@ +import React, { useRef, useState } from 'react' +import { useTranslation } from 'react-i18next' + +import type { Props } from './types' + +import Copy from '../../icons/Copy' +import Tooltip from '../Tooltip' +import './index.scss' + +const baseClass = 'copy-to-clipboard' + +const CopyToClipboard: React.FC = ({ defaultMessage, successMessage, value }) => { + const ref = useRef(null) + const [copied, setCopied] = useState(false) + const [hovered, setHovered] = useState(false) + const { t } = useTranslation('general') + + if (value) { + return ( +