diff --git a/.eslintrc b/.eslintrc index 56347a65bb..09e2b94ad9 100755 --- a/.eslintrc +++ b/.eslintrc @@ -1,4 +1,9 @@ { + "env": { + "node": true, + "es6": true, + "browser": true + }, "extends": [ "eslint:recommended", "plugin:@typescript-eslint/recommended", diff --git a/.github/workflows/aliyun-container-registry.yml b/.github/workflows/build-docker-image.yml similarity index 69% rename from .github/workflows/aliyun-container-registry.yml rename to .github/workflows/build-docker-image.yml index b85ab9d502..cc34d3860f 100644 --- a/.github/workflows/aliyun-container-registry.yml +++ b/.github/workflows/build-docker-image.yml @@ -1,26 +1,25 @@ -name: Aliyun Container Registry +name: Build Docker Image on: push: branches: - 'main' - - 'develop' paths: - 'packages/**' - 'docker/nocobase/**' - - 'Dockerfile.acr' - - '.github/workflows/aliyun-container-registry.yml' + - 'Dockerfile' + - '.github/workflows/build-docker-image.yml' pull_request: branches: - '**' paths: - 'packages/**' - 'docker/nocobase/**' - - 'Dockerfile.acr' - - '.github/workflows/aliyun-container-registry.yml' + - 'Dockerfile' + - '.github/workflows/build-docker-image.yml' jobs: - push-acr: + build-and-push: if: github.event.pull_request.head.repo.fork != true runs-on: ubuntu-latest services: @@ -51,22 +50,41 @@ jobs: type=ref,event=pr type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} - - name: Login to Docker Hub + + - name: Login to Aliyun Container Registry uses: docker/login-action@v2 with: registry: ${{ secrets.ALI_DOCKER_REGISTRY }} username: ${{ secrets.ALI_DOCKER_USERNAME }} password: ${{ secrets.ALI_DOCKER_PASSWORD }} + + - name: Login to Docker Hub + if: github.ref == 'refs/heads/main' + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Set tags + id: set-tags + run: | + if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then + echo "::set-output name=tags::${{ steps.meta.outputs.tags }},${{ secrets.ALI_DOCKER_REGISTRY }}/${{ steps.meta.outputs.tags }}" + else + echo "::set-output name=tags::${{ secrets.ALI_DOCKER_REGISTRY }}/${{ steps.meta.outputs.tags }}" + fi + - name: Build and push uses: docker/build-push-action@v3 with: context: . - file: Dockerfile.acr + file: Dockerfile build-args: | VERDACCIO_URL=http://localhost:4873/ COMMIT_HASH=${GITHUB_SHA} push: true - tags: ${{ secrets.ALI_DOCKER_REGISTRY }}/${{ steps.meta.outputs.tags }} + tags: ${{ steps.set-tags.outputs.tags }} + - name: Deploy NocoBase env: IMAGE_TAG: ${{ steps.meta.outputs.tags }} diff --git a/.github/workflows/docker-hub.yml b/.github/workflows/docker-hub.yml deleted file mode 100644 index f1f7232fd5..0000000000 --- a/.github/workflows/docker-hub.yml +++ /dev/null @@ -1,61 +0,0 @@ -name: Docker Hub - -on: - push: - branches: - - 'main' - paths: - - 'packages/**' - - 'docker/nocobase/**' - - 'Dockerfile' - - '.github/workflows/docker-hub.yml' - -jobs: - push-docker: - runs-on: ubuntu-latest - services: - verdaccio: - image: verdaccio/verdaccio - ports: - - 4873:4873 - steps: - - - name: Checkout - uses: actions/checkout@v3 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - with: - driver-opts: network=host - - - name: Docker meta - id: meta - uses: docker/metadata-action@v4 - with: - images: | - nocobase/nocobase - tags: | - type=ref,event=branch - type=ref,event=pr - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - - - name: Login to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Build and push - uses: docker/build-push-action@v3 - with: - context: . - file: Dockerfile - build-args: | - VERDACCIO_URL=http://localhost:4873/ - # platforms: linux/amd64,linux/arm64 - push: true - tags: ${{ steps.meta.outputs.tags }} \ No newline at end of file diff --git a/.github/workflows/nocobase-test-backend.yml b/.github/workflows/nocobase-test-backend.yml index 18b4775f36..bcdc793772 100644 --- a/.github/workflows/nocobase-test-backend.yml +++ b/.github/workflows/nocobase-test-backend.yml @@ -38,13 +38,13 @@ jobs: cache: 'yarn' - run: yarn install - name: Test with Sqlite - run: yarn nocobase install -f && yarn test + run: yarn nocobase install -f && node --max_old_space_size=4096 ./node_modules/.bin/jest --maxWorkers=1 --workerIdleMemoryLimit=3000MB env: - NODE_OPTIONS: '--max_old_space_size=4096' + LOGGER_LEVEL: error DB_DIALECT: sqlite DB_STORAGE: /tmp/db.sqlite DB_UNDERSCORED: ${{ matrix.underscored }} - timeout-minutes: 30 + timeout-minutes: 35 postgres-test: strategy: @@ -80,9 +80,9 @@ jobs: - run: yarn install # - run: yarn build - name: Test with postgres - run: yarn nocobase install -f && yarn test + run: yarn nocobase install -f && node --max_old_space_size=4096 ./node_modules/.bin/jest --maxWorkers=1 --workerIdleMemoryLimit=3000MB env: - NODE_OPTIONS: '--max_old_space_size=4096' + LOGGER_LEVEL: error DB_DIALECT: postgres DB_HOST: postgres DB_PORT: 5432 @@ -92,7 +92,7 @@ jobs: DB_UNDERSCORED: ${{ matrix.underscored }} DB_SCHEMA: ${{ matrix.schema }} COLLECTION_MANAGER_SCHEMA: ${{ matrix.collection_schema }} - timeout-minutes: 30 + timeout-minutes: 35 mysql-test: strategy: @@ -118,9 +118,9 @@ jobs: - run: yarn install # - run: yarn build - name: Test with MySQL - run: yarn nocobase install -f && yarn test + run: yarn nocobase install -f && node --max_old_space_size=4096 ./node_modules/.bin/jest --maxWorkers=1 --workerIdleMemoryLimit=3000MB env: - NODE_OPTIONS: '--max_old_space_size=4096' + LOGGER_LEVEL: error DB_DIALECT: mysql DB_HOST: mysql DB_PORT: 3306 @@ -128,4 +128,4 @@ jobs: DB_PASSWORD: password DB_DATABASE: nocobase DB_UNDERSCORED: ${{ matrix.underscored }} - timeout-minutes: 30 + timeout-minutes: 35 diff --git a/CHANGELOG.md b/CHANGELOG.md index fd2b60d0d6..c713a1573f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,104 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +## [v0.11.1-alpha.3](https://github.com/nocobase/nocobase/compare/v0.11.1-alpha.2...v0.11.1-alpha.3) - 2023-07-26 + +### Merged + +- fix(plugin-workflow): fix expression field in sub-form [`#2324`](https://github.com/nocobase/nocobase/pull/2324) +- chore: improve FormProvider [`#2322`](https://github.com/nocobase/nocobase/pull/2322) +- fix: collectionField undefined [`#2320`](https://github.com/nocobase/nocobase/pull/2320) +- fix: should use `filter` instead of `where` [`#2318`](https://github.com/nocobase/nocobase/pull/2318) +- fix(bi): issue of dnd [`#2315`](https://github.com/nocobase/nocobase/pull/2315) +- feat(filter-block): support foreign key and inheritance [`#2302`](https://github.com/nocobase/nocobase/pull/2302) +- chore: merge docker build [`#2317`](https://github.com/nocobase/nocobase/pull/2317) +- feat(locale): allows to manage locale resources in core package [`#2293`](https://github.com/nocobase/nocobase/pull/2293) +- fix(plugin-workflow): fix styles [`#2316`](https://github.com/nocobase/nocobase/pull/2316) +- Feat/translation fr_FR [`#2275`](https://github.com/nocobase/nocobase/pull/2275) +- feat: customize action support create record for any collection [`#2264`](https://github.com/nocobase/nocobase/pull/2264) +- refactor: form data template support data scope config [`#2229`](https://github.com/nocobase/nocobase/pull/2229) +- chore: auto fix eslint errors when pre-commit [`#2304`](https://github.com/nocobase/nocobase/pull/2304) +- refactor: sub-table acl ignore [`#2259`](https://github.com/nocobase/nocobase/pull/2259) +- refactor: date field UI supports configuration formatting [`#2241`](https://github.com/nocobase/nocobase/pull/2241) +- fix(plugin-workflow): fix schedule duplicated triggering in multi-apps [`#2313`](https://github.com/nocobase/nocobase/pull/2313) +- refactor: table column field provider optimize [`#2312`](https://github.com/nocobase/nocobase/pull/2312) +- fix: table column field undefined fix [`#2311`](https://github.com/nocobase/nocobase/pull/2311) +- fix: table column field failed to be actived [`#2309`](https://github.com/nocobase/nocobase/pull/2309) +- fix(default-value): fix tag in RemoteSelect [`#2306`](https://github.com/nocobase/nocobase/pull/2306) +- fix: modal not displayed when clicking on the association field in the table [`#2292`](https://github.com/nocobase/nocobase/pull/2292) +- fix(database): skip reference delete on view collection [`#2303`](https://github.com/nocobase/nocobase/pull/2303) + +### Commits + +- chore(versions): 😊 publish v0.11.1-alpha.3 [`81819f0`](https://github.com/nocobase/nocobase/commit/81819f04e3bdd108a1a70038352545748552c2f9) +- chore: fix Warning if eslint [`986e241`](https://github.com/nocobase/nocobase/commit/986e2414d4b8eba2bd0cf3cf1932a74ff507271e) +- chore: fix prettier [`30b0d9b`](https://github.com/nocobase/nocobase/commit/30b0d9b3f303a43eeb340482a567a50145437f27) + +## [v0.11.1-alpha.2](https://github.com/nocobase/nocobase/compare/v0.11.1-alpha.1...v0.11.1-alpha.2) - 2023-07-23 + +### Commits + +- chore(versions): 😊 publish v0.11.1-alpha.2 [`c84476d`](https://github.com/nocobase/nocobase/commit/c84476d805bae897fea7a23cec38813dbe28cae0) +- chore(theme-editor): fix deps [`d0528cf`](https://github.com/nocobase/nocobase/commit/d0528cf1f273fd7e3efbe6eb58a247a20dbaffb1) +- chore(theme-editor): fix deps [`25decf0`](https://github.com/nocobase/nocobase/commit/25decf0aa9f6d37b972ba460a999558ecc25a819) + +## [v0.11.1-alpha.1](https://github.com/nocobase/nocobase/compare/v0.11.0-alpha.1...v0.11.1-alpha.1) - 2023-07-22 + +### Merged + +- fix(plugin-workflow): workflow collections should not appear in blocks [`#2290`](https://github.com/nocobase/nocobase/pull/2290) +- chore: remove belongsToMany through table as collection dependency [`#2289`](https://github.com/nocobase/nocobase/pull/2289) +- feat(database): handle targetCollection option in repository find [`#2175`](https://github.com/nocobase/nocobase/pull/2175) +- feat: add built-in themes [`#2284`](https://github.com/nocobase/nocobase/pull/2284) +- docs: add doc for Theme Editor [`#2280`](https://github.com/nocobase/nocobase/pull/2280) +- fix: fix sorting of user menu [`#2288`](https://github.com/nocobase/nocobase/pull/2288) +- feat(theme-editor): support to config Header's color and Settings button's color [`#2263`](https://github.com/nocobase/nocobase/pull/2263) +- feat(plugin-workflow): add sql node [`#2276`](https://github.com/nocobase/nocobase/pull/2276) +- fix: the drop-down multiple selection fields are not displayed as title fields when inherited collection [`#2257`](https://github.com/nocobase/nocobase/pull/2257) +- fix(bi): orderBy bug under MySQL [`#2283`](https://github.com/nocobase/nocobase/pull/2283) +- test: make testing more stable [`#2277`](https://github.com/nocobase/nocobase/pull/2277) +- fix(bi): eliminate redundancy queries [`#2268`](https://github.com/nocobase/nocobase/pull/2268) +- fix(client): using component as action title [`#2274`](https://github.com/nocobase/nocobase/pull/2274) +- fix(middleware): revert now variable back [`#2267`](https://github.com/nocobase/nocobase/pull/2267) +- fix: linkage failed with current date variable [`#2272`](https://github.com/nocobase/nocobase/pull/2272) +- fix: fix style of page tab [`#2270`](https://github.com/nocobase/nocobase/pull/2270) +- fix: collection select no options [`#2271`](https://github.com/nocobase/nocobase/pull/2271) +- refactor: add locale plugin [`#2261`](https://github.com/nocobase/nocobase/pull/2261) +- feat(plugin-workflow): allow manual form button to be configured with preset values [`#2225`](https://github.com/nocobase/nocobase/pull/2225) +- feat(plugin-workflow): change to unlimited depth preloading associations in workflow [`#2142`](https://github.com/nocobase/nocobase/pull/2142) +- feat: localization management [`#2210`](https://github.com/nocobase/nocobase/pull/2210) +- refactor: linkage rules support datetime [`#2260`](https://github.com/nocobase/nocobase/pull/2260) +- fix: view inherited collection field reported error [`#2249`](https://github.com/nocobase/nocobase/pull/2249) +- fix: loading did not disappear after submission failure [`#2252`](https://github.com/nocobase/nocobase/pull/2252) +- feat: support custome themes [`#2228`](https://github.com/nocobase/nocobase/pull/2228) +- chore(plugin-workflow): fix breadcrumb warning [`#2256`](https://github.com/nocobase/nocobase/pull/2256) +- fix(plugin-workflow): fix request node error in loop [`#2254`](https://github.com/nocobase/nocobase/pull/2254) +- feat(database): view collection support for add new, update and delete actions [`#2119`](https://github.com/nocobase/nocobase/pull/2119) +- refactor(client): change isTitleField check to interface property titleUsable [`#2250`](https://github.com/nocobase/nocobase/pull/2250) +- fix: option field display value in workflow todo list [`#2246`](https://github.com/nocobase/nocobase/pull/2246) +- fix(plugin-workflow): fix dispatch bug [`#2247`](https://github.com/nocobase/nocobase/pull/2247) +- fix: avoid crashes when emptying DatePicker's value [`#2237`](https://github.com/nocobase/nocobase/pull/2237) +- fix: no template data requested during depulicating [`#2240`](https://github.com/nocobase/nocobase/pull/2240) +- fix(plugin-workflow): fix job button style [`#2243`](https://github.com/nocobase/nocobase/pull/2243) +- fix: avoid crashing when delete group menu [`#2239`](https://github.com/nocobase/nocobase/pull/2239) +- fix: should auto focus in drop-down menu [`#2234`](https://github.com/nocobase/nocobase/pull/2234) +- fix(plugin-fm): adjust upload file size to 1G which same as default on server side [`#2236`](https://github.com/nocobase/nocobase/pull/2236) +- fix: should only show one scroll bar in drop-down menu [`#2231`](https://github.com/nocobase/nocobase/pull/2231) +- fix: failed to correctly respond to optional fields in the child collection in the parent collection table [`#2207`](https://github.com/nocobase/nocobase/pull/2207) +- fix(core): fix batch update query logic [`#2230`](https://github.com/nocobase/nocobase/pull/2230) +- fix: should limit submenu height [`#2227`](https://github.com/nocobase/nocobase/pull/2227) +- fix(upload): fix style of attachement in Table [`#2213`](https://github.com/nocobase/nocobase/pull/2213) + +### Fixed + +- fix(plugin-fm): adjust upload file size to 1G which same as default on server side (#2236) [`#2215`](https://github.com/nocobase/nocobase/issues/2215) + +### Commits + +- chore(versions): 😊 publish v0.11.1-alpha.1 [`e979194`](https://github.com/nocobase/nocobase/commit/e979194cf29debcc10d2e6765c96083793186331) +- fix(theme-editor): remove db.sync [`fa2de8e`](https://github.com/nocobase/nocobase/commit/fa2de8e8060da00a85b381df0d7fbf9fca2793b3) +- fix(theme-editor): fix color of menu when it is selected [`8c90436`](https://github.com/nocobase/nocobase/commit/8c904363ad055d6aaacfe67d9f74a9467e7c90b5) + ## [v0.11.0-alpha.1](https://github.com/nocobase/nocobase/compare/v0.10.1-alpha.1...v0.11.0-alpha.1) - 2023-07-08 ### Merged diff --git a/Dockerfile b/Dockerfile index 50fafb328a..9b714f7e12 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,8 @@ -FROM node:18 as builder +FROM node:16 as builder ARG VERDACCIO_URL=http://host.docker.internal:10104/ -ARG COMIT_HASH +ARG COMMIT_HASH +ARG APPEND_PRESET_LOCAL_PLUGINS +ARG BEFORE_PACK_NOCOBASE="ls -l" RUN apt-get update && apt-get install -y jq WORKDIR /tmp @@ -23,10 +25,13 @@ RUN yarn config set registry $VERDACCIO_URL WORKDIR /app RUN cd /app \ && yarn config set network-timeout 600000 -g \ - && yarn create nocobase-app my-nocobase-app -a -e APP_ENV=production \ + && yarn create nocobase-app my-nocobase-app -a -e APP_ENV=production -e APPEND_PRESET_LOCAL_PLUGINS=$APPEND_PRESET_LOCAL_PLUGINS \ && cd /app/my-nocobase-app \ && yarn install --production +WORKDIR /app/my-nocobase-app +RUN $BEFORE_PACK_NOCOBASE + RUN cd /app \ && rm -rf my-nocobase-app/packages/app/client/src/.umi \ && rm -rf nocobase.tar.gz \ @@ -50,7 +55,7 @@ COPY --from=builder /app/nocobase.tar.gz /app/nocobase.tar.gz WORKDIR /app/nocobase -RUN mkdir -p /app/nocobase/storage/uploads/ && echo "$COMIT_HASH" >> /app/nocobase/storage/uploads/COMIT_HASH +RUN mkdir -p /app/nocobase/storage/uploads/ && echo "$COMMIT_HASH" >> /app/nocobase/storage/uploads/COMMIT_HASH COPY ./docker/nocobase/docker-entrypoint.sh /app/ diff --git a/Dockerfile.acr b/Dockerfile.acr deleted file mode 100644 index 9b714f7e12..0000000000 --- a/Dockerfile.acr +++ /dev/null @@ -1,63 +0,0 @@ -FROM node:16 as builder -ARG VERDACCIO_URL=http://host.docker.internal:10104/ -ARG COMMIT_HASH -ARG APPEND_PRESET_LOCAL_PLUGINS -ARG BEFORE_PACK_NOCOBASE="ls -l" - -RUN apt-get update && apt-get install -y jq -WORKDIR /tmp -COPY . /tmp -RUN npx npm-cli-adduser --username test --password test -e test@nocobase.com -r $VERDACCIO_URL -RUN cd /tmp && \ - NEWVERSION="$(cat lerna.json | jq '.version' | tr -d '"').$(date +'%Y%m%d%H%M%S')" \ - && tmp=$(mktemp) \ - && jq ".version = \"${NEWVERSION}\"" lerna.json > "$tmp" && mv "$tmp" lerna.json -RUN yarn install && yarn build - -RUN git checkout -b release \ - && yarn version:alpha -y \ - && git config user.email "test@mail.com" \ - && git config user.name "test" && git add . \ - && git commit -m "chore(versions): test publish packages xxx" \ - && yarn release:force --registry $VERDACCIO_URL - -RUN yarn config set registry $VERDACCIO_URL -WORKDIR /app -RUN cd /app \ - && yarn config set network-timeout 600000 -g \ - && yarn create nocobase-app my-nocobase-app -a -e APP_ENV=production -e APPEND_PRESET_LOCAL_PLUGINS=$APPEND_PRESET_LOCAL_PLUGINS \ - && cd /app/my-nocobase-app \ - && yarn install --production - -WORKDIR /app/my-nocobase-app -RUN $BEFORE_PACK_NOCOBASE - -RUN cd /app \ - && rm -rf my-nocobase-app/packages/app/client/src/.umi \ - && rm -rf nocobase.tar.gz \ - && rm -rf ./my-nocobase-app/node_modules/@antv \ - && rm -rf ./my-nocobase-app/node_modules/antd/dist \ - && rm -rf ./my-nocobase-app/node_modules/antd/es \ - && rm -rf ./my-nocobase-app/node_modules/antd/node_modules \ - && rm -rf ./my-nocobase-app/node_modules/@ant-design \ - && rm -rf ./my-nocobase-app/node_modules/china-division/dist/villages.json \ - && find ./my-nocobase-app/node_modules/china-division/dist -name '*.csv' -delete \ - && find ./my-nocobase-app/node_modules/china-division/dist -name '*.sqlite' -delete \ - && tar -zcf ./nocobase.tar.gz -C /app/my-nocobase-app . - - -FROM node:16.20-bullseye-slim -RUN apt-get update && apt-get install -y nginx - -RUN rm -rf /etc/nginx/sites-enabled/default -COPY ./docker/nocobase/nocobase.conf /etc/nginx/sites-enabled/nocobase.conf -COPY --from=builder /app/nocobase.tar.gz /app/nocobase.tar.gz - -WORKDIR /app/nocobase - -RUN mkdir -p /app/nocobase/storage/uploads/ && echo "$COMMIT_HASH" >> /app/nocobase/storage/uploads/COMMIT_HASH - -COPY ./docker/nocobase/docker-entrypoint.sh /app/ - -CMD ["/app/docker-entrypoint.sh"] - diff --git a/README.zh-CN.md b/README.zh-CN.md index 7bb8b73e68..fb56de5df8 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -67,7 +67,7 @@ NocoBase 采用插件化架构,所有新功能都可以通过开发和安装 如果你需要商业版本和商业服务,欢迎通过邮件联系我们:hello@nocobase.com -也可以添加我们的微信,沟通商业合作或者加入微信群: +也可以添加我们的微信,沟通商业合作或者加入用户交流群: ![](https://www.nocobase.com/images/wechat.png) diff --git a/jest.config.js b/jest.config.js index eed650b4a5..c3dcc996a9 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,4 +1,4 @@ -const { pathsToModuleNameMapper } = require('ts-jest/utils'); +const { pathsToModuleNameMapper } = require('ts-jest'); const { compilerOptions } = require('./tsconfig.json'); const { defaults } = require('jest-config'); @@ -6,26 +6,26 @@ module.exports = { rootDir: process.cwd(), collectCoverage: false, verbose: true, - testEnvironment: 'jsdom', preset: 'ts-jest', testMatch: ['**/__tests__/**/*.test.[jt]s'], setupFiles: ['./jest.setup.ts'], - setupFilesAfterEnv: [require.resolve('jest-dom/extend-expect'), './jest.setupAfterEnv.ts'], + setupFilesAfterEnv: ['./jest.setupAfterEnv.ts'], moduleNameMapper: { ...pathsToModuleNameMapper(compilerOptions.paths, { prefix: '/', }), }, - globals: { - 'ts-jest': { - babelConfig: false, - tsconfig: './tsconfig.jest.json', - diagnostics: false, - }, + transform: { + '^.+\\.{ts|tsx}?$': [ + 'ts-jest', + { + babelConfig: false, + tsconfig: './tsconfig.jest.json', + diagnostics: false, + }, + ], }, modulePathIgnorePatterns: ['/esm/', '/es/', '/dist/', '/lib/', '/client/', '/sdk/', '\\.test\\.tsx$'], - // add .mjs .cjs for formula.js - moduleFileExtensions: [...defaults.moduleFileExtensions, 'mjs', 'cjs'], coveragePathIgnorePatterns: [ '/node_modules/', '/__tests__/', diff --git a/lerna.json b/lerna.json index b65498d384..19b61269fb 100644 --- a/lerna.json +++ b/lerna.json @@ -1,10 +1,8 @@ { - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "npmClient": "yarn", "useWorkspaces": true, - "npmClientArgs": [ - "--ignore-engines" - ], + "npmClientArgs": ["--ignore-engines"], "command": { "version": { "forcePublish": true, diff --git a/package.json b/package.json index b4e07acc14..d4b849221e 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "resolutions": { "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", + "@typescript-eslint/parser": "^6.2.0", "react-router-dom": "^6.11.2", "react-router": "^6.11.2", "react": "^18.0.0", @@ -40,11 +41,20 @@ }, "config": { "ghooks": { + "pre-commit": "yarn lint-staged", "commit-msg": "commitlint --edit" } }, + "lint-staged": { + "*.{js,json}": [ + "prettier --write" + ], + "*.ts?(x)": [ + "eslint --fix", + "prettier --parser=typescript --write" + ] + }, "devDependencies": { - "commander": "^9.2.0", "@commitlint/cli": "^16.1.0", "@commitlint/config-conventional": "^16.0.0", "@commitlint/prompt-cli": "^16.1.0", @@ -55,17 +65,21 @@ "@types/react-dom": "^17.0.0", "@vitejs/plugin-react": "^4.0.0", "auto-changelog": "^2.4.0", + "commander": "^9.2.0", "dumi": "^2.2.0", "dumi-theme-nocobase": "^0.2.14", "eslint-plugin-jest-dom": "^5.0.1", "eslint-plugin-testing-library": "^5.11.0", "ghooks": "^2.0.4", + "jest": "^29.6.2", + "jest-cli": "^29.6.2", "jsdom-worker": "^0.3.0", - "prettier": "^2.2.1", + "lint-staged": "^13.2.3", "pretty-format": "^24.0.0", "pretty-quick": "^3.1.0", "react": "^18.0.0", "react-dom": "^18.0.0", + "ts-jest": "^29.1.1", "typescript": "5.1.3", "vite": "^4.4.1", "vitest": "^0.33.0" @@ -73,5 +87,6 @@ "volta": { "node": "18.14.2", "yarn": "1.22.19" - } + }, + "dependencies": {} } diff --git a/packages/app/client/package.json b/packages/app/client/package.json index 5e376fdcef..6a009a6151 100644 --- a/packages/app/client/package.json +++ b/packages/app/client/package.json @@ -1,9 +1,9 @@ { "name": "@nocobase/app-client", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "devDependencies": { - "@nocobase/client": "0.11.1-alpha.2" + "@nocobase/client": "0.11.1-alpha.3" }, "repository": { "type": "git", diff --git a/packages/app/server/package.json b/packages/app/server/package.json index bc4c8abb53..467d7afcf8 100644 --- a/packages/app/server/package.json +++ b/packages/app/server/package.json @@ -1,12 +1,12 @@ { "name": "@nocobase/app-server", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "description": "", "license": "AGPL-3.0", "main": "./lib/index.js", "types": "./lib/index.d.ts", "dependencies": { - "@nocobase/preset-nocobase": "0.11.1-alpha.2" + "@nocobase/preset-nocobase": "0.11.1-alpha.3" }, "repository": { "type": "git", diff --git a/packages/core/acl/package.json b/packages/core/acl/package.json index 5b9b9e1efa..5f80806442 100644 --- a/packages/core/acl/package.json +++ b/packages/core/acl/package.json @@ -1,13 +1,13 @@ { "name": "@nocobase/acl", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "description": "", "license": "Apache-2.0", "main": "./lib/index.js", "types": "./lib/index.d.ts", "dependencies": { - "@nocobase/resourcer": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/resourcer": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "minimatch": "^5.1.1" }, "repository": { diff --git a/packages/core/actions/package.json b/packages/core/actions/package.json index d1f7c4a338..b0636d0e97 100644 --- a/packages/core/actions/package.json +++ b/packages/core/actions/package.json @@ -1,14 +1,14 @@ { "name": "@nocobase/actions", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "description": "", "license": "Apache-2.0", "main": "./lib/index.js", "types": "./lib/index.d.ts", "dependencies": { - "@nocobase/cache": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/resourcer": "0.11.1-alpha.2" + "@nocobase/cache": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/resourcer": "0.11.1-alpha.3" }, "repository": { "type": "git", diff --git a/packages/core/auth/package.json b/packages/core/auth/package.json index 102199f4b1..82ec2ac978 100644 --- a/packages/core/auth/package.json +++ b/packages/core/auth/package.json @@ -1,15 +1,15 @@ { "name": "@nocobase/auth", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "description": "", "license": "Apache-2.0", "main": "./lib/index.js", "types": "./lib/index.d.ts", "dependencies": { - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/resourcer": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2" + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/resourcer": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3" }, "repository": { "type": "git", diff --git a/packages/core/build/package.json b/packages/core/build/package.json index c7a8b6f1e6..b62ed90c34 100755 --- a/packages/core/build/package.json +++ b/packages/core/build/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/build", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "description": "Library build tool based on rollup.", "main": "lib/index.js", "bin": { diff --git a/packages/core/cache/package.json b/packages/core/cache/package.json index a5329c01a8..ce5d8a3106 100644 --- a/packages/core/cache/package.json +++ b/packages/core/cache/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/cache", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "description": "", "license": "Apache-2.0", "main": "./lib/index.js", diff --git a/packages/core/cli/package.json b/packages/core/cli/package.json index aa01a27f61..5612bf8dd0 100644 --- a/packages/core/cli/package.json +++ b/packages/core/cli/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/cli", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "description": "", "license": "Apache-2.0", "main": "./src/index.js", @@ -18,10 +18,11 @@ "fs-extra": "^11.1.1", "pm2": "^5.2.0", "portfinder": "^1.0.28", - "serve": "^13.0.2" + "serve": "^13.0.2", + "tsx": "^3.12.7" }, "devDependencies": { - "@nocobase/devtools": "0.11.1-alpha.2" + "@nocobase/devtools": "0.11.1-alpha.3" }, "repository": { "type": "git", diff --git a/packages/core/cli/src/commands/dev.js b/packages/core/cli/src/commands/dev.js index 58f39b5de4..8dd319aabe 100644 --- a/packages/core/cli/src/commands/dev.js +++ b/packages/core/cli/src/commands/dev.js @@ -55,13 +55,13 @@ module.exports = (cli) => { } await runAppCommand('install', ['--silent']); - // if (opts.dbSync) { - // await runAppCommand('db:sync'); - // } + if (server || !client) { console.log('starting server', serverPort); + const argv = [ - '-P', + 'watch', + '--tsconfig', './tsconfig.server.json', '-r', 'tsconfig-paths/register', @@ -74,8 +74,9 @@ module.exports = (cli) => { if (opts.dbSync) { argv.push('--db-sync'); } + const runDevServer = () => { - run('ts-node-dev', argv, { + run('tsx', argv, { env: { APP_PORT: serverPort, }, @@ -91,6 +92,7 @@ module.exports = (cli) => { runDevServer(); } + if (client || !server) { console.log('starting client', 1 * clientPort); run('umi', ['dev'], { diff --git a/packages/core/cli/src/util.js b/packages/core/cli/src/util.js index b34799a4e0..27faa861c2 100644 --- a/packages/core/cli/src/util.js +++ b/packages/core/cli/src/util.js @@ -106,7 +106,7 @@ exports.runInstall = async () => { if (exports.isDev()) { const argv = [ - '-P', + '--tsconfig', './tsconfig.server.json', '-r', 'tsconfig-paths/register', @@ -114,7 +114,7 @@ exports.runInstall = async () => { 'install', '-s', ]; - await exports.run('ts-node', argv); + await exports.run('tsx', argv); } else if (isProd()) { const file = `./packages/${APP_PACKAGE_ROOT}/server/lib/index.js`; const argv = [file, 'install', '-s']; @@ -127,7 +127,7 @@ exports.runAppCommand = async (command, args = []) => { if (exports.isDev()) { const argv = [ - '-P', + '--tsconfig', './tsconfig.server.json', '-r', 'tsconfig-paths/register', @@ -135,7 +135,7 @@ exports.runAppCommand = async (command, args = []) => { command, ...args, ]; - await exports.run('ts-node', argv); + await exports.run('tsx', argv); } else if (isProd()) { const argv = [`./packages/${APP_PACKAGE_ROOT}/server/lib/index.js`, command, ...args]; await exports.run('node', argv); diff --git a/packages/core/client/package.json b/packages/core/client/package.json index 625a950fd4..644c942429 100644 --- a/packages/core/client/package.json +++ b/packages/core/client/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/client", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "Apache-2.0", "main": "lib", "module": "es/index.js", @@ -15,9 +15,9 @@ "@formily/antd-v5": "^1.1.0-beta.4", "@formily/core": "2.2.26", "@formily/react": "2.2.26", - "@nocobase/evaluators": "0.11.1-alpha.2", - "@nocobase/sdk": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/evaluators": "0.11.1-alpha.3", + "@nocobase/sdk": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "ahooks": "^3.7.2", "antd": "^5.6.4", "antd-style": "^3.3.0", diff --git a/packages/core/client/src/acl/ACLProvider.tsx b/packages/core/client/src/acl/ACLProvider.tsx index 13d4942340..ffb378a3d2 100644 --- a/packages/core/client/src/acl/ACLProvider.tsx +++ b/packages/core/client/src/acl/ACLProvider.tsx @@ -233,7 +233,10 @@ export const useACLFieldWhitelist = () => { .concat(params?.appends || []); return { whitelist, - schemaInWhitelist(fieldSchema: Schema) { + schemaInWhitelist(fieldSchema: Schema, isSkip?) { + if (isSkip) { + return true; + } if (whitelist.length === 0) { return true; } diff --git a/packages/core/client/src/block-provider/FormBlockProvider.tsx b/packages/core/client/src/block-provider/FormBlockProvider.tsx index ff4f5ae647..2245a3d20e 100644 --- a/packages/core/client/src/block-provider/FormBlockProvider.tsx +++ b/packages/core/client/src/block-provider/FormBlockProvider.tsx @@ -66,7 +66,7 @@ export const useIsEmptyRecord = () => { export const FormBlockProvider = (props) => { const record = useRecord(); - const { collection } = props; + const { collection, isCusomeizeCreate } = props; const { __collection } = record; const currentCollection = useCollection(); const { designable } = useDesignable(); @@ -81,9 +81,9 @@ export const FormBlockProvider = (props) => { const createFlag = (currentCollection.name === (collection?.name || collection) && !isEmptyRecord) || !currentCollection.name; return ( - (detailFlag || createFlag) && ( - - + (detailFlag || createFlag || isCusomeizeCreate) && ( + + ) ); diff --git a/packages/core/client/src/block-provider/TableBlockProvider.tsx b/packages/core/client/src/block-provider/TableBlockProvider.tsx index 181ba8a570..013c95dcf0 100644 --- a/packages/core/client/src/block-provider/TableBlockProvider.tsx +++ b/packages/core/client/src/block-provider/TableBlockProvider.tsx @@ -3,10 +3,10 @@ import { FormContext, useField, useFieldSchema } from '@formily/react'; import React, { createContext, useContext, useEffect, useMemo, useState } from 'react'; import { useCollectionManager } from '../collection-manager'; import { useFilterBlock } from '../filter-provider/FilterProvider'; -import { FixedBlockWrapper, removeNullCondition, SchemaComponentOptions } from '../schema-component'; +import { FixedBlockWrapper, SchemaComponentOptions, removeNullCondition } from '../schema-component'; import { BlockProvider, RenderChildrenWithAssociationFilter, useBlockRequestContext } from './BlockProvider'; -import { findFilterTargets } from './hooks'; import { mergeFilter } from './SharedFilterProvider'; +import { findFilterTargets } from './hooks'; export const TableBlockContext = createContext({}); export function getIdsWithChildren(nodes) { @@ -31,7 +31,7 @@ interface Props { } const InternalTableBlockProvider = (props: Props) => { - const { params, showIndex, dragSort, rowKey, childrenColumnName, fieldNames } = props; + const { params, showIndex, dragSort, rowKey, childrenColumnName, fieldNames, ...others } = props; const field: any = useField(); const { resource, service } = useBlockRequestContext(); const fieldSchema = useFieldSchema(); @@ -47,6 +47,7 @@ const InternalTableBlockProvider = (props: Props) => { { - + @@ -117,7 +122,7 @@ export const useTableBlockProps = () => { useEffect(() => { if (!ctx?.service?.loading) { - field.value=[]; + field.value = []; field.value = ctx?.service?.data?.data; field.data = field.data || {}; field.data.selectedRowKeys = ctx?.field?.data?.selectedRowKeys; diff --git a/packages/core/client/src/collection-manager/hooks/useCollection.ts b/packages/core/client/src/collection-manager/hooks/useCollection.ts index ced71ea955..2920a4442a 100644 --- a/packages/core/client/src/collection-manager/hooks/useCollection.ts +++ b/packages/core/client/src/collection-manager/hooks/useCollection.ts @@ -26,6 +26,11 @@ export const useCollection = () => { const totalFields = unionBy(currentFields?.concat(inheritedFields), 'name').filter((v) => { return !v.isForeignKey; }); + + const foreignKeyFields = unionBy(currentFields?.concat(inheritedFields), 'name').filter((v) => { + return v.isForeignKey; + }); + return { ...collection, resource, @@ -47,5 +52,6 @@ export const useCollection = () => { }, currentFields, inheritedFields, + foreignKeyFields, }; }; diff --git a/packages/core/client/src/collection-manager/hooks/useCollectionManager.ts b/packages/core/client/src/collection-manager/hooks/useCollectionManager.ts index 4b252f43d1..1397f4319e 100644 --- a/packages/core/client/src/collection-manager/hooks/useCollectionManager.ts +++ b/packages/core/client/src/collection-manager/hooks/useCollectionManager.ts @@ -236,6 +236,34 @@ export const useCollectionManager = () => { return getInheritChain(collectionName); }; + /** + * 获取继承的所有 collectionName,排列顺序为当前表往祖先表排列 + * @param collectionName + * @returns + */ + const getInheritCollectionsChain = (collectionName: string) => { + const collectionsInheritChain = [collectionName]; + const getInheritChain = (name: string) => { + const collection = getCollection(name); + if (collection) { + const { inherits } = collection; + if (inherits) { + for (let index = 0; index < inherits.length; index++) { + const collectionKey = inherits[index]; + if (collectionsInheritChain.includes(collectionKey)) { + continue; + } + collectionsInheritChain.push(collectionKey); + getInheritChain(collectionKey); + } + } + } + return collectionsInheritChain; + }; + + return getInheritChain(collectionName); + }; + return { service, interfaces, @@ -299,5 +327,6 @@ export const useCollectionManager = () => { }); }, getAllCollectionsInheritChain, + getInheritCollectionsChain, }; }; diff --git a/packages/core/client/src/filter-provider/FilterProvider.tsx b/packages/core/client/src/filter-provider/FilterProvider.tsx index 03f252424d..831a3172c4 100644 --- a/packages/core/client/src/filter-provider/FilterProvider.tsx +++ b/packages/core/client/src/filter-provider/FilterProvider.tsx @@ -3,10 +3,20 @@ import { uniqBy } from 'lodash'; import React, { createContext, useEffect, useRef } from 'react'; import { useBlockRequestContext } from '../block-provider/BlockProvider'; import { SharedFilter, mergeFilter } from '../block-provider/SharedFilterProvider'; -import { CollectionFieldOptions, useCollection } from '../collection-manager'; +import { CollectionFieldOptions, FieldOptions, useCollection } from '../collection-manager'; import { removeNullCondition } from '../schema-component'; import { useAssociatedFields } from './utils'; +export interface ForeignKeyField extends FieldOptions { + /** 外键字段所在的数据表的名称 */ + collectionName: string; + isForeignKey: boolean; + key: string; + name: string; + parentKey: null | string; + reverseKey: null | string; +} + type Collection = ReturnType; export interface DataBlock { @@ -14,7 +24,7 @@ export interface DataBlock { uid: string; /** 用户自行设置的区块名称 */ title?: string; - /** 与当前区块相关的数据表信息 */ + /** 与数据区块相关的数据表信息 */ collection: Collection; /** 根据提供的参数执行该方法即可刷新数据区块的数据 */ doFilter: (params: any, params2?: any) => Promise; @@ -22,10 +32,13 @@ export interface DataBlock { clearFilter: (uid: string) => void; /** 数据区块表中所有的关系字段 */ associatedFields?: CollectionFieldOptions[]; - /** 通过右上角菜单设置的过滤条件 */ + /** 数据区块表中所有的外键字段 */ + foreignKeyFields?: ForeignKeyField[]; + /** 数据区块已经存在的过滤条件(通过 `设置数据范围` 或者其它能设置筛选条件的功能) */ defaultFilter?: SharedFilter; + /** 数据区块用于请求数据的接口 */ service?: any; - /** 区块所对应的 DOM 容器 */ + /** 数据区块所的 DOM 容器 */ dom: HTMLElement; } @@ -73,6 +86,7 @@ export const FilterBlockRecord = ({ doFilter: service.runAsync, collection, associatedFields, + foreignKeyFields: collection.foreignKeyFields as ForeignKeyField[], defaultFilter: params?.filter || {}, service, dom: container.current, diff --git a/packages/core/client/src/filter-provider/__tests__/utiles.test.ts b/packages/core/client/src/filter-provider/__tests__/utiles.test.ts new file mode 100644 index 0000000000..3b4f688d70 --- /dev/null +++ b/packages/core/client/src/filter-provider/__tests__/utiles.test.ts @@ -0,0 +1,133 @@ +import { getSupportFieldsByAssociation, getSupportFieldsByForeignKey } from '../utils'; + +describe('getSupportFieldsByAssociation', () => { + it('should return all associated fields matching the inherited collections chain', () => { + const block = { + associatedFields: [ + { id: 1, target: 'collection1', name: 'field1' }, + { id: 2, target: 'collection2', name: 'field2' }, + { id: 3, target: 'collection1', name: 'field3' }, + ], + }; + + const inheritCollectionsChain = ['collection1', 'collection2']; + + const result = getSupportFieldsByAssociation(inheritCollectionsChain, block as any); + + expect(result).toEqual([ + { id: 1, target: 'collection1', name: 'field1' }, + { id: 2, target: 'collection2', name: 'field2' }, + { id: 3, target: 'collection1', name: 'field3' }, + ]); + }); + + it('should return an empty array when there are no matching associated fields', () => { + const block = { + associatedFields: [ + { id: 1, target: 'collection1', name: 'field1' }, + { id: 2, target: 'collection2', name: 'field2' }, + { id: 3, target: 'collection1', name: 'field3' }, + ], + }; + + const inheritCollectionsChain = ['collection3', 'collection4']; + + const result = getSupportFieldsByAssociation(inheritCollectionsChain, block as any); + + expect(result).toEqual([]); + }); + + it('should return associated fields matching the inherited collections chain', () => { + const block = { + associatedFields: [ + { id: 1, target: 'collection1', name: 'field1' }, + { id: 2, target: 'collection2', name: 'field2' }, + { id: 3, target: 'collection1', name: 'field3' }, + ], + }; + + const inheritCollectionsChain = ['collection1']; + + const result = getSupportFieldsByAssociation(inheritCollectionsChain, block as any); + + expect(result).toEqual([ + { id: 1, target: 'collection1', name: 'field1' }, + { id: 3, target: 'collection1', name: 'field3' }, + ]); + }); +}); + +describe('getSupportFieldsByForeignKey', () => { + it("should return all foreign key fields matching the filter block collection's foreign key properties", () => { + const filterBlockCollection = { + fields: [ + { id: 1, name: 'field1', foreignKey: 'fk1' }, + { id: 2, name: 'field2', foreignKey: 'fk2' }, + { id: 3, name: 'field3', foreignKey: 'fk3' }, + ], + }; + + const block = { + foreignKeyFields: [ + { id: 1, name: 'fk1', target: 'collection1' }, + { id: 2, name: 'fk2', target: 'collection2' }, + { id: 3, name: 'fk4', target: 'collection1' }, + ], + }; + + const result = getSupportFieldsByForeignKey(filterBlockCollection as any, block as any); + + expect(result).toEqual([ + { id: 1, name: 'fk1', target: 'collection1' }, + { id: 2, name: 'fk2', target: 'collection2' }, + ]); + }); + + it('should return an empty array when there are no matching foreign key fields', () => { + const filterBlockCollection = { + fields: [ + { id: 1, name: 'field1', foreignKey: 'fk1' }, + { id: 2, name: 'field2', foreignKey: 'fk2' }, + { id: 3, name: 'field3', foreignKey: 'fk3' }, + ], + }; + + const block = { + foreignKeyFields: [ + { id: 1, name: 'fk4', target: 'collection1' }, + { id: 2, name: 'fk5', target: 'collection2' }, + { id: 3, name: 'fk6', target: 'collection1' }, + ], + }; + + const result = getSupportFieldsByForeignKey(filterBlockCollection as any, block as any); + + expect(result).toEqual([]); + }); + + it("should return foreign key fields matching the filter block collection's foreign key properties", () => { + const filterBlockCollection = { + fields: [ + { id: 1, name: 'field1', foreignKey: 'fk1' }, + { id: 2, name: 'field2', foreignKey: 'fk2' }, + { id: 3, name: 'field3', foreignKey: 'fk3' }, + ], + }; + + const block = { + foreignKeyFields: [ + { id: 1, name: 'fk1', target: 'collection1' }, + { id: 2, name: 'fk2', target: 'collection2' }, + { id: 3, name: 'fk3', target: 'collection1' }, + ], + }; + + const result = getSupportFieldsByForeignKey(filterBlockCollection as any, block as any); + + expect(result).toEqual([ + { id: 1, name: 'fk1', target: 'collection1' }, + { id: 2, name: 'fk2', target: 'collection2' }, + { id: 3, name: 'fk3', target: 'collection1' }, + ]); + }); +}); diff --git a/packages/core/client/src/filter-provider/utils.ts b/packages/core/client/src/filter-provider/utils.ts index e1b5c2a621..9bf65e62a4 100644 --- a/packages/core/client/src/filter-provider/utils.ts +++ b/packages/core/client/src/filter-provider/utils.ts @@ -4,10 +4,16 @@ import _ from 'lodash'; import { useCallback, useEffect, useState } from 'react'; import { mergeFilter } from '../block-provider'; import { FilterTarget, findFilterTargets } from '../block-provider/hooks'; -import { Collection, CollectionFieldOptions, FieldOptions, useCollection } from '../collection-manager'; +import { + Collection, + CollectionFieldOptions, + FieldOptions, + useCollection, + useCollectionManager, +} from '../collection-manager'; import { removeNullCondition } from '../schema-component'; import { findFilterOperators } from '../schema-component/antd/form-item/SchemaSettingOptions'; -import { useFilterBlock } from './FilterProvider'; +import { DataBlock, useFilterBlock } from './FilterProvider'; export enum FilterBlockType { FORM, @@ -16,6 +22,23 @@ export enum FilterBlockType { COLLAPSE, } +export const getSupportFieldsByAssociation = (inheritCollectionsChain: string[], block: DataBlock) => { + return block.associatedFields?.filter((field) => + inheritCollectionsChain.some((collectionName) => collectionName === field.target), + ); +}; + +export const getSupportFieldsByForeignKey = ( + filterBlockCollection: ReturnType, + block: DataBlock, +) => { + return block.foreignKeyFields?.filter((foreignKeyField) => { + return filterBlockCollection.fields.some( + (field) => field.type !== 'belongsTo' && field.foreignKey === foreignKeyField.name, + ); + }); +}; + /** * 根据筛选区块类型筛选出支持的数据区块(同表或具有关系字段的表) * @param filterBlockType @@ -25,6 +48,7 @@ export const useSupportedBlocks = (filterBlockType: FilterBlockType) => { const { getDataBlocks } = useFilterBlock(); const fieldSchema = useFieldSchema(); const collection = useCollection(); + const { getAllCollectionsInheritChain } = useCollectionManager(); // Form 和 Collapse 仅支持同表的数据区块 if (filterBlockType === FilterBlockType.FORM || filterBlockType === FilterBlockType.COLLAPSE) { @@ -36,10 +60,14 @@ export const useSupportedBlocks = (filterBlockType: FilterBlockType) => { // Table 和 Tree 支持同表或者关系表的数据区块 if (filterBlockType === FilterBlockType.TABLE || filterBlockType === FilterBlockType.TREE) { return getDataBlocks().filter((block) => { + // 1. 同表 + // 2. 关系字段 + // 3. 外键字段 return ( fieldSchema['x-uid'] !== block.uid && (isSameCollection(block.collection, collection) || - block.associatedFields.some((field) => field.target === collection.name)) + getSupportFieldsByAssociation(getAllCollectionsInheritChain(collection.name), block)?.length || + getSupportFieldsByForeignKey(collection, block)?.length) ); }); } diff --git a/packages/core/client/src/locale/en_US.ts b/packages/core/client/src/locale/en_US.ts index 68a8875db0..ad83395bb0 100644 --- a/packages/core/client/src/locale/en_US.ts +++ b/packages/core/client/src/locale/en_US.ts @@ -707,5 +707,8 @@ export default { "Current form": "Current form", "Current object":"Current object", "Linkage with form fields":"Linkage with form fields", - "Allow add new, update and delete actions":"Allow add new, update and delete actions" + "Allow add new, update and delete actions":"Allow add new, update and delete actions", + "Date display format":"Date display format", + "Assign data scope for the template":"Assign data scope for the template", + "Table selected records":"Table selected records" }; diff --git a/packages/core/client/src/locale/fr_FR.ts b/packages/core/client/src/locale/fr_FR.ts new file mode 100644 index 0000000000..2fead3fa81 --- /dev/null +++ b/packages/core/client/src/locale/fr_FR.ts @@ -0,0 +1,711 @@ +export default { + "Display <1><0>10<1>20<2>50<3>100 items per page": "Afficher <1><0>10<1>20<2>50<3>100 éléments par page", + "Meet <1><0>All<1>Any conditions in the group": "Remplir <1><0>Toutes<1>Quelconques conditions dans le groupe", + "Open in<1><0>Modal<1>Drawer<2>Window": "Ouvrir dans<1><0>Modale<1>Tiroir<2>Fenêtre", + "{{count}} filter items": "{{count}} éléments filtrés", + "{{count}} more items": "{{count}} autres éléments", + "Total {{count}} items": "Total {{count}} éléments", + "Today": "Aujourd'hui", + "Yesterday": "Hier", + "Tomorrow": "Demain", + "Month": "Mois", + "Week": "Semaine", + "This week": "Cette semaine", + "This month": "Ce mois-ci", + "This year": "Cette année", + "Next year": "L'année prochaine", + "Last week": "La semaine dernière", + "Next week": "La semaine prochaine", + "Last month": "Le mois dernier", + "Next month": "Le mois prochain", + "Last quarter": "Le dernier trimestre", + "This quarter": "Ce trimestre", + "Next quarter": "Le prochain trimestre", + "Last year": "L'année dernière", + "Last 7 days": "Les 7 derniers jours", + "Last 30 days": "Les 30 derniers jours", + "Last 90 days": "Les 90 derniers jours", + "Next 7 days": "Les 7 prochains jours", + "Next 30 days": "Les 30 prochains jours", + "Next 90 days": "Les 90 prochains jours", + "Work week": "Semaine de travail", + "Day": "Jour", + "Agenda": "Agenda", + "Date": "Date", + "Time": "Heure", + "Event": "Événement", + "None": "Aucun", + "Unconnected": "Non connecté", + "System settings": "Paramètres système", + "System title": "Titre du système", + "Logo": "Logo", + "Add menu item": "Ajouter un élément de menu", + "Page": "Page", + "Name": "Nom", + "Icon": "Icône", + "Group": "Groupe", + "Link": "Lien", + "Save conditions": "Enregistrer les conditions", + "Edit menu item": "Modifier l'élément de menu", + "Move to": "Déplacer vers", + "Insert left": "Insérer à gauche", + "Insert right": "Insérer à droite", + "Insert inner": "Insérer à l'intérieur", + "Delete": "Supprimer", + "UI editor": "Éditeur d'interface utilisateur", + "Collection": "Collection", + "Collections & Fields": "Collections et champs", + "All collections":"Toutes les collections", + "Add category":"Ajouter une catégorie", + "Enable child collections":"Activer les collections enfants", + "Allow adding records to the current collection":"Autoriser l'ajout d'enregistrements à la collection actuelle", + "Delete category":"Supprimer la catégorie", + "Edit category":"Modifier la catégorie", + "Collection category":"Catégorie de collection", + "Collection template":"Modèle de collection", + "Sort":"Trier", + "Categories":"Catégories", + "Visible":"Visible", + "Read only":"Lecture seule", + "Easy reading":"Lecture facile", + "Hidden":"Caché", + "Hidden(reserved value)":"Caché (valeur réservée)", + "Not required":"Non requis", + "Value":"Valeur", + "Disabled":"Désactivé", + "Enabled":"Activé", + 'On':'Actif', + 'Off':'Inactif', + "Empty":"Vide", + "Linkage rule":"Règle de liaison", + "Linkage rules":"Règles de liaison", + "Condition":"Condition", + "Properties":"Propriétés", + "Add linkage rule":"Ajouter une règle de liaison", + "Add property":"Ajouter une propriété", + "Category name":"Nom de la catégorie", + "Roles & Permissions": "Rôles & permissions", + "Edit profile": "Modifier le profil", + "Change password": "Changer de mot de passe", + "Old password": "Ancien mot de passe", + "New password": "Nouveau mot de passe", + "Switch role": "Changer de rôle", + "Super admin": "Super administrateur", + "Language": "Langue", + "Allow sign up": "Autoriser l'inscription", + "Enable SMS authentication": "Activer l'authentification par SMS", + "Sign out": "Déconnexion", + "Cancel": "Annuler", + "Submit": "Envoyer", + "Close": "Fermer", + "Set the data scope": "Définir la portée des données", + "Data blocks": "Blocs de données", + "Filter blocks": "Blocs de filtre", + "Table": "Tableau", + "Table OID(Inheritance)": "Table OID(Héritage)", + "Form": "Formulaire", + "List": "Liste", + "Grid Card": "Grille de cartes", + "pixels": "pixels", + "Screen size": "Taille de l'écran", + "Display title": "Titre d'affichage", + 'Set the count of columns displayed in a row': 'Définir le nombre de colonnes affichées par ligne', + 'Column': 'Colonne', + 'Phone device': 'Smartphone', + 'Tablet device': 'Tablette', + 'Desktop device': 'Ordinateur de bureau', + 'Large screen device': 'Ordinateur à grand écran', + "Collapse": "Pliable", + "Select data source": "Sélectionner la source de données", + "Calendar": "Calendrier", + "Delete events": "Supprimer les événements", + "This event": "Cet événement", + "This and following events": "Cet événement et les suivants", + "All events": "Tous les événements", + "Delete this event?": "Supprimer cet événement ?", + "Delete Event": "Supprimer l'événement", + "Kanban": "Kanban", + "Gantt": "Gantt", + "Create gantt block": "Créer un bloc de Gantt", + "Progress field": "Champ de progression", + "Time scale": "Échelle de temps", + "Hour": "Heure", + "Quarter of day": "Quart de journée", + "Half of day": "Demi-journée", + "Year": "Année", + "QuarterYear": "Trimestre", + "Select grouping field": "Sélectionner le champ de regroupement", + "Media": "Média", + "Markdown": "Markdown", + "Wysiwyg": "Wysiwyg", + "Chart blocks": "Blocs de graphique", + "Column chart": "Graphique en colonnes", + "Bar chart": "Graphique à barres", + "Line chart": "Graphique linéaire", + "Pie chart": "Graphique en camembert", + "Area chart": "Graphique en aires", + "Other chart": "Autre graphique", + "Other blocks": "Autres blocs", + "In configuration": "En configuration", + "Chart title": "Titre du graphique", + "Chart type": "Type de graphique", + "Chart config": "Configuration du graphique", + "Templates": "Modèles", + "Select template": "Sélectionner un modèle", + "Action logs": "Logs d'action", + "Create template": "Créer un modèle", + "Edit markdown": "Modifier le markdown", + "Add block": "Ajouter un bloc", + "Add new": "Ajouter nouveau", + "Add record": "Ajouter un enregistrement", + 'Add child': 'Ajouter un enfant', + 'Collapse all': 'Réduire tout', + 'Expand all': 'Développer tout', + 'Expand/Collapse': 'Développer/Réduire', + 'Default collapse': 'Développé/réduit par défaut', + "Tree table": "Tableau arborescent", + "Custom field display name": "Nom d'affichage personnalisé du champ", + "Display fields": "Afficher les champs de la collection", + "Edit record": "Modifier l'enregistrement", + "Delete menu item": "Supprimer l'élément de menu", + "Add page": "Ajouter une page", + "Add group": "Ajouter un groupe", + "Add link": "Ajouter un lien", + "Insert above": "Insérer au-dessus", + "Insert below": "Insérer en dessous", + "Save": "Enregistrer", + "Delete block": "Supprimer le bloc", + "Are you sure you want to delete it?": "Êtes-vous sûr de vouloir le supprimer ?", + "This is a demo text, **supports Markdown syntax**.": "Ceci est un texte de démonstration, **prend en charge la syntaxe Markdown.**", + "Filter": "Filtrer", + "Connect data blocks": "Connecter les blocs de données", + "Action type": "Type d'action", + "Actions": "Actions", + "Insert": "Insérer", + "Update": "Mettre à jour", + "View": "Voir", + "View record": "Voir l'enregistrement", + "Refresh": "Actualiser", + "Data changes": "Modifications des données", + "Field name": "Nom du champ", + "Before change": "Avant modification", + "After change": "Après modification", + "Delete record": "Supprimer l'enregistrement", + "Create collection": "Créer une collection", + "Collection display name": "Nom d'affichage de la collection", + "Collection name": "Nom de la collection", + "Inherits": "Hérite de", + "Generate ID field automatically": "Générer automatiquement le champ ID", + "Store the creation user of each record": "Enregistrer l'utilisateur de création de chaque enregistrement", + "Store the last update user of each record": "Enregistrer l'utilisateur de dernière mise à jour de chaque enregistrement", + "Store the creation time of each record": "Stocker l'heure de création de chaque enregistrement", + "Store the last update time of each record": "Stocker l'heure de dernière mise à jour de chaque enregistrement", + "More options": "Plus d'options", + "Records can be sorted": "Les enregistrements peuvent être triés", + "Calendar collection": "Collection de calendrier", + "General collection": "Collection générale", + "Connect to database view": "Connexion à la vue de la base de données", + "Source collections": "Collections source", + "Field source": "Source de champ", + "Preview": "Aperçu", + "Randomly generated and can be modified. Support letters, numbers and underscores, must start with an letter.": "Généré aléatoirement et peut être modifié. Prend en charge les lettres, les chiffres et les traits de soulignement, doit commencer par une lettre.", + "Edit": "Modifier", + "Edit collection": "Modifier la collection", + "Configure fields": "Configurer les champs", + "Configure columns": "Configurer les colonnes", + "Edit field": "Modifier le champ", + "Override": "Remplacer", + "Override field": "Remplacer le champ", + "Configure fields of {{title}}": "Configurer les champs de {{title}}", + "Association fields filter": "Filtre des champs d'association", + "PK & FK fields": "Champs PK & FK", + "Association fields": "Champs d'association", + "Choices fields": "Champs de choix", + "System fields": "Champs système", + "General fields": "Champs généraux", + "Inherited fields": "Champs hérités", + "Parent collection fields": "Champs de la collection parente", + "Basic": "Basique", + "Single line text": "Texte sur une seule ligne", + "Long text": "Texte long", + "Phone": "Téléphone", + "Email": "Email", + "Number": "Nombre", + "Integer": "Entier", + "Percent": "Pourcentage", + "Password": "Mot de passe", + "Advanced type": "Type avancé", + "Formula": "Formule", + "Formula description": "Calcule une valeur dans chaque enregistrement en fonction d'autres champs dans le même enregistrement.", + "Choices": "Choix", + "Checkbox": "Case à cocher", + "Single select": "Sélection unique", + "Multiple select": "Sélection multiple", + "Radio group": "Groupe de boutons radio", + "Checkbox group": "Groupe de cases à cocher", + "China region": "Région de Chine", + "Date & Time": "Date & heure", + "Datetime": "Date et heure", + "Relation": "Relation", + "Link to": "Lien vers", + "Link to description": "Utilisé pour créer rapidement des relations entre collections et compatible avec la plupart des scénarios courants. Convient à une utilisation sans développement. Lorsqu'il est présent en tant que champ, c'est une sélection déroulante utilisée pour sélectionner des enregistrements de la collection cible. Une fois créé, il génère simultanément les champs associés de la collection actuelle dans la collection cible.", + "Sub-table": "Sous-tableau", + "Sub-details": "Sous-détails", + "System info": "Informations système", + "Created at": "Créé le", + "Last updated at": "Dernière mise à jour le", + "Created by": "Créé par", + "Last updated by": "Dernière mise à jour par", + "Add field": "Ajouter un champ", + "Field display name": "Nom d'affichage du champ", + "Field type": "Type de champ", + "Field interface": "Interface du champ", + "Date format": "Format de date", + "Year/Month/Day": "Année/Mois/Jour", + "Year-Month-Day": "Année-Mois-Jour", + "Day/Month/Year": "Jour/Mois/Année", + "Show time": "Afficher l'heure", + "Time format": "Format d'heure", + "12 hour": "12 heures", + "24 hour": "24 heures", + "Relationship type": "Type de relation", + "Inverse relationship type": "Type de relation inverse", + "Source collection": "Collection source", + "Source key": "Clé source", + "Target collection": "Collection cible", + "Through collection": "Collection intermédiaire", + "Target key": "Clé cible", + "Foreign key": "Clé étrangère", + "One to one": "One to one", + "One to many": "One to many", + "Many to one": "Many to one", + "Many to many": "Many to many", + "Foreign key 1": "Clé étrangère 1", + "Foreign key 2": "Clé étrangère 2", + "One to one description": "Utilisé pour créer des relations un à un. Par exemple, un utilisateur a un profil.", + "One to many description": "Utilisé pour créer une relation un à plusieurs. Par exemple, un pays aura de nombreuses villes et une ville ne peut être que dans un pays. Lorsqu'il est présent en tant que champ, c'est un sous-tableau qui affiche les enregistrements de la collection associée. Lors de la création, un champ Many to one est automatiquement généré dans la collection associée.", + "Many to one description": "Utilisé pour créer des relations de plusieurs à un. Par exemple, une ville peut appartenir à un seul pays et un pays peut avoir de nombreuses villes. Lorsqu'il est présent en tant que champ, c'est une sélection déroulante utilisée pour sélectionner un enregistrement dans la collection associée. Une fois créé, un champ One to many est automatiquement généré dans la collection associée.", + "Many to many description": "Utilisé pour créer des relations de plusieurs à plusieurs. Par exemple, un étudiant aura de nombreux enseignants et un enseignant aura de nombreux étudiants. Lorsqu'il est présent en tant que champ, c'est une sélection déroulante utilisée pour sélectionner des enregistrements dans la collection associée.", + "Generated automatically if left blank": "Généré automatiquement si laissé vide", + "Display association fields": "Afficher les champs d'association", + "Display field title": "Afficher le titre du champ", + "Field component": "Composant de champ", + "Allow multiple": "Autoriser plusieurs", + "Quick upload": "Téléchargement rapide", + "Select file": "Sélectionner un fichier", + "Subtable": "Sous-tableau", + "Sub-form": "Sous-formulaire", + "Field mode": "Mode du champ", + "Allow add new data": "Autoriser l'ajout de nouvelles données", + "Record picker": "Sélecteur d'enregistrement", + "Toggles the subfield mode": "Activer/désactiver le mode sous-champ", + "Selector mode": "Mode sélecteur", + "Subtable mode": "Mode sous-table", + "Subform mode": "Mode sous-formulaire", + "Edit block title": "Modifier le titre du bloc", + "Block title": "Titre du bloc", + "Pattern": "Motif", + "Operator": "Opérateur", + "Editable": "Modifiable", + "Readonly": "Lecture seule", + "Easy-reading": "Lecture facile", + "Add filter": "Ajouter un filtre", + "Add filter group": "Ajouter un groupe de filtres", + "Comparision": "Comparaison", + "is": "est", + "is not": "n'est pas", + "contains": "contient", + "does not contain": "ne contient pas", + "starts with": "commence par", + "not starts with": "ne commence pas par", + "ends with": "se termine par", + "not ends with": "ne se termine pas par", + "is empty": "est vide", + "is not empty": "n'est pas vide", + "Edit chart": "Modifier le graphique", + "Add text": "Ajouter du texte", + "Filterable fields": "Champs filtrables", + "Edit button": "Modifier le bouton", + "Hide": "Masquer", + "Enable actions": "Activer les actions", + "Import": "Importer", + "Export": "Exporter", + "Customize": "Personnaliser", + "Custom": "Personnalisé", + "Function": "Fonction", + "Popup form": "Formulaire popup", + "Flexible popup": "Flexible popup", + "Configure actions": "Configurer les actions", + "Display order number": "Afficher numéro d'ordre", + "Enable drag and drop sorting": "Activer le tri par glisser-déposer", + "Triggered when the row is clicked": "Déclenché lorsque la ligne est cliquée", + "Add tab": "Ajouter un onglet", + "Disable tabs": "Désactiver les onglets", + "Details": "Détails", + "Edit tab": "Modifier l'onglet", + "Relationship blocks": "Blocs de relations", + "Select record": "Sélectionner un enregistrement", + "Display name": "Nom d'affichage", + "Select icon": "Sélectionner une icône", + "Custom column name": "Nom de colonne personnalisé", + "Edit description": "Modifier la description", + "Required": "Requis", + "Unique": "Unique", + "Label field": "Champ d'étiquette", + "Default is the ID field": "La valeur par défaut est le champ ID", + "Set default sorting rules": "Définir les règles de tri par défaut", + "Set validation rules": "Définir les règles de validation", + "Max length": "Longueur maximale", + "Min length": "Longueur minimale", + "Maximum": "Maximum", + "Minimum": "Minimum", + "Max length must greater than min length": "La longueur maximale doit être supérieure à la longueur minimale", + "Min length must less than max length": "La longueur minimale doit être inférieure à la longueur maximale", + "Maximum must greater than minimum": "La valeur maximale doit être supérieure à la valeur minimale", + "Minimum must less than maximum": "La valeur minimale doit être inférieure à la valeur maximale", + "Validation rule": "Règle de validation", + "Add validation rule": "Ajouter une règle de validation", + "Format": "Format", + "Regular expression": "Expression régulière", + "Error message": "Message d'erreur", + "Length": "Longueur", + "The field value cannot be greater than ": "La valeur du champ ne peut pas être supérieure à ", + "The field value cannot be less than ": "La valeur du champ ne peut pas être inférieure à ", + "The field value is not an integer number": "La valeur du champ n'est pas un nombre entier", + "Set default value": "Définir la valeur par défaut", + "Default value": "Valeur par défaut", + "is before": "est avant", + "is after": "est après", + "is on or after": "est le même jour ou après", + "is on or before": "est le même jour ou avant", + "is between": "est entre", + "Upload": "Télécharger", + "Select level": "Sélectionner un niveau", + "Province": "Province", + "City": "Ville", + "Area": "Région", + "Street": "Rue", + "Village": "Village", + "Must select to the last level": "Doit sélectionner jusqu'au dernier niveau", + "Move {{title}} to": "Déplacer {{title}} vers", + "Target position": "Position cible", + "After": "Après", + "Before": "Avant", + "Add {{type}} before \"{{title}}\"": "Ajouter {{type}} avant \"{{title}}\"", + "Add {{type}} after \"{{title}}\"": "Ajouter {{type}} après \"{{title}}\"", + "Add {{type}} in \"{{title}}\"": "Ajouter {{type}} dans \"{{title}}\"", + "Original name": "Nom d'origine", + "Custom name": "Nom personnalisé", + "Custom Title": "Titre personnalisé", + "Options": "Options", + "Option value": "Valeur de l'option", + "Option label": "Étiquette de l'option", + "Color": "Couleur", + "Add option": "Ajouter une option", + "Related collection": "Collection associée", + "Allow linking to multiple records": "Autoriser la liaison à plusieurs enregistrements", + "Allow uploading multiple files": "Autoriser le téléchargement de plusieurs fichiers", + "Configure calendar": "Configurer le calendrier", + "Title field": "Champ de titre", + "Custom title": "Titre personnalisé", + "Daily": "Quotidien", + "Weekly": "Hebdomadaire", + "Monthly": "Mensuel", + "Yearly": "Annuel", + "Repeats": "Répétitions", + "Show lunar": "Afficher le calendrier lunaire", + "Start date field": "Champ de date de début", + "End date field": "Champ de date de fin", + "Navigate": "Naviguer", + "Title": "Titre", + "Description": "Description", + "Select view": "Sélectionner la vue", + "Reset": "Réinitialiser", + "Importable fields": "Champs importables", + "Exportable fields": "Champs exportables", + "Saved successfully": "Enregistré avec succès", + "Nickname": "Pseudo", + "Sign in": "Se connecter", + "Sign in via account": "Se connecter via un compte", + "Sign in via phone": "Se connecter via un numéro de téléphone", + "Create an account": "Créer un compte", + "Sign up": "S'inscrire", + "Confirm password": "Confirmer le mot de passe", + "Log in with an existing account": "Se connecter avec un compte existant", + "Signed up successfully. It will jump to the login page.": "Inscription réussie. Vous allez être redirigé(e) vers la page de connexion.", + "Password mismatch": "Erreur de mot de passe", + "Users": "Utilisateurs", + "Verification code": "Code de vérification", + "Send code": "Envoyer le code", + "Retry after {{count}} seconds": "Réessayer après {{count}} secondes", + "Roles": "Rôles", + "Add role": "Ajouter un rôle", + "Role name": "Nom du rôle", + "Configure": "Configurer", + "Configure permissions": "Configurer les permissions", + "Edit role": "Modifier le rôle", + "Action permissions": "Permissions d'action", + "Menu permissions": "Permissions de menu", + "Menu item name": "Nom de l'élément de menu", + "Allow access": "Autoriser l'accès", + "Action name": "Nom de l'action", + "Allow action": "Autoriser l'action", + "Action scope": "Portée de l'action", + "Operate on new data": "Opérer sur de nouvelles données", + "Operate on existing data": "Opérer sur des données existantes", + "Yes": "Oui", + "No": "Non", + "Red": "Rouge", + "Magenta": "Magenta", + "Volcano": "Volcan", + "Orange": "Orange", + "Gold": "Or", + "Lime": "Citron vert", + "Green": "Vert", + "Cyan": "Cyan", + "Blue": "Bleu", + "Geek blue": "Bleu geek", + "Purple": "Violet", + "Default": "Par défaut", + "Add card": "Ajouter une carte", + "edit title": "modifier le titre", + "Turn pages": "Tourner les pages", + "Others": "Autres", + "Save as template": "Enregistrer en tant que modèle", + "Save as block template": "Enregistrer en tant que modèle de bloc", + "Block templates": "Modèles de bloc", + "Convert reference to duplicate": "Convertir la référence en doublon", + "Template name": "Nom du modèle", + "Block type": "Type de bloc", + "No blocks to connect": "Aucun bloc à connecter", + "Action column": "Colonne d'action", + "Records per page": "Enregistrements par page", + "(Fields only)": "(Champs uniquement)", + "Button title": "Titre du bouton", + "Button icon": "Icône du bouton", + "Submitted successfully": "Envoyé avec succès", + "Operation succeeded": "Opération réussie", + "Operation failed": "Échec de l'opération", + "Open mode": "Mode d'ouverture", + "Popup size": "Taille de la popup", + "Small": "Petite", + "Middle": "Moyenne", + "Large": "Grande", + "Menu item title": "Titre de l'élément de menu", + "Menu item icon": "Icône de l'élément de menu", + "Target": "Cible", + "Position": "Position", + "Insert before": "Insérer avant", + "Insert after": "Insérer après", + "UI Editor": "Éditeur d'interface utilisateur", + "ASC": "ASC", + "DESC": "DESC", + "Add sort field": "Ajouter un champ de tri", + "ID": "ID", + "Identifier for program usage. Support letters, numbers and underscores, must start with an letter.": "Identifiant pour une utilisation dans le programme. Prend en charge les lettres, les chiffres et les traits de soulignement et doit commencer par une lettre.", + "Drawer": "Tiroir", + "Dialog": "Dialogue", + "Delete action": "Supprimer l'action", + "Custom column title": "Titre de colonne personnalisé", + 'Column title': 'Titre de colonne', + "Original title: ": "Titre original : ", + "Delete table column": "Supprimer la colonne de tableau", + "Skip required validation": "Ignorer la validation requise", + "Form values": "Valeurs du formulaire", + "Fields values": "Valeurs des champs", + 'The field has been deleted': 'Le champ a été supprimé', + "When submitting the following fields, the saved values are": "Lors de l'envoi des champs suivants, les valeurs enregistrées sont", + "After successful submission": "Après un envoi réussi", + "Then": "Ensuite", + "Stay on current page": "Rester sur la page actuelle", + "Redirect to": "Rediriger vers", + "Save action": "Enregistrer l'action", + "Exists": "Existe", + "Add condition": "Ajouter une condition", + "Add condition group": "Ajouter un groupe de conditions", + "exists": "existe", + "not exists": "n'existe pas", + "=": "=", + "≠": "≠", + ">": ">", + "≥": "≥", + "<": "<", + "≤": "≤", + "Role UID": "UID du rôle", + "Precision": "Précision", + "Formula mode": "Mode formule", + "Expression": "Expression", + "Input +, -, *, /, ( ) to calculate, input @ to open field variables.": "Saisissez +, -, *, /, ( ) pour calculer, saisissez @ pour ouvrir les variables de champ.", + "Formula error.": "Erreur de formule.", + "Rich Text": "Texte enrichi", + "Junction collection": "Collection de jonction", + "Leave it blank, unless you need a custom intermediate table": "Laissez-le vide, sauf si vous avez besoin d'une table intermédiaire personnalisée", + "Fields": "Champs", + "Edit field title": "Modifier le titre du champ", + "Field title": "Titre du champ", + "Original field title: ": "Titre du champ d'origine : ", + "Edit tooltip": "Modifier l'info-bulle", + "Delete field": "Supprimer le champ", + "Select collection": "Sélectionner une collection", + "Blank block": "Bloc vierge", + "Duplicate template": "Dupliquer le modèle", + "Reference template": "Référencer le modèle", + "Create calendar block": "Créer un bloc de calendrier", + "Create kanban block": "Créer un bloc kanban", + "Grouping field": "Champ de regroupement", + "Single select and radio fields can be used as the grouping field": "Les champs de sélection unique et radio peuvent être utilisés comme champ de regroupement", + "Tab name": "Nom de l'onglet", + "Current record blocks": "Blocs d'enregistrement actuels", + "Popup message": "Message popup", + "Delete role": "Supprimer le rôle", + "Role display name": "Nom d'affichage du rôle", + "Default role": "Rôle par défaut", + "All collections use general action permissions by default; permission configured individually will override the default one.": "Toutes les collections utilisent les permissions d'action générales par défaut ; les permissions configurées individuellement remplaceront celles par défaut.", + "Allows configuration of the whole system, including UI, collections, permissions, etc.": "Permet de configurer l'ensemble du système, y compris l'interface utilisateur, les collections, les permissions, etc.", + "New menu items are allowed to be accessed by default.": "Les nouveaux éléments de menu peuvent être accessibles par défaut.", + "Global permissions": "Permissions globales", + "General permissions": "Permissions générales", + "Global action permissions": "Permissions d'action globales", + "General action permissions": "Permissions d'action générales", + "Plugin settings permissions": "Permissions de configuration des plugins", + "Allow to desgin pages": "Autoriser la conception des pages", + "Allow to manage plugins": "Autoriser la gestion des plugins", + "Allow to configure plugins": "Autoriser la configuration des plugins", + "Allows to configure interface": "Permet de configurer l'interface", + "Allows to install, activate, disable plugins": "Permet d'installer, d'activer, de désactiver des plugins", + "Allows to configure plugins": "Permet de configurer des plugins", + "Action display name": "Nom d'affichage de l'action", + "Allow": "Autoriser", + "Data scope": "Portée des données", + "Action on new records": "Action sur les nouveaux enregistrements", + "Action on existing records": "Action sur les enregistrements existants", + "All records": "Tous les enregistrements", + "Own records": "Ses propres enregistrements", + "Permission policy": "Politique de permission", + "Individual": "Individuelle", + "General": "Générale", + "Accessible": "Accessible", + "Configure permission": "Configurer la permission", + "Action permission": "Permission d'action", + "Field permission": "Permission de champ", + "Scope name": "Nom de la portée", + "Unsaved changes": "Modifications non enregistrées", + "Are you sure you don't want to save?": "Êtes-vous sûr de ne pas vouloir enregistrer ?", + "Dragging": "Déplacement", + "Popup": "Popup", + "Trigger workflow": "Déclencher un workflow", + "Request API": "Interroger une API", + "Assign field values": "Attribuer des valeurs de champ", + "Constant value": "Valeur constante", + "Dynamic value": "Valeur dynamique", + "Current user": "Utilisateur actuel", + "Current record": "Enregistrement actuel", + "Current time": "Heure actuelle", + "System variables": "Variables système", + "Date variables": "Variables de date", + "Popup close method": "Méthode de fermeture de la popup", + "Automatic close": "Fermeture automatique", + "Manually close": "Fermeture manuelle", + "After successful update": "Après une mise à jour réussie", + "Save record": "Enregistrer", + "Updated successfully": "Mis à jour avec succès", + "After successful save": "Après un enregistrement réussie", + "After clicking the custom button, the following field values will be assigned according to the following form.": "Après avoir cliqué sur le bouton personnalisé, les valeurs de champ suivantes seront attribuées selon le formulaire suivant.", + "After clicking the custom button, the following fields of the current record will be saved according to the following form.": "Après avoir cliqué sur le bouton personnalisé, les champs suivants de l'enregistrement actuel seront sauvegardés selon le formulaire suivant.", + "Button background color": "Couleur d'arrière-plan du bouton", + "Highlight": "Mise en évidence", + "Danger red": "Rouge danger", + "Custom request": "Requête personnalisée", + "Request settings": "Paramètres de la requête", + "Request URL": "URL de la requête", + "Request method": "Méthode de requête", + "Request query parameters": "Paramètres de requête", + "Request headers": "En-têtes de requête", + "Request body": "Corps de la requête", + "Request success": "Succès de la requête", + "Invalid JSON format": "Format JSON invalide", + "After successful request": "Après une requête réussie", + "Add exportable field": "Ajouter un champ exportable", + "Audit logs": "Journaux d'audit", + "Record ID": "ID de l'enregistrement", + "User": "Utilisateur", + "Field": "Champ", + "Select": "Sélectionner", + "Select field": "Sélectionner un champ", + "Field value changes": "Changements de valeur du champ", + "One to one (has one)": "One to one (has one)", + "One to one (belongs to)": "One to one (belongs to)", + "Use the same time zone (GMT) for all users": "Utiliser le même fuseau horaire (GMT) pour tous les utilisateurs", + "Province/city/area name": "Nom de la province/ville/région", + "Enabled languages": "Langues activées", + "View all plugins": "Voir tous les plugins", + "Print": "Imprimer", + "Done": "Terminé", + "Sign up successfully, and automatically jump to the sign in page": "Inscription réussie, et redirection automatique vers la page de connexion", + "File manager": "Gestionnaire de fichiers", + "ACL": "ACL", + "Collection manager": "Gestionnaire de collection", + "Plugin manager": "Gestionnaire de plugins", + "Local": "Local", + "Built-in": "Intégré", + "Marketplace": "Place de marché", + "Coming soon...": "Bientôt...", + "All plugin settings": "Tous les paramètres de plugin", + "Bookmark": "Signet", + "Manage all settings": "Gérer tous les paramètres", + "Create inverse field in the target collection": "Créer un champ inverse dans la collection cible", + "Inverse field name": "Nom du champ inverse", + "Inverse field display name": "Nom d'affichage du champ inverse", + "Bulk update": "Mise à jour en masse", + "After successful bulk update": "Après une mise à jour en masse réussie", + "Bulk edit": "Édition en masse", + "Data will be updated": "Les données seront mises à jour", + "Selected": "Sélectionné", + "All": "Tous", + "Update selected data?": "Mettre à jour les données sélectionnées ?", + "Update all data?": "Mettre à jour toutes les données ?", + "Remains the same": "Reste inchangé", + "Changed to": "Modifié en", + "Clear": "Effacer", + "Add attach": "Ajouter une pièce jointe", + "Please select the records to be updated": "Veuillez sélectionner les enregistrements à mettre à jour", + "Selector": "Sélecteur", + "Inner": "Interne", + "Search and select collection": "Rechercher et sélectionner une collection", + "Please fill in the iframe URL": "Veuillez remplir l'URL de l'iframe", + "Fix block": "Fixer le bloc", + "Plugin name": "Nom du plugin", + "Plugin tab name": "Nom de l'onglet du plugin", + "AutoGenId": "Champ d'ID généré automatiquement", + "CreatedBy": "Enregistrer l'utilisateur qui a créé une ligne", + "UpdatedBy": "Enregistrer le dernier utilisateur ayant effectué une mise à jour de la ligne", + "CreatedAt": "Enregistrer l'heure de création d'une ligne", + "UpdatedAt": "Enregistrer le dernier utilisateur ayant effectué une mise à jour de la ligne", + "Column width": "Largeur de colonne", + "Sortable": "Triable", + "Enable link": "Activer le lien", + "This is likely a NocoBase internals bug. Please open an issue at <1>here": "Ceci est probablement un bogue interne de NocoBase. Veuillez ouvrir un problème <1>ici", + "Render Failed": "Échec du rendu", + "Feedback": "Commentaires", + "Try again": "Réessayer", + "Data template": "Modèle de données", + "Duplicate":"Dupliquer", + "Duplicating":"Duplication", + "Duplicate mode":"Mode de duplication", + "Quick duplicate":"Duplication rapide", + "Duplicate and continue":"Dupliquer et continuer", + "Please configure the duplicate fields":"Veuillez configurer les champs de duplication", + "Add":"Ajouter", + "Add new mode":"Mode d'ajout", + "Quick add":"Ajout rapide", + "Modal add":"Ajout modal", + "Save mode":"Mode d'enregistrement", + "First or create":"D'abord ou créer", + "Update or create":"Mettre à jour ou créer", + "Find by the following fields":"Trouver par les champs suivants", + "Create":"Créer", + "Current form": "Formulaire actuel", + "Current object":"Objet actuel", + "Linkage with form fields":"Lien avec les champs de formulaire", + "Allow add new, update and delete actions":"Autoriser les actions d'ajout, de mise à jour et de suppression" +}; diff --git a/packages/core/client/src/locale/ja_JP.ts b/packages/core/client/src/locale/ja_JP.ts index ca3496767b..175508b795 100644 --- a/packages/core/client/src/locale/ja_JP.ts +++ b/packages/core/client/src/locale/ja_JP.ts @@ -618,5 +618,7 @@ export default { "Current form":"現在のフォーム", "Current object":"現在のオブジェクト", "Linkage with form fields":"フォームデータから連動", - "Allow add new, update and delete actions":"削除変更操作の許可" + "Allow add new, update and delete actions":"削除変更操作の許可", + "Date display format":"日付表示形式", + "Assign data scope for the template":"テンプレートのデータ範囲の指定", } diff --git a/packages/core/client/src/locale/zh_CN.ts b/packages/core/client/src/locale/zh_CN.ts index 9f808c41a0..73e2c4f5e4 100644 --- a/packages/core/client/src/locale/zh_CN.ts +++ b/packages/core/client/src/locale/zh_CN.ts @@ -792,5 +792,8 @@ export default { "Copy into the form and continue to fill in": "复制到表单并继续填写", "Linkage with form fields":"从表单字段联动", "Failed to load plugin": "插件加载失败", - "Allow add new, update and delete actions":"允许增删改操作" + "Allow add new, update and delete actions":"允许增删改操作", + "Date display format":"日期显示格式", + "Assign data scope for the template":"为模板指定数据范围", + "Table selected records":"表格中选中的记录" } diff --git a/packages/core/client/src/schema-component/antd/__builtins__/style.ts b/packages/core/client/src/schema-component/antd/__builtins__/style.ts index b8e9efc1d8..2a5519562d 100644 --- a/packages/core/client/src/schema-component/antd/__builtins__/style.ts +++ b/packages/core/client/src/schema-component/antd/__builtins__/style.ts @@ -59,6 +59,7 @@ export type UseComponentStyleResult = { wrapSSR: ReturnType; hashId: string; componentCls: string; + rootPrefixCls: string; }; export const genStyleHook = ( @@ -99,6 +100,7 @@ export const genStyleHook = ( ), hashId, componentCls: prefixCls, + rootPrefixCls, }; }; }; diff --git a/packages/core/client/src/schema-component/antd/action/Action.Designer.tsx b/packages/core/client/src/schema-component/antd/action/Action.Designer.tsx index 343ea14d6c..25df35327e 100644 --- a/packages/core/client/src/schema-component/antd/action/Action.Designer.tsx +++ b/packages/core/client/src/schema-component/antd/action/Action.Designer.tsx @@ -580,7 +580,7 @@ export const ActionDesigner = (props) => { const { name } = useCollection(); const { getChildrenCollections } = useCollectionManager(); const isAction = useLinkageAction(); - const isPopupAction = ['create', 'update', 'view', 'customize:popup', 'duplicate'].includes( + const isPopupAction = ['create', 'update', 'view', 'customize:popup', 'duplicate','customize:create'].includes( fieldSchema['x-action'] || '', ); const isUpdateModePopupAction = ['customize:bulkUpdate', 'customize:bulkEdit'].includes(fieldSchema['x-action']); diff --git a/packages/core/client/src/schema-component/antd/action/Action.style.ts b/packages/core/client/src/schema-component/antd/action/Action.style.ts index 0c89a12907..9a512d45e3 100644 --- a/packages/core/client/src/schema-component/antd/action/Action.style.ts +++ b/packages/core/client/src/schema-component/antd/action/Action.style.ts @@ -5,50 +5,42 @@ const useStyles = genStyleHook('nb-action', (token) => { return { [componentCls]: { - '.renderButton': { - position: 'relative', - '&:hover': { '> .general-schema-designer': { display: 'block' } }, - '&.nb-action-link': { - '> .general-schema-designer': { - top: '-10px', - bottom: '-10px', - left: '-10px', - right: '-10px', - }, - }, + position: 'relative', + '&:hover': { '> .general-schema-designer': { display: 'block' } }, + '&.nb-action-link': { '> .general-schema-designer': { - position: 'absolute', - zIndex: 999, - top: '0', - bottom: '0', - left: '0', - right: '0', - display: 'none', - background: 'var(--colorBgSettingsHover)', - border: '0', - pointerEvents: 'none', - '> .general-schema-designer-icons': { - position: 'absolute', - right: '2px', - top: '2px', - lineHeight: '16px', - pointerEvents: 'all', - '.ant-space-item': { - backgroundColor: token.colorSettings, - color: '#fff', - lineHeight: '16px', - width: '16px', - paddingLeft: '1px', - alignSelf: 'stretch', - }, - }, + top: '-10px', + bottom: '-10px', + left: '-10px', + right: '-10px', }, }, - - '.popover': { - display: 'flex', - justifyContent: 'flex-end', - width: '100%', + '> .general-schema-designer': { + position: 'absolute', + zIndex: 999, + top: '0', + bottom: '0', + left: '0', + right: '0', + display: 'none', + background: 'var(--colorBgSettingsHover)', + border: '0', + pointerEvents: 'none', + '> .general-schema-designer-icons': { + position: 'absolute', + right: '2px', + top: '2px', + lineHeight: '16px', + pointerEvents: 'all', + '.ant-space-item': { + backgroundColor: token.colorSettings, + color: '#fff', + lineHeight: '16px', + width: '16px', + paddingLeft: '1px', + alignSelf: 'stretch', + }, + }, }, }, }; diff --git a/packages/core/client/src/schema-component/antd/action/Action.tsx b/packages/core/client/src/schema-component/antd/action/Action.tsx index e68dfdb376..dc53882d10 100644 --- a/packages/core/client/src/schema-component/antd/action/Action.tsx +++ b/packages/core/client/src/schema-component/antd/action/Action.tsx @@ -1,4 +1,5 @@ import { observer, RecursionField, useField, useFieldSchema, useForm } from '@formily/react'; +import { lodash } from '@nocobase/utils'; import { App, Button, Popover } from 'antd'; import classnames from 'classnames'; import React, { useEffect, useState } from 'react'; @@ -21,7 +22,6 @@ import { ActionContextProvider } from './context'; import { useA } from './hooks'; import { ComposedAction } from './types'; import { linkageAction } from './utils'; -import { lodash } from '@nocobase/utils'; export const Action: ComposedAction = observer( (props: any) => { @@ -105,7 +105,7 @@ export const Action: ComposedAction = observer( } }} component={tarComponent || Button} - className={classnames('renderButton', className)} + className={classnames(componentCls, hashId, className)} type={props.type === 'danger' ? undefined : props.type} > {actionTitle} @@ -115,24 +115,22 @@ export const Action: ComposedAction = observer( }; return wrapSSR( -
- - {popover && } - {!popover && renderButton()} - {!popover &&
e.stopPropagation()}>{props.children}
} - {element} -
-
, + + {popover && } + {!popover && renderButton()} + {!popover &&
e.stopPropagation()}>{props.children}
} + {element} +
, ); }, { displayName: 'Action' }, @@ -160,7 +158,17 @@ Action.Popover = observer( Action.Popover.Footer = observer( (props) => { - return
{props.children}
; + return ( +
+ {props.children} +
+ ); }, { displayName: 'Action.Popover.Footer' }, ); diff --git a/packages/core/client/src/schema-component/antd/association-field/AssociationSelect.tsx b/packages/core/client/src/schema-component/antd/association-field/AssociationSelect.tsx index 2803d4c699..af99905507 100644 --- a/packages/core/client/src/schema-component/antd/association-field/AssociationSelect.tsx +++ b/packages/core/client/src/schema-component/antd/association-field/AssociationSelect.tsx @@ -4,7 +4,8 @@ import { Space, message } from 'antd'; import { isFunction } from 'mathjs'; import React from 'react'; import { useTranslation } from 'react-i18next'; -import { RecordProvider, useAPIClient, useCollectionManager } from '../../../'; +import { RecordProvider, useAPIClient } from '../../../'; +import { isVariable } from '../../common/utils/uitls'; import { RemoteSelect, RemoteSelectProps } from '../remote-select'; import useServiceOptions, { useAssociationFieldContext } from './hooks'; @@ -17,10 +18,10 @@ const InternalAssociationSelect = observer((props: AssociationSelectProps) => { const { objectValue = true } = props; const field: any = useField(); const fieldSchema = useFieldSchema(); - const { getCollection } = useCollectionManager(); const service = useServiceOptions(props); const { options: collectionField } = useAssociationFieldContext(); - const value = Array.isArray(props.value) ? props.value.filter(Boolean) : props.value; + const initValue = isVariable(props.value) ? undefined : props.value; + const value = Array.isArray(initValue) ? initValue.filter(Boolean) : initValue; const addMode = fieldSchema['x-component-props']?.addMode; const isAllowAddNew = fieldSchema['x-add-new']; const { t } = useTranslation(); @@ -28,7 +29,6 @@ const InternalAssociationSelect = observer((props: AssociationSelectProps) => { const form = useForm(); const api = useAPIClient(); const resource = api.resource(collectionField.target); - const targetCollection = getCollection(collectionField.target); const handleCreateAction = async (props) => { const { search: value, callBack } = props; const { diff --git a/packages/core/client/src/schema-component/antd/association-field/Nester.tsx b/packages/core/client/src/schema-component/antd/association-field/Nester.tsx index 839a2edc8b..6b195cef97 100644 --- a/packages/core/client/src/schema-component/antd/association-field/Nester.tsx +++ b/packages/core/client/src/schema-component/antd/association-field/Nester.tsx @@ -10,6 +10,7 @@ import React, { useContext } from 'react'; import { useTranslation } from 'react-i18next'; import { AssociationFieldContext } from './context'; import { useAssociationFieldContext } from './hooks'; +import { RecordProvider, useRecord } from '../../../record-provider'; export const Nester = (props) => { const { options } = useContext(AssociationFieldContext); @@ -92,7 +93,9 @@ const ToManyNester = observer( )} - + + + ); diff --git a/packages/core/client/src/schema-component/antd/association-field/SubTable.tsx b/packages/core/client/src/schema-component/antd/association-field/SubTable.tsx index 1be5f1e05a..0853a793a7 100644 --- a/packages/core/client/src/schema-component/antd/association-field/SubTable.tsx +++ b/packages/core/client/src/schema-component/antd/association-field/SubTable.tsx @@ -97,6 +97,7 @@ export const SubTable: any = observer( ) } + isSubTable={true} /> ); diff --git a/packages/core/client/src/schema-component/antd/form-item/FormItem.tsx b/packages/core/client/src/schema-component/antd/form-item/FormItem.tsx index 3e781f9870..05cf804f8a 100644 --- a/packages/core/client/src/schema-component/antd/form-item/FormItem.tsx +++ b/packages/core/client/src/schema-component/antd/form-item/FormItem.tsx @@ -1,7 +1,7 @@ import { css, cx } from '@emotion/css'; -import { ArrayCollapse, ArrayItems, FormLayout, FormItem as Item } from '@formily/antd-v5'; +import { ArrayCollapse, ArrayItems, FormItem as Item, FormLayout } from '@formily/antd-v5'; import { Field } from '@formily/core'; -import { ISchema, Schema, observer, useField, useFieldSchema } from '@formily/react'; +import { ISchema, observer, Schema, useField, useFieldSchema } from '@formily/react'; import { dayjs } from '@nocobase/utils/client'; import { Select } from 'antd'; import _ from 'lodash'; @@ -20,11 +20,9 @@ import { } from '../../../collection-manager'; import { isTitleField } from '../../../collection-manager/Configuration/CollectionFields'; import { GeneralSchemaItems } from '../../../schema-items/GeneralSchemaItems'; -import { GeneralSchemaDesigner, SchemaSettings, isPatternDisabled, isShowDefaultValue } from '../../../schema-settings'; -import { VariableInput } from '../../../schema-settings/VariableInput/VariableInput'; +import { GeneralSchemaDesigner, isPatternDisabled, isShowDefaultValue, SchemaSettings } from '../../../schema-settings'; import { useIsShowMultipleSwitch } from '../../../schema-settings/hooks/useIsShowMultipleSwitch'; import { isVariable, parseVariables, useVariablesCtx } from '../../common/utils/uitls'; -import { SchemaComponent } from '../../core'; import { useCompile, useDesignable, useFieldModeOptions } from '../../hooks'; import { BlockItem } from '../block-item'; import { removeNullCondition } from '../filter'; @@ -33,29 +31,72 @@ import { FilterDynamicComponent } from '../table-v2/FilterDynamicComponent'; import { FilterFormDesigner } from './FormItem.FilterFormDesigner'; import { useEnsureOperatorsValid } from './SchemaSettingOptions'; -const defaultInputStyle = css` - & > .nb-form-item { - flex: 1; - } -`; +export const findColumnFieldSchema = (fieldSchema, getCollectionJoinField) => { + const childsSchema = new Set(); + const getAssociationAppends = (schema) => { + schema.reduceProperties((_, s) => { + const collectionfield = s['x-collection-field'] && getCollectionJoinField(s['x-collection-field']); + const isAssociationField = collectionfield && ['belongsTo'].includes(collectionfield.type); + if (collectionfield && isAssociationField && s.default?.includes?.('$context')) { + childsSchema.add(JSON.stringify({ name: s.name, default: s.default })); + } else { + getAssociationAppends(s); + } + }, []); + }; + + getAssociationAppends(fieldSchema); + return [...childsSchema]; +}; export const FormItem: any = observer( (props: any) => { useEnsureOperatorsValid(); - const field = useField(); const ctx = useBlockRequestContext(); const schema = useFieldSchema(); const variablesCtx = useVariablesCtx(); - + const { getCollectionJoinField } = useCollectionManager(); + const collectionField = getCollectionJoinField(schema['x-collection-field']); useEffect(() => { if (ctx?.block === 'form') { ctx.field.data = ctx.field.data || {}; ctx.field.data.activeFields = ctx.field.data.activeFields || new Set(); ctx.field.data.activeFields.add(schema.name); // 如果默认值是一个变量,则需要解析之后再显示出来 - if (isVariable(schema?.default)) { + if (isVariable(schema?.default) && !schema?.default.includes('$context')) { field.setInitialValue?.(parseVariables(schema.default, variablesCtx)); + } else if ( + isVariable(schema?.default) && + schema?.default?.includes('$context') && + collectionField?.interface === 'm2m' + ) { + // 直接对多 + const contextData = parseVariables('{{$context}}', variablesCtx); + let iniValues = []; + contextData?.map((v) => { + const data = parseVariables(schema.default, { $context: v }); + iniValues = iniValues.concat(data); + }); + field.setInitialValue?.(_.uniqBy(iniValues, 'id')); + } else if ( + collectionField?.interface === 'o2m' && + ['SubTable', 'Nester'].includes(schema?.['x-component-props']?.['mode']) // 间接对多 + ) { + const childrenFieldWithDefault = findColumnFieldSchema(schema, getCollectionJoinField); + // 子表格/子表单中找出所有belongsTo字段的上下文默认值 + if (childrenFieldWithDefault.length > 0) { + const contextData = parseVariables('{{$context}}', variablesCtx); + const initValues = contextData?.map((v) => { + const obj = {}; + childrenFieldWithDefault.forEach((s: any) => { + const child = JSON.parse(s); + obj[child.name] = parseVariables(child.default, { $context: v }); + }); + return obj; + }); + field.setInitialValue?.(initValues); + } } } }, []); @@ -109,7 +150,6 @@ FormItem.Designer = function Designer() { const { t } = useTranslation(); const { dn, refresh, insertAdjacent } = useDesignable(); const compile = useCompile(); - const variablesCtx = useVariablesCtx(); const IsShowMultipleSwitch = useIsShowMultipleSwitch(); const collectionField = getField(fieldSchema['name']) || getCollectionJoinField(fieldSchema['x-collection-field']); if (collectionField?.target) { @@ -168,13 +208,12 @@ FormItem.Designer = function Designer() { direction: 'asc', }; }); - - const fieldSchemaWithoutRequired = _.omit(fieldSchema, 'required'); - const isSubFormMode = fieldSchema['x-component-props']?.mode === 'Nester'; const isPickerMode = fieldSchema['x-component-props']?.mode === 'Picker'; const showFieldMode = isAssociationField && fieldModeOptions && !isTableField; const showModeSelect = showFieldMode && isPickerMode; + const isDateField = ['datetime', 'createdAt', 'updatedAt'].includes(collectionField?.interface); + return ( @@ -343,76 +382,7 @@ FormItem.Designer = function Designer() { {form && !form?.readPretty && isShowDefaultValue(collectionField, getInterface) && - !isPatternDisabled(fieldSchema) && ( - - ); - }, - }, - name: 'default', - title: t('Default value'), - default: getFieldDefaultValue(fieldSchema, collectionField), - }, - }, - } as ISchema - } - onSubmit={(v) => { - const schema: ISchema = { - ['x-uid']: fieldSchema['x-uid'], - }; - if (field.value !== v.default) { - field.value = parseVariables(v.default, variablesCtx); - } - fieldSchema.default = v.default; - schema.default = v.default; - dn.emit('patch', { - schema, - }); - refresh(); - }} - /> - )} + !isPatternDisabled(fieldSchema) && } {isSelectFieldMode && !field.readPretty && ( )} + {isDateField && } {collectionField && } { key: 'none', title: t('None'), }, - ].concat(items.map((item, i) => ({ key: i, ...item }))); - + ].concat( + items.map((t, i) => ({ + key: i, + ...t, + isLeaf: t.dataId !== null && t.dataId !== undefined, + titleCollectionField: t?.titleField && getCollectionJoinField(`${t.collection}.${t.titleField}`), + })), + ); const defaultTemplate = items.find((item) => item.default); return { templates, display, defaultTemplate, - enabled: items.length > 0 && items.every((item) => item.dataId !== undefined), + enabled: items.length > 0 && items.every((item) => item.dataId || item.dataScope), }; }; -function filterReferences(obj) { - const filteredObj = {}; - for (const key in obj) { - if (typeof obj[key] !== 'object') { - filteredObj[key] = obj[key]; - } - } - return filteredObj; -} export const Templates = ({ style = {}, form }) => { const { token } = useToken(); const { templates, display, enabled, defaultTemplate } = useDataTemplates(); - const [value, setValue] = React.useState(defaultTemplate?.key || 'none'); + const { getCollectionJoinField } = useCollectionManager(); + const templateOptions = compatibleDataId(templates); + const [targetTemplate, setTargetTemplate] = useState(defaultTemplate?.key || 'none'); + const [targetTemplateData, setTemplateData] = useState(null); const api = useAPIClient(); const { t } = useTranslation(); useEffect(() => { if (enabled && defaultTemplate) { form.__template = true; - fetchTemplateData(api, defaultTemplate, t) - .then((data) => { - if (form && data) { - forEach(data, (value, key) => { - if (value) { - form.values[key] = value; - } - }); - } - return data; - }) - .catch((err) => { - console.error(err); - }); + if (defaultTemplate.key === 'duplicate') { + handleTemplateDataChange(defaultTemplate.dataId, defaultTemplate); + } } }, []); @@ -122,46 +115,69 @@ export const Templates = ({ style = {}, form }) => { return { fontSize: token.fontSize, fontWeight: 'bold', whiteSpace: 'nowrap', marginRight: token.marginXS }; }, [token.fontSize, token.marginXS]); - const handleChange = useCallback(async (value, option) => { - setValue(value); - if (option.key !== 'none') { - fetchTemplateData(api, option, t) - .then((data) => { - if (form && data) { - // 切换之前先把之前的数据清空 - form.reset(); - form.__template = true; + const handleTemplateChange = useCallback(async (value, option) => { + setTargetTemplate(value); + setTemplateData(null); + form?.reset(); + }, []); - forEach(data, (value, key) => { - if (value) { - form.values[key] = value; - } - }); - } - return data; - }) - .catch((err) => { - console.error(err); - }); - } else { - form?.reset(); - } + const handleTemplateDataChange: any = useCallback(async (value, option) => { + const template = { ...option, dataId: value }; + setTemplateData(option); + fetchTemplateData(api, template, t) + .then((data) => { + if (form && data) { + // 切换之前先把之前的数据清空 + form.reset(); + form.__template = true; + + forEach(data, (value, key) => { + if (value) { + form.values[key] = value; + } + }); + } + return data; + }) + .catch((err) => { + console.error(err); + }); }, []); if (!enabled || !display) { return null; } + const template = templateOptions?.find((v) => v.key === targetTemplate); return (
- - + {targetTemplate !== 'none' && ( + handleTemplateDataChange(value.id, { ...value, ...template })} + targetField={getCollectionJoinField(`${template?.collection}.${template.titleField}`)} + /> + )} +
); }; @@ -175,7 +191,7 @@ function findDataTemplates(fieldSchema): ITemplate { } export async function fetchTemplateData(api, template: { collection: string; dataId: number; fields: string[] }, t) { - if (template.fields.length === 0) { + if (template.fields.length === 0 || !template.dataId) { return; } return api diff --git a/packages/core/client/src/schema-component/antd/table-v2/Table.Column.Designer.tsx b/packages/core/client/src/schema-component/antd/table-v2/Table.Column.Designer.tsx index 6da56e6a54..afa4f51141 100644 --- a/packages/core/client/src/schema-component/antd/table-v2/Table.Column.Designer.tsx +++ b/packages/core/client/src/schema-component/antd/table-v2/Table.Column.Designer.tsx @@ -1,13 +1,13 @@ import { ISchema, useField, useFieldSchema } from '@formily/react'; -import React from 'react'; import { set } from 'lodash'; +import React from 'react'; import { useTranslation } from 'react-i18next'; -import { useCollectionManager, useCollectionFilterOptions } from '../../../collection-manager'; -import { GeneralSchemaDesigner, SchemaSettings, isPatternDisabled } from '../../../schema-settings'; +import { useCollectionFilterOptions, useCollectionManager } from '../../../collection-manager'; +import { GeneralSchemaDesigner, SchemaSettings, isPatternDisabled, isShowDefaultValue } from '../../../schema-settings'; import { useCompile, useDesignable } from '../../hooks'; import { useAssociationFieldContext } from '../association-field/hooks'; -import { FilterDynamicComponent } from './FilterDynamicComponent'; import { removeNullCondition } from '../filter'; +import { FilterDynamicComponent } from './FilterDynamicComponent'; const useLabelFields = (collectionName?: any) => { // 需要在组件顶层调用 @@ -44,6 +44,7 @@ export const TableColumnDesigner = (props) => { const { currentMode, field: tableField } = useAssociationFieldContext(); const defaultFilter = fieldSchema?.['x-component-props']?.service?.params?.filter || {}; const dataSource = useCollectionFilterOptions(collectionField?.target); + const isDateField = ['datetime', 'createdAt', 'updatedAt'].includes(collectionField?.interface); let readOnlyMode = 'editable'; if (fieldSchema['x-disabled'] === true) { readOnlyMode = 'readonly'; @@ -323,6 +324,11 @@ export const TableColumnDesigner = (props) => { }} /> )} + {isDateField && } + + {isSubTableColumn && !field?.readPretty && isShowDefaultValue(collectionField, getInterface) && ( + + )} { const { exists, render } = useSchemaInitializer(schema['x-initializer']); const columns = schema .reduceProperties((buf, s) => { - if (isColumnComponent(s) && schemaInWhitelist(Object.values(s.properties || {}).pop())) { + if (isColumnComponent(s) && schemaInWhitelist(Object.values(s.properties || {}).pop(), props?.isSubTable)) { return buf.concat([s]); } return buf; diff --git a/packages/core/client/src/schema-component/antd/table-v2/components/ColumnFieldProvider.tsx b/packages/core/client/src/schema-component/antd/table-v2/components/ColumnFieldProvider.tsx index d84d62d400..67677602a1 100644 --- a/packages/core/client/src/schema-component/antd/table-v2/components/ColumnFieldProvider.tsx +++ b/packages/core/client/src/schema-component/antd/table-v2/components/ColumnFieldProvider.tsx @@ -14,10 +14,23 @@ export const ColumnFieldProvider = observer( return buf; }, null); const collectionField = fieldSchema && getCollectionJoinField(fieldSchema['x-collection-field']); - if (fieldSchema && record?.__collection && ['select', 'multipleSelect'].includes(collectionField?.interface)) { + if ( + fieldSchema && + record?.__collection && + collectionField && + ['select', 'multipleSelect'].includes(collectionField.interface) + ) { const fieldName = `${record.__collection}.${fieldSchema.name}`; - schema.properties[fieldSchema.name]['x-collection-field'] = fieldName; - return ; + const newSchema = { + ...schema.toJSON(), + properties: { + [fieldSchema.name]: { + ...fieldSchema.toJSON(), + 'x-collection-field': fieldName, + }, + }, + }; + return ; } return props.children; }, diff --git a/packages/core/client/src/schema-component/antd/variable/Input.tsx b/packages/core/client/src/schema-component/antd/variable/Input.tsx index a175eb6308..1af2d24a84 100644 --- a/packages/core/client/src/schema-component/antd/variable/Input.tsx +++ b/packages/core/client/src/schema-component/antd/variable/Input.tsx @@ -3,6 +3,7 @@ import { css, cx } from '@emotion/css'; import { useForm } from '@formily/react'; import { dayjs, error } from '@nocobase/utils/client'; import { Input as AntInput, Cascader, DatePicker, InputNumber, Select, Space, Tag } from 'antd'; +import useAntdInputStyle from 'antd/es/input/style'; import type { DefaultOptionType } from 'antd/lib/cascader'; import classNames from 'classnames'; import { cloneDeep } from 'lodash'; @@ -155,7 +156,11 @@ export function Input(props) { changeOnSelect, fieldNames, } = props; - const { wrapSSR, hashId, componentCls } = useStyles(); + const { wrapSSR, hashId, componentCls, rootPrefixCls } = useStyles(); + + // 添加 antd input 样式,防止样式缺失 + useAntdInputStyle(`${rootPrefixCls}-input`); + const compile = useCompile(); const { t } = useTranslation(); const form = useForm(); diff --git a/packages/core/client/src/schema-component/antd/variable/style.ts b/packages/core/client/src/schema-component/antd/variable/style.ts index cc865339ce..cbd9807e53 100644 --- a/packages/core/client/src/schema-component/antd/variable/style.ts +++ b/packages/core/client/src/schema-component/antd/variable/style.ts @@ -8,9 +8,6 @@ export const useStyles = genStyleHook('nb-variable', (token) => { const tagFontSize = token.fontSizeSM; const tagLineHeight = `${token.lineHeightSM * tagFontSize}px`; const defaultBg = colorFillQuaternary; - const lightColor = token[`blue1`]; - const lightBorderColor = token[`blue3`]; - const textColor = token[`blue7`]; return { [componentCls]: { diff --git a/packages/core/client/src/schema-component/common/dnd-context/index.tsx b/packages/core/client/src/schema-component/common/dnd-context/index.tsx index d72a488a36..be7394b258 100644 --- a/packages/core/client/src/schema-component/common/dnd-context/index.tsx +++ b/packages/core/client/src/schema-component/common/dnd-context/index.tsx @@ -20,7 +20,6 @@ const useDragEnd = (props?: any) => { const wrapSchema = over?.data?.current?.wrapSchema; const onSuccess = over?.data?.current?.onSuccess; const removeParentsIfNoChildren = over?.data?.current?.removeParentsIfNoChildren ?? true; - if (!activeSchema || !overSchema) { props?.onDragEnd?.(event); return; diff --git a/packages/core/client/src/schema-component/common/utils/uitls.tsx b/packages/core/client/src/schema-component/common/utils/uitls.tsx index 392ef7c087..fcf584efd7 100644 --- a/packages/core/client/src/schema-component/common/utils/uitls.tsx +++ b/packages/core/client/src/schema-component/common/utils/uitls.tsx @@ -2,6 +2,7 @@ import { dayjs } from '@nocobase/utils/client'; import flat from 'flat'; import _, { every, findIndex, isArray, some } from 'lodash'; import { useMemo } from 'react'; +import { useTableBlockContext } from '../../../block-provider'; import { useCurrentUserContext } from '../../../user'; import jsonLogic from '../../common/utils/logic'; @@ -14,12 +15,15 @@ type VariablesCtx = { export const useVariablesCtx = (): VariablesCtx => { const { data } = useCurrentUserContext() || {}; + const { field, service, rowKey } = useTableBlockContext(); + const contextData = service?.data?.data?.filter((v) => (field?.data?.selectedRowKeys || [])?.includes(v[rowKey])); return useMemo(() => { return { $user: data?.data || {}, $date: { now: () => dayjs().toISOString(), }, + $context: contextData, }; }, [data]); }; @@ -33,7 +37,7 @@ export const isVariable = (str: unknown) => { return matches ? true : false; }; -export const parseVariables = (str: string, ctx: VariablesCtx) => { +export const parseVariables = (str: string, ctx: VariablesCtx | any) => { const regex = /{{(.*?)}}/; const matches = str?.match?.(regex); if (matches) { diff --git a/packages/core/client/src/schema-component/core/FormProvider.tsx b/packages/core/client/src/schema-component/core/FormProvider.tsx index 1b57322ec1..75b2774bd2 100644 --- a/packages/core/client/src/schema-component/core/FormProvider.tsx +++ b/packages/core/client/src/schema-component/core/FormProvider.tsx @@ -7,13 +7,12 @@ import { import React, { useContext, useMemo } from 'react'; import { SchemaComponentOptions } from './SchemaComponentOptions'; -export const FormProvider: React.FC = (props) => { - const { children, ...others } = props; +const WithForm = (props) => { + const { children, form, ...others } = props; const options = useContext(SchemaOptionsContext); const expressionScope = useContext(SchemaExpressionScopeContext); const scope = { ...options?.scope, ...expressionScope }; const components = { ...options?.components }; - const form = useMemo(() => props.form || createForm(), []); return ( @@ -22,3 +21,23 @@ export const FormProvider: React.FC = (props) => { ); }; + +const WithoutForm = (props) => { + const { children, ...others } = props; + const options = useContext(SchemaOptionsContext); + const expressionScope = useContext(SchemaExpressionScopeContext); + const scope = { ...options?.scope, ...expressionScope }; + const components = { ...options?.components }; + const form = useMemo(() => createForm(), []); + return ( + + + {children} + + + ); +}; + +export const FormProvider: React.FC = (props) => { + return props.form ? : ; +}; diff --git a/packages/core/client/src/schema-initializer/buttons/CusomeizeCreateFormBlockInitializers.tsx b/packages/core/client/src/schema-initializer/buttons/CusomeizeCreateFormBlockInitializers.tsx new file mode 100644 index 0000000000..bd5cb4dc8a --- /dev/null +++ b/packages/core/client/src/schema-initializer/buttons/CusomeizeCreateFormBlockInitializers.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import { useTranslation } from 'react-i18next'; +import { SchemaInitializer } from '../..'; +import { gridRowColWrap } from '../utils'; + +export const CusomeizeCreateFormBlockInitializers = (props: any) => { + const { t } = useTranslation(); + const { insertPosition, component } = props; + return ( + + ); +}; diff --git a/packages/core/client/src/schema-initializer/buttons/TableActionInitializers.tsx b/packages/core/client/src/schema-initializer/buttons/TableActionInitializers.tsx index 8d7a0ff8dd..4ba1e4e858 100644 --- a/packages/core/client/src/schema-initializer/buttons/TableActionInitializers.tsx +++ b/packages/core/client/src/schema-initializer/buttons/TableActionInitializers.tsx @@ -156,6 +156,19 @@ export const TableActionInitializers = { }, }, }, + { + type: 'item', + title: '{{t("Add record")}}', + component: 'CustomizeAddRecordActionInitializer', + schema: { + 'x-align': 'right', + 'x-decorator': 'ACLActionProvider', + 'x-acl-action': 'create', + 'x-acl-action-props': { + skipScopeCheck: true, + }, + }, + }, ], visible: function useVisible() { const collection = useCollection(); diff --git a/packages/core/client/src/schema-initializer/buttons/index.ts b/packages/core/client/src/schema-initializer/buttons/index.ts index a8b747449c..a02b9ce469 100644 --- a/packages/core/client/src/schema-initializer/buttons/index.ts +++ b/packages/core/client/src/schema-initializer/buttons/index.ts @@ -4,6 +4,7 @@ export * from './CalendarActionInitializers'; export * from './CalendarFormActionInitializers'; export * from './CreateFormBlockInitializers'; export * from './CreateFormBulkEditBlockInitializers'; +export * from './CusomeizeCreateFormBlockInitializers'; export * from './CustomFormItemInitializers'; export * from './DetailsActionInitializers'; export * from './FilterFormActionInitializers'; @@ -25,4 +26,3 @@ export * from './TableColumnInitializers'; export * from './TableSelectorInitializers'; // association filter export * from '../../schema-component/antd/association-filter/AssociationFilter'; - diff --git a/packages/core/client/src/schema-initializer/items/CustomizeAddRecordActionInitializer.tsx b/packages/core/client/src/schema-initializer/items/CustomizeAddRecordActionInitializer.tsx new file mode 100644 index 0000000000..4c00836dd0 --- /dev/null +++ b/packages/core/client/src/schema-initializer/items/CustomizeAddRecordActionInitializer.tsx @@ -0,0 +1,52 @@ +import React from 'react'; +import { BlockInitializer } from './BlockInitializer'; + +export const CustomizeAddRecordActionInitializer = (props) => { + const schema = { + type: 'void', + title: '{{t("Add record")}}', + 'x-designer': 'Action.Designer', + 'x-component': 'Action', + 'x-action': 'customize:create', + 'x-component-props': { + openMode: 'drawer', + icon: 'PlusOutlined', + }, + properties: { + drawer: { + type: 'void', + title: '{{t("Add record")}}', + 'x-component': 'Action.Container', + 'x-component-props': { + className: 'nb-action-popup', + }, + properties: { + tabs: { + type: 'void', + 'x-component': 'Tabs', + 'x-component-props': {}, + 'x-initializer': 'TabPaneInitializersForCreateFormBlock', + properties: { + tab1: { + type: 'void', + title: '{{t("Add record")}}', + 'x-component': 'Tabs.TabPane', + 'x-designer': 'Tabs.Designer', + 'x-component-props': {}, + properties: { + grid: { + type: 'void', + 'x-component': 'Grid', + 'x-initializer': 'CusomeizeCreateFormBlockInitializers', + properties: {}, + }, + }, + }, + }, + }, + }, + }, + }, + }; + return ; +}; diff --git a/packages/core/client/src/schema-initializer/items/DataBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/DataBlockInitializer.tsx index 68fdad2e1a..baa2624e46 100644 --- a/packages/core/client/src/schema-initializer/items/DataBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/DataBlockInitializer.tsx @@ -6,10 +6,10 @@ import { useSchemaTemplateManager } from '../../schema-templates'; import { useCollectionDataSourceItems } from '../utils'; export const DataBlockInitializer = (props) => { - const { templateWrap, onCreateBlockSchema, componentType, createBlockSchema, insert, ...others } = props; + const { templateWrap, onCreateBlockSchema, componentType, createBlockSchema, insert, isCusomeizeCreate, ...others } = + props; const { getTemplateSchemaByMode } = useSchemaTemplateManager(); const { setVisible } = useContext(SchemaInitializerButtonContext); - return ( } @@ -22,7 +22,7 @@ export const DataBlockInitializer = (props) => { if (onCreateBlockSchema) { onCreateBlockSchema({ item }); } else if (createBlockSchema) { - insert(createBlockSchema({ collection: item.name })); + insert(createBlockSchema({ collection: item.name, isCusomeizeCreate })); } } setVisible(false); diff --git a/packages/core/client/src/schema-initializer/items/FormBlockInitializer.tsx b/packages/core/client/src/schema-initializer/items/FormBlockInitializer.tsx index 05b33d2f23..36a30849b8 100644 --- a/packages/core/client/src/schema-initializer/items/FormBlockInitializer.tsx +++ b/packages/core/client/src/schema-initializer/items/FormBlockInitializer.tsx @@ -1,9 +1,10 @@ -import React from 'react'; import { FormOutlined } from '@ant-design/icons'; +import React from 'react'; import { createFormBlockSchema } from '../utils'; import { DataBlockInitializer } from './DataBlockInitializer'; export const FormBlockInitializer = (props) => { + const { isCusomeizeCreate } = props; return ( { componentType={'FormItem'} templateWrap={(templateSchema, { item }) => { const s = createFormBlockSchema({ + isCusomeizeCreate, template: templateSchema, collection: item.name, }); diff --git a/packages/core/client/src/schema-initializer/items/index.tsx b/packages/core/client/src/schema-initializer/items/index.tsx index 1f9a95bb0c..fe0b4f5585 100644 --- a/packages/core/client/src/schema-initializer/items/index.tsx +++ b/packages/core/client/src/schema-initializer/items/index.tsx @@ -17,6 +17,7 @@ export * from './CreateFormBulkEditBlockInitializer'; export * from './CreateResetActionInitializer'; export * from './CreateSubmitActionInitializer'; export * from './CustomizeActionInitializer'; +export * from './CustomizeAddRecordActionInitializer'; export * from './CustomizeBulkEditActionInitializer'; export * from './DataBlockInitializer'; export * from './DeleteEventActionInitializer'; @@ -53,4 +54,3 @@ export * from './TableSelectorInitializer'; export * from './UpdateActionInitializer'; export * from './UpdateSubmitActionInitializer'; export * from './ViewActionInitializer'; - diff --git a/packages/core/client/src/schema-settings/DataTemplates/FormDataTemplates.tsx b/packages/core/client/src/schema-settings/DataTemplates/FormDataTemplates.tsx index 335b92706c..4337b88c88 100644 --- a/packages/core/client/src/schema-settings/DataTemplates/FormDataTemplates.tsx +++ b/packages/core/client/src/schema-settings/DataTemplates/FormDataTemplates.tsx @@ -7,16 +7,11 @@ import React, { useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { mergeFilter } from '../../block-provider'; import { useCollectionManager } from '../../collection-manager'; -import { - AssociationSelect, - SchemaComponent, - SchemaComponentContext, - removeNullCondition, -} from '../../schema-component'; +import { SchemaComponent, SchemaComponentContext, removeNullCondition } from '../../schema-component'; import { ITemplate } from '../../schema-component/antd/form-v2/Templates'; import { AsDefaultTemplate } from './components/AsDefaultTemplate'; import { ArrayCollapse } from './components/DataTemplateTitle'; -import { Designer, getSelectedIdFilter } from './components/Designer'; +import { getSelectedIdFilter } from './components/Designer'; import { useCollectionState } from './hooks/useCollectionState'; const Tree = connect( @@ -27,11 +22,30 @@ const Tree = connect( }), ); +export const compatibleDataId = (data, config?) => { + return data?.map((v) => { + const { dataId, ...others } = v; + const obj = { ...others }; + if (dataId) { + obj.dataScope = { $and: [{ id: { $eq: dataId } }] }; + obj.titleField = obj?.titleField || config?.[v.collection]?.['titleField'] || 'id'; + } + return obj; + }); +}; + export const FormDataTemplates = observer( (props: any) => { const { useProps, formSchema, designerCtx } = props; const { defaultValues, collectionName } = useProps(); - const { collectionList, getEnableFieldTree, getOnLoadData, getOnCheck } = useCollectionState(collectionName); + const { + collectionList, + getEnableFieldTree, + getOnLoadData, + getOnCheck, + getScopeDataSource, + useTitleFieldDataSource, + } = useCollectionState(collectionName); const { getCollection, getCollectionField } = useCollectionManager(); const { t } = useTranslation(); @@ -39,11 +53,15 @@ export const FormDataTemplates = observer( const activeData = useMemo( () => observable( - defaultValues || { items: [], display: true, config: { [collectionName]: { titleField: '', filter: {} } } }, + { ...defaultValues, items: compatibleDataId(defaultValues?.items || [], defaultValues?.config) } || { + items: [], + display: true, + config: { [collectionName]: { titleField: '', filter: {} } }, + }, ), [], ); - + console.log(activeData); const getTargetField = (collectionName: string) => { const collection = getCollection(collectionName); return getCollectionField( @@ -63,8 +81,8 @@ export const FormDataTemplates = observer( const filter = activeData.config?.[collectionName]?.filter; return _.isEmpty(filter) ? {} : removeNullCondition(mergeFilter([filter, getSelectedIdFilter(value)], '$or')); }; - const components = useMemo(() => ({ ArrayCollapse }), []); + const scope = useMemo( () => ({ getEnableFieldTree, @@ -75,6 +93,8 @@ export const FormDataTemplates = observer( getOnLoadData, getOnCheck, collectionName, + getScopeDataSource, + useTitleFieldDataSource, }), [], ); @@ -117,49 +137,39 @@ export const FormDataTemplates = observer( options: collectionList, }, }, - dataId: { - type: 'number', - title: '{{ t("Template Data") }}', - required: true, - description: t('Select an existing piece of data as the initialization data for the form'), - 'x-designer': Designer, - 'x-designer-props': { - formSchema, - data: activeData, - }, + dataScope: { + type: 'object', + title: '{{ t("Assign data scope for the template") }}', 'x-decorator': 'FormItem', - 'x-component': AssociationSelect, - 'x-component-props': { - service: { - resource: '{{ $record.collection || collectionName }}', - params: { - filter: '{{ getFilter($self.componentProps.service.resource, $self.value) }}', - }, + 'x-component': 'Filter', + 'x-decorator-props': { + style: { + marginBottom: '0px', }, - action: 'list', - multiple: false, - objectValue: false, - manual: false, - targetField: '{{ getTargetField($self.componentProps.service.resource) }}', - mapOptions: getMapOptions(), - fieldNames: '{{ getFieldNames($self.componentProps.service.resource) }}', }, + required: true, 'x-reactions': [ { dependencies: ['.collection'], fulfill: { state: { disabled: '{{ !$deps[0] }}', - componentProps: { - service: { - resource: '{{ getResource($deps[0], $self) }}', - }, - }, + }, + schema: { + enum: '{{ getScopeDataSource($deps[0]) }}', }, }, }, ], }, + titleField: { + type: 'string', + 'x-decorator': 'FormItem', + title: '{{ t("Title field") }}', + 'x-component': 'Select', + required: true, + 'x-reactions': '{{useTitleFieldDataSource}}', + }, fields: { type: 'array', title: '{{ t("Data fields") }}', @@ -246,15 +256,6 @@ export function getLabel(titleField) { return titleField || 'label'; } -function getMapOptions() { - return (option) => { - if (option?.id === undefined) { - return null; - } - return option; - }; -} - function getResource(resource: string, field: Field) { if (resource !== field.componentProps.service.resource) { // 切换 collection 后,之前选中的其它 collection 的数据就没有意义了,需要清空 diff --git a/packages/core/client/src/schema-settings/DataTemplates/hooks/useCollectionState.ts b/packages/core/client/src/schema-settings/DataTemplates/hooks/useCollectionState.ts index f9e1ec95fd..abd65c4c49 100644 --- a/packages/core/client/src/schema-settings/DataTemplates/hooks/useCollectionState.ts +++ b/packages/core/client/src/schema-settings/DataTemplates/hooks/useCollectionState.ts @@ -1,11 +1,12 @@ import { ArrayField } from '@formily/core'; import React, { useCallback, useState } from 'react'; import { useCollectionManager } from '../../../collection-manager'; +import { isTitleField } from '../../../collection-manager/Configuration/CollectionFields'; import { useCompile } from '../../../schema-component'; import { TreeNode } from '../TreeLabel'; export const useCollectionState = (currentCollectionName: string) => { - const { getCollectionFields, getAllCollectionsInheritChain, getCollection } = useCollectionManager(); + const { getCollectionFields, getAllCollectionsInheritChain, getCollection, getInterface } = useCollectionManager(); const [collectionList] = useState(getCollectionList); const compile = useCompile(); @@ -150,11 +151,78 @@ export const useCollectionState = (currentCollectionName: string) => { }; }, []); + const getScopeDataSource = (resource: string) => { + const fields = getCollectionFields(resource); + const field2option = (field, depth) => { + if (!field.interface) { + return; + } + const fieldInterface = getInterface(field.interface); + if (!fieldInterface?.filterable) { + return; + } + const { nested, children, operators } = fieldInterface.filterable; + const option = { + name: field.name, + title: field?.uiSchema?.title || field.name, + schema: field?.uiSchema, + operators: + operators?.filter?.((operator) => { + return !operator?.visible || operator.visible(field); + }) || [], + interface: field.interface, + }; + if (field.target && depth > 2) { + return; + } + if (depth > 2) { + return option; + } + if (children?.length) { + option['children'] = children; + } + if (nested) { + const targetFields = getCollectionFields(field.target); + const options = getOptions(targetFields, depth + 1).filter(Boolean); + option['children'] = option['children'] || []; + option['children'].push(...options); + } + return option; + }; + const getOptions = (fields, depth) => { + const options = []; + fields.forEach((field) => { + const option = field2option(field, depth); + if (option) { + options.push(option); + } + }); + return options; + }; + const options = getOptions(fields, 1); + return options; + }; + const useTitleFieldDataSource = (field) => { + const fieldPath = field.path.entire.replace('titleField', 'collection'); + const collectionName = field.query(fieldPath).get('value'); + const targetFields = getCollectionFields(collectionName); + const options = targetFields + .filter((field) => { + return !field.isForeignKey && getInterface(field.interface)?.titleUsable; + }) + .map((field) => ({ + value: field?.name, + label: compile(field?.uiSchema?.title) || field?.name, + })); + field.dataSource = options; + }; return { collectionList, getEnableFieldTree, getOnLoadData, getOnCheck, + getScopeDataSource, + useTitleFieldDataSource, }; }; diff --git a/packages/core/client/src/schema-settings/DateFormat/ExpiresRadio.tsx b/packages/core/client/src/schema-settings/DateFormat/ExpiresRadio.tsx new file mode 100644 index 0000000000..14a13169ae --- /dev/null +++ b/packages/core/client/src/schema-settings/DateFormat/ExpiresRadio.tsx @@ -0,0 +1,105 @@ +import { css } from '@emotion/css'; +import moment from 'moment'; + +import { connect, mapProps } from '@formily/react'; +import { useBoolean } from 'ahooks'; +import { Input, Radio, Space } from 'antd'; +import React, { useState } from 'react'; +import { useToken } from '../../'; + +const date = moment(); + +const spaceCSS = css` + width: 100%; + & > .ant-space-item { + flex: 1; + } +`; +export const DateFormatCom = (props?) => { + const date = moment(); + return ( +
+ {props.format} + +
+ ); +}; + +const DateTimeFormatPreview = ({ content }) => { + const { token } = useToken(); + return ( + + {content} + + ); +}; + +const InternalExpiresRadio = (props) => { + const { onChange, defaultValue, formats, timeFormat } = props; + const [isCustom, { setFalse, setTrue }] = useBoolean(props.value && !formats.includes(props.value)); + const targetValue = props.value && !formats.includes(props.value) ? props.value : defaultValue; + const [customFormatPreview, setCustomFormatPreview] = useState(targetValue ? date.format(targetValue) : null); + const onSelectChange = (v) => { + if (v.target.value === 'custom') { + setTrue(); + onChange(targetValue); + } else { + setFalse(); + onChange(v.target.value); + } + }; + + return ( + + + + {props.options.map((v) => { + if (v.value === 'custom') { + return ( + + { + if ( + e.target.value && + moment(timeFormat ? date.format() : date.toLocaleString(), e.target.value).isValid() + ) { + setCustomFormatPreview(date.format(e.target.value)); + } else { + setCustomFormatPreview(null); + } + if (isCustom) { + onChange(e.target.value); + } + }} + /> + + + ); + } + return {v.label}; + })} + + + + ); +}; + +const ExpiresRadio = connect( + InternalExpiresRadio, + mapProps({ + dataSource: 'options', + }), +); + +export { ExpiresRadio }; diff --git a/packages/core/client/src/schema-settings/SchemaSettings.tsx b/packages/core/client/src/schema-settings/SchemaSettings.tsx index dc9f664107..ab98a5bc13 100644 --- a/packages/core/client/src/schema-settings/SchemaSettings.tsx +++ b/packages/core/client/src/schema-settings/SchemaSettings.tsx @@ -1,3 +1,4 @@ +import { css } from '@emotion/css'; import { ArrayCollapse, ArrayItems, FormItem, FormLayout, Input } from '@formily/antd-v5'; import { Field, GeneralField, createForm } from '@formily/core'; import { ISchema, Schema, SchemaOptionsContext, useField, useFieldSchema, useForm } from '@formily/react'; @@ -56,17 +57,28 @@ import { useGlobalTheme, useLinkageCollectionFilterOptions, } from '..'; +import { useTableBlockContext } from '../block-provider'; import { findFilterTargets, updateFilterTargets } from '../block-provider/hooks'; -import { FilterBlockType, isSameCollection, useSupportedBlocks } from '../filter-provider/utils'; +import { + FilterBlockType, + getSupportFieldsByAssociation, + getSupportFieldsByForeignKey, + isSameCollection, + useSupportedBlocks, +} from '../filter-provider/utils'; import { useCollectMenuItem, useCollectMenuItems, useMenuItem } from '../hooks/useMenuItem'; import { getTargetKey } from '../schema-component/antd/association-filter/utilts'; +import { getFieldDefaultValue } from '../schema-component/antd/form-item'; +import { parseVariables, useVariablesCtx } from '../schema-component/common/utils/uitls'; import { useSchemaTemplateManager } from '../schema-templates'; import { useBlockTemplateContext } from '../schema-templates/BlockTemplate'; import { FormDataTemplates } from './DataTemplates'; +import { DateFormatCom, ExpiresRadio } from './DateFormat/ExpiresRadio'; import { EnableChildCollections } from './EnableChildCollections'; import { ChildDynamicComponent } from './EnableChildCollections/DynamicComponent'; import { FormLinkageRules } from './LinkageRules'; import { useLinkageCollectionFieldOptions } from './LinkageRules/action-hooks'; +import { VariableInput } from './VariableInput/VariableInput'; interface SchemaSettingsProps { title?: any; @@ -544,6 +556,7 @@ SchemaSettings.ConnectDataBlocks = function ConnectDataBlocks(props: { // eslint-disable-next-line prefer-const let { targets = [], uid } = findFilterTargets(fieldSchema); const compile = useCompile(); + const { getAllCollectionsInheritChain } = useCollectionManager(); if (!inProvider) { return null; @@ -608,14 +621,18 @@ SchemaSettings.ConnectDataBlocks = function ConnectDataBlocks(props: { title={title} value={target?.field || ''} options={[ - ...block.associatedFields - .filter((field) => field.target === collection.name) - .map((field) => { - return { - label: compile(field.uiSchema.title) || field.name, - value: `${field.name}.${getTargetKey(field)}`, - }; - }), + ...getSupportFieldsByAssociation(getAllCollectionsInheritChain(collection.name), block).map((field) => { + return { + label: compile(field.uiSchema.title) || field.name, + value: `${field.name}.${getTargetKey(field)}`, + }; + }), + ...getSupportFieldsByForeignKey(collection, block).map((field) => { + return { + label: `${compile(field.uiSchema.title) || field.name} [${t('Foreign key')}]`, + value: field.name, + }; + }), { label: t('Unconnected'), value: '', @@ -1267,6 +1284,263 @@ SchemaSettings.EnableChildCollections = function EnableChildCollectionsItem(prop ); }; +SchemaSettings.DataFormat = function DateFormatConfig(props: { fieldSchema: Schema }) { + const { fieldSchema } = props; + const field = useField(); + const form = useForm(); + const { dn } = useDesignable(); + const { t } = useTranslation(); + const { getCollectionJoinField } = useCollectionManager(); + const collectionField = getCollectionJoinField(fieldSchema?.['x-collection-field']) || {}; + const isShowTime = fieldSchema?.['x-component-props']?.showTime; + const dateFormatDefaultValue = + fieldSchema?.['x-component-props']?.dateFormat || + collectionField?.uiSchema?.['x-component-props']?.dateFormat || + 'YYYY-MM-DD'; + const timeFormatDefaultValue = + fieldSchema?.['x-component-props']?.timeFormat || collectionField?.uiSchema?.['x-component-props']?.timeFormat; + return ( + { + field.query('.timeFormat').take(f => { + f.display = field.value ? 'visible' : 'none'; + }); + }}}`, + ], + }, + timeFormat: { + type: 'string', + title: '{{t("Time format")}}', + 'x-component': ExpiresRadio, + 'x-decorator': 'FormItem', + 'x-decorator-props': { + className: css` + margin-bottom: 0px; + `, + }, + 'x-component-props': { + className: css` + color: red; + .ant-radio-wrapper { + display: flex; + margin: 5px 0px; + } + `, + defaultValue: 'h:mm a', + formats: ['hh:mm:ss a', 'HH:mm:ss'], + timeFormat: true, + }, + default: timeFormatDefaultValue, + enum: [ + { + label: DateFormatCom({ format: 'hh:mm:ss a' }), + value: 'hh:mm:ss a', + }, + { + label: DateFormatCom({ format: 'HH:mm:ss' }), + value: 'HH:mm:ss', + }, + { + label: 'custom', + value: 'custom', + }, + ], + }, + }, + } as ISchema + } + onSubmit={(data) => { + const schema = { + ['x-uid']: fieldSchema['x-uid'], + }; + schema['x-component-props'] = fieldSchema['x-component-props'] || {}; + fieldSchema['x-component-props'] = { + ...(fieldSchema['x-component-props'] || {}), + ...data, + }; + schema['x-component-props'] = fieldSchema['x-component-props']; + field.componentProps = fieldSchema['x-component-props']; + field.query(`.*.${fieldSchema.name}`).forEach((f) => { + f.componentProps = fieldSchema['x-component-props']; + }); + dn.emit('patch', { + schema, + }); + dn.refresh(); + }} + /> + ); +}; + +const defaultInputStyle = css` + & > .nb-form-item { + flex: 1; + } +`; + +export const findParentFieldSchema = (fieldSchema: Schema) => { + let parent = fieldSchema.parent; + while (parent) { + if (parent['x-component'] === 'CollectionField') { + return parent; + } + parent = parent.parent; + } +}; + +SchemaSettings.DefaultValue = function DefaultvalueConfigure(props) { + const variablesCtx = useVariablesCtx(); + const currentSchema = useFieldSchema(); + const fieldSchema = props?.fieldSchema ?? currentSchema; + const field = useField(); + const { dn } = useDesignable(); + const { t } = useTranslation(); + let targetField; + const { getField } = useCollection(); + const { getCollectionJoinField } = useCollectionManager(); + const collectionField = getField(fieldSchema['name']) || getCollectionJoinField(fieldSchema['x-collection-field']); + const fieldSchemaWithoutRequired = _.omit(fieldSchema, 'required'); + if (collectionField?.target) { + targetField = getCollectionJoinField( + `${collectionField.target}.${fieldSchema['x-component-props']?.fieldNames?.label || 'id'}`, + ); + } + const parentFieldSchema = collectionField?.interface === 'm2o' && findParentFieldSchema(fieldSchema); + const parentCollectionField = parentFieldSchema && getCollectionJoinField(parentFieldSchema?.['x-collection-field']); + const tableCtx = useTableBlockContext(); + const isAllowContexVariable = + collectionField?.interface === 'm2m' || + (parentCollectionField?.type === 'hasMany' && collectionField?.interface === 'm2o'); + return ( + + ); + }, + }, + name: 'default', + title: t('Default value'), + default: getFieldDefaultValue(fieldSchema, collectionField), + }, + }, + } as ISchema + } + onSubmit={(v) => { + const schema: ISchema = { + ['x-uid']: fieldSchema['x-uid'], + }; + if (field.value !== v.default) { + field.value = parseVariables(v.default, variablesCtx); + } + fieldSchema.default = v.default; + schema.default = v.default; + dn.emit('patch', { + schema, + currentSchema, + }); + dn.refresh(); + }} + /> + ); +}; // 是否显示默认值配置项 export const isShowDefaultValue = (collectionField: CollectionFieldOptions, getInterface) => { return ( diff --git a/packages/core/client/src/schema-settings/VariableInput/VariableInput.tsx b/packages/core/client/src/schema-settings/VariableInput/VariableInput.tsx index 8960becd20..457cbee1ab 100644 --- a/packages/core/client/src/schema-settings/VariableInput/VariableInput.tsx +++ b/packages/core/client/src/schema-settings/VariableInput/VariableInput.tsx @@ -1,6 +1,7 @@ import React, { useMemo } from 'react'; import { CollectionFieldOptions } from '../../collection-manager'; import { useCompile, Variable } from '../../schema-component'; +import { useContextAssociationFields } from './hooks/useContextAssociationFields'; import { useUserVariable } from './hooks/useUserVariable'; type Props = { @@ -14,6 +15,7 @@ type Props = { className?: string; style?: React.CSSProperties; collectionField?: CollectionFieldOptions; + contextCollectionName?: string; }; export const VariableInput = (props: Props) => { @@ -25,9 +27,11 @@ export const VariableInput = (props: Props) => { schema, className, collectionField, + contextCollectionName, } = props; const compile = useCompile(); const userVariable = useUserVariable({ schema, maxDepth: 1 }); + const contextVariable = useContextAssociationFields({ schema, maxDepth: 2, contextCollectionName }); const scope = useMemo(() => { const data = [ compile({ @@ -47,11 +51,21 @@ export const VariableInput = (props: Props) => { if (collectionField?.target === 'users') { data.unshift(userVariable); } + if (contextCollectionName) { + data.unshift(contextVariable); + } return data; }, []); return ( - + ); diff --git a/packages/core/client/src/schema-settings/VariableInput/hooks/useContextAssociationFields.tsx b/packages/core/client/src/schema-settings/VariableInput/hooks/useContextAssociationFields.tsx new file mode 100644 index 0000000000..ce1087529d --- /dev/null +++ b/packages/core/client/src/schema-settings/VariableInput/hooks/useContextAssociationFields.tsx @@ -0,0 +1,121 @@ +import { error } from '@nocobase/utils/client'; +import { useMemo } from 'react'; +import { useTranslation } from 'react-i18next'; +import { useCompile, useGetFilterOptions } from '../../../schema-component'; +import { FieldOption, Option } from '../type'; + +interface GetOptionsParams { + schema: any; + depth: number; + maxDepth?: number; + loadChildren?: (option: Option) => Promise; + compile: (value: string) => any; +} + +const getChildren = ( + options: FieldOption[], + { schema, depth, maxDepth, loadChildren, compile }: GetOptionsParams, +): Option[] => { + const result = options + .map((option): Option => { + if (!option.target) { + return { + key: option.name, + value: option.name, + label: compile(option.title), + // TODO: 现在是通过组件的名称来过滤能够被选择的选项,这样的坏处是不够精确,后续可以优化 + // disabled: schema?.['x-component'] !== option.schema?.['x-component'], + isLeaf: true, + depth, + }; + } + + if (depth >= maxDepth) { + return null; + } + + return { + key: option.name, + value: option.name, + label: compile(option.title), + isLeaf: true, + field: option, + depth, + loadChildren, + }; + }) + .filter(Boolean); + + return result; +}; + +export const useContextAssociationFields = ({ + schema, + maxDepth = 3, + contextCollectionName, +}: { + schema: any; + maxDepth?: number; + contextCollectionName: string; +}) => { + const { t } = useTranslation(); + const compile = useCompile(); + const getFilterOptions = useGetFilterOptions(); + + const loadChildren = (option: Option): Promise => { + if (!option.field?.target) { + return new Promise((resolve) => { + error('Must be set field target'); + option.children = []; + resolve(void 0); + }); + } + + const collectionName = option.field.target; + return new Promise((resolve) => { + setTimeout(() => { + const children = + getChildren( + getFilterOptions(collectionName).filter((v) => { + const isAssociationField = ['hasOne', 'hasMany', 'belongsTo', 'belongsToMany'].includes(v.type); + return isAssociationField; + }), + { + schema, + depth: option.depth + 1, + maxDepth, + loadChildren, + compile, + }, + ) || []; + + if (children.length === 0) { + option.disabled = true; + option.children = []; + resolve(); + return; + } + option.children = children; + resolve(); + + // 延迟 5 毫秒,防止阻塞主线程,导致 UI 卡顿 + }, 5); + }); + }; + + const result = useMemo(() => { + return { + label: t('Table selected records'), + value: '$context', + key: '$context', + isLeaf: false, + field: { + target: contextCollectionName, + }, + depth: 0, + loadChildren, + } as Option; + }, [schema?.['x-component']]); + + return result; +}; diff --git a/packages/core/create-nocobase-app/package.json b/packages/core/create-nocobase-app/package.json index 88caea6c92..cfb9fd160e 100755 --- a/packages/core/create-nocobase-app/package.json +++ b/packages/core/create-nocobase-app/package.json @@ -1,6 +1,6 @@ { "name": "create-nocobase-app", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "src/index.js", "license": "Apache-2.0", "dependencies": { diff --git a/packages/core/database/package.json b/packages/core/database/package.json index 7a2e78569d..5aadf2f5cb 100644 --- a/packages/core/database/package.json +++ b/packages/core/database/package.json @@ -1,13 +1,13 @@ { "name": "@nocobase/database", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "description": "", "main": "./lib/index.js", "types": "./lib/index.d.ts", "license": "Apache-2.0", "dependencies": { - "@nocobase/logger": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/logger": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "async-mutex": "^0.3.2", "cron-parser": "4.4.0", "dayjs": "^1.11.8", diff --git a/packages/core/database/src/sync-runner.ts b/packages/core/database/src/sync-runner.ts index 8a385c80c4..f5d352895d 100644 --- a/packages/core/database/src/sync-runner.ts +++ b/packages/core/database/src/sync-runner.ts @@ -20,7 +20,9 @@ export class SyncRunner { if (!parents) { throw new Error( - `Inherit model ${inheritedCollection.name} can't be created without parents, parents option is ${lodash + `Inherit model ${ + inheritedCollection.name + } can't be created without parents, parents option is ${lodash .castArray(inheritedCollection.options.inherits) .join(', ')}`, ); @@ -58,7 +60,7 @@ export class SyncRunner { const columnDefault = sequenceNameResult[0][0]['column_default']; if (!columnDefault) { - throw new Error(`Can't find sequence name of ${parent}`); + throw new Error(`Can't find sequence name of parent collection ${parent.options.name}`); } const regex = new RegExp(/nextval\('(.*)'::regclass\)/); diff --git a/packages/core/devtools/package.json b/packages/core/devtools/package.json index d37cb92201..03e7b438f7 100644 --- a/packages/core/devtools/package.json +++ b/packages/core/devtools/package.json @@ -1,48 +1,45 @@ { "name": "@nocobase/devtools", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "description": "", "license": "Apache-2.0", "main": "./src/index.js", "dependencies": { - "@nocobase/build": "0.11.1-alpha.2", + "@nocobase/build": "0.11.1-alpha.3", "@testing-library/react": "^12.1.5", - "@types/jest": "^26.0.0", + "@types/jest": "^29.0.0", "@types/koa": "^2.13.4", "@types/koa-bodyparser": "^4.3.4", "@types/lodash": "^4.14.177", "@types/node": "*", "@types/react": "^18.0.0", "@types/react-dom": "^18.0.0", - "@typescript-eslint/eslint-plugin": "^5.59.1", - "@typescript-eslint/parser": "^5.59.1", + "@typescript-eslint/eslint-plugin": "^6.2.0", + "@typescript-eslint/parser": "^6.2.0", "concurrently": "^7.0.0", "cross-env": "^7.0.3", - "eslint": "^8.39.0", + "eslint": "^8.45.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-import": "^2.27.5", "eslint-plugin-markdown": "^3.0.0", "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-prettier": "^5.0.0", "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react": "^7.33.0", "eslint-plugin-react-hooks": "^4.6.0", - "jest": "^26.0.0", - "jest-codemods": "^0.19.1", + "jest": "^29.0.0", + "jest-cli": "^29.0.0", "jest-dom": "^3.1.2", - "jest-localstorage-mock": "^2.3.0", - "jest-styled-components": "6.3.3", - "jest-watch-lerna-packages": "^1.1.0", "jsdom": "^16.0.0", "lerna": "^4.0.0", - "prettier": "^2.2.1", + "prettier": "^3.0.0", "pretty-format": "^24.0.0", "pretty-quick": "^3.1.0", "react": "^18.0.0", "react-dom": "^18.0.0", "rimraf": "^3.0.0", "serve": "^13.0.2", - "ts-jest": "^26.0.0", + "ts-jest": "^29.0.0", "ts-loader": "^7.0.4", "ts-node": "9.1.1", "ts-node-dev": "1.1.8", diff --git a/packages/core/evaluators/package.json b/packages/core/evaluators/package.json index b227d17c3e..a958d868ba 100644 --- a/packages/core/evaluators/package.json +++ b/packages/core/evaluators/package.json @@ -1,13 +1,13 @@ { "name": "@nocobase/evaluators", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "description": "", "main": "./lib/index.js", "types": "./lib/index.d.ts", "license": "Apache-2.0", "dependencies": { "@formulajs/formulajs": "4.2.0", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/utils": "0.11.1-alpha.3", "mathjs": "^10.6.0" }, "repository": { diff --git a/packages/core/logger/package.json b/packages/core/logger/package.json index 58a74478ad..244920252a 100644 --- a/packages/core/logger/package.json +++ b/packages/core/logger/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/logger", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "description": "nocobase logging library", "license": "Apache-2.0", "main": "./lib/index.js", diff --git a/packages/core/resourcer/package.json b/packages/core/resourcer/package.json index 431df030ac..b2d728625e 100644 --- a/packages/core/resourcer/package.json +++ b/packages/core/resourcer/package.json @@ -1,12 +1,12 @@ { "name": "@nocobase/resourcer", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "description": "", "main": "./lib/index.js", "types": "./lib/index.d.ts", "license": "Apache-2.0", "dependencies": { - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/utils": "0.11.1-alpha.3", "deepmerge": "^4.2.2", "koa-compose": "^4.1.0", "lodash": "^4.17.21", diff --git a/packages/core/sdk/package.json b/packages/core/sdk/package.json index fbcf273523..34f61cc6d5 100644 --- a/packages/core/sdk/package.json +++ b/packages/core/sdk/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/sdk", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "Apache-2.0", "main": "lib", "module": "es/index.js", diff --git a/packages/core/server/package.json b/packages/core/server/package.json index 19347f6f45..296a501de8 100644 --- a/packages/core/server/package.json +++ b/packages/core/server/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/server", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "lib/index.js", "types": "./lib/index.d.ts", "license": "Apache-2.0", @@ -8,13 +8,13 @@ "@hapi/topo": "^6.0.0", "@koa/cors": "^3.1.0", "@koa/router": "^9.4.0", - "@nocobase/acl": "0.11.1-alpha.2", - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/auth": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/logger": "0.11.1-alpha.2", - "@nocobase/resourcer": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/acl": "0.11.1-alpha.3", + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/auth": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/logger": "0.11.1-alpha.3", + "@nocobase/resourcer": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "chalk": "^4.1.1", "commander": "^9.2.0", "dayjs": "^1.11.8", diff --git a/packages/core/server/src/application.ts b/packages/core/server/src/application.ts index 370e4d2bca..12e198fba1 100644 --- a/packages/core/server/src/application.ts +++ b/packages/core/server/src/application.ts @@ -18,6 +18,7 @@ import { createACL } from './acl'; import { AppManager } from './app-manager'; import { registerCli } from './commands'; import { createI18n, createResourcer, registerMiddlewares } from './helper'; +import { Locale } from './locale'; import { Plugin } from './plugin'; import { InstallOptions, PluginManager } from './plugin-manager'; @@ -167,6 +168,8 @@ export class Application exten protected _authManager: AuthManager; + protected _locales: Locale; + protected _version: ApplicationVersion; protected plugins = new Map(); @@ -230,6 +233,10 @@ export class Application exten return this._logger; } + get locales() { + return this._locales; + } + get name() { return this.options.name || 'main'; } @@ -298,6 +305,8 @@ export class Application exten this._resourcer.use(this._acl.middleware(), { tag: 'acl', after: ['auth'] }); } + this._locales = new Locale(this); + registerMiddlewares(this, options); if (options.registerActions !== false) { diff --git a/packages/plugins/client/src/server/antd.ts b/packages/core/server/src/locale/antd.ts similarity index 100% rename from packages/plugins/client/src/server/antd.ts rename to packages/core/server/src/locale/antd.ts diff --git a/packages/plugins/client/src/server/cron.ts b/packages/core/server/src/locale/cron.ts similarity index 100% rename from packages/plugins/client/src/server/cron.ts rename to packages/core/server/src/locale/cron.ts diff --git a/packages/plugins/client/src/server/cronstrue.ts b/packages/core/server/src/locale/cronstrue.ts similarity index 100% rename from packages/plugins/client/src/server/cronstrue.ts rename to packages/core/server/src/locale/cronstrue.ts diff --git a/packages/core/server/src/locale/index.ts b/packages/core/server/src/locale/index.ts new file mode 100644 index 0000000000..5501675d52 --- /dev/null +++ b/packages/core/server/src/locale/index.ts @@ -0,0 +1 @@ +export * from './locale'; diff --git a/packages/core/server/src/locale/locale.ts b/packages/core/server/src/locale/locale.ts new file mode 100644 index 0000000000..83455613dd --- /dev/null +++ b/packages/core/server/src/locale/locale.ts @@ -0,0 +1,68 @@ +import { Cache, createCache } from '@nocobase/cache'; +import { lodash } from '@nocobase/utils'; +import Application from '../application'; +import { PluginManager } from '../plugin-manager'; +import { getAntdLocale } from './antd'; +import { getCronstrueLocale } from './cronstrue'; +import { getResource } from './resource'; + +export class Locale { + app: Application; + cache: Cache; + defaultLang = 'en-US'; + + constructor(app: Application) { + this.app = app; + this.cache = createCache(); + + this.app.on('afterLoad', () => this.load()); + } + + load() { + this.getCacheResources(this.defaultLang); + } + + async get(lang: string) { + return { + antd: await this.wrapCache(`locale:antd:${lang}`, () => getAntdLocale(lang)), + cronstrue: await this.wrapCache(`locale:cronstrue:${lang}`, () => getCronstrueLocale(lang)), + resources: await this.getCacheResources(lang), + }; + } + + async wrapCache(key: string, fn: () => any) { + const result = await this.cache.get(key); + if (result) { + return result; + } + const value = await fn(); + if (lodash.isEmpty(value)) { + return value; + } + await this.cache.set(key, value); + return value; + } + + async getCacheResources(lang: string) { + return await this.wrapCache(`locale:resources:${lang}`, () => this.getResources(lang)); + } + + getResources(lang: string) { + const resources = {}; + const plugins = this.app.pm.getPlugins(); + for (const name of plugins.keys()) { + try { + const packageName = PluginManager.getPackageName(name); + const res = getResource(packageName, lang); + if (res) { + resources[name] = { ...res }; + } + } catch (err) {} + } + const res = getResource('@nocobase/client', lang); + if (res) { + resources['client'] = { ...(resources['client'] || {}), ...res }; + } + return resources; + } +} diff --git a/packages/core/server/src/locale/resource.ts b/packages/core/server/src/locale/resource.ts new file mode 100644 index 0000000000..7a467c9767 --- /dev/null +++ b/packages/core/server/src/locale/resource.ts @@ -0,0 +1,27 @@ +const arr2obj = (items: any[]) => { + const obj = {}; + for (const item of items) { + Object.assign(obj, item); + } + return obj; +}; + +export const getResource = (packageName: string, lang: string) => { + const resources = []; + const prefixes = ['src', 'lib']; + for (const prefix of prefixes) { + try { + const file = `${packageName}/${prefix}/locale/${lang}`; + require.resolve(file); + const resource = require(file).default; + resources.push(resource); + } catch (error) {} + if (resources.length) { + break; + } + } + if (resources.length === 0 && lang.replace('-', '_') !== lang) { + return getResource(packageName, lang.replace('-', '_')); + } + return arr2obj(resources); +}; diff --git a/packages/core/test/package.json b/packages/core/test/package.json index ae8408e277..c15cf76524 100644 --- a/packages/core/test/package.json +++ b/packages/core/test/package.json @@ -1,11 +1,11 @@ { "name": "@nocobase/test", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "lib/index.js", "types": "./lib/index.d.ts", "license": "Apache-2.0", "dependencies": { - "@nocobase/server": "0.11.1-alpha.2", + "@nocobase/server": "0.11.1-alpha.3", "@types/supertest": "^2.0.11", "mockjs": "^1.1.0", "mysql2": "^2.3.3", diff --git a/packages/core/utils/package.json b/packages/core/utils/package.json index 0aed267bbf..f9a6afac6a 100644 --- a/packages/core/utils/package.json +++ b/packages/core/utils/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/utils", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "lib/index.js", "types": "./lib/index.d.ts", "license": "Apache-2.0", @@ -11,6 +11,7 @@ "deepmerge": "^4.2.2", "flat-to-nested": "^1.1.1", "graphlib": "^2.1.8", + "multer": "^1.4.5-lts.1", "object-path": "^0.11.8" }, "peerDependencies": { diff --git a/packages/core/utils/src/index.ts b/packages/core/utils/src/index.ts index a9d7ac4b78..bc35655d88 100644 --- a/packages/core/utils/src/index.ts +++ b/packages/core/utils/src/index.ts @@ -8,6 +8,7 @@ export * from './date'; export * from './dayjs'; export * from './forEach'; export * from './json-templates'; +export * from './koa-multer'; export * from './merge'; export * from './mixin'; export * from './mixin/AsyncEmitter'; @@ -19,4 +20,3 @@ export * from './requireModule'; export * from './toposort'; export * from './uid'; export { dayjs, lodash }; - diff --git a/packages/core/utils/src/koa-multer.ts b/packages/core/utils/src/koa-multer.ts new file mode 100644 index 0000000000..7cfa29f77c --- /dev/null +++ b/packages/core/utils/src/koa-multer.ts @@ -0,0 +1,58 @@ +import originalMulter from 'multer'; + +function multer(options?) { + const m = originalMulter(options) as any; + + makePromise(m, 'any'); + makePromise(m, 'array'); + makePromise(m, 'fields'); + makePromise(m, 'none'); + makePromise(m, 'single'); + + return m; +} + +function makePromise(multer, name) { + if (!multer[name]) return; + + const fn = multer[name]; + + multer[name] = function (...args) { + const middleware: any = Reflect.apply(fn, this, args); + + return async (ctx, next) => { + await new Promise((resolve, reject) => { + middleware(ctx.req, ctx.res, (err) => { + if (err) return reject(err); + if ('request' in ctx) { + if (ctx.req.body) { + ctx.request.body = ctx.req.body; + delete ctx.req.body; + } + + if (ctx.req.file) { + ctx.request.file = ctx.req.file; + ctx.file = ctx.req.file; + delete ctx.req.file; + } + + if (ctx.req.files) { + ctx.request.files = ctx.req.files; + ctx.files = ctx.req.files; + delete ctx.req.files; + } + } + + resolve(ctx); + }); + }); + + return next(); + }; + }; +} + +multer.diskStorage = originalMulter.diskStorage; +multer.memoryStorage = originalMulter.memoryStorage; + +export { multer as koaMulter }; diff --git a/packages/plugins/acl/package.json b/packages/plugins/acl/package.json index 72d3433e03..f9e1df6a38 100644 --- a/packages/plugins/acl/package.json +++ b/packages/plugins/acl/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "权限控制", "description": "A simple access control based on roles, resources and actions", "description.zh-CN": "基于角色、资源和操作的权限控制。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -19,13 +19,13 @@ "client.d.ts" ], "devDependencies": { - "@nocobase/acl": "0.11.1-alpha.2", - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/acl": "0.11.1-alpha.3", + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "@types/jsonwebtoken": "^8.5.8", "jsonwebtoken": "^8.5.1", "react": "^18.2.0", diff --git a/packages/plugins/api-keys/package.json b/packages/plugins/api-keys/package.json index 077ba7147c..680c1ec01b 100644 --- a/packages/plugins/api-keys/package.json +++ b/packages/plugins/api-keys/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "API keys", "description": "Allow users to use API key to access NocoBase's api", "description.zh-CN": "允许用户使用 API key 访问 NocoBase 的 api", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -21,13 +21,13 @@ "devDependencies": { "@formily/react": "2.2.26", "@formily/shared": "2.2.26", - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/resourcer": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/resourcer": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "antd": "^5.6.4", "dayjs": "^1.11.8", "i18next": "^22.4.9", diff --git a/packages/plugins/api-keys/src/client/locale/en-US.ts b/packages/plugins/api-keys/src/locale/en-US.ts similarity index 100% rename from packages/plugins/api-keys/src/client/locale/en-US.ts rename to packages/plugins/api-keys/src/locale/en-US.ts diff --git a/packages/plugins/map/src/client/locale/en-US.ts b/packages/plugins/api-keys/src/locale/fr-FR.ts similarity index 100% rename from packages/plugins/map/src/client/locale/en-US.ts rename to packages/plugins/api-keys/src/locale/fr-FR.ts diff --git a/packages/plugins/api-keys/src/client/locale/zh-CN.ts b/packages/plugins/api-keys/src/locale/zh-CN.ts similarity index 94% rename from packages/plugins/api-keys/src/client/locale/zh-CN.ts rename to packages/plugins/api-keys/src/locale/zh-CN.ts index fc6b2c7c79..bab920eb3d 100644 --- a/packages/plugins/api-keys/src/client/locale/zh-CN.ts +++ b/packages/plugins/api-keys/src/locale/zh-CN.ts @@ -16,6 +16,7 @@ const locale = { '7 Days': '7 天', '30 Days': '30 天', '90 Days': '90 天', + 'Role not found': '角色不存在', }; export default locale; diff --git a/packages/plugins/audit-logs/src/client/locale/ja-JP.ts b/packages/plugins/api-keys/src/server/locale/fr-FR.ts similarity index 100% rename from packages/plugins/audit-logs/src/client/locale/ja-JP.ts rename to packages/plugins/api-keys/src/server/locale/fr-FR.ts diff --git a/packages/plugins/audit-logs/package.json b/packages/plugins/audit-logs/package.json index 1fb8fe28fc..79320ab0f0 100644 --- a/packages/plugins/audit-logs/package.json +++ b/packages/plugins/audit-logs/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-audit-logs", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "displayName": "audit-logs", "displayName.zh-CN": "审计日志", "description": "audit logs plugin", @@ -23,10 +23,10 @@ "@formily/antd-v5": "1.1.0-beta.4", "@formily/react": "2.2.26", "@formily/shared": "2.2.26", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", "react": "^18.2.0", "react-i18next": "^11.15.1" }, diff --git a/packages/plugins/audit-logs/src/client/locale/en-US.ts b/packages/plugins/audit-logs/src/locale/en-US.ts similarity index 100% rename from packages/plugins/audit-logs/src/client/locale/en-US.ts rename to packages/plugins/audit-logs/src/locale/en-US.ts diff --git a/packages/plugins/audit-logs/src/client/locale/es-ES.ts b/packages/plugins/audit-logs/src/locale/es-ES.ts similarity index 100% rename from packages/plugins/audit-logs/src/client/locale/es-ES.ts rename to packages/plugins/audit-logs/src/locale/es-ES.ts diff --git a/packages/plugins/audit-logs/src/locale/fr-FR.ts b/packages/plugins/audit-logs/src/locale/fr-FR.ts new file mode 100644 index 0000000000..7e42ec620c --- /dev/null +++ b/packages/plugins/audit-logs/src/locale/fr-FR.ts @@ -0,0 +1,3 @@ +export default { + 'Details of changes': 'Détails des changements', +}; diff --git a/packages/plugins/charts/src/client/locale/ja-JP.ts b/packages/plugins/audit-logs/src/locale/ja-JP.ts similarity index 100% rename from packages/plugins/charts/src/client/locale/ja-JP.ts rename to packages/plugins/audit-logs/src/locale/ja-JP.ts diff --git a/packages/plugins/audit-logs/src/client/locale/pt-BR.ts b/packages/plugins/audit-logs/src/locale/pt-BR.ts similarity index 100% rename from packages/plugins/audit-logs/src/client/locale/pt-BR.ts rename to packages/plugins/audit-logs/src/locale/pt-BR.ts diff --git a/packages/plugins/audit-logs/src/client/locale/ru-RU.ts b/packages/plugins/audit-logs/src/locale/ru-RU.ts similarity index 100% rename from packages/plugins/audit-logs/src/client/locale/ru-RU.ts rename to packages/plugins/audit-logs/src/locale/ru-RU.ts diff --git a/packages/plugins/audit-logs/src/client/locale/tr-TR.ts b/packages/plugins/audit-logs/src/locale/tr-TR.ts similarity index 100% rename from packages/plugins/audit-logs/src/client/locale/tr-TR.ts rename to packages/plugins/audit-logs/src/locale/tr-TR.ts diff --git a/packages/plugins/audit-logs/src/client/locale/zh-CN.ts b/packages/plugins/audit-logs/src/locale/zh-CN.ts similarity index 100% rename from packages/plugins/audit-logs/src/client/locale/zh-CN.ts rename to packages/plugins/audit-logs/src/locale/zh-CN.ts diff --git a/packages/plugins/auth/package.json b/packages/plugins/auth/package.json index bd80ced636..fa1402ff57 100644 --- a/packages/plugins/auth/package.json +++ b/packages/plugins/auth/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-auth", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "./lib/server/index.js", "files": [ "lib", @@ -17,18 +17,18 @@ "@ant-design/icons": "^5.1.4", "@formily/react": "2.2.26", "@formily/shared": "2.2.26", - "@nocobase/auth": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", + "@nocobase/auth": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", "@types/cron": "^2.0.1", "antd": "^5.6.4", "react": "^18.2.0", "react-i18next": "^11.15.1" }, "dependencies": { - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", "cron": "^2.3.1" }, "displayName": "Authentication", diff --git a/packages/plugins/auth/src/client/locale/zh-CN.ts b/packages/plugins/auth/src/client/locale/zh-CN.ts deleted file mode 100644 index cf10b9eeaf..0000000000 --- a/packages/plugins/auth/src/client/locale/zh-CN.ts +++ /dev/null @@ -1,10 +0,0 @@ -const locale = { - 'Auth Type': '认证类型', - Authenticators: '认证器', - Authentication: '用户认证', - 'Sign in via email': '邮箱登录', - 'Not allowed to sign up': '禁止注册', - 'Allow to sign up': '允许注册', -}; - -export default locale; diff --git a/packages/plugins/auth/src/locale/zh-CN.ts b/packages/plugins/auth/src/locale/zh-CN.ts new file mode 100644 index 0000000000..aa7800971f --- /dev/null +++ b/packages/plugins/auth/src/locale/zh-CN.ts @@ -0,0 +1,17 @@ +const locale = { + 'Auth Type': '认证类型', + Authenticators: '认证器', + Authentication: '用户认证', + 'Sign in via email': '邮箱登录', + 'Not allowed to sign up': '禁止注册', + 'Allow to sign up': '允许注册', + 'The email is incorrect, please re-enter': '邮箱有误,请重新输入', + 'Please fill in your email address': '请填写邮箱', + 'The password is incorrect, please re-enter': '密码有误,请重新输入', + 'Not a valid cellphone number, please re-enter': '不是有效的手机号,请重新输入', + 'The phone number has been registered, please login directly': '手机号已注册,请直接登录', + 'The phone number is not registered, please register first': '手机号未注册,请先注册', + 'Please keep and enable at least one authenticator': '请至少保留并启用一个认证器', +}; + +export default locale; diff --git a/packages/plugins/auth/src/server/locale/fr-FR.ts b/packages/plugins/auth/src/server/locale/fr-FR.ts new file mode 100644 index 0000000000..37476d1bd6 --- /dev/null +++ b/packages/plugins/auth/src/server/locale/fr-FR.ts @@ -0,0 +1,10 @@ +export default { + 'The email is incorrect, please re-enter': 'L\'email est incorrect, veuillez le saisir à nouveau', + 'Please fill in your email address': 'Veuillez remplir votre adresse e-mail', + 'The password is incorrect, please re-enter': 'Le mot de passe est incorrect, veuillez le saisir à nouveau', + 'Not a valid cellphone number, please re-enter': 'Numéro de téléphone portable non valide, veuillez le saisir à nouveau', + 'The phone number has been registered, please login directly': + 'Le numéro de téléphone a été enregistré, veuillez vous connecter directement', + 'The phone number is not registered, please register first': + 'Le numéro de téléphone n\'est pas enregistré, veuillez vous inscrire d\'abord', +}; diff --git a/packages/plugins/auth/src/server/token-blacklist.ts b/packages/plugins/auth/src/server/token-blacklist.ts index 841b9dbf82..cb7f20bac5 100644 --- a/packages/plugins/auth/src/server/token-blacklist.ts +++ b/packages/plugins/auth/src/server/token-blacklist.ts @@ -41,7 +41,7 @@ export class TokenBlacklistService implements ITokenBlacklistService { async has(token: string) { return !!(await this.repo.findOne({ - where: { + filter: { token, }, })); diff --git a/packages/plugins/charts/package.json b/packages/plugins/charts/package.json index 55da8ead7c..e3a62f21d5 100644 --- a/packages/plugins/charts/package.json +++ b/packages/plugins/charts/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "图表", "description": "Out-of-the-box, feature-rich chart plugins.", "description.zh-CN": "开箱即用、丰富的报表。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "./lib/server/index.js", "files": [ "lib", @@ -26,11 +26,11 @@ "@formily/core": "2.2.26", "@formily/react": "2.2.26", "@formily/shared": "2.2.26", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "antd": "^5.6.4", "react": "^18.2.0", "react-i18next": "^11.15.1", diff --git a/packages/plugins/charts/src/client/locale/en-US.ts b/packages/plugins/charts/src/locale/en-US.ts similarity index 100% rename from packages/plugins/charts/src/client/locale/en-US.ts rename to packages/plugins/charts/src/locale/en-US.ts diff --git a/packages/plugins/charts/src/client/locale/es-ES.ts b/packages/plugins/charts/src/locale/es-ES.ts similarity index 100% rename from packages/plugins/charts/src/client/locale/es-ES.ts rename to packages/plugins/charts/src/locale/es-ES.ts diff --git a/packages/plugins/charts/src/client/locale/ru-RU.ts b/packages/plugins/charts/src/locale/fr-FR.ts similarity index 100% rename from packages/plugins/charts/src/client/locale/ru-RU.ts rename to packages/plugins/charts/src/locale/fr-FR.ts diff --git a/packages/plugins/data-visualization/src/client/locale/ja-JP.ts b/packages/plugins/charts/src/locale/ja-JP.ts similarity index 100% rename from packages/plugins/data-visualization/src/client/locale/ja-JP.ts rename to packages/plugins/charts/src/locale/ja-JP.ts diff --git a/packages/plugins/charts/src/client/locale/pt-BR.ts b/packages/plugins/charts/src/locale/pt-BR.ts similarity index 100% rename from packages/plugins/charts/src/client/locale/pt-BR.ts rename to packages/plugins/charts/src/locale/pt-BR.ts diff --git a/packages/plugins/data-visualization/src/client/locale/ru-RU.ts b/packages/plugins/charts/src/locale/ru-RU.ts similarity index 100% rename from packages/plugins/data-visualization/src/client/locale/ru-RU.ts rename to packages/plugins/charts/src/locale/ru-RU.ts diff --git a/packages/plugins/charts/src/client/locale/tr-TR.ts b/packages/plugins/charts/src/locale/tr-TR.ts similarity index 100% rename from packages/plugins/charts/src/client/locale/tr-TR.ts rename to packages/plugins/charts/src/locale/tr-TR.ts diff --git a/packages/plugins/charts/src/client/locale/zh-CN.ts b/packages/plugins/charts/src/locale/zh-CN.ts similarity index 100% rename from packages/plugins/charts/src/client/locale/zh-CN.ts rename to packages/plugins/charts/src/locale/zh-CN.ts diff --git a/packages/plugins/china-region/package.json b/packages/plugins/china-region/package.json index 8813149dd1..dce6bfb1e1 100644 --- a/packages/plugins/china-region/package.json +++ b/packages/plugins/china-region/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-china-region", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "displayName": "china-region", "displayName.zh-CN": "中国行政区", "description": "Chinese Administrative Division Plugin, including all administrative regions of China.", @@ -24,10 +24,10 @@ "devDependencies": { "@formily/core": "2.2.26", "@formily/react": "2.2.26", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2" + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/client/package.json b/packages/plugins/client/package.json index f4705bf0ed..085ef69e64 100644 --- a/packages/plugins/client/package.json +++ b/packages/plugins/client/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "客户端", "description": "client", "description.zh-CN": "客户端。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "./lib/server/index.js", "files": [ "lib", @@ -25,11 +25,11 @@ "koa-static": "^5.0.0" }, "devDependencies": { - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2" + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/client/src/index.ts b/packages/plugins/client/src/index.ts index ce9f71d9ff..7ddad58145 100644 --- a/packages/plugins/client/src/index.ts +++ b/packages/plugins/client/src/index.ts @@ -1 +1 @@ -export { default, getResourceLocale } from './server'; +export { default } from './server'; diff --git a/packages/plugins/client/src/server/index.ts b/packages/plugins/client/src/server/index.ts index 1d7c99f426..7ddad58145 100644 --- a/packages/plugins/client/src/server/index.ts +++ b/packages/plugins/client/src/server/index.ts @@ -1,2 +1 @@ -export { getResourceLocale } from './resource'; export { default } from './server'; diff --git a/packages/plugins/client/src/server/moment-locale.ts b/packages/plugins/client/src/server/moment-locale.ts deleted file mode 100644 index 932259a1d9..0000000000 --- a/packages/plugins/client/src/server/moment-locale.ts +++ /dev/null @@ -1,141 +0,0 @@ -const locales = { - af: 'af', - 'ar-dz': 'ar-dz', - 'ar-kw': 'ar-kw', - 'ar-ly': 'ar-ly', - 'ar-ma': 'ar-ma', - 'ar-sa': 'ar-sa', - 'ar-tn': 'ar-tn', - ar: 'ar', - az: 'az', - be: 'be', - bg: 'bg', - bm: 'bm', - 'bn-bd': 'bn-bd', - bn: 'bn', - bo: 'bo', - br: 'br', - bs: 'bs', - ca: 'ca', - cs: 'cs', - cv: 'cv', - cy: 'cy', - da: 'da', - 'de-at': 'de-at', - 'de-ch': 'de-ch', - de: 'de', - dv: 'dv', - el: 'el', - 'en-au': 'en-au', - 'en-ca': 'en-ca', - 'en-gb': 'en-gb', - 'en-ie': 'en-ie', - 'en-il': 'en-il', - 'en-in': 'en-in', - 'en-nz': 'en-nz', - 'en-sg': 'en-sg', - eo: 'eo', - 'es-do': 'es-do', - 'es-mx': 'es-mx', - 'es-us': 'es-us', - es: 'es', - et: 'et', - eu: 'eu', - fa: 'fa', - fi: 'fi', - fil: 'fil', - fo: 'fo', - 'fr-ca': 'fr-ca', - 'fr-ch': 'fr-ch', - fr: 'fr', - fy: 'fy', - ga: 'ga', - gd: 'gd', - gl: 'gl', - 'gom-deva': 'gom-deva', - 'gom-latn': 'gom-latn', - gu: 'gu', - he: 'he', - hi: 'hi', - hr: 'hr', - hu: 'hu', - 'hy-am': 'hy-am', - id: 'id', - is: 'is', - 'it-ch': 'it-ch', - it: 'it', - 'ja-JP': 'ja', - jv: 'jv', - ka: 'ka', - kk: 'kk', - km: 'km', - kn: 'kn', - ko: 'ko', - ku: 'ku', - ky: 'ky', - lb: 'lb', - lo: 'lo', - lt: 'lt', - lv: 'lv', - me: 'me', - mi: 'mi', - mk: 'mk', - ml: 'ml', - mn: 'mn', - mr: 'mr', - 'ms-my': 'ms-my', - ms: 'ms', - mt: 'mt', - my: 'my', - nb: 'nb', - ne: 'ne', - 'nl-be': 'nl-be', - nl: 'nl', - nn: 'nn', - 'oc-lnc': 'oc-lnc', - 'pa-in': 'pa-in', - pl: 'pl', - 'pt-br': 'pt-br', - pt: 'pt', - ro: 'ro', - 'ru-RU': 'ru', - sd: 'sd', - se: 'se', - si: 'si', - sk: 'sk', - sl: 'sl', - sq: 'sq', - 'sr-cyrl': 'sr-cyrl', - sr: 'sr', - ss: 'ss', - sv: 'sv', - sw: 'sw', - ta: 'ta', - te: 'te', - tet: 'tet', - tg: 'tg', - 'th-TH': 'th', - tk: 'tk', - 'tl-ph': 'tl-ph', - tlh: 'tlh', - 'tr-TR': 'tr', - tzl: 'tzl', - 'tzm-latn': 'tzm-latn', - tzm: 'tzm', - 'ug-cn': 'ug-cn', - uk: 'uk', - ur: 'ur', - 'uz-latn': 'uz-latn', - uz: 'uz', - vi: 'vi', - 'x-pseudo': 'x-pseudo', - yo: 'yo', - 'zh-CN': 'zh-cn', - 'zh-hk': 'zh-hk', - 'zh-mo': 'zh-mo', - 'zh-TW': 'zh-tw', -}; - -export const getMomentLocale = (lang: string) => { - return locales[lang] || 'en'; -}; diff --git a/packages/plugins/client/src/server/resource.ts b/packages/plugins/client/src/server/resource.ts deleted file mode 100644 index 354f5bc21f..0000000000 --- a/packages/plugins/client/src/server/resource.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { PluginManager } from '@nocobase/server'; - -const arr2obj = (items: any[]) => { - const obj = {}; - for (const item of items) { - Object.assign(obj, item); - } - return obj; -}; - -const getResource = (packageName: string, lang: string) => { - const resources = []; - const prefixes = ['src', 'lib']; - const localeKeys = ['locale', 'client/locale', 'server/locale']; - for (const prefix of prefixes) { - for (const localeKey of localeKeys) { - try { - const file = `${packageName}/${prefix}/${localeKey}/${lang}`; - require.resolve(file); - const resource = require(file).default; - resources.push(resource); - } catch (error) {} - } - if (resources.length) { - break; - } - } - if (resources.length === 0 && lang.replace('-', '_') !== lang) { - return getResource(packageName, lang.replace('-', '_')); - } - return arr2obj(resources); -}; - -export const getResourceLocale = async (lang: string, db: any) => { - const resources = {}; - const res = getResource('@nocobase/client', lang); - const defaults = getResource('@nocobase/client', 'zh-CN'); - for (const key in defaults) { - if (Object.prototype.hasOwnProperty.call(defaults, key)) { - defaults[key] = key; - } - } - if (res) { - resources['client'] = { ...defaults, ...res }; - } else { - resources['client'] = defaults; - } - const plugins = await db.getRepository('applicationPlugins').find({ - filter: { - 'name.$ne': 'client', - }, - }); - for (const plugin of plugins) { - const packageName = PluginManager.getPackageName(plugin.get('name')); - const res = getResource(packageName, lang); - const defaults = getResource(packageName, 'zh-CN'); - for (const key in defaults) { - if (Object.prototype.hasOwnProperty.call(defaults, key)) { - defaults[key] = key; - } - } - if (res) { - resources[plugin.get('name')] = { ...defaults, ...res }; - } else { - resources['client'] = defaults; - } - } - return resources; -}; diff --git a/packages/plugins/client/src/server/server.ts b/packages/plugins/client/src/server/server.ts index 6838cc6e36..c7994714cf 100644 --- a/packages/plugins/client/src/server/server.ts +++ b/packages/plugins/client/src/server/server.ts @@ -1,14 +1,8 @@ import { Plugin, PluginManager } from '@nocobase/server'; -import { lodash } from '@nocobase/utils'; import fs from 'fs'; import send from 'koa-send'; import serve from 'koa-static'; import { isAbsolute, resolve } from 'path'; -import { getAntdLocale } from './antd'; -import { getCronLocale } from './cron'; -import { getCronstrueLocale } from './cronstrue'; -import { getMomentLocale } from './moment-locale'; -import { getResourceLocale } from './resource'; async function getReadMe(name: string, locale: string) { const packageName = PluginManager.getPackageName(name); @@ -128,7 +122,6 @@ export class ClientPlugin extends Plugin { actions: ['app:reboot', 'app:clearCache'], }); const dialect = this.app.db.sequelize.getDialect(); - const locales = require('./locale').default; const restartMark = resolve(process.cwd(), 'storage', 'restart'); this.app.on('beforeStart', async () => { if (fs.existsSync(restartMark)) { @@ -159,25 +152,10 @@ export class ClientPlugin extends Plugin { }, async getLang(ctx, next) { const lang = await getLang(ctx); - if (lodash.isEmpty(locales[lang])) { - locales[lang] = {}; - } - if (lodash.isEmpty(locales[lang].resources)) { - locales[lang].resources = await getResourceLocale(lang, ctx.db); - } - if (lodash.isEmpty(locales[lang].antd)) { - locales[lang].antd = getAntdLocale(lang); - } - if (lodash.isEmpty(locales[lang].cronstrue)) { - locales[lang].cronstrue = getCronstrueLocale(lang); - } - if (lodash.isEmpty(locales[lang].cron)) { - locales[lang].cron = getCronLocale(lang); - } + const resources = await ctx.app.locales.get(lang); ctx.body = { lang, - moment: getMomentLocale(lang), - ...locales[lang], + ...resources, }; await next(); }, diff --git a/packages/plugins/collection-manager/package.json b/packages/plugins/collection-manager/package.json index 3f59f74bfe..0b6146952f 100644 --- a/packages/plugins/collection-manager/package.json +++ b/packages/plugins/collection-manager/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "数据库管理", "description": " database management plugin designed to simplify the process of managing and operating databases. It seamlessly integrates with various relational database systems such as MySQL and PostgreSQL, and provides an intuitive user interface for performing various database tasks.", "description.zh-CN": "可以与多种关系型数据库系统(如MySQL、PostgreSQL)无缝集成,并提供直观的用户界面来执行各种数据库任务。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "./lib/server/index.js", "files": [ "lib", @@ -24,12 +24,12 @@ "toposort": "^2.0.2" }, "devDependencies": { - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/plugin-error-handler": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2" + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/plugin-error-handler": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/collection-manager/src/index.ts b/packages/plugins/collection-manager/src/index.ts index 7ddad58145..7e74612df8 100644 --- a/packages/plugins/collection-manager/src/index.ts +++ b/packages/plugins/collection-manager/src/index.ts @@ -1 +1,2 @@ +export * from './server'; export { default } from './server'; diff --git a/packages/plugins/collection-manager/src/server/__tests__/collections.repository.test.ts b/packages/plugins/collection-manager/src/server/__tests__/collections.repository.test.ts index 629e8e7183..fd0104264e 100644 --- a/packages/plugins/collection-manager/src/server/__tests__/collections.repository.test.ts +++ b/packages/plugins/collection-manager/src/server/__tests__/collections.repository.test.ts @@ -1,7 +1,7 @@ import Database, { Collection as DBCollection, HasManyRepository } from '@nocobase/database'; import Application from '@nocobase/server'; import { createApp } from '.'; -import CollectionManagerPlugin, { CollectionRepository } from '@nocobase/plugin-collection-manager'; +import CollectionManagerPlugin, { CollectionRepository } from '../index'; describe('collections repository', () => { let db: Database; diff --git a/packages/plugins/collection-manager/src/server/index.ts b/packages/plugins/collection-manager/src/server/index.ts index 962d2196ec..948c0824a5 100644 --- a/packages/plugins/collection-manager/src/server/index.ts +++ b/packages/plugins/collection-manager/src/server/index.ts @@ -1,4 +1,7 @@ export * from './repositories'; + export { default as fieldsCollection } from './collections/fields'; + export { default as collectionsCollection } from './collections/collections'; + export { default } from './server'; diff --git a/packages/plugins/data-visualization/package.json b/packages/plugins/data-visualization/package.json index f19e7b8bac..b9a9696027 100644 --- a/packages/plugins/data-visualization/package.json +++ b/packages/plugins/data-visualization/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-data-visualization", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "displayName": "Data Visualization", "displayName.zh-CN": "数据可视化", "description": "Provides business intelligence and data visualization features", @@ -17,13 +17,13 @@ "@formily/core": "2.2.26", "@formily/react": "2.2.26", "@formily/shared": "2.2.26", - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/cache": "0.11.1-alpha.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/cache": "0.11.1-alpha.3", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "@testing-library/react": "^12.1.5", "antd": "^5.6.4", "lodash": "^4.17.21", diff --git a/packages/plugins/data-visualization/src/client/block/ChartConfigure.tsx b/packages/plugins/data-visualization/src/client/block/ChartConfigure.tsx index a69144e720..881f37d93b 100644 --- a/packages/plugins/data-visualization/src/client/block/ChartConfigure.tsx +++ b/packages/plugins/data-visualization/src/client/block/ChartConfigure.tsx @@ -1,17 +1,11 @@ import { RightSquareOutlined } from '@ant-design/icons'; -import { ArrayItems, Editable, Form, FormCollapse, FormItem, Switch } from '@formily/antd-v5'; +import { ArrayItems, Editable, FormCollapse, FormItem, FormLayout, Switch } from '@formily/antd-v5'; import { Form as FormType, ObjectField, createForm, onFieldChange, onFormInit } from '@formily/core'; import { FormConsumer, ISchema, Schema } from '@formily/react'; import { AutoComplete, - Cascader, - DatePicker, - Filter, - Input, - InputNumber, - Radio, + FormProvider, SchemaComponent, - Select, gridRowColWrap, useCollectionFieldsOptions, useCollectionFilterOptions, @@ -126,17 +120,14 @@ export const ChartConfigure: React.FC<{ }; const chartType = useDefaultChartType(); const form = useMemo( - () => { - return createForm({ + () => + createForm({ values: { config: { chartType }, ...(initialValues || field?.decoratorProps), collection }, effects: (form) => { onFieldChange('config.chartType', () => initChart(true)); - onFormInit(() => { - queryReact(form); - }); + onFormInit(() => queryReact(form)); }, - }); - }, + }), // visible, collection added here to re-initialize form when visible, collection change // eslint-disable-next-line react-hooks/exhaustive-deps [field, visible, collection], @@ -199,9 +190,8 @@ export const ChartConfigure: React.FC<{ afterSave(); return; } - insert(createRendererSchema(rendererProps), { + insert(gridRowColWrap(createRendererSchema(rendererProps)), { onSuccess: afterSave, - wrap: gridRowColWrap, }); }} onCancel={() => { @@ -224,70 +214,72 @@ export const ChartConfigure: React.FC<{ background: 'rgba(128, 128, 128, 0.08)', }} > -
- - - - } - items={[ - { - label: t('Query'), - key: 'query', - children: , - }, - { - label: t('Data'), - key: 'data', - children: , - }, - ]} - /> - - - - - , - }, - { - label: t('Transform'), - key: 'transform', - children: , - }, - ]} - /> - - - - - - - - -
+ + + + + + } + items={[ + { + label: t('Query'), + key: 'query', + children: , + }, + { + label: t('Data'), + key: 'data', + children: , + }, + ]} + /> + + + + + , + }, + { + label: t('Transform'), + key: 'transform', + children: , + }, + ]} + /> + + + + + + + + + + ); }; @@ -359,24 +351,7 @@ ChartConfigure.Query = function Query() { collection: current?.collection, useOrderReaction: useOrderReaction(compiledFieldOptions, fields), }} - components={{ - ArrayItems, - Editable, - FormCollapse, - Card, - Switch, - Select, - Input, - InputNumber, - FormItem, - Radio, - Space, - Filter, - DatePicker, - Text, - FromSql, - Cascader, - }} + components={{ ArrayItems, Editable, FormCollapse, FormItem, Space, Switch, FromSql }} /> ); }; @@ -411,7 +386,7 @@ ChartConfigure.Config = function Config() { ); }} @@ -427,7 +402,7 @@ ChartConfigure.Transform = function Transform() { return ( ); diff --git a/packages/plugins/data-visualization/src/client/block/schemas/configure.ts b/packages/plugins/data-visualization/src/client/block/schemas/configure.ts index 8df16f65c7..68be231376 100644 --- a/packages/plugins/data-visualization/src/client/block/schemas/configure.ts +++ b/packages/plugins/data-visualization/src/client/block/schemas/configure.ts @@ -219,10 +219,20 @@ export const querySchema: ISchema = { 'x-component': 'Input', 'x-component-props': { placeholder: '{{t("Alias")}}', + style: { + minWidth: '100px', + }, + }, + }, + }, + { + required: true, + 'x-component-props': { + style: { + overflow: 'auto', }, }, }, - { required: true }, ), }, }, @@ -234,44 +244,56 @@ export const querySchema: ISchema = { key: 'dimensions', }, properties: { - dimensions: getArraySchema({ - field: { - type: 'string', - 'x-decorator': 'FormItem', - 'x-component': 'Cascader', - 'x-component-props': { - placeholder: '{{t("Field")}}', - fieldNames: { - label: 'title', - value: 'name', - children: 'children', + dimensions: getArraySchema( + { + field: { + type: 'string', + 'x-decorator': 'FormItem', + 'x-component': 'Cascader', + 'x-component-props': { + placeholder: '{{t("Field")}}', + fieldNames: { + label: 'title', + value: 'name', + children: 'children', + }, + }, + enum: '{{ fieldOptions }}', + required: true, + }, + format: { + type: 'string', + 'x-decorator': 'FormItem', + 'x-component': 'Select', + 'x-component-props': { + placeholder: '{{t("Format")}}', + style: { + maxWidth: '120px', + }, + }, + 'x-reactions': '{{ useFormatterOptions }}', + 'x-visible': '{{ $self.dataSource && $self.dataSource.length }}', + }, + alias: { + type: 'string', + 'x-decorator': 'FormItem', + 'x-component': 'Input', + 'x-component-props': { + placeholder: '{{t("Alias")}}', + style: { + minWidth: '100px', + }, }, }, - enum: '{{ fieldOptions }}', - required: true, }, - format: { - type: 'string', - 'x-decorator': 'FormItem', - 'x-component': 'Select', + { 'x-component-props': { - placeholder: '{{t("Format")}}', style: { - maxWidth: '120px', + overflow: 'auto', }, }, - 'x-reactions': '{{ useFormatterOptions }}', - 'x-visible': '{{ $self.dataSource && $self.dataSource.length }}', }, - alias: { - type: 'string', - 'x-decorator': 'FormItem', - 'x-component': 'Input', - 'x-component-props': { - placeholder: '{{t("Alias")}}', - }, - }, - }), + ), }, }, pane3: { @@ -325,12 +347,20 @@ export const querySchema: ISchema = { 'x-component-props': { defaultValue: 'ASC', optionType: 'button', + style: { + width: '128px', + }, }, enum: ['ASC', 'DESC'], }, }, { 'x-reactions': '{{ useOrderReaction }}', + 'x-component-props': { + style: { + overflow: 'auto', + }, + }, }, ), }, diff --git a/packages/plugins/data-visualization/src/client/renderer/ChartRenderer.tsx b/packages/plugins/data-visualization/src/client/renderer/ChartRenderer.tsx index da781d5c9f..7cd1b4bbdc 100644 --- a/packages/plugins/data-visualization/src/client/renderer/ChartRenderer.tsx +++ b/packages/plugins/data-visualization/src/client/renderer/ChartRenderer.tsx @@ -96,11 +96,7 @@ ChartRenderer.Designer = function Designer() { - insertAdjacent('afterEnd', createRendererSchema(schema?.['x-decorator-props']), { - wrap: gridRowColWrap, - }) - } + onClick={() => insertAdjacent('afterEnd', gridRowColWrap(createRendererSchema(schema?.['x-decorator-props'])))} > {t('Duplicate')} diff --git a/packages/plugins/data-visualization/src/client/renderer/library/G2PlotLibrary.tsx b/packages/plugins/data-visualization/src/client/renderer/library/G2PlotLibrary.tsx index 6436c462aa..f2b600cc48 100644 --- a/packages/plugins/data-visualization/src/client/renderer/library/G2PlotLibrary.tsx +++ b/packages/plugins/data-visualization/src/client/renderer/library/G2PlotLibrary.tsx @@ -42,6 +42,7 @@ const useProps: usePropsFunc = ({ data, fieldProps, general, advanced }) => { return { data, meta, + animation: false, ...general, ...advanced, }; @@ -56,7 +57,7 @@ export const G2PlotLibrary: Charts = { useProps, reference: { title: 'Line Chart', - link: 'https://g2plot.antv.antgroup.com/api/plots/bar', + link: 'https://g2plot.antv.antgroup.com/api/plots/line', }, }, area: { diff --git a/packages/plugins/data-visualization/src/client/locale/en-US.ts b/packages/plugins/data-visualization/src/locale/en-US.ts similarity index 100% rename from packages/plugins/data-visualization/src/client/locale/en-US.ts rename to packages/plugins/data-visualization/src/locale/en-US.ts diff --git a/packages/plugins/data-visualization/src/client/locale/tr-TR.ts b/packages/plugins/data-visualization/src/locale/fr-FR.ts similarity index 100% rename from packages/plugins/data-visualization/src/client/locale/tr-TR.ts rename to packages/plugins/data-visualization/src/locale/fr-FR.ts diff --git a/packages/plugins/oidc/src/client/locale/ja-JP.ts b/packages/plugins/data-visualization/src/locale/ja-JP.ts similarity index 100% rename from packages/plugins/oidc/src/client/locale/ja-JP.ts rename to packages/plugins/data-visualization/src/locale/ja-JP.ts diff --git a/packages/plugins/data-visualization/src/client/locale/pt-BR.ts b/packages/plugins/data-visualization/src/locale/pt-BR.ts similarity index 100% rename from packages/plugins/data-visualization/src/client/locale/pt-BR.ts rename to packages/plugins/data-visualization/src/locale/pt-BR.ts diff --git a/packages/plugins/oidc/src/client/locale/ru-RU.ts b/packages/plugins/data-visualization/src/locale/ru-RU.ts similarity index 100% rename from packages/plugins/oidc/src/client/locale/ru-RU.ts rename to packages/plugins/data-visualization/src/locale/ru-RU.ts diff --git a/packages/plugins/oidc/src/client/locale/tr-TR.ts b/packages/plugins/data-visualization/src/locale/tr-TR.ts similarity index 100% rename from packages/plugins/oidc/src/client/locale/tr-TR.ts rename to packages/plugins/data-visualization/src/locale/tr-TR.ts diff --git a/packages/plugins/data-visualization/src/client/locale/zh-CN.ts b/packages/plugins/data-visualization/src/locale/zh-CN.ts similarity index 100% rename from packages/plugins/data-visualization/src/client/locale/zh-CN.ts rename to packages/plugins/data-visualization/src/locale/zh-CN.ts diff --git a/packages/plugins/data-visualization/src/server/actions/query.ts b/packages/plugins/data-visualization/src/server/actions/query.ts index 2ba510469b..afd2450665 100644 --- a/packages/plugins/data-visualization/src/server/actions/query.ts +++ b/packages/plugins/data-visualization/src/server/actions/query.ts @@ -1,6 +1,6 @@ import { Context, Next } from '@nocobase/actions'; import { Cache } from '@nocobase/cache'; -import { FilterParser, snakeCase } from '@nocobase/database'; +import { Field, FilterParser, snakeCase } from '@nocobase/database'; import ChartsV2Plugin from '../plugin'; import { formatter } from './formatter'; @@ -65,13 +65,17 @@ export const parseFieldAndAssociations = (ctx: Context, params: QueryParams) => [target, name] = selected.field; } let field = underscored ? snakeCase(name) : name; - let type = fields.get(name)?.type; + let fieldType = fields.get(name)?.type; if (target) { + const targetField = fields.get(target) as Field; + const targetCollection = ctx.db.getCollection(targetField.target); + const targetFields = targetCollection.fields; + fieldType = targetFields.get(name)?.type; field = `${target}.${field}`; name = `${target}.${name}`; - type = fields.get(target)?.type; + const targetType = fields.get(target)?.type; if (!models[target]) { - models[target] = { type }; + models[target] = { type: targetType }; } } else { field = `${collectionName}.${field}`; @@ -80,7 +84,7 @@ export const parseFieldAndAssociations = (ctx: Context, params: QueryParams) => ...selected, field, name, - type, + type: fieldType, alias: selected.alias || name, }; }; @@ -161,11 +165,7 @@ export const parseBuilder = (ctx: Context, builder: QueryParams) => { }); orders.forEach((item: OrderProps) => { - const dialect = sequelize.getDialect(); - let alias = `"${item.alias}"`; - if (dialect === 'mysql') { - alias = `\`${item.alias}\``; - } + const alias = sequelize.getQueryInterface().quoteIdentifier(item.alias); const name = hasAgg ? sequelize.literal(alias) : sequelize.col(item.field as string); order.push([name, item.order || 'ASC']); }); @@ -251,18 +251,8 @@ export const cacheWrap = async ( }; export const query = async (ctx: Context, next: Next) => { - const { - uid, - collection, - measures, - dimensions, - orders, - filter, - limit, - sql, - cache: cacheConfig, - refresh, - } = ctx.action.params.values as QueryParams; + const { uid, collection, measures, dimensions, orders, filter, limit, sql, cache: cacheConfig, refresh } = ctx.action + .params.values as QueryParams; const roleName = ctx.state.currentRole || 'anonymous'; const can = ctx.app.acl.can({ role: roleName, resource: collection, action: 'list' }); if (!can && roleName !== 'root') { diff --git a/packages/plugins/duplicator/package.json b/packages/plugins/duplicator/package.json index 245445c7c9..38bccc1eb2 100644 --- a/packages/plugins/duplicator/package.json +++ b/packages/plugins/duplicator/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "NocoBase应用备份与还原", "description": "Backup and Restore Plugin for NocoBase applications, used for scenarios such as application replication, migration, and upgrade.", "description.zh-CN": "NocoBase 应用的备份与还原插件,可用于应用的复制、迁移、升级等场景。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -35,11 +35,11 @@ "tar": "^6.1.13" }, "devDependencies": { - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "antd": "^5.6.4", "react": "^18.2.0" } diff --git a/packages/plugins/duplicator/src/locale/zh-CN.ts b/packages/plugins/duplicator/src/locale/zh-CN.ts new file mode 100644 index 0000000000..0736493f78 --- /dev/null +++ b/packages/plugins/duplicator/src/locale/zh-CN.ts @@ -0,0 +1,8 @@ +export default { + 'Select Import data': '请选择导入数据', + 'Select Import Plugins': '请选择导入插件', + 'Select User Collections': '请选择用户数据', + 'Basic Data': '基础数据', + 'Optional Data': '可选数据', + 'User Data': '用户数据', +}; diff --git a/packages/plugins/duplicator/src/server/server.ts b/packages/plugins/duplicator/src/server/server.ts index 86db064597..384c268d81 100644 --- a/packages/plugins/duplicator/src/server/server.ts +++ b/packages/plugins/duplicator/src/server/server.ts @@ -2,13 +2,13 @@ import { Plugin } from '@nocobase/server'; import addDumpCommand from './commands/dump-command'; import addRestoreCommand from './commands/restore-command'; -import zhCN from './locale/zh-CN'; -import dumpAction from './actions/dump-action'; -import { getPackageContent, restoreAction } from './actions/restore-action'; -import getDictAction from './actions/get-dict-action'; -import dumpableCollections from './actions/dumpable-collections-action'; -import multer from '@koa/multer'; +import { koaMulter as multer } from '@nocobase/utils'; import * as os from 'os'; +import dumpAction from './actions/dump-action'; +import dumpableCollections from './actions/dumpable-collections-action'; +import getDictAction from './actions/get-dict-action'; +import { getPackageContent, restoreAction } from './actions/restore-action'; +import zhCN from './locale/zh-CN'; export default class Duplicator extends Plugin { beforeLoad() { diff --git a/packages/plugins/error-handler/package.json b/packages/plugins/error-handler/package.json index 00341515d5..6ce0e20355 100644 --- a/packages/plugins/error-handler/package.json +++ b/packages/plugins/error-handler/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "错误处理", "description": "Managing and handling errors and exceptions in an application.", "description.zh-CN": "管理和处理应用程序中的错误和异常。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -20,11 +20,11 @@ ], "devDependencies": { "@formily/json-schema": "2.2.26", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "supertest": "^6.1.6" }, "repository": { diff --git a/packages/plugins/error-handler/src/locale/en_US.ts b/packages/plugins/error-handler/src/locale/en_US.ts new file mode 100644 index 0000000000..b248d9b0cd --- /dev/null +++ b/packages/plugins/error-handler/src/locale/en_US.ts @@ -0,0 +1,6 @@ +export default { + 'unique violation': '{{field}} must be unique', + 'notNull violation': 'notNull violation', + 'Validation error': '{{field}} validation error', + 'notNull Violation': '{{field}} cannot be null', +}; diff --git a/packages/plugins/error-handler/src/locale/es-ES.ts b/packages/plugins/error-handler/src/locale/es-ES.ts new file mode 100644 index 0000000000..81ac5606ca --- /dev/null +++ b/packages/plugins/error-handler/src/locale/es-ES.ts @@ -0,0 +1,6 @@ +export default { + "unique violation": "{{field}} debe ser único", + "notNull violation": "notNull violación", + "Validation error": "{{field}} error de validación", + "notNull Violation": "{{field}} no puede ser null" +}; diff --git a/packages/plugins/error-handler/src/locale/fr_FR.ts b/packages/plugins/error-handler/src/locale/fr_FR.ts new file mode 100644 index 0000000000..10463d83d9 --- /dev/null +++ b/packages/plugins/error-handler/src/locale/fr_FR.ts @@ -0,0 +1,6 @@ +export default { + 'unique violation': '{{field}} doit être unique', + 'notNull violation': 'Violation de contrainte notNull', + 'Validation error': 'Erreur de validation de {{field}}', + 'notNull Violation': '{{field}} ne peut pas être null', +}; diff --git a/packages/plugins/error-handler/src/locale/ja_JP.ts b/packages/plugins/error-handler/src/locale/ja_JP.ts new file mode 100644 index 0000000000..ffd51b9844 --- /dev/null +++ b/packages/plugins/error-handler/src/locale/ja_JP.ts @@ -0,0 +1,4 @@ +export default { + 'unique violation': '{{field}} は一意でなくてはなりません', + 'notNull Violation': '{{field}} はNullにできません', +}; diff --git a/packages/plugins/error-handler/src/locale/pt-BR.ts b/packages/plugins/error-handler/src/locale/pt-BR.ts new file mode 100644 index 0000000000..6ee8e7caab --- /dev/null +++ b/packages/plugins/error-handler/src/locale/pt-BR.ts @@ -0,0 +1,6 @@ +export default { + 'unique violation': '{{field}} deve ser único', + 'notNull violation': 'violação de não nulo', + 'Validation error': 'erro de validação de {{field}}', + 'notNull Violation': '{{field}} não pode ser nulo', +}; diff --git a/packages/plugins/error-handler/src/locale/zh_CN.ts b/packages/plugins/error-handler/src/locale/zh_CN.ts new file mode 100644 index 0000000000..1849dd4dc4 --- /dev/null +++ b/packages/plugins/error-handler/src/locale/zh_CN.ts @@ -0,0 +1,5 @@ +export default { + 'unique violation': '{{field}} 字段值是唯一的', + 'notNull violation': '{{field}} 字段不能为空', + 'Validation error': '{{field}} 字段规则验证失败', +}; diff --git a/packages/plugins/error-handler/src/server/locale/fr_FR.ts b/packages/plugins/error-handler/src/server/locale/fr_FR.ts new file mode 100644 index 0000000000..10463d83d9 --- /dev/null +++ b/packages/plugins/error-handler/src/server/locale/fr_FR.ts @@ -0,0 +1,6 @@ +export default { + 'unique violation': '{{field}} doit être unique', + 'notNull violation': 'Violation de contrainte notNull', + 'Validation error': 'Erreur de validation de {{field}}', + 'notNull Violation': '{{field}} ne peut pas être null', +}; diff --git a/packages/plugins/excel-formula-field/package.json b/packages/plugins/excel-formula-field/package.json index 9fef127fd1..2c5c34c50a 100644 --- a/packages/plugins/excel-formula-field/package.json +++ b/packages/plugins/excel-formula-field/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-excel-formula-field", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "description": "", "license": "AGPL-3.0", "main": "./lib/server/index.js", @@ -20,10 +20,10 @@ }, "devDependencies": { "@formily/react": "2.2.26", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", "react": "^18.2.0", "react-i18next": "^11.15.1" } diff --git a/packages/plugins/export/package.json b/packages/plugins/export/package.json index 1740fd7883..b06cd9165c 100644 --- a/packages/plugins/export/package.json +++ b/packages/plugins/export/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "导出", "description": "export data", "description.zh-CN": "导出数据。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -27,12 +27,12 @@ "@formily/antd-v5": "1.1.0-beta.4", "@formily/react": "2.2.26", "@formily/shared": "2.2.26", - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "react": "^18.2.0", "react-i18next": "^11.15.1" }, diff --git a/packages/plugins/file-manager/package.json b/packages/plugins/file-manager/package.json index 831c65f759..9efef86812 100644 --- a/packages/plugins/file-manager/package.json +++ b/packages/plugins/file-manager/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-file-manager", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "displayName": "file manager", "displayName.zh-CN": "文件管理", "description": "file management plugin.", @@ -37,12 +37,12 @@ "@formily/core": "2.2.26", "@formily/react": "2.2.26", "@formily/shared": "2.2.26", - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "antd": "^5.6.4", "react": "^18.2.0", "react-i18next": "^11.15.1", diff --git a/packages/plugins/file-manager/src/client/locale/en-US.ts b/packages/plugins/file-manager/src/locale/en-US.ts similarity index 78% rename from packages/plugins/file-manager/src/client/locale/en-US.ts rename to packages/plugins/file-manager/src/locale/en-US.ts index 9f3414989c..553d8c7cc0 100644 --- a/packages/plugins/file-manager/src/client/locale/en-US.ts +++ b/packages/plugins/file-manager/src/locale/en-US.ts @@ -1,21 +1,21 @@ export default { 'File manager': 'File manager', - 'Attachment': 'Attachment', + Attachment: 'Attachment', 'MIME type': 'MIME type', 'Storage display name': 'Storage display name', 'Storage name': 'Storage name', 'Storage type': 'Storage type', 'Default storage': 'Default storage', 'Storage base URL': 'Storage base URL', - 'Destination': 'Destination', + Destination: 'Destination', 'Use the built-in static file server': 'Use the built-in static file server', 'Local storage': 'Local storage', 'Aliyun OSS': 'Aliyun OSS', 'Tencent COS': 'Tencent COS', 'Amazon S3': 'Amazon S3', - 'Region': 'Region', - 'Bucket': 'Bucket', - 'Path': 'Path', - 'Filename': 'Filename', + Region: 'Region', + Bucket: 'Bucket', + Path: 'Path', + Filename: 'Filename', 'Will be used for API': 'Will be used for API', }; diff --git a/packages/plugins/file-manager/src/locale/fr-FR.ts b/packages/plugins/file-manager/src/locale/fr-FR.ts new file mode 100644 index 0000000000..6ef4d51d54 --- /dev/null +++ b/packages/plugins/file-manager/src/locale/fr-FR.ts @@ -0,0 +1,21 @@ +export default { + 'File manager': 'Gestionnaire de fichiers', + Attachment: 'Pièce jointe', + 'MIME type': 'Type MIME', + 'Storage display name': "Nom d'affichage du stockage", + 'Storage name': 'Nom du stockage', + 'Storage type': 'Type de stockage', + 'Default storage': 'Stockage par défaut', + 'Storage base URL': 'URL de base du stockage', + Destination: 'Destination', + 'Use the built-in static file server': 'Utiliser le serveur de fichiers statique intégré', + 'Local storage': 'Stockage local', + 'Aliyun OSS': 'Aliyun OSS', + 'Tencent COS': 'Tencent COS', + 'Amazon S3': 'Amazon S3', + Region: 'Region', + Bucket: 'Bucket', + Path: 'Chemin', + Filename: 'Nom de fichier', + 'Will be used for API': "Sera utilisé pour l'API", +}; diff --git a/packages/plugins/file-manager/src/client/locale/ja-JP.ts b/packages/plugins/file-manager/src/locale/ja-JP.ts similarity index 100% rename from packages/plugins/file-manager/src/client/locale/ja-JP.ts rename to packages/plugins/file-manager/src/locale/ja-JP.ts diff --git a/packages/plugins/file-manager/src/client/locale/ru-RU.ts b/packages/plugins/file-manager/src/locale/ru-RU.ts similarity index 100% rename from packages/plugins/file-manager/src/client/locale/ru-RU.ts rename to packages/plugins/file-manager/src/locale/ru-RU.ts diff --git a/packages/plugins/file-manager/src/client/locale/tr-TR.ts b/packages/plugins/file-manager/src/locale/tr-TR.ts similarity index 100% rename from packages/plugins/file-manager/src/client/locale/tr-TR.ts rename to packages/plugins/file-manager/src/locale/tr-TR.ts diff --git a/packages/plugins/file-manager/src/client/locale/zh-CN.ts b/packages/plugins/file-manager/src/locale/zh-CN.ts similarity index 100% rename from packages/plugins/file-manager/src/client/locale/zh-CN.ts rename to packages/plugins/file-manager/src/locale/zh-CN.ts diff --git a/packages/plugins/file-manager/src/server/actions/attachments.ts b/packages/plugins/file-manager/src/server/actions/attachments.ts index 99e26a9936..327c89e198 100644 --- a/packages/plugins/file-manager/src/server/actions/attachments.ts +++ b/packages/plugins/file-manager/src/server/actions/attachments.ts @@ -1,5 +1,5 @@ -import multer from '@koa/multer'; -import actions, { Context, Next } from '@nocobase/actions'; +import { Context, Next } from '@nocobase/actions'; +import { koaMulter as multer } from '@nocobase/utils'; import path from 'path'; import { DEFAULT_MAX_FILE_SIZE, FILE_FIELD_NAME, LIMIT_FILES } from '../constants'; diff --git a/packages/plugins/formula-field/package.json b/packages/plugins/formula-field/package.json index ce069843dc..08febbe77d 100644 --- a/packages/plugins/formula-field/package.json +++ b/packages/plugins/formula-field/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "字段", "description": "formula-field", "description.zh-CN": "字段。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -23,12 +23,12 @@ "@formily/core": "2.2.26", "@formily/react": "2.2.26", "@formily/reactive": "2.2.26", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/evaluators": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/evaluators": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "react": "^18.2.0", "react-i18next": "^11.15.1" } diff --git a/packages/plugins/formula-field/src/client/locale/zh-CN.ts b/packages/plugins/formula-field/src/locale/zh-CN.ts similarity index 100% rename from packages/plugins/formula-field/src/client/locale/zh-CN.ts rename to packages/plugins/formula-field/src/locale/zh-CN.ts diff --git a/packages/plugins/graph-collection-manager/package.json b/packages/plugins/graph-collection-manager/package.json index 50806dcdfe..7417e2653f 100644 --- a/packages/plugins/graph-collection-manager/package.json +++ b/packages/plugins/graph-collection-manager/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "数据库可视化管理", "description": "database collection manage", "description.zh-CN": "数据库管理。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -29,11 +29,11 @@ "@formily/react": "2.2.26", "@formily/reactive": "2.2.26", "@formily/shared": "2.2.26", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "antd": "^5.6.4", "react": "^18.2.0", "react-i18next": "^11.15.1" diff --git a/packages/plugins/graph-collection-manager/src/client/locale/index.ts b/packages/plugins/graph-collection-manager/src/client/locale/index.ts index 70f55564f7..086314849e 100644 --- a/packages/plugins/graph-collection-manager/src/client/locale/index.ts +++ b/packages/plugins/graph-collection-manager/src/client/locale/index.ts @@ -1,3 +1,3 @@ -export { default as enUS } from './en-US'; -export { default as zhCN } from './zh-CN'; -export { default as jaJP } from './ja-JP'; +// export { default as enUS } from './en-US'; +// export { default as zhCN } from './zh-CN'; +// export { default as jaJP } from './ja-JP'; diff --git a/packages/plugins/graph-collection-manager/src/client/locale/en-US.ts b/packages/plugins/graph-collection-manager/src/locale/en-US.ts similarity index 100% rename from packages/plugins/graph-collection-manager/src/client/locale/en-US.ts rename to packages/plugins/graph-collection-manager/src/locale/en-US.ts diff --git a/packages/plugins/graph-collection-manager/src/client/locale/es-ES.ts b/packages/plugins/graph-collection-manager/src/locale/es-ES.ts similarity index 100% rename from packages/plugins/graph-collection-manager/src/client/locale/es-ES.ts rename to packages/plugins/graph-collection-manager/src/locale/es-ES.ts diff --git a/packages/plugins/graph-collection-manager/src/locale/fr-FR.ts b/packages/plugins/graph-collection-manager/src/locale/fr-FR.ts new file mode 100644 index 0000000000..d8cbcd487a --- /dev/null +++ b/packages/plugins/graph-collection-manager/src/locale/fr-FR.ts @@ -0,0 +1,15 @@ +export default { + 'Graph Collection': 'Collection de graphiques', + 'Collection List': 'Liste des collections', + 'Full Screen': 'Plein écran', + 'Collection Search': 'Recherche de collection', + 'Create Collection': 'Créer une collection', + 'All Fields': 'Tous les champs', + 'Association Fields': "Champs d'association", + 'Choices fields': 'Champs de choix', + 'All relationships': 'Toutes les relations', + 'Entity relationship only': "Uniquement les relations d'entité", + 'Inheritance relationship only': "Uniquement les relations d'héritage", + 'Graphical interface': 'Interface graphique', + Selection: 'Sélection', +}; diff --git a/packages/plugins/graph-collection-manager/src/client/locale/ja-JP.ts b/packages/plugins/graph-collection-manager/src/locale/ja-JP.ts similarity index 100% rename from packages/plugins/graph-collection-manager/src/client/locale/ja-JP.ts rename to packages/plugins/graph-collection-manager/src/locale/ja-JP.ts diff --git a/packages/plugins/graph-collection-manager/src/client/locale/pt-BR.ts b/packages/plugins/graph-collection-manager/src/locale/pt-BR.ts similarity index 100% rename from packages/plugins/graph-collection-manager/src/client/locale/pt-BR.ts rename to packages/plugins/graph-collection-manager/src/locale/pt-BR.ts diff --git a/packages/plugins/graph-collection-manager/src/client/locale/zh-CN.ts b/packages/plugins/graph-collection-manager/src/locale/zh-CN.ts similarity index 100% rename from packages/plugins/graph-collection-manager/src/client/locale/zh-CN.ts rename to packages/plugins/graph-collection-manager/src/locale/zh-CN.ts diff --git a/packages/plugins/iframe-block/package.json b/packages/plugins/iframe-block/package.json index 4629a5d122..db012aaae9 100644 --- a/packages/plugins/iframe-block/package.json +++ b/packages/plugins/iframe-block/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "iframe", "description": "create and manage IFrame blocks on the page for embedding and displaying external web pages or content.", "description.zh-CN": "在页面上创建和管理iframe,用于嵌入和展示外部网页或内容。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -25,11 +25,11 @@ "@ant-design/icons": "^5.1.4", "@formily/react": "2.2.26", "@formily/shared": "2.2.26", - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", "antd": "^5.6.4", "react": "^18.2.0", "react-i18next": "^11.15.1" diff --git a/packages/plugins/import/package.json b/packages/plugins/import/package.json index 2fade51c9b..b7ce1c5668 100644 --- a/packages/plugins/import/package.json +++ b/packages/plugins/import/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "导入", "description": "import data.", "description.zh-CN": "导入数据。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -32,12 +32,12 @@ "@formily/core": "2.2.26", "@formily/react": "2.2.26", "@formily/shared": "2.2.26", - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "antd": "^5.6.4", "react": "^18.2.0", "react-dom": "^18.2.0", diff --git a/packages/plugins/import/src/client/locale/index.ts b/packages/plugins/import/src/client/locale/index.ts index b0b1d48d5d..3a2a6d6ca7 100644 --- a/packages/plugins/import/src/client/locale/index.ts +++ b/packages/plugins/import/src/client/locale/index.ts @@ -1,2 +1,2 @@ -export { default as enUS } from './en-US'; -export { default as zhCN } from './zh-CN'; +// export { default as enUS } from './en-US'; +// export { default as zhCN } from './zh-CN'; diff --git a/packages/plugins/import/src/client/locale/en-US.ts b/packages/plugins/import/src/locale/en-US.ts similarity index 100% rename from packages/plugins/import/src/client/locale/en-US.ts rename to packages/plugins/import/src/locale/en-US.ts diff --git a/packages/plugins/import/src/client/locale/es-ES.ts b/packages/plugins/import/src/locale/es-ES.ts similarity index 100% rename from packages/plugins/import/src/client/locale/es-ES.ts rename to packages/plugins/import/src/locale/es-ES.ts diff --git a/packages/plugins/import/src/client/locale/pt-BR.ts b/packages/plugins/import/src/locale/pt-BR.ts similarity index 100% rename from packages/plugins/import/src/client/locale/pt-BR.ts rename to packages/plugins/import/src/locale/pt-BR.ts diff --git a/packages/plugins/import/src/client/locale/zh-CN.ts b/packages/plugins/import/src/locale/zh-CN.ts similarity index 73% rename from packages/plugins/import/src/client/locale/zh-CN.ts rename to packages/plugins/import/src/locale/zh-CN.ts index 95ceeffd32..40830edc24 100644 --- a/packages/plugins/import/src/client/locale/zh-CN.ts +++ b/packages/plugins/import/src/locale/zh-CN.ts @@ -20,4 +20,11 @@ export default { Yes: '是', No: '否', 'Field {{fieldName}} does not exist': '字段 {{fieldName}} 不存在', + 'can not find value': '找不到对应值', + 'password is empty': '密码为空', + 'Incorrect time format': '时间格式不正确', + 'Incorrect date format': '日期格式不正确', + 'Incorrect email format': '邮箱格式不正确', + 'Illegal percentage format': '百分比格式有误', + 'Imported template does not match, please download again.': '导入模板不匹配,请检查导入文件标题行或重新下载导入模板', }; diff --git a/packages/plugins/import/src/server/locale/fr-FR.ts b/packages/plugins/import/src/server/locale/fr-FR.ts new file mode 100644 index 0000000000..6294aa1e33 --- /dev/null +++ b/packages/plugins/import/src/server/locale/fr-FR.ts @@ -0,0 +1,10 @@ +export default { + Yes: 'Oui', + No: 'Non', + 'can not find value': 'valeur introuvable', + 'password is empty': 'le mot de passe est vide', + 'Incorrect time format': 'Format de l\'heure incorrect', + 'Incorrect date format': 'Format de la date incorrect', + 'Incorrect email format': 'Format d\'email incorrect', + 'Illegal percentage format': 'Format de pourcentage illégal', +}; diff --git a/packages/plugins/import/src/server/middleware/index.ts b/packages/plugins/import/src/server/middleware/index.ts index 9cbe99e6f4..0be497f3d4 100644 --- a/packages/plugins/import/src/server/middleware/index.ts +++ b/packages/plugins/import/src/server/middleware/index.ts @@ -1,5 +1,5 @@ -import multer from '@koa/multer'; import { Context, Next } from '@nocobase/actions'; +import { koaMulter as multer } from '@nocobase/utils'; export async function importMiddleware(ctx: Context, next: Next) { if (ctx.action.actionName !== 'importXlsx') { diff --git a/packages/plugins/localization-management/package.json b/packages/plugins/localization-management/package.json index eca2fdeb7b..bc12ca3bde 100644 --- a/packages/plugins/localization-management/package.json +++ b/packages/plugins/localization-management/package.json @@ -1,15 +1,15 @@ { "name": "@nocobase/plugin-localization-management", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "lib/server/index.js", "devDependencies": { - "@nocobase/cache": "0.11.1-alpha.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/plugin-client": "0.11.1-alpha.2", - "@nocobase/plugin-ui-schema-storage": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2" + "@nocobase/cache": "0.11.1-alpha.3", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/plugin-client": "0.11.1-alpha.3", + "@nocobase/plugin-ui-schema-storage": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3" }, "dependencies": { "deepmerge": "^4.3.1" diff --git a/packages/plugins/localization-management/src/client/locale/zh-CN.ts b/packages/plugins/localization-management/src/locale/zh-CN.ts similarity index 100% rename from packages/plugins/localization-management/src/client/locale/zh-CN.ts rename to packages/plugins/localization-management/src/locale/zh-CN.ts diff --git a/packages/plugins/localization-management/src/server/actions/localization.ts b/packages/plugins/localization-management/src/server/actions/localization.ts index 941cb98ee3..6b79018589 100644 --- a/packages/plugins/localization-management/src/server/actions/localization.ts +++ b/packages/plugins/localization-management/src/server/actions/localization.ts @@ -1,6 +1,5 @@ import { Context, Next } from '@nocobase/actions'; import { Database, Model, Op } from '@nocobase/database'; -import { getResourceLocale } from '@nocobase/plugin-client'; import { UiSchemaRepository } from '@nocobase/plugin-ui-schema-storage'; import LocalizationManagementPlugin from '../plugin'; import { getTextsFromDBRecord, getTextsFromUISchema } from '../utils'; @@ -10,8 +9,8 @@ const getResourcesInstance = async (ctx: Context) => { return plugin.resources; }; -export const getResources = async (locale: string, db: Database) => { - const resources = await getResourceLocale(locale, db); +export const getResources = async (ctx: Context) => { + const resources = await ctx.app.locales.getCacheResources(ctx.get('X-Locale') || 'en-US'); const client = resources['client']; // Remove duplicated keys Object.keys(resources).forEach((module) => { @@ -24,7 +23,7 @@ export const getResources = async (locale: string, db: Database) => { } }); }); - return resources; + return { ...resources }; }; export const getUISchemas = async (db: Database) => { @@ -174,7 +173,7 @@ const sync = async (ctx: Context, next: Next) => { let resources: { [module: string]: any } = { client: {} }; if (type.includes('local')) { - resources = await getResources(locale, ctx.db); + resources = await getResources(ctx); } if (type.includes('menu')) { const menuTexts = await getTextsFromMenu(ctx.db); diff --git a/packages/plugins/map/package.json b/packages/plugins/map/package.json index 6257d884a1..824df23432 100644 --- a/packages/plugins/map/package.json +++ b/packages/plugins/map/package.json @@ -2,7 +2,7 @@ "name": "@nocobase/plugin-map", "displayName": "Map", "displayName.zh-CN": "地图", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "description": "Provide map fields and blocks", "description.zh-CN": "提供地图字段和区块", "license": "AGPL-3.0", @@ -31,12 +31,12 @@ "@formily/core": "2.2.26", "@formily/react": "2.2.26", "@formily/shared": "2.2.26", - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "antd": "^5.6.4", diff --git a/packages/plugins/mobile-client/src/client/locale/en-US.ts b/packages/plugins/map/src/locale/en-US.ts similarity index 54% rename from packages/plugins/mobile-client/src/client/locale/en-US.ts rename to packages/plugins/map/src/locale/en-US.ts index 53b270f6fe..2d905d194d 100644 --- a/packages/plugins/mobile-client/src/client/locale/en-US.ts +++ b/packages/plugins/map/src/locale/en-US.ts @@ -1,5 +1,3 @@ -const locale = { - -} +const locale = {}; export default locale; diff --git a/packages/plugins/map/src/locale/fr-FR.ts b/packages/plugins/map/src/locale/fr-FR.ts new file mode 100644 index 0000000000..2d905d194d --- /dev/null +++ b/packages/plugins/map/src/locale/fr-FR.ts @@ -0,0 +1,3 @@ +const locale = {}; + +export default locale; diff --git a/packages/plugins/map/src/client/locale/pt-BR.ts b/packages/plugins/map/src/locale/pt-BR.ts similarity index 100% rename from packages/plugins/map/src/client/locale/pt-BR.ts rename to packages/plugins/map/src/locale/pt-BR.ts diff --git a/packages/plugins/map/src/client/locale/zh-CN.ts b/packages/plugins/map/src/locale/zh-CN.ts similarity index 100% rename from packages/plugins/map/src/client/locale/zh-CN.ts rename to packages/plugins/map/src/locale/zh-CN.ts diff --git a/packages/plugins/map/src/server/__tests__/fields.test.ts b/packages/plugins/map/src/server/__tests__/fields.test.ts index a7e891f44e..bf27cb8738 100644 --- a/packages/plugins/map/src/server/__tests__/fields.test.ts +++ b/packages/plugins/map/src/server/__tests__/fields.test.ts @@ -121,30 +121,15 @@ describe('fields', () => { polygon: null, }); - expect(await findOne()).toMatchInlineSnapshot(` - Object { - "circle": Array [ - 114.058996, - 22.549695, - 4171, - ], - "lineString": Array [ - Array [ - 114.047323, - 22.534158, - ], - Array [ - 114.120966, - 22.544146, - ], - ], - "point": Array [ - 1, - 2, - ], - "polygon": null, - } - `); + expect(await findOne()).toMatchObject({ + circle: [114.058996, 22.549695, 4171], + lineString: [ + [114.047323, 22.534158], + [114.120966, 22.544146], + ], + point: [1, 2], + polygon: null, + }); }); it('empty', async () => { @@ -162,13 +147,11 @@ describe('fields', () => { except: ['createdAt', 'updatedAt', 'id'], }); - expect(await findOne()).toMatchInlineSnapshot(` - Object { - "circle": null, - "lineString": null, - "point": null, - "polygon": null, - } - `); + expect(await findOne()).toMatchObject({ + circle: null, + lineString: null, + point: null, + polygon: null, + }); }); }); diff --git a/packages/plugins/math-formula-field/package.json b/packages/plugins/math-formula-field/package.json index fab3dc5d92..8a2d7449e1 100644 --- a/packages/plugins/math-formula-field/package.json +++ b/packages/plugins/math-formula-field/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "数学公式字段", "description": "A powerful mathematical formula field plugin designed to provide flexible mathematical and formula calculation capabilities for databases or data management systems. It seamlessly integrates with various database systems such as MySQL, PostgreSQL, and offers an intuitive user interface for defining and executing mathematical formula fields.", "description.zh-CN": "一个功能强大的数学公式字段插件,旨在为数据库或数据管理系统提供灵活的数学计算和公式计算功能。它可以与各种数据库系统(如MySQL、PostgreSQL)无缝集成,并提供直观的用户界面来定义和执行数学公式字段。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -23,10 +23,10 @@ }, "devDependencies": { "@formily/react": "2.2.26", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", "react": "18.x", "react-i18next": "^11.15.1" } diff --git a/packages/plugins/mobile-client/package.json b/packages/plugins/mobile-client/package.json index 27b477d4e5..7bf03e7cfd 100644 --- a/packages/plugins/mobile-client/package.json +++ b/packages/plugins/mobile-client/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-mobile-client", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "./lib/server/index.js", "files": [ "lib", @@ -22,11 +22,11 @@ "@formily/antd-v5": "^1.1.0-beta.4", "@formily/react": "2.2.26", "@formily/shared": "2.2.26", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "antd": "^5.6.4", diff --git a/packages/plugins/mobile-client/src/locale/en-US.ts b/packages/plugins/mobile-client/src/locale/en-US.ts new file mode 100644 index 0000000000..2d905d194d --- /dev/null +++ b/packages/plugins/mobile-client/src/locale/en-US.ts @@ -0,0 +1,3 @@ +const locale = {}; + +export default locale; diff --git a/packages/plugins/mobile-client/src/locale/fr-FR.ts b/packages/plugins/mobile-client/src/locale/fr-FR.ts new file mode 100644 index 0000000000..2d905d194d --- /dev/null +++ b/packages/plugins/mobile-client/src/locale/fr-FR.ts @@ -0,0 +1,3 @@ +const locale = {}; + +export default locale; diff --git a/packages/plugins/mobile-client/src/client/locale/zh-CN.ts b/packages/plugins/mobile-client/src/locale/zh-CN.ts similarity index 100% rename from packages/plugins/mobile-client/src/client/locale/zh-CN.ts rename to packages/plugins/mobile-client/src/locale/zh-CN.ts diff --git a/packages/plugins/multi-app-manager/package.json b/packages/plugins/multi-app-manager/package.json index c37e1896d8..64ccdbec36 100644 --- a/packages/plugins/multi-app-manager/package.json +++ b/packages/plugins/multi-app-manager/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "多应用管理", "description": "manage app", "description.zh-CN": "管理应用", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -21,11 +21,11 @@ "devDependencies": { "@formily/react": "2.2.26", "@formily/shared": "2.2.26", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "antd": "^5.6.4", "react": "18.x", "react-i18next": "^11.15.1", diff --git a/packages/plugins/multi-app-manager/src/client/locale/es-ES.ts b/packages/plugins/multi-app-manager/src/client/locale/es-ES.ts deleted file mode 100644 index 65de84ff05..0000000000 --- a/packages/plugins/multi-app-manager/src/client/locale/es-ES.ts +++ /dev/null @@ -1,9 +0,0 @@ -export default { - "Multi-app manager": "Gestor de aplicaciones múltiples", - "Applications": "Aplicaciones", - "App display name": "Mostrar nombre de aplicación", - "App ID": "ID de aplicación", - "Pin to menu": " Fijar al menú", - "Custom domain": "Dominio personalizado", - "Manage applications": "Gestionar aplicaciones" -}; diff --git a/packages/plugins/multi-app-manager/src/locale/es-ES.ts b/packages/plugins/multi-app-manager/src/locale/es-ES.ts new file mode 100644 index 0000000000..beacf9530b --- /dev/null +++ b/packages/plugins/multi-app-manager/src/locale/es-ES.ts @@ -0,0 +1,9 @@ +export default { + 'Multi-app manager': 'Gestor de aplicaciones múltiples', + Applications: 'Aplicaciones', + 'App display name': 'Mostrar nombre de aplicación', + 'App ID': 'ID de aplicación', + 'Pin to menu': ' Fijar al menú', + 'Custom domain': 'Dominio personalizado', + 'Manage applications': 'Gestionar aplicaciones', +}; diff --git a/packages/plugins/multi-app-manager/src/client/locale/pt-BR.ts b/packages/plugins/multi-app-manager/src/locale/pt-BR.ts similarity index 100% rename from packages/plugins/multi-app-manager/src/client/locale/pt-BR.ts rename to packages/plugins/multi-app-manager/src/locale/pt-BR.ts diff --git a/packages/plugins/multi-app-manager/src/client/locale/zh-CN.ts b/packages/plugins/multi-app-manager/src/locale/zh-CN.ts similarity index 100% rename from packages/plugins/multi-app-manager/src/client/locale/zh-CN.ts rename to packages/plugins/multi-app-manager/src/locale/zh-CN.ts diff --git a/packages/plugins/multi-app-share-collection/package.json b/packages/plugins/multi-app-share-collection/package.json index 885e36936e..93069391c8 100644 --- a/packages/plugins/multi-app-share-collection/package.json +++ b/packages/plugins/multi-app-share-collection/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "多应用数据共享", "description": "multi app share collection", "description.zh-CN": "多应用数据共享", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "./lib/server/index.js", "files": [ "lib", @@ -19,15 +19,15 @@ ], "devDependencies": { "@formily/react": "2.2.26", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/plugin-collection-manager": "0.11.1-alpha.2", - "@nocobase/plugin-error-handler": "0.11.1-alpha.2", - "@nocobase/plugin-multi-app-manager": "0.11.1-alpha.2", - "@nocobase/plugin-users": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/plugin-collection-manager": "0.11.1-alpha.3", + "@nocobase/plugin-error-handler": "0.11.1-alpha.3", + "@nocobase/plugin-multi-app-manager": "0.11.1-alpha.3", + "@nocobase/plugin-users": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "antd": "^5.6.4", "react": "18.x", "react-i18next": "^11.15.1" diff --git a/packages/plugins/multi-app-share-collection/src/client/locale/es-ES.ts b/packages/plugins/multi-app-share-collection/src/client/locale/es-ES.ts deleted file mode 100644 index f28a6c027e..0000000000 --- a/packages/plugins/multi-app-share-collection/src/client/locale/es-ES.ts +++ /dev/null @@ -1,13 +0,0 @@ -export default { - "Share collections": "Tablas compartidas", - "Unshared collections": "Tablas no compartidas", - "Shared collections": "Tablas compartidas", - "All categories": "Todas las categorías", - "Enter name or title...": "Introducir nombre o título...", - "Are you sure to add the following collections?": "¿Está seguro de que desea añadir las siguientes tablas?", - "Are you sure to remove the following collections?": "¿Está seguro de que desea eliminar las siguientes tablas?", - "Collection display name": "Mostrar nombre de la tabla", - "Collection name": "Nombre de la tabla", - "Collection category": "Categoría de tabla" -}; - diff --git a/packages/plugins/multi-app-share-collection/src/locale/es-ES.ts b/packages/plugins/multi-app-share-collection/src/locale/es-ES.ts new file mode 100644 index 0000000000..eb7fb1e9c7 --- /dev/null +++ b/packages/plugins/multi-app-share-collection/src/locale/es-ES.ts @@ -0,0 +1,12 @@ +export default { + 'Share collections': 'Tablas compartidas', + 'Unshared collections': 'Tablas no compartidas', + 'Shared collections': 'Tablas compartidas', + 'All categories': 'Todas las categorías', + 'Enter name or title...': 'Introducir nombre o título...', + 'Are you sure to add the following collections?': '¿Está seguro de que desea añadir las siguientes tablas?', + 'Are you sure to remove the following collections?': '¿Está seguro de que desea eliminar las siguientes tablas?', + 'Collection display name': 'Mostrar nombre de la tabla', + 'Collection name': 'Nombre de la tabla', + 'Collection category': 'Categoría de tabla', +}; diff --git a/packages/plugins/multi-app-share-collection/src/client/locale/pt-BR.ts b/packages/plugins/multi-app-share-collection/src/locale/pt-BR.ts similarity index 100% rename from packages/plugins/multi-app-share-collection/src/client/locale/pt-BR.ts rename to packages/plugins/multi-app-share-collection/src/locale/pt-BR.ts diff --git a/packages/plugins/multi-app-share-collection/src/client/locale/zh-CN.ts b/packages/plugins/multi-app-share-collection/src/locale/zh-CN.ts similarity index 100% rename from packages/plugins/multi-app-share-collection/src/client/locale/zh-CN.ts rename to packages/plugins/multi-app-share-collection/src/locale/zh-CN.ts diff --git a/packages/plugins/notifications/package.json b/packages/plugins/notifications/package.json index c760c29d5b..6082ab678e 100644 --- a/packages/plugins/notifications/package.json +++ b/packages/plugins/notifications/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-notifications", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "description": "", "license": "AGPL-3.0", "main": "./lib/server/index.js", @@ -20,11 +20,11 @@ "nodemailer": "^6.6.1" }, "devDependencies": { - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "nodemailer-mock": "^1.5.11" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" diff --git a/packages/plugins/oidc/package.json b/packages/plugins/oidc/package.json index b3c4ef634c..c5e0a3d795 100644 --- a/packages/plugins/oidc/package.json +++ b/packages/plugins/oidc/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "OpenID Connect", "description": "Provides OIDC authentication and authorization functionality for applications or authentication systems.", "description.zh-CN": "为应用程序或身份验证系统提供OIDC认证和授权功能。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -22,12 +22,12 @@ "@ant-design/icons": "^5.1.4", "@formily/antd-v5": "1.1.0-beta.4", "@formily/react": "2.2.26", - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/auth": "0.11.1-alpha.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/auth": "0.11.1-alpha.3", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", "ahooks": "^3.7.2", "antd": "^5.6.4", "react": "18.x", diff --git a/packages/plugins/oidc/src/client/locale/en-US.ts b/packages/plugins/oidc/src/locale/en-US.ts similarity index 100% rename from packages/plugins/oidc/src/client/locale/en-US.ts rename to packages/plugins/oidc/src/locale/en-US.ts diff --git a/packages/plugins/oidc/src/client/locale/es-ES.ts b/packages/plugins/oidc/src/locale/es-ES.ts similarity index 100% rename from packages/plugins/oidc/src/client/locale/es-ES.ts rename to packages/plugins/oidc/src/locale/es-ES.ts diff --git a/packages/plugins/oidc/src/locale/fr-FR.ts b/packages/plugins/oidc/src/locale/fr-FR.ts new file mode 100644 index 0000000000..18b00edbfa --- /dev/null +++ b/packages/plugins/oidc/src/locale/fr-FR.ts @@ -0,0 +1,22 @@ +export default { + Enable: 'Activer', + Issuer: 'Issuer', + 'OIDC manager': 'OIDC manager', + 'OIDC Providers': 'OIDC Providers', + 'Provider name': 'Nom', + 'Client id': 'Client id', + 'Client secret': 'Client secret', + 'Openid configuration': 'Openid configuration', + 'Authorization endpoint': 'Authorization endpoint', + 'Access token endpoint': 'Access token endpoint', + 'JWKS endpoint': 'JWKS endpoint', + 'Userinfo endpoint': 'Userinfo endpoint', + 'Redirect url': 'Redirect url', + 'Logout endpoint': 'Logout endpoint', + 'Id token sign alg': 'Id token sign alg', + 'Add provider': 'Ajouter', + 'Edit provider': 'Modifier', + 'Delete provider': 'Supprimer', + 'Sign in button name, which will be displayed on the sign in page': + 'Nom du bouton de connexion, qui sera affiché sur la page de connexion', +}; diff --git a/packages/plugins/saml/src/client/locale/ja-JP.ts b/packages/plugins/oidc/src/locale/ja-JP.ts similarity index 100% rename from packages/plugins/saml/src/client/locale/ja-JP.ts rename to packages/plugins/oidc/src/locale/ja-JP.ts diff --git a/packages/plugins/oidc/src/client/locale/pt-BR.ts b/packages/plugins/oidc/src/locale/pt-BR.ts similarity index 100% rename from packages/plugins/oidc/src/client/locale/pt-BR.ts rename to packages/plugins/oidc/src/locale/pt-BR.ts diff --git a/packages/plugins/saml/src/client/locale/ru-RU.ts b/packages/plugins/oidc/src/locale/ru-RU.ts similarity index 100% rename from packages/plugins/saml/src/client/locale/ru-RU.ts rename to packages/plugins/oidc/src/locale/ru-RU.ts diff --git a/packages/plugins/saml/src/client/locale/tr-TR.ts b/packages/plugins/oidc/src/locale/tr-TR.ts similarity index 100% rename from packages/plugins/saml/src/client/locale/tr-TR.ts rename to packages/plugins/oidc/src/locale/tr-TR.ts diff --git a/packages/plugins/oidc/src/client/locale/zh-CN.ts b/packages/plugins/oidc/src/locale/zh-CN.ts similarity index 100% rename from packages/plugins/oidc/src/client/locale/zh-CN.ts rename to packages/plugins/oidc/src/locale/zh-CN.ts diff --git a/packages/plugins/saml/package.json b/packages/plugins/saml/package.json index 3f2cb40356..82ebf47ac5 100644 --- a/packages/plugins/saml/package.json +++ b/packages/plugins/saml/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "SAML", "description": "Provides SAML authentication and authorization functionality for applications or authentication systems.", "description.zh-CN": "为应用程序或身份验证系统提供SAML认证和授权功能。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -21,12 +21,12 @@ "devDependencies": { "@ant-design/icons": "^5.1.4", "@formily/react": "2.2.26", - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/auth": "0.11.1-alpha.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/auth": "0.11.1-alpha.3", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", "antd": "^5.6.4", "react": "18.x", "react-i18next": "^11.15.1" diff --git a/packages/plugins/saml/src/client/locale/en-US.ts b/packages/plugins/saml/src/locale/en-US.ts similarity index 100% rename from packages/plugins/saml/src/client/locale/en-US.ts rename to packages/plugins/saml/src/locale/en-US.ts diff --git a/packages/plugins/saml/src/client/locale/es-ES.ts b/packages/plugins/saml/src/locale/es-ES.ts similarity index 100% rename from packages/plugins/saml/src/client/locale/es-ES.ts rename to packages/plugins/saml/src/locale/es-ES.ts diff --git a/packages/plugins/saml/src/locale/fr-FR.ts b/packages/plugins/saml/src/locale/fr-FR.ts new file mode 100644 index 0000000000..5d10c14598 --- /dev/null +++ b/packages/plugins/saml/src/locale/fr-FR.ts @@ -0,0 +1,23 @@ +export default { + Edit: 'Modifier', + Delete: 'Supprimer', + Cancel: 'Annuler', + Submit: 'Envoyer', + Actions: 'Actions', + Title: 'Titre', + Enable: 'Activer', + 'SAML manager': 'SAML manager', + 'SAML Providers': 'SAML Providers', + 'Redirect url': 'Url de redirection', + 'SP entity id': 'SP entity id', + 'Add provider': 'Ajouter', + 'Edit provider': 'Modifier', + 'Client id': 'Client id', + 'Entity id or issuer': 'Entity id or issuer', + 'Login Url': 'Url de connexion', + 'Public cert': 'Public cert', + 'Delete provider': 'Supprimer', + 'Are you sure you want to delete it?': 'Êtes-vous sûr de vouloir le supprimer ?', + 'Sign in button name, which will be displayed on the sign in page': + 'Nom du bouton de connexion, qui sera affiché sur la page de connexion', +}; diff --git a/packages/plugins/snapshot-field/src/client/locale/ja-JP.ts b/packages/plugins/saml/src/locale/ja-JP.ts similarity index 100% rename from packages/plugins/snapshot-field/src/client/locale/ja-JP.ts rename to packages/plugins/saml/src/locale/ja-JP.ts diff --git a/packages/plugins/saml/src/client/locale/pt-BR.ts b/packages/plugins/saml/src/locale/pt-BR.ts similarity index 100% rename from packages/plugins/saml/src/client/locale/pt-BR.ts rename to packages/plugins/saml/src/locale/pt-BR.ts diff --git a/packages/plugins/snapshot-field/src/client/locale/ru-RU.ts b/packages/plugins/saml/src/locale/ru-RU.ts similarity index 100% rename from packages/plugins/snapshot-field/src/client/locale/ru-RU.ts rename to packages/plugins/saml/src/locale/ru-RU.ts diff --git a/packages/plugins/snapshot-field/src/client/locale/tr-TR.ts b/packages/plugins/saml/src/locale/tr-TR.ts similarity index 100% rename from packages/plugins/snapshot-field/src/client/locale/tr-TR.ts rename to packages/plugins/saml/src/locale/tr-TR.ts diff --git a/packages/plugins/saml/src/client/locale/zh-CN.ts b/packages/plugins/saml/src/locale/zh-CN.ts similarity index 100% rename from packages/plugins/saml/src/client/locale/zh-CN.ts rename to packages/plugins/saml/src/locale/zh-CN.ts diff --git a/packages/plugins/sequence-field/package.json b/packages/plugins/sequence-field/package.json index 36ef40f18f..99be22e0e2 100644 --- a/packages/plugins/sequence-field/package.json +++ b/packages/plugins/sequence-field/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "字段序列", "description": "provide the functionality of automatically generating unique sequence values for databases or data management systems.", "description.zh-CN": "为数据库或数据管理系统提供自动生成唯一序列值的功能。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -27,12 +27,12 @@ "@formily/antd-v5": "1.1.0-beta.4", "@formily/core": "2.2.26", "@formily/react": "2.2.26", - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/plugin-collection-manager": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/plugin-collection-manager": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "antd": "^5.6.4", "react": "18.x", "react-i18next": "^11.15.1" diff --git a/packages/plugins/sequence-field/src/client/locale/en-US.ts b/packages/plugins/sequence-field/src/locale/en-US.ts similarity index 100% rename from packages/plugins/sequence-field/src/client/locale/en-US.ts rename to packages/plugins/sequence-field/src/locale/en-US.ts diff --git a/packages/plugins/sequence-field/src/client/locale/es-ES.ts b/packages/plugins/sequence-field/src/locale/es-ES.ts similarity index 100% rename from packages/plugins/sequence-field/src/client/locale/es-ES.ts rename to packages/plugins/sequence-field/src/locale/es-ES.ts diff --git a/packages/plugins/sequence-field/src/locale/fr-FR.ts b/packages/plugins/sequence-field/src/locale/fr-FR.ts new file mode 100644 index 0000000000..abd0950538 --- /dev/null +++ b/packages/plugins/sequence-field/src/locale/fr-FR.ts @@ -0,0 +1,24 @@ +export default { + Sequence: 'Séquence', + 'Sequence rules': 'Règles de séquence', + 'Add rule': 'Ajouter une règle', + Inputable: 'Modifiable', + 'Match rules': 'Règles de correspondance', + Type: 'Type', + Autoincrement: 'Incrémentation automatique', + 'Fixed text': 'Texte fixe', + 'Text content': 'Contenu du texte', + 'Rule content': 'Contenu de la règle', + '{{value}} Digits': '{{value}} chiffres', + Digits: 'Chiffres', + 'Start from': 'Commencer à partir de', + 'Starts from {{value}}': 'Commence à partir de {{value}}', + 'Reset cycle': 'Cycle de réinitialisation', + 'No reset': 'Pas de réinitialisation', + Daily: 'Quotidien', + 'Every Monday': 'Chaque lundi', + Monthly: 'Mensuel', + Yearly: 'Annuel', + Operations: 'Opérations', + Customize: 'Personnaliser', +}; diff --git a/packages/plugins/sequence-field/src/client/locale/pt-BR.ts b/packages/plugins/sequence-field/src/locale/pt-BR.ts similarity index 100% rename from packages/plugins/sequence-field/src/client/locale/pt-BR.ts rename to packages/plugins/sequence-field/src/locale/pt-BR.ts diff --git a/packages/plugins/sequence-field/src/client/locale/zh-CN.ts b/packages/plugins/sequence-field/src/locale/zh-CN.ts similarity index 100% rename from packages/plugins/sequence-field/src/client/locale/zh-CN.ts rename to packages/plugins/sequence-field/src/locale/zh-CN.ts diff --git a/packages/plugins/sms-auth/package.json b/packages/plugins/sms-auth/package.json index f18239ebbc..e58fa57315 100644 --- a/packages/plugins/sms-auth/package.json +++ b/packages/plugins/sms-auth/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "短信登录", "description": "SMS authentication function", "description.zh-CN": "提供短信登录认证功能。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "./lib/server/index.js", "files": [ "lib", @@ -19,14 +19,14 @@ ], "devDependencies": { "@formily/react": "2.2.26", - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/auth": "0.11.1-alpha.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/plugin-auth": "0.11.1-alpha.2", - "@nocobase/plugin-verification": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/auth": "0.11.1-alpha.3", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/plugin-auth": "0.11.1-alpha.3", + "@nocobase/plugin-verification": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", "antd": "^5.6.4", "react": "18.x", "react-i18next": "^11.15.1" diff --git a/packages/plugins/sms-auth/src/client/locale/index.ts b/packages/plugins/sms-auth/src/client/locale/index.ts index ba0c934a5f..af716e8135 100644 --- a/packages/plugins/sms-auth/src/client/locale/index.ts +++ b/packages/plugins/sms-auth/src/client/locale/index.ts @@ -1,11 +1,7 @@ -import { i18n } from '@nocobase/client'; import { useTranslation } from 'react-i18next'; -import zhCN from './zh-CN'; export const NAMESPACE = 'sms-auth'; -i18n.addResources('zh-CN', NAMESPACE, zhCN); - export function useAuthTranslation() { return useTranslation(NAMESPACE); } diff --git a/packages/plugins/sms-auth/src/client/locale/zh-CN.ts b/packages/plugins/sms-auth/src/locale/zh-CN.ts similarity index 100% rename from packages/plugins/sms-auth/src/client/locale/zh-CN.ts rename to packages/plugins/sms-auth/src/locale/zh-CN.ts diff --git a/packages/plugins/sms-auth/src/server/locale/fr-FR.ts b/packages/plugins/sms-auth/src/server/locale/fr-FR.ts new file mode 100644 index 0000000000..ea51f6bf9c --- /dev/null +++ b/packages/plugins/sms-auth/src/server/locale/fr-FR.ts @@ -0,0 +1,10 @@ +export default { + 'The email is incorrect, please re-enter': 'L\'email est incorrect, veuillez le saisir à nouveau', + 'Please fill in your email address': 'Veuillez remplir votre adresse e-mail', + 'The password is incorrect, please re-enter': 'Le mot de passe est incorrect, veuillez le saisir à nouveau', + 'Not a valid cellphone number, please re-enter': 'Numéro de téléphone portable invalide, veuillez le saisir à nouveau', + 'The phone number has been registered, please login directly': + 'Le numéro de téléphone a été enregistré, veuillez vous connecter directement', + 'The phone number is not registered, please register first': + 'Le numéro de téléphone n\'est pas enregistré, veuillez vous inscrire d\'abord', +}; diff --git a/packages/plugins/snapshot-field/package.json b/packages/plugins/snapshot-field/package.json index 789183edc1..babb5234a3 100644 --- a/packages/plugins/snapshot-field/package.json +++ b/packages/plugins/snapshot-field/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "关系数据库快照", "description": "provide fast and reliable database backup and recovery functionality for database systems.", "description.zh-CN": "为数据库系统提供快速、可靠的数据库备份和恢复功能。。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -23,11 +23,11 @@ "@formily/core": "2.2.26", "@formily/react": "2.2.26", "@formily/shared": "2.2.26", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "antd": "^5.6.4", "rc-tree-select": "5.5.5", "react": "18.x", diff --git a/packages/plugins/snapshot-field/src/client/locale/en-US.ts b/packages/plugins/snapshot-field/src/locale/en-US.ts similarity index 100% rename from packages/plugins/snapshot-field/src/client/locale/en-US.ts rename to packages/plugins/snapshot-field/src/locale/en-US.ts diff --git a/packages/plugins/snapshot-field/src/client/locale/es-ES.ts b/packages/plugins/snapshot-field/src/locale/es-ES.ts similarity index 100% rename from packages/plugins/snapshot-field/src/client/locale/es-ES.ts rename to packages/plugins/snapshot-field/src/locale/es-ES.ts diff --git a/packages/plugins/snapshot-field/src/locale/fr-FR.ts b/packages/plugins/snapshot-field/src/locale/fr-FR.ts new file mode 100644 index 0000000000..655155a8ab --- /dev/null +++ b/packages/plugins/snapshot-field/src/locale/fr-FR.ts @@ -0,0 +1,12 @@ +export default { + Detail: 'Détail', + Snapshot: 'Snapshot', + 'View record': "Voir l'enregistrement", + 'Add block': 'Ajouter un bloc', + 'Allow linking to multiple records': 'Autoriser la liaison à plusieurs enregistrements', + 'When adding a new record, create a snapshot for its relational record and save in the current record. The snapshot is not updated when the record is subsequently updated.': + "Lors de l'ajout d'un nouvel enregistrement, créez un snapshot pour son enregistrement relationnel et enregistrez-le dans l'enregistrement actuel. Le snapshot n'est pas mis à jour lorsque l'enregistrement est ultérieurement modifié.", + 'The association field to snapshot': "Le champ d'association à un snapshot", + "Snapshot the snapshot's association fields": "Snapshot des champs d'association du snapshot", + 'Please select': 'Veuillez sélectionner', +}; diff --git a/packages/plugins/snapshot-field/src/locale/ja-JP.ts b/packages/plugins/snapshot-field/src/locale/ja-JP.ts new file mode 100644 index 0000000000..ff8b4c5632 --- /dev/null +++ b/packages/plugins/snapshot-field/src/locale/ja-JP.ts @@ -0,0 +1 @@ +export default {}; diff --git a/packages/plugins/snapshot-field/src/client/locale/pt-BR.ts b/packages/plugins/snapshot-field/src/locale/pt-BR.ts similarity index 100% rename from packages/plugins/snapshot-field/src/client/locale/pt-BR.ts rename to packages/plugins/snapshot-field/src/locale/pt-BR.ts diff --git a/packages/plugins/snapshot-field/src/locale/ru-RU.ts b/packages/plugins/snapshot-field/src/locale/ru-RU.ts new file mode 100644 index 0000000000..ff8b4c5632 --- /dev/null +++ b/packages/plugins/snapshot-field/src/locale/ru-RU.ts @@ -0,0 +1 @@ +export default {}; diff --git a/packages/plugins/snapshot-field/src/locale/tr-TR.ts b/packages/plugins/snapshot-field/src/locale/tr-TR.ts new file mode 100644 index 0000000000..ff8b4c5632 --- /dev/null +++ b/packages/plugins/snapshot-field/src/locale/tr-TR.ts @@ -0,0 +1 @@ +export default {}; diff --git a/packages/plugins/snapshot-field/src/client/locale/zh-CN.ts b/packages/plugins/snapshot-field/src/locale/zh-CN.ts similarity index 100% rename from packages/plugins/snapshot-field/src/client/locale/zh-CN.ts rename to packages/plugins/snapshot-field/src/locale/zh-CN.ts diff --git a/packages/plugins/system-settings/package.json b/packages/plugins/system-settings/package.json index 75e8f1742f..112d10fcf5 100644 --- a/packages/plugins/system-settings/package.json +++ b/packages/plugins/system-settings/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "系统配置", "description": "A plugin specifically designed to adjust the system-level settings of NocoBase.", "description.zh-CN": "用于调整 nocobase 的系统级设置。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -19,10 +19,10 @@ "client.d.ts" ], "devDependencies": { - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2" + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/theme-editor/package.json b/packages/plugins/theme-editor/package.json index 9464065684..8d4d5f1e21 100644 --- a/packages/plugins/theme-editor/package.json +++ b/packages/plugins/theme-editor/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-theme-editor", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "lib/server/index.js", "displayName": "Theme editor", "displayName.zh-CN": "主题编辑器", @@ -21,11 +21,11 @@ "@ant-design/cssinjs": "^1.11.1", "@ant-design/icons": "^5.1.4", "@emotion/css": "^11.11.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "antd": "^5.6.4", "lodash": "4.17.21", "react": "^18.2.0" diff --git a/packages/plugins/theme-editor/src/client/antd-token-previewer/locale/fr-FR.ts b/packages/plugins/theme-editor/src/client/antd-token-previewer/locale/fr-FR.ts new file mode 100644 index 0000000000..3defd37d19 --- /dev/null +++ b/packages/plugins/theme-editor/src/client/antd-token-previewer/locale/fr-FR.ts @@ -0,0 +1,20 @@ +import type { Locale } from './interface'; + +const locale: Locale = { + _lang: 'fr-FR', + followPrimary: 'Suivre la couleur du branding', + reset: 'Réinitialiser', + next: 'Suivant', + groupView: 'Vue groupe', + fill: 'Remplir', + border: 'Bordure', + background: 'Arrière-plan', + text: 'Texte', + demo: { + overview: 'Aperçu', + components: 'Composants', + relatedTokens: 'Jetons associés', + }, +}; + +export default locale; diff --git a/packages/plugins/theme-editor/src/client/locale/en-US.ts b/packages/plugins/theme-editor/src/locale/en-US.ts similarity index 100% rename from packages/plugins/theme-editor/src/client/locale/en-US.ts rename to packages/plugins/theme-editor/src/locale/en-US.ts diff --git a/packages/plugins/theme-editor/src/locale/fr-FR.ts b/packages/plugins/theme-editor/src/locale/fr-FR.ts new file mode 100644 index 0000000000..c0ee955046 --- /dev/null +++ b/packages/plugins/theme-editor/src/locale/fr-FR.ts @@ -0,0 +1,26 @@ +const locale = { + Theme: 'Thème', + Local: 'Local', + 'Dark theme': 'Thème sombre', + Optional: 'Optionnel', + 'Non-optional': 'Non-optionnel', + Current: 'Actuel', + Default: 'Par défaut', + + // 主题编辑器 + 'Theme Editor': 'Éditeur de thème', + Save: 'Enregistrer', + Close: 'Fermer', + Edit: 'Modifier', + Export: 'Exporter', + 'edit Theme Config': 'Modifier la configuration du thème', + 'The theme of the JSON format is incorrect': 'Le thème au format JSON est incorrect', + 'Edited successfully': 'Modifié avec succès', + 'Saved successfully': 'Enregistré avec succès', + 'Initializing Editor...': "Initialisation de l'éditeur...", + 'Save theme': 'Enregistrer le thème', + 'Please set a name for this theme': 'Veuillez définir un nom pour ce thème', + 'Please input the theme name': 'Veuillez saisir le nom du thème', +}; + +export default locale; diff --git a/packages/plugins/theme-editor/src/client/locale/zh-CN.ts b/packages/plugins/theme-editor/src/locale/zh-CN.ts similarity index 100% rename from packages/plugins/theme-editor/src/client/locale/zh-CN.ts rename to packages/plugins/theme-editor/src/locale/zh-CN.ts diff --git a/packages/plugins/ui-routes-storage/package.json b/packages/plugins/ui-routes-storage/package.json index 7ec6d46f16..c520428f9c 100644 --- a/packages/plugins/ui-routes-storage/package.json +++ b/packages/plugins/ui-routes-storage/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "路由管理", "description": "manage the routes of nocobase", "description.zh-CN": "管理页面路由。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -22,11 +22,11 @@ "flat-to-nested": "^1.1.1" }, "devDependencies": { - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2" + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/ui-schema-storage/package.json b/packages/plugins/ui-schema-storage/package.json index 15b314346d..cd3300717a 100644 --- a/packages/plugins/ui-schema-storage/package.json +++ b/packages/plugins/ui-schema-storage/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "UI schema", "description": "A plugin used for managing page UI schemas.", "description.zh-CN": "UI schema 配置。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -20,16 +20,16 @@ ], "devDependencies": { "@formily/json-schema": "2.2.26", - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/cache": "0.11.1-alpha.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/plugin-error-handler": "0.11.1-alpha.2", - "@nocobase/plugin-users": "0.11.1-alpha.2", - "@nocobase/resourcer": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2" + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/cache": "0.11.1-alpha.3", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/plugin-error-handler": "0.11.1-alpha.3", + "@nocobase/plugin-users": "0.11.1-alpha.3", + "@nocobase/resourcer": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/users/package.json b/packages/plugins/users/package.json index e587b0e109..743575783c 100644 --- a/packages/plugins/users/package.json +++ b/packages/plugins/users/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "用户管理", "description": "manage the uses of nocobase system", "description.zh-CN": "管理系统用户", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -23,15 +23,15 @@ "jsonwebtoken": "^8.5.1" }, "devDependencies": { - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/plugin-acl": "0.11.1-alpha.2", - "@nocobase/plugin-auth": "0.11.1-alpha.2", - "@nocobase/resourcer": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2" + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/plugin-acl": "0.11.1-alpha.3", + "@nocobase/plugin-auth": "0.11.1-alpha.3", + "@nocobase/resourcer": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/plugins/users/src/locale/en-US.ts b/packages/plugins/users/src/locale/en-US.ts new file mode 100644 index 0000000000..8da957a8b4 --- /dev/null +++ b/packages/plugins/users/src/locale/en-US.ts @@ -0,0 +1,10 @@ +export default { + 'The email is incorrect, please re-enter': 'The email is incorrect, please re-enter', + 'Please fill in your email address': 'Please fill in your email address', + 'The password is incorrect, please re-enter': 'The password is incorrect, please re-enter', + 'Not a valid cellphone number, please re-enter': 'Not a valid cellphone number, please re-enter', + 'The phone number has been registered, please login directly': + 'The phone number has been registered, please login directly', + 'The phone number is not registered, please register first': + 'The phone number is not registered, please register first', +}; diff --git a/packages/plugins/users/src/locale/es-ES.ts b/packages/plugins/users/src/locale/es-ES.ts new file mode 100644 index 0000000000..d5c3193377 --- /dev/null +++ b/packages/plugins/users/src/locale/es-ES.ts @@ -0,0 +1,8 @@ +export default { + "The email is incorrect, please re-enter": "El correo electrónico es incorrecto, por favor vuelva a introducirlo", + "Please fill in your email address": "Por favor, introduzca su dirección de correo electrónico", + "The password is incorrect, please re-enter": "La contraseña es incorrecta, por favor, vuelva a introducirla", + "Not a valid cellphone number, please re-enter": "No es un número de móvil válido, por favor, vuelva a introducirlo", + "The phone number has been registered, please login directly": "El número de teléfono ha sido registrado, por favor, inicie sesión directamente", + "The phone number is not registered, please register first": "El número de teléfono no está registrado, por favor regístrese primero" +}; \ No newline at end of file diff --git a/packages/plugins/users/src/locale/fr-FR.ts b/packages/plugins/users/src/locale/fr-FR.ts new file mode 100644 index 0000000000..4dfacf6b7c --- /dev/null +++ b/packages/plugins/users/src/locale/fr-FR.ts @@ -0,0 +1,11 @@ +export default { + 'The email is incorrect, please re-enter': "L'adresse e-mail est incorrecte, veuillez la saisir à nouveau", + 'Please fill in your email address': 'Veuillez remplir votre adresse e-mail', + 'The password is incorrect, please re-enter': 'Le mot de passe est incorrect, veuillez le saisir à nouveau', + 'Not a valid cellphone number, please re-enter': + 'Numéro de téléphone portable invalide, veuillez le saisir à nouveau', + 'The phone number has been registered, please login directly': + 'Le numéro de téléphone a été enregistré, veuillez vous connecter directement', + 'The phone number is not registered, please register first': + "Le numéro de téléphone n'est pas enregistré, veuillez vous inscrire d'abord", +}; diff --git a/packages/plugins/users/src/locale/ja-JP.ts b/packages/plugins/users/src/locale/ja-JP.ts new file mode 100644 index 0000000000..5af98b70f1 --- /dev/null +++ b/packages/plugins/users/src/locale/ja-JP.ts @@ -0,0 +1,4 @@ +export default { + 'Please fill in your email address': 'メールアドレスを入力してください', + 'The password is incorrect, please re-enter': 'パスワードが正しくありません。再度入力してください。', +}; diff --git a/packages/plugins/users/src/locale/pt-BR.ts b/packages/plugins/users/src/locale/pt-BR.ts new file mode 100644 index 0000000000..d6b5f77ec1 --- /dev/null +++ b/packages/plugins/users/src/locale/pt-BR.ts @@ -0,0 +1,10 @@ +export default { + 'The email is incorrect, please re-enter': 'O e-mail está incorreto, por favor, digite novamente', + 'Please fill in your email address': 'Por favor, preencha o seu endereço de e-mail', + 'The password is incorrect, please re-enter': 'A senha está incorreta, por favor, digite novamente', + 'Not a valid cellphone number, please re-enter': 'Número de celular inválido, por favor, digite novamente', + 'The phone number has been registered, please login directly': + 'O número de celular já está registrado, por favor, faça login diretamente', + 'The phone number is not registered, please register first': + 'O número de celular não está registrado, por favor, registre-se primeiro', +}; diff --git a/packages/plugins/users/src/locale/zh-CN.ts b/packages/plugins/users/src/locale/zh-CN.ts new file mode 100644 index 0000000000..a8650e64b8 --- /dev/null +++ b/packages/plugins/users/src/locale/zh-CN.ts @@ -0,0 +1,8 @@ +export default { + 'The email is incorrect, please re-enter': '邮箱有误,请重新输入', + 'Please fill in your email address': '请填写邮箱', + 'The password is incorrect, please re-enter': '密码有误,请重新输入', + 'Not a valid cellphone number, please re-enter': '不是有效的手机号,请重新输入', + 'The phone number has been registered, please login directly': '手机号已注册,请直接登录', + 'The phone number is not registered, please register first': '手机号未注册,请先注册', +}; diff --git a/packages/plugins/users/src/server/__tests__/utils.ts b/packages/plugins/users/src/server/__tests__/utils.ts index 53d9f3e52b..baa1589e35 100644 --- a/packages/plugins/users/src/server/__tests__/utils.ts +++ b/packages/plugins/users/src/server/__tests__/utils.ts @@ -1,4 +1,4 @@ -import { UserPluginConfig } from '..'; +import { UserPluginConfig } from '../server'; export const userPluginConfig: UserPluginConfig = { name: 'users', diff --git a/packages/plugins/users/src/server/locale/fr-FR.ts b/packages/plugins/users/src/server/locale/fr-FR.ts new file mode 100644 index 0000000000..4dfacf6b7c --- /dev/null +++ b/packages/plugins/users/src/server/locale/fr-FR.ts @@ -0,0 +1,11 @@ +export default { + 'The email is incorrect, please re-enter': "L'adresse e-mail est incorrecte, veuillez la saisir à nouveau", + 'Please fill in your email address': 'Veuillez remplir votre adresse e-mail', + 'The password is incorrect, please re-enter': 'Le mot de passe est incorrect, veuillez le saisir à nouveau', + 'Not a valid cellphone number, please re-enter': + 'Numéro de téléphone portable invalide, veuillez le saisir à nouveau', + 'The phone number has been registered, please login directly': + 'Le numéro de téléphone a été enregistré, veuillez vous connecter directement', + 'The phone number is not registered, please register first': + "Le numéro de téléphone n'est pas enregistré, veuillez vous inscrire d'abord", +}; diff --git a/packages/plugins/verification/package.json b/packages/plugins/verification/package.json index 5810c113c6..2a8a2b308c 100644 --- a/packages/plugins/verification/package.json +++ b/packages/plugins/verification/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "验证码", "description": "verification setting.", "description.zh-CN": "验证码配置。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -29,13 +29,13 @@ "@formily/core": "2.2.26", "@formily/react": "2.2.26", "@formily/shared": "2.2.26", - "@nocobase/actions": "0.11.1-alpha.2", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/resourcer": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", - "@nocobase/utils": "0.11.1-alpha.2", + "@nocobase/actions": "0.11.1-alpha.3", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/resourcer": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", + "@nocobase/utils": "0.11.1-alpha.3", "antd": "^5.6.4", "react": "18.x", "react-i18next": "^11.15.1" diff --git a/packages/plugins/verification/src/client/locale/pt-BR.ts b/packages/plugins/verification/src/locale/pt-BR.ts similarity index 100% rename from packages/plugins/verification/src/client/locale/pt-BR.ts rename to packages/plugins/verification/src/locale/pt-BR.ts diff --git a/packages/plugins/verification/src/client/locale/zh-CN.ts b/packages/plugins/verification/src/locale/zh-CN.ts similarity index 54% rename from packages/plugins/verification/src/client/locale/zh-CN.ts rename to packages/plugins/verification/src/locale/zh-CN.ts index 814ba398a9..a4d281553f 100644 --- a/packages/plugins/verification/src/client/locale/zh-CN.ts +++ b/packages/plugins/verification/src/locale/zh-CN.ts @@ -17,4 +17,10 @@ export default { 'Sign name': '短信签名内容', 'Sms sdk app id': '短信应用 ID', 'Template Id': '短信模板 ID', + + 'Verification send failed, please try later or contact to administrator': '验证码发送失败,请稍后重试或联系管理员', + 'Not a valid cellphone number, please re-enter': '不是有效的手机号,请重新输入', + "Please don't retry in {{time}} seconds": '请 {{time}} 秒后再试', + 'You are trying so frequently, please slow down': '您的操作太频繁,请稍后再试', + 'Verification code is invalid': '无效的验证码', }; diff --git a/packages/plugins/workflow/package.json b/packages/plugins/workflow/package.json index 4f60ea0de3..11e7fa5861 100644 --- a/packages/plugins/workflow/package.json +++ b/packages/plugins/workflow/package.json @@ -4,7 +4,7 @@ "displayName.zh-CN": "工作流", "description": "A powerful workflow plugin designed to support business process management and automation.", "description.zh-CN": "工作流插件,为业务流程管理和自动化提供支持。", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "files": [ @@ -48,7 +48,7 @@ "winston": "^3.8.2" }, "devDependencies": { - "@nocobase/test": "0.11.1-alpha.2", + "@nocobase/test": "0.11.1-alpha.3", "@types/ejs": "^3.1.1" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" diff --git a/packages/plugins/workflow/src/client/components/DynamicExpression.tsx b/packages/plugins/workflow/src/client/components/DynamicExpression.tsx index 385b998f73..777173bd28 100644 --- a/packages/plugins/workflow/src/client/components/DynamicExpression.tsx +++ b/packages/plugins/workflow/src/client/components/DynamicExpression.tsx @@ -1,5 +1,5 @@ import { onFieldInputValueChange, onFormInitialValuesChange } from '@formily/core'; -import { connect, mapReadPretty, observer, useForm, useFormEffects } from '@formily/react'; +import { connect, mapReadPretty, observer, useField, useForm, useFormEffects } from '@formily/react'; import { Tag } from 'antd'; import React, { useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; @@ -12,16 +12,20 @@ import { getCollectionFieldOptions } from '../variable'; const InternalExpression = observer( (props: any) => { const { onChange } = props; - const { values } = useForm(); - const [collection, setCollection] = useState(values?.sourceCollection); + const field = useField(); + // TODO(refactor): better to provide another context like useFieldset() + const form = useForm(); + const basePath = field.path.segments.slice(0, -1); + const collectionPath = [...basePath, 'sourceCollection'].join('.'); + const [collection, setCollection] = useState(form.getValuesIn(collectionPath)); const compile = useCompile(); const { getCollectionFields } = useCollectionManager(); useFormEffects(() => { onFormInitialValuesChange((form) => { - setCollection(form.values.sourceCollection); + setCollection(form.getValuesIn(collectionPath)); }); - onFieldInputValueChange('sourceCollection', (f) => { + onFieldInputValueChange(collectionPath, (f) => { setCollection(f.value); onChange(null); }); diff --git a/packages/plugins/workflow/src/client/nodes/index.tsx b/packages/plugins/workflow/src/client/nodes/index.tsx index 5613f5e233..6646924f7f 100644 --- a/packages/plugins/workflow/src/client/nodes/index.tsx +++ b/packages/plugins/workflow/src/client/nodes/index.tsx @@ -441,10 +441,25 @@ export function NodeDefaultView(props) { 'x-component': 'fieldset', 'x-component-props': { className: css` + .ant-input, .ant-select, .ant-cascader-picker, .ant-picker, .ant-input-number, + .ant-input-affix-wrapper { + &:not(.full-width) { + width: auto; + min-width: 6em; + } + } + .ant-input-affix-wrapper { + &:not(.full-width) { + .ant-input { + width: auto; + min-width: 6em; + } + } + } `, }, properties: instruction.fieldset, diff --git a/packages/plugins/workflow/src/client/style.tsx b/packages/plugins/workflow/src/client/style.tsx index be0b7f2a0e..3f14dcae6b 100644 --- a/packages/plugins/workflow/src/client/style.tsx +++ b/packages/plugins/workflow/src/client/style.tsx @@ -96,7 +96,7 @@ const useStyles = createStyles(({ css, token }) => { bottom: 0; left: calc(50% - 0.5px); width: 1px; - background-color: ${token.colorBorder}; + background-color: ${token.colorBgLayout}; } `, @@ -220,7 +220,9 @@ const useStyles = createStyles(({ css, token }) => { font-weight: bold; &:not(:focus) { - transition: background-color 0.3s ease, border-color 0.3s ease; + transition: + background-color 0.3s ease, + border-color 0.3s ease; border-color: ${token.colorBorderBg}; background-color: ${token.colorBgContainerDisabled}; @@ -254,7 +256,7 @@ const useStyles = createStyles(({ css, token }) => { right: 1em; justify-content: center; align-items: center; - color: ${token.colorText}; + color: ${token.colorTextLightSolid}; &[type='button'] { border: none; @@ -327,6 +329,7 @@ const useStyles = createStyles(({ css, token }) => { top: calc(1.5em - 1px); line-height: 1em; color: ${token.colorTextSecondary}; + background-color: ${token.colorBgLayout}; padding: 1px; } `, diff --git a/packages/plugins/workflow/src/client/locale/en-US.ts b/packages/plugins/workflow/src/locale/en-US.ts similarity index 100% rename from packages/plugins/workflow/src/client/locale/en-US.ts rename to packages/plugins/workflow/src/locale/en-US.ts diff --git a/packages/plugins/workflow/src/client/locale/es-ES.ts b/packages/plugins/workflow/src/locale/es-ES.ts similarity index 100% rename from packages/plugins/workflow/src/client/locale/es-ES.ts rename to packages/plugins/workflow/src/locale/es-ES.ts diff --git a/packages/plugins/workflow/src/locale/fr-FR.ts b/packages/plugins/workflow/src/locale/fr-FR.ts new file mode 100644 index 0000000000..a7d58324bf --- /dev/null +++ b/packages/plugins/workflow/src/locale/fr-FR.ts @@ -0,0 +1,137 @@ +export default { + Workflow: 'Workflow', + 'Execution history': "Historique d'exécution", + Executed: 'Exécuté', + 'Trigger type': 'Type de déclencheur', + Status: 'Statut', + On: 'Activé', + Off: 'Désactivé', + Version: 'Version', + 'Copy to new version': 'Copier vers une nouvelle version', + Duplicate: 'Dupliquer', + Loading: 'Chargement', + 'Load failed': 'Échec du chargement', + Trigger: 'Déclencheur', + 'Trigger variables': 'Variables de déclenchement', + 'Trigger data': 'Données de déclenchement', + 'Trigger time': 'Temps de déclenchement', + 'Triggered at': 'Déclenché à', + 'Collection event': 'Événement de collection', + 'Trigger on': 'Déclencher sur', + 'After record added': "Après l'ajout d'un enregistrement", + 'After record updated': "Après la mise à jour d'un enregistrement", + 'After record added or updated': "Après l'ajout ou la mise à jour d'un enregistrement", + 'After record deleted': "Après la suppression d'un enregistrement", + 'Changed fields': 'Champs modifiés', + 'Triggered only if one of the selected fields changes. If unselected, it means that it will be triggered when any field changes. When record is added or deleted, any field is considered to have been changed.': + "Déclenché uniquement si l'un des champs sélectionnés change. S'il n'est pas sélectionné, cela signifie qu'il sera déclenché lorsque n'importe quel champ change. Lorsque l'enregistrement est ajouté ou supprimé, n'importe quel champ est considéré comme ayant été modifié.", + 'Only triggers when match conditions': 'Déclenche uniquement lorsque les conditions correspondent', + 'Schedule event': 'Événement planifié', + 'Trigger mode': 'Mode de déclenchement', + 'Based on certain date': 'Basé sur une date spécifique', + 'Based on date field of collection': 'Basé sur le champ de date de la collection', + 'Starts on': 'Commence le', + 'Ends on': 'Se termine le', + 'No end': 'Pas de fin', + 'Exactly at': 'Exactement à', + 'Repeat mode': 'Mode de répétition', + 'Repeat limit': 'Limite de répétition', + 'No limit': 'Pas de limite', + Seconds: 'Secondes', + Minutes: 'Minutes', + Hours: 'Heures', + Days: 'Jours', + Weeks: 'Semaines', + Months: 'Mois', + 'No repeat': 'Pas de répétition', + Every: 'Chaque', + 'By minute': 'Par minute', + 'By hour': 'Par heure', + 'By day': 'Par jour', + 'By week': 'Par semaine', + 'By month': 'Par mois', + 'By field': 'Par champ', + 'By custom date': 'Par date personnalisée', + Advanced: 'Avancé', + End: 'Fin', + 'Node result': 'Résultat du nœud', + Constant: 'Constante', + Null: 'Null', + Boolean: 'Booléen', + String: 'Chaîne de caractères', + Calculator: 'Calculatrice', + 'Arithmetic calculation': 'Calcul arithmétique', + 'String operation': 'Opération sur les chaînes de caractères', + 'Executed at': 'Exécuté à', + Queueing: 'En attente', + 'On going': 'En cours', + Succeeded: 'Réussi', + Failed: 'Échoué', + Pending: 'En attente', + Canceled: 'Annulé', + 'This node contains branches, deleting will also be preformed to them, are you sure?': + 'Ce nœud contient des branches, leur suppression sera également effectuée, êtes-vous sûr(e) ?', + Control: 'Contrôle', + 'Collection operations': 'Opérations sur la collection', + 'Extended types': 'Types étendus', + 'Node type': 'Type de nœud', + Calculation: 'Calcul', + 'Configure calculation': 'Configurer le calcul', + 'Calculation result': 'Résultat du calcul', + True: 'Vrai', + False: 'Faux', + concat: 'concat', + Condition: 'Condition', + Mode: 'Mode', + 'Continue when "Yes"': 'Continuer quand "Oui"', + 'Branch into "Yes" and "No"': 'Brancher sur "Oui" et "Non"', + Conditions: 'Conditions', + 'Parallel branch': 'Branche parallèle', + 'Add branch': 'Ajouter une branche', + 'All succeeded': 'Tous réussis', + 'Any succeeded': 'Un réussi', + 'Any succeeded or failed': 'Un réussi ou un échoué', + 'Continue after all branches succeeded': 'Continuer après la réussite de toutes les branches', + 'Continue after any branch succeeded': "Continuer après la réussite d'une branche", + 'Continue after any branch succeeded, or exit after any branch failed': + "Continuer après la réussite d'une branche, ou quitter après l'échec d'une branche", + Delay: 'Délai', + Duration: 'Durée', + 'End Status': 'Statut de fin', + 'Select status': 'Sélectionner un statut', + 'Succeed and continue': 'Réussir et continuer', + 'Fail and exit': 'Échouer et quitter', + 'Create record': 'Créer un enregistrement', + 'Update record': 'Mettre à jour un enregistrement', + 'Query record': 'Interroger un enregistrement', + 'Multiple records': 'Multiples enregistrements', + 'Please select collection first': "Veuillez d'abord sélectionner une collection", + 'Only update records matching conditions': + 'Mettre à jour uniquement les enregistrements correspondant aux conditions', + 'Fields that are not assigned a value will be set to the default value, and those that do not have a default value are set to null.': + "Les champs qui ne reçoivent pas de valeur seront définis sur la valeur par défaut, et ceux qui n'ont pas de valeur par défaut seront définis sur null.", + 'Trigger in executed workflow cannot be modified': 'Le déclencheur dans le workflow exécuté ne peut pas être modifié', + 'Node in executed workflow cannot be modified': 'Le nœud dans le workflow exécuté ne peut pas être modifié', + 'Can not delete': 'Impossible de supprimer', + 'The result of this node has been referenced by other nodes ({{nodes}}), please remove the usage before deleting.': + "Le résultat de ce nœud a été référencé par d'autres nœuds ({{nodes}}), veuillez supprimer son utilisation avant de le supprimer.", + + 'HTTP request': 'Requête HTTP', + 'HTTP method': 'Méthode HTTP', + URL: 'URL', + Headers: 'En-têtes', + 'Add request header': 'Ajouter un en-tête de requête', + Parameters: 'Paramètres', + 'Add parameter': 'Ajouter un paramètre', + Body: 'Corps', + 'Use variable': 'Utiliser une variable', + Format: 'Format', + Insert: 'Insérer', + 'Timeout config': "Configuration du délai d'expiration", + ms: 'ms', + 'Input request data': 'Entrée des données de requête', + 'Only support standard JSON data': 'Prend uniquement en charge les données JSON standard', + '"Content-Type" only support "application/json", and no need to specify': + '"Content-Type" prend uniquement en charge "application/json" et n\'a pas besoin d\'être spécifié', + 'Ignore fail request and continue workflow': "Ignorer l'échec de la requête et continuer le workflow", +}; diff --git a/packages/plugins/workflow/src/client/locale/ja-JP.ts b/packages/plugins/workflow/src/locale/ja-JP.ts similarity index 100% rename from packages/plugins/workflow/src/client/locale/ja-JP.ts rename to packages/plugins/workflow/src/locale/ja-JP.ts diff --git a/packages/plugins/workflow/src/client/locale/pt-BR.ts b/packages/plugins/workflow/src/locale/pt-BR.ts similarity index 100% rename from packages/plugins/workflow/src/client/locale/pt-BR.ts rename to packages/plugins/workflow/src/locale/pt-BR.ts diff --git a/packages/plugins/workflow/src/client/locale/ru-RU.ts b/packages/plugins/workflow/src/locale/ru-RU.ts similarity index 100% rename from packages/plugins/workflow/src/client/locale/ru-RU.ts rename to packages/plugins/workflow/src/locale/ru-RU.ts diff --git a/packages/plugins/workflow/src/client/locale/tr-TR.ts b/packages/plugins/workflow/src/locale/tr-TR.ts similarity index 100% rename from packages/plugins/workflow/src/client/locale/tr-TR.ts rename to packages/plugins/workflow/src/locale/tr-TR.ts diff --git a/packages/plugins/workflow/src/client/locale/zh-CN.ts b/packages/plugins/workflow/src/locale/zh-CN.ts similarity index 100% rename from packages/plugins/workflow/src/client/locale/zh-CN.ts rename to packages/plugins/workflow/src/locale/zh-CN.ts diff --git a/packages/plugins/workflow/src/server/triggers/schedule.ts b/packages/plugins/workflow/src/server/triggers/schedule.ts index 48ddaeb673..31a7fd3ab1 100644 --- a/packages/plugins/workflow/src/server/triggers/schedule.ts +++ b/packages/plugins/workflow/src/server/triggers/schedule.ts @@ -424,6 +424,10 @@ export default class ScheduleTrigger extends Trigger { } init() { + if (this.plugin.app.name !== 'main') { + return; + } + if (this.timer) { return; } @@ -435,7 +439,7 @@ export default class ScheduleTrigger extends Trigger { this.run, // NOTE: // try to align to system time on each second starts, - // after at least 1 second initialized for anything to get ready. + // after at least 1 second initialized for everything to get ready. // so jobs in 2 seconds will be missed at first start. 1_000 - now.getMilliseconds(), ); diff --git a/packages/presets/nocobase/package.json b/packages/presets/nocobase/package.json index 1f6626cb88..1e8e4793f7 100644 --- a/packages/presets/nocobase/package.json +++ b/packages/presets/nocobase/package.json @@ -1,47 +1,47 @@ { "name": "@nocobase/preset-nocobase", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "license": "AGPL-3.0", "main": "./lib/server/index.js", "dependencies": { - "@nocobase/plugin-acl": "0.11.1-alpha.2", - "@nocobase/plugin-api-keys": "0.11.1-alpha.2", - "@nocobase/plugin-audit-logs": "0.11.1-alpha.2", - "@nocobase/plugin-auth": "0.11.1-alpha.2", - "@nocobase/plugin-charts": "0.11.1-alpha.2", - "@nocobase/plugin-china-region": "0.11.1-alpha.2", - "@nocobase/plugin-client": "0.11.1-alpha.2", - "@nocobase/plugin-collection-manager": "0.11.1-alpha.2", - "@nocobase/plugin-data-visualization": "0.11.1-alpha.2", - "@nocobase/plugin-duplicator": "0.11.1-alpha.2", - "@nocobase/plugin-error-handler": "0.11.1-alpha.2", - "@nocobase/plugin-excel-formula-field": "0.11.1-alpha.2", - "@nocobase/plugin-export": "0.11.1-alpha.2", - "@nocobase/plugin-file-manager": "0.11.1-alpha.2", - "@nocobase/plugin-formula-field": "0.11.1-alpha.2", - "@nocobase/plugin-graph-collection-manager": "0.11.1-alpha.2", - "@nocobase/plugin-iframe-block": "0.11.1-alpha.2", - "@nocobase/plugin-import": "0.11.1-alpha.2", - "@nocobase/plugin-localization-management": "0.11.1-alpha.2", - "@nocobase/plugin-map": "0.11.1-alpha.2", - "@nocobase/plugin-math-formula-field": "0.11.1-alpha.2", - "@nocobase/plugin-mobile-client": "0.11.1-alpha.2", - "@nocobase/plugin-multi-app-manager": "0.11.1-alpha.2", - "@nocobase/plugin-multi-app-share-collection": "0.11.1-alpha.2", - "@nocobase/plugin-oidc": "0.11.1-alpha.2", - "@nocobase/plugin-saml": "0.11.1-alpha.2", - "@nocobase/plugin-sample-hello": "0.11.1-alpha.2", - "@nocobase/plugin-sequence-field": "0.11.1-alpha.2", - "@nocobase/plugin-sms-auth": "0.11.1-alpha.2", - "@nocobase/plugin-snapshot-field": "0.11.1-alpha.2", - "@nocobase/plugin-system-settings": "0.11.1-alpha.2", - "@nocobase/plugin-theme-editor": "0.11.1-alpha.2", - "@nocobase/plugin-ui-routes-storage": "0.11.1-alpha.2", - "@nocobase/plugin-ui-schema-storage": "0.11.1-alpha.2", - "@nocobase/plugin-users": "0.11.1-alpha.2", - "@nocobase/plugin-verification": "0.11.1-alpha.2", - "@nocobase/plugin-workflow": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2" + "@nocobase/plugin-acl": "0.11.1-alpha.3", + "@nocobase/plugin-api-keys": "0.11.1-alpha.3", + "@nocobase/plugin-audit-logs": "0.11.1-alpha.3", + "@nocobase/plugin-auth": "0.11.1-alpha.3", + "@nocobase/plugin-charts": "0.11.1-alpha.3", + "@nocobase/plugin-china-region": "0.11.1-alpha.3", + "@nocobase/plugin-client": "0.11.1-alpha.3", + "@nocobase/plugin-collection-manager": "0.11.1-alpha.3", + "@nocobase/plugin-data-visualization": "0.11.1-alpha.3", + "@nocobase/plugin-duplicator": "0.11.1-alpha.3", + "@nocobase/plugin-error-handler": "0.11.1-alpha.3", + "@nocobase/plugin-excel-formula-field": "0.11.1-alpha.3", + "@nocobase/plugin-export": "0.11.1-alpha.3", + "@nocobase/plugin-file-manager": "0.11.1-alpha.3", + "@nocobase/plugin-formula-field": "0.11.1-alpha.3", + "@nocobase/plugin-graph-collection-manager": "0.11.1-alpha.3", + "@nocobase/plugin-iframe-block": "0.11.1-alpha.3", + "@nocobase/plugin-import": "0.11.1-alpha.3", + "@nocobase/plugin-localization-management": "0.11.1-alpha.3", + "@nocobase/plugin-map": "0.11.1-alpha.3", + "@nocobase/plugin-math-formula-field": "0.11.1-alpha.3", + "@nocobase/plugin-mobile-client": "0.11.1-alpha.3", + "@nocobase/plugin-multi-app-manager": "0.11.1-alpha.3", + "@nocobase/plugin-multi-app-share-collection": "0.11.1-alpha.3", + "@nocobase/plugin-oidc": "0.11.1-alpha.3", + "@nocobase/plugin-saml": "0.11.1-alpha.3", + "@nocobase/plugin-sample-hello": "0.11.1-alpha.3", + "@nocobase/plugin-sequence-field": "0.11.1-alpha.3", + "@nocobase/plugin-sms-auth": "0.11.1-alpha.3", + "@nocobase/plugin-snapshot-field": "0.11.1-alpha.3", + "@nocobase/plugin-system-settings": "0.11.1-alpha.3", + "@nocobase/plugin-theme-editor": "0.11.1-alpha.3", + "@nocobase/plugin-ui-routes-storage": "0.11.1-alpha.3", + "@nocobase/plugin-ui-schema-storage": "0.11.1-alpha.3", + "@nocobase/plugin-users": "0.11.1-alpha.3", + "@nocobase/plugin-verification": "0.11.1-alpha.3", + "@nocobase/plugin-workflow": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3" }, "repository": { "type": "git", diff --git a/packages/samples/command/package.json b/packages/samples/command/package.json index 4395d54c6d..b1ea6596ae 100644 --- a/packages/samples/command/package.json +++ b/packages/samples/command/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-sample-command", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "./lib/server/index.js", "files": [ "lib", @@ -14,9 +14,9 @@ "client.d.ts" ], "devDependencies": { - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2" + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/samples/custom-block/package.json b/packages/samples/custom-block/package.json index c1b371f7f0..a711a0be52 100644 --- a/packages/samples/custom-block/package.json +++ b/packages/samples/custom-block/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-sample-custom-block", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "./lib/server/index.js", "files": [ "lib", @@ -16,9 +16,9 @@ "devDependencies": { "@ant-design/icons": "^5.1.4", "@formily/react": "2.2.26", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", "react": "^18.2.0", "react-i18next": "^11.15.1" }, diff --git a/packages/samples/custom-collection-template/package.json b/packages/samples/custom-collection-template/package.json index 1bf2e1247f..6537fc438f 100644 --- a/packages/samples/custom-collection-template/package.json +++ b/packages/samples/custom-collection-template/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-sample-custom-collection-template", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "./lib/server/index.js", "files": [ "lib", @@ -14,9 +14,9 @@ "client.d.ts" ], "devDependencies": { - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2" + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/samples/custom-page/package.json b/packages/samples/custom-page/package.json index b3b1a71b8c..204a403a0f 100644 --- a/packages/samples/custom-page/package.json +++ b/packages/samples/custom-page/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-sample-custom-page", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "./lib/server/index.js", "files": [ "lib", @@ -14,9 +14,9 @@ "client.d.ts" ], "devDependencies": { - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", "react": "^18.2.0" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" diff --git a/packages/samples/custom-signup-page/package.json b/packages/samples/custom-signup-page/package.json index 839aa74de2..fd489941dc 100644 --- a/packages/samples/custom-signup-page/package.json +++ b/packages/samples/custom-signup-page/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-sample-custom-signup-page", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "./lib/server/index.js", "files": [ "lib", @@ -15,9 +15,9 @@ ], "devDependencies": { "@formily/react": "2.2.26", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", "react": "^18.2.0" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" diff --git a/packages/samples/hello/package.json b/packages/samples/hello/package.json index 4a420e5c15..4f0908ae47 100644 --- a/packages/samples/hello/package.json +++ b/packages/samples/hello/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-sample-hello", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "./lib/server/index.js", "files": [ "lib", @@ -20,9 +20,9 @@ "devDependencies": { "@ant-design/icons": "^5.1.4", "@formily/react": "2.2.26", - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", "antd": "^5.6.4", "react": "^18.2.0", "react-i18next": "^11.15.1" diff --git a/packages/samples/ratelimit/package.json b/packages/samples/ratelimit/package.json index ee49d228e2..c20e38ee90 100644 --- a/packages/samples/ratelimit/package.json +++ b/packages/samples/ratelimit/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-sample-ratelimit", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "./lib/server/index.js", "files": [ "lib", @@ -17,9 +17,9 @@ "koa-ratelimit": "^5.0.1" }, "devDependencies": { - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2" + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/samples/shop-actions/package.json b/packages/samples/shop-actions/package.json index 0244c75624..7ee162f21f 100644 --- a/packages/samples/shop-actions/package.json +++ b/packages/samples/shop-actions/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-sample-shop-actions", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "./lib/server/index.js", "files": [ "lib", @@ -14,9 +14,9 @@ "client.d.ts" ], "devDependencies": { - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2" + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/samples/shop-events/package.json b/packages/samples/shop-events/package.json index 72e0562792..2348662a94 100644 --- a/packages/samples/shop-events/package.json +++ b/packages/samples/shop-events/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-sample-shop-events", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "./lib/server/index.js", "files": [ "lib", @@ -14,9 +14,9 @@ "client.d.ts" ], "devDependencies": { - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2" + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/packages/samples/shop-i18n/package.json b/packages/samples/shop-i18n/package.json index b0d49a07b9..bfdab16f2a 100644 --- a/packages/samples/shop-i18n/package.json +++ b/packages/samples/shop-i18n/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-sample-shop-i18n", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "./lib/server/index.js", "files": [ "lib", @@ -17,9 +17,9 @@ "nodejs-snowflake": "2.0.1" }, "devDependencies": { - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2", + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3", "antd": "^5.6.4", "react": "^18.2.0", "react-i18next": "^11.15.1" diff --git a/packages/samples/shop-modeling/package.json b/packages/samples/shop-modeling/package.json index 70156d5a31..54c6911fbd 100644 --- a/packages/samples/shop-modeling/package.json +++ b/packages/samples/shop-modeling/package.json @@ -1,6 +1,6 @@ { "name": "@nocobase/plugin-sample-shop-modeling", - "version": "0.11.1-alpha.2", + "version": "0.11.1-alpha.3", "main": "./lib/server/index.js", "files": [ "lib", @@ -17,10 +17,10 @@ "nodejs-snowflake": "2.0.1" }, "devDependencies": { - "@nocobase/client": "0.11.1-alpha.2", - "@nocobase/database": "0.11.1-alpha.2", - "@nocobase/server": "0.11.1-alpha.2", - "@nocobase/test": "0.11.1-alpha.2" + "@nocobase/client": "0.11.1-alpha.3", + "@nocobase/database": "0.11.1-alpha.3", + "@nocobase/server": "0.11.1-alpha.3", + "@nocobase/test": "0.11.1-alpha.3" }, "gitHead": "ce588eefb0bfc50f7d5bbee575e0b5e843bf6644" } diff --git a/yarn.lock b/yarn.lock index cf73fd23ad..49bc6f9cba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -153,7 +153,6 @@ "@ant-design/cssinjs@^1.11.1": version "1.13.2" resolved "https://registry.npmmirror.com/@ant-design/cssinjs/-/cssinjs-1.13.2.tgz#833098a6866a9f754e31562b0d5dc8b1133648d9" - integrity sha512-II3QJx6V6boYkAIUiEd1/hquSeX1r67sUOtsvco35fTmV46JvkJz946/6K+ikiuODBSE1kLf7fJ5gHetQyUyww== dependencies: "@babel/runtime" "^7.11.1" "@emotion/hash" "^0.8.0" @@ -1066,7 +1065,7 @@ json5 "^2.2.2" semver "^6.3.0" -"@babel/core@7.22.5", "@babel/core@^7.1.0", "@babel/core@^7.1.2", "@babel/core@^7.1.6", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.14.6", "@babel/core@^7.17.9", "@babel/core@^7.19.6", "@babel/core@^7.21.4", "@babel/core@^7.22.5", "@babel/core@^7.7.5": +"@babel/core@7.22.5", "@babel/core@^7.1.0", "@babel/core@^7.1.2", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.14.6", "@babel/core@^7.17.9", "@babel/core@^7.19.6", "@babel/core@^7.21.4", "@babel/core@^7.22.5": version "7.22.5" resolved "https://registry.npmmirror.com/@babel/core/-/core-7.22.5.tgz#d67d9747ecf26ee7ecd3ebae1ee22225fe902a89" dependencies: @@ -1122,6 +1121,15 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" +"@babel/generator@^7.7.2": + version "7.22.9" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz#572ecfa7a31002fa1de2a9d91621fd895da8493d" + dependencies: + "@babel/types" "^7.22.5" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + "@babel/helper-annotate-as-pure@^7.16.0", "@babel/helper-annotate-as-pure@^7.22.5": version "7.22.5" resolved "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" @@ -1304,7 +1312,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.0", "@babel/parser@^7.22.5", "@babel/parser@^7.4.3", "@babel/parser@^7.4.5": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.0", "@babel/parser@^7.22.5", "@babel/parser@^7.4.3", "@babel/parser@^7.4.5": version "7.22.5" resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" @@ -1469,7 +1477,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" -"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.4.4": +"@babel/plugin-proposal-object-rest-spread@^7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.4.4": version "7.20.7" resolved "https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" dependencies: @@ -1593,12 +1601,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz#163b820b9e7696ce134df3ee716d9c0c98035859" - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-function-bind@^7.2.0": version "7.22.5" resolved "https://registry.npmmirror.com/@babel/plugin-syntax-function-bind/-/plugin-syntax-function-bind-7.22.5.tgz#4a01aa675dac0431b47eb440900ed0d4efd54d50" @@ -1629,7 +1631,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.22.5": +"@babel/plugin-syntax-jsx@^7.22.5", "@babel/plugin-syntax-jsx@^7.7.2": version "7.22.5" resolved "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" dependencies: @@ -1689,7 +1691,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.22.5": +"@babel/plugin-syntax-typescript@^7.22.5", "@babel/plugin-syntax-typescript@^7.7.2": version "7.22.5" resolved "https://registry.npmmirror.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" dependencies: @@ -1819,13 +1821,6 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-flow-strip-types@^7.22.5": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz#0bb17110c7bf5b35a60754b2f00c58302381dee2" - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-flow" "^7.22.5" - "@babel/plugin-transform-for-of@^7.12.1", "@babel/plugin-transform-for-of@^7.22.5", "@babel/plugin-transform-for-of@^7.4.4": version "7.22.5" resolved "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" @@ -2263,7 +2258,7 @@ js-levenshtein "^1.1.3" semver "^5.5.0" -"@babel/preset-env@^7.1.0", "@babel/preset-env@^7.1.6", "@babel/preset-env@^7.12.1": +"@babel/preset-env@^7.1.0", "@babel/preset-env@^7.12.1": version "7.22.5" resolved "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.22.5.tgz#3da66078b181f3d62512c51cf7014392c511504e" dependencies: @@ -2348,14 +2343,6 @@ core-js-compat "^3.30.2" semver "^6.3.0" -"@babel/preset-flow@^7.0.0": - version "7.22.5" - resolved "https://registry.npmmirror.com/@babel/preset-flow/-/preset-flow-7.22.5.tgz#876f24ab6b38bd79703a93f32020ca2162312784" - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.5" - "@babel/plugin-transform-flow-strip-types" "^7.22.5" - "@babel/preset-modules@^0.1.3", "@babel/preset-modules@^0.1.5": version "0.1.5" resolved "https://registry.npmmirror.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" @@ -2404,7 +2391,7 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-typescript" "^7.3.2" -"@babel/register@7.22.5", "@babel/register@^7.0.0": +"@babel/register@7.22.5": version "7.22.5" resolved "https://registry.npmmirror.com/@babel/register/-/register-7.22.5.tgz#e4d8d0f615ea3233a27b5c6ada6750ee59559939" dependencies: @@ -3091,7 +3078,7 @@ version "0.18.11" resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.18.11.tgz#6526c7e1b40d5b9f0a222c6b767c22f6fb97aa57" -"@eslint-community/eslint-utils@^4.2.0": +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.npmmirror.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" dependencies: @@ -3101,6 +3088,10 @@ version "4.5.1" resolved "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" +"@eslint-community/regexpp@^4.5.1": + version "4.6.1" + resolved "https://registry.npmmirror.com/@eslint-community/regexpp/-/regexpp-4.6.1.tgz#0b371c118b8e4ebf9dbddb56120ab4befd791211" + "@eslint/eslintrc@^2.1.0": version "2.1.0" resolved "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d" @@ -3394,15 +3385,27 @@ chalk "^2.0.1" slash "^2.0.0" -"@jest/console@^26.6.2": - version "26.6.2" - resolved "https://registry.npmmirror.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" +"@jest/console@^29.6.1": + version "29.6.1" + resolved "https://registry.npmjs.org/@jest/console/-/console-29.6.1.tgz#b48ba7b9c34b51483e6d590f46e5837f1ab5f639" dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.6.1" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^26.6.2" - jest-util "^26.6.2" + jest-message-util "^29.6.1" + jest-util "^29.6.1" + slash "^3.0.0" + +"@jest/console@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.6.2.tgz#bf1d4101347c23e07c029a1b1ae07d550f5cc541" + integrity sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w== + dependencies: + "@jest/types" "^29.6.1" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.6.2" + jest-util "^29.6.2" slash "^3.0.0" "@jest/core@^24.9.0": @@ -3438,36 +3441,70 @@ slash "^2.0.0" strip-ansi "^5.0.0" -"@jest/core@^26.6.3": - version "26.6.3" - resolved "https://registry.npmmirror.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" +"@jest/core@^29.6.1": + version "29.6.1" + resolved "https://registry.npmjs.org/@jest/core/-/core-29.6.1.tgz#fac0d9ddf320490c93356ba201451825231e95f6" dependencies: - "@jest/console" "^26.6.2" - "@jest/reporters" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.6.1" + "@jest/reporters" "^29.6.1" + "@jest/test-result" "^29.6.1" + "@jest/transform" "^29.6.1" + "@jest/types" "^29.6.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" + ci-info "^3.2.0" exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^26.6.2" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-resolve-dependencies "^26.6.3" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - jest-watcher "^26.6.2" - micromatch "^4.0.2" - p-each-series "^2.1.0" - rimraf "^3.0.0" + graceful-fs "^4.2.9" + jest-changed-files "^29.5.0" + jest-config "^29.6.1" + jest-haste-map "^29.6.1" + jest-message-util "^29.6.1" + jest-regex-util "^29.4.3" + jest-resolve "^29.6.1" + jest-resolve-dependencies "^29.6.1" + jest-runner "^29.6.1" + jest-runtime "^29.6.1" + jest-snapshot "^29.6.1" + jest-util "^29.6.1" + jest-validate "^29.6.1" + jest-watcher "^29.6.1" + micromatch "^4.0.4" + pretty-format "^29.6.1" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/core@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.6.2.tgz#6f2d1dbe8aa0265fcd4fb8082ae1952f148209c8" + integrity sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg== + dependencies: + "@jest/console" "^29.6.2" + "@jest/reporters" "^29.6.2" + "@jest/test-result" "^29.6.2" + "@jest/transform" "^29.6.2" + "@jest/types" "^29.6.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.5.0" + jest-config "^29.6.2" + jest-haste-map "^29.6.2" + jest-message-util "^29.6.2" + jest-regex-util "^29.4.3" + jest-resolve "^29.6.2" + jest-resolve-dependencies "^29.6.2" + jest-runner "^29.6.2" + jest-runtime "^29.6.2" + jest-snapshot "^29.6.2" + jest-util "^29.6.2" + jest-validate "^29.6.2" + jest-watcher "^29.6.2" + micromatch "^4.0.4" + pretty-format "^29.6.2" slash "^3.0.0" strip-ansi "^6.0.0" @@ -3480,14 +3517,24 @@ "@jest/types" "^24.9.0" jest-mock "^24.9.0" -"@jest/environment@^26.6.2": - version "26.6.2" - resolved "https://registry.npmmirror.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" +"@jest/environment@^29.6.1": + version "29.6.1" + resolved "https://registry.npmjs.org/@jest/environment/-/environment-29.6.1.tgz#ee358fff2f68168394b4a50f18c68278a21fe82f" dependencies: - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/fake-timers" "^29.6.1" + "@jest/types" "^29.6.1" "@types/node" "*" - jest-mock "^26.6.2" + jest-mock "^29.6.1" + +"@jest/environment@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.6.2.tgz#794c0f769d85e7553439d107d3f43186dc6874a9" + integrity sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q== + dependencies: + "@jest/fake-timers" "^29.6.2" + "@jest/types" "^29.6.1" + "@types/node" "*" + jest-mock "^29.6.2" "@jest/expect-utils@^29.5.0": version "29.5.0" @@ -3495,6 +3542,34 @@ dependencies: jest-get-type "^29.4.3" +"@jest/expect-utils@^29.6.1": + version "29.6.1" + resolved "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.1.tgz#ab83b27a15cdd203fe5f68230ea22767d5c3acc5" + dependencies: + jest-get-type "^29.4.3" + +"@jest/expect-utils@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.6.2.tgz#1b97f290d0185d264dd9fdec7567a14a38a90534" + integrity sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg== + dependencies: + jest-get-type "^29.4.3" + +"@jest/expect@^29.6.1": + version "29.6.1" + resolved "https://registry.npmjs.org/@jest/expect/-/expect-29.6.1.tgz#fef18265188f6a97601f1ea0a2912d81a85b4657" + dependencies: + expect "^29.6.1" + jest-snapshot "^29.6.1" + +"@jest/expect@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.6.2.tgz#5a2ad58bb345165d9ce0a1845bbf873c480a4b28" + integrity sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg== + dependencies: + expect "^29.6.2" + jest-snapshot "^29.6.2" + "@jest/fake-timers@^24.9.0": version "24.9.0" resolved "https://registry.npmmirror.com/@jest/fake-timers/-/fake-timers-24.9.0.tgz#ba3e6bf0eecd09a636049896434d306636540c93" @@ -3503,24 +3578,47 @@ jest-message-util "^24.9.0" jest-mock "^24.9.0" -"@jest/fake-timers@^26.6.2": - version "26.6.2" - resolved "https://registry.npmmirror.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" +"@jest/fake-timers@^29.6.1": + version "29.6.1" + resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.1.tgz#c773efddbc61e1d2efcccac008139f621de57c69" dependencies: - "@jest/types" "^26.6.2" - "@sinonjs/fake-timers" "^6.0.1" + "@jest/types" "^29.6.1" + "@sinonjs/fake-timers" "^10.0.2" "@types/node" "*" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-util "^26.6.2" + jest-message-util "^29.6.1" + jest-mock "^29.6.1" + jest-util "^29.6.1" -"@jest/globals@^26.6.2": - version "26.6.2" - resolved "https://registry.npmmirror.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" +"@jest/fake-timers@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.6.2.tgz#fe9d43c5e4b1b901168fe6f46f861b3e652a2df4" + integrity sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA== dependencies: - "@jest/environment" "^26.6.2" - "@jest/types" "^26.6.2" - expect "^26.6.2" + "@jest/types" "^29.6.1" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.6.2" + jest-mock "^29.6.2" + jest-util "^29.6.2" + +"@jest/globals@^29.6.1": + version "29.6.1" + resolved "https://registry.npmjs.org/@jest/globals/-/globals-29.6.1.tgz#c8a8923e05efd757308082cc22893d82b8aa138f" + dependencies: + "@jest/environment" "^29.6.1" + "@jest/expect" "^29.6.1" + "@jest/types" "^29.6.1" + jest-mock "^29.6.1" + +"@jest/globals@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.6.2.tgz#74af81b9249122cc46f1eb25793617eec69bf21a" + integrity sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw== + dependencies: + "@jest/environment" "^29.6.2" + "@jest/expect" "^29.6.2" + "@jest/types" "^29.6.1" + jest-mock "^29.6.2" "@jest/reporters@^24.9.0": version "24.9.0" @@ -3548,36 +3646,64 @@ source-map "^0.6.0" string-length "^2.0.0" -"@jest/reporters@^26.6.2": - version "26.6.2" - resolved "https://registry.npmmirror.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" +"@jest/reporters@^29.6.1": + version "29.6.1" + resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.1.tgz#3325a89c9ead3cf97ad93df3a427549d16179863" dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.6.1" + "@jest/test-result" "^29.6.1" + "@jest/transform" "^29.6.1" + "@jest/types" "^29.6.1" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" + glob "^7.1.3" + graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" + istanbul-lib-instrument "^5.1.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^26.6.2" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" + istanbul-reports "^3.1.3" + jest-message-util "^29.6.1" + jest-util "^29.6.1" + jest-worker "^29.6.1" slash "^3.0.0" - source-map "^0.6.0" string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" - optionalDependencies: - node-notifier "^8.0.0" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/reporters@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.6.2.tgz#524afe1d76da33d31309c2c4a2c8062d0c48780a" + integrity sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.6.2" + "@jest/test-result" "^29.6.2" + "@jest/transform" "^29.6.2" + "@jest/types" "^29.6.1" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.6.2" + jest-util "^29.6.2" + jest-worker "^29.6.2" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" "@jest/schemas@^29.4.3": version "29.4.3" @@ -3585,6 +3711,12 @@ dependencies: "@sinclair/typebox" "^0.25.16" +"@jest/schemas@^29.6.0": + version "29.6.0" + resolved "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz#0f4cb2c8e3dca80c135507ba5635a4fd755b0040" + dependencies: + "@sinclair/typebox" "^0.27.8" + "@jest/source-map@^24.3.0", "@jest/source-map@^24.9.0": version "24.9.0" resolved "https://registry.npmmirror.com/@jest/source-map/-/source-map-24.9.0.tgz#0e263a94430be4b41da683ccc1e6bffe2a191714" @@ -3593,13 +3725,13 @@ graceful-fs "^4.1.15" source-map "^0.6.0" -"@jest/source-map@^26.6.2": - version "26.6.2" - resolved "https://registry.npmmirror.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" +"@jest/source-map@^29.6.0": + version "29.6.0" + resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz#bd34a05b5737cb1a99d43e1957020ac8e5b9ddb1" dependencies: + "@jridgewell/trace-mapping" "^0.3.18" callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" + graceful-fs "^4.2.9" "@jest/test-result@^24.9.0": version "24.9.0" @@ -3609,12 +3741,22 @@ "@jest/types" "^24.9.0" "@types/istanbul-lib-coverage" "^2.0.0" -"@jest/test-result@^26.6.2": - version "26.6.2" - resolved "https://registry.npmmirror.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" +"@jest/test-result@^29.6.1": + version "29.6.1" + resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.1.tgz#850e565a3f58ee8ca6ec424db00cb0f2d83c36ba" dependencies: - "@jest/console" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.6.1" + "@jest/types" "^29.6.1" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-result@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.6.2.tgz#fdd11583cd1608e4db3114e8f0cce277bf7a32ed" + integrity sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw== + dependencies: + "@jest/console" "^29.6.2" + "@jest/types" "^29.6.1" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" @@ -3627,15 +3769,24 @@ jest-runner "^24.9.0" jest-runtime "^24.9.0" -"@jest/test-sequencer@^26.6.3": - version "26.6.3" - resolved "https://registry.npmmirror.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" +"@jest/test-sequencer@^29.6.1": + version "29.6.1" + resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.1.tgz#e3e582ee074dd24ea9687d7d1aaf05ee3a9b068e" dependencies: - "@jest/test-result" "^26.6.2" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" + "@jest/test-result" "^29.6.1" + graceful-fs "^4.2.9" + jest-haste-map "^29.6.1" + slash "^3.0.0" + +"@jest/test-sequencer@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz#585eff07a68dd75225a7eacf319780cb9f6b9bf4" + integrity sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw== + dependencies: + "@jest/test-result" "^29.6.2" + graceful-fs "^4.2.9" + jest-haste-map "^29.6.2" + slash "^3.0.0" "@jest/transform@^24.9.0": version "24.9.0" @@ -3658,26 +3809,6 @@ source-map "^0.6.1" write-file-atomic "2.4.1" -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.npmmirror.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - "@jest/transform@^29.5.0": version "29.5.0" resolved "https://registry.npmmirror.com/@jest/transform/-/transform-29.5.0.tgz#cf9c872d0965f0cbd32f1458aa44a2b1988b00f9" @@ -3698,6 +3829,47 @@ slash "^3.0.0" write-file-atomic "^4.0.2" +"@jest/transform@^29.6.1": + version "29.6.1" + resolved "https://registry.npmjs.org/@jest/transform/-/transform-29.6.1.tgz#acb5606019a197cb99beda3c05404b851f441c92" + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.1" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.6.1" + jest-regex-util "^29.4.3" + jest-util "^29.6.1" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + +"@jest/transform@^29.6.2": + version "29.6.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.6.2.tgz#522901ebbb211af08835bc3bcdf765ab778094e3" + integrity sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.1" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.6.2" + jest-regex-util "^29.4.3" + jest-util "^29.6.2" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + "@jest/types@27.5.1": version "27.5.1" resolved "https://registry.npmmirror.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" @@ -3716,16 +3888,6 @@ "@types/istanbul-reports" "^1.1.1" "@types/yargs" "^13.0.0" -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.npmmirror.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - "@jest/types@^29.5.0": version "29.5.0" resolved "https://registry.npmmirror.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" @@ -3737,6 +3899,17 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" +"@jest/types@^29.6.1": + version "29.6.1" + resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz#ae79080278acff0a6af5eb49d063385aaa897bf2" + dependencies: + "@jest/schemas" "^29.6.0" + "@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", "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" resolved "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" @@ -3779,7 +3952,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.15", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": version "0.3.18" resolved "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" dependencies: @@ -4450,13 +4623,6 @@ semver "^7.3.5" tar "^6.1.11" -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.npmmirror.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" resolved "https://registry.npmmirror.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129" @@ -4490,10 +4656,6 @@ version "2.0.5" resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" @@ -4920,6 +5082,10 @@ version "1.7.1" resolved "https://registry.npmjs.org/@remix-run/router/-/router-1.7.1.tgz#fea7ac35ae4014637c130011f59428f618730498" +"@remix-run/router@1.7.2": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.7.2.tgz#cba1cf0a04bc04cb66027c51fa600e9cbc388bc8" + "@restart/hooks@^0.4.7": version "0.4.9" resolved "https://registry.npmmirror.com/@restart/hooks/-/hooks-0.4.9.tgz#ad858fb39d99e252cccce19416adc18fc3f18fcb" @@ -5019,21 +5185,25 @@ version "0.25.24" resolved "https://registry.npmmirror.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.npmmirror.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" -"@sinonjs/commons@^1.7.0": - version "1.8.6" - resolved "https://registry.npmmirror.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.npmmirror.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" dependencies: - "@sinonjs/commons" "^1.7.0" + "@sinonjs/commons" "^3.0.0" "@sketch-hq/sketch-file-format-ts@^6": version "6.5.0" @@ -5702,7 +5872,7 @@ version "5.0.1" resolved "https://registry.npmmirror.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc" -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.7": +"@types/babel__core@^7.1.0", "@types/babel__core@^7.1.14": version "7.20.1" resolved "https://registry.npmmirror.com/@types/babel__core/-/babel__core-7.20.1.tgz#916ecea274b0c776fec721e333e55762d3a9614b" dependencies: @@ -5725,7 +5895,7 @@ "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": version "7.20.1" resolved "https://registry.npmmirror.com/@types/babel__traverse/-/babel__traverse-7.20.1.tgz#dd6f1d2411ae677dcb2db008c962598be31d6acf" dependencies: @@ -6033,7 +6203,7 @@ version "3.53.4" resolved "https://registry.npmmirror.com/@types/google.maps/-/google.maps-3.53.4.tgz#741442764ebaef1a6705f3ab2c047ffeba333020" -"@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": +"@types/graceful-fs@^4.1.3": version "4.1.6" resolved "https://registry.npmmirror.com/@types/graceful-fs/-/graceful-fs-4.1.6.tgz#e14b2576a1c25026b7f02ede1de3b84c3a1efeae" dependencies: @@ -6104,18 +6274,18 @@ expect "^29.0.0" pretty-format "^29.0.0" -"@types/jest@^26.0.0": - version "26.0.24" - resolved "https://registry.npmmirror.com/@types/jest/-/jest-26.0.24.tgz#943d11976b16739185913a1936e0de0c4a7d595a" +"@types/jest@^29.0.0": + version "29.5.3" + resolved "https://registry.npmjs.org/@types/jest/-/jest-29.5.3.tgz#7a35dc0044ffb8b56325c6802a4781a626b05777" dependencies: - jest-diff "^26.0.0" - pretty-format "^26.0.0" + expect "^29.0.0" + pretty-format "^29.0.0" "@types/js-cookie@^2.x.x": version "2.2.7" resolved "https://registry.npmmirror.com/@types/js-cookie/-/js-cookie-2.2.7.tgz#226a9e31680835a6188e887f3988e60c04d3f6a3" -"@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": +"@types/json-schema@^7.0.12", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": version "7.0.12" resolved "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" @@ -6284,9 +6454,9 @@ dependencies: "@types/express" "*" -"@types/prettier@^2.0.0": +"@types/prettier@^2.1.5": version "2.7.3" - resolved "https://registry.npmmirror.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" "@types/prop-types@*": version "15.7.5" @@ -6361,7 +6531,7 @@ version "0.16.3" resolved "https://registry.npmmirror.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" -"@types/semver@^7.3.12", "@types/semver@^7.3.9": +"@types/semver@^7.3.12", "@types/semver@^7.3.9", "@types/semver@^7.5.0": version "7.5.0" resolved "https://registry.npmmirror.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" @@ -6460,12 +6630,6 @@ dependencies: "@types/yargs-parser" "*" -"@types/yargs@^15.0.0": - version "15.0.15" - resolved "https://registry.npmmirror.com/@types/yargs/-/yargs-15.0.15.tgz#e609a2b1ef9e05d90489c2f5f45bbfb2be092158" - dependencies: - "@types/yargs-parser" "*" - "@types/yargs@^16.0.0": version "16.0.5" resolved "https://registry.npmmirror.com/@types/yargs/-/yargs-16.0.5.tgz#12cc86393985735a283e387936398c2f9e5f88e3" @@ -6492,37 +6656,31 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/eslint-plugin@^5.59.1": - version "5.61.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.61.0.tgz#a1a5290cf33863b4db3fb79350b3c5275a7b1223" +"@typescript-eslint/eslint-plugin@^6.2.0": + version "6.2.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.2.0.tgz#57047c400be0632d4797ac081af8d399db3ebc3b" dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.61.0" - "@typescript-eslint/type-utils" "5.61.0" - "@typescript-eslint/utils" "5.61.0" + "@eslint-community/regexpp" "^4.5.1" + "@typescript-eslint/scope-manager" "6.2.0" + "@typescript-eslint/type-utils" "6.2.0" + "@typescript-eslint/utils" "6.2.0" + "@typescript-eslint/visitor-keys" "6.2.0" debug "^4.3.4" graphemer "^1.4.0" - ignore "^5.2.0" + ignore "^5.2.4" + natural-compare "^1.4.0" natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" + semver "^7.5.4" + ts-api-utils "^1.0.1" -"@typescript-eslint/parser@5.48.1": - version "5.48.1" - resolved "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-5.48.1.tgz#d0125792dab7e232035434ab8ef0658154db2f10" +"@typescript-eslint/parser@5.48.1", "@typescript-eslint/parser@^6.2.0": + version "6.2.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-6.2.0.tgz#d37c30b0f459c6f39455335d8f4f085919a1c644" dependencies: - "@typescript-eslint/scope-manager" "5.48.1" - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/typescript-estree" "5.48.1" - debug "^4.3.4" - -"@typescript-eslint/parser@^5.59.1": - version "5.61.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/parser/-/parser-5.61.0.tgz#7fbe3e2951904bb843f8932ebedd6e0635bffb70" - dependencies: - "@typescript-eslint/scope-manager" "5.61.0" - "@typescript-eslint/types" "5.61.0" - "@typescript-eslint/typescript-estree" "5.61.0" + "@typescript-eslint/scope-manager" "6.2.0" + "@typescript-eslint/types" "6.2.0" + "@typescript-eslint/typescript-estree" "6.2.0" + "@typescript-eslint/visitor-keys" "6.2.0" debug "^4.3.4" "@typescript-eslint/scope-manager@5.48.1": @@ -6532,12 +6690,19 @@ "@typescript-eslint/types" "5.48.1" "@typescript-eslint/visitor-keys" "5.48.1" -"@typescript-eslint/scope-manager@5.61.0": - version "5.61.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.61.0.tgz#b670006d069c9abe6415c41f754b1b5d949ef2b2" +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" dependencies: - "@typescript-eslint/types" "5.61.0" - "@typescript-eslint/visitor-keys" "5.61.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/scope-manager@6.2.0": + version "6.2.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/scope-manager/-/scope-manager-6.2.0.tgz#412a710d8fa20bc045533b3b19f423810b24f87a" + dependencies: + "@typescript-eslint/types" "6.2.0" + "@typescript-eslint/visitor-keys" "6.2.0" "@typescript-eslint/type-utils@5.48.1": version "5.48.1" @@ -6548,22 +6713,26 @@ debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/type-utils@5.61.0": - version "5.61.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-5.61.0.tgz#e90799eb2045c4435ea8378cb31cd8a9fddca47a" +"@typescript-eslint/type-utils@6.2.0": + version "6.2.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/type-utils/-/type-utils-6.2.0.tgz#02b27a3eeb41aa5460d6275d12cce5dd72e1c9fc" dependencies: - "@typescript-eslint/typescript-estree" "5.61.0" - "@typescript-eslint/utils" "5.61.0" + "@typescript-eslint/typescript-estree" "6.2.0" + "@typescript-eslint/utils" "6.2.0" debug "^4.3.4" - tsutils "^3.21.0" + ts-api-utils "^1.0.1" "@typescript-eslint/types@5.48.1": version "5.48.1" resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.48.1.tgz#efd1913a9aaf67caf8a6e6779fd53e14e8587e14" -"@typescript-eslint/types@5.61.0": - version "5.61.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.61.0.tgz#e99ff11b5792d791554abab0f0370936d8ca50c0" +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + +"@typescript-eslint/types@6.2.0": + version "6.2.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/types/-/types-6.2.0.tgz#b341a4e6d5f609267306b07afc6f62bcf92b1495" "@typescript-eslint/typescript-estree@5.48.1": version "5.48.1" @@ -6577,18 +6746,30 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/typescript-estree@5.61.0": - version "5.61.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.61.0.tgz#4c7caca84ce95bb41aa585d46a764bcc050b92f3" +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" dependencies: - "@typescript-eslint/types" "5.61.0" - "@typescript-eslint/visitor-keys" "5.61.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@6.2.0": + version "6.2.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.2.0.tgz#4969944b831b481996aa4fbd73c7164ca683b8ef" + dependencies: + "@typescript-eslint/types" "6.2.0" + "@typescript-eslint/visitor-keys" "6.2.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + "@typescript-eslint/utils@5.48.1": version "5.48.1" resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.48.1.tgz#20f2f4e88e9e2a0961cbebcb47a1f0f7da7ba7f9" @@ -6602,16 +6783,28 @@ eslint-utils "^3.0.0" semver "^7.3.7" -"@typescript-eslint/utils@5.61.0", "@typescript-eslint/utils@^5.10.0", "@typescript-eslint/utils@^5.58.0": - version "5.61.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.61.0.tgz#5064838a53e91c754fffbddd306adcca3fe0af36" +"@typescript-eslint/utils@6.2.0": + version "6.2.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-6.2.0.tgz#606a20e5c13883c2d2bd0538ddc4b96b8d410979" + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.2.0" + "@typescript-eslint/types" "6.2.0" + "@typescript-eslint/typescript-estree" "6.2.0" + semver "^7.5.4" + +"@typescript-eslint/utils@^5.10.0", "@typescript-eslint/utils@^5.58.0": + version "5.62.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.61.0" - "@typescript-eslint/types" "5.61.0" - "@typescript-eslint/typescript-estree" "5.61.0" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" eslint-scope "^5.1.1" semver "^7.3.7" @@ -6622,13 +6815,20 @@ "@typescript-eslint/types" "5.48.1" eslint-visitor-keys "^3.3.0" -"@typescript-eslint/visitor-keys@5.61.0": - version "5.61.0" - resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.61.0.tgz#c79414fa42158fd23bd2bb70952dc5cdbb298140" +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" dependencies: - "@typescript-eslint/types" "5.61.0" + "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@6.2.0": + version "6.2.0" + resolved "https://registry.npmmirror.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.2.0.tgz#71943f42fdaa2ec86dc3222091f41761a49ae71a" + dependencies: + "@typescript-eslint/types" "6.2.0" + eslint-visitor-keys "^3.4.1" + "@umijs/ast@4.0.72": version "4.0.72" resolved "https://registry.npmmirror.com/@umijs/ast/-/ast-4.0.72.tgz#54cf0d5edc5a09b06a2dff51d978cb3dc6bc6e11" @@ -7268,11 +7468,11 @@ ansi-cyan@^0.1.1: dependencies: ansi-wrap "0.1.0" -ansi-escapes@^3.0.0, ansi-escapes@^3.1.0, ansi-escapes@^3.2.0: +ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" -ansi-escapes@^4.2.1: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.2" resolved "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" dependencies: @@ -7306,10 +7506,14 @@ ansi-regex@^4.0.0, ansi-regex@^4.1.0: version "4.1.1" resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" -ansi-regex@^5.0.0, ansi-regex@^5.0.1: +ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -7330,6 +7534,10 @@ ansi-styles@^5.0.0: version "5.2.0" resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" +ansi-styles@^6.0.0: + version "6.2.1" + resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + ansi-wrap@0.1.0, ansi-wrap@^0.1.0: version "0.1.0" resolved "https://registry.npmmirror.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" @@ -7607,10 +7815,6 @@ array-buffer-byte-length@^1.0.0: call-bind "^1.0.2" is-array-buffer "^3.0.1" -array-differ@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" - array-differ@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" @@ -7619,10 +7823,6 @@ array-equal@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.npmmirror.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - array-ify@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" @@ -7645,20 +7845,10 @@ array-tree-filter@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz#873ac00fec83749f255ac8dd083814b4f6329190" -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.npmmirror.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.npmmirror.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - array-unique@^0.3.2: version "0.3.2" resolved "https://registry.npmmirror.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -7720,7 +7910,7 @@ array.prototype.tosorted@^1.1.1: es-shim-unscopables "^1.0.0" get-intrinsic "^1.1.3" -arrify@^1.0.0, arrify@^1.0.1: +arrify@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -7766,10 +7956,6 @@ assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" -ast-types@0.11.7: - version "0.11.7" - resolved "https://registry.npmmirror.com/ast-types/-/ast-types-0.11.7.tgz#f318bf44e339db6a320be0009ded64ec1471f46c" - ast-types@^0.13.2: version "0.13.4" resolved "https://registry.npmmirror.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" @@ -7780,6 +7966,10 @@ astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmmirror.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + astring@^1.8.0: version "1.8.6" resolved "https://registry.npmmirror.com/astring/-/astring-1.8.6.tgz#2c9c157cf1739d67561c56ba896e6948f6b93731" @@ -7925,7 +8115,7 @@ axios@^0.27.2: follow-redirects "^1.14.9" form-data "^4.0.0" -babel-core@7.0.0-bridge.0, babel-core@^7.0.0-bridge.0: +babel-core@7.0.0-bridge.0: version "7.0.0-bridge.0" resolved "https://registry.npmmirror.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" @@ -7941,19 +8131,6 @@ babel-jest@^24.8.0, babel-jest@^24.9.0: chalk "^2.4.2" slash "^2.0.0" -babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.npmmirror.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - babel-jest@^29.4.3: version "29.5.0" resolved "https://registry.npmmirror.com/babel-jest/-/babel-jest-29.5.0.tgz#3fe3ddb109198e78b1c88f9ebdecd5e4fc2f50a5" @@ -7966,6 +8143,31 @@ babel-jest@^29.4.3: graceful-fs "^4.2.9" slash "^3.0.0" +babel-jest@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.1.tgz#a7141ad1ed5ec50238f3cd36127636823111233a" + dependencies: + "@jest/transform" "^29.6.1" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.5.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-jest@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.6.2.tgz#cada0a59e07f5acaeb11cbae7e3ba92aec9c1126" + integrity sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A== + dependencies: + "@jest/transform" "^29.6.2" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.5.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + babel-plugin-dynamic-import-node@2.3.3: version "2.3.3" resolved "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" @@ -7981,7 +8183,7 @@ babel-plugin-istanbul@^5.1.0, babel-plugin-istanbul@^5.2.0: istanbul-lib-instrument "^3.3.0" test-exclude "^5.2.3" -babel-plugin-istanbul@^6.0.0, babel-plugin-istanbul@^6.1.1: +babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.npmmirror.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" dependencies: @@ -7997,15 +8199,6 @@ babel-plugin-jest-hoist@^24.9.0: dependencies: "@types/babel__traverse" "^7.0.6" -babel-plugin-jest-hoist@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - babel-plugin-jest-hoist@^29.5.0: version "29.5.0" resolved "https://registry.npmmirror.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz#a97db437936f441ec196990c9738d4b88538618a" @@ -8122,13 +8315,6 @@ babel-preset-jest@^24.9.0: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" babel-plugin-jest-hoist "^24.9.0" -babel-preset-jest@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - dependencies: - babel-plugin-jest-hoist "^26.6.2" - babel-preset-current-node-syntax "^1.0.0" - babel-preset-jest@^29.5.0: version "29.5.0" resolved "https://registry.npmmirror.com/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz#57bc8cc88097af7ff6a5ab59d1cd29d52a5916e2" @@ -8476,7 +8662,7 @@ buffer-fill@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" -buffer-from@1.x, buffer-from@^1.0.0, buffer-from@^1.1.1: +buffer-from@^1.0.0, buffer-from@^1.1.1: version "1.1.2" resolved "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -8539,6 +8725,12 @@ busboy@^0.2.11: dicer "0.2.5" readable-stream "1.1.x" +busboy@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" + dependencies: + streamsearch "^1.1.0" + byline@^5.0.0: version "5.0.0" resolved "https://registry.npmmirror.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" @@ -8672,10 +8864,6 @@ call-bind@^1.0.0, call-bind@^1.0.2, call-bind@~1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" -call-me-maybe@^1.0.1: - version "1.0.2" - resolved "https://registry.npmmirror.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz#03f964f19522ba643b1b0693acb9152fe2074baa" - caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -8703,13 +8891,6 @@ camel-case@^4.1.1, camel-case@^4.1.2: pascal-case "^3.1.2" tslib "^2.0.3" -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - camelcase-keys@^6.2.2: version "6.2.2" resolved "https://registry.npmmirror.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" @@ -8722,10 +8903,6 @@ camelcase@^1.0.2: version "1.2.1" resolved "https://registry.npmmirror.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.npmmirror.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - camelcase@^4.0.0: version "4.1.0" resolved "https://registry.npmmirror.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -8734,7 +8911,7 @@ camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" -camelcase@^6.0.0, camelcase@^6.2.0: +camelcase@^6.2.0: version "6.3.0" resolved "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" @@ -8822,7 +8999,11 @@ chalk@3.0.0, chalk@^3.0.0, chalk@~3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^1.1.1, chalk@^1.1.3, chalk@~1.1.3: +chalk@5.2.0: + version "5.2.0" + resolved "https://registry.npmmirror.com/chalk/-/chalk-5.2.0.tgz#249623b7d66869c673699fb66d65723e54dfcfb3" + +chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -8983,9 +9164,9 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -cjs-module-lexer@^0.6.0: - version "0.6.0" - resolved "https://registry.npmmirror.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" +cjs-module-lexer@^1.0.0: + version "1.2.3" + resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" class-utils@^0.3.5: version "0.3.6" @@ -9048,6 +9229,20 @@ cli-tableau@^2.0.0: dependencies: chalk "3.0.0" +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + cli-width@^2.0.0: version "2.2.1" resolved "https://registry.npmmirror.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" @@ -9088,14 +9283,6 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - cliui@^7.0.2: version "7.0.4" resolved "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -9280,9 +9467,9 @@ colord@^2.9.1: version "2.9.3" resolved "https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" -colors@^1.1.2: - version "1.4.0" - resolved "https://registry.npmmirror.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" +colorette@^2.0.19: + version "2.0.20" + resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" colors@~0.6.0-1: version "0.6.2" @@ -9334,6 +9521,10 @@ commander@7, commander@^7.2.0: version "7.2.0" resolved "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.npmmirror.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + commander@^2.19.0, commander@^2.20.0, commander@^2.8.1, commander@^2.9.0: version "2.20.3" resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -9832,13 +10023,6 @@ cross-fetch@3.1.6: dependencies: node-fetch "^2.6.11" -cross-spawn-async@^2.1.1: - version "2.2.5" - resolved "https://registry.npmmirror.com/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz#845ff0c0834a3ded9d160daca6d390906bb288cc" - dependencies: - lru-cache "^4.0.0" - which "^1.2.8" - cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -10024,7 +10208,7 @@ css.escape@^1.5.1: version "1.5.1" resolved "https://registry.npmmirror.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" -css@^2.2.3, css@^2.2.4: +css@^2.2.3: version "2.2.4" resolved "https://registry.npmmirror.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" dependencies: @@ -10195,12 +10379,6 @@ current-script-polyfill@1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz#f31cf7e4f3e218b0726e738ca92a02d3488ef615" -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.npmmirror.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - dependencies: - array-find-index "^1.0.1" - cwd@^0.9.1: version "0.9.1" resolved "https://registry.npmmirror.com/cwd/-/cwd-0.9.1.tgz#41e10a7e1ab833dc59c2eca83814c7de77b5a4fd" @@ -10587,7 +10765,7 @@ decamelize-keys@^1.1.0: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.0.0, decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.0.0, decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -10663,6 +10841,11 @@ dedent@^0.7.0: version "0.7.0" resolved "https://registry.npmmirror.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" +dedent@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.2.0.tgz#32039cd75c035f684e01c4a07cb88c0ecbeb57be" + integrity sha512-i4tcg0ClgvMUSxwHpt+NHQ01ZJmAkl6eBvDNrSZG9e+oLRTCSHv0wpr/Bzjpf6CwKeIHGevE1M34Y1Axdms5VQ== + dedupe@^3.0.2: version "3.0.3" resolved "https://registry.npmmirror.com/dedupe/-/dedupe-3.0.3.tgz#7ae7b55ca01028bc7d5714cd57a5bdf5e4aeea6e" @@ -10912,10 +11095,6 @@ diff-sequences@^24.9.0: version "24.9.0" resolved "https://registry.npmmirror.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" - diff-sequences@^29.4.3: version "29.4.3" resolved "https://registry.npmmirror.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" @@ -10940,13 +11119,6 @@ digest-header@^1.0.0: version "1.1.0" resolved "https://registry.npmmirror.com/digest-header/-/digest-header-1.1.0.tgz#e16ab6cf4545bc4eea878c8c35acd1b89664d800" -dir-glob@2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" - dependencies: - arrify "^1.0.1" - path-type "^3.0.0" - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -11245,6 +11417,10 @@ dynamic-dedupe@^0.3.0: dependencies: xtend "^4.0.0" +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmmirror.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.npmmirror.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -11299,9 +11475,9 @@ emittery@^0.12.1: version "0.12.1" resolved "https://registry.npmmirror.com/emittery/-/emittery-0.12.1.tgz#cb9a4a18745816f7a1fa03a8953e7eaededb45f2" -emittery@^0.7.1: - version "0.7.2" - resolved "https://registry.npmmirror.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" emoji-regex@^7.0.1: version "7.0.3" @@ -11311,6 +11487,10 @@ emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -11465,7 +11645,7 @@ errno@^0.1.1, errno@^0.1.3: dependencies: prr "~1.0.1" -error-ex@^1.2.0, error-ex@^1.3.1: +error-ex@^1.3.1: version "1.3.2" resolved "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" dependencies: @@ -11752,11 +11932,12 @@ eslint-plugin-node@^11.1.0: resolve "^1.10.1" semver "^6.1.0" -eslint-plugin-prettier@^4.2.1: - version "4.2.1" - resolved "https://registry.npmmirror.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" +eslint-plugin-prettier@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.0.tgz#6887780ed95f7708340ec79acfdf60c35b9be57a" dependencies: prettier-linter-helpers "^1.0.0" + synckit "^0.8.5" eslint-plugin-promise@^6.1.1: version "6.1.1" @@ -11766,7 +11947,7 @@ eslint-plugin-react-hooks@4.6.0, eslint-plugin-react-hooks@^4.6.0: version "4.6.0" resolved "https://registry.npmmirror.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" -eslint-plugin-react@7.32.2, eslint-plugin-react@^7.32.2: +eslint-plugin-react@7.32.2: version "7.32.2" resolved "https://registry.npmmirror.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" dependencies: @@ -11786,6 +11967,26 @@ eslint-plugin-react@7.32.2, eslint-plugin-react@^7.32.2: semver "^6.3.0" string.prototype.matchall "^4.0.8" +eslint-plugin-react@^7.33.0: + version "7.33.0" + resolved "https://registry.npmmirror.com/eslint-plugin-react/-/eslint-plugin-react-7.33.0.tgz#6c356fb0862fec2cd1b04426c669ea746e9b6eb3" + dependencies: + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" + doctrine "^2.1.0" + estraverse "^5.3.0" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + object.hasown "^1.1.2" + object.values "^1.1.6" + prop-types "^15.8.1" + resolve "^2.0.0-next.4" + semver "^6.3.1" + string.prototype.matchall "^4.0.8" + eslint-plugin-testing-library@^5.11.0: version "5.11.0" resolved "https://registry.npmmirror.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.11.0.tgz#0bad7668e216e20dd12f8c3652ca353009163121" @@ -11830,9 +12031,9 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: version "3.4.1" resolved "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" -eslint@^8.39.0: - version "8.44.0" - resolved "https://registry.npmmirror.com/eslint/-/eslint-8.44.0.tgz#51246e3889b259bbcd1d7d736a0c10add4f0e500" +eslint@^8.45.0: + version "8.45.0" + resolved "https://registry.npmmirror.com/eslint/-/eslint-8.45.0.tgz#bab660f90d18e1364352c0a6b7c6db8edb458b78" dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.4.0" @@ -11859,7 +12060,6 @@ eslint@^8.39.0: globals "^13.19.0" graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" @@ -11871,7 +12071,6 @@ eslint@^8.39.0: natural-compare "^1.4.0" optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" espree@^9.6.0: @@ -11882,7 +12081,7 @@ espree@^9.6.0: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" -esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -11982,17 +12181,6 @@ exec-sh@^0.3.2: version "0.3.6" resolved "https://registry.npmmirror.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" -execa@^0.4.0, execa@~0.4.0: - version "0.4.0" - resolved "https://registry.npmmirror.com/execa/-/execa-0.4.0.tgz#4eb6467a36a095fabb2970ff9d5e3fb7bce6ebc3" - dependencies: - cross-spawn-async "^2.1.1" - is-stream "^1.1.0" - npm-run-path "^1.0.0" - object-assign "^4.0.1" - path-key "^1.0.0" - strip-eof "^1.0.0" - execa@^0.7.0: version "0.7.0" resolved "https://registry.npmmirror.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" @@ -12045,7 +12233,7 @@ execa@^5.0.0, execa@^5.1.1: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execa@^7.1.1: +execa@^7.0.0, execa@^7.1.1: version "7.1.1" resolved "https://registry.npmmirror.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" dependencies: @@ -12100,17 +12288,6 @@ expect@^24.9.0: jest-message-util "^24.9.0" jest-regex-util "^24.9.0" -expect@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" - dependencies: - "@jest/types" "^26.6.2" - ansi-styles "^4.0.0" - jest-get-type "^26.3.0" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - expect@^29.0.0: version "29.5.0" resolved "https://registry.npmmirror.com/expect/-/expect-29.5.0.tgz#68c0509156cb2a0adb8865d413b137eeaae682f7" @@ -12121,6 +12298,29 @@ expect@^29.0.0: jest-message-util "^29.5.0" jest-util "^29.5.0" +expect@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/expect/-/expect-29.6.1.tgz#64dd1c8f75e2c0b209418f2b8d36a07921adfdf1" + dependencies: + "@jest/expect-utils" "^29.6.1" + "@types/node" "*" + jest-get-type "^29.4.3" + jest-matcher-utils "^29.6.1" + jest-message-util "^29.6.1" + jest-util "^29.6.1" + +expect@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.6.2.tgz#7b08e83eba18ddc4a2cf62b5f2d1918f5cd84521" + integrity sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA== + dependencies: + "@jest/expect-utils" "^29.6.2" + "@types/node" "*" + jest-get-type "^29.4.3" + jest-matcher-utils "^29.6.2" + jest-message-util "^29.6.2" + jest-util "^29.6.2" + extend-shallow@^1.1.2: version "1.1.4" resolved "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" @@ -12204,17 +12404,6 @@ fast-glob@3.2.12: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@^2.0.2: - version "2.2.7" - resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9: version "3.3.0" resolved "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" @@ -12426,13 +12615,6 @@ find-root@^1.1.0: version "1.1.0" resolved "https://registry.npmmirror.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.npmmirror.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.npmmirror.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -12493,10 +12675,6 @@ flatted@^3.1.0: version "3.2.7" resolved "https://registry.npmmirror.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" -flow-parser@0.*: - version "0.211.0" - resolved "https://registry.npmmirror.com/flow-parser/-/flow-parser-0.211.0.tgz#710c7dabdfe11494377dcef9a65602e8c445e35a" - flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: version "1.1.1" resolved "https://registry.npmmirror.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -12738,7 +12916,7 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fsevents@^2.1.2, fsevents@^2.3.2, fsevents@~2.3.1, fsevents@~2.3.2: +fsevents@^2.3.2, fsevents@~2.3.1, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" @@ -12870,10 +13048,6 @@ get-ready@^1.0.0, get-ready@~1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/get-ready/-/get-ready-1.0.0.tgz#f91817f1e9adecfea13a562adfc8de883ab34782" -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.npmmirror.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - get-stream@^2.2.0: version "2.3.1" resolved "https://registry.npmmirror.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" @@ -13070,10 +13244,6 @@ glob-stream@^6.1.0: to-absolute-glob "^2.0.0" unique-stream "^2.0.2" -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.2.3: version "7.2.3" resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" @@ -13158,18 +13328,6 @@ globby@^13.1.2: merge2 "^1.4.1" slash "^4.0.0" -globby@^8.0.1: - version "8.0.2" - resolved "https://registry.npmmirror.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" - dependencies: - array-union "^1.0.1" - dir-glob "2.0.0" - fast-glob "^2.0.2" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - gopd@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -13907,11 +14065,7 @@ ignore-walk@^3.0.3: dependencies: minimatch "^3.0.4" -ignore@^3.3.5: - version "3.3.10" - resolved "https://registry.npmmirror.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - -ignore@^5.1.1, ignore@^5.1.4, ignore@^5.2.0: +ignore@^5.1.1, ignore@^5.1.4, ignore@^5.2.0, ignore@^5.2.4: version "5.2.4" resolved "https://registry.npmmirror.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" @@ -13989,12 +14143,6 @@ imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - dependencies: - repeating "^2.0.0" - indent-string@^3.0.0: version "3.2.0" resolved "https://registry.npmmirror.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" @@ -14058,7 +14206,7 @@ inline-style-parser@0.1.1: version "0.1.1" resolved "https://registry.npmmirror.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" -inquirer@^6.2.1, inquirer@^6.2.2, inquirer@^6.5.2: +inquirer@^6.2.2, inquirer@^6.5.2: version "6.5.2" resolved "https://registry.npmmirror.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" dependencies: @@ -14409,10 +14557,6 @@ is-finalizationregistry@^1.0.2: dependencies: call-bind "^1.0.2" -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -14427,6 +14571,10 @@ is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + is-generator-fn@^2.0.0: version "2.1.0" resolved "https://registry.npmmirror.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" @@ -14437,14 +14585,6 @@ is-generator-function@^1.0.10, is-generator-function@^1.0.7: dependencies: has-tostringtag "^1.0.0" -is-git-clean@~1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/is-git-clean/-/is-git-clean-1.1.0.tgz#13abd6dda711bb08aafd42604da487845ddcf88d" - dependencies: - execa "^0.4.0" - is-obj "^1.0.1" - multimatch "^2.1.0" - is-glob@^3.1.0: version "3.1.0" resolved "https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -14530,7 +14670,7 @@ is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" -is-obj@^1.0.0, is-obj@^1.0.1: +is-obj@^1.0.0: version "1.0.1" resolved "https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -14544,12 +14684,6 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -is-path-inside@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - dependencies: - path-is-inside "^1.0.2" - is-path-inside@^3.0.3: version "3.0.3" resolved "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" @@ -14701,7 +14835,7 @@ is-url@1.2.4: version "1.2.4" resolved "https://registry.npmmirror.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" -is-utf8@^0.2.0, is-utf8@^0.2.1: +is-utf8@^0.2.1: version "0.2.1" resolved "https://registry.npmmirror.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" @@ -14809,16 +14943,7 @@ istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: istanbul-lib-coverage "^2.0.5" semver "^6.0.0" -istanbul-lib-instrument@^4.0.3: - version "4.0.3" - resolved "https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" - dependencies: - "@babel/core" "^7.7.5" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-instrument@^5.0.4: +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: version "5.2.1" resolved "https://registry.npmmirror.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" dependencies: @@ -14868,9 +14993,9 @@ istanbul-reports@^2.2.6: dependencies: html-escaper "^2.0.0" -istanbul-reports@^3.0.2: +istanbul-reports@^3.1.3: version "3.1.5" - resolved "https://registry.npmmirror.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" @@ -14895,13 +15020,63 @@ jest-changed-files@^24.9.0: execa "^1.0.0" throat "^4.0.0" -jest-changed-files@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" +jest-changed-files@^29.5.0: + version "29.5.0" + resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz#e88786dca8bf2aa899ec4af7644e16d9dcf9b23e" dependencies: - "@jest/types" "^26.6.2" - execa "^4.0.0" - throat "^5.0.0" + execa "^5.0.0" + p-limit "^3.1.0" + +jest-circus@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.1.tgz#861dab37e71a89907d1c0fabc54a0019738ed824" + dependencies: + "@jest/environment" "^29.6.1" + "@jest/expect" "^29.6.1" + "@jest/test-result" "^29.6.1" + "@jest/types" "^29.6.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + is-generator-fn "^2.0.0" + jest-each "^29.6.1" + jest-matcher-utils "^29.6.1" + jest-message-util "^29.6.1" + jest-runtime "^29.6.1" + jest-snapshot "^29.6.1" + jest-util "^29.6.1" + p-limit "^3.1.0" + pretty-format "^29.6.1" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-circus@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.6.2.tgz#1e6ffca60151ac66cad63fce34f443f6b5bb4258" + integrity sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw== + dependencies: + "@jest/environment" "^29.6.2" + "@jest/expect" "^29.6.2" + "@jest/test-result" "^29.6.2" + "@jest/types" "^29.6.1" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^1.0.0" + is-generator-fn "^2.0.0" + jest-each "^29.6.2" + jest-matcher-utils "^29.6.2" + jest-message-util "^29.6.2" + jest-runtime "^29.6.2" + jest-snapshot "^29.6.2" + jest-util "^29.6.2" + p-limit "^3.1.0" + pretty-format "^29.6.2" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" jest-cli@^24.8.0, jest-cli@^24.9.0: version "24.9.0" @@ -14921,36 +15096,40 @@ jest-cli@^24.8.0, jest-cli@^24.9.0: realpath-native "^1.1.0" yargs "^13.3.0" -jest-cli@^26.6.3: - version "26.6.3" - resolved "https://registry.npmmirror.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" +jest-cli@^29.0.0, jest-cli@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.1.tgz#99d9afa7449538221c71f358f0fdd3e9c6e89f72" dependencies: - "@jest/core" "^26.6.3" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/core" "^29.6.1" + "@jest/test-result" "^29.6.1" + "@jest/types" "^29.6.1" chalk "^4.0.0" exit "^0.1.2" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^26.6.3" - jest-util "^26.6.2" - jest-validate "^26.6.2" + jest-config "^29.6.1" + jest-util "^29.6.1" + jest-validate "^29.6.1" prompts "^2.0.1" - yargs "^15.4.1" + yargs "^17.3.1" -jest-codemods@^0.19.1: - version "0.19.1" - resolved "https://registry.npmmirror.com/jest-codemods/-/jest-codemods-0.19.1.tgz#823a0662d95bf8cb9158b8b6a705d0f6e9bb7b60" +jest-cli@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.6.2.tgz#edb381763398d1a292cd1b636a98bfa5644b8fda" + integrity sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q== dependencies: - chalk "~1.1.3" - execa "~0.4.0" - globby "^8.0.1" - inquirer "^6.2.1" - is-git-clean "~1.1.0" - jscodeshift "^0.6.2" - meow "~3.7.0" - update-notifier "^2.2.0" + "@jest/core" "^29.6.2" + "@jest/test-result" "^29.6.2" + "@jest/types" "^29.6.1" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^29.6.2" + jest-util "^29.6.2" + jest-validate "^29.6.2" + prompts "^2.0.1" + yargs "^17.3.1" jest-config@^24.9.0: version "24.9.0" @@ -14974,28 +15153,60 @@ jest-config@^24.9.0: pretty-format "^24.9.0" realpath-native "^1.1.0" -jest-config@^26.6.3: - version "26.6.3" - resolved "https://registry.npmmirror.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" +jest-config@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-config/-/jest-config-29.6.1.tgz#d785344509065d53a238224c6cdc0ed8e2f2f0dd" dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.6.3" - "@jest/types" "^26.6.2" - babel-jest "^26.6.3" + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.6.1" + "@jest/types" "^29.6.1" + babel-jest "^29.6.1" chalk "^4.0.0" + ci-info "^3.2.0" deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^26.6.2" - jest-environment-node "^26.6.2" - jest-get-type "^26.3.0" - jest-jasmine2 "^26.6.3" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - micromatch "^4.0.2" - pretty-format "^26.6.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.6.1" + jest-environment-node "^29.6.1" + jest-get-type "^29.4.3" + jest-regex-util "^29.4.3" + jest-resolve "^29.6.1" + jest-runner "^29.6.1" + jest-util "^29.6.1" + jest-validate "^29.6.1" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.6.1" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-config@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.6.2.tgz#c68723f06b31ca5e63030686e604727d406cd7c3" + integrity sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.6.2" + "@jest/types" "^29.6.1" + babel-jest "^29.6.2" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.6.2" + jest-environment-node "^29.6.2" + jest-get-type "^29.4.3" + jest-regex-util "^29.4.3" + jest-resolve "^29.6.2" + jest-runner "^29.6.2" + jest-util "^29.6.2" + jest-validate "^29.6.2" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.6.2" + slash "^3.0.0" + strip-json-comments "^3.1.1" jest-diff@^24.0.0, jest-diff@^24.9.0: version "24.9.0" @@ -15006,15 +15217,6 @@ jest-diff@^24.0.0, jest-diff@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" -jest-diff@^26.0.0, jest-diff@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" - dependencies: - chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - jest-diff@^29.5.0: version "29.5.0" resolved "https://registry.npmmirror.com/jest-diff/-/jest-diff-29.5.0.tgz#e0d83a58eb5451dcc1fa61b1c3ee4e8f5a290d63" @@ -15024,15 +15226,34 @@ jest-diff@^29.5.0: jest-get-type "^29.4.3" pretty-format "^29.5.0" +jest-diff@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.1.tgz#13df6db0a89ee6ad93c747c75c85c70ba941e545" + dependencies: + chalk "^4.0.0" + diff-sequences "^29.4.3" + jest-get-type "^29.4.3" + pretty-format "^29.6.1" + +jest-diff@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.6.2.tgz#c36001e5543e82a0805051d3ceac32e6825c1c46" + integrity sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.4.3" + jest-get-type "^29.4.3" + pretty-format "^29.6.2" + jest-docblock@^24.3.0: version "24.9.0" resolved "https://registry.npmmirror.com/jest-docblock/-/jest-docblock-24.9.0.tgz#7970201802ba560e1c4092cc25cbedf5af5a8ce2" dependencies: detect-newline "^2.1.0" -jest-docblock@^26.0.0: - version "26.0.0" - resolved "https://registry.npmmirror.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" +jest-docblock@^29.4.3: + version "29.4.3" + resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz#90505aa89514a1c7dceeac1123df79e414636ea8" dependencies: detect-newline "^3.0.0" @@ -15059,15 +15280,26 @@ jest-each@^24.9.0: jest-util "^24.9.0" pretty-format "^24.9.0" -jest-each@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" +jest-each@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-each/-/jest-each-29.6.1.tgz#975058e5b8f55c6780beab8b6ab214921815c89c" dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.6.1" chalk "^4.0.0" - jest-get-type "^26.3.0" - jest-util "^26.6.2" - pretty-format "^26.6.2" + jest-get-type "^29.4.3" + jest-util "^29.6.1" + pretty-format "^29.6.1" + +jest-each@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.6.2.tgz#c9e4b340bcbe838c73adf46b76817b15712d02ce" + integrity sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw== + dependencies: + "@jest/types" "^29.6.1" + chalk "^4.0.0" + jest-get-type "^29.4.3" + jest-util "^29.6.2" + pretty-format "^29.6.2" jest-environment-jsdom@^24.9.0: version "24.9.0" @@ -15080,18 +15312,6 @@ jest-environment-jsdom@^24.9.0: jest-util "^24.9.0" jsdom "^11.5.1" -jest-environment-jsdom@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - jsdom "^16.4.0" - jest-environment-node@^24.9.0: version "24.9.0" resolved "https://registry.npmmirror.com/jest-environment-node/-/jest-environment-node-24.9.0.tgz#333d2d2796f9687f2aeebf0742b519f33c1cbfd3" @@ -15102,25 +15322,33 @@ jest-environment-node@^24.9.0: jest-mock "^24.9.0" jest-util "^24.9.0" -jest-environment-node@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" +jest-environment-node@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.1.tgz#08a122dece39e58bc388da815a2166c58b4abec6" dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/environment" "^29.6.1" + "@jest/fake-timers" "^29.6.1" + "@jest/types" "^29.6.1" "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" + jest-mock "^29.6.1" + jest-util "^29.6.1" + +jest-environment-node@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.6.2.tgz#a9ea2cabff39b08eca14ccb32c8ceb924c8bb1ad" + integrity sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ== + dependencies: + "@jest/environment" "^29.6.2" + "@jest/fake-timers" "^29.6.2" + "@jest/types" "^29.6.1" + "@types/node" "*" + jest-mock "^29.6.2" + jest-util "^29.6.2" jest-get-type@^24.9.0: version "24.9.0" resolved "https://registry.npmmirror.com/jest-get-type/-/jest-get-type-24.9.0.tgz#1684a0c8a50f2e4901b6644ae861f579eed2ef0e" -jest-get-type@^26.3.0: - version "26.3.0" - resolved "https://registry.npmmirror.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" - jest-get-type@^29.4.3: version "29.4.3" resolved "https://registry.npmmirror.com/jest-get-type/-/jest-get-type-29.4.3.tgz#1ab7a5207c995161100b5187159ca82dd48b3dd5" @@ -15143,26 +15371,6 @@ jest-haste-map@^24.9.0: optionalDependencies: fsevents "^1.2.7" -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" - jest-haste-map@^29.5.0: version "29.5.0" resolved "https://registry.npmmirror.com/jest-haste-map/-/jest-haste-map-29.5.0.tgz#69bd67dc9012d6e2723f20a945099e972b2e94de" @@ -15181,6 +15389,43 @@ jest-haste-map@^29.5.0: optionalDependencies: fsevents "^2.3.2" +jest-haste-map@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.1.tgz#62655c7a1c1b349a3206441330fb2dbdb4b63803" + dependencies: + "@jest/types" "^29.6.1" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.4.3" + jest-util "^29.6.1" + jest-worker "^29.6.1" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-haste-map@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.6.2.tgz#298c25ea5255cfad8b723179d4295cf3a50a70d1" + integrity sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA== + dependencies: + "@jest/types" "^29.6.1" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.4.3" + jest-util "^29.6.2" + jest-worker "^29.6.2" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + jest-jasmine2@^24.9.0: version "24.9.0" resolved "https://registry.npmmirror.com/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz#1f7b1bd3242c1774e62acabb3646d96afc3be6a0" @@ -15202,29 +15447,6 @@ jest-jasmine2@^24.9.0: pretty-format "^24.9.0" throat "^4.0.0" -jest-jasmine2@^26.6.3: - version "26.6.3" - resolved "https://registry.npmmirror.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^26.6.2" - is-generator-fn "^2.0.0" - jest-each "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - pretty-format "^26.6.2" - throat "^5.0.0" - jest-leak-detector@^24.9.0: version "24.9.0" resolved "https://registry.npmmirror.com/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz#b665dea7c77100c5c4f7dfcb153b65cf07dcf96a" @@ -15232,16 +15454,20 @@ jest-leak-detector@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" -jest-leak-detector@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" +jest-leak-detector@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.1.tgz#66a902c81318e66e694df7d096a95466cb962f8e" dependencies: - jest-get-type "^26.3.0" - pretty-format "^26.6.2" + jest-get-type "^29.4.3" + pretty-format "^29.6.1" -jest-localstorage-mock@^2.3.0: - version "2.4.26" - resolved "https://registry.npmmirror.com/jest-localstorage-mock/-/jest-localstorage-mock-2.4.26.tgz#7d57fb3555f2ed5b7ed16fd8423fd81f95e9e8db" +jest-leak-detector@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz#e2b307fee78cab091c37858a98c7e1d73cdf5b38" + integrity sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ== + dependencies: + jest-get-type "^29.4.3" + pretty-format "^29.6.2" jest-matcher-utils@^24.0.0, jest-matcher-utils@^24.9.0: version "24.9.0" @@ -15252,15 +15478,6 @@ jest-matcher-utils@^24.0.0, jest-matcher-utils@^24.9.0: jest-get-type "^24.9.0" pretty-format "^24.9.0" -jest-matcher-utils@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" - dependencies: - chalk "^4.0.0" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - jest-matcher-utils@^29.5.0: version "29.5.0" resolved "https://registry.npmmirror.com/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz#d957af7f8c0692c5453666705621ad4abc2c59c5" @@ -15270,6 +15487,25 @@ jest-matcher-utils@^29.5.0: jest-get-type "^29.4.3" pretty-format "^29.5.0" +jest-matcher-utils@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.1.tgz#6c60075d84655d6300c5d5128f46531848160b53" + dependencies: + chalk "^4.0.0" + jest-diff "^29.6.1" + jest-get-type "^29.4.3" + pretty-format "^29.6.1" + +jest-matcher-utils@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz#39de0be2baca7a64eacb27291f0bd834fea3a535" + integrity sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ== + dependencies: + chalk "^4.0.0" + jest-diff "^29.6.2" + jest-get-type "^29.4.3" + pretty-format "^29.6.2" + jest-message-util@^24.9.0: version "24.9.0" resolved "https://registry.npmmirror.com/jest-message-util/-/jest-message-util-24.9.0.tgz#527f54a1e380f5e202a8d1149b0ec872f43119e3" @@ -15283,20 +15519,6 @@ jest-message-util@^24.9.0: slash "^2.0.0" stack-utils "^1.0.1" -jest-message-util@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - pretty-format "^26.6.2" - slash "^3.0.0" - stack-utils "^2.0.2" - jest-message-util@^29.5.0: version "29.5.0" resolved "https://registry.npmmirror.com/jest-message-util/-/jest-message-util-29.5.0.tgz#1f776cac3aca332ab8dd2e3b41625435085c900e" @@ -15311,18 +15533,57 @@ jest-message-util@^29.5.0: slash "^3.0.0" stack-utils "^2.0.3" +jest-message-util@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.1.tgz#d0b21d87f117e1b9e165e24f245befd2ff34ff8d" + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.6.1" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-message-util@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.6.2.tgz#af7adc2209c552f3f5ae31e77cf0a261f23dc2bb" + integrity sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.1" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.6.2" + slash "^3.0.0" + stack-utils "^2.0.3" + jest-mock@^24.9.0: version "24.9.0" resolved "https://registry.npmmirror.com/jest-mock/-/jest-mock-24.9.0.tgz#c22835541ee379b908673ad51087a2185c13f1c6" dependencies: "@jest/types" "^24.9.0" -jest-mock@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" +jest-mock@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.1.tgz#049ee26aea8cbf54c764af649070910607316517" dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.6.1" "@types/node" "*" + jest-util "^29.6.1" + +jest-mock@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.6.2.tgz#ef9c9b4d38c34a2ad61010a021866dad41ce5e00" + integrity sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg== + dependencies: + "@jest/types" "^29.6.1" + "@types/node" "*" + jest-util "^29.6.2" jest-pnp-resolver@^1.2.0, jest-pnp-resolver@^1.2.1, jest-pnp-resolver@^1.2.2: version "1.2.3" @@ -15332,10 +15593,6 @@ jest-regex-util@^24.3.0, jest-regex-util@^24.9.0: version "24.9.0" resolved "https://registry.npmmirror.com/jest-regex-util/-/jest-regex-util-24.9.0.tgz#c13fb3380bde22bf6575432c493ea8fe37965636" -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.npmmirror.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - jest-regex-util@^29.4.3: version "29.4.3" resolved "https://registry.npmmirror.com/jest-regex-util/-/jest-regex-util-29.4.3.tgz#a42616141e0cae052cfa32c169945d00c0aa0bb8" @@ -15348,13 +15605,20 @@ jest-resolve-dependencies@^24.9.0: jest-regex-util "^24.3.0" jest-snapshot "^24.9.0" -jest-resolve-dependencies@^26.6.3: - version "26.6.3" - resolved "https://registry.npmmirror.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" +jest-resolve-dependencies@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.1.tgz#b85b06670f987a62515bbf625d54a499e3d708f5" dependencies: - "@jest/types" "^26.6.2" - jest-regex-util "^26.0.0" - jest-snapshot "^26.6.2" + jest-regex-util "^29.4.3" + jest-snapshot "^29.6.1" + +jest-resolve-dependencies@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz#36435269b6672c256bcc85fb384872c134cc4cf2" + integrity sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w== + dependencies: + jest-regex-util "^29.4.3" + jest-snapshot "^29.6.2" jest-resolve@^24.8.0, jest-resolve@^24.9.0: version "24.9.0" @@ -15366,17 +15630,33 @@ jest-resolve@^24.8.0, jest-resolve@^24.9.0: jest-pnp-resolver "^1.2.1" realpath-native "^1.1.0" -jest-resolve@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" +jest-resolve@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.1.tgz#4c3324b993a85e300add2f8609f51b80ddea39ee" dependencies: - "@jest/types" "^26.6.2" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" + jest-haste-map "^29.6.1" jest-pnp-resolver "^1.2.2" - jest-util "^26.6.2" - read-pkg-up "^7.0.1" - resolve "^1.18.1" + jest-util "^29.6.1" + jest-validate "^29.6.1" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-resolve@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.6.2.tgz#f18405fe4b50159b7b6d85e81f6a524d22afb838" + integrity sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.6.2" + jest-pnp-resolver "^1.2.2" + jest-util "^29.6.2" + jest-validate "^29.6.2" + resolve "^1.20.0" + resolve.exports "^2.0.0" slash "^3.0.0" jest-runner@^24.9.0: @@ -15403,30 +15683,58 @@ jest-runner@^24.9.0: source-map-support "^0.5.6" throat "^4.0.0" -jest-runner@^26.6.3: - version "26.6.3" - resolved "https://registry.npmmirror.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" +jest-runner@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.1.tgz#54557087e7972d345540d622ab5bfc3d8f34688c" dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/console" "^29.6.1" + "@jest/environment" "^29.6.1" + "@jest/test-result" "^29.6.1" + "@jest/transform" "^29.6.1" + "@jest/types" "^29.6.1" "@types/node" "*" chalk "^4.0.0" - emittery "^0.7.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-docblock "^26.0.0" - jest-haste-map "^26.6.2" - jest-leak-detector "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - jest-runtime "^26.6.3" - jest-util "^26.6.2" - jest-worker "^26.6.2" - source-map-support "^0.5.6" - throat "^5.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.4.3" + jest-environment-node "^29.6.1" + jest-haste-map "^29.6.1" + jest-leak-detector "^29.6.1" + jest-message-util "^29.6.1" + jest-resolve "^29.6.1" + jest-runtime "^29.6.1" + jest-util "^29.6.1" + jest-watcher "^29.6.1" + jest-worker "^29.6.1" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runner@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.6.2.tgz#89e8e32a8fef24781a7c4c49cd1cb6358ac7fc01" + integrity sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w== + dependencies: + "@jest/console" "^29.6.2" + "@jest/environment" "^29.6.2" + "@jest/test-result" "^29.6.2" + "@jest/transform" "^29.6.2" + "@jest/types" "^29.6.1" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.4.3" + jest-environment-node "^29.6.2" + jest-haste-map "^29.6.2" + jest-leak-detector "^29.6.2" + jest-message-util "^29.6.2" + jest-resolve "^29.6.2" + jest-runtime "^29.6.2" + jest-util "^29.6.2" + jest-watcher "^29.6.2" + jest-worker "^29.6.2" + p-limit "^3.1.0" + source-map-support "0.5.13" jest-runtime@^24.9.0: version "24.9.0" @@ -15456,49 +15764,65 @@ jest-runtime@^24.9.0: strip-bom "^3.0.0" yargs "^13.3.0" -jest-runtime@^26.6.3: - version "26.6.3" - resolved "https://registry.npmmirror.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" +jest-runtime@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.1.tgz#8a0fc9274ef277f3d70ba19d238e64334958a0dc" dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/globals" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/yargs" "^15.0.0" + "@jest/environment" "^29.6.1" + "@jest/fake-timers" "^29.6.1" + "@jest/globals" "^29.6.1" + "@jest/source-map" "^29.6.0" + "@jest/test-result" "^29.6.1" + "@jest/transform" "^29.6.1" + "@jest/types" "^29.6.1" + "@types/node" "*" chalk "^4.0.0" - cjs-module-lexer "^0.6.0" + cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" - exit "^0.1.2" glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" + graceful-fs "^4.2.9" + jest-haste-map "^29.6.1" + jest-message-util "^29.6.1" + jest-mock "^29.6.1" + jest-regex-util "^29.4.3" + jest-resolve "^29.6.1" + jest-snapshot "^29.6.1" + jest-util "^29.6.1" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-runtime@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.6.2.tgz#692f25e387f982e89ab83270e684a9786248e545" + integrity sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg== + dependencies: + "@jest/environment" "^29.6.2" + "@jest/fake-timers" "^29.6.2" + "@jest/globals" "^29.6.2" + "@jest/source-map" "^29.6.0" + "@jest/test-result" "^29.6.2" + "@jest/transform" "^29.6.2" + "@jest/types" "^29.6.1" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.6.2" + jest-message-util "^29.6.2" + jest-mock "^29.6.2" + jest-regex-util "^29.4.3" + jest-resolve "^29.6.2" + jest-snapshot "^29.6.2" + jest-util "^29.6.2" slash "^3.0.0" strip-bom "^4.0.0" - yargs "^15.4.1" jest-serializer@^24.9.0: version "24.9.0" resolved "https://registry.npmmirror.com/jest-serializer/-/jest-serializer-24.9.0.tgz#e6d7d7ef96d31e8b9079a714754c5d5c58288e73" -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - jest-snapshot@^24.9.0: version "24.9.0" resolved "https://registry.npmmirror.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" @@ -15517,32 +15841,57 @@ jest-snapshot@^24.9.0: pretty-format "^24.9.0" semver "^6.2.0" -jest-snapshot@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" +jest-snapshot@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.1.tgz#0d083cb7de716d5d5cdbe80d598ed2fbafac0239" dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.0.0" + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.6.1" + "@jest/transform" "^29.6.1" + "@jest/types" "^29.6.1" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^26.6.2" - graceful-fs "^4.2.4" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - jest-haste-map "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" + expect "^29.6.1" + graceful-fs "^4.2.9" + jest-diff "^29.6.1" + jest-get-type "^29.4.3" + jest-matcher-utils "^29.6.1" + jest-message-util "^29.6.1" + jest-util "^29.6.1" natural-compare "^1.4.0" - pretty-format "^26.6.2" - semver "^7.3.2" + pretty-format "^29.6.1" + semver "^7.5.3" -jest-styled-components@6.3.3: - version "6.3.3" - resolved "https://registry.npmmirror.com/jest-styled-components/-/jest-styled-components-6.3.3.tgz#e15bbda13a6b6ff876d6b783751fe9840860c52a" +jest-snapshot@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.6.2.tgz#9b431b561a83f2bdfe041e1cab8a6becdb01af9c" + integrity sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA== dependencies: - css "^2.2.4" + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.6.2" + "@jest/transform" "^29.6.2" + "@jest/types" "^29.6.1" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.6.2" + graceful-fs "^4.2.9" + jest-diff "^29.6.2" + jest-get-type "^29.4.3" + jest-matcher-utils "^29.6.2" + jest-message-util "^29.6.2" + jest-util "^29.6.2" + natural-compare "^1.4.0" + pretty-format "^29.6.2" + semver "^7.5.3" jest-util@^24.9.0: version "24.9.0" @@ -15561,16 +15910,16 @@ jest-util@^24.9.0: slash "^2.0.0" source-map "^0.6.0" -jest-util@^26.1.0, jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" +jest-util@^29.0.0, jest-util@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-util/-/jest-util-29.6.1.tgz#c9e29a87a6edbf1e39e6dee2b4689b8a146679cb" dependencies: - "@jest/types" "^26.6.2" + "@jest/types" "^29.6.1" "@types/node" "*" chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" jest-util@^29.4.3, jest-util@^29.5.0: version "29.5.0" @@ -15583,6 +15932,18 @@ jest-util@^29.4.3, jest-util@^29.5.0: graceful-fs "^4.2.9" picomatch "^2.2.3" +jest-util@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.2.tgz#8a052df8fff2eebe446769fd88814521a517664d" + integrity sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w== + dependencies: + "@jest/types" "^29.6.1" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + jest-validate@^24.9.0: version "24.9.0" resolved "https://registry.npmmirror.com/jest-validate/-/jest-validate-24.9.0.tgz#0775c55360d173cd854e40180756d4ff52def8ab" @@ -15594,32 +15955,28 @@ jest-validate@^24.9.0: leven "^3.1.0" pretty-format "^24.9.0" -jest-validate@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" +jest-validate@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.1.tgz#765e684af6e2c86dce950aebefbbcd4546d69f7b" dependencies: - "@jest/types" "^26.6.2" - camelcase "^6.0.0" + "@jest/types" "^29.6.1" + camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^26.3.0" + jest-get-type "^29.4.3" leven "^3.1.0" - pretty-format "^26.6.2" + pretty-format "^29.6.1" -jest-watch-directories@1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/jest-watch-directories/-/jest-watch-directories-1.1.0.tgz#c9cd3fb40ba3d985c5c029ca91d95b081e92efbb" +jest-validate@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.6.2.tgz#25d972af35b2415b83b1373baf1a47bb266c1082" + integrity sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg== dependencies: - ansi-escapes "^3.1.0" - glob "^7.1.3" - is-path-inside "^2.0.0" - messageformat "^2.0.4" - prompts "^1.1.1" - -jest-watch-lerna-packages@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/jest-watch-lerna-packages/-/jest-watch-lerna-packages-1.1.0.tgz#d689399d06f4c7c5b9f25658ba3910af7df86440" - dependencies: - jest-watch-directories "1.1.0" + "@jest/types" "^29.6.1" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.4.3" + leven "^3.1.0" + pretty-format "^29.6.2" jest-watcher@^24.9.0: version "24.9.0" @@ -15633,16 +15990,31 @@ jest-watcher@^24.9.0: jest-util "^24.9.0" string-length "^2.0.0" -jest-watcher@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" +jest-watcher@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.1.tgz#7c0c43ddd52418af134c551c92c9ea31e5ec942e" dependencies: - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" + "@jest/test-result" "^29.6.1" + "@jest/types" "^29.6.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^26.6.2" + emittery "^0.13.1" + jest-util "^29.6.1" + string-length "^4.0.1" + +jest-watcher@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.6.2.tgz#77c224674f0620d9f6643c4cfca186d8893ca088" + integrity sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA== + dependencies: + "@jest/test-result" "^29.6.2" + "@jest/types" "^29.6.1" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.6.2" string-length "^4.0.1" jest-worker@24.9.0, jest-worker@^24.6.0, jest-worker@^24.9.0: @@ -15661,7 +16033,7 @@ jest-worker@29.4.3: merge-stream "^2.0.0" supports-color "^8.0.0" -jest-worker@^26.2.1, jest-worker@^26.6.2: +jest-worker@^26.2.1: version "26.6.2" resolved "https://registry.npmmirror.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" dependencies: @@ -15678,6 +16050,25 @@ jest-worker@^29.5.0: merge-stream "^2.0.0" supports-color "^8.0.0" +jest-worker@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.1.tgz#64b015f0e985ef3a8ad049b61fe92b3db74a5319" + dependencies: + "@types/node" "*" + jest-util "^29.6.1" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest-worker@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.6.2.tgz#682fbc4b6856ad0aa122a5403c6d048b83f3fb44" + integrity sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ== + dependencies: + "@types/node" "*" + jest-util "^29.6.2" + merge-stream "^2.0.0" + supports-color "^8.0.0" + jest@^24.8.0: version "24.9.0" resolved "https://registry.npmmirror.com/jest/-/jest-24.9.0.tgz#987d290c05a08b52c56188c1002e368edb007171" @@ -15685,13 +16076,24 @@ jest@^24.8.0: import-local "^2.0.0" jest-cli "^24.9.0" -jest@^26.0.0: - version "26.6.3" - resolved "https://registry.npmmirror.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" +jest@^29.0.0: + version "29.6.1" + resolved "https://registry.npmjs.org/jest/-/jest-29.6.1.tgz#74be1cb719c3abe439f2d94aeb18e6540a5b02ad" dependencies: - "@jest/core" "^26.6.3" + "@jest/core" "^29.6.1" + "@jest/types" "^29.6.1" import-local "^3.0.2" - jest-cli "^26.6.3" + jest-cli "^29.6.1" + +jest@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.6.2.tgz#3bd55b9fd46a161b2edbdf5f1d1bd0d1eab76c42" + integrity sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg== + dependencies: + "@jest/core" "^29.6.2" + "@jest/types" "^29.6.1" + import-local "^3.0.2" + jest-cli "^29.6.2" jose@^4.14.1: version "4.14.4" @@ -15747,29 +16149,6 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" -jscodeshift@^0.6.2: - version "0.6.4" - resolved "https://registry.npmmirror.com/jscodeshift/-/jscodeshift-0.6.4.tgz#e19ab86214edac86a75c4557fc88b3937d558a8e" - dependencies: - "@babel/core" "^7.1.6" - "@babel/parser" "^7.1.6" - "@babel/plugin-proposal-class-properties" "^7.1.0" - "@babel/plugin-proposal-object-rest-spread" "^7.0.0" - "@babel/preset-env" "^7.1.6" - "@babel/preset-flow" "^7.0.0" - "@babel/preset-typescript" "^7.1.0" - "@babel/register" "^7.0.0" - babel-core "^7.0.0-bridge.0" - colors "^1.1.2" - flow-parser "0.*" - graceful-fs "^4.1.11" - micromatch "^3.1.10" - neo-async "^2.5.0" - node-dir "^0.1.17" - recast "^0.16.1" - temp "^0.8.1" - write-file-atomic "^2.3.0" - jsdom-worker@^0.3.0: version "0.3.0" resolved "https://registry.npmmirror.com/jsdom-worker/-/jsdom-worker-0.3.0.tgz#aff32ec089d17f56a5a344a426b6fb2f56e7de54" @@ -15808,7 +16187,7 @@ jsdom@^11.5.1: ws "^5.2.0" xml-name-validator "^3.0.0" -jsdom@^16.0.0, jsdom@^16.4.0: +jsdom@^16.0.0: version "16.7.0" resolved "https://registry.npmmirror.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" dependencies: @@ -15896,10 +16275,6 @@ json2mq@^0.2.0: dependencies: string-convert "^0.2.0" -json5@2.x, json5@^2.1.0, json5@^2.1.2, json5@^2.2.2, json5@^2.2.3: - version "2.2.3" - resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - json5@^0.5.1: version "0.5.1" resolved "https://registry.npmmirror.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -15910,6 +16285,10 @@ json5@^1.0.1, json5@^1.0.2: dependencies: minimist "^1.2.0" +json5@^2.1.0, json5@^2.1.2, json5@^2.2.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + jsonc-parser@^3.2.0: version "3.2.0" resolved "https://registry.npmmirror.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" @@ -16040,7 +16419,7 @@ kitx@^2.0.0, kitx@^2.1.0: dependencies: "@types/node" "^12.0.2" -kleur@^3.0.0, kleur@^3.0.3: +kleur@^3.0.3: version "3.0.3" resolved "https://registry.npmmirror.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -16306,7 +16685,7 @@ lightningcss@1.19.0: lightningcss-linux-x64-musl "1.19.0" lightningcss-win32-x64-msvc "1.19.0" -lilconfig@^2.0.3, lilconfig@^2.0.5: +lilconfig@2.1.0, lilconfig@^2.0.3, lilconfig@^2.0.5: version "2.1.0" resolved "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" @@ -16320,15 +16699,36 @@ linkify-it@^4.0.1: dependencies: uc.micro "^1.0.1" -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" +lint-staged@^13.2.3: + version "13.2.3" + resolved "https://registry.npmmirror.com/lint-staged/-/lint-staged-13.2.3.tgz#f899aad6c093473467e9c9e316e3c2d8a28f87a7" dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" + chalk "5.2.0" + cli-truncate "^3.1.0" + commander "^10.0.0" + debug "^4.3.4" + execa "^7.0.0" + lilconfig "2.1.0" + listr2 "^5.0.7" + micromatch "^4.0.5" + normalize-path "^3.0.0" + object-inspect "^1.12.3" + pidtree "^0.6.0" + string-argv "^0.3.1" + yaml "^2.2.2" + +listr2@^5.0.7: + version "5.0.8" + resolved "https://registry.npmmirror.com/listr2/-/listr2-5.0.8.tgz#a9379ffeb4bd83a68931a65fb223a11510d6ba23" + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.19" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.8.0" + through "^2.3.8" + wrap-ansi "^7.0.0" load-json-file@^4.0.0: version "4.0.0" @@ -16494,7 +16894,7 @@ lodash.isstring@^4.0.1: version "4.0.1" resolved "https://registry.npmmirror.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" -lodash.memoize@^4.1.2: +lodash.memoize@4.x, lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -16535,7 +16935,7 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@4.17.21, lodash@4.x, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.7.0: +lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.7.0: version "4.17.21" resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -16556,6 +16956,15 @@ log-symbols@^4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + logform@^2.3.2, logform@^2.4.0: version "2.5.1" resolved "https://registry.npmmirror.com/logform/-/logform-2.5.1.tgz#44c77c34becd71b3a42a3970c77929e52c6ed48b" @@ -16585,13 +16994,6 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.npmmirror.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - loupe@^2.3.1, loupe@^2.3.6: version "2.3.6" resolved "https://registry.npmmirror.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" @@ -16616,7 +17018,7 @@ lru-cache@8.0.5: version "8.0.5" resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-8.0.5.tgz#983fe337f3e176667f8e567cfcce7cb064ea214e" -lru-cache@^4.0.0, lru-cache@^4.0.1, lru-cache@^4.1.1: +lru-cache@^4.0.1, lru-cache@^4.1.1: version "4.1.5" resolved "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" dependencies: @@ -16749,12 +17151,6 @@ make-fetch-happen@^9.0.1, make-fetch-happen@^9.1.0: socks-proxy-agent "^6.0.0" ssri "^8.0.0" -make-plural@^4.3.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/make-plural/-/make-plural-4.3.0.tgz#f23de08efdb0cac2e0c9ba9f315b0dff6b4c2735" - optionalDependencies: - minimist "^1.2.0" - makeerror@1.0.12: version "1.0.12" resolved "https://registry.npmmirror.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" @@ -16769,7 +17165,7 @@ map-cache@^0.2.2: version "0.2.2" resolved "https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" -map-obj@^1.0.0, map-obj@^1.0.1: +map-obj@^1.0.0: version "1.0.1" resolved "https://registry.npmmirror.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" @@ -17058,21 +17454,6 @@ meow@^8.0.0: type-fest "^0.18.0" yargs-parser "^20.2.3" -meow@~3.7.0: - version "3.7.0" - resolved "https://registry.npmmirror.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - merge-descriptors@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -17087,7 +17468,7 @@ merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" -merge2@^1.2.3, merge2@^1.3.0, merge2@^1.4.1: +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -17112,22 +17493,6 @@ mermaid@9.4.3: uuid "^9.0.0" web-worker "^1.2.0" -messageformat-formatters@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/messageformat-formatters/-/messageformat-formatters-2.0.1.tgz#0492c1402a48775f751c9b17c0354e92be012b08" - -messageformat-parser@^4.1.2: - version "4.1.3" - resolved "https://registry.npmmirror.com/messageformat-parser/-/messageformat-parser-4.1.3.tgz#b824787f57fcda7d50769f5b63e8d4fda68f5b9e" - -messageformat@^2.0.4: - version "2.3.0" - resolved "https://registry.npmmirror.com/messageformat/-/messageformat-2.3.0.tgz#de263c49029d5eae65d7ee25e0754f57f425ad91" - dependencies: - make-plural "^4.3.0" - messageformat-formatters "^2.0.1" - messageformat-parser "^4.1.2" - methods@^1.1.2: version "1.1.2" resolved "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -17423,7 +17788,7 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: +micromatch@^4.0.0, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" dependencies: @@ -17517,7 +17882,7 @@ minimatch@3.0.4: dependencies: brace-expansion "^1.1.7" -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" dependencies: @@ -17537,7 +17902,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@~1.2.5, minimist@~1.2.7: +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@~1.2.5, minimist@~1.2.7: version "1.2.8" resolved "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" @@ -17661,7 +18026,7 @@ mkdirp-infer-owner@^2.0.0: infer-owner "^1.0.4" mkdirp "^1.0.3" -mkdirp@1.0.4, mkdirp@1.x, mkdirp@^1.0.3, mkdirp@^1.0.4: +mkdirp@1.0.4, mkdirp@^1.0.3, mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" @@ -17771,14 +18136,17 @@ multer@^1.4.2: type-is "^1.6.4" xtend "^4.0.0" -multimatch@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" +multer@^1.4.5-lts.1: + version "1.4.5-lts.1" + resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.5-lts.1.tgz#803e24ad1984f58edffbc79f56e305aec5cfd1ac" dependencies: - array-differ "^1.0.0" - array-union "^1.0.1" - arrify "^1.0.0" - minimatch "^3.0.0" + append-field "^1.0.0" + busboy "^1.0.0" + concat-stream "^1.5.2" + mkdirp "^0.5.4" + object-assign "^4.1.1" + type-is "^1.6.4" + xtend "^4.0.0" multimatch@^4.0.0: version "4.0.0" @@ -17921,7 +18289,7 @@ negotiator@0.6.3, negotiator@^0.6.2: version "0.6.3" resolved "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" -neo-async@^2.5.0, neo-async@^2.6.0: +neo-async@^2.6.0: version "2.6.2" resolved "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" @@ -17948,12 +18316,6 @@ node-addon-api@^4.2.0: version "4.3.0" resolved "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" -node-dir@^0.1.17: - version "0.1.17" - resolved "https://registry.npmmirror.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" - dependencies: - minimatch "^3.0.2" - node-domexception@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" @@ -18072,17 +18434,6 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" -node-notifier@^8.0.0: - version "8.0.2" - resolved "https://registry.npmmirror.com/node-notifier/-/node-notifier-8.0.2.tgz#f3167a38ef0d2c8a866a83e318c1ba0efeb702c5" - dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.3.0" - which "^2.0.2" - node-releases@^2.0.12: version "2.0.12" resolved "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" @@ -18127,7 +18478,7 @@ nopt@^5.0.0: dependencies: abbrev "1" -normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: +normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" dependencies: @@ -18272,12 +18623,6 @@ npm-registry-fetch@^9.0.0: minizlib "^2.0.0" npm-package-arg "^8.0.0" -npm-run-path@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-1.0.0.tgz#f5c32bf595fe81ae927daec52e82f8b000ac3c8f" - dependencies: - path-key "^1.0.0" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -18673,10 +19018,6 @@ p-each-series@^1.0.0: dependencies: p-reduce "^1.0.0" -p-each-series@^2.1.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" @@ -18693,7 +19034,7 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-limit@^3.0.2: +p-limit@^3.0.2, p-limit@^3.1.0: version "3.1.0" resolved "https://registry.npmmirror.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" dependencies: @@ -18962,12 +19303,6 @@ parse-github-url@^1.0.2: version "1.0.2" resolved "https://registry.npmmirror.com/parse-github-url/-/parse-github-url-1.0.2.tgz#242d3b65cbcdda14bb50439e3242acf6971db395" -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.npmmirror.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - dependencies: - error-ex "^1.2.0" - parse-json@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -18975,7 +19310,7 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-json@^5.0.0: +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" dependencies: @@ -19069,12 +19404,6 @@ path-exists@3.0.0, path-exists@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - dependencies: - pinkie-promise "^2.0.0" - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -19083,14 +19412,10 @@ path-is-absolute@1.0.1, path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-is-inside@1.0.2, path-is-inside@^1.0.1, path-is-inside@^1.0.2: +path-is-inside@1.0.2, path-is-inside@^1.0.1: version "1.0.2" resolved "https://registry.npmmirror.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" -path-key@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/path-key/-/path-key-1.0.0.tgz#5d53d578019646c0d68800db4e146e6bdc2ac7af" - path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -19125,14 +19450,6 @@ path-to-regexp@^6.1.0: version "6.2.1" resolved "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.2.1.tgz#d54934d6798eb9e5ef14e7af7962c945906918e5" -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - path-type@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -19247,6 +19564,10 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatc version "2.3.1" resolved "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" +pidtree@^0.6.0: + version "0.6.0" + resolved "https://registry.npmmirror.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c" + pidusage@^2.0.21: version "2.0.21" resolved "https://registry.npmmirror.com/pidusage/-/pidusage-2.0.21.tgz#7068967b3d952baea73e57668c98b9eaa876894e" @@ -19259,7 +19580,7 @@ pidusage@~3.0: dependencies: safe-buffer "^5.2.1" -pify@^2.0.0, pify@^2.3.0: +pify@^2.3.0: version "2.3.0" resolved "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -20295,9 +20616,9 @@ prettier@2.2.1: version "2.2.1" resolved "https://registry.npmmirror.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" -prettier@^2.2.1: - version "2.8.8" - resolved "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" +prettier@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.0.0.tgz#e7b19f691245a21d618c68bc54dc06122f6105ae" pretty-error@^4.0.0: version "4.0.0" @@ -20315,15 +20636,6 @@ pretty-format@^24.0.0, pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" -pretty-format@^26.0.0, pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.npmmirror.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" - pretty-format@^27.0.2: version "27.5.1" resolved "https://registry.npmmirror.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" @@ -20340,6 +20652,23 @@ pretty-format@^29.0.0, pretty-format@^29.5.0: ansi-styles "^5.0.0" react-is "^18.0.0" +pretty-format@^29.6.1: + version "29.6.1" + resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.1.tgz#ec838c288850b7c4f9090b867c2d4f4edbfb0f3e" + dependencies: + "@jest/schemas" "^29.6.0" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +pretty-format@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.6.2.tgz#3d5829261a8a4d89d8b9769064b29c50ed486a47" + integrity sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg== + dependencies: + "@jest/schemas" "^29.6.0" + ansi-styles "^5.0.0" + react-is "^18.0.0" + pretty-quick@^3.1.0: version "3.1.3" resolved "https://registry.npmmirror.com/pretty-quick/-/pretty-quick-3.1.3.tgz#15281108c0ddf446675157ca40240099157b638e" @@ -20367,10 +20696,6 @@ prismjs@^1.29.0: version "1.29.0" resolved "https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" -private@~0.1.5: - version "0.1.8" - resolved "https://registry.npmmirror.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -20417,13 +20742,6 @@ promptly@^2: dependencies: read "^1.0.4" -prompts@^1.1.1: - version "1.2.1" - resolved "https://registry.npmmirror.com/prompts/-/prompts-1.2.1.tgz#7fd4116a458d6a62761e3ccb1432d7bbd8b2cb29" - dependencies: - kleur "^3.0.0" - sisteransi "^1.0.0" - prompts@^2.0.1: version "2.4.2" resolved "https://registry.npmmirror.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -20552,6 +20870,10 @@ punycode@^2.1.0, punycode@^2.1.1: version "2.3.0" resolved "https://registry.npmmirror.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" +pure-rand@^6.0.0: + version "6.0.2" + resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz#a9c2ddcae9b68d736a8163036f088a2781c8b306" + q@^1.1.2, q@^1.5.1: version "1.5.1" resolved "https://registry.npmmirror.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -21306,10 +21628,10 @@ react-router-dom@6.3.0, react-router-dom@^6.11.2: react-router "6.14.1" react-router@6.14.1, react-router@6.3.0, react-router@^6.11.2: - version "6.14.1" - resolved "https://registry.npmjs.org/react-router/-/react-router-6.14.1.tgz#5e82bcdabf21add859dc04b1859f91066b3a5810" + version "6.14.2" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.14.2.tgz#1f60994d8c369de7b8ba7a78d8f7ec23df76b300" dependencies: - "@remix-run/router" "1.7.1" + "@remix-run/router" "1.7.2" react-side-effect@^2.1.0: version "2.1.2" @@ -21397,13 +21719,6 @@ read-package-tree@^5.3.1: readdir-scoped-modules "^1.0.0" util-promisify "^2.1.0" -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" @@ -21426,14 +21741,6 @@ read-pkg-up@^7.0.1: read-pkg "^5.2.0" type-fest "^0.8.1" -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -21540,22 +21847,6 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" -recast@^0.16.1: - version "0.16.2" - resolved "https://registry.npmmirror.com/recast/-/recast-0.16.2.tgz#3796ebad5fe49ed85473b479cd6df554ad725dc2" - dependencies: - ast-types "0.11.7" - esprima "~4.0.0" - private "~0.1.5" - source-map "~0.6.1" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - redent@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" @@ -21817,12 +22108,6 @@ repeat-string@^1.5.2, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.npmmirror.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - dependencies: - is-finite "^1.0.0" - replace-ext@^1.0.0: version "1.0.1" resolved "https://registry.npmmirror.com/replace-ext/-/replace-ext-1.0.1.tgz#2d6d996d04a15855d967443631dd5f77825b016a" @@ -21968,11 +22253,15 @@ resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.npmmirror.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + resolve@1.1.7, resolve@~1.1.6: version "1.1.7" resolved "https://registry.npmmirror.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.0.0, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.19.0, resolve@^1.22.1, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1, resolve@~1.22.1: +resolve@^1.0.0, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1, resolve@~1.22.1: version "1.22.2" resolved "https://registry.npmmirror.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" dependencies: @@ -22034,6 +22323,10 @@ reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.npmmirror.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + rgb-regex@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" @@ -22048,7 +22341,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2.6.3, rimraf@~2.6.2: +rimraf@2.6.3: version "2.6.3" resolved "https://registry.npmmirror.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" dependencies: @@ -22257,7 +22550,7 @@ rxjs@^6.4.0, rxjs@^6.6.0: dependencies: tslib "^1.9.0" -rxjs@^7.0.0, rxjs@^7.5.5: +rxjs@^7.0.0, rxjs@^7.5.5, rxjs@^7.8.0: version "7.8.1" resolved "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" dependencies: @@ -22436,12 +22729,22 @@ semver@7.3.7: dependencies: lru-cache "^6.0.0" -semver@7.x, semver@^7.1.1, semver@^7.1.3, semver@^7.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.1: +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + +semver@^7.1.1, semver@^7.1.3, semver@^7.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.1: version "7.5.3" resolved "https://registry.npmmirror.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" dependencies: lru-cache "^6.0.0" +semver@^7.5.3, semver@^7.5.4: + version "7.5.4" + resolved "https://registry.npmmirror.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + dependencies: + lru-cache "^6.0.0" + semver@~7.2.0: version "7.2.3" resolved "https://registry.npmmirror.com/semver/-/semver-7.2.3.tgz#3641217233c6382173c76bf2c7ecd1e1c16b0d8a" @@ -22618,7 +22921,7 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -sisteransi@^1.0.0, sisteransi@^1.0.5: +sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.npmmirror.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -22639,10 +22942,6 @@ slash2@2.0.0, slash2@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/slash2/-/slash2-2.0.0.tgz#f4e0a11708b8545b912695981cf7096f52c63487" -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - slash@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" @@ -22655,6 +22954,29 @@ slash@^4.0.0: version "4.0.0" resolved "https://registry.npmmirror.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + slide@^1.1.6: version "1.1.6" resolved "https://registry.npmmirror.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" @@ -22793,6 +23115,13 @@ source-map-resolve@^0.6.0: atob "^2.1.2" decode-uri-component "^0.2.0" +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-support@0.5.21, source-map-support@^0.5.12, source-map-support@^0.5.16, source-map-support@^0.5.17, source-map-support@^0.5.21, source-map-support@^0.5.6, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" @@ -22987,7 +23316,7 @@ stack-utils@^1.0.1: dependencies: escape-string-regexp "^2.0.0" -stack-utils@^2.0.2, stack-utils@^2.0.3: +stack-utils@^2.0.3: version "2.0.6" resolved "https://registry.npmmirror.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" dependencies: @@ -23087,11 +23416,15 @@ streamsearch@0.1.2: version "0.1.2" resolved "https://registry.npmmirror.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" + strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" -string-argv@~0.3.1: +string-argv@^0.3.1, string-argv@~0.3.1: version "0.3.2" resolved "https://registry.npmmirror.com/string-argv/-/string-argv-0.3.2.tgz#2b6d0ef24b656274d957d54e0a4bbf6153dc02b6" @@ -23148,6 +23481,14 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string-width@^5.0.0: + version "5.1.2" + resolved "https://registry.npmmirror.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + string.prototype.matchall@^4.0.8: version "4.0.8" resolved "https://registry.npmmirror.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" @@ -23232,11 +23573,11 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.npmmirror.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" dependencies: - is-utf8 "^0.2.0" + ansi-regex "^6.0.1" strip-bom@^3.0.0: version "3.0.0" @@ -23264,12 +23605,6 @@ strip-final-newline@^3.0.0: version "3.0.0" resolved "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - dependencies: - get-stdin "^4.0.1" - strip-indent@^2.0.0: version "2.0.0" resolved "https://registry.npmmirror.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" @@ -23284,7 +23619,7 @@ strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -23420,13 +23755,6 @@ supports-color@^8.0.0, supports-color@^8.1.0: dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.3.0" - resolved "https://registry.npmmirror.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" @@ -23504,7 +23832,7 @@ symbol-tree@^3.2.2, symbol-tree@^3.2.4: version "3.2.4" resolved "https://registry.npmmirror.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" -synckit@0.8.5: +synckit@0.8.5, synckit@^0.8.5: version "0.8.5" resolved "https://registry.npmmirror.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" dependencies: @@ -23626,12 +23954,6 @@ temp-write@^4.0.0: temp-dir "^1.0.0" uuid "^3.3.2" -temp@^0.8.1: - version "0.8.4" - resolved "https://registry.npmmirror.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2" - dependencies: - rimraf "~2.6.2" - tencentcloud-sdk-nodejs@^4.0.525: version "4.0.634" resolved "https://registry.npmmirror.com/tencentcloud-sdk-nodejs/-/tencentcloud-sdk-nodejs-4.0.634.tgz#c6ea98d2bc2fb8ee6d164edd819b78f641c51ce2" @@ -23649,13 +23971,6 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.npmmirror.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - ternary-stream@^2.0.1: version "2.1.1" resolved "https://registry.npmmirror.com/ternary-stream/-/ternary-stream-2.1.1.tgz#4ad64b98668d796a085af2c493885a435a8a8bfc" @@ -23729,10 +24044,6 @@ throat@^4.0.0: version "4.1.0" resolved "https://registry.npmmirror.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.npmmirror.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - throttle-debounce@^5.0.0: version "5.0.0" resolved "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.0.tgz#a17a4039e82a2ed38a5e7268e4132d6960d41933" @@ -23961,10 +24272,6 @@ trim-lines@^3.0.0: version "3.0.1" resolved "https://registry.npmmirror.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.npmmirror.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" @@ -23977,24 +24284,40 @@ trough@^2.0.0: version "2.1.0" resolved "https://registry.npmmirror.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876" +ts-api-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.npmmirror.com/ts-api-utils/-/ts-api-utils-1.0.1.tgz#8144e811d44c749cd65b2da305a032510774452d" + ts-dedent@^2.2.0: version "2.2.0" resolved "https://registry.npmmirror.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" -ts-jest@^26.0.0: - version "26.5.6" - resolved "https://registry.npmmirror.com/ts-jest/-/ts-jest-26.5.6.tgz#c32e0746425274e1dfe333f43cd3c800e014ec35" +ts-jest@^29.0.0: + version "29.1.1" + resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz#f58fe62c63caf7bfcc5cc6472082f79180f0815b" dependencies: bs-logger "0.x" - buffer-from "1.x" fast-json-stable-stringify "2.x" - jest-util "^26.1.0" - json5 "2.x" - lodash "4.x" + jest-util "^29.0.0" + json5 "^2.2.3" + lodash.memoize "4.x" make-error "1.x" - mkdirp "1.x" - semver "7.x" - yargs-parser "20.x" + semver "^7.5.3" + yargs-parser "^21.0.1" + +ts-jest@^29.1.1: + version "29.1.1" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.1.tgz#f58fe62c63caf7bfcc5cc6472082f79180f0815b" + integrity sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^29.0.0" + json5 "^2.2.3" + lodash.memoize "4.x" + make-error "1.x" + semver "^7.5.3" + yargs-parser "^21.0.1" ts-loader@^7.0.4: version "7.0.5" @@ -24103,9 +24426,9 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -tsx@^3.12.2: +tsx@^3.12.2, tsx@^3.12.7: version "3.12.7" - resolved "https://registry.npmmirror.com/tsx/-/tsx-3.12.7.tgz#b3b8b0fc79afc8260d1e14f9e995616c859a91e9" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-3.12.7.tgz#b3b8b0fc79afc8260d1e14f9e995616c859a91e9" dependencies: "@esbuild-kit/cjs-loader" "^2.4.2" "@esbuild-kit/core-utils" "^3.0.0" @@ -24788,7 +25111,7 @@ uuid@^3.2.1, uuid@^3.3.2: version "3.4.0" resolved "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" -uuid@^8.2.0, uuid@^8.3.0, uuid@^8.3.2: +uuid@^8.2.0, uuid@^8.3.2: version "8.3.2" resolved "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" @@ -24813,13 +25136,13 @@ v8-compile-cache@2.3.0: version "2.3.0" resolved "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" -v8-to-istanbul@^7.0.0: - version "7.1.2" - resolved "https://registry.npmmirror.com/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz#30898d1a7fa0c84d225a2c1434fb958f290883c1" +v8-to-istanbul@^9.0.1: + version "9.1.0" + resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" dependencies: + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" - source-map "^0.7.3" validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" @@ -25190,7 +25513,7 @@ which-typed-array@^1.1.9: has-tostringtag "^1.0.0" is-typed-array "^1.1.10" -which@^1.2.12, which@^1.2.8, which@^1.2.9, which@^1.3.0, which@^1.3.1: +which@^1.2.12, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.npmmirror.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: @@ -25336,7 +25659,7 @@ write-file-atomic@2.4.1: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-file-atomic@^2.0.0, write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: +write-file-atomic@^2.0.0, write-file-atomic@^2.4.2: version "2.4.3" resolved "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" dependencies: @@ -25544,6 +25867,10 @@ yaml@^1.10.0, yaml@^1.10.2: version "1.10.2" resolved "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" +yaml@^2.2.2: + version "2.3.1" + resolved "https://registry.npmmirror.com/yaml/-/yaml-2.3.1.tgz#02fe0975d23cd441242aa7204e09fc28ac2ac33b" + yamljs@0.3.0: version "0.3.0" resolved "https://registry.npmmirror.com/yamljs/-/yamljs-0.3.0.tgz#dc060bf267447b39f7304e9b2bfbe8b5a7ddb03b" @@ -25576,18 +25903,11 @@ yargs-parser@20.2.4: version "20.2.4" resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" -yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: +yargs-parser@^20.2.2, yargs-parser@^20.2.3: version "20.2.9" resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^21.1.1: +yargs-parser@^21.0.1, yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" @@ -25606,22 +25926,6 @@ yargs@^13.3.0: y18n "^4.0.0" yargs-parser "^13.1.2" -yargs@^15.4.1: - version "15.4.1" - resolved "https://registry.npmmirror.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - yargs@^16.2.0: version "16.2.0" resolved "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"